使用电子表格建立交易策略·综合运用
「用表格函数给信号列做概率分箱」
这段逻辑把 GBPUSDH1 的 demo 数据当底表,用类表格公式给 N4 信号列做状态编码与频率统计。N4 非空时取绝对值,配合 I3 的转向标记,把 N(N4)>0 且 I3=-1 编为 1、N(N4)<0 且 I3=-1 编为 -1、N(N4)>0 且 I3=1 编为 2、N(N4)<0 且 I3=1 编为 -2,其余留空。 频率侧直接用 COUNTIF 对 N 列全样本(N4:N6038,共 6035 个数据点)算单值占比,再用 COUNTIFS 按 F2 到 F3 的区间做分箱计数再除以 COUNT 总数,得到每段信号密度的概率估计。外汇与贵金属属高风险品种,这类频率仅描述历史样本分布,后续实盘倾向需结合实时波动验证。 区间宽度由 F2+Interval 递推,而分组跨度用 (MAX(C2:C214)-MIN(C2:C214))/(1+3.222*LOG10(样本数)) 做动态归一,对数项压住了大样本的过细切分。开 MT5 把 GBPUSDH1 的 Metaquotes demo 导出成同结构底表,替换 N4 与 I3 源即可复算这套分箱。
=<IF(AND(N(N4)>class="num">0;I3=-class="num">1); class="num">1 ;IF(AND(N(N4)<class="num">0;I3=-class="num">1); -class="num">1 ;IF(AND(N(N4)>class="num">0;I3=class="num">1); class="num">2 ;IF(AND(N(N4)<class="num">0;I3=class="num">1); -class="num">2 ;"")))) =<IF(N4<>"";ABS(N4);"") =<VLOOKUP( ROW(class="num">1:class="num">1);&class="macro">#x27;GBPUSDH1-Metaquotes-demo&class="macro">#x27;.$M$class="num">3:$N$class="num">6038; class="num">2 ) =<COUNTIF(&class="macro">#x27;GBPUSDH1-Metaquotes-demo&class="macro">#x27;.$N$class="num">4:$N$class="num">6038;C2)/COUNT(&class="macro">#x27;GBPUSDH1-Metaquotes-demo&class="macro">#x27;.$N$class="num">4:&class="macro">#x27;GBPUSDH1-Metaquotes-demo&class="macro">#x27;.$N$class="num">6038) =(MAX($&class="macro">#x27;Profit data&class="macro">#x27;.C2:$&class="macro">#x27;Profit data&class="macro">#x27;.C214)-MIN($&class="macro">#x27;Profit data&class="macro">#x27;.C2:$&class="macro">#x27;Profit data&class="macro">#x27;.C214))/(class="num">1+class="num">3,class="num">222*LOG10(COUNT(&class="macro">#x27;GBPUSDH1-Metaquotes-demo&class="macro">#x27;.$N$class="num">4:&class="macro">#x27;GBPUSDH1-Metaquotes-demo&class="macro">#x27;.$N$class="num">6038))) =C2 =F2+Interval =<COUNTIFS(&class="macro">#x27;GBPUSDH1-Metaquotes-demo&class="macro">#x27;.$N$class="num">4:$N$class="num">6038;">="&F2;&class="macro">#x27;GBPUSDH1-Metaquotes-demo&class="macro">#x27;.$N$class="num">4:$N$class="num">6038;"<"&F3)/COUNT(&class="macro">#x27;GBPUSDH1-Metaquotes-demo&class="macro">#x27;.$N$class="num">4:$N$class="num">6038)
把表格策略丢进测试器会怎样
用现成的 Examples\Moving Average EA 跑了一遍表格策略,结果有点反直觉。它在表格建议平仓的时点反而开仓,在建议开仓的时点收手——这倒不算离谱,因为 EA 拿到的数据窗口和我手工表不同,比如我表里 2019-11-25 19:00 起算,EA 被设成从当天开盘就介入。 真正奇怪的是成交笔数:测试器比我的表多跑了 20 笔交易,但核心指标贴得很近。预期收益方面,表格是 +0.07(近乎零),EA 是 -0.76 到 +0.41 在零轴附近晃;胜率表上是 26.52% 盈利 / 73.48% 亏损,EA 是 29.22% / 70.78%——考虑到总量差了约 8%,这 3% 的胜率差基本可忽略。 两张盈利曲线也几乎一个模子:都在零上下波动,振幅约 ±500 点,2 月同时冒出峰值。说明这套逻辑不管手工还是机器跑,边际收益都薄得可怜。 我搭表加调数花了半小时,弄懂 EA 大致算法 10 分钟。但没必要真写个新 EA——除非先确认策略值得自动化。外汇和贵金属这种高杠杆品种,零轴附近的策略随时被滑点和点差吃掉,手工盯盘反而更可控。
◍ 把工具请下神坛
电子表格对没编程底子的人很实用,能快速把策略原型搭出来,之后再转成 MQL5 交给 MT5 跑。它公式看着不像代码那么规整,但即时试错、高亮单元格、随手画图这些能力,是写代码前 cheapest 的验证场。 若你已经在表里有交易日志,或能把它导进去,就能用现成函数筛出亏损单、定位重复犯错的模式。GBPUSDH1 的样例压缩包约 1309.3 KB,里面是 MetaQuotes 演示账户的导出数据,下下来拖进 Excel 就能照着改。 外汇和贵金属杠杆高、滑点狠,表格算出的胜率只是历史概率,真上 MT5 前先用策略测试器跑一遍,别把回测当保命符。