当短期均线上穿长期均线,出现金叉,买入
当短期均线下穿长期均线,出现死叉,卖出
# 股票选择
instruments = ['600519.SHA']
# 开始时间
start_date = '2012-05-29'
# 结束时间
end_date = '2017-11-08'
# 初始化账户
def initialize(context):
context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5)) # 设置手续费,买入成本为万分之三,卖出为千分之1.3
context.short_period = 5 # 短期均线
context.long_period = 50 # 长期均线
def handle_data(context, data):
# 长期均线值要有意义,需要在50根k线之后
if context.trading_day_index < context.long_period:
return
k = instruments[0] # 标的为字符串格式
sid = context.symbol(k) # 将标的转化为equity格式
price = data.current(sid, 'price') # 最新价格
short_mavg = data.history(sid, 'price',context.short_period, '1d').mean() # 短期均线值
long_mavg = data.history(sid, 'price',context.long_period, '1d').mean() # 长期均线值
cash = context.portfolio.cash # 现金
cur_position = context.portfolio.positions[sid].amount # 持仓
# 交易逻辑
# 如果短期均线大于长期均线形成金叉,并且没有持仓,并且该股票可以交易
if short_mavg > long_mavg and cur_position == 0 and data.can_trade(sid):
context.order(sid, int(cash/price/100)*100) # 买入
# 如果短期均线小于长期均线形成死叉,并且有持仓,并且该股票可以交易
elif short_mavg < long_mavg and cur_position > 0 and data.can_trade(sid):
context.order_target_percent(sid, 0) # 全部卖出
m=M.trade.v3(
instruments=instruments,
start_date=start_date,
end_date=end_date,
initialize=initialize,
handle_data=handle_data,
order_price_field_buy='open', # 以开盘价买入
order_price_field_sell='open', # 以开盘价卖出
capital_base=1000000, # 本金
)