Обсуждение статьи "Торговые транзакции. Структуры запросов и ответов, описание и вывод в журнал" - страница 6

 
MrBrooklin #:

Доброе утро, Артём! Для функции OnTradeTransaction() есть принципиальная разница, где она должна быть расположена - до функции OnTick() или после неё? Если это принципиально, то почему?

С уважением, Владимир.

Доброе. Нет никакой разницы. Хоть в подключаемом файле.

 
Artyom Trishkin #:

Доброе. Нет никакой разницы. Хоть в подключаемом файле.

Понятно. Спасибо!

С уважением, Владимир.

 
Artyom Trishkin #:

Данные хранятся на сервере. Терминал их получает в своё окружение и советник затем их использует.

Артём, наверное, замучил Вас своей тупизной, но данные о сделке хранятся на сервере сколько по времени? День, два, три... год? Читал и литературу, и справочник, и нигде эту информацию не нашёл.

С уважением, Владимир.

 
MrBrooklin #:

Артём, наверное, замучил Вас своей тупизной, но данные о сделке хранятся на сервере сколько по времени? День, два, три... год? Читал и литературу, и справочник, и нигде эту информацию не нашёл.

С уважением, Владимир.

Владимир, а зачем тебе это? Эти данные нужны только для решения каких-то спорных моментов. Но если брокер чего-то почудит, то вряд-ли ему можно будет чего-то доказать. А конкретное время хранения устанавливает сам брокер и никакого регламента на этот счёт нету.

 
Alexey Viktorov #:

Владимир, а зачем тебе это? Эти данные нужны только для решения каких-то спорных моментов. Но если брокер чего-то почудит, то вряд-ли ему можно будет чего-то доказать. А конкретное время хранения устанавливает сам брокер и никакого регламента на этот счёт нету.

Привет, Алексей! Это нужно мне знать для самообразования и, при этом, хочу разобраться досконально. Похоже, что вообще не въехал в эти транзакции. Когда тебя слушал, вроде было всё понятно, а прошло немного время и всё рассосалось. Опять снова-здорова! Вообще ничего не понимаю!

С уважением, Владимир.

 

Приведу живой пример. У меня на выходные дни осталась открытая позиция. Вот скриншот с моего реального счёта:


Сделка совершена, позиция открыта. Запускаю скрипт:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             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;
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
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

Артём написал, что сделка хранится на сервере, правда, не сообщил сколько по времени хранится, а по факту её сейчас не видно. Как так? Вот и пытаюсь с этим разобраться до конца.

С уважением, Владимир.

 
MrBrooklin #:

Приведу живой пример. У меня на выходные дни осталась открытая позиция. Вот скриншот с моего реального счёта:


Сделка совершена, позиция открыта. Запускаю скрипт:

Получаю результат во вкладке Эксперты:

Артём написал, что сделка хранится на сервере, правда, не сообщил сколько по времени хранится, а по факту её сейчас не видно. Как так? Вот и пытаюсь с этим разобраться до конца.

С уважением, Владимир.

Ты запустил скрипт.

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

Это СОБЫТИЕ. Если ты вчера запустил скрипт, то вчера и получил распечатку. А сегодня уже распечатки со вчерашней датой и вчерашним временем не будет. Если сегодня запустишь скрипт, это опять событие. И опять получишь распечатку, только уже текущей даты и времени.

По голове ТУК, это событие. А завтра ты ничего не почувствуешь от вчерашнего ТУК…

 

А вот так скрипт находит позицию и нужные мне данные без проблем:

//+------------------------------------------------------------------+
//|                                                            2.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
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 #:

По голове ТУК, это событие. А завтра ты ничего не почувствуешь от вчерашнего ТУК…

Получается, что сделка в истории хранится на сервере только до конца торговой сессии? Это так?

С уважением, Владимир.

 

Стоп! А как, тогда через один торговый день советник всё-таки увидел эту сделку (т.е. открытую позицию) и отработал по алгоритму? Не-е-е, тут чертовщина, какая-то!

С уважением, Владимир.

Причина обращения: