麦语言 BPK/SPK 与 BK/SP 的区别:开平仓指令一文讲透
这篇讲什么
文华8麦语言六大交易指令 BK/SP/SK/BP/BPK/SPK 的含义、AUTOFILTER 下的配对规则、反手指令的使用场景与三个常见报错写法的修正,附完整可编译示例。
先认识四个基础开平仓指令
麦语言的交易指令一共六个,其中四个是基础指令:BK(买开,买入开多)、SP(卖平,卖出平掉手里的多单)、SK(卖开,卖出开空)、BP(买平,买入平掉手里的空单)。四个指令两两配对:BK 与 SP 管多头这头,SK 与 BP 管空头这头。
MA5:MA(C,5);
MA20:MA(C,20);
CROSS(MA5,MA20),BK; // 金叉买入开多
CROSSDOWN(MA5,MA20),SP; // 死叉卖出平多
AUTOFILTER;写完策略后务必在最后一行加上 AUTOFILTER。它的作用是开启"信号过滤":同一根 K 线只保留一个有效信号,并且开仓信号只在该方向没有持仓时生效。没有这一行,模型每根 K 线满足条件都会重复开仓,回测结果会完全失真。
BPK/SPK:平仓加反手一步到位
BPK = 买平开(先平掉空单、紧接着反手开多),SPK = 卖平开(先平掉多单、紧接着反手开空)。它们是 BP+BK、SP+SK 的组合指令,专门给趋势型策略用:多空方向切换时一条语句完成翻仓,不用写两条。
// 趋势反手模型:多头状态且收盘创 20 周期新高翻多,反之翻空
HH:=HV(H,20);
LL:=LV(L,20);
C>HH,BPK; // 平空反手开多
C<LL,SPK; // 平多反手开空
AUTOFILTER;注意上面例子刻意只写了 BPK/SPK 两条指令:在 AUTOFILTER 模式下,首次入场是"没有持仓"状态,BPK 中的"买平"部分没有仓可平会被自动忽略,只执行开多——所以两条指令就能覆盖从空仓到多空互翻的全过程。
AUTOFILTER 下的信号配对规则
- 模型持仓是单向的:同一时刻只能持多单或空单之一,不支持对锁。
- 开仓信号(BK/SK)只在当前没有对应方向持仓时生效;持多仓时出现的 SK 会被过滤掉,不会自动帮你平多。
- 平仓信号(SP/BP)只在有对应方向持仓时生效,没持仓时出现会被忽略。
- 反手指令(BPK/SPK)不受第 2 条限制:它自带平仓动作,是 AUTOFILTER 模式下唯一的"直接翻仓"写法。
第 2 条是新手最容易踩的坑:持多仓时想翻空,直接写 SK,信号"没反应",其实不是语法错误,而是被 AUTOFILTER 过滤了——正确写法是先 SP 再 SK,或者直接一条 SPK。
三个常见错误写法与修正
错误一:持多仓直接反向开空。
// 错误:持多仓时 CROSSDOWN 触发,SK 被过滤,看起来"没信号"
CROSS(MA5,MA20),BK;
CROSSDOWN(MA5,MA20),SK;
AUTOFILTER;// 修正一:改用反手指令
CROSS(MA5,MA20),BPK;
CROSSDOWN(MA5,MA20),SPK;
AUTOFILTER;错误二:漏写 AUTOFILTER。现象是回测里仓位越滚越大、成交笔数爆炸。只要不是刻意做加仓/网格类模型,策略最后一行都应有 AUTOFILTER。
错误三:反手又止损,逻辑打架。既写 SPK 又写止损 BP,止损触发后下一根 K 线趋势条件仍成立又立即 BPK 重新进场,来回被打。反手模型想加硬止损,应把止损条件并入开仓方向的过滤条件里,而不是另起一条平仓指令。
选型建议:什么模型用什么指令
- 趋势跟随型(均线、通道、海龟类):用 BPK/SPK,方向切换一步到位,不漏掉反向行情。
- 波段持有型(进出场条件不对称,比如慢进快出):用 BK/SP/SK/BP 四条分开写,平仓条件可以和开仓条件完全独立。
- 止损明确的日内型:用 BK/SK 开仓 + BP/SP 做固定止损止盈,反手与否单独判断。
本站策略页均按此原则选用指令:如恒温器系统用反手指令处理趋势与震荡子策略的切换,带硬止损的模型则用四条基础指令分别管理进出场。
常见问题
BPK 算一笔成交还是两笔?手续费怎么算?
算两笔:先平后开是两次独立成交,手续费、滑点按两次计。回测时务必把手续费调成真实水平(交易所标准加 1 分左右),否则反手频繁的策略成本会被严重低估。
不加 AUTOFILTER 可以吗?
可以。不加过滤的模型支持同方向连续加仓与双向持仓,适合网格、马丁这类仓位管理型策略,但信号管理要自己负责。新手建议一律加 AUTOFILTER。
信号是盘中触发还是收盘确认?
取决于模型的确认写法与回测设置里的信号复核方式。盘中触发响应快但信号可能随行情反复消失;收盘确认稳定但略滞后。建议回测时两种方式都跑一遍,观察结论是否一致。
黑公网安备23010302002054号