股票策略模版
初始化函数,全局只运行一次
def init(context):
设置基准收益:沪深300指数
set_benchmark('000300.SH')
打印日志
log.info('策略开始运行,初始化函数全局只运行一次')
设置股票每笔交易的手续费为万分之二(手续费在买卖成交后扣除,不包括税费,税费在卖出成交后扣除)
set_commission(PerShare(type='stock',cost=0.0002))
设置股票交易滑点0.5%,表示买入价为实际价格乘1.005,卖出价为实际价格乘0.995
set_slippage(PriceSlippage(0.005))
设置日级最大成交比例25%,分钟级最大成交比例50%
日频运行时,下单数量超过当天真实成交量25%,则全部不成交
分钟频运行时,下单数量超过当前分钟真实成交量50%,则全部不成交
#set_volume_limit(0.25,0.5)
设置要操作的股票:同花顺
context.security = '603212.SH'
回测区间、初始资金、运行频率请在右上方设置
#每日开盘前9:00被调用一次,用于储存自定义参数、全局变量,执行盘前选股等
def before_trading(context):
获取日期
date = get_datetime().strftime('%Y-%m-%d %H:%M:%S')
打印日期
log.info('{} 盘前运行'.format(date))
开盘时运行函数
def handle_bar(context, bar_dict):
获取时间
time = get_datetime().strftime('%Y-%m-%d %H:%M:%S')
打印时间
log.info('{} 盘中运行'.format(time))
策略参数
context.trend_window = 4 # EMA计算周期
context.buy_threshold = 0.0495 # 买入阈值
context.sell_threshold = 3.6 # 卖出阈值
主处理函数
def handle_data(context, data):
stock = context.stock_code
prices = data.history_bars(stock, 250, '1d', ['close','high','low']) # 获取250天数据
计算指标
low_100 = talib.MIN(prices.low, 100)[-1] # LLV(LOW,100)
high_250 = talib.MAX(prices.high, 250)[-1] # HHV(HIGH,250)
防止除零异常
denominator = high_250 - low_100
if denominator == 0:
return
计算趋势值
raw_value = (prices.close[-1] - low_100) / denominator * 4
trend_value = talib.EMA(np.array([raw_value]), context.trend_window)[-1]
获取当前持仓
position = context.portfolio.positions[stock].quantity
交易逻辑
if trend_value < context.buy_threshold and position == 0:
# 全仓买入
order_value(stock, context.portfolio.cash)
log.info(' 买入信号触发,趋势值={:.4f}'.format(trend_value))
elif trend_value > context.sell_threshold and position > 0:
# 全仓卖出
order_target(stock, 0)
log.info(' 卖出信号触发,趋势值={:.4f}'.format(trend_value))
def after_trading(context):
获取时间
time = get_datetime().strftime('%Y-%m-%d %H:%M:%S')
打印时间
log.info('{} 盘后运行'.format(time))
log.info('一天结束')