该策略由聚宽用户分享，仅供学习交流使用。
原文网址：https://www.joinquant.com/post/13156

原文一般包含策略说明，如有疑问建议到原文和作者交流讨论。


原文策略源码如下：

# 导入函数库
import jqdata
import talib 

# 初始化函数，设定基准等等
def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 输出内容到日志 log.info()
    log.info('初始函数开始运行且全局只运行一次')
    # 过滤掉order系列API产生的比error级别低的log
    # log.set_level('order', 'error')
    
    ### 股票相关设定 ###
    # 股票类每笔交易时的手续费是：买入时佣金万分之三，卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    
    ## 运行函数（reference_security为运行时间的参考标的；传入的标的只做种类区分，因此传入'000300.XSHG'或'510300.XSHG'是一样的）
      # 开盘前运行
    run_daily(before_market_open, time='before_open', reference_security='000300.XSHG') 
      # 开盘时运行
    run_daily(market_open, time='open', reference_security='000300.XSHG')
      # 收盘后运行
    run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')
    
## 开盘前运行函数     
def before_market_open(context):
    # 输出运行时间
    log.info('函数运行时间(before_market_open)：'+str(context.current_dt.time()))

    # 给微信发送消息（添加模拟交易，并绑定微信生效）
    send_message('美好的一天~')

    # 要操作的股票：平安银行（g.为全局变量）
    g.security = '600519.XSHG'
    
## 开盘时运行函数
def market_open(context):
    log.info('函数运行时间(market_open):'+str(context.current_dt.time()))
    security = g.security
    # 获取股票的收盘价
    h= attribute_history(security, 25, '1d', ['high','low','close'])
    
    #获取可以资金
    cash=context.portfolio.available_cash
    
    #计算布林带上轨，中轨，下轨
    upper,middle,lower=talib.BBANDS(
        h['close'].values,
        timeperiod=20,
        nbdevup=2,
        nbdevdn=2,
        matype=0)
    #获取当前仓位信息   
    current_position=context.portfolio.positions[security].amount
    
    #获取当前股价
    current_price=h['close'][-1]
    
    if current_price>upper[-1] and current_position>=0:
        order_target_value(security,cash)
        
    elif current_price<lower[-1] and current_position <=0:
        order_value(security,0)
        
    record(upper=upper[-1],
    lower=lower[-1],
    mean=middle[-1],
    price=current_price,
    position_size=current_position)
    
    
    
    
    
    
    
    
    
    
    
    
## 收盘后运行函数  
def after_market_close(context):
    log.info(str('函数运行时间(after_market_close):'+str(context.current_dt.time())))
    #得到当天所有成交记录
    trades = get_trades()
    for _trade in trades.values():
        log.info('成交记录：'+str(_trade))
    log.info('一天结束')
    log.info('##############################################################')
