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

具体买卖规则如下:
在上证指数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}")
代码完成后回测,结果如下图:




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




风险提示:
1、该策略最大风险在于上证指数跌跌不休,长期不能返回到3000点之上,会把资金耗尽,还会深度套牢。虽是小概率的事,但也不是没有可能,香港创业板指数就跌到过20几点。应对办法:不全仓操作,根据自己资金量大小,跌到事先规划的某一点位,如2000点则停止买入。
2、上证指数不断上涨,股票卖光了,指数还涨势不停。出现这种情况大不了少赚点,总比下跌好。应对办法:不全仓操作,这支ETF卖光了,其他的股票继续做趋势,避免踏空。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73456
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!