Предупреждение: терминал MT4 дублирует ордера, отправленные экспертами - страница 6

 

Есть разница между

bool Buy_Ticket = OrderSend(........)

и тем, что вы делаете

bool Buy_Ticket = Ordersend > 0;   //SIMPLIFIED CODE FOR EASIER READING

в первом случае, если заказ не выполнен, будет возвращено значение -1, но bool будет интерпретировать это как TRUE

во втором случае вы используете условие (Ordersend>0) для присвоения true или false булеву значению.

 
GumRai:


Есть разница между

и тем, что вы делаете

в первом случае, если заказ не выполнен, будет возвращено значение -1, но bool будет интерпретировать это как TRUE

во втором случае вы используете условие (Ordersend>0) для присвоения true или false булеву значению.



Это правда? Сейчас я не могу проверить это на демо-счете (торговля в реальном времени), но я провел быструю проверку на бэктесте, специально нарушив OrderSend() с недействительным стоплоссом = ask (рыночная цена) для длинной сделки. В результате OrderSend() возвращает "-1", как и ожидалось, и мой bool var Buy_Ticket также возвращает false.


** EDIT **

Вы пропустили мое условие "> 0" за OrderSend()? Мой оригинальный код показывает:

bool Buy_Ticket = OrderSend(........) > 0;
 
BigFisherman:



Это правда? Сейчас я не могу проверить это на демо-счете (торговля в реальном времени), но я сделал небольшую проверку на бэктесте, намеренно нарушив OrderSend() с недействительным стоплоссом = ask (рыночная цена) для длинной сделки. В результате OrderSend() возвращает "-1", как и ожидалось, и мой bool var Buy_Ticket также возвращает false.


** РЕДАКТИРОВАТЬ **

Вы пропустили мои условия "> 0" после OrderSend()? Мой оригинальный код показывает:


Извините, да, я действительно пропустил >0.

Я думаю, что это просто настолько странный способ, что я не заметил этого.

 

@ BigFisherman Проверьте код ниже

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);

см. здесь

Оператор присваивания может быть использован в выражении несколько раз. В этом случае обработка выражения выполняется слева направо:

y=x=3;

Сначала переменной x будет присвоено значение 3, затем переменной y будет присвоено значение x, т.е. тоже 3.

 
GumRai:


Извините, да, я действительно пропустил >0.

Я думаю, что это просто настолько странный способ, что я не заметил этого.


Нет проблем.

Я согласен, что это не очень хорошая практика - кодировать таким образом; я закодировал эту часть на ранней стадии моего обучения MQL, но поскольку она выглядела правильной для меня все это время, я оставил ее в покое, пока не возникла эта проблема дублирования торговли. Но, видимо, теперь "кажется", что мой первоначальный код, хотя и запутанный, кажется правильным, тогда он возвращается к первоначальной теме этой темы "Дублирующиеся сделки..."; это может быть серьезной и крайне нежелательной "редкой" ошибкой в mt4, которую, к сожалению, я не могу воспроизвести из-за ее редкого появления (1 из более чем 500+ сделок).

Для информации всем, из-за того, как я закодировал своего эксперта (см. мое 1-е сообщение на стр. 5), SL и TP назначались только после того, как он обнаруживал успешную OrderSend() (IMHO это довольно надежно до сих пор). И что случилось с моей предыдущей дублирующей сделкой - она НИКОГДА не успела установить SL и TP по какой-то неизвестной причине; кроме того, что OrderSend() вернул "-1", но все равно открыл сделку, или "он" открыл 2 одновременные сделки в одном OrderSend() ** просто мои собственные домыслы **. К счастью, я был прямо перед своим компьютером, когда это произошло, поэтому я мог просто вручную закрыть сделку; представьте, что произойдет, если я уеду в отпуск.

 
qjol:

@ BigFisherman проверьте код ниже

   bool Buy_Ticket;
   int TicketNo = 123456789;
   Buy_Ticket = TicketNo > 0;
   Alert(Buy_Ticket);


Buy_Ticket возвращает true, как и ожидалось. Что вы пытаетесь сказать?

 

я не пытаюсь сказать, я говорю!

если вы используете его так

bool Buy_Ticket = OrderSend(........) > 0;

конечно, вы получите true, если OrderSend() был выполнен

потому что сначала проверяется , является ли результат OrderSend > 0

и затем он передается в

Buy_Ticket

но все равно это не то, что нужно

 
qjol:

я не пытаюсь сказать, я говорю!

если вы используете его так

конечно, вы получите true, если OrderSend() был выполнен

потому что сначала проверяется , является ли результат OrderSend > 0

и затем он передается в

но все равно это не то, что нужно



Теперь я знаю, чьи сообщения нужно фильтровать в mql4, спасибо за ваш вклад в любом случае.
 
y=x=3;
Я пытался сделать это, но MetaEditor всегда останавливает меня, когда я пытаюсь скомпилировать.
 
BigFisherman:


Теперь я знаю, чьи сообщения фильтровать в mql4,

примечание: мое имя пользователя в mql5 то же самое