麦语言 T_COMMAND 动态手数:按资金比例与 ATR 风控下单
这篇讲什么
文华8麦语言 T_COMMAND 指令详解:固定手数、资金比例下单、ATR 波动率风控三种写法,INTPART 取整与最小手数处理,附完整可编译的仓位管理源码片段。
为什么固定手数不安全
默认写法里每条交易指令都是固定手数(如 BPK 不带参数按默认手数开仓)。问题在于:账户从 10 万亏到 8 万时风险敞口没变,单笔亏损占总资金的比例悄悄升高;反过来账户翻倍后策略的风险占比又越来越小,赚得越来越慢。动态手数让"每笔交易冒固定比例的风险",账户波动才可能与策略设计一致。
T_COMMAND 的三种写法
写法一:固定手数(等价于默认,用于对照):
T_COMMAND(1); // 每次固定 1 手
C>HH,BPK;写法二:按资金比例与 ATR 下单——单笔风险锁定为总资金的固定百分比,波动大的品种自动减手数,波动小的品种自动加:
// 单笔风险 = 总资金的 2%,按 ATR 折算手数
TR := MAX(MAX(H-L, ABS(REF(C,1)-H)), ABS(REF(C,1)-L));
ATR := MA(TR,26);
TC := MAX(1, INTPART(MONEYTOT*0.02/(UNIT*ATR)));
T_COMMAND(TC);
C>HH,BPK(TC); // 指令可带手数参数,与 T_COMMAND 一致写法三:连亏自动减仓——配合连续亏损计数做防御性降杠杆:
// 连亏 3 笔起,手数减半,最低 1 手
LC := TNUMSEQLOSS;
BASE := MAX(1, INTPART(MONEYTOT*0.02/(UNIT*ATR)));
TC := IF(LC>=3, MAX(1, INTPART(BASE/2)), BASE);
T_COMMAND(TC);
C>HH,BPK(TC);三个必须知道的细节
- MONEYTOT 是账户总权益(含浮动盈亏),UNIT 是合约乘数——不同品种乘数差异巨大(螺纹 10 吨/手 vs 股指 300 倍),同一公式跨品种使用会自动适配,这正是用 ATR 折算的好处。
- 手数必须是整数。INTPART 负责向下取整;行情大、资金小时算出来可能是 0,0 手等于不下单——所以套一层 MAX(1, ...) 保证最小 1 手,再配合资金参数确保 1 手风险可承受。
- 指令后的 (TC) 参数与 T_COMMAND 二选一即可,同时写以指令后的参数为准;只在 T_COMMAND 写则对该模型所有不带参数的指令统一生效。
完整示例:均线过滤 + ATR 手数 + 反手
// 均线过滤 + ATR 动态手数 + 趋势反手(可直接编译)
MA5:MA(C,5);
MA20:MA(C,20);
TR := MAX(MAX(H-L, ABS(REF(C,1)-H)), ABS(REF(C,1)-L));
ATR := MA(TR,26);
TC := MAX(1, INTPART(MONEYTOT*0.02/(UNIT*ATR)));
T_COMMAND(TC);
// 只在均线多头排列时做多、空头排列时做空
LONGOK := MA5>MA20;
SHORTOK := MA5<MA20;
C> HV(H,20) && LONGOK, BPK(TC);
C< LV(L,20) && SHORTOK, SPK(TC);
AUTOFILTER;这个骨架把「方向过滤、进出场触发、仓位管理」三层拆开,改参数互不干扰:均线周期管方向、HV/LV 管触发、0.02 管风险占比。完整版可参考站内恒温器策略源码的仓位管理段。
风控参数怎么定
- 单笔风险占比建议 1%~2%:0.5% 偏保守适合大资金,2% 以上连亏 10 笔就会伤筋动骨;
- ATR 周期常用 20 或 26,周期越短手数对波动越敏感、切换越频繁;
- 手数上限:再给仓位加一层封顶(如总手数不超过资金能开满的 30%),防止低波动期 ATR 折算出手数过大;
- 连亏是常态不是异常:趋势策略在震荡段连亏 5~8 笔很正常,仓位设计必须保证这种情况下账户还在。
常见问题
手数可以是小数吗?算出来 0.8 手会下单吗?
不会。手数必须为整数,小数部分会被忽略或报错。务必用 INTPART 取整,并用 MAX(1, ...) 兜底最小 1 手;若 1 手的风险已超出你的单笔风控预算,应换更小乘数的品种或降低资金占比。
MONEYTOT 包含浮动盈亏吗?
包含。MONEYTOT 是总权益(静态资金加浮动盈亏),意味着持仓浮亏时手数会自动收缩,浮盈时放宽——这正是按权益管理风险想要的效果。
为什么回测里有些信号没有成交?
常见三个原因:手数取整为 0;可用保证金不足被拒单;同一根 K 线出现多个信号被 AUTOFILTER 过滤。逐笔成交明细里能查到每笔未成交的原因,对着改即可。
黑公网安备23010302002054号