Ошибки, баги, вопросы - страница 1803

 
Slawa:
Либо, как тут только что сказали, спрашивать количество баров, тоже несколько тактов
Если идет вызов функции Bars() после продолжительного простоя, запуска индикатора - это сродни проверки SymbolIsSynchronized()?
 
Slawa:
К индикаторам тоже относится. Создайте 1-минутный таймер и спрашивайте количество баров у всех интересующих Вас таймсерий.

Проверкой факта синхронизированности синхронизация не удерживается.
Было бы хорошо добавить это в документацию...
 
Если на Metaquotes-Demo оставить в Обзоре рынка только MOEX-символы, то TimeCurrent будет отставать на 15 минут. Стоит только добавить один FOREX-символ, как TimeCurrent разом прыгает вперед на 15 минут.
 

Уважаемые разработчики! В очередной раз прошу как можно скорее добавить время в мс для значений сентимента (SYMBOL_SESSION_...) и стакана( OnBookEvent()). Дайте возможность сделать синхронизацию всех доступных данных!

 

Metaquotes-Demo, символ DIG-20170330

SymbolInfoDouble(Symb,::SYMBOL_ASK) = 29006.0
SymbolInfoDouble(Symb,SYMBOL_SESSION_PRICE_LIMIT_MIN) = 29528.0
(ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(Symb,SYMBOL_TRADE_MODE) = SYMBOL_TRADE_MODE_FULL (4)

Ошибка в SYMBOL_SESSION_PRICE_LIMIT_MIN: выше Аска - невозможно выставить BuyLimit.

 
fxsaber:

Прошу поделиться своим велосипедом: bool-функция, которая сообщает, готов ли символ к торговле или нет.

ENUM_DAY_OF_WEEK GetDayOfWeek( const datetime time )
{
  MqlDateTime sTime = {0};

  TimeToStruct(time, sTime);
  
  return((ENUM_DAY_OF_WEEK)sTime.day_of_week);
}

// true - находимся в торговой сессии
bool SessionTrade( string Symb = NULL )
{  
  datetime TimeNow = TimeTradeServer();
  
  const ENUM_DAY_OF_WEEK DayOfWeek = GetDayOfWeek(TimeNow);
  
  TimeNow %= 24 * 60 * 60;
  
  if ((Symb == NULL) || (Symb == ""))
    Symb = Symbol();  
  
  bool Res = false;
  datetime From, To;    

  for (int i = 0; SymbolInfoSessionTrade(Symb, DayOfWeek, i, From, To) && (!Res); i++)
    Res = ((From <= TimeNow) && (TimeNow < To));
    
  return(Res);
}

// Возвращает true, если символ торгуемый. Иначе - false.
bool SymbolTrade( string Symb = NULL, const int Pause = -1 )
{
  MqlTick Tick;
  
  if ((Symb == NULL) || (Symb == ""))
    Symb = Symbol();
    
  if (Pause >= 0)
    Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
  
  return(SymbolInfoTick(Symb, Tick) ? ((Tick.bid != 0) && (Tick.ask != 0) && SessionTrade(Symb) &&
         ((ENUM_SYMBOL_TRADE_MODE)SymbolInfoInteger(Symb, SYMBOL_TRADE_MODE) == SYMBOL_TRADE_MODE_FULL)) : false);
}
 
fxsaber:
   
  if (Pause >= 0)
    Sleep(Pause); // Если только что произошло добавление символа в Обзор рынка, нужно дождаться поступления данных в Marketwatch.
   
А если это в индикаторе?
 
Artyom Trishkin:
А если это в индикаторе?
Отсюда ноги

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

Ошибки, баги, вопросы

fxsaber, 2017.02.14 12:31

Сразу после SymbolSelect(true) запрашиваю цены, а они нулевые. При этом _LastError == 0, SymbolInfoTick == true.

Как понять, что цены по новому для Обзора рынка символу доставлены до Marketwatch? 

Так что если SymbolSelect(true) не делался и специально не задавать Pause, то слипа и не будет.
 
fxsaber:
Отсюда ноги
Так что если SymbolSelect(true) не делался и специально не задавать Pause, то слипа и не будет.
Честно говоря, не понял. Я интересовался: как в индикаторе узнать готовность символа? Sleep() не работает в индикаторах.
Если индикатор в таблицу выводит некие статистические данные по заранее не известным символам, то при выборе очередного символа с панели, очень часто сразу нельзя получить данные по нему, и в таблицу выводится ложная информация... Как для дальнейших расчётов быть уверенным, что данные получены от символа корректны, и в достаточном количестве для получения дальгейших верных расчётов?
 
Artyom Trishkin:
Честно говоря, не понял. Я интересовался: как в индикаторе узнать готовность символа? Sleep() не работает в индикаторах.
Если индикатор в таблицу выводит некие статистические данные по заранее не известным символам, то при выборе очередного символа с панели, очень часто сразу нельзя получить данные по нему, и в таблицу выводится ложная информация... Как для дальнейших расчётов быть уверенным, что данные получены от символа корректны, и в достаточном количестве для получения дальгейших верных расчётов?
Sleep нужен только для случаев, когда символа нет в Обзоре рынка. Для всех символов, что есть в Обзоре рынка перед запуском (и во время работы) индикатора, никакие слипы не нужны.
Причина обращения: