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

 
Carl Schreiber #:

структура fxsaber инициализируются и заполняются до запуска OnInit().

Это не так. Структура в режиме заполнения до тех пор, пока не будут получены ненулевые значения.
 
fxsaber # :
Это не так. Структура в режиме заполнения до тех пор, пока не будут получены ненулевые значения.

Не могли бы вы объяснить это более подробно, возможно, со ссылкой?

Would you mind to explain this in more detail, perhaps with a link?
 
Carl Schreiber #:

Не могли бы вы объяснить это более подробно, возможно, со ссылкой?

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

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

fxsaber, 2024.01.01 19:36

struct STRUCT_SYMBOL_INFO_DOUBLE
{
  double Prop[100];
  
  double Get( const ENUM_SYMBOL_INFO_DOUBLE Prop_ID )
  {
    return(this.Prop[Prop_ID] ? this.Prop[Prop_ID]
                              : this.Prop[Prop_ID] = ::SymbolInfoDouble(_Symbol, Prop_ID));        
  }
} SymbolDouble = {};


void OnInit()
{
  Print(SymbolDouble.Get(SYMBOL_VOLUME_MIN));
  Print(SymbolDouble.Get(SYMBOL_VOLUME_MAX));
  Print(SymbolDouble.Get(SYMBOL_VOLUME_STEP));
}
Это условие будет вызывать SymbolInfoDouble только в том случае, если до этого возвращался ноль. Как только придет ненулевое значение, больше SymbolInfoDouble вызываться не будет - значение будет браться из структуры.
 
fxsaber #:
Это условие будет вызывать SymbolInfoDouble только в том случае, если до этого возвращался ноль. Как только придет ненулевое значение, больше SymbolInfoDouble вызываться не будет - значение будет браться из структуры.

Интересный костыль, без иронии. А что произойдёт если ::SymbolInfoDouble(_Symbol, Prop_ID) вернёт ошибку?

 
fxsaber #:
Это условие будет вызывать SymbolInfoDouble только в том случае, если до этого возвращался ноль. Как только придет ненулевое значение, больше SymbolInfoDouble вызываться не будет - значение будет браться из структуры.

Я вижу, что в OnInit() структура заполняется, но только там(?) и только один раз(?). Что делать, если OnInit() вызывается в то время, когда соединение с сервером было слишком медленным или временно разорвано, так что функции MQ возвращают ноль вместо реального значения брокера?

Well I see that in OnInit() the structure is filled, but only there(?) and only once(?). What when OnInit() is called while the connection to the server was too slow or temporarily broken so that the MQ functions return zero instead of the real broker value?

 
Carl Schreiber #:

Я вижу, что в OnInit() структура заполняется, но только там(?) и только один раз(?). Что делать, если OnInit() вызывается в то время, когда соединение с сервером было слишком медленным или временно разорвано, так что функции MQ возвращают ноль вместо реального значения брокера?

Well I see that in OnInit() the structure is filled, but only there(?) and only once(?). What when OnInit() is called while the connection to the server was too slow or temporarily broken so that the MQ functions return zero instead of the real broker value?

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

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

Artyom Trishkin, 2024.01.02 08:42

Если данные не получены - повторить запрос. Если опять нет, то вписать их при старте. 

 

СимволInfoDouble() возвращает только эти ошибки:

SymbolInfoDouble() returns only these Errors:
The value of double type. In case of execution failure, information about the error can be obtained using GetLastError() function:
•5040 – invalid string parameter for specifying a symbol name,
•4301 – unknown symbol (financial instrument),
•4302 – symbol is not selected in "Market Watch" (not found in the list of available ones),
•4303 – invalid identifier of a symbol property.

No Error in case of connection problem.

Нет Ошибка в случае проблем с подключением.

 
Artyom Trishkin # :
Если данные не получены - повторить запрос. Если опять нет, то вписать их при старте. 

В этом и заключается идея моей функции setGlobVars(), поэтому другого решения нет.

That is the idea of my a. m. function setGlobVars() - so there is no other solution.
 
Carl Schreiber #:

В этом и заключается идея моей функции setGlobVars(), поэтому другого решения нет.

That is the idea of my a. m. function setGlobVars() - so there is no other solution.

Такую "идею" MQ много раз уже озвучивали. Так что это и не идея вовсе, а давняя рекомендация.

Данные получены - работаем, не получены - выход до следующего тика.

 
Alexey Viktorov #:

Интересный костыль, без иронии. А что произойдёт если ::SymbolInfoDouble(_Symbol, Prop_ID) вернёт ошибку?

На каждом вызове метода структуры будете получать нулевое значение через SymbolInfoDouble. Как только первый раз получите ненулевое - SymbolInfoDouble перестанет вызываться.


Честно говоря, SymbolInfo-функции работают без соединения с торговым сервером, потому что Обзор рынка со всеми спецификациями хранится в терминале (конфигурационные файлы).

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