Общайтесь с разработчиками через Сервисдеск! - страница 171

 

Уважаемые разработчики!


Просьба по MetaEditor - добавить в "Список функций (Alt-M)"  вертикальную полосу прокрутки!

(Или нужно написать в какую-то другую ветку?)

 

В справочнике MQL5 в качестве примера приводится

MqlTradeRequest request={0};

При компиляции получаю ошибку "cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'"

Смысл ошибки мне понятен, но раньше (до билда от 04/06/20121) такая конструкция работала. Или это только у меня так?

 
Malik Arykov:

В справочнике MQL5 в качестве примера приводится

но при компиляции получаю ошибку "cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'"

Смысл ошибки мне понятен, но раньше (до билда от 04/06/20121) такая конструкция работала. Или это только у меня так?

у всех так.

 
Malik Arykov:

В справочнике MQL5 в качестве примера приводится

но при компиляции получаю ошибку "cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'"

Смысл ошибки мне понятен, но раньше (до билда от 04/06/20121) такая конструкция работала. Или это только у меня так?

Справка немного устарела

 

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

Особенности языка mql5, тонкости и приёмы работы

Ilyas, 2021.05.28 18:18

Мы расширяем инициализирующие последовательности "{ ... }", в ближайшем билде будет разрешено использовать любое выражение, а не только константное.

Вместо с этим изменением, появится и граничение на использование констант для перечислений (как для обычного выражения): если константа не входит в перечисление, то будет выдана соответствующая ошибка.

Анализ существующих кодов показал, что часто неправильно используется последовательность из одного нуля - "{0}"

Например так:

MqlTradeRequest request={0};


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

Для приведённой выше строки кода, по новым правилам, будет выдана ошибка, т.к. первое поле имеет тип ENUM_TRADE_REQUEST_ACTIONS, перечисление, в котором отсутствует значение "0"

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


Правильно будет так:

MqlTradeRequest request={};

 
Анализ существующих кодов показал, что часто неправильно используется последовательность из одного нуля - "{0}"
Если источник кодов - кодебаза, то она не репрезентативна. Имхо.
 
Vladimir Karputov:

MqlTradeRequest request={};

Не катит, поскольку значения полей - случайные числа (абракадабра). Из-за этого запрос на сервер не проходит или возвращается с ошибкой. Пришлось приделать костыли

void UTrade::ResetStruct(MqlTradeRequest &request) {
    request.magic = 0;
    request.order = 0;
    request.stoplimit = 0;
    request.sl = 0;
    request.tp = 0;
    request.deviation = 0;
    request.type = 0;
    request.type_filling = 0;
    request.type_time = 0;
    request.position = 0;
    request.position_by = 0;
    request.expiration = 0;
}
Мне только интересно, почему так мало было шума. Если многие торговали бы на МТ5, то ор подняли бы такой, что правка пришла бы моментально. А так ждем очередного билда.
 
Malik Arykov:

Не катит, поскольку значения полей - случайные числа (абракадабра). Из-за этого запрос на сервер не проходит или возвращается с ошибкой. Пришлось приделать костыли

Мне только интересно, почему так мало было шума. Если многие торговали бы на МТ5, то ор подняли бы такой, что правка пришла бы моментально. А так ждем очередного билда.
Потратить пол дня на изготовление костылей, это жесть……… А надо-то всего лишь прочесть документацию.
Документация по MQL5: Общие функции / ZeroMemory
Документация по MQL5: Общие функции / ZeroMemory
  • www.mql5.com
ZeroMemory - Общие функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Malik Arykov:

Не катит, поскольку значения полей - случайные числа (абракадабра).

Пример, пожалуйста.

 
fxsaber:

Пример, пожалуйста.

Шайтан, сейчас все работает как надо ;-)
Но сейчас торги закрыты, проверю когда начнутся.
Однако с какого перепуга я приделывал костыли. Копнул логи  от 07.06.2021 и вот доказательства
У меня все ходы записаны (с) 12 стульев ;-)

GK      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     // UTrade::Dump / ExecuteTradeAction / MqlTradeRequest
FI      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     action= TRADE_ACTION_PENDING
PR      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     type= ORDER_TYPE_SELL_STOP
RD      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     symbol= EURGBP
HS      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     volume= 0.01
PF      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     price= 0.85845
RQ      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     SL= 0.0
PI      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     TP= 0.85745
OM      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     deviation= 5
GI      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     comment= SOP/M5/SS/C2/Br/Br/Br
FM      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     magic= 17856396970583687158
EK      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     order= 10312962290177016427
HN      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     position= 140725102556237
NI      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     position_by= 2662605455360
DM      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     stoplimit= 1.313556840344213e-311
LN      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     type_filling= ORDER_FILLING_FOK
HG      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     type_time= ORDER_TIME_DAY
NQ      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     expiration= wrong datetime
EJ      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     // UTrade::Dump / ExecuteTradeAction / MqlTradeCheckResult
JG      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     retcode= 10013
IN      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     balance= 0.0
PI      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     equity= 0.0
GP      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     profit= 0.0
MK      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     margin= 0.0
NN      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     margin_free= 0.0
LH      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     margin_level= 0.0
DN      0       14:02:55.854    SendOrderByPlan (EURGBP,M5)     comment= Invalid request
IE      3       14:02:55.854    Message EURGBP SellStop 
PH      3       14:02:55.854    Message volume=0.01
RN      3       14:02:55.854    Message price=0.85845
ND      3       14:02:55.854    Message SL=0.00000
RJ      3       14:02:55.854    Message TP=0.85745
GL      3       14:02:55.854    Message comment=SOP/M5/SS/C2/Br/Br/Br
KH      3       14:02:55.854    Message OrderCheck rcode=10013 Invalid request
Причина обращения: