学习QMT股票量化系统3000点震荡买卖策略

我们不如制定一个3000点的震荡买卖策略,当上证跌破3000就逐步慢慢加仓,当上证达到3000点之上就逐步卖出。选择一支跟踪指数的ETF操作,避免了ST、退市的烦恼,还降低了交易成本。

学习QMT股票量化系统3000点震荡买卖策略

具体买卖规则如下:

在上证指数3000点以下买入,首次在上证指数2970点买入数量为1000股的某某ETF,以后每跌30点,买入一次,数量为(上次买入量+1000),例如,第二次买入就是1000+1000,第三次买入数量就是2000+1000,依此类推。

在上证指数3000点以上卖出所持的某某ETF,首次卖出在3030点,卖出的数量是最低价买入的数量,以后每上涨30点卖出一次,第二次卖出的数量为次低点买入的量。

总之,就是3000点以下金字塔式买入,3000点以上倒金字塔式卖出,3000点为界,30点为一个区间。

那么这个策略是否可行呢?我们在QMT系统上用python代码验证一下:

# 声明:本代码仅用于学习交流,不用于实盘交易。
# encoding:gbk

def init(C):
    C.ETF_code = '510760.SH'  # 上证综指ETF代码 '510760.SH'  上证50ETF'510050.SH'
    C.SH_index_code = '000001.SH'  # 上证指数代码
    C.buy_threshold = 3000  # 买入阈值
    C.sell_threshold = 3000  # 卖出阈值
    C.step = 30  # 买卖区间步长
    C.lots = 1000  # 每次买入的基础数量
    C.buy_lots = C.lots  # 当前买入的ETF数量
    C.sell_lots = C.lots  # 当前卖出的ETF数量
    C.last_buy_price = None  # 上次买入的价格
    C.last_sell_price = None  # 上次卖出的价格
    C.shares_held = 0  # 持有的ETF股份总数
    C.last_index_level = 3000  # 上次的指数点位
    C.accountid = "test"

def handlebar(C):
    # 获取上证指数历史收盘价
    sh_index_data = C.get_market_data_ex(
        ['close'], 
        [C.SH_index_code], 
        start_time="20220601", 
        end_time="20240621", 
        period='1d', 
        count=-1, 
        subscribe=False  # 回测时不订阅实时数据
    )
    
    if sh_index_data is None or C.SH_index_code not in sh_index_data:
        return
    
    # 遍历上证指数的历史数据
    for current_index_close in sh_index_data[C.SH_index_code]['close']:
        print("当前上证指数:",current_index_close)
        print("C.buy_threshold:",C.buy_threshold ,"C.step=",C.step)
        print("买入阈值:",C.last_index_level - C.step)
        # 3000点以下,采用金字塔式买入策略,买入量先少后多
        if current_index_close <= 3000:
            C.sell_threshold = 3000
            if current_index_close <= C.buy_threshold - C.step :
                print("现在达到买入条件*********")
                # 每跌30点,买入数量增加
                C.buy_lots += C.lots
                buy_quantity = C.buy_lots
                C.shares_held += buy_quantity
                C.last_buy_price = current_index_close
                # 执行买入操作
                passorder(23, 1101, C.accountid, C.ETF_code, 5, -1, buy_quantity,C)

                print(f"上证指数低于{C.buy_threshold}点,买入{buy_quantity }股ETF,价格:{current_index_close}")
                C.buy_threshold = C.buy_threshold  - C.step
        # 打印当前持仓情况
        print(f"当前持仓股数:{C.shares_held}")


        # 3000点以上,采用倒金字塔式卖出策略,卖出量先多后少
        if current_index_close > 3000:
            C.buy_threshold = 3000
            if C.last_sell_price is None or current_index_close >= C.sell_threshold + C.step:
                # 每涨30点,卖出数量减少,但不低于初始卖出数量
                C.sell_lots = max(C.lots, C.sell_lots - C.lots)
                sell_quantity = min(C.shares_held, C.sell_lots)
                if sell_quantity > 0:  # 确保有股份可卖
                    C.shares_held -= sell_quantity
                    C.last_sell_price = current_index_close 
                    # 执行卖出操作
                    passorder(24, 1101, C.accountid, C.ETF_code, 5, -1, sell_quantity,C)
                    C.sell_threshold = C.sell_threshold + C.step
                    print(f"上证指数高于{C.sell_threshold}点,卖出{sell_quantity}股ETF,价格:{current_index_close}")

        # 打印当前持仓情况
        print(f"当前持仓股数:{C.shares_held}")

代码完成后回测,结果如下图:

学习QMT股票量化系统3000点震荡买卖策略

学习QMT股票量化系统3000点震荡买卖策略

学习QMT股票量化系统3000点震荡买卖策略

学习QMT股票量化系统3000点震荡买卖策略

从回测结果来看,收益不多,好在没亏,在目前的市场上,不知是否已战胜了90%的投资者了呢?我试着把操作的标的更换为别的ETF,发现收益、胜率等均有明显提高,回测结果详见下图:

学习QMT股票量化系统3000点震荡买卖策略

学习QMT股票量化系统3000点震荡买卖策略

学习QMT股票量化系统3000点震荡买卖策略

学习QMT股票量化系统3000点震荡买卖策略

风险提示:

1、该策略最大风险在于上证指数跌跌不休,长期不能返回到3000点之上,会把资金耗尽,还会深度套牢。虽是小概率的事,但也不是没有可能,香港创业板指数就跌到过20几点。应对办法:不全仓操作,根据自己资金量大小,跌到事先规划的某一点位,如2000点则停止买入。

2、上证指数不断上涨,股票卖光了,指数还涨势不停。出现这种情况大不了少赚点,总比下跌好。应对办法:不全仓操作,这支ETF卖光了,其他的股票继续做趋势,避免踏空。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73456
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 10 日
下一篇 2024 年 7 月 10 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注