После перезапуска терминала нет отрисовки индикатора - страница 2

 

Вот демонстрация косяка. Видно, что 50 попыток синхронизации с сервером увенчались провалом.

Файлы:
 
Vladimir Karputov:

Вот-вот. Пример должен быть минималистическим. Максимально простым.

Поэтому и сделать просто))

 

Неа. Максимально простым. Без никаких библиотек. По статистике - все ошибки как раз таки в довесках :)

 
Vladimir Karputov:

Неа. Максимально простым. Без никаких библиотек. По статистике - все ошибки как раз таки в довесках :)

Да не вопрос.

Файлы:
 
Viktar Dzemikhau:

Да не вопрос.

В общем то, кое-как сквозь грабли вопрос решён. Но скорость, завяленная разработичками.. нужно делить на 100. 50 проходов с Sleep(2000), например, и цена не синхронизирована. Для решения таких простых вещей нужно городить дополнительную логику. Ужас((

Думаешь не о стратегии, а о граблях.

 

Я написал функцию для этого дела. Вот её черновой вариант:

bool isTerminalSynchronizedWithServer() {
//---
  bool synchronized = false;
  if (barsTotal() == 0) {
    Print("_synchronized = ", synchronized);
    int tryCnt = 0;
    while (tryCnt < 25) {
      synchronized = SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_SYNCHRONIZED);
      Print("tryCnt = ", tryCnt, " ; synchronized = ", synchronized);
      if (synchronized == true)
        return true;
      tryCnt++;
      Sleep(2500000);
    }
  }
//---
  return false;
}

В функции Sleep() время можно увидеть какое.. отнюдь не как в справке. И что мы видим. Запускаю терминал.. и весь цикл проскакивает за мгновенье. Делаю вывод, что эта функция вообще не работает. Она для вида, не более того. Неприятно натыкаться на подобные косяки, когда хочется думать о реализацияю торговых алгоритом. А приходятся мудохаться периодически с такими ситуациями ((

 
Viktar Dzemikhau:

Я написал функцию для этого дела. Вот её черновой вариант:

В функции Sleep() время можно увидеть какое.. отнюдь не как в справке. И что мы видим. Запускаю терминал.. и весь цикл проскакивает за мгновенье. Делаю вывод, что эта функция вообще не работает. Она для вида, не более того. Неприятно натыкаться на подобные косяки, когда хочется думать о реализацияю торговых алгоритом. А приходятся мудохаться периодически с такими ситуациями ((

Sleep в индикатор не работает. Вы этого не знали?

 
Vladimir Karputov:

Sleep в индикатор не работает. Вы этого не знали?

Первый раз слышу. Я вообще не сторонник индикаторов. Но пришлось кое-чего написать. Как мне тогда ожидание сделать?

 
Viktar Dzemikhau:

Первый раз слышу. Я вообще не сторонник индикаторов. Но пришлось кое-чего написать. Как мне тогда ожидание сделать?

А это ожидание нужно?

 
Vladimir Karputov:

А это ожидание нужно?

Конечно. Я в инициализацию хоу поместить проверку. Время тоже при инициализации не получается. Вообщек шикарные возможности. Получается, что мне на каждом тике проверять разные вещи, которые нужно 1 раз при инициализации проверить? Это лучшее, что можно было разработчикам предложить? Я удивляюсь. Хочется верить, что как-то это решается нормально..

ВОт функция:

bool isTerminalSynchronizedWithServer() {
//---
  datetime lastBarTime = barOpenTime(0, PERIOD_M1);    // Время проведения последних рассчётов
  bool synchronized = false;
  
  if (barsTotal() == 0) {
    Print("_startTime = ", TimeToString(lastBarTime, TIME_DATE|TIME_SECONDS));
    int tryCnt = 0;
//    while (tryCnt < 25) {
    while (lastBarTime == barOpenTime(0, PERIOD_M1)) {
      synchronized = SeriesInfoInteger(_Symbol, PERIOD_CURRENT, SERIES_SYNCHRONIZED);
      if (synchronized == true)
        return true;
      tryCnt++;
    }
    Print("endTime = ", TimeToString(lastBarTime, TIME_DATE|TIME_SECONDS));
  }
//---
  return false;
}

В журнале вижу:

2018.08.30 15:04:39.830 ZigZag_HightLow_MTF (AUDJPY,H1) _startTime = 

Время получаю функцией:

datetime barOpenTime(int shift,                                       // Индекс бара, время открытия которого требуется определить
                     ENUM_TIMEFRAMES tf = PERIOD_CURRENT) export {    // ТФ, на котором будет происходить поиск открытия баров функцией CopyTime()
//---
  return ((CopyTime(_Symbol, tf, shift, 1, barOpenTime) != -1) ? barOpenTime[0] : WRONG_VALUE);
}