同花顺回测一个动量策略(创业板+纳指)

策略思想
纳指ETF和创业板ETF 20日涨幅大的持有
20日涨幅>0.1%
两个20日涨幅均小于-0.1%则清仓买入招商双债

# 初始化函数,全局只运行一次
def init(context):
    # 设置基准收益:无基准
    set_benchmark('000300.SH')  # 设置一个通用基准,如沪深300指数
    log.info('策略开始运行,初始化函数全局只运行一次')
    # 设置股票每笔交易的手续费为万分之二
    set_commission(PerShare(type='stock', cost=0.0002))
    # # 设置股票交易滑点0.1%
    set_slippage(PriceSlippage(0.001))

    # 设置要操作的标的
    context.security_1 = '513100.SH'  # 513100代码
    context.security_2 = '159915.SZ'  # 159915代码
    context.security_3 = '161716.SZ'  # 招商双债LOF代码
    # 设置观察周期
    context.observation_period = 20  # 20个交易日
    context.threshold_positive = 0.001  # 涨幅阈值0.1%
    context.threshold_negative = -0.001  # 涨幅阈值-0.1%
    # 初始化持仓状态
    context.current_position = None

# 每日开盘时运行函数
def handle_bar(context, bar_dict):
    # 获取两个标的近20日的收盘价数据
    data_1 = history(context.security_1, ['close'], context.observation_period, '1d', skip_paused=False, fq='pre')
    data_2 = history(context.security_2, ['close'], context.observation_period, '1d', skip_paused=False, fq='pre')
    
    # 计算涨幅
    security_1_return = (data_1['close'][-1] / data_1['close'][0] - 1)
    security_2_return = (data_2['close'][-1] / data_2['close'][0] - 1)
    
    # 判断逻辑
    if security_1_return > security_2_return:
        target_security = context.security_1
        target_return = security_1_return
    else:
        target_security = context.security_2
        target_return = security_2_return

    # 检查是否需要调整持仓
    if security_1_return < context.threshold_negative and security_2_return < context.threshold_negative:
        # 如果两个标的涨幅都小于-0.1%,则清仓当前持仓,买入招商双债
        if context.current_position != context.security_3:
            log.info("两个标的涨幅都小于-0.1%,清仓当前持仓,买入招商双债")
            # 先清仓当前持仓
            if context.current_position:
                order_target_percent(context.current_position, 0)
            # 全仓买入招商双债
            order_target_percent(context.security_3, 1)
            context.current_position = context.security_3
    elif target_return > context.threshold_positive:
        # 如果任一标的涨幅大于0.1%,买入涨幅较高的标的
        if context.current_position != target_security:
            log.info("任一标的涨幅大于0.1%,买入涨幅较高的标的")
            # 先清仓当前持仓
            if context.current_position:
                order_target_percent(context.current_position, 0)
            # 全仓买入涨幅较高的标的
            order_target_percent(target_security, 1)
            context.current_position = target_security
        else:
            log.info("当前持仓符合策略要求,保持不动")
    else:
        log.info("标的涨幅不符合条件,保持不动")

年化16% 还可以 (注意滑点对收益的影响)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭梨山大哎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值