交易系统的移动平均策略调用函数的逻辑是什么?
策略基于简单的移动平均数方法(SMA, Simple Moving Average)。该策略的逻辑可以归纳为以下几步:
(1)当20天的 SMA 价格上升时,买入股份;
(2)当20天的 SMA 价格下降时,卖掉全部股份;
(3)用前19天和当天的数据计算移动平均数,次日执行交易决策;
这是第一次调用预设辅助函数的地方,计算起始日期,以使投资者能在2022年的第一个交易日制定交易决策。
get_start_date('TSLA', '2016-01-04', 19)
# '2015-12-04'
在下面的策略中,我们使用修改后的日期作为起始日期:
%%zipline --start 2015-12-4 --end 2017-12-31 --capital-base 10000.0 -o simple_moving_average.pkl
# imports
from zipline.api import order_percent, record, symbol, order_target
from zipline.finance import commission
# parameters
MA_PERIODS = 20
SELECTED_STOCK = 'TSLA'
def initialize(context):
context.time = 0
context.asset = symbol(SELECTED_STOCK)
context.set_commission(commission.PerShare(cost=0.0, min_trade_cost=0))
context.has_position = False
def handle_data(context, data):
context.time += 1
record(time=context.time)
展开全文
if context.time < MA_PERIODS:
return
price_history = data.history(context.asset, fields="price", bar_count=MA_PERIODS, frequency="1d")
ma = price_history.mean()
# cross up
if (price_history[-2] < ma) & (price_history[-1] > ma) & (not context.has_position):
order_percent(context.asset, 1.0)
context.has_position = True
# cross down
elif (price_history[-2] > ma) & (price_history[-1] < ma) & (context.has_position):
order_target(context.asset, 0)
context.has_position = False
record(price=data.current(context.asset, 'price'),
moving_average=ma)
需注意:data.current(context.asset, ‘price’) 等同于 price_history[-1].
评论