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
-15.768
Tracking Error
0.086
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
    gold_thirtyMinute = None
    naturalgas_thirtyMinute = None
    def Initialize(self):
        
        self.SetTimeZone("Europe/London")
        
        self.SetBrokerageModel(BrokerageName.OandaBrokerage)
        
        self.SetStartDate(2020, 7, 15)  #Set Start Date
        self.SetEndDate(datetime.now())  #Set End Date
        
        self.wticousd = self.AddCfd("WTICOUSD", Resolution.Minute, Market.Oanda)
        self.gold = self.AddCfd("XAUUSD", Resolution.Minute, Market.Oanda)
        self.natgasusd = self.AddCfd("NATGASUSD", Resolution.Minute, Market.Oanda)
        
        self.wticousd.SetDataNormalizationMode(DataNormalizationMode.Raw)
        self.gold.SetDataNormalizationMode(DataNormalizationMode.Raw)
        self.natgasusd.SetDataNormalizationMode(DataNormalizationMode.Raw)
        
        #WEST TEXAS
        thirtyMinuteConsolidator = QuoteBarConsolidator(timedelta(minutes=15))
        thirtyMinuteConsolidator.DataConsolidated += self.ThirtyMinuteQuoteBarHandler
        self.SubscriptionManager.AddConsolidator("WTICOUSD", thirtyMinuteConsolidator)
        
        #GOLD
        gold_thirtyMinuteConsolidator = QuoteBarConsolidator(timedelta(minutes=15))
        gold_thirtyMinuteConsolidator.DataConsolidated += self.gold_ThirtyMinuteQuoteBarHandler
        self.SubscriptionManager.AddConsolidator("XAUUSD", gold_thirtyMinuteConsolidator)
        
        #NATURAL GAS
        naturalgas_thirtyMinuteConsolidator = QuoteBarConsolidator(timedelta(minutes=15))
        naturalgas_thirtyMinuteConsolidator.DataConsolidated += self.naturalgas_ThirtyMinuteQuoteBarHandler
        self.SubscriptionManager.AddConsolidator("NATGASUSD", naturalgas_thirtyMinuteConsolidator)
        
        self.sto_wti = Stochastic("WTICOUSD", 350, 21, 21) 
        self.cci_wti = CommodityChannelIndex("WTICOUSD", 175)
        self.sto_gold = Stochastic("XAUUSD", 172, 21, 95)
        self.cci_gold = CommodityChannelIndex("XAUUSD", 200)
        self.sto_naturalgas = Stochastic("NATGASUSD", 210, 21, 260)
        self.cci_naturalgas = CommodityChannelIndex("NATGASUSD", 200)
        
        self.PlotIndicator("Indicator-WTICOUSD ", self.sto_wti.StochD)
        self.PlotIndicator("Indicator-CommodityChannelIndex_WTI ", self.cci_wti)#TypicalPriceAverage)
        self.PlotIndicator("Indicator-XAUUSD ", self.sto_gold.StochD)
        self.PlotIndicator("Indicator-CommodityChannelIndex_GOLD", self.cci_gold)#TypicalPriceAverage)
        self.PlotIndicator("Indicator-NATGASUSD ", self.sto_naturalgas.StochD)
        self.PlotIndicator("Indicator-CommodityChannelIndex_GOLD", self.cci_naturalgas)#TypicalPriceAverage)
        
        self.SetWarmup((210+21+260)*15, Resolution.Minute)

    def ThirtyMinuteQuoteBarHandler(self, sender, consolidated):
        self.sto_wti.Update(consolidated)
        self.cci_wti.Update(consolidated)

        sto_value_wti = self.sto_wti.StochD
        cci_value_wti = self.cci_wti.ComputeNextValue

        if self.IsWarmingUp:
            return 

        self.wti_thirtyMinute = consolidated
        
        
    def gold_ThirtyMinuteQuoteBarHandler(self, sender, consolidated):
        self.sto_gold.Update(consolidated)
        self.cci_gold.Update(consolidated)
        
        sto_value_gold = self.sto_gold.StochD
        cci_value_gold = self.cci_gold.TypicalPriceAverage

        if self.IsWarmingUp:
            return 

        self.gold_thirtyMinute = consolidated
    
    def naturalgas_ThirtyMinuteQuoteBarHandler(self, sender, consolidated):
        self.sto_naturalgas.Update(consolidated)
        self.cci_naturalgas.Update(consolidated)
        
        sto_value_naturalgas = self.sto_naturalgas.StochD
        cci_value_naturalgas = self.cci_naturalgas.TypicalPriceAverage
        
        if self.IsWarmingUp:
            return 
        
        self.naturalgas_thirtyMinute = consolidated