布林线均值回归

时间:2025-04-09 08:47:18
  • # coding=utf-8
  • from __future__ import print_function, absolute_import
  • from import *
  • """
  • 本策略采用布林线进行均值回归交易。当价格触及布林线上轨的时候进行卖出,当触及下轨的时候,进行买入。
  • 使用600004在 2009-09-17 13:00:00 到 2020-03-21 15:00:00 进行了回测。
  • 注意: 
  • 1:实盘中,如果在收盘的那一根bar或tick触发交易信号,需要自行处理,实盘可能不会成交。
  • """
  • # 策略中必须有init方法
  • def init(context):
  •     # 设置布林线的三个参数
  •     = 26  # 计算BOLL布林线中轨的参数
  •     = 26  # 计算BOLL 标准差的参数
  •     = 1  # 计算BOLL 上下轨和中轨距离的参数
  •     # 设置要进行回测的合约
  •     = 'SHSE.600004'  # 订阅&交易标的, 此处订阅的是600004
  •     = max(, , ) + 1  # 订阅数据滑窗长度
  •     # 订阅行情
  •     subscribe(symbols= , frequency='1d', count=)
  • def on_bar(context, bars):
  •     # 获取数据滑窗,只要在init里面有订阅,在这里就可以取的到,返回值是
  •     data = context.data(symbol=, frequency='1d', count=, fields='close')
  •     # 计算boll的上下界
  •     bollUpper = data['close'].rolling().mean() \
  •                 + * data['close'].rolling().std()
  •     bollBottom = data['close'].rolling().mean() \
  •                  - * data['close'].rolling().std()
  •     # 获取现有持仓
  •     pos = ().position(symbol=, side=PositionSide_Long)
  •     # 交易逻辑与下单
  •     # 当有持仓,且股价穿过BOLL上界的时候卖出股票。
  •     if data.close.values[-1] > bollUpper.values[-1] and data.close.values[-2] < bollUpper.values[-2]:
  •         if pos:  # 有持仓就市价卖出股票。
  •             order_volume(symbol=, volume=100, side=OrderSide_Sell,
  •                          order_type=OrderType_Market, position_effect=PositionEffect_Close)
  •             print('以市价单卖出一手')
  •     # 当没有持仓,且股价穿过BOLL下界的时候买出股票。
  •     elif data.close.values[-1] < bollBottom.values[-1] and data.close.values[-2] > bollBottom.values[-2]:
  •         if not pos:  # 没有持仓就买入一百股。
  •             order_volume(symbol=, volume=100, side=OrderSide_Buy,
  •                          order_type=OrderType_Market, position_effect=PositionEffect_Open)
  •             print('以市价单买入一手')
  • if __name__ == '__main__':
  •     '''
  •         strategy_id策略ID,由系统生成
  •         filename文件名,请与本文件名保持一致
  •         mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST
  •         token绑定计算机的ID,可在系统设置-密钥管理中生成
  •         backtest_start_time回测开始时间
  •         backtest_end_time回测结束时间
  •         backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
  •         backtest_initial_cash回测初始资金
  •         backtest_commission_ratio回测佣金比例
  •         backtest_slippage_ratio回测滑点比例
  •         '''
  •     run(strategy_id='strategy_id',
  •         filename='',
  •         mode=MODE_BACKTEST,
  •         token='{{token}}',
  •         backtest_start_time='2009-09-17 13:00:00',
  •         backtest_end_time='2020-03-21 15:00:00',
  •         backtest_adjust=ADJUST_PREV,
  •         backtest_initial_cash=1000,
  •         backtest_commission_ratio=0.0001,backtest_slippage_ratio=0.0001)