使用手册
功能在哪 · 是什么 · 怎么调出来一、麦语言是什么
麦语言是文华财经自研的策略语言,2004 年推出,是国内使用人数最多的程序化模型开发平台之一。官方给它的定位是"小语法、大函数":语法只有赋值、条件、指令寥寥几条,复杂算法都封装在一个个函数里。
- 类公式语法:写法接近"收盘价上穿20均线就买",几行就能写一个完整策略
- 国内期货 CTP 柜台原生支持,WH8 模组运行,不用自己写网络和下单接口
- 函数库随版本持续更新,官方帮助指南 wenhua.com.cn/guide/wh8 有完整函数分类页
- 缺点:只能在文华生态里跑,不能跨平台移植
别混淆两套语法:文华体系中还存在另一套结构化的量化语法(Params / Vars / Begin-End 结构,用 A_SendOrder 下单,见官方 myQuant / T9 指南),与麦语言完全是两回事。麦语言模型没有 Begin/End 主程序结构,写法是"语句+分号"的公式体。在网上搜示例代码时先看清是哪套语法,混着抄必编译报错。
白话注解:麦语言就是"期货界的 Excel 公式"——你写"收盘价上穿20日均线就买",它自动帮你下单。不用写代码连接服务器、不用管断线重连,WH8 全帮你做了。
操作教程
一步一步 · 跟着做完一件事二、开发环境
- 下载安装赢智 WT8 / WH8(文华官网 wt8.wenhua.com.cn 提供下载,麦语言学习资料也在官网)
- 打开 量化 → 模型开发平台(不同版本入口名称略有差异)
- 新建趋势模型(做套利选套利模型)
- 内置编辑器里写代码,点 编译 检查语法
- 编译通过后,把模型加载到 K 线看信号,再进回测,最后加到模组实盘
白话注解:编辑器里点"插入函数"能看到当前版本全部函数和参数说明——这是最权威的本地手册,比网上任何教程都准。函数记不全没关系,记住常用的十几个,其余靠插入函数查。
三、基本语法规则
1、两种定义变量的方式
| 写法 | 含义 |
|---|---|
X: 公式; | 定义变量并在图上画线,显示名字 X |
X:= 公式; | 定义中间变量,不画线(冒号后多一个等号) |
2、硬性规则
- 每条语句以半角分号结尾,包括最后一条
- 注释写在花括号
{ }里,不执行 - 全程半角输入:中文标点(,;()"")混进表达式是编译失败的最常见原因
- 变量名不能互相重复、不能和参数名重复、不能和函数名重复
- 逻辑运算:
&&(与,可写 AND)、||(或,可写 OR);比较:> < >= <= = <>
{ 语法示例:三种语句 }
MA5:MA(CLOSE,5); { 定义变量并画线 }
TMP:=(HIGH+LOW)/2; { 中间变量,不画线 }
MA5>TMP,SK; { 条件成立执行指令 }
白话注解:冒号和冒号等号就一字之差::的变量会在图上画出来(调试时很直观),:=的纯内部使用。建议过程变量都用:=,只把最终想看的几条线用:画出来,图面干净。
四、数据引用函数
| 函数 | 含义 |
|---|---|
| CLOSE / C | 收盘价(盘中指最新价) |
| OPEN / O | 开盘价 |
| HIGH / H | 最高价 |
| LOW / L | 最低价 |
| VOL / V | 成交量 |
| OPI | 持仓量 |
| AVPRICE | 均价(盘后对国内三交易所指结算价) |
| SETTLE | 结算价(日内K线上返回当日开盘至今的均价,日线及以上返回当根K线结束时间所在日的结算价) |
| REF(X,N) | N 个周期前的 X,如 REF(CLOSE,5) |
| REFX(X,N) | 引用 N 个周期后的数据 未来函数,见第十九章 |
| MINPRICE('代码') | 返回某合约最小变动价位,参数为文华码或交易代码;个别合约查不到时返回 0 |
| MINPRICE1 | 取模组交易合约的最小变动价位(无参数) |
警告:旧版教程常见裸写 20*MINPRICE 的用法,官方函数手册收录的用法是 MINPRICE('IF1107') 这种带参数形式;模组里对当前交易合约取最小变动价位请用无参数的 MINPRICE1。写完编译一下,以本地编译器提示为准。
{ 引用示例 }
LC:=REF(CLOSE,1); { 昨收 }
RANGE1:=HIGH-LOW; { 当根振幅 }
TICKVAL:=MINPRICE1; { 当前模组合约一个最小变动价位 }
白话注解:MINPRICE1 是写止损距离最好用的尺子——"亏 20 个最小变动价位就砍"写成 C<BKPRICE-20*MINPRICE1,换品种不用改数字,因为它永远取的是当前合约自己的最小变动价位。
五、信号指令全集与 AUTOFILTER 过滤规则
1、六个信号指令 + 全平
| 指令 | 含义 | 白话 |
|---|---|---|
| BK | 买开 | 开多单 |
| SK | 卖开 | 开空单 |
| SP | 卖平 | 平多单 |
| BP | 买平 | 平空单 |
| BPK | 买平开 | 平空单同时反手开多 |
| SPK | 卖平开 | 平多单同时反手开空 |
| CLOSEOUT | 全平 | 所有持仓全部清掉 |
写法:条件, 指令;。判断上一笔信号用什么:ISLASTBK / ISLASTSK / ISLASTBP / ISLASTSP / ISLASTBPK / ISLASTSPK / ISLASTCLOSEOUT(返回 1 或 0)。
CLOSE > MA(CLOSE,20), BPK; { 收盘价站上20均线:平空反手开多 }
CLOSE < MA(CLOSE,20), SPK; { 收盘价跌破20均线:平多反手开空 }
2、AUTOFILTER:一开一平过滤规则
模型末尾写 AUTOFILTER; 即声明为一开一平过滤模型,官方过滤规则:
- 连续的同方向指令只有第一个有效,其余被过滤
- 交易指令必须配对出现:先有开仓指令,后面只允许出现对应的平仓指令
- 所以过滤模型的第一个信号只能是 BK 或 SK,其他指令都被滤掉
白话注解:不加 AUTOFILTER 的话,"MA5>MA20"每根 K 线都成立,就会每根 K 线都发一次 BK。加了它,模型变成严格的"开一仓—平一仓"循环:开过仓就不再重复开,直到平仓信号出现。这就是为什么大多数趋势模型最后一行都是 AUTOFILTER。
六、第一个模型:双均线趋势
{ 双均线趋势模型(过滤模型) }
MAFAST:MA(CLOSE,10);
MASLOW:MA(CLOSE,30);
CROSSUP(MAFAST,MASLOW),BPK; { 金叉:平空反手开多 }
CROSSDOWN(MAFAST,MASLOW),SPK; { 死叉:平多反手开空 }
AUTOFILTER;
逐行拆解:
MAFAST:MA(CLOSE,10);—— 定义 10 周期均线并画线CROSSUP(...),BPK;—— 金叉当根 K 线触发买平开指令AUTOFILTER;—— 声明一开一平过滤模型
把模型加载到 K 线图上,历史信号会直接标在图上,肉眼先检查两件事:信号是否合理、有没有明显逆大势的噪音信号。
白话注解:注意默认情况下信号是"K 线走完确认"的——当根 K 线走完、条件仍成立才真正发出信号。盘中看到信号闪了一下又消失,那是盘中计算值在变,不是 bug。想改成盘中即时下单,见第十四章指令价模型。
七、止损止盈与持仓函数
1、官方头寸函数(节选自 WH8 帮助"头寸函数"页)
| 函数 | 含义 |
|---|---|
| BKPRICE | 最近一次买开信号价位 |
| SKPRICE | 最近一次卖开信号价位 |
| BKPRICE1 | 模组中交易合约的买开信号价位 |
| SKPRICE1 | 模组中交易合约的卖开信号价位 |
| BKHIGH / BKLOW | 买开仓以来的最高价 / 最低价 |
| SKHIGH / SKLOW | 卖开仓以来的最高价 / 最低价 |
| BKVOL / SKVOL | 模组信号多头持仓 / 空头持仓 |
| BARSBK / BARSSK | 上一次买开 / 卖开信号位置(距当前 K 线根数) |
| BARSBP / BARSSP | 上一次买平 / 卖平信号位置 |
| ISLASTBK 等 | 判断上一个信号是否为某个指令 |
警告:HOLDING、BAKPRICE、SAKPRICE 不在官方头寸函数表中,属旧版教程讹误,请勿使用。持仓看 BKVOL / SKVOL,开仓价看 BKPRICE / SKPRICE,持仓期间最高最低价用 BKHIGH / BKLOW(或 HHV(HIGH,BARSBK+1) 自己算)。
2、固定价位止损止盈
{ 多单:亏20个最小变动价位止损,赚40个止盈 }
C < BKPRICE - 20*MINPRICE1, SP;
C > BKPRICE + 40*MINPRICE1, SP;
{ 空单:同理反向 }
C > SKPRICE + 20*MINPRICE1, BP;
C < SKPRICE - 40*MINPRICE1, BP;
3、持仓期间高低点(移动止损的原料)
{ 取最近买开位置到现在的最高价 }
HHV(HIGH,BARSBK+1);
{ 取最近卖开位置到现在的最低价 }
LLV(LOW,BARSSK+1);
白话注解:BKPRICE 就是你的开仓成交价。止损就是拿当前价 C 跟它比,亏够了就 SP 平掉。BARSBK 返回"上一次买开是几根 K 线之前",+1 是为了把开仓当根也算进去,所以 HHV(HIGH,BARSBK+1) 恰好是"开多以来最高价",和官方的 BKHIGH 一个意思——两条路都能用。
八、参数化
1、官方 PARAM 格式
官方教程给出的源码内定义参数格式是方括号,顺序为参数名,最小值,最大值,缺省值:
PARAM[N1,1,100,10]
PARAM[N2,1,200,30]
FAST:EMA(CLOSE,N1);
SLOW:EMA(CLOSE,N2);
CROSSUP(FAST,SLOW),BPK;
CROSSDOWN(FAST,SLOW),SPK;
AUTOFILTER;
纠错:旧版教程写的 PARAM N1(10, 1, 100, 1) 把缺省值放在了第一位且用圆括号,两种都是错的。正确写法缺省值在最后:PARAM[N1,1,100,10] 表示默认 10、可调 1~100。
2、参数页签
除了源码 PARAM,编辑器还有"参数"页签可以定义名称、最小值、最大值、默认值。无论哪种方式,默认值这一步不能省——留空会让模型首次加载取到 0 或越界值,表现是均线全平或不显示。
白话注解:参数化是回测寻优的前提。把均线周期、止损距离全抽成参数,后面第二十一章的枚举/遗传调参才能自动帮你找组合,而不用一个个改源码。
九、完整实战:双均线 + 通道止损
{ 双均线入场 + 持仓期高低点移动止损 }
{ 参数:快线周期/慢线周期/止损回撤距离 }
PARAM[N1,2,50,10]
PARAM[N2,5,200,30]
PARAM[TRAIL,5,200,20]
FAST:EMA(CLOSE,N1);
SLOW:EMA(CLOSE,N2);
{ 开仓:均线金叉死叉反手 }
CROSSUP(FAST,SLOW),BPK;
CROSSDOWN(FAST,SLOW),SPK;
{ 多单移动止损:开多以来最高价回撤TRAIL个最小变动价位平多 }
HHV(HIGH,BARSBK+1) - C > TRAIL*MINPRICE1, SP;
{ 空单移动止损:开空以来最低价反弹TRAIL个最小变动价位平空 }
C - LLV(LOW,BARSSK+1) > TRAIL*MINPRICE1, BP;
AUTOFILTER;
设计要点:
- 入场交给均线交叉,出场交给"利润回撤就跑"——赚过钱的单子不让它坐电梯回到底
- 止损距离用 MINPRICE1 度量,跨品种移植不用改代码
- 三段止损止盈逻辑互不冲突:反手指令本身也是一种"止损"(金叉时 BPK 会先平掉旧空单)
- TRAIL 调太小会被日常波动扫掉,调太大形同虚设——这正是要交给定参工具的参数
白话注解:移动止损的直觉是"这单最多赚到 80 点没跑,现在回落到只剩 40 点,走人"。HHV(HIGH,BARSBK+1) 记录开仓以来摸到的最高价,回落超过 TRAIL 个最小变动价位就 SP。
十、模组实盘运行
WT8 说明书"策略的组合配置 / 策略的运行管理"两部分的完整流程:
- 建 模组:把模型加载进去,绑定账户和合约
- 启动模组后自动按模型信号下单,信号、委托、持仓在模组窗口可见
- 模组持仓匹配校验:模组理论持仓和账户实际持仓对不上时(手动干预、网络异常等),有校验和重新初始化机制处理
- 合约换月移仓:支持手动移仓换月和模组自动换月
- 模组一带多账号下单:一个模组的信号可分发到多个账户
- 远程监控模组运行:手机端可查看模组状态
白话注解:模组就是"自动交易机器人"。但请记住它是半自动的——你需要盯着"理论持仓 vs 实际持仓"是否一致。手动下过一单、下单被拒,都可能出现两边对不上的情况,这时要用模组自带的校验/初始化功能对齐,不能假装没看见。
十一、信号执行方式:收盘价模型 vs 指令价模型
这是麦语言最核心的进阶概念。默认(模型里不写任何执行方式函数)是收盘价模型:K 线走完确认信号下单,一根 K 线最多一个信号。
想盘中实时下单,需要写入指令价模型函数。官方规则:CHECKSIG、MULTSIG、MULTSIG_MIN、CHECKSIG_MIN 不能同时出现在一个模型中;写了这类函数后模型按指令价方式运行。
1、CHECKSIG:设置信号确认与复核
CHECKSIG(SIG,MODE1,TIME1,MODE2,TIME2,INTERVAL);
{ 例:BK出信号立即确认下单,不复核 }
CHECKSIG(BK,'A',0,'C',0,0);
| 参数 | 取值 | 含义 |
|---|---|---|
| SIG | BK/SK/BP/SP/BPK/SPK/CLOSEOUT | 对哪个指令设置(可设全部指令) |
| MODE1 | 'A' | 出信号后第 TIME1 个时间间隔(或 TIME1 秒)确认下单 |
| MODE1 | 'B' | K 线走完前 TIME1 个间隔(或 TIME1 秒)确认;TIME1=0 即 K 线走完确认 |
| MODE2 | 'C'/'D' | 确认后再按时长/间隔做一次信号复核;TIME2=0 为不复核 |
| MODE2 | 'E'/'F' | 小节末 / 收盘前最后一根 K 线提前复核,其余 K 线走完复核 |
| INTERVAL | 0 / 3 / 5 / 10 | 数据时间间隔;0=每笔 TICK 计算,3/5/10=每隔相应秒数计算(回测速度可提升但精度稍差),不支持变量 |
2、MULTSIG:一根 K 线多个信号
MULTSIG(Sec1,Sec2,N,INTERVAL);
{ 例:出信号立即下单不复核,一根K线最多2个信号,每笔TICK计算 }
MULTSIG(0,0,2,0);
{ 例:开仓信号3秒后下单,平仓信号5秒后下单,每笔TICK计算 }
MULTSIG(3,5,2,0);
- Sec1 管开仓信号(BK/SK),Sec2 管平仓信号(BP/SP/BPK/SPK)
- N 为一根 K 线最大信号个数(官方说明取值范围 1-60),支持写变量
- INTERVAL 同样只支持 0、3、5、10
- 信号下单后固定,不随后续条件消失而撤回(不复核机制)
白话注解:两个函数一句话区分——CHECKSIG 一根 K 线最多一个指令、还能带"复核"(下单后再看一眼条件还在不在);MULTSIG 一根 K 线可以连发多个指令、不复核。做 tick 级日内策略用 MULTSIG,做"想比收盘价早一点点进场"用 CHECKSIG。注意 INTERVAL 用 3/5/10 回测快但精度差,回测结论会偏乐观,参数为 0 才是逐笔口径。
十二、跨周期引用 #IMPORT
1、官方语法
#IMPORT [PERIOD,N,FORMULA] AS VAR
- PERIOD:被引用周期,支持 SEC(秒)、MIN(分钟)、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR
- N:周期倍数(如 MIN 配 2 即 2 分钟周期);N 为大于等于 1 的整数,周及以上周期写大于 1 的数按 1 计算
- FORMULA:被引用指标名称——要先建好并保存该指标
- VAR:定义变量名,之后用
VAR.指标里的变量名取值
2、完整示例(官方说明书范式)
第一步:先写一个指标,保存为 AA:
{ 指标AA:日线的多空状态 }
MA5:MA(C,5);
MA30:MA(C,30);
DAYCON1:MA5>MA30; { 日线多头排列 }
DAYCON2:MA5<MA30; { 日线空头排列 }
第二步:在分钟周期模型里引用:
#IMPORT[DAY,1,AA] AS VAR1
DC1:VAR1.DAYCON1;
DC2:VAR1.DAYCON2;
MAF:MA(C,5);
MAS:MA(C,20);
DC1 && CROSSUP(MAF,MAS),BPK;
DC2 && CROSSDOWN(MAF,MAS),SPK;
AUTOFILTER;
加载时只加载跨周期模型即可,AA 指标不需要单独加载。
3、官方注意事项
- #IMPORT 语句末尾不能写分号
- 被引用的指标中不能再有引用
- 跨周期语句个数 + 跨合约引用个数不超过 6 个
- VAR 变量名不能与函数名重复;引用指标名只能为字母或数字命名
- 盘中被引用大周期的数据仍在变动(当日日线还没走完),信号可能来回变化——这是引用了"未收盘周期"的固有特性,不是软件错误
纠错:旧版教程写的 MA15M:"MIN15$CLOSE".MA(CLOSE,10); 是虚构写法,官方不存在 "周期$数据".函数() 这种链式语法。跨周期一律用 #IMPORT,跨合约一律用 #CALL。另外注意别把通达信的 C#DAY 语法搬进来——那是通达信的跨周期符号,不是麦语言的。
白话注解:#IMPORT 的思想是"大周期定方向、小周期找入场":日线多头排列 + 分钟级金叉才开多,把逆大势的信号全过滤掉。想引用的数据必须先写进被引用指标里——你不能在模型里直接对日线收盘价做 MA,得在 AA 指标里算好 MA 再把结果传过来。
十三、跨合约引用 #CALL
#CALL ["CODE", FORMULA] AS VAR
CODE 为被引用合约(文华码),FORMULA 为被引用指标名。官方说明书示例:在螺纹合约模型里引用黑链指数(文华码 7161)的趋势状态:
{ 指标AA(保存为AA): }
MA5:MA(C,5);
MA10:MA(C,10);
MA30:MA(C,30);
HGCON1:MA5>MA10 && MA10>MA30; { 板块多头趋势 }
HGCON2:MA5<MA10 && MA10<MA30; { 板块空头趋势 }
{ 螺纹模型: }
#CALL[7161,AA] AS VAR
HGCON1:VAR.HGCON1;
HGCON2:VAR.HGCON2;
MAF:MA(C,5);
MAS:MA(C,30);
HGCON1 && CROSSUP(MAF,MAS),BPK;
HGCON2 && CROSSDOWN(MAF,MAS),SPK;
AUTOFILTER;
白话注解:#CALL 解决的是"看板块做单品种":黑链指数多头排列时,螺纹自己的金叉信号质量更高。注意 #IMPORT 和 #CALL 加起来总数不超过 6 个,别把模型写成引用大杂烩——引用越多,盘中数据依赖越多,信号闪烁的坑也越多。
十四、资金与头寸函数
WH8 帮助"头寸函数"页收录的模组资金类函数(节选):
| 函数 | 含义 |
|---|---|
| MONEY | 模组资金余额 |
| MONEYTOT | 模组权益 |
| MONEYRATIO | 资金使用率 |
| MARGIN | 合约保证金 |
| FEE | 合约手续费 |
| PROFIT | 模组逐笔浮盈 |
| OFFSETPROFIT | 当前模组平仓盈亏 |
| VOLMARGIN | 持仓保证金 |
| LONG_VOL / SHORT_VOL | 模组多头/空头可用持仓 |
| LONG_PRICE / SHORT_PRICE | 模组多头/空头持仓开仓均价 |
| UNITLIMIT | 取交易合约限制拥有持仓数 |
| SETDEALPERCENT | 设置下单的模组资金使用比例 |
{ 用平仓盈亏做风控:当日平仓累计亏损超过3000元全平并停 }
OFFSETPROFIT < -3000, CLOSEOUT;
白话注解:SETDEALPERCENT 让仓位跟着权益走——比如设成 0.2,每次开仓用 20% 的模组资金,赚了加仓基数、亏了减,等于自带轻量化复利。注意这些是"模组"函数,反映的是模组自己的账,不是你账户的全部持仓。
十五、信号控制函数
| 函数 | 含义 |
|---|---|
| MONO_SIGNAL | 限制信号(约束模型信号行为,详见官方头寸函数页说明) |
| SETSIGMAXNUM | 设置一根 K 线最大信号个数 |
| SETSIGPRICETYPE | 为不同的信号设置不同的价格方式 |
| CONDITION_ORDER | 条件单模组关键字 |
| AUTOCLEARSIG | 一根 K 线上信号满 60 个时,自动清除前面的信号 |
{ 示例:限制一根K线最多3个信号 }
SETSIGMAXNUM(3);
白话注解:这几个函数是给指令价模型(MULTSIG 那类一根 K 线可能连发多个信号的场景)配的"刹车":SETSIGMAXNUM 限制单根 K 线信号数,SETSIGPRICETYPE 控制委托价格方式(对手价/超价之类,具体枚举值以编辑器插入函数说明为准)。不懂就别乱设——刹车装错位置比不装更危险。
十六、未来函数黑名单
官方函数手册明确标注了以下"未来函数"——它们引用了尚未走完的数据,回测信号精准得可疑,实盘会原形毕露:
| 函数 | 官方标注 |
|---|---|
| REFX(X,N) | 引用 N 个周期后的数据;官方同时警告运算量很大、占用 CPU,谨慎使用 |
| BACKSET(X,N) | 条件成立时把当前位置到 N 周期前的数值设为 1 |
| ZIGZAG(X,P,N) | 之字转向:X 变化量超过 P 才转向 |
| PEAK / PEAKBARS | 取 ZIGZAG 的前 M 个波峰(及位置) |
| TROUGH / TROUGHBARS | 取 ZIGZAG 的前 M 个波谷(及位置) |
为什么它们是坑:ZIGZAG 要等价格反向走出 P 才知道"这里转向了",回测时它仿佛提前知道拐点,实盘当根 K 线上转向点根本还没确定。用这类函数做的模型,回测曲线漂亮得不像话,实盘一挂就失效。
{ 反面教材(仅演示,勿模仿) }
{ ZIGZAG 在实盘当根K线上会重绘,信号不可复现 }
ZIGZAG(HIGH,10,1);
白话注解:判断一个函数是不是未来函数,问一句话:"这个值在实盘当根 K 线还在跳吗?"REF(C,1) 看的是已走完的昨天,稳的;ZIGZAG、BACKSET 看的是"未来会怎么走",跳的。凡是依赖未来数据的模型,回测越准,实盘越惨。
十七、模型定参:枚举、遗传、滚动调参
WT8 说明书"模型定参"提供三种工具:
- 枚举:把参数组合逐个跑一遍,结果全面但慢,适合参数少、区间小
- 遗传:模拟优胜劣汰,先随机取样再向高分区域收敛,适合参数多的大空间
- 滚动调参:分段用历史数据滚动验证参数稳定性,避免"一组参数吃遍全历史"的假象
配套的还有批量回测(一个模型跑一篮子品种,看策略与品种的适配性)和组合配置(多策略多品种组合,降低单策略回撤)、一篮子合约参数优化。
白话注解:调参最大的坑叫过拟合——参数调得对历史完美贴合,其实是把历史的噪音背下来了。破解法是滚动调参:如果一组参数在每段历史里表现都中上,比在整段历史里表现第一的参数可信得多。参数组合的数量也要控制,跑几百组可以,跑几万组基本必过拟合。
十八、模型类型:过滤模型与加减仓模型
官方对模型的分类维度:
| 类型 | 特征 |
|---|---|
| 一开一平过滤模型 | 写 AUTOFILTER,信号严格配对,同向信号只认第一个 |
| 加减仓模型 | 同方向可连续开仓/分批平仓,配合 SETSIGMAXNUM 等控制信号数 |
| 收盘价模型(默认) | K 线走完确认信号,一根 K 线最多一个信号 |
| 指令价模型 | 写 CHECKSIG/MULTSIG 族函数,盘中实时出信号 |
官方说明(程序化社区引用的官方规则):指令价模型和一开一平过滤模型、加减仓模型没有必然联系——既支持一开一平的指令价模型,也支持加减仓的指令价模型。另注意 AUTOCLEARSIG 的机制:一根 K 线上信号满 60 个时自动对前面的信号进行删除。
白话注解:新手先写过滤模型(AUTOFILTER 收着你的手),逻辑跑通了再玩加减仓。加减仓模型信号会连续触发,仓位管理全靠你的条件写得好不好,一个没写紧,一根大阳线给你开出满仓。
十九、VPS 部署与实盘管理
- 模组要 7×24 挂机才能持续响应信号,自己电脑关机模组就停了
- 建议使用期货公司提供的机房 VPS(云服务器):网络稳定、断线概率低
- VPS 上装 WT8/WH8,登录账号,把模组启动起来即可
- 配合官方远程监控模组运行功能,手机端可查看模组状态
- 交易时段检查:模组在线状态、理论持仓与实际持仓一致、下单无异常拒单
白话注解:VPS 是放在机房里 24 小时不关机的电脑,网络比你家里稳得多。夜盘时段(21:00 之后)恰恰是策略最容易出信号的时段,人该睡觉睡觉,机器交给 VPS 和远程监控。
二十、本课小结
- 麦语言 = 小语法大函数:
X: 公式;画线,X:= 公式;中间变量,条件, 指令;下单 - 六个信号指令 BK/SK/SP/BP/BPK/SPK + CLOSEOUT 全平;AUTOFILTER 声明一开一平过滤模型
- 持仓看 BKVOL/SKVOL/BKPRICE/SKPRICE/BARSBK/BARSSK/BKHIGH/BKLOW——HOLDING 等旧写法不存在
- 参数用
PARAM[名,最小,最大,缺省],缺省值必须填 - 止损距离用 MINPRICE1 度量,跨品种免改代码;MINPRICE('代码') 是带参形式
- 指令价模型:CHECKSIG(可复核、单信号)/ MULTSIG(多信号、不复核),INTERVAL 只支持 0/3/5/10
- 跨周期 #IMPORT、跨合约 #CALL,引用总数 ≤6,被引用指标先保存
- 未来函数黑名单:REFX/BACKSET/ZIGZAG/PEAK/TROUGH——回测越美实盘越惨
- 定参用枚举/遗传/滚动调参,滚动验证防过拟合;回测必带手续费和滑点
- 回测 ≠ 实盘,业绩不代表未来收益
本站固定免责声明:本教程仅讲解软件编程与操作方法,不构成投资建议或策略推荐。回测业绩不代表未来收益,EA自动交易风险大,请谨慎决策。
💬 用户评价 (0)
立即登录