原文策略源码如下:
#海归策略升级版
导入函数库
from jqdata import *
#入市 20日最高值 需考虑先平仓
#离市 反向5%
#加仓 涨0.5N
#止损 跌2N
初始化函数,设定基准等等
def initialize(context):
===标的选择
g.symbol='CU'
set_benchmark(get_future_code(g.symbol))
# set_option('futures_margin_rate', 0.06)
设置:是否合约到期移仓,策略频率===
g.shift=True # 是否进行合约移仓
g.frequency='1m' #【注意】分钟回测用'1m',天回测用'1d'
设定账户为金融账户
set_subportfolios([SubPortfolioConfig(cash=context.portfolio.starting_cash, type='index_futures')])
set_order_cost(OrderCost(open_commission=0.000023, close_commission=0.000023,close_today_commission=0.0023), type='index_futures')
set_slippage(FixedSlippage(0))
set_option('use_real_price', True) # 开启动态复权模式(真实价格)
log.set_level('order', 'error') # 过滤掉order系列API产生的比error级别低的log
g.N=20 #通道长度
g.limit=4 #最多加4次仓
g.position=0 #持有头寸
g.add=0 #加仓次数
g.lastprice=0 #上一次成交价格
g.markprice=0 #记录极限价格
g.lastfuture=None
g.contract_change=False
run_daily(before_market_open, time='before_open', reference_security=get_future_code(g.symbol))
run_daily(while_open, time='every_bar', reference_security=get_future_code(g.symbol))
开盘前运行函数
def before_market_open(context):
得到主力合约
g.future=get_dominant_future(g.symbol)
price=attribute_history(g.future,g.N+1,'1d',('open','high','low','close'))
g.upperbound=max(price['high'].iloc[1:].dropna()) #如果主力合约是下月的,换合约时,回取数据不到20天。
g.lowerbound=min(price['low