文章 "交易事务. 请求和响应结构、描述和记录" - 页 5

 
Alexey Viktorov #:

沃洛佳,你我已经就这个声音谈了很多。我尽我所能解释了一切,你似乎也都明白了,但我们又来了....。

OnTradeTransaction 函数是一个事件处理函数。交易是昨天发生的事件。OnTradeTransaction 函数昨天应该可以工作,但今天不行。今天没有这个交易的事件......今天有,可能以后还会有,但是是不同的事件。

我已经很老了。我已经第七个十年了。 我忘记了很多事情,我从一个案例练习到另一个案例!))

事实证明,我们今天不需要交易,只需要循环一下:

   for(int i=0; i<PositionsTotal(); i++)
     {
      if(PositionGetTicket(i))
         Print(PositionGetInteger(POSITION_IDENTIFIER));
     }

然后就可以了!这里有一个未结头寸。是这样吗?))

弗拉基米尔

 
Artyom Trishkin #:

数据存储在服务器上。终端在其环境中接收这些数据,然后由 Expert Advisor 使用。

Artem,早上好!今天我起了个大早,看了看终端,发现在新的交易时段开始时,Expert Advisor(智能交易系统)使用我之前在信息 中向您展示的代码,"突然看到 "了前天 开立的头寸,并按照算法正常运行。这简直就是奇迹!我决定在策略测试器中运行前天和昨天的智能 交易系统。在策略测试器中,Expert Advisor 运行得非常完美--它找到了前天开仓的头寸,并在昨天对其进行了操作,就像在备注中写的一样。我想提请您注意这个事实 在策略测试器中 ,头寸是前天打开的,智能交易系统昨天找到了它,并继续....。

在策略测试器中这是一回事,但在实际交易中却截然不同。昨天第一次出现这种情况,Expert Advisor 不想 "看到 "一个突然打开的仓位。

问题 - 怎么会这样?

敬上,弗拉基米尔。

 
MrBrooklin #:

Artem,早上好!今天我起了个大早,看了看终端,发现在新的交易时段开始时,使用我之前在信息 中向您展示的代码的智能交易系统 "突然看到 "了前天 开立的头寸,并按照算法正常运行。这简直就是奇迹!我决定在策略测试器中运行前天和昨天的智能 交易系统。在策略测试器中,Expert Advisor 运行得非常完美--它找到了前天开仓的头寸,并在昨天进行了操作,就像在备注中写的一样。我想提请您注意这个事实 在策略测试器中 ,前天开仓的头寸被智能交易系统找到, 并在昨天 继续....。

问题 - 这怎么可能?

弗拉基米尔

我不知道。这是你的代码。你写的。它就像写的那样工作。

 
Artyom Trishkin #:

我不知道。这是你的代码你写的它的写法,它的工作方式。

我了解代码很简单Artem,我稍微修改了一下之前的信息,请看一下。我补充了一些信息。也许会对您的理解有所帮助。

问候您,弗拉基米尔

另外补充一点:在真实账户上交易 8 个月以来,昨天 Expert Advisor 第一次没有 "看到 "未结头寸。这让我大吃一惊。

 
MrBrooklin #:

我了解代码。这是最简单的。Artem,我稍微修改了一下之前的信息,请看一下。我增加了一些信息。也许会对您的理解有所帮助。

问候您,弗拉基米尔

另外补充一点:在真实账户上交易 8 个月以来,昨天 Expert Advisor 第一次没有 "看到 "未结头寸。这让我大吃一惊。

对这种情况进行压力测试是必要的,在改变交易环境后立即将叉子从电脑上拔出,切断网络或使网络超慢,这样网络不足的情况就无法解决,交易订单实际上就无法发送....。之类的非工作人员的想法。真实的交易环境及其固定性,即使是少量的交易也会带来不可预知的失败)))))。

Artem的文章中首先有关于它,如何记录和如何监控真实)))))。

Saber 有一个更酷的方法,它创建了一个交易环境的虚拟副本,并计算那里的一切))))。

 
Valeriy Yastremskiy #:
在这种情况下,有必要进行压力测试,在改变交易环境后立即拔掉计算机的插头,切断网络或使其超慢,这样就无法修复网络不足的问题,交易订单实际上也无法发送....。或者其他什么非标准的想法。

早上好,瓦列里!在您的留言中列出的所有情况,在真实账户的所有八个月交易中都反复发生过,甚至是多次发生。同时,EA 在第二天和后天都看到了头寸。在所有八个月的真实交易中,OnTradeTransaction()函数的代码工作正常。

我无法解释发生了什么,但唯一能想到的是外汇交易商方面的服务器故障。如果你仔细阅读我关于这个主题的所有帖子,你就会看到这样的信息:

关于交易、自动交易系统和测试交易策略的论坛

讨论文章 "Trading Transactions.请求和响应结构、描述和日志输出"

MrBrooklin, 2023.10.18 04:48 PM

Artem,早上好!今天我起了个大早,看了看终端,发现在新的交易时段开始时,带有我之前在信息 中向您展示的代码的智能交易系统 "突然看到 "了前天 开立的头寸,并按照算法正常运行。这简直就是奇迹!我决定在策略测试器中运行前天和昨天的智能 交易系统。在策略测试器中,Expert Advisor 运行得非常完美--它找到了前天开仓的头寸,并在昨天进行了操作,就像在备注中写的一样。我想请您注意这个事实 在策略测试器中 ,头寸是前天打开的,智能交易系统昨天发现了它,并继续....。

在策略测试器中这是一回事,但在实际交易中却截然不同。昨天第一次出现这种情况,Expert Advisor 不想 "看到 "一个突然打开的仓位。

问题 - 怎么会这样?

敬上,弗拉基米尔。

弗拉基米尔
 
由于 TradeTransaction 事件可能会因为某些原因而被错过,也由于有可能出现 "竞赛 "状态(例如,当订单不再活跃但尚未进入历史记录,或者没有活跃订单但尚未开仓),我有一个机器人,在其状态中存储了所有活跃订单及其总仓位(净值)。每次变化和工作结束时,状态都会重置到一个文件中。在启动和运行过程中,会定期检查同步情况,必要时对状态进行同步。
 
JRandomTrader #:
我有一个机器人,它将所有有效订单及其总仓位(净值)存储在其状态中。每次变化和工作结束时,状态都会重置到一个文件中。 在启动和运行过程中,会定期检查同步情况,必要时会同步状态。

感谢您分享了这个问题的有趣解决方案。我将尝试在我的 EA 中实现它。

再见,弗拉基米尔。

 
MrBrooklin #:

感谢您分享了解决类似问题的有趣方法。我将尝试在我的 EA 中实现它。

再见,弗拉基米尔。

它可能不仅仅是一个失败,什么是失败)))))修复交易环境的状态并不是一件简单的事情。当在一种工具上下单时,人们甚至不认为这是必要的。但从好的方面来说,这是必要的。

测试仪中的理想执行,在现实生活中几乎是理想的,但有时并不理想,甚至不够理想。

因此,在现实生活中,我们需要以某种方式解决问题,让智能交易系统了解订单的情况。如果订单的情况很清楚,那么订单的情况就更复杂了。每隔一格或更短时间检查订单状态,或者查看价格,如果价格突然高于或低于订单价格,则检查订单状态。)))

 

早上好,Artyom!OnTradeTransaction() 函数的位置是否有本质区别--在OnTick() 函数 之前还是之后?如果有本质区别,原因是什么?

敬上,弗拉基米尔