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

 
MrBrooklin OnTick() 函数 之前还是之后?如果有本质区别,原因是什么?

敬上,弗拉基米尔

好的。没有区别。至少在插件文件中是这样。

 
Artyom Trishkin #:

很好。没有区别。它可以存在于插件文件中。

我明白了谢谢!

弗拉基米尔

 
Artyom Trishkin #:

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

Artem,我可能会用我的愚蠢折磨你,但交易数据 在服务器上存储多长时间?一天、两天、三天...一年?我读了很多文献和参考书,都没有找到这方面的信息。

弗拉基米尔

 
MrBrooklin #:

Artem,我的愚蠢可能会让你厌烦,但交易数据 在服务器上会存储多久?一天、两天、三天...一年?我阅读了相关资料和手册,没有在任何地方找到这些信息。

敬上,弗拉基米尔

弗拉基米尔,你为什么需要它?只有在解决一些有争议的问题时才需要这些数据。但如果经纪人做了一些花哨的事情,他不太可能证明什么。而且具体的存储时间是由经纪人自己设定的,没有这方面的规定。

 
Alexey Viktorov #:

弗拉基米尔,你为什么需要它?只有在解决一些有争议的问题时才需要这些数据。但如果经纪人做了什么花哨的事情,他就不太可能证明什么了。而且具体的存储时间是由经纪人自己设定的,并没有这方面的规定。

你好,阿列克谢,我需要知道这些,以便自学,同时,我想彻底了解它。我似乎完全不了解这些交易。当我听你讲的时候,一切似乎都很清楚,但过了一段时间,一切又都不清楚了。又来了!我完全不明白!

弗拉基米尔

 

让我举个活生生的例子。我在周末有一个未结头寸。下面是我真实账户的截图:


交易完成,头寸打开。我运行脚本:

//+------------------------------------------------------------------+
//|1.mq5
//|2023年,MetaQuotes有限公司版权所有。|
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
ulong pos_ticket;
double pos_open;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
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;
        }
     }
  }
//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print("Ticket = ",pos_ticket);
   Print("Price = ",pos_open);
  }
//+------------------------------------------------------------------+

我在 "专家 "选项卡中得到了结果:

2023.10.21 14:41:47.693 1 (EURUSDrfd,M1)        Ticket = 0
2023.10.21 14:41:47.693 1 (EURUSDrfd,M1)        Price = 0.0

Artyom 写道,交易存储在服务器上,但没说存储多长时间,事实上现在看不到。怎么会这样?我正在努力弄明白。

敬上,弗拉基米尔。

 
MrBrooklin #:

让我举个活生生的例子。我在周末有一个未结头寸。下面是我真实账户的截图:


交易已完成,头寸已打开。运行脚本:

我在 "专家 "选项卡中得到了结果:

Artem写道,交易被保存在服务器上,但没有告诉我它被保存了多长时间,而且事实上它现在不可见。怎么会这样?我正在想办法解决这个问题。

敬上,弗拉基米尔。

运行了一个脚本

void OnStart()
  {
   Print("DateTime = ", TimeCurrent());
  }

这是一个事件。如果您昨天运行了脚本,那么昨天就会有打印输出。而今天将不会有带有昨天日期和昨天时间的打印输出。如果今天运行脚本,它将再次成为一个事件。你将再次获得带有当前日期和时间的打印输出。

敲一下头,也是一个事件。明天你就会对昨天的 TUK..... 毫无感觉。

 

脚本就是这样顺利找到我需要的位置和数据的:

//+------------------------------------------------------------------+
//|2.mq5
//|2023年,MetaQuotes有限公司版权所有。|
//|https://www.mql5.com ||
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   for(int i=0; i<PositionsTotal(); i++)
     {
      if(PositionGetTicket(i))
         Print("Ticket = ",PositionGetInteger(POSITION_IDENTIFIER));
         Print("Price = ",PositionGetDouble(POSITION_PRICE_OPEN));
     }
  }
//+------------------------------------------------------------------+

结果:

2023.10.21 15:33:49.973 2 (EURUSDrfd,M1)        Ticket = 1029935900
2023.10.21 15:33:49.973 2 (EURUSDrfd,M1)        Price = 1.05...

无论市场是开市还是闭市,无论是否停电,无论是否断网,该变体都能正常工作。不过,为此我们必须运行一个循环,据专家称,这会减慢程序的执行速度。

再见,弗拉基米尔

 
Alexey Viktorov #:

敲敲头,就是一件大事。明天你就不会对昨天的嘟嘟车有任何感觉了.....

原来,历史记录中的交易只保存在服务器上,直到交易时段结束?是这样吗?

弗拉基米尔

 

停!那么,在一个交易日之后,Expert Advisor 是如何看到这笔交易(即未平仓头寸)并按照算法运行的呢?不,这简直是天方夜谭!

弗拉基米尔