Обрыв связи в момент постановки ордера - страница 2

 

Доброй ночи, tol64!

Напишите

if ( SymbolIsSynchronized( _Symbol ) )
{

  MessageBox( "Synchronized!", "Information ", MB_OK | MB_ICONINFORMATION ); 

}

Запустите терминал, разорвите Интернет соединение,

запустите исполнение советника, а потом посмотрите, что произойдёт..... :) 

 
Mikalas:

...

Запустите терминал, разорвите Интернет соединение,

запустите исполнение советника, а потом посмотрите, что произойдёт..... :) 

Тогда лучше так (в OnInit и в OnTick).  :)

   if(TerminalInfoInteger(TERMINAL_CONNECTED))
     {
      if(SymbolIsSynchronized(_Symbol))
         MessageBox("Данные синхронизированы !","Information ",MB_OK|MB_ICONINFORMATION);
      else
         MessageBox("Данные не синхронизированы !","Information ",MB_OK|MB_ICONINFORMATION);
     }
   else
      MessageBox("Нет соединения, поэтому неизвестно есть ли синхронизация !","Information ",MB_OK|MB_ICONWARNING);
 

OnTick() не будет сейчас работать

В описании SymbolIsSynchronized НИЧЕГО не сказано про "Нет соединения, поэтому неизвестно есть ли синхронизация " 

Попробовали? 

У меня всё-рано Данные синхронизированы OnInit() 

 
Mikalas:

OnTick() не будет сейчас работать

В описании НИЧЕГО не сказано про "Нет соединения, поэтому неизвестно есть ли синхронизация " 

На сервере MQ в текущий момент пока тикает. ))

Попробуйте заявку в Сервисдеск написать. Может изменят значение по-умолчанию на: "если нет соединения, то функция возвращает false, то есть, считается, что данные не синхронизированы".

 

Попробуйте и с соединением :)

 
Mikalas:

...

У меня всё-рано Данные синхронизированы OnInit() 

Попробуйте и с соединением :)  

Значит синхронизированы. Если данные не менялись (не тикало), то после разрыва соединения рассинхронизации обнаружено не будет. ))

 

:)

Просто у меня терминал работает постоянно( круглосуточно),

и у меня, в Обзоре рынка,  всё ещё остались котировки:):) 

 
Mikalas:

:)

Просто у меня терминал работает постоянно( круглосуточно),

и у меня, в Обзоре рынка,  всё ещё остались котировки:):) 

Попробуйте вот так ещё:

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| ИНИЦИАЛИЗАЦИЯ                                                    |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetMillisecondTimer(10);
//---
   if(TerminalInfoInteger(TERMINAL_CONNECTED))
     {
      if(!SymbolIsSynchronized(_Symbol))
         Print(__FUNCTION__,": >>> Данные не синхронизированы!");
     }
//--- Инициализация прошла успешно
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| ДЕИНИЦИАЛИЗАЦИЯ                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| СОБЫТИЕ ТИК ТЕКУЩЕГО СИМВОЛА                                     |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+
//| Timer                                                            |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(TerminalInfoInteger(TERMINAL_CONNECTED))
     {
      if(!SymbolIsSynchronized(_Symbol))
         Print(__FUNCTION__,": >>> Данные не синхронизированы!");
     }
  }

//---

Дело в том, что проверка производится только по барам (не по тикам, тиковой истории нет). А Вы хотите отследить минимальное изменение цены. Запоминайте в таймере цены, когда соединение разорвано и сравнивайте с ценами, когда оно появилось и данные синхронизированы. Если есть расхождение, то будете знать, что цены изменились пока связи не было. 

P.S. А вообще уже непонятно, что Вы хотите получить. Ну изменилась цена и что? В чём проблема? Что конкретно не получается? )) 

 

Добрый день, tol64!

>Дело в том, что проверка производится только по барам (не по тикам, тиковой истории нет).

Я хочу быть уверенным (думаю, что Вы тоже), что при принятии советником решения о каких- либо действиях,

цены были бы актуальными на каждом тике.   

Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5
Алгоритм генерации тиков в тестере стратегий терминала MetaTrader 5
  • 2010.05.21
  • MetaQuotes Software Corp.
  • www.mql5.com
MetaTrader 5 позволяет во встроенном тестере стратегий моделировать автоматическую торговлю с помощью экспертов на языке MQL5. Такое моделирование называется тестированием экспертов, и может проводиться с использованием многопоточной оптимизации и одновременно по множеству инструментов. Для проведения тщательного тестирования требуется генерировать тики на основе имеющейся минутной истории. В статье дается подробное описание алгоритма, по которому генерируются тики для исторического тестирования в клиентском терминале MetaTrader 5.
 
Mikalas:

Я хочу быть уверенным (думаю, что Вы тоже), что при принятии советником решения о каких- либо действиях, цены были бы актуальными на каждом тике.   

такую гарантию вы не получите. очень много технических посредников в получении вами "актуальной" котировки.

к тому же понятие "актуальность" - это какой промежуток времени вы хотите?  100 мс, 10 с, час от момента её рождения у провайдера ликвидности?

поэтому правильно заметил tol64, уже непонятно, что вы хотите получить.

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