开发交易算法的科学方法·进阶篇
📘

开发交易算法的科学方法·进阶篇

第 2/2 篇

◍ 为什么价格图必须长成趋势又不全是趋势

直接拿一个没解释清楚的规律去跑实盘是危险的。你并不知道它为什么存在、是否稳定,也不知道它何时消失、何时回来。真金白银进场前,必须能追踪该模式是否还在:当存款从峰值长期回撤却很快修复,说明模式还在;若一路掉下去不回头,大概率是模式失效,该停机器人了。盈利与亏损 EA 的分水岭往往就在这一刻的判断。 我们提出的假说核心有两点。第一,块尺寸越大,以 1 分钟收盘价构成的块在关闭时的相对增量越小,开平仓误差越小——因为块内尺寸在一段范围内相当稳定,块越大趋势成分被稀释得越厉害。第二,块越大,价差和佣金相对于价格变动的比例越小;市场有效,便会按比例削弱趋势。这两点能解释为何模式在全品种、全周期都存在,但大周期趋势性更低。 小周期里哪怕消除了价格误差、市场确有趋势,那点趋势往往只够覆盖价差加佣金。很多剥头皮开发者栽在这里:以为换个低佣金券商机器人就能盈利,其实小周期趋势本就只够喂饱交易成本;佣金一低,别的参与者早把这点残差榨干并毁掉了模式。这里说的仅指不用前端运行、深度与成交量分析的纯简单头皮机器人。 金融市场利润从哪来?场外外汇也是对手互交易,你赚的等于别人亏的加经纪佣金。买卖双方都觉得自己占便宜,说明至少有一方在锁定利润时犯了错。价格图若真是标准正弦,低点人人想买、高点无人愿卖,没成交就没价格轨迹;若真是一路线性上涨,没人肯卖也就没人买得着。所以真实图表必然介于两者之间:熵够高,让买卖双方的利润都不显而易见,交易才可能发生。 按香农熵,均匀分布熵最大,而市场更接近正态过程。我们的块分析显示方向反转概率不等于 50%,说明有记忆、熵未达最大。市场会奔着最大熵去,但只有参与者无限多或无限“聪明”时才到得了——后者指能识别极复杂模式。二十世纪初用根 MA 就能赚钱,现在算法交易者变“聪明”、算力强、决策快,模式更复杂、熵更高、钱更难赚。 但我们发现的简单模式仍有存活空间:资本持续流入市场创造了趋势成分。各国不断发钞维持通胀,货币创造可能正是趋势源。由此推:高投资吸引力的资产趋势性强于冷门资产;交易品种趋势强度随参与者增多、变聪明而下降;EURUSD 这类发达货币对趋势性应弱于新兴股票——银行携资源做“智能”算法、流动性极高,都在压低熵、压低趋势。

「用四个品种验证趋势性假设」

上一步只是把「为什么形态会有效」落成一句可证伪的猜想,这一步要拿真实报价去撞它。假设分两层:高投资吸引力的资产趋势性更强;参与人多、流动性高的资产趋势性更弱。 挑了四个极端不同的标的做横比:EURUSD 参与人数最多、流动性最高但投资吸引力低(法币长期受通胀侵蚀);AAPL 个人投资者海量、流动性高但弱于欧美;SBER 全球吸引力与流动性都明显不如 AAPL;AMEZ 两者皆低、基本横盘。 图5给出的趋势性数值直接说话:EURUSD=1.068,AAPL=1.3,SBER=1.168,AMEZ<1。排序正好是 AAPL > SBER > EURUSD > AMEZ,和「吸引力推升趋势、流动性压低趋势」的猜想同向。 这套数据不推翻原假设,说明它暂时能留着进下一轮开发。外汇与贵金属自带高杠杆与流动性突变,用此类统计结论下单仍属高风险,只能当过滤条件而非入场依据。

把价格差模式落成区块交易机器人

模式本身不复杂,所以算法也该保持轻量。核心思路是把 M1 烛形重建成每块 N 点的区块图,区块生成逻辑直接写进 EA,交易完全跟着区块方向走。 预期收益用一条公式框定:m = P(tp)*tp - P(sl)*sl。其中 P(tp) 是盈利概率,P(sl) 是亏损概率,tp 与 sl 分别是平均盈、亏点数。这条式子只用来判断模式是否值得做,不预示任何固定收益。 具体触发很直白:一个下跌或上涨区块收盘后,顺区块方向开仓——跌块开卖,涨块开买,且市场上始终只留一个头寸。平仓信号就是反方向区块形成:买仓等跌块,卖仓等涨块。 图里能看到烛形和区块收盘价不一致、留出价格差,这是区块算法本身的特性。为避免在不利价差下进场,加一条硬条件:若烛形收盘与区块收盘差超过阈值,就等价格回踩区块收盘价再开。 止损按区块大小 BS 乘系数 ksl:卖单 SL = Bclose(op) + BS*ksl,买单 SL = Bclose(op) - BS*ksl。获利则用每根新区块收盘重算:卖单 TP = Bclose(0) - BS*ktp,买单 TP = Bclose(0) + BS*ktp,这样在特大烛形出现时可能多吃一段。 手数随块大小浮动:lot = lot(set) / (BS / minimum BS),目的不是在波动放大时搏更大利润,而是让每笔风险相对锚定。区块大小可写死(如 0.02 点),也可取 5*ATR 做自适应,波动起来块就变大。 外汇与贵金属为高杠杆市场,这套机制只解决进场与风控结构,实盘前请在 MT5 策略测试器用历史数据核对区块重建与价差过滤是否如预期。

MQL5 / C++
m=(P(tp)*tp)-(P(sl)*sl)

◍ 用 EURUSD 与 AAPL 验证零期望假设

把算法直接丢进之前预判过盈亏倾向的资产里跑,不看优化、只看裸表现,才能知道假设站不站得住。EURUSD 先上:2018.01.01–2020.07.28,M1 真实点模式,参数没动过,只调块大小、最小块大小和手数,想让利润盖过手续费。 结果很直白——预期收益每笔 -1.67 美元,点差和佣金吃光了微弱趋势该给的利润。机器人记了开盘收盘平均点差 0.00008,614 个仓位共付隔夜息 159.76 美元,摊到每仓 0.2602 美元;0.078 平均手数下 1 pip 值 0.078 美元,8 点差就是 0.624 美元,加隔夜息佣金合计 1.104 美元/笔。 用最小块 0.002、平均每手赚 15.6 美元做随机游走估算:15.6×√614≈386.55 美元,再加 1.104×614 的佣金,平均回撤理论值 1064.41 美元,实亏 1027.45 美元,基本对上。结论只能是:EURUSD 上这算法期望收益趋近于零,亏在成本。 换 AAPL 这只趋势更明确的股票,动态手数下预期收益 +19.33,图稳为正。把平均手数 39 锁成固定值再跑,曲线没大变,只是末尾少赚一笔、回撤略增——块大小随波动膨胀时,固定大手数利润大但缩水概率也跟着涨。 只卖模式小亏,和分布左偏的预判一致;只买模式正但不如买卖双边。股票本身有交替波段,双边开仓反而让余额图更平。AMD(2018.06 起有 M1 历史)和 TSLA 用动态手数双边测,都走出稳定正结果;Sberbank 用 Otkritie 经纪佣金 0.057%/手、无杠杆测,流动性差却也出趋势。外汇贵金属高杠杆品种成本敏感,股票低成本环境才容得下这种裸算法。

「最后一句大实话」

这套基于动态区块的算法目前只是验证想法的雏形,实盘里仍要把区块收盘价与持仓开盘价之间的滑点压下去——原文提到转向实时点图分析是可行方向之一。 外汇和贵金属的高波动低趋势特性让不对称信号被磨平,赚钱难度天然高于股市;切换到限价单逻辑可能提升盈利,但代价是系统更复杂,还需继续研发。 思路已经跑通,潜力在,但远没到能躺赢的地步。打开 MT5 把 robot.zip 里的 EA 加载到分钟图,先观察 40 个区块后的概率偏移,再决定要不要动参数。

常见问题

价格图整体呈趋势特征但局部大多时间是噪声,肉眼易把噪声当信号。用滚动标准差看区段波动,只在趋势斜率显著段下手,其余时间空仓。
取 EURUSD、XAUUSD、NAS100、AAPL 的日线,算相邻收盘价斜率与回归 R²。R² 长期高于 0.4 且斜率非零,才倾向有可交易趋势。
小布会按你设置的斜率与 R² 阈值扫描品种页,标出趋势段并提示噪声区,你只需决定是否进场,不用自己算指标。
优先调区块长度与突破倍数。区块太短噪声多,太长错过起点;突破倍数设 1.5~2 倍标准差外较稳,外汇贵金属高风险需从严。
说明该周期下均值回归或趋势成分未被完全剔除,原假设不成立。应换周期或加过滤器,别直接拿来跑实盘。