Пользовательские символы. Ошибки, баги, вопросы, предложения. - страница 33

 
RusPro #:

я попробовал ваш тест, все точно также - отстает на пару секунд. причем не на custom, а на фьюче на серебро

Инструмент Silv-12.21.  ММВБ, брокер БКС. Но думаю, это не важно

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

Здесь тема о пользовательских инструментах.

 
Andrey Khatimlianskii #:

Про обычные инструменты речь не шла, про кастум. По ним вся информация доступна в терминале по определению, на сервер лезть ничего не должно.

да там может ерунда какая ни будь -  типа запрос времени сервера или еще чего. Ляп в общем. А если при физическом отсутствии связи тест запустить - что будет? Мне любопытно, но проверить пока не на чем

 

Всем привет!
Почему-то не копируется в кастомный символ история. Код простейший. Ошибок никаких не выдается, но в кастомном символе котировок нет.

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

Подскажите почему пустой результат?
Спасибо.


int OnInit()
  {
   
   string Sym1 = "EURUSD"; /// источник
   string Sym2 = "EURUSD2";   /// приемник
   int HBack = 1;   /// количество часов сдвига
   datetime tc = StringToTime(TimeCurrent());   /// конец участка
   datetime sht = tc - HBack * 60 * 60;
   datetime sht2 = tc - 2 * HBack * 60 * 60;
   
   MqlRates mrates[];
   
   if( CopyRates(Sym1, PERIOD_M1, sht, tc, mrates) < 0 ){
        
        Alert("Ошибка копирования исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
        
   if( CustomRatesReplace(Sym2, sht2, sht, mrates, WHOLE_ARRAY) < 0 ){
      
      Alert("Ошибка вставки исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
      
   
   return(INIT_SUCCEEDED);
  }
 

Билд 3083, проблема актуальна. SymbolInfoXXX просто безбожно тормозит по сравнению с iClose:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Пользовательские символы. Ошибки, баги, вопросы, предложения.

Andrey Khatimlianskii, 2021.09.19 23:30

MT5 3041. Сервис создает и обновляет котировки пользовательского инструмента (и тики, и бары).

Наткнулся на то, что SymbolInfoDouble и SymbolInfoTick, вызываемые в советнике, работающем на этом чарте, в какой-то момент "зависают": в обзоре рынка котировки меняются, график обновляется, iClose и CopyTicksRange получают актуальные данные, а SymbolInfoXXX дает устаревшую информацию.

В процессе разбора дошел до простейшего кода, который был призван обнаружить эти "зависания", но намного раньше продемонстрировал проблему с другой стороны: SymbolInfoXXX просто безбожно тормозит по сравнению с iClose! Это видно просто невооруженным глазом:


Запустите у себя на кастумном графике такого советника, пожалуйста:

int OnInit(void)
{
        EventSetMillisecondTimer(10);
        return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
        EventKillTimer();
        Comment("");
}

void OnTimer(void)
{
        MqlTick tick;
        SymbolInfoTick( _Symbol, tick );

        Comment( "SymbolInfoInteger( _Symbol, SYMBOL_TIME ) = ", TimeToString( SymbolInfoInteger( _Symbol, SYMBOL_TIME ), TIME_SECONDS ),
                                        "\nSymbolInfoDouble( _Symbol, SYMBOL_BID ) = ", SymbolInfoDouble( _Symbol, SYMBOL_BID ),
                                        "\ntick.time = ", TimeToString( tick.time, TIME_SECONDS ),
                                        "\ntick.bid = ", tick.bid,
                                        "\niClose[0] = ", iClose( _Symbol, PERIOD_CURRENT, 0 ) );
}

(OnTimer можно заменить на OnTick, сути не меняет)

Есть ли у вас подобные тормоза?


 
Andrey Khatimlianskii #:

Запустите у себя на кастумном графике такого советника, пожалуйста:

Есть ли у вас подобные тормоза?

На кастомном символе, который не обноваляется и не имеет тика в Обзоре рынка, не ощущаются тормоза.

 
MOZART09 #:

Всем привет!
Почему-то не копируется в кастомный символ история. Код простейший. 

Простейшим кодом пользовательский символ не создать. Там нужно много танцев с бубном. Смотрите.

Пользовательские символы: основы применения на практике
Пользовательские символы: основы применения на практике
  • www.mql5.com
Статья посвящена программной генерации пользовательских символов, с помощью которых демонстрируется несколько популярных способов отображения котировок. Предложен вариант малоинвазивной адаптации советников для торговли реальным символом с графика производного пользовательского символа. Исходные коды MQL прилагаются.
 
fxsaber #:

На кастомном символе, который не обноваляется и не имеет тика в Обзоре рынка, не ощущаются тормоза.

Наверное, потому что тормоза как раз в обновлении (точнее, получении обновленной информации советником, работающем на таком чарте)?

 
Andrey Khatimlianskii #:

Наверное, потому что тормоза как раз в обновлении (точнее, получении обновленной информации советником, работающем на таком чарте)?

Не использую обновляемые кастомные символы, поэтому не в курсе.

 

Билд 3091, застал зависшие котировки (клик):


Последний тик, возвращаемый SymbolInfoDouble и SymbolInfoTick — 04:52:07 (бид 61083.19)

При этом более новые тики есть в истории инструмента, график и  маркетвотч обновляются, iClose возвращает корректное значение.

Код для воспроизведения есть. Что еще нужно, чтобы исправить?

 

Обнаружил зависимость -- замерли только инструменты, по которым были открыты чарты (и запущен советник для отслеживания, соответственно).

Если поменять инструмент чарта на другой (тоже кастумный, но не активный до сих пор), там все ок. Если вернуться к "замершему" инструменту, или открыть для него новый чарт, там SymbolInfoDouble и SymbolInfoTick будут все в том же зависшем состоянии.

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