Извините, что не ответил раньше: Я не знал о ваших сообщениях, потому что не получал уведомления от Metaquotes. Я действительно открыл тикет, как рекомендовал RaptorUK, но они так и не ответили на него. Я делаю то же самое, что и JamesMadden, когда это необходимо: Я просто закрываю ордер и теряю спред. Если это не так рискованно, я просто оставляю его там! (если мой советник прибыльный, то в долгосрочной перспективе он больше выиграет, чем потеряет) Однако, конечно, мне не нравится этот баг.
Сейчас у меня новые проблемы с билдом 600 и я хотел бы узнать, если кто-то знает, как заставить их ответить? :)
PD: Как мне заставить это веб-приложение отправлять мне электронное письмо, когда это сообщение обновляется? Я уже подписан на эту тему.
Извините, что не ответил раньше: Я не знал о ваших сообщениях, потому что не получал уведомления от Metaquotes. Я действительно открыл тикет, как рекомендовал RaptorUK, но они так и не ответили на него. Я делаю то же самое, что и JamesMadden, когда это необходимо: Я просто закрываю ордер и теряю спред. Если это не так рискованно, я просто оставляю его там! (если мой советник прибыльный, то в долгосрочной перспективе он больше выиграет, чем проиграет) Однако, конечно, мне не нравится этот баг.
Сейчас у меня новые проблемы с билдом 600, и я хотел бы узнать, если кто-то знает, как заставить их ответить? :)
Когда вы узнаете, дайте мне знать... У меня есть открытый тикет от марта 2013 года, на который так и не было ответа. Все, что я могу предложить, это продолжать добавлять новые комментарии каждый раз, спрашивая о новостях или ответе.
PD: Как мне заставить это веб-приложение отправлять мне электронное письмо, когда это сообщение обновляется? Я уже подписан на эту тему.
Уведомления по электронной почте не работают уже несколько лет... возможно, вы могли бы сообщить об этом в службу поддержки.
RaptorUK: Когда вы это обнаружите, дайте мне знать... У меня есть открытый тикет от марта 2013 года, на который так и не было ответа. Все, что я могу предложить, это продолжать добавлять новые комментарии, каждый раз спрашивая о новостях или ответе.
уведомления по электронной почте не работают уже несколько лет ... возможно, вы могли бы сообщить об этом в службу поддержки
.
Здравствуйте,
Я только что нашел эту тему, потому что искал именно эту проблему. Раньше я не замечал этой проблемы, но сегодня она возникла.
Помимо журнала экспертов, который, как уже упоминалось, записывает сделки, есть журнал MetaTrader, который записывает все сделки, совершенные советником или человеком. Сегодня я обнаружил в своем портфеле сделку, которая была дубликатом сделки, размещенной всего несколькими секундами ранее, но вторая сделка не появилась ни в журнале экспертов, ни в журнале MetaTrader.
Я попросил своего брокера сравнить их журналы входящих запросов с выполненными сделками, но подозреваю, что они либо не ведут журналы, либо не хотят проводить расследование.
Если бы советник действительно разместил 2 ордера, я бы ожидал увидеть оба в журнале. Даже если настольное приложение по какой-то причине продублировало запрос, я бы ожидал, что сервер ответит и зарегистрирует вторую сделку. Похоже, что сделка выполняется с сервера, а не с клиента.
Это первый раз, когда я заметил эту проблему, и я не могу найти способ воспроизвести ее. Суммы, с которыми я сейчас работаю, очень малы, поэтому значение не так важно, но это вызывает опасения по поводу жизнеспособности MetaTrader.
Просто решил высказать свои соображения на тему, которая давно муссируется.
Редактировать:
Я проверил дальше и нашел еще один случай. Ордер уже был закрыт по стоп-лоссу, поэтому я этого не заметил. В обоих случаях советник разместил ожидаемый ордер. Это отображается в журнале сразу после сообщения о входе, которое соответствует размещению фантомного ордера.
Если кто-то еще считает, что произошел фантомный ордер, пожалуйста, проверьте наличие сообщения о входе в систему в журнале. Оно может быть важным.
Похоже, я не единственный, кто страдает от этой раздражающей проблемы. Как и spikedog, мой советник запросил рыночный ордер, который привел к еще одной дублированной записи с тем же размером лота в течение миллисекунд, журнал дублированных ордеров был показан в журнале, но не на вкладке Experts; с тех пор я немного изменил свои коды, чтобы, надеюсь, лучше защититься от этой проблемы путем фильтрации двойной торговли в пределах одного бара (торговля только на открытии бара) прямо перед OrderSend().
Это первый раз, когда я столкнулся с этой проблемой дублирования сделок; с тех пор я открыл более 500 сделок у 3 брокеров, и до сих пор никаких проблем не возникало. При этом последующие сделки снова работают нормально.
В приложении мой код для обработки OrderSend(), когда происходит проблема дублирования. Я не могу понять, как мой советник может быть причиной дублирования ордеров. Единственная возможная причина, о которой я могу сейчас думать, это, возможно, очень редкий случай, когда сервер обрабатывает мой OrderSend, но возвращает "-1", и мой советник делает еще один запрос, рассматривая первый как реквот. Это всего лишь мое предположение.
bool Buy_Ticket = false;
while(Buy_Ticket==false){ //Loop to solve Requote issuesfor(int BT_count=0; BT_count < RequoteTries; BT_count++){
if (!IsTradeAllowed()) Sleep(RequoteTries_WaitingTime);
RefreshRates();
int B_Spread = MarketInfo(Symbol(), MODE_SPREAD); //TO CAPTURE EXACT SPREAD UPON BUY ORDER FOR SL
Buy_Ticket = OrderSend(Symbol(),0,order_lotsize,Ask,Slippage,0,0,EntryCode_comment,Magic,0,Blue) > 0;
if (Buy_Ticket==true){ //Modify to give SL & TP if new buy order executedfor(int buyMod=0; buyMod < OrdersTotal(); buyMod++){
if (OrderSelect(buyMod,SELECT_BY_POS,MODE_TRADES)){
if ((OrderSymbol()!=Symbol()) || (OrderType()!=OP_BUY)) continue;
if ((OrderStopLoss()==0) && (OrderTakeProfit()==0)){
double B_SL = NormalizeDouble((OrderOpenPrice()-((B_Spread*Point)+stoploss)),Digits);
double B_TP = NormalizeDouble((OrderOpenPrice()+takeprofit),Digits);
bool buy_ModSL_succeed = false;
while(buy_ModSL_succeed==false){ //Loop to solve SL+TP modify Requote issues for(int buyMod_count=0; buyMod_count < RequoteTries; buyMod_count++){
if (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
if (OrderModify(OrderTicket(), OrderOpenPrice(), B_SL, B_TP, 0, Red)==false) continue;
buy_ModSL_succeed = true;
Print(entrycode_txt," initiated Long trade successfully modified SL & TP.");
break;
} //End FOR loop for requote handlingif (buy_ModSL_succeed == false){
getError = GetLastError();
Alert("Error: ",getError," in Buy order#:",OrderTicket()," modify for SL:",B_SL," & TP:",B_TP," after ",RequoteTries," attempts.");
break;
}
} //End WHILE loop for SL+TP modify requote handling
} //End IF statement to select new orders without SL & TP
} //End IF orderselect
} //End FOR loop to modify new orders without SL & TP
} //End IF statement when buy order accepted & need SL+TP modifyif (Buy_Ticket==false) continue;
elsebreak;
} //----------------------------//End FOR loop to carry out ordersend for buy trade when requoteif (Buy_Ticket==false) break; //Exit WHILE loop to handle Requote issues, fail to buy
} //-------------------------------//End WHILE loop to solve Requote issues
Я не могу понять, как мой советник является причиной дублирования ордера.
Это может быть связано с этой ошибкой в вашем коде, вы должны исправить ее и протестировать снова. ...
Buy_Ticket = OrderSend(Symbol(),0,order_lotsize,Ask,Slippage,0,0,EntryCode_comment,Magic,0,Blue) > 0;
if (Buy_Ticket==true){ //Modify to give SL & TP if new buy order executed
OrderSend() возвращает int , а не bool, поэтому проверка, является ли возвращаемое значение "true", некорректна.
Спасибо raptoruk за предложение. Я знаю об этом. Однако я не думаю, что это причина дублирующейся торговли, потому что представленный код действителен, хотя и немного запутан.
Как код является корректным? Если OrderSend() работает, вы получаете значение больше 0, т.е. номер билета, если он не работает, вы получаете -1, вы тестируете на истину или ложь ... исправьте свой код и устраните неопределенность.
RaptorUK: Как код действителен? Если OrderSend() работает, вы получаете значение больше 0, т.е. номер билета, если он не работает, вы получаете -1 Вы тестируете на true или false ... исправьте свой код и уберите неопределенность.
RaptorUK: Как код является действительным? Если OrderSend() работает, вы получаете значение больше 0, т.е. номер билета, если он не работает, вы получаете -1, вы тестируете на истину или ложь ... исправьте свой код и уберите неопределенность.
Привет RaptorUK,
У меня вопрос не совсем по теме этой темы, но я надеюсь использовать мое предыдущее сообщение в качестве примера, чтобы углубить мое понимание кодирования mql4 и, возможно, помочь другим новичкам, как я (если вы считаете, что это не по теме и требует новой темы, пожалуйста, удалите эту и дайте мне знать).
Сначала я был немного смущен своим первоначальным способом объявления Buy_Ticket как bool, а не int, поэтому я провел дальнейшие тесты. Хотя я согласен, что мой первоначальный способ чтения OrderSend() как bool не является хорошим способом кодирования (запутанный), но мой тест показывает, что он верен. Чтобы упростить чтение, я сделал следующее, пожалуйста, посоветуйте и спасибо за ваше время.
P.S.: Как и советовали, я уже модифицировал своего эксперта, чтобы он читал OrderSend() как int.
Привет друзья!
Извините, что не ответил раньше: Я не знал о ваших сообщениях, потому что не получал уведомления от Metaquotes. Я действительно открыл тикет, как рекомендовал RaptorUK, но они так и не ответили на него. Я делаю то же самое, что и JamesMadden, когда это необходимо: Я просто закрываю ордер и теряю спред. Если это не так рискованно, я просто оставляю его там! (если мой советник прибыльный, то в долгосрочной перспективе он больше выиграет, чем потеряет) Однако, конечно, мне не нравится этот баг.
Сейчас у меня новые проблемы с билдом 600 и я хотел бы узнать, если кто-то знает, как заставить их ответить? :)
PD: Как мне заставить это веб-приложение отправлять мне электронное письмо, когда это сообщение обновляется? Я уже подписан на эту тему.
Привет друзья!
Извините, что не ответил раньше: Я не знал о ваших сообщениях, потому что не получал уведомления от Metaquotes. Я действительно открыл тикет, как рекомендовал RaptorUK, но они так и не ответили на него. Я делаю то же самое, что и JamesMadden, когда это необходимо: Я просто закрываю ордер и теряю спред. Если это не так рискованно, я просто оставляю его там! (если мой советник прибыльный, то в долгосрочной перспективе он больше выиграет, чем проиграет) Однако, конечно, мне не нравится этот баг.
Сейчас у меня новые проблемы с билдом 600, и я хотел бы узнать, если кто-то знает, как заставить их ответить? :)
PD: Как мне заставить это веб-приложение отправлять мне электронное письмо, когда это сообщение обновляется? Я уже подписан на эту тему.
Когда вы это обнаружите, дайте мне знать... У меня есть открытый тикет от марта 2013 года, на который так и не было ответа. Все, что я могу предложить, это продолжать добавлять новые комментарии, каждый раз спрашивая о новостях или ответе.
уведомления по электронной почте не работают уже несколько лет ... возможно, вы могли бы сообщить об этом в службу поддержки
.
Здравствуйте,
Я только что нашел эту тему, потому что искал именно эту проблему. Раньше я не замечал этой проблемы, но сегодня она возникла.
Помимо журнала экспертов, который, как уже упоминалось, записывает сделки, есть журнал MetaTrader, который записывает все сделки, совершенные советником или человеком. Сегодня я обнаружил в своем портфеле сделку, которая была дубликатом сделки, размещенной всего несколькими секундами ранее, но вторая сделка не появилась ни в журнале экспертов, ни в журнале MetaTrader.
Я попросил своего брокера сравнить их журналы входящих запросов с выполненными сделками, но подозреваю, что они либо не ведут журналы, либо не хотят проводить расследование.
Если бы советник действительно разместил 2 ордера, я бы ожидал увидеть оба в журнале. Даже если настольное приложение по какой-то причине продублировало запрос, я бы ожидал, что сервер ответит и зарегистрирует вторую сделку. Похоже, что сделка выполняется с сервера, а не с клиента.
Это первый раз, когда я заметил эту проблему, и я не могу найти способ воспроизвести ее. Суммы, с которыми я сейчас работаю, очень малы, поэтому значение не так важно, но это вызывает опасения по поводу жизнеспособности MetaTrader.
Просто решил высказать свои соображения на тему, которая давно муссируется.
Редактировать:
Я проверил дальше и нашел еще один случай. Ордер уже был закрыт по стоп-лоссу, поэтому я этого не заметил. В обоих случаях советник разместил ожидаемый ордер. Это отображается в журнале сразу после сообщения о входе, которое соответствует размещению фантомного ордера.
Если кто-то еще считает, что произошел фантомный ордер, пожалуйста, проверьте наличие сообщения о входе в систему в журнале. Оно может быть важным.
Похоже, я не единственный, кто страдает от этой раздражающей проблемы. Как и spikedog, мой советник запросил рыночный ордер, который привел к еще одной дублированной записи с тем же размером лота в течение миллисекунд, журнал дублированных ордеров был показан в журнале, но не на вкладке Experts; с тех пор я немного изменил свои коды, чтобы, надеюсь, лучше защититься от этой проблемы путем фильтрации двойной торговли в пределах одного бара (торговля только на открытии бара) прямо перед OrderSend().
Это первый раз, когда я столкнулся с этой проблемой дублирования сделок; с тех пор я открыл более 500 сделок у 3 брокеров, и до сих пор никаких проблем не возникало. При этом последующие сделки снова работают нормально.
В приложении мой код для обработки OrderSend(), когда происходит проблема дублирования. Я не могу понять, как мой советник может быть причиной дублирования ордеров. Единственная возможная причина, о которой я могу сейчас думать, это, возможно, очень редкий случай, когда сервер обрабатывает мой OrderSend, но возвращает "-1", и мой советник делает еще один запрос, рассматривая первый как реквот. Это всего лишь мое предположение.
Я не могу понять, как мой советник является причиной дублирования ордера.
Это может быть связано с этой ошибкой в вашем коде, вы должны исправить ее и протестировать снова. ...
OrderSend() возвращает int , а не bool, поэтому проверка, является ли возвращаемое значение "true", некорректна.
@BigFisherman
B.T.W что происходит с вашим кодом?
и снова?
Это может быть связано с этой ошибкой в вашем коде, вы должны исправить ее и протестировать снова. ...
OrderSend() возвращает int , а не bool, поэтому проверка того, что возвращаемое значение равно "true", некорректна.
Спасибо raptoruk за предложение. Вы правы :)
Спасибо raptoruk за предложение. Я знаю об этом. Однако я не думаю, что это причина дублирующейся торговли, потому что представленный код действителен, хотя и немного запутан.
Как код действителен? Если OrderSend() работает, вы получаете значение больше 0, т.е. номер билета, если он не работает, вы получаете -1 Вы тестируете на true или false ... исправьте свой код и уберите неопределенность.
Еще раз спасибо.
Ваше здоровье!
Как код является действительным? Если OrderSend() работает, вы получаете значение больше 0, т.е. номер билета, если он не работает, вы получаете -1, вы тестируете на истину или ложь ... исправьте свой код и уберите неопределенность.
Привет RaptorUK,
У меня вопрос не совсем по теме этой темы, но я надеюсь использовать мое предыдущее сообщение в качестве примера, чтобы углубить мое понимание кодирования mql4 и, возможно, помочь другим новичкам, как я (если вы считаете, что это не по теме и требует новой темы, пожалуйста, удалите эту и дайте мне знать).
Сначала я был немного смущен своим первоначальным способом объявления Buy_Ticket как bool, а не int, поэтому я провел дальнейшие тесты. Хотя я согласен, что мой первоначальный способ чтения OrderSend() как bool не является хорошим способом кодирования (запутанный), но мой тест показывает, что он верен. Чтобы упростить чтение, я сделал следующее, пожалуйста, посоветуйте и спасибо за ваше время.
P.S.: Как и советовали, я уже модифицировал своего эксперта, чтобы он читал OrderSend() как int.
Журнал