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

 
MrBrooklin 平仓 前 断电,比如说我的电脑关机了,或者我因某种原因关闭了 MT5 终端,那么这笔交易的信息将存储在哪里?这些信息会存储在任何地方

您能向我详细解释一下这些令人费解的问题吗?

弗拉基米尔

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

 
Artyom Trishkin #:

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

那就奇怪了,为什么今天的 EA 找不到昨天打开的 交易?以前是可以的。这是代码:

void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // 贸易交易结构
   const MqlTradeRequest&        request, // 请求结构
   const MqlTradeResult&         result   // 响应结构
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }

一个小补充。滚动是否会影响未结交易的票据,即改变它?

敬上,弗拉基米尔。

 
MrBrooklin #:

那就奇怪了,为什么今天的智能交易系统找不到昨天打开的 交易。以前可以的。代码如下

一个小补充。翻转是否会影响未结交易的票据,即改变它?

敬上,弗拉基米尔。

您可以通过未结头寸的 ID 找到所有交易和订单。

 
MrBrooklin #:

那就奇怪了,为什么今天 Expert Advisor 找不到昨天打开的 交易。而之前却找到了。代码如下

一个小补充。翻转是否会影响未结交易的票据,即改变它?

敬上,弗拉基米尔。

在进行交易时,服务器会向终端发送一条 "消息",告知交易已经完成,并将其遗忘。服务器并不关心终端是否收到。因此,如果终端在交易时关闭,您只能通过读取从终端关闭到当前时刻的历史记录来了解交易情况。

 
Alexey Viktorov #:
因此,如果终端在交易时刻关闭,您只能通过阅读从终端关闭到当前时刻的历史记录来了解交易情况。

阿列克谢,在交易时刻,即开仓时刻,终端是打开的,因为 "智能交易系统 "打开了终端。

再见,弗拉基米尔

 
Artyom Trishkin #:

您可以通过未结头寸的 ID 找到所有交易和订单。

我明白了。我要进一步研究手册。

再见,弗拉基米尔。

 
MrBrooklin #:

你好,阿列克谢,在交易的那一刻,也就是开仓的那一刻,终端是打开的,因为智能交易系统正在打开它。

再见,弗拉基米尔。

如何理解

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

讨论文章 "交易。请求和响应的结构、描述和日志输出"

MrBrooklin, 2023.10.17 16:48

那就奇怪了,为什么今天 Expert Advisor 找不到昨天打开的交易?早些时候却找到了。这是代码:

void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // 贸易交易结构
   const MqlTradeRequest&        request, // 请求结构
   const MqlTradeResult&         result   // 响应结构
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }

一个小补充。翻转是否会影响未结交易的票据,即改变它?

敬上,弗拉基米尔。

昨天找到了。而今天,火车已经上路了......

如果昨天有一个订单,一个挂单,而今天已经有一个头寸,这就是我所说的,那么交易是在终端关闭的那一刻......相应地,通过头寸ID来查找,这就是Artem所说的。

 
Alexey Viktorov #:
因此,可以通过位置标识来查找,这就是阿尔特姆所说的 "位置标识"。

阿列克谢,我们已经换成你了吗?))

是的,我已经了解了位置 ID。我会在别人的帮助下自己解决的:

long position_ID=HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);

弗拉基米尔

 
MrBrooklin #:

那就奇怪了,为什么今天 EA 找不到昨天开仓的 交易?

阿列克谢,也许很难表达我的想法,但其本质如下:昨天,EA 开立了头寸,即进行了交易,而不是我之前写的开立了交易。今天,根据算法,EA 应该看到昨天开立的头寸,并执行某些操作。但是,由于我还不明白的原因,EA 没有看到昨天开立的头寸,因此没有采取任何行动。希望我现在能更清楚地表达我的想法。

弗拉基米尔

 
MrBrooklin #:

阿列克谢,也许很难表达我的想法,但其实质如下:昨天,"智能交易系统"(Expert Advisor)开了一个仓位,即做了一笔交易,而不是像我之前写的那样开了一笔交易。今天,根据算法,EA 应该看到昨天开立的头寸,并执行某些操作。但是,由于我还不明白的原因,EA 没有看到昨天开立的头寸,因此没有采取任何行动。希望我现在能更清楚地表达我的想法。

弗拉基米尔

沃洛佳,你我已经就这个声音谈了很多。我已经尽力解释了,你似乎也都明白了,但我们还是要再来一次...

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