关于OnTradeTransaction函数的问题 - 页 5 1234567 新评论 Alexey Viktorov 2015.02.07 18:20 #41 papaklass:OnTradeTransaction()是一个交易事件的RUNNER。是什么触发了这个事件并不重要,重要的是这个事件发生了。以下是文件的摘录。OrderSend() / OrderSendAsync() 是交易函数。 对于OnTradeTransaction()来说,你用哪个函数来发送交易订单,OrderSend()或OrderSendAsync()没有区别。我已经读过很多次了,之前创建的主题 ...我不会说一个字。但尽管如此,我的结论是,在一堆交易中丢失一个交易比在一秒钟内丢失一个交易更有可能,甚至可能连一个(秒钟)都没有。这正是我想了解的情况。试图了解你 对此事的看法。如果他们是相当罕见的单身,失去交易的概率是多少? Alexey Viktorov 2015.02.07 19:12 #42 papaklass: 就概率而言,我不知道。我只能依靠迈克尔根据自己的经验提出的单一意见。如果他在半年内没有从一堆订单中失去一笔交易,那么我们将假设有一笔订单不会失去。 我正在慢慢地掌握它,试图不打破逻辑,但有时一个人的方式会妨碍另一个人......。 Mikhail Filimonov 2015.02.09 22:23 #43 AlexeyVik:我们将不得不依靠迈克尔根据自己的经验提出的单一意见。如果他在六个月内没有从一堆订单中丢失过一笔交易,那么我们将假设有一笔订单不会丢失。我正在慢慢掌握它,尽量不破坏逻辑,但有时会发现一个干扰另一个......。阿列克谢,问自己一个简单的问题。哪种方法更好,是在每个命令之后翻阅历史记录,还是1次,或者永远不 翻阅,以仔细检查订单(OnTradeTransaction 没有被触发)?验证并不容易实现(顺便说一下,我的例子有错误),但主要原则是每个订单都有自己的魔力。 还有一件事。我已经说过,每个人都可以自由地走自己的路....。 Alexey Viktorov 2015.02.10 07:29 #44 Mikalas:阿列克谢,问自己一个简单的问题。是在每个命令后挖掘历史记录,还是一次或永远不 重复检查订单(OnTradeTransaction没有工作)?验证并不容易实现(顺便说一下,我的例子有错误),但主要原则是每个订单都有自己的魔力。 还有一件事。我已经说过,每个人都可以自由地走自己的路....。迈克尔,正是这个简单问题的简单答案让我陷入了这整个讨论。而到目前为止,我还不打算放弃它。但我仍然不明白,在OrderSend()命令或挂单激活后,或在使用止损/止赢平仓 期间,是否可能出现交易损失。从你的第一个回答中,我了解到即使是OrderSendAsync() 你也不会丢失交易。我试图理解它,以便决定是否有必要在这种相当罕见的交易中进行检查。此外,考虑到我所分配的东西。纯粹从逻辑上讲,如果 OrderSend()在得到回复之前不终止,交易就不会丢失。但激活挂单和平仓并不符合我的逻辑。如果这种情况下的交易是在MT5内触发的,分别不会丢失,但如果通过服务器...我不知道。(但我想直觉告诉我,服务器向我发送了一个答案并激活了OnTradeTransaction()。 Alexey Viktorov 2015.02.10 13:39 #45 伙计们,问题是这样的。如果我开了一个头寸,OnTradeTransaction只处理TRADE_TRANSACTION_DEAL_AD...一切都很好。例如,如果放置一个SellStop,只有TRADE_TRANSACTION_ORDER_ADD被触发。一切也都很正常。但如果我设置了一个头寸和一个挂单,TRADE_TRANSACTION_DEAL_ADD会起作用, TRADE_TRANSACTION_ORDER_ADD会起 两次 作用。为什么会这样呢? #include <Trade\Trade.mqh> double point, FirstOpenPrice, TakeProfit, SecondOpenPrice, MaxPrice , MinPrice, SecondTake; bool NewStart; CTrade Trade; MqlTradeResult v_res, v_result; MqlTradeTransaction v_Trans; /*******************Expert initialization function*******************/ int OnInit() { point = _Digits%2 == 0 ? _Point : _Point * 10; NewStart = true; return(INIT_SUCCEEDED); }/*******************************************************************/ /************************Expert tick function************************/ void OnTick() { if(NewStart) { Trade.PositionOpen(Symbol(), ORDER_TYPE_BUY, 0.1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0.0, 0.0); Trade.SellStop(0.78, SymbolInfoDouble(_Symbol, SYMBOL_BID)-52*point, Symbol(), 0.0, 0.0, 0, 0); NewStart = false; } }/*******************************************************************/ /*********************TradeTransaction function**********************/ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { ENUM_TRADE_TRANSACTION_TYPE type = (ENUM_TRADE_TRANSACTION_TYPE)trans.type; switch(type) { case TRADE_TRANSACTION_ORDER_ADD: { Print("order add * Тикет ордера * ", trans.order); Print("order add * Объём ордера * ", trans.volume); break; } case TRADE_TRANSACTION_DEAL_ADD: { Print("deal add * Тикет сделки * ", trans.deal); Print("deal add * Объём сделки * ", trans.volume); break; } default: break; } }/*******************************************************************/ Vasiliy Sokolov 2015.02.10 15:18 #46 AlexeyVik:伙计们,问题是这样的。如果我开了一个头寸,OnTradeTransaction只处理TRADE_TRANSACTION_DEAL_AD...一切都很好。例如,如果放置一个SellStop,只有TRADE_TRANSACTION_ORDER_ADD被触发。一切也都很正常。但如果我设置了一个头寸和一个挂单,TRADE_TRANSACTION_DEAL_ADD会起作用, TRADE_TRANSACTION_ORDER_ADD会起 两次 作用。何以如此?你一定是哪里搞错了。在这两种情况下必须至少有两个事件:TRADE_TRANSACTION_ORDER_ADD和TRADE_TRANSACTION_DEAL_ADD。为什么你没有得到TRADE_TRANSACTION_ORDER_ADD,目前还不清楚。试着注释掉这个开关,打印OnTradeTransaction中收到的所有事件的完整日志。 Alexey Viktorov 2015.02.10 15:31 #47 C-4:你在什么地方搞错了。在这两种情况下,至少要有两个事件:TRADE_TRANSACTION_ORDER_ADD和TRADE_TRANSACTION_DEAL_ADD。为什么你没有得到TRADE_TRANSACTION_ORDER_ADD,目前还不清楚。试着注释掉这个开关,打印OnTradeTransaction中收到的所有事件的完整日志。是的,我试过了。Print(EnumToString(type))是在switch(type)之前打印的;它完全按照我的描述打印。下面是重复的实验。 Vasiliy Sokolov 2015.02.10 16:35 #48 我自己检查了你的代码。- 一切运作正常。选项,而不发送止损单来 跟进。2015.02.10 18:32:03.332 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_DEAL_ADD2015.02.10 18:32:03.331 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_HISTORY_ADD2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_DELETE2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST可以选择发送止损单。2015.02.10 18:35:59.633 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_UPDATE2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_DEAL_AD2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_HISTORY_ADD2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_DELETE2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD 即,全周期的时间是一个惊喜:稳定在60-70毫秒。干得好,开发者们! Alexey Viktorov 2015.02.10 17:28 #49 C-4:我自己检查了你的代码。- 一切运作正常。变体,而不在事后发送止损单。选择与发送止损单。 即,全周期的时间是令人惊喜的:稳定在60-70毫秒。开发者做得很好,他们做得很好!显然,这是交易的损失...而且,首先,(摘录自文件资料)而这些交易到达终端的顺序是不保证的瓦西里,这是一个测试器还是一个演示?我有一个测试员的样品。我想知道在测试器中的OnTradeTransaction操作和在账户中的操作是否有区别。我偶尔会检查一下。ps;事实证明,在失去一笔交易后,它突然出现在下一次OnTradeTransaction的激活。 Mikhail Filimonov 2015.02.10 19:48 #50 AlexeyVik:显然,这是交易的损失...而且,首先,(摘自文件),(摘自文件)。瓦西里,这是一个测试器还是一个演示?我有测试者的样本。我想知道OnTradeTransaction在测试者和账户中的触发是否有区别。我偶尔会检查一下。ps;事实证明,在失去一笔交易后,下次激活OnTradeTransaction时突然出现。不,交易不会丢失,只是可能不按一定的顺序来。只有TRADE_TRANSACTION_REQUEST总是排在第一位,否则你就不会得到订单的票据。仔细阅读文件。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
OnTradeTransaction()是一个交易事件的RUNNER。是什么触发了这个事件并不重要,重要的是这个事件发生了。
以下是文件的摘录。
OrderSend() / OrderSendAsync() 是交易函数。
对于OnTradeTransaction()来说,你用哪个函数来发送交易订单,OrderSend()或OrderSendAsync()没有区别。
我已经读过很多次了,之前创建的主题 ...我不会说一个字。
但尽管如此,我的结论是,在一堆交易中丢失一个交易比在一秒钟内丢失一个交易更有可能,甚至可能连一个(秒钟)都没有。这正是我想了解的情况。试图了解你 对此事的看法。如果他们是相当罕见的单身,失去交易的概率是多少?
就概率而言,我不知道。
我只能依靠迈克尔根据自己的经验提出的单一意见。如果他在半年内没有从一堆订单中失去一笔交易,那么我们将假设有一笔订单不会失去。
我正在慢慢地掌握它,试图不打破逻辑,但有时一个人的方式会妨碍另一个人......。
我们将不得不依靠迈克尔根据自己的经验提出的单一意见。如果他在六个月内没有从一堆订单中丢失过一笔交易,那么我们将假设有一笔订单不会丢失。
我正在慢慢掌握它,尽量不破坏逻辑,但有时会发现一个干扰另一个......。
阿列克谢,问自己一个简单的问题。
哪种方法更好,是在每个命令之后翻阅历史记录,还是1次,或者永远不 翻阅,以仔细检查订单(OnTradeTransaction 没有被触发)?
验证并不容易实现(顺便说一下,我的例子有错误),但主要原则是每个订单都有自己的魔力。
还有一件事。我已经说过,每个人都可以自由地走自己的路....。
阿列克谢,问自己一个简单的问题。
是在每个命令后挖掘历史记录,还是一次或永远不 重复检查订单(OnTradeTransaction没有工作)?
验证并不容易实现(顺便说一下,我的例子有错误),但主要原则是每个订单都有自己的魔力。
还有一件事。我已经说过,每个人都可以自由地走自己的路....。
迈克尔,正是这个简单问题的简单答案让我陷入了这整个讨论。而到目前为止,我还不打算放弃它。但我仍然不明白,在OrderSend()命令或挂单激活后,或在使用止损/止赢平仓 期间,是否可能出现交易损失。
从你的第一个回答中,我了解到即使是OrderSendAsync() 你也不会丢失交易。我试图理解它,以便决定是否有必要在这种相当罕见的交易中进行检查。此外,考虑到我所分配的东西。
纯粹从逻辑上讲,如果 OrderSend()在得到回复之前不终止,交易就不会丢失。但激活挂单和平仓并不符合我的逻辑。如果这种情况下的交易是在MT5内触发的,分别不会丢失,但如果通过服务器...我不知道。(但我想直觉告诉我,服务器向我发送了一个答案并激活了OnTradeTransaction()。
伙计们,问题是这样的。
如果我开了一个头寸,OnTradeTransaction只处理TRADE_TRANSACTION_DEAL_AD...一切都很好。
例如,如果放置一个SellStop,只有TRADE_TRANSACTION_ORDER_ADD被触发。一切也都很正常。
但如果我设置了一个头寸和一个挂单,TRADE_TRANSACTION_DEAL_ADD会起作用, TRADE_TRANSACTION_ORDER_ADD会起 两次 作用。
为什么会这样呢?
伙计们,问题是这样的。
如果我开了一个头寸,OnTradeTransaction只处理TRADE_TRANSACTION_DEAL_AD...一切都很好。
例如,如果放置一个SellStop,只有TRADE_TRANSACTION_ORDER_ADD被触发。一切也都很正常。
但如果我设置了一个头寸和一个挂单,TRADE_TRANSACTION_DEAL_ADD会起作用, TRADE_TRANSACTION_ORDER_ADD会起 两次 作用。
何以如此?
你一定是哪里搞错了。在这两种情况下必须至少有两个事件:TRADE_TRANSACTION_ORDER_ADD和TRADE_TRANSACTION_DEAL_ADD。为什么你没有得到TRADE_TRANSACTION_ORDER_ADD,目前还不清楚。
试着注释掉这个开关,打印OnTradeTransaction中收到的所有事件的完整日志。
你在什么地方搞错了。在这两种情况下,至少要有两个事件:TRADE_TRANSACTION_ORDER_ADD和TRADE_TRANSACTION_DEAL_ADD。为什么你没有得到TRADE_TRANSACTION_ORDER_ADD,目前还不清楚。
试着注释掉这个开关,打印OnTradeTransaction中收到的所有事件的完整日志。
是的,我试过了。Print(EnumToString(type))是在switch(type)之前打印的;它完全按照我的描述打印。
下面是重复的实验。
我自己检查了你的代码。- 一切运作正常。
选项,而不发送止损单来 跟进。
2015.02.10 18:32:03.332 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_DEAL_ADD
2015.02.10 18:32:03.331 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_HISTORY_ADD
2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_DELETE
2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD
2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST
可以选择发送止损单。
2015.02.10 18:35:59.633 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_UPDATE
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_DEAL_AD
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_HISTORY_ADD
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_DELETE
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD
我自己检查了你的代码。- 一切运作正常。
变体,而不在事后发送止损单。
选择与发送止损单。
即,全周期的时间是令人惊喜的:稳定在60-70毫秒。开发者做得很好,他们做得很好!显然,这是交易的损失...而且,首先,(摘录自文件资料)
而这些交易到达终端的顺序是不保证的
瓦西里,这是一个测试器还是一个演示?我有一个测试员的样品。我想知道在测试器中的OnTradeTransaction操作和在账户中的操作是否有区别。我偶尔会检查一下。
ps;事实证明,在失去一笔交易后,它突然出现在下一次OnTradeTransaction的激活。
显然,这是交易的损失...而且,首先,(摘自文件),(摘自文件)。
瓦西里,这是一个测试器还是一个演示?我有测试者的样本。我想知道OnTradeTransaction在测试者和账户中的触发是否有区别。我偶尔会检查一下。
ps;事实证明,在失去一笔交易后,下次激活OnTradeTransaction时突然出现。
不,交易不会丢失,只是可能不按一定的顺序来。
只有TRADE_TRANSACTION_REQUEST总是排在第一位,否则你就不会得到订单的票据。
仔细阅读文件。