[求助]EA中如何加快平单速度,并且保证平掉?
本帖最后由 honolulu 于 2016-6-28 09:46 编辑
朋友问到平多个订单速度较慢的问题,突然想起了这个事。
遇到过一次因为交易商的问题,平多个订单时发出一个订单的OrderClose后至少1分钟无返回消息,导致循环中后几个订单不再发送close命令了(日志中查无后续close发出)。
可见,收到错误信息已经是近3分钟后的事儿了。
交易商补偿是按照订单发出close时的价格给补偿,这就造成没正常发送close的几个订单无法获得补偿。
如果是检测OrderClose的返回值,也会因为交易商并不是立刻返回错误,要拖1分钟以上,黄花菜都凉了。
分析了好久,感觉问题是否在 后续的close在循环中发送时,如果第一个close仍然在占用进程,导致后续close完全无效?
于是新改进的方法是在循环中加入
,但是能否解决也不确定,毕竟这函数本意不是用在这儿的。而且会否引起其他连带问题。毕竟这种交易商的结单延迟不是经常可以遇到的,没办法测试。
各位兄台有什么更好的办法么?
对于平多个订单,就只能一个一个close么?就不能一个close里包含多个ticket一股脑丢给交易商么。。
有完美的平仓自定义函数的兄台不要藏私啊,先谢过了。
-----
我晕,这帖子还发不了。说违反了论坛的安全防范策略 我就 叹号艾特井号刀了百分号了。。 代码改贴图试试。
QQ截图20160628094450.pngQQ截图20160628093537.png
发表于:2016-06-28 01:47只看该作者
2楼
全局变量作为标记 每一副图表检查到标记变化之后 均可以发出CLOSE命令。 可以看做是多线程的CLOSE。
韬客社区www.talkfx.co
发表于:2016-06-28 01:50只看该作者
3楼
比如有 EURUSD GBPUSD USDJPY 三个图表均有单。 3图表的EA检测到全局变量是需平仓的命令时候。 均可以发送CLOSE命令。 意味着三个CLOSE是同时下达的。
点评
发表于 2016-06-28 02:06
韬客社区www.talkfx.co
My name is 张代理 ~
发表于:2016-06-28 02:03只看该作者
5楼
感觉楼主写的程序有点问题,日志的第一句的最后 “at price 0.00000”? 在价格0.00000处关闭订单肯定是不行的,难道你的OrderClose函数的 输入的关闭价格是0,不是Bid?
点评
发表于 2016-06-28 02:09
韬客社区www.talkfx.co
6楼
fllaga 发表于 2016-6-28 09:50
比如有 EURUSD GBPUSD USDJPY 三个图表均有单。 3图表的EA检测到全局变量是需平仓的命令时候。 均可以发送 ...
韬客社区www.talkfx.co
7楼
张翠山 发表于 2016-6-28 09:55
不懂mt4,但听楼主描述感觉是黑平台 试试市价单开相反仓,开仓总不会不执行把。
点评
发表于 2016-06-28 02:10
韬客社区www.talkfx.co
8楼
cipx 发表于 2016-6-28 10:03
感觉楼主写的程序有点问题,日志的第一句的最后 “at price 0.00000”? 在价格0.00000处关闭订单肯定是不 ...
发表于:2016-06-28 02:10只看该作者
9楼
honolulu 发表于 2016-6-28 10:07
用杜卡的不要来砸场子 信不信我鄙视你 也不是黑平台啦,最后还给了补偿的。毕竟服务器、网 ...
点评
发表于 2016-06-28 02:13
My name is 张代理 ~
发表于:2016-06-28 02:10只看该作者
10楼
11楼
张翠山 发表于 2016-6-28 10:10
和杜卡无关,反向开仓的意思是锁仓 只有美国平台禁止锁仓,其余国家的都可以 意思就是先锁住仓,等不忙 ...
点评
发表于 2016-06-28 02:16
韬客社区www.talkfx.co
发表于:2016-06-28 02:16只看该作者
12楼
honolulu 发表于 2016-6-28 10:13
嗯 这个知道的。不过新下的0.01也是错误的。那锁仓单也不会成交吧?
点评
发表于 2016-06-28 02:22
My name is 张代理 ~
发表于:2016-06-28 02:16只看该作者
13楼
只能检查平仓返回值了,平仓不成功再来,没别的办法。平台要黑你,断网几分钟,再连上,你的EA才开始检查。已经错过最佳报价了。
点评
发表于 2016-06-28 02:25
汇神专一郎
14楼
张翠山 发表于 2016-6-28 10:16
锁仓是开仓,如果平仓不行,开仓也不行,试试修改单子行不行,给单子止损改到已经触发的位置 如果这也不 ...
韬客社区www.talkfx.co
发表于:2016-06-28 02:24只看该作者
15楼
16楼
kimfufree 发表于 2016-6-28 10:16
只能检查平仓返回值了,平仓不成功再来,没别的办法。平台要黑你,断网几分钟,再连上,你的EA才开始检查。 ...
韬客社区www.talkfx.co
发表于:2016-06-28 02:26只看该作者
17楼
本帖最后由 smile2u 于 2016-6-28 11:30 编辑
明确告诉你,在你发出指令后,后面的动作和结果都不是你能控制的了,你只有等。
行情走的慢时还好。剧烈动荡时,成交在哪,多久成交,你只有认命的份。
这并不是MT软件的毛病,是MT与此公司的LP之间清算过程固有的毛病。
因此选择有较大LP做后盾的公司就比较重要。只是一般情况下你查不到此公司后面真正接入的是什么LP。
通常听说的是其背后接入了几十上百家银行流动性,这是句不准确的废话。准确的说应该是,通过Sucden Financial 或cfh 或hotspots 或dukascopy 或Currenex 或FC Stone 或LMAX 或X open hub 或......
接入了百余家银行的流动性。
因此报价、执行速度、滑点都会有很大的不同。
韬客社区www.talkfx.co
发表于:2016-06-28 02:29只看该作者
18楼
拖几分钟就完了? 黑天鹅还用EA啊,真胆大
韬客社区www.talkfx.co
19楼
smile2u 发表于 2016-6-28 10:26
明确告诉你,在你发出指令后,后面的动作和结果都不是你能控制的了,你只有等。 行情走的慢时还好。剧烈动 ...
韬客社区www.talkfx.co
发表于:2016-06-28 03:14只看该作者
20楼
本帖最后由 scalping 于 2016-6-28 11:35 编辑
IsTradeContextBusy()不在这个地方用,是用来判断同一个MT4上同一个货币兑上是否有复数的EA在跑,判断出了也没办法,除非装填的时候不让装填。
多个ea在跑时,如果其中一个发出closeorder后,还没等返回结果,另外一个ea也发出一个closeorder,这第二个就会得到Error 146 (Trade context busy) 。如果要判断这种情况,这个地方判断ERR_TRADE_CONTEXT_BUSY(146)错误。只有一个EA是不会出现这个错误的。mt4不允许一个货币对同时发https session connect请求。
同一个货币兑上是否有复数的EA不可避免,发生ERR_TRADE_CONTEXT_BUSY也很偶然但不可避免,closeorder上加一个循环就行,出了错就循环n次重新请求,只有出现135错误(ERR_PRICE_CHANGED)时发一个refreshrates后再重新请求。结果正确了就退出这个小循环。
点评
发表于 2016-06-28 03:34
韬客社区www.talkfx.co