策研文华8源码学习站
首页 › 麦语言教程 › 麦语言 T_COMMAND 动态手数:按…

麦语言 T_COMMAND 动态手数:按资金比例与 ATR 风控下单

麦语言教程 文华8 适用 更新于 2026-11-01

这篇讲什么

文华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);

三个必须知道的细节

完整示例:均线过滤 + 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 管风险占比。完整版可参考站内恒温器策略源码的仓位管理段。

风控参数怎么定

常见问题

手数可以是小数吗?算出来 0.8 手会下单吗?

不会。手数必须为整数,小数部分会被忽略或报错。务必用 INTPART 取整,并用 MAX(1, ...) 兜底最小 1 手;若 1 手的风险已超出你的单笔风控预算,应换更小乘数的品种或降低资金占比。

MONEYTOT 包含浮动盈亏吗?

包含。MONEYTOT 是总权益(静态资金加浮动盈亏),意味着持仓浮亏时手数会自动收缩,浮盈时放宽——这正是按权益管理风险想要的效果。

为什么回测里有些信号没有成交?

常见三个原因:手数取整为 0;可用保证金不足被拒单;同一根 K 线出现多个信号被 AUTOFILTER 过滤。逐笔成交明细里能查到每笔未成交的原因,对着改即可。

把教程里的写法用起来

站内收录了 39 个可编译运行的文华8策略源码,其中多个含资金管理与反手指令的实战写法,注册登录即可查看。

浏览全部策略源码

相关策略源码

继续阅读

策研文华8源码学习站 · 策略与代码仅供学习研究,不构成任何投资建议,历史表现不代表未来收益。期市有风险,入市需谨慎。
本站为独立第三方技术学习交流网站,与文华财经无任何隶属、合作或授权关系;「文华8」「文华6」仅为所涉软件版本的描述性指代,相关商标及软件版权归原公司所有。
返回首页 · 文华8策略索引 · 文华6指标索引 · 麦语言教程 · 站点地图
用户协议 · 退款说明 · 隐私政策 · 黑ICP备2026013530号-1 · 公安备案徽标黑公网安备23010302002054号