【策略分享】 高于MA10买入低于MA20卖出回测半年

用户头像Sta***yXk
2023-06-07 发布
# 初始化函数,设定要操作的股票、基准等等
def init(context):
    # 定义一个全局变量, 保存要操作的股票
    # 000001(股票:平安银行)
    g.security = '000333.SZ'
    # 设定沪深300作为基准
    set_benchmark('000300.SH')
    # 开启动态复权模式(真实价格)

# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
def handle_bar(context,bar_dict):
    # 获取股票的收盘价
    security = g.security
    close_data1 = history(g.security, ['close'], 20, '1d')
    close_data2 = history(g.security, ['close'], 10, '1d')
    # 取得过去五天的平均价格
    MA10 = close_data2['close'].mean()
    MA5 = close_data1['close'].mean()
    # 取得上一时间点价格
    MA1 = close_data1['close'].iloc[-1:] .mean()
    # 取得当前的现金
    cash = context.portfolio.stock_account.available_cash
    # 获取当前账户当前持仓市值
    market_value = context.portfolio.stock_account.market_value
    # 如果上一时间点价格高出五天平均价1%, 则全仓买入
    if MA1 > 1.01*MA10:
        # 用所有 cash 买入股票
        order_value(g.security, cash)
        # 记录这次买入
        log.info("Buying %s" % (g.security))
    # 如果上一时间点价格低于五天平均价, 则空仓卖出
    elif MA1 > MA5 and market_value > 0:
        # 卖出所有股票,使这只股票的最终持有量为0
        order_target(g.security, 0)
        # 记录这次卖出
        log.info("Selling %s" % (g.security))
    # 画出上一时间点价格
    record(stock_price=MA1)

评论