| 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 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 Estimated Strategy Capacity $0 Lowest Capacity Asset |
# region imports
from AlgorithmImports import *
# endregion
class CryingYellowJaguar(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2022, 7, 3) # Set Start Date
self.SetEndDate(2022, 7, 4)
self.SetCash(100000) # Set Strategy Cash
#pair = "US30USD"
self.pair = self.AddCfd("US30USD", Resolution.Second, Market.Oanda).Symbol
#Custom Weekly Consolidator
w = QuoteBarConsolidator(self.CustomWeeklyConsolidator)
w.DataConsolidated += self.OnDataCustomWeekly
#History Call
#Re the following call, if, say, you call it on June 26th, it will give you all day bars from June 5th to June 26th.
#That does not mean you will get 21 day bars as a result... You won't get bars on Saturdays, for instance
#Just so you know.
history = self.History(self.pair, timedelta(21), Resolution.Daily) #history call for three weeks
for index, row in history.iterrows(): #create bars from returned dataframe
quote_bar = QuoteBar(index[1] - timedelta(1), self.pair, Bar(row.bidopen, row.bidhigh, row.bidlow, row.bidclose), 0.0, Bar(row.askopen, row.askhigh, row.asklow, row.askclose), 0.0, timedelta(1))
self.Log(quote_bar.EndTime)
w.Update(quote_bar)
def OnData(self, data):
pass
def OnDataCustomWeekly(self, sender, dataCustomDayStart):
self.Log("Weekly Hello")
self.Log(f'O: {dataCustomWeekly.Open} H: {dataCustomWeekly.High} L: {dataCustomWeekly.Low} C: {dataCustomWeekly.Close}')
def CustomWeeklyConsolidator(self, dt: datetime) -> CalendarInfo:
#Custom Weekly On Futures / Forex Time 17h start
#From https://www.quantconnect.com/docs/v2/writing-algorithms/consolidating-data/consolidator-types#02-Time-Period-Consolidators
#This code seeks to consolidate data between Sundays at 17:00:00:0.0
#So a week is considered between Sunday 17:00:00:0.0 (inclusive) and the next Sunday 17:00:00:0.0 (exclusive - the last tick I mean)
#Just so you know again.
#For your use case, it seems ok.
#But you can have incomplete weeks, of course. If the data starts on a Wednesday, say, that Wednesday, plus Thursday-Friday and Sunday until 17h00
#is going to go in the first weekly bar. Then, it IS a weekly bar, but backed with less data than the full week.
period = timedelta(7)
dt = dt.replace(hour=17, minute=0, second=0, microsecond=0)
delta = 1+dt.weekday()
if delta > 6:
delta = 0
start = dt-timedelta(delta)
return CalendarInfo(start, period)
# region imports
from AlgorithmImports import *
# endregion
class CryingYellowJaguar(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2022, 7, 3) # Set Start Date
self.SetEndDate(2022, 7, 4)
self.SetCash(100000) # Set Strategy Cash
#pair = "US30USD"
self.pair = self.AddCfd("US30USD", Resolution.Second, Market.Oanda).Symbol
#Custom Weekly Consolidator
w = QuoteBarConsolidator(self.CustomWeeklyConsolidator)
w.DataConsolidated += self.OnDataCustomWeekly
#History Call
#timedelta is 21 calendar days, otherwise is 21 daily bars
#problem was arising from not using timedelta
###Re the following call, if, say, you call it on June 26th, it will give you all day bars from June 5th to June 26th.
#That does not mean you will get 21 day bars as a result... You won't get bars on Saturdays, for instance
#Just so you know.
history = self.History(self.pair, timedelta(days=21), Resolution.Hour) #history call for three weeks
for index, row in history.iterrows(): #create bars from returned dataframe
quote_bar = QuoteBar(index[1] - timedelta(1), self.pair, Bar(row.bidopen, row.bidhigh, row.bidlow, row.bidclose), 0.0, Bar(row.askopen, row.askhigh, row.asklow, row.askclose), 0.0, timedelta(1))
#self.Log(quote_bar.EndTime)
w.Update(quote_bar)
def OnData(self, data):
pass
def OnDataCustomWeekly(self, sender, dataCustomWeekly):
self.Log("Weekly Hello")
self.Log(f'O: {dataCustomWeekly.Open} H: {dataCustomWeekly.High} L: {dataCustomWeekly.Low} C: {dataCustomWeekly.Close}')
def CustomWeeklyConsolidator(self, dt: datetime) -> CalendarInfo:
#Custom Weekly On Futures / Forex Time 17h start
#From https://www.quantconnect.com/docs/v2/writing-algorithms/consolidating-data/consolidator-types#02-Time-Period-Consolidators
#This code seeks to consolidate data between Sundays at 17:00:00:0.0
#So a week is considered between Sunday 17:00:00:0.0 (inclusive) and the next Sunday 17:00:00:0.0 (exclusive - the last tick I mean)
#Just so you know again.
#For your use case, it seems ok.
#But you can have incomplete weeks, of course. If the data starts on a Wednesday, say, that Wednesday, plus Thursday-Friday and Sunday until 17h00
#is going to go in the first weekly bar. Then, it IS a weekly bar, but backed with less data than the full week.
period = timedelta(7)
dt = dt.replace(hour=17, minute=0, second=0, microsecond=0)
delta = 1+dt.weekday()
if delta > 6:
delta = 0
start = dt-timedelta(delta)
return CalendarInfo(start, period)