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

 
Dennis Kirichenko:
Просто безнравственно предъявлять претензию к демо-серверам, тем более к тем, за которыми не стоит брокер  :-)
Если на демо всё работает абы -как, то будет безнравственно требовать нормальной работы от реальных серверов.

А MQ сервер должен быть неким "эталоном", на котором как раз можно было бы и нужно обкатывать свои технологии разработчикам алго.
 
fxsaber:
Множественный вызов SymbolSelect вызывает зависание терминала.
bool SymbolExist( const string Symb, const bool MarketWatch = true )
{
  bool Res = false;
  
  for (int i = SymbolsTotal(MarketWatch) - 1; (i >= 0) && (!Res); i--)
    Res = (Symb == SymbolName(i, MarketWatch));
    
  return(Res);
}

bool SymbolOnOff( const string Symb )
{
  return(SymbolSelect(Symb, !SymbolExist(Symb)));
}

void OnStart()
{
  for (int i = SymbolsTotal(false) - 1; i >= 0; i--)
  {
    const string Symb = SymbolName(i, false);
    
    if (SymbolOnOff(Symb))
      SymbolOnOff(Symb);
  }
}
 
Не увидел в Справке упоминания, что если символ отсутствует в Обзоре рынка, то данные по нему не получить. Методом тыка пришлось.
 
fxsaber:
Не увидел в Справке упоминания, что если символ отсутствует в Обзоре рынка, то данные по нему не получить. Методом тыка пришлось.
Ну как же. Есть упоминание

Возвращаемое значение

Значение типа double. В случае неудачного выполнения информацию об ошибкe можно получить с помощью функции GetLastError():

  • 5040 – неверный строковый параметр для указания имени символа,
  • 4301 – неизвестный символ (финансовый инструмент),
  • 4302 – символ не выбран в "Обзоре рынка" (нет в списке доступных),
  • 4303 – неверный идентификатор свойства символа.
 
Slawa:
Ну как же. Есть упоминание

Спасибо, косвенно упоминается.

Скажите, если через SymbolSelect добавляю символ в Обзор рынка, то как понять, что Bid/Ask по символу стали доступны -  SymbolIsSynchronized?

SymbolIsSynchronized - вроде, дорого для этих целей, т.к. там поднимается еще вопрос синхронизированности M1-истории.

 

ЗЫ SymbolIsSynchronized на некоторых символах никогда не становится true. 

 
fxsaber:

Спасибо, косвенно упоминается.

Скажите, если через SymbolSelect добавляю символ в Обзор рынка, то как понять, что Bid/Ask по символу стали доступны -  SymbolIsSynchronized?

SymbolIsSynchronized - вроде, дорого для этих целей, т.к. там поднимается еще вопрос синхронизированности M1-истории.

 

ЗЫ SymbolIsSynchronized на некоторых символах никогда не становится true. 

Становится, просто мучительно долго нужно подгружать историю....
 
Наверное, многие знают, но только сейчас догадался включить _LastError в отслеживаемые значения при дебаге. Рекомендую.
 
Перед тем, как проверять флаг синхронизированности истории, надо сначала вызвать CopyRates(Symbol(),PERIOD_M1,0,1000,rates)

Если это делается из индикатора, то будет отдано ровно то, что есть, но с запросом в исторический центр о подкачке. Тогда это может оказаться мучительным.

Если это делается из эксперта или скрипта, то внутри функции может быть сделано несколько циклов запросов с ожиданием ответа, и как правило после такого вызова история будет засинхронизирована
 
fxsaber:

Скажите, если через SymbolSelect добавляю символ в Обзор рынка, то как понять, что Bid/Ask по символу стали доступны?

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

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

 
Slawa:
Перед тем, как проверять флаг синхронизированности истории, надо сначала вызвать CopyRates(Symbol(),PERIOD_M1,0,1000,rates)

Если это делается из индикатора, то будет отдано ровно то, что есть, но с запросом в исторический центр о подкачке. Тогда это может оказаться мучительным.

Если это делается из эксперта или скрипта, то внутри функции может быть сделано несколько циклов запросов с ожиданием ответа, и как правило после такого вызова история будет засинхронизирована
Вы предлагаете это на каждом тике делать?
Причина обращения: