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

 
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)

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

Если это делается из эксперта или скрипта, то внутри функции может быть сделано несколько циклов запросов с ожиданием ответа, и как правило после такого вызова история будет засинхронизирована
Вы предлагаете это на каждом тике делать?
 
Alexey Kozitsyn:
Вы предлагаете это на каждом тике делать?
Я поддерживаю синхронизацию на каждом срабатывании OnBookEvent() :(
[Удален]  
prostotrader:
Я поддерживаю синхронизацию на каждом срабатывании OnBookEvent() :(
Тут без вопросов, вопрос в том, что помимо этого, предлагается еще и вызывать каждый раз функцию CopyRates().... это, как мне кажется, жесть какая-то...
 
Alexey Kozitsyn:
Тут без вопросов, вопрос в том, что помимо этого, предлагается еще и вызывать каждый раз функцию CopyRates().... это, как мне кажется, жесть какая-то...

:)

void OnBookEvent(const string &symbol)
{
  if(symbol == Symbol())
  {
    GetBars(Symbol(), time_frame);
  }  
}

Так меня научили в СД