交易系统的移动平均策略调用函数的逻辑是什么?

Connor 欧易交易所 2022-09-20 277 0

策略基于简单的移动平均数方法(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].

评论