| Overall Statistics |
|
Total Orders 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Start Equity 100000 End Equity 100000 Net Profit 0% Sharpe Ratio 0 Sortino 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 Portfolio Turnover 0% |
# region imports
from AlgorithmImports import *
from datetime import timezone
# endregion
class CustomTimeRuleAlgorithm(QCAlgorithm):
def initialize(self):
self.set_start_date(2021, 1, 4)
self.set_end_date(2021, 1, 5)
self.set_cash(100000)
self.add_equity("SPY", Resolution.MINUTE)
self.use_extended_hrs = False # Set to True if you want to use extended market hours
# Schedule an event using the custom time rule
self.schedule.on(
self.date_rules.every_day("SPY"),
self.custom_time_rule("SPY", timedelta(minutes=5)),
self.my_scheduled_function
)
def custom_time_rule(self, symbol, interval):
# Define the custom time rule using FuncTimeRule with a lambda function
return FuncTimeRule(
name="EveryIntervalDuringMarketHours",
createUtcEventTimesFunction=lambda dates: [
dt for date in dates
for dt in self.get_custom_times(symbol, date, interval)
]
)
def get_custom_times(self, symbol, date, interval):
# Get market open and close times for the specified date
exchange = self.securities[symbol].exchange
market_open = exchange.hours.get_next_market_open(date, self.use_extended_hrs)
market_close = exchange.hours.get_next_market_close(market_open, self.use_extended_hrs)
# Convert market times from EST to UTC
market_open = market_open.replace(tzinfo=timezone(timedelta(hours=-5))).astimezone(timezone.utc)
market_close = market_close.replace(tzinfo=timezone(timedelta(hours=-5))).astimezone(timezone.utc)
# Generate times every 'interval' minutes between market open and close
times = []
current_time = market_open
while current_time < market_close:
times.append(current_time)
current_time += interval
return times
def my_scheduled_function(self):
self.log(f"Executed at: {self.time}")
self.debug(f"Executed at: {self.time}")