EA是什么,就是代码化的策略,策略千差万别,大家熟悉的高频套利,马丁网格只是其中一小部分,ea包含数据采集,数据加工,条件判断,订单操作等事件,不仅仅是下单,等止盈这个逻辑。
以上的事件什么时间开始做,什么时候结束。这些事件是独立的,还是有相互作用。每一个细节必须准确,也就是可量化,这也是难点。
我个人认为写ea其实是很有好处的,第一确实可以取代部分重复性劳动。第二在写的过程中把策略的每一个环节细化,培养量化的思维。潜移默化中增强一种重要的直觉——发现策略改进的关键之处。AI时代,每个人都能写程序了,越来越多的人正在使用AI为交易策略自动化服务。
在做一个策略时,什么最重要呢,从前我感觉是天赋。但现在,我觉得直觉尤其重要而且更切合实际。能通过后天思考训练增强。直觉最大作用不是每一次下单前告诉你多空。不管做哪种形式策略,最终会指引你的必须是一套全面健壮的逻辑。而如何让逻辑逐渐趋于这个标准。得有直觉。ai并不能凭空生成直接用于实盘无缺陷的策略。无论策略框架的来源,最终都要结合实盘纠错,让策略适合自己,也适合实盘环境。你得知道该改哪里,不该改哪里。要怎么样改(告知AI修改方法)。这都是AI无法独立解决的。至于经验,那是AI的强项,他拥有大量经验。但是其中有矛盾,有错误。他缺少的是将逻辑理顺,不断向着某个方向纠错的能力。因为他没有实际做过,也就是说没有人的直觉。
下面我就结合具体写ea的经历,以点差过滤逻辑来分析迭代策略时直觉的重要性
我最近写的一个半自动的震荡策略,我已经理顺了主体功能。在这个基础上新增加一个点差过滤功能。主要包含,①收盘之前清空所带止损价。②在点差增大达到指定限制时,暂停ea,清空订单所带止损价以防误扫。③点差恢复到正常范围,ea恢复运行。
周五晚上我持仓EURUSD空单,EURCHF空单。cpi数据之前,点差拉大。有一家平台的这两个品种止损价都被清空,另一家平台EURUSD止损价没变,EURCHF止损被清空——点差风控功能②之删除止损实现,


图中ea日志显示20.29分多,点差扩大,清空止损价,20.30分点差已陆续恢复。
EURCHF在点差扩大前已接近止盈价,止盈价0.92290不含点差。当时价格在0.92320左右,如下图 15.30分对应北京时间20.30分,点差已经拉大,点差扩大后盘面上看是有个长下影线,每个平台最低价不一致。虽然位置都低于了止盈价,但是点差很大,点差是买价-卖价得到的差值。而现价一般等于卖价。表现在k线图上,是卖价(现价)拉低,买价(红线)拉高。对于空单,平仓等于以当时的买入价平仓,就被稀释了利润。所以当时EA没有平仓,等点差恢复后,价格也就回到止盈价以上了。后来又跌一波,且点差正常,才真正的触发了止盈——功能②之暂停ea,和功能③之等待恢复点差重启EA实现。

但是一个带止损策略,真正第一次经历了在实盘中因点差大撤掉止损。凭借直觉,就会感受到风险暴露了,会想在点差恢复后也及时恢复止损价。我确实在点差正常以后手动恢复了止损价。因为我看到EA没有自动帮我恢复止损价。
我之前问过AI,点差恢复会不会自动恢复止损价的问题,得到答案是不会。每次在我手动删除止损时的确会恢复止损价,而点差扩大后,再恢复正常,也都没有恢复止损价。





这套说法看上去很可信,甚至还有恰当的比喻,和实盘测试也一致。但是因为我需要在点差正常时自动恢复止损价,所以我又一次问AI同样的问题,这次他肯定的告诉我会重设止损。


其实,遇到这种前后矛盾时,再问AI他只会编造一个新的说法,但根本不会解决你的问题。需要自己找到那个关键之处,很多人就无法推进项目了。
因为我对自己的策略很了解。我的震荡策略之所以是半自动策略,是因为我把每一个关键的短线价格以手动挂单形式。让ea读取,读取到以后进行运算,判断等等,当价格回到布林中轨以后,代表行情准备进入震荡。此时手动挂单价会重置。等待我下一个挂单,而止损价就是手动挂单价加上止损点数计算得来,所以不是没有恢复止损。只是刚好手动挂单价已经重置为0,在没有给出新的手动挂单价时止损价是无效的价格。当我把以下这个灵魂拷问,给AI提出,才找到了问题的突破口。如果没有对自己策略中的变量的相互关系的熟悉,直接求助AI,那大概率将越描越黑



发现问题以后,下一步是解决问题。我看AI并没有主动帮我提供思路,我索性直接提出我的办法。结果也如我的预料,得到AI式赞美。为什么要延迟恢复止损价而不是立刻恢复止损价呢。是因为点差缩小,经常会短时间再次扩大,反复宽幅震荡,最后真正平静。所以加一个恢复止损价的延迟时间。过滤一部分点差乱跳的噪音。更好一些。
这个噪音,最典型的是出现在开盘时,如下

所以观察过开盘点差的人会很容易联想到这个情形。观察和联想,以及经验就是直觉的重要来源。
我想AI这次终于可以顺利让我实现这个功能了。

但是事情没那么简单。。。修改完的代码一测试是直接恢复了止损价,并没有任何延迟,我需要的延迟时间我已经手动输入为1分钟。


你们看看AI怎么甩的锅,说很可能我自己把延迟时间设置成0了。这种理由完全说不过去。我的直觉再次发挥作用,我估计是时间的格式问题。所以我问AI当前时间是什么格式。



看来时间是可以直接比大小的,排除格式不匹配原因。继续问


AI还是把问题归结于设置延迟时间太短上面。显然不是这个原因,不过最后验证的建议提的很好,用经典办法输出关键数值查错,也直接找到问题所在。





AI提出两个方案,说实话,我不理解为什么那么改就能奏效。但我想到一个更容易的办法。AI式赞美再次扑面而来。

每一个看似小小的问题,解决起来有可能就要费一番功夫。世上没有早知道就好。写EA也没有,最好的办法是实盘测试。AI告诉你肯定没问题了,也不能相信。举个例子,比较离谱的一次是写到指定时间之后,自动清除止损价,比如服务器23.45分以后,即收盘前10分钟左右,删除掉止损,AI第一次给我写的是如果小时大于等于指定小时,且分钟大于等于指定分钟,才清除止损。这个错误是不是很滑稽。因为AI的基本生活经验是没有的,实际上只要小时大于小时,分钟无论是多少,都是符合条件,当小时等于小时时,再去比较分钟。这是常识,但是看似无所不能的Ai就是会搞错这种问题。
,你永远不知道你的下一个问题抛给AI他刚开始就知道,还是绕过弯子才知道。
周一开盘,EURUSD低开止盈,我马上检查ea运行日志。执行很好,很健壮。但是如果是反向高开,那怎么办。AI给我写的并没有包含点差恢复正常以后,发现越过了止损价。如何处理。这种情况就是趋势突变,坚决现价止损是最好的办法。于是我又加入了这个功能。作为一个普通人我写ea也是踏实的走一步看一步,不断发现新问题,我就不断修改完善,修改时我会把前一版备份。有些逻辑能力强的可以走一步看好几步,更快的做到AI说的全面健壮。我的确要花更多的时间。偶尔走一些弯路。但是幸运的是我还算比较善于利用实盘纠错。

为什么一定要有一个精确止损价?而不能只有现价止损,因为精确止损价优先级最高,他存储在平台服务器。正因为优先级高,所以在突发黑天鹅时,EA还没有来得及把点差大取消止损价的命令发给服务器,服务器就能先执行掉了精确止损。这是一种很好的保护。但是当大点差来了,但没有明显趋势,却刚好越过了止损价时。虽然已经发送清除止损价的指令,但是精确止损价仍然可能会被服务器直接执行,那也是没办法的。不过这种概率挺小的。
下面这段有点绕,我自己都读几遍才理解,可直接跳过阅读,不影响
任何事都有两面性,为了规避大点差而暂时清除止损价,带来的好处是减少误扫损,但是大行情里,需要人工辅助止损,不然也容易大亏,因为逻辑分支是,大点差清除止损价后,恢复止损价以及现价止损在点差恢复延迟一定时间后,才会执行。这个延迟时间不能太短,太短容易被无规律点差宽幅跳动,止损于非常大的点差时的报价,但是越长越容易暴露风险。。我们可以选择加上百分比的硬止损,当跳空后第一个报价出现,无论点差是否大,只要超出强制止损比例。那他就该止损,亏百分之10,也好,20也好,第一时间平仓。如果没有到达硬止损。但越过订单止损,只是点差没有完全回归正常,或者回归正常但仍处于延迟时间,人工就适当介入,积极止损。如果人工未来的及干预,那点差恢复正常时ea立即判断是否还越过订单止损。有可能价位更差,也有可能更好。不过一般情况是,点差恢复正常但未到止损价>延迟一定时间恢复止损价>恢复以后点差进入长时间平静>等再度扩大>就再删除止损价并保存止损价且暂停ea>等点差恢复>启动除恢复止损价外所有功能>等待指定延迟时间>恢复止损价。(上面这段有点绕,我自己都读几遍才理解,可直接跳过阅读,不影响)
学无止境,盯着下面开盘的EA日志,我猛然发现,5.05到5.05.01分EURUSD开盘这一秒又教会了我新知,ea先检测到3个点的点差。和价格穿过止盈开始减仓,然后点差跳到46,减仓的单子成交在了高点差上,1.16710点差再次跳回3,执行第二次减仓。这次成交在了低点差上 1.16667。他明明很好的完成了任务,但是依然被点差吞掉了一些利润。随机宽幅震荡的点差持续到6.18分,已经开盘1个多小时,终于彻底恢复正常。这次我不改了,在止盈时承受点差的波动比因为多等几分钟而错过了止盈价,要好的多。止盈就应该在点差恢复时,及时判断。哪怕这一秒点差变了好多。也没事,一次少赚而已,能次次少赚吗?

不难看出两个订单同一秒平仓,但是价位差了不少。那大概率是纯的点差波动造成。


编辑长文不易,希望看完后,你们会对点差和AI写策略有个新的认识
Tuyên bố miễn trừ trách nhiệm: Quan điểm được trình bày hoàn toàn là của tác giả và không đại diện cho quan điểm chính thức của Followme. Followme không chịu trách nhiệm về tính chính xác, đầy đủ hoặc độ tin cậy của thông tin được cung cấp và không chịu trách nhiệm cho bất kỳ hành động nào được thực hiện dựa trên nội dung, trừ khi được nêu rõ bằng văn bản.

-KẾT THÚC-