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 -2.621 Tracking Error 0.096 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
from datetime import datetime, timedelta class QuantumHorizontalChamber(QCAlgorithm): def Initialize(self): # dictionary to save checking for each symbol if their first bar is passed self.begun = {} # dictionary to hold consolidator for each symbol self.consolidator = {} self.SetStartDate(2021, 6, 15) # Set Start Date self.SetCash(100000) # Set Strategy Cash self.symbols = ["EURUSD", "GBPUSD"] for symbol in self.symbols: self.AddForex(symbol, Resolution.Minute) # Custom consolidator self.consolidator[symbol] = QuoteBarConsolidator(self.CustomDaily) self.consolidator[symbol].DataConsolidated += self.CustomDailyHandler self.SubscriptionManager.AddConsolidator(symbol, self.consolidator[symbol]) # haven't pass first bar self.begun[symbol] = False # we set a warmup period for the first bar self.SetWarmUp(timedelta(hours=17)) def CustomDaily(self, dt): '''Custom Monthly Func''' # after the first bar of all, we concolidate every 4 hours if all([value for value in self.begun.values()]): return CalendarInfo(dt, timedelta(hours=4)) else: # first bar will consolidate at current day's 1700 return CalendarInfo(dt, dt.replace(hour=17) - dt) def CustomDailyHandler(self, sender, consolidated): '''This is our event handler Custom Daily function''' self.Log(f"{consolidated.Time} >> {consolidated.EndTime} >> {consolidated.Symbol} >> {consolidated.Close}") # marked we've passed the first bar of this symbol self.begun[consolidated.Symbol.Value] = True