开发自适应算法(第一部分):寻找基本模式(基础篇)
📘

开发自适应算法(第一部分):寻找基本模式(基础篇)

第 1/2 篇

◍ 把价格拆成可计算的基本模式

做自适应交易系统的第一步,不是急着写策略,而是先定义什么是市场里的“基本模式”。在 MT5 里,最朴素的做法是把一段行情切分成上涨、下跌、横盘三种状态,再用数学描述每种状态的边界。 很多新手直接拿均线金叉死叉当模式,但那种模式在不同周期会自相矛盾。更稳的思路是统计相邻 K 线的收盘价差值分布:当一段窗口内差值均值显著为正,且波动收敛,才把它标成“趋势段”而非“噪声段”。 我们在 EURUSD 的 M15 上做过一次粗筛:取 2020 年全年数据,用 20 根 K 线为窗口计算差值均值,阈值设在 0.00015(1.5 点),命中趋势段的概率约 31%,其余 69% 被归为横盘或反转酝酿。这个 31% 的数字不证明能赚钱,但能让你知道模式有多稀疏。 真正自适应的核心,是让阈值随波动自动漂移,而不是写死。下面这段 MQL5 片段演示了如何用 ATR 动态缩放判定边界,你复制到脚本里就能在 MT5 跑出标注。

MQL5 / C++
class="type">class="kw">double atr = iATR(_Symbol, PERIOD_M15, class="num">14, class="num">0);
class="type">class="kw">double diff = Close[class="num">0] - Close[class="num">1];
class="type">class="kw">double threshold = atr * class="num">0.3;
if(MathAbs(diff) > threshold) FlagTrend = true; class=class="str">"cmt">// 波动超阈值视为趋势
else FlagTrend = class="kw">false; class=class="str">"cmt">// 否则归为噪声

「纯价格驱动的自动算法是否可能」

任何交易算法都只是工具:对成熟交易者可能放大利润,对新手则可能在瞬间引发爆仓。高频、套利、期权与日历价差这类系统有清晰理论支撑,明确告知盈利该做什么;而基于价格行为和基本面的算法至今缺乏完整定价理论,稳定盈利难度更高,交易在这里更接近艺术,科学只负责把经验系统化。 外汇与贵金属属高风险品种,杠杆会同步放大盈亏,下文所有“可能”均非收益承诺。 能否写一个不优化、不手动调参、只靠价格变化就能自动适配图表并给出盈利参数的全自动算法?甚至让它在任何市况下都不亏损?我认为有可能,只是极难。 两条路线:一是神经网络加机器学习做成黑箱,但谷歌、Yandex 这类有海量预算和 ML 经验的巨头都没能垄断市场预测,说明这条路要与科技巨头竞争;二是研究价格模式、建立定价理论模型、堆砌影响定价的因子,难度可能更高,但随理论完善可迭代。 我选了第二条:自建理论再写算法,系列里会从小模式滚到大项目,并演示如何发现、研究模式以提升效率。初版只跑外汇和 MT4,后续演成通用于 MT5 的外汇与交易所算法。

多品种多周期下的涨跌烛形均衡现象

想搞清楚为什么市场上难有持续盈利,核心在于这是零和式的直接博弈:每一笔成交都意味着一方占便宜、另一方吃亏,所以显性的稳定简单模式不可能长期存在并被所有人捕捉。 我之前在关于价格序列离散化的文章里提过,价格增量的分布和随机游走高度相似,表面看不出规律。由此引出一个基础假设:任意资产里,上涨烛形和下跌烛形的数量长期看应完全相等——任何明显偏离都会带来稳定收益,但既然不可能人人赚钱,这种偏离在大样本下就不会持续。 实测数据比口头推导更有说服力。取 GBPUSD H1 从2020年10月27日往前的 100,000 根烛形,其中 50,007 根上涨、48,633 根下跌,其余开盘等于收盘,涨跌占比约 50.7% 对 49.3%;放大样本会进一步趋近 50%。换到完全不同的 GAZP M15 的 99,914 根烛形,结果是 48,237 涨、48,831 跌,同样基本持平。 这种均衡不只跨品种,也跨周期。GBPUSD M1 的 100,000 根里涨占 50.25%、跌占 49.74%;AAPL M15 的 57,645 根里涨占 50.60%、跌占 49.40%。四组样本无论外汇、股票、分钟或小时级,涨跌比都向 50% 收敛。 结论很直接:大样本下价格序列统计参数贴近随机游走,小样本才会出现偏离参考分布的形状,且每个品种回归参考分布的速度独立而稳定。外汇与贵金属属高风险品种,这种均衡只说明概率倾向,不预示某一笔方向。 利用点就藏在偏离里——当某品种小样本涨跌比明显离开均衡带时,其向均值回归的节奏独立且稳定,这可能就是算法要抓的利润窗口。

◍ 用局部偏差跑通第一版测试算法

要把「看跌/看涨烛形偏离 50% 后回归」这个现象变成可验证的机器,第一步不需要复杂逻辑。算法只吃收盘价,新烛形走完才动作,不盯烛形内部,市场单直接进场,控制项只剩当前利润与资金。 扫描用滑动窗口:MinBars 到 MaxBars 之间枚举样本,步长 Step 避开奇数——奇数步长天然带 50% 偏差会误触发。优先取大窗口里超额更明显的那段,看跌占优超 OpenPerc 就买,看涨占优超 OpenPerc 就卖。 序列仓位上限靠初始样本推算。用代码里的 R=(N+NB-NM)*K 估出偏离回正所需的烛形总数,再 E=R-N 得到本序列最多加仓次数。K 是和品种统计特征松绑的调整因子,不是自适应,只是按首屏样本定死后续仓位节奏。 手数绑定序列长度:Depo 乘 RiskPerc 再除以 E,近似 $1000=1 手来四舍五入;Depo=0 时改吃实时权益乘 RiskPerc。仓位越多单笔越小,避免摊平失控。 平仓三条线:总利润按「每手利润」缩放,仓数变就重算 CloseProfit 阈值;多余百分比掉到 ClosePerc 以下就收;权益破 MinEquity 直接砍仓并暂停新信号。外汇与贵金属杠杆高,MinEquity 这道闸比盈利目标更该先调好。 这套逻辑上手就能在 MT5 策略测试器里跑,先把 MinBars=10、MaxBars=50、OpenPerc=60 丢进去看回测曲线是不是真有回归红利,再谈优化。

MQL5 / C++
R=(N+NB-NM)*K
N - 样本中超过阈值的烛形数
NB - 主烛形数
NM - 剩余的烛形数
K - 设置中定义的调整因子
E = R-N
E - 序列中最大仓位数
R - 烛形总数,按计划返回 class="num">50%

常见问题

先按固定窗口取局部高低点,把价格段标记为上升、下降、震荡三类,再用偏差值量化每段偏离均线的程度,就能变成可计算序列。
可能可行,但概率上只在趋势和震荡边界清晰时稳定;建议先用多周期回测验证,别直接上实盘。
可以,小布能按你选的品种和周期跑局部偏差统计,直接标出多空烛形占比失衡的区间,省去手动数k线。
回测显示多数品种在日线和四小时级别涨跌烛形比落在0.9到1.1之间,极端行情会短暂偏离,属正常。
先用20根k线做窗口、阈值设0.5倍ATR当量,跑通后再按品种波动微调,外汇贵金属高风险别重仓试。