免责声明:本文基于个人使用体验,与任何厂商无商业关系。内容仅供技术交流参考,不构成投资建议。
一、前言
加仓、减仓方式会直接影响资金曲线和回撤。金字塔加仓与倒金字塔减仓是常见思路。做了二十年期货交易,我在仓位管理上用过多种方式。
今天分享期货量化策略中金字塔加仓与倒金字塔减仓的思路和简单实现。
二、金字塔加仓
# 金字塔:顺势加仓,越涨越少买(多单)或越跌越少卖(空单)# 目的:降低成本、控制风险defpyramid_add_lots(level):"""金字塔加仓手数示例:逐级递减"""# 例如 3, 2, 1 手lots=[3,2,1]returnlots[level]iflevel<len(lots)else0三、倒金字塔减仓
# 倒金字塔减仓:先少平后多平,或分批平# 目的:保留趋势利润、降低踏空风险definverse_pyramid_close_ratio(level,total_levels=3):"""倒金字塔减仓比例示例"""# 第一次平 1/3,第二次 1/2 剩余,第三次全平ratios=[1/3,1/2,1.0]returnratios[level]iflevel<len(ratios)else1.0四、在 TqSdk 中实现分批加减仓
fromtqsdkimportTqApi,TqAuth,TqAccountdefrun_pyramid_strategy(api):klines=api.get_kline_serial("SHFE.rb2510",300,200)position=api.get_position("SHFE.rb2510")add_level=0max_level=3add_prices=[]# 记录加仓价位whileTrue:api.wait_update()ifnotapi.is_changing(klines)orlen(klines)<50:continueclose=klines["close"].iloc[-1]ma20=klines["close"].rolling(20).mean().iloc[-1]# 多头:价格在均线上方且未加满,金字塔加仓ifclose>ma20:ifposition.pos_long==0:api.insert_order("SHFE.rb2510","BUY","OPEN",1)add_level=1add_prices.append(close)elifadd_level<max_levelandclose>add_prices[-1]*1.01:# 涨 1% 加一档,手数递减lot=2ifadd_level==1else1api.insert_order("SHFE.rb2510","BUY","OPEN",lot)add_level+=1add_prices.append(close)# 跌破均线:倒金字塔减仓或全平elifclose<ma20andposition.pos_long>0:api.insert_order("SHFE.rb2510","SELL","CLOSE",position.pos_long)add_level=0add_prices.clear()api.close()五、注意点
# 1. 总仓位不超过预设上限# 2. 加仓间距与手数要结合品种波动# 3. 减仓可设止盈档位或按信号分批# 4. 回测时考虑手续费与滑点六、总结
金字塔加仓可控制成本与风险,倒金字塔减仓便于保留趋势利润。具体手数与档位需结合品种与资金规模。我目前部分趋势策略会采用类似思路,在 TqSdk 里用 position 与 insert_order 即可实现。量化交易有风险,仓位管理只是其一,策略与风控才是核心。
声明:本文基于个人学习经验整理,仅供技术交流参考,不构成任何投资建议。