This is a continuation of Last time.
LESSON 7 Scheduling Functions
Trading Calendars I will skip it, and I will explain when futures come out.
Scheduling Functions
So far, we have used handle_data ()
as the timing to execute the algorithm. This is done every minute, but if you trade every minute you're likely to go bankrupt easily with a fee.
As a matter of course, you may want to process daily or monthly. The schedule_function ()
function can schedule the algorithm at a specified frequency.
position | Keyword arguments | value |
---|---|---|
1 | func | Function name to execute |
2 | date_rules | Daily rules |
3 | time_rules | Hourly rules |
The code below runs the rebalance ()
function every day, one hour after the start of trading [^ 1].
schedule_function(func=rebalance,
date_rules=date_rules.every_day(),
time_rules=time_rules.market_open(hours=1))
Once again, the instances date_rules
and time_rules
suddenly popped up even though they didn't define anything ... this also seems to be Quantopian's own rules.
The date_rules
and time_rules
objects have the following methods.
date_rules
time_rules
The code below runs the weekly_trades ()
function 30 minutes before the end of each weekend.
schedule_function(weekly_trades, date_rules.week_end(), time_rules.market_close(minutes=30))
The code below extends SPY by 10% of the portfolio at the beginning of the week and closes positions 30 minutes before the end of the weekend trading. The code can be cloned from here (https://www.quantopian.com/tutorials/getting-started#lesson7).
def initialize(context):
context.spy = sid(8554)
schedule_function(open_positions, date_rules.week_start(), time_rules.market_open())
schedule_function(close_positions, date_rules.week_end(), time_rules.market_close(minutes=30))
def open_positions(context, data):
order_target_percent(context.spy, 0.10)
def close_positions(context, data):
order_target_percent(context.spy, 0)
schedule_function ()
is skipped if the market is closed. You can also skip half-day transactions by setting half_days = False
.
When dealing with financial data, handling holidays is very troublesome, so I'm grateful for this area.
[^ 1]: time_rules.market_open ()
normally returns 9:30 (ET: Eastern Standard Time).
Recommended Posts