Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -2642.954 Tracking Error 0.013 Treynor Ratio 0 Total Fees $0.00 |
from clr import AddReference AddReference("System") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Common") from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Data.Consolidators import * from datetime import timedelta from QuantConnect.Indicators import CommodityChannelIndex, Stochastic from QuantConnect.Data import Slice class NotebookProject(QCAlgorithm): wti_thirtyMinute = None naturalgas_thirtyMinute = None gold_thirtyMinute = None wticcousd_symbol = "WTICOUSD" naturalgas_symbol = "NATGASUSD" gold_symbol = "XAUUSD" def Initialize(self): self.SetTimeZone("Europe/London") self.SetBrokerageModel(BrokerageName.OandaBrokerage) #self.SetStartDate(DateTime(2020, 6, 18)) #Set Start Date self.SetStartDate(datetime.now() - timedelta(2)) #Set Start Date #self.SetEndDate(DateTime(2020, 6, 19)) #Set End Date self.SetEndDate(datetime.now()) #Set End Date self.wticousd = self.AddCfd("WTICOUSD", Resolution.Minute, Market.Oanda) #self.natgasusd = self.AddCfd(self.naturalgas_symbol, Resolution.Minute, Market.Oanda) #self.gold = self.AddCfd(self.gold_symbol, Resolution.Minute, Market.Oanda) self.wticousd.SetDataNormalizationMode(DataNormalizationMode.Raw) #self.natgasusd.SetDataNormalizationMode(DataNormalizationMode.Raw) #self.gold.SetDataNormalizationMode(DataNormalizationMode.Raw) #WEST TEXAS thirtyMinuteConsolidator = QuoteBarConsolidator(timedelta(minutes=30)) thirtyMinuteConsolidator.DataConsolidated += self.ThirtyMinuteQuoteBarHandler self.SubscriptionManager.AddConsolidator("WTICOUSD", thirtyMinuteConsolidator) #NATURAL GAS #naturalgas_thirtyMinuteConsolidator = QuoteBarConsolidator(timedelta(minutes=30)) #naturalgas_thirtyMinuteConsolidator.DataConsolidated += self.naturalgas_ThirtyMinuteQuoteBarHandler #self.SubscriptionManager.AddConsolidator(self.naturalgas_symbol, naturalgas_thirtyMinuteConsolidator) #GOLD #gold_thirtyMinuteConsolidator = QuoteBarConsolidator(timedelta(minutes=30)) #gold_thirtyMinuteConsolidator.DataConsolidated += self.gold_ThirtyMinuteQuoteBarHandler #self.SubscriptionManager.AddConsolidator(self.naturalgas_symbol, gold_thirtyMinuteConsolidator) self.sto_wti = Stochastic("WTICOUSD", 105, 21, 30) #18, 21, 41 #self.sto_naturalgas = Stochastic(self.naturalgas_symbol, 18, 20, 14) #self.sto_gold = Stochastic(self.gold_symbol, 172, 21, 95) #self.cci = CommodityChannelIndex(self.wticcousd_symbol, 200) #self.RegisterIndicator("WTICOUSD", self.sto, thirtyMinuteConsolidator) #self.RegisterIndicator("WTICOUSD", self.cci, thirtyMinuteConsolidator) self.SetWarmup(200*30, Resolution.Minute) def OnData(self, data): pass def ThirtyMinuteQuoteBarHandler(self, sender, consolidated): self.sto_wti.Update(consolidated) sto_value_wti = self.sto_wti.StochD if self.IsWarmingUp: return #TESTING #if (str(consolidated.Symbol) == "WTICOUSD" and (self.Time.month == 6 and self.Time.day == 18 and self.Time.hour == 9 and self.Time.minute == 0)): #self.Debug(f'{self.Time} >> STO >> {sto_value_wti} CCI >> {cci_value}') #self.Notify.Email("martintolmusk@gmail.com", "WTICOUSD Stochastic above 60", str(sto_value_wti)) # self.Debug(f'{self.Time} >> STO >> {sto_value_wti}') #LIVE #if #float(str(sto_value_wti.Current.Value)) >= float(63): #self.Notify.Email("martintolmusk@gmail.com", "WTICOUSD Stochastic above 63", "Stochastic above") #self.Log(f'{self.Time} STO >> {sto_value_wti.Current.Value}') self.Debug(f'{self.Time} STO >> {sto_value_wti}') #else: # self.Notify.Email("martintolmusk@gmail.com", "Nonsense", "Nonsense email") #self.Log(f'{self.Time} >> STO >> {sto_value_wti.Current.Value} ') #self.Debug(f'{self.Time} >> STO >> {sto_value_wti.Current.Value} ') #self.Debug(f'{self.Time} >> STO >> {consolidated.Symbol}') self.thirtyMinute = consolidated #def naturalgas_ThirtyMinuteQuoteBarHandler(self, sender, consolidated): #self.sto_naturalgas.Update(consolidated) #self.cci.Update(consolidated) #sto_value_natgas = self.sto_naturalgas.StochD #cci_value = self.cci.Current.Value #if self.IsWarmingUp: # return #TESTING #if self.Time.month == 6 and self.Time.day == 18 and self.Time.hour >= 7 and self.Time.hour <= 11: #self.Debug(f'{self.Time} >> STO >> {sto_value_natgas} CCI >> {cci_value}') #self.Notify.Email("martintolmusk@gmail.com", "WTICOUSD Stochastic above 60", str(sto_value_natgas)) #self.Debug(f'{self.Time} >> STO >> {sto_value_natgas}') #LIVE # if consolidated.Symbol == self.naturalgas_symbol and float(str(sto_value_natgas)) >= 62 and float(str(sto_value_natgas)) <= 66: # self.Notify.Email("martintolmusk@gmail.com", "Natural Gas Stochastic above 62", str(sto_value_natgas)) # self.naturalgas_thirtyMinute = consolidated #def gold_ThirtyMinuteQuoteBarHandler(self, sender, consolidated): #self.sto_gold.Update(consolidated) #self.cci.Update(consolidated) #sto_value_gold = self.sto_gold.StochD #cci_value = self.cci.Current.Value #if self.IsWarmingUp: # return #TESTING #if self.Time.month == 6 and self.Time.day == 18 and self.Time.hour >= 7 and self.Time.hour <= 11: #self.Debug(f'{self.Time} >> STO >> {sto_value_gold} CCI >> {cci_value}') #self.Notify.Email("martintolmusk@gmail.com", "WTICOUSD Stochastic above 60", str(sto_value_gold)) #self.Debug(f'{self.Time} >> STO >> {sto_value_gold}') #LIVE #if consolidated.Symbol == self.naturalgas_symbol and float(str(sto_value_gold)) >= 59 and float(str(sto_value_gold)) <= 61: # self.Notify.Email("martintolmusk@gmail.com", "Gold Stochastic BUY between 59 and 61", str(sto_value_gold)) #if consolidated.Symbol == self.naturalgas_symbol and float(str(sto_value_gold)) <= 68 and float(str(sto_value_gold)) >= 66: # self.Notify.Email("martintolmusk@gmail.com", "Gold Stochastic SELL between 66 and 68 - Look to sell", str(sto_value_gold)) #self.gold_thirtyMinute = consolidated