////// Отслеживает поступление новых трейдов в истории трейдов.///void TrackingHistoryDeals()
{
int total = HistoryDealsTotal();
//Перебираем все доступные трейды и формируем на их основе прототипы будущих позиций типа COrderfor(; dealsCountNow < HistoryDealsTotal(); dealsCountNow++)
{
ulong ticket = HistoryDealGetTicket(dealsCountNow);
AddNewDeal(ticket);
graphRebuild = true;
}
}
是的,不使用OnTradeTransaction是可能的,但那样你就必须挖掘历史,这将降低EA的整体性能。
每个开发者都有选择的权利!
这就是为什么我开始向这个方向挖掘...
谢谢你的澄清。我将继续挖掘。没有人催促我。:))))
这就是为什么我开始向这个方向挖掘...
谢谢你的澄清。我将继续挖掘。没有人催促我。:))))
问题是,我给出的例子只是一个保险,即TradeTransaction事件不会发生
事实上,我已经在一个 每天有2000笔交易的真实账户 上对该EA进行了6个月的日常工作。
我从来没有遇到过 "紧急 "情况!"。
好运!
仿佛我们明白了一切,拍手称快。对不起,但你的代码是一团糟。
哦,对了,我完全忘了,瓦西里!
代码是100%有效的--把EA放在演示中,看看它是如何工作的。
在正常模式下,然后注释掉OnTradeTransaction函数,你就可以
你将看到 "紧急 "模式是如何工作的。
所以,如果你不使用异步,就不需要OnTradeTransaction处理程序,因为猫头鹰会等待服务器的响应?
不要把事情复杂化。没有必要使用异步法在FORTS上交易。首先,请看这篇文章 的第3章:"异步操作的基础知识"。这不多,非常基本,但足以开始学习。那里描述的代码是100%异步的,然而,这并不妨碍它在同步模式下工作,而不获得所有OnTradeTransaction和其他事件。
但到目前为止,我还没有找到确定止损单是否已被激活的最佳方法。例如,我设置市场买入0.1和卖出止损0.3,但当它激活0.3时,它仍然是0.2,在什么时候我应该跟随它...因此,事实证明,我们必须在每一次打勾时遵循两个命令。而我想在交易发生时才解除猫头鹰和控制。我想要的甚至不是控制,而是检查发生了什么并决定做什么。但我想情况并非如此......。也许最好是回到旧的、经过测试的方法......。
解决办法应以你的任务为基础。在MetaTrader 5中,你在任何时候都只有一个活动头寸,所以要靠你自己去关注它。没有必要查看订单历史。如果你仍然需要订单历史,那么你需要明确你的目标。
哦,对了,我完全忘了,瓦西里!
代码是100%有效的--把EA放在演示中,看看它是如何工作的。
在正常模式下,然后注释掉OnTradeTransaction函数,你就可以
你将看到 "紧急 "模式是如何工作的。
我已经更仔细地看了你的代码。你把事情搞得太复杂了。不应该有任何 "紧急 "模式。无论你使用的是同步还是异步交易类型,你都必须专注于对交易环境 的分析。对OnTradeTransaction类型的事件的分析具有辅助性质。
是的,你可以省略OnTradeTransaction,但在这种情况下,你将不得不搜索历史,这将大大降低专家顾问的速度。
每个开发者都有选择的权利!
这不是真的。分析历史并不会降低EA的性能。不写长的CheckOrder(),而写这样的东西就可以了(真正的工作代码)。
这就是全部。新交易的到来将由TrackingHistoryDeals()函数自动检测,而该函数又会被系统定时器调用。这个函数也必须在OnTradeTransaction()中调用,例如在TRADE_TRANSACTION_DEAL_AD事件发生时调用,以获得速度,而不是依赖设定的定时器权限。如果这个事件丢失了,专家顾问会在稍后发现这些变化(在我的例子中是200毫秒),等待下一次定时器的调用并获得订单触发的信息。
更仔细地看了你的代码。你把事情搞复杂了。不应该有任何 "崩溃 "模式。无论你使用的是同步还是异步交易类型,你都应该专注于分析交易环境。对OnTradeTransaction等事件的分析具有辅助性质。
这是不正确的。对历史的分析并不会降低专家顾问的性能。你只需要写这样的东西,而不是你的长的CheckOrder(),(真正的工作代码)。
这就是全部。新交易的到来将由TrackingHistoryDeals()函数自动检测,而该函数又会被系统定时器调用。这个函数也必须在OnTradeTransaction()中调用,例如在TRADE_TRANSACTION_DEAL_AD事件发生时调用,以获得速度,而不是依赖设定的定时器权限。如果事件丢失,专家顾问会在稍后发现这些变化(在我的案例中是200毫秒),等待下一次的定时器调用,并获得订单触发的信息。
我们在说不同的语言。
你坚持你的观点,而我,如果你允许的话,将坚持我的观点。
你甚至没有看到那些明显的东西。
当TradeTransaction事件到来时,你不需要检查任何东西--所有的数据都已经存在了。
如果TradeTransaction事件已经到来,CheckOrder()函数根本就不起作用!!!。
我们在用 "不同的语言 "说话。
保持你的观点,而我,经你允许,将保持我的观点。
不,我们说的是同一种语言--MQL5和其异步方言OrderSendAsync。无论你怎么看,你都必须用Async来解决同样的问题。请看我上面的文章。异步代码--与外部专家同步互动。本质上是多态性的一种非琐碎表现。所有这些都要归功于这样一个事实,即该代码的重点是对交易环境变化的分析。这再次证明,事件驱动模型是有用的,但却是次要的,即使在异步操作中,我们也可以不使用它。
Vasily,不要再坚持了,在一个演示上运行这个例子--然后你就会明白所有的事情了!
谢谢,不觉得有什么问题了。
2015.02.05 23:37:21.147 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=14
2015.02.05 23:37:20.767 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=13
2015.02.05 23:37:20.464 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=12
2015.02.05 23:37:20.105 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=11
2015.02.05 23:37:19.912 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=10
2015.02.05 23:37:19.832 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=9
2015.02.05 23:37:19.036 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=7
2015.02.05 23:37:05.723 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=6
2015.02.05 23:36:59.919 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=5
2015.02.05 23:36:59.199 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=4
2015.02.05 23:36:53.693 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=3
2015.02.05 23:36:52.689 TestTradeTrans (AUDCAD,H1) OnTradeTransaction: 没有收到订单票。要求=2
2015.02.05 23:36:44.410 专家 自动交易已启用
2015.02.05 23:36:41.995 TestTradeTrans (AUDCAD,H1) Order not sent!AUDCAD返回代码=客户终端不允许自动交易
2015.02.05 23:36:39.996 TestTradeTrans (AUDCAD,H1) Order not sent!AUDCAD返回代码=客户终端不允许AutoTradeTrans。
2015.02.05 23:36:39.958 TestTradeTrans (AUDCAD,H1) Order not sent!AUDCAD返回代码=客户终端不允许AutoTradeTrans。
2015.02.05 23:36:34.581 MQL5 'TestTradeTrans.mq5'成功编译了。
我已经设法禁用了它,否则它就会淹没整个终端。
Z.I.顺便说一下,不要试图把这个代码嵌入到文章中。这个例子在任何情况下都是不可接受的,因为它在每一次打勾 时都会产生可怕的垃圾订单!!。
谢谢,我不觉得有什么问题。
我设法把它关掉了,否则弹跳会淹没整个终端。:)
1.森林的例子
2.不能放支架点吗?
3.我的印象是,你在通过一条线阅读信息 :)
让我们这样做吧。
我问你问题,你回答他们,好吗?
问题1:如果没有TradeTransaction事件到来(或没有使用),如何识别订单票(通过发送OrderSendAsync 命令)?