Добрый день, и снова я попрошайничаю. Вторые сутки не могу понять, почему не работает такой кусок кода
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction& trans,
constMqlTradeRequest& request,
constMqlTradeResult& result)
{
//---if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
{
Print("Зашла сделка ########## ",trans.position," ###########");
if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN)// Открылась позиция
{
if(PositionSelectByTicket(trans.position))
{
int SizeArrayPosition = ArraySize(ArrayPosition);
ArrayResize(ArrayPosition,SizeArrayPosition+1);
ArrayPosition[SizeArrayPosition].kod_clana = 0;
ArrayPosition[SizeArrayPosition].open_price = trans.price;
ArrayPosition[SizeArrayPosition].ticket_position = trans.position;
ArrayPosition[SizeArrayPosition].identi_position = PositionGetInteger(POSITION_IDENTIFIER);
ArrayPosition[SizeArrayPosition].open_tyme = (datetime)PositionGetInteger(POSITION_TIME);
ArrayPosition[SizeArrayPosition].type_position = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
ArrayPosition[SizeArrayPosition].StopLoss = trans.price_sl;
ArrayPosition[SizeArrayPosition].TakeProfit = trans.price_tp;
Print("Открыта позиция +++ ",trans.position," +++ записана в структуру ArrayPosition ++++++++++++++");
}
}
if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) != DEAL_ENTRY_IN)
{
Print("Закрыта позиция --- ",trans.position," --- записана в структуру ArrayDealOut ------------");
}
}
}
Принт "Зашла сделка...." проходит нормально, потом должно быть раздвоение, одни сделки "Открыта позиция ...." распечатываются, а вот все остальные (это сделки закрывающие позицию по ТэйкПрофиту) не принтуются.
В чем прикол не могу понять. Потерянные сделки выделю цветом ниже по тексту.
2020.04.1211:27:33.103 Core 12018.01.0218:54:00 CTrade::OrderSend: market buy 0.01 EURUSD tp: 1.20621 [done at 1.20574]
2020.04.1211:27:33.103 Core 12018.01.0218:54:00 Зашла сделка ##########1042###########
2020.04.1211:27:33.103 Core 12018.01.0218:54:00Открыта позиция +++ 1042 +++ записана в структуру ArrayPosition ++++++++++++++
2020.04.1211:27:33.103 Core 12018.01.0218:54:00 Зашла сделка ########## 1043###########
2020.04.1211:27:33.103 Core 12018.01.0218:54:00Открыта позиция +++ 1043 +++ записана в структуру ArrayPosition ++++++++++++++
2020.04.1211:27:33.103 Core 12018.01.0218:55:43take profit triggered #1039sell 0.01 EURUSD 1.20579 tp: 1.20532 [#1044buy 0.01 EURUSD at 1.20532]
2020.04.1211:27:33.103 Core 12018.01.0218:55:43 deal #1044buy 0.01 EURUSD at 1.20527 done (based on order #1044)
2020.04.1211:27:33.103 Core 12018.01.0218:55:43 deal performed [#1044buy 0.01 EURUSD at 1.20527]
2020.04.1211:27:33.103 Core 12018.01.0218:55:43 order performed buy 0.01 at 1.20527 [#1044buy 0.01 EURUSD at 1.20532]
2020.04.1211:27:33.103 Core 12018.01.0218:55:43 Зашла сделка ########## 1039###########
2020.04.1211:27:33.103 Core 12018.01.0218:56:30take profit triggered #1042sell 0.01 EURUSD 1.20571 tp: 1.20523 [#1045buy 0.01 EURUSD at 1.20523]
2020.04.1211:27:33.103 Core 12018.01.0218:56:30 deal #1045buy 0.01 EURUSD at 1.20523 done (based on order #1045)
2020.04.1211:27:33.103 Core 12018.01.0218:56:30 deal performed [#1045buy 0.01 EURUSD at 1.20523]
2020.04.1211:27:33.103 Core 12018.01.0218:56:30 order performed buy 0.01 at 1.20523 [#1045buy 0.01 EURUSD at 1.20523]
2020.04.1211:27:33.103 Core 12018.01.0218:56:30 Зашла сделка ##########1042###########
2020.04.1211:27:33.103 Core 12018.01.0218:57:00 На символе EURUSD открылся новый бар в 2018.01.0218:572020.04.1211:27:33.103 Core 12018.01.0218:57:00 market sell 0.01 EURUSD tp: 1.20458 (1.20507 / 1.20509 / 1.20507)
Алексей, это всё относится исключительно к обработке события OnTradeTransaction
Произошло событие, совершена сделка закрывающая позицию. Позиции уже в этот момент нет. Подтвердить это можно выбрав список ордеров и сделок (в коде отсутствует) и прочитав
И надо учитывать, что разговор идёт о счёте hadge где позиция, как правило, имеет только по два ордера и две сделки.
Добрый день, если это сильно Вас не затруднит, Вы точно все в этом посте описали. Сверху, двумя моими постами выше я таки пытаюсь получить нужный мне результат - зафиксировать закрытие позиции. И таки не получается.
Подскажите плиз, где у меня ошибка или недоработка ?????
Сдаётся мне, что внесены какие-то изменения в обработку события OnTradeTransaction.
Попробуйте заменить TRADE_TRANSACTION_DEAL_ADD на TRADE_TRANSACTION_HISTORY_ADD
Сделки, открывающие позиции, распечатывает, тоесть этот отбор работает. А как отобрать сделки - закрывающие позиции - не понятно, при том что в списке транзакций терминала они видны (на пару/тройку строчек выше всегда).
Сделки, открывающие позиции, распечатывает, тоесть этот отбор работает. А как отобрать сделки - закрывающие позиции - не понятно, при том что в списке транзакций терминала они видны (на пару/тройку строчек выше всегда).
Попробуйте пройти в отладчике нажав на синюю кнопку.
предварительно поставив точки останова и проверьте где какие значения имеются и какие ожидались. Так, вроде ошибок не вижу, поэтому надо проверять, следовательно писать открытие позиций, подгонять стопы так чтобы не долго ждать закрытия...
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Выношу на суд общественности. Правда проверку еще не прикрутил никакую, но думаю работать должно
Ну и где нибудь в ОнТике: DelitClosePositionFromArrayPosition();
Добрый день, и снова я попрошайничаю. Вторые сутки не могу понять, почему не работает такой кусок кода
Принт "Зашла сделка...." проходит нормально, потом должно быть раздвоение, одни сделки "Открыта позиция ...." распечатываются, а вот все остальные (это сделки закрывающие позицию по ТэйкПрофиту) не принтуются.
В чем прикол не могу понять. Потерянные сделки выделю цветом ниже по тексту.
Так что прямо SOS какой-то !!!
Алексей, это всё относится исключительно к обработке события OnTradeTransaction
Произошло событие, совершена сделка закрывающая позицию. Позиции уже в этот момент нет. Подтвердить это можно выбрав список ордеров и сделок (в коде отсутствует) и прочитав
И надо учитывать, что разговор идёт о счёте hadge где позиция, как правило, имеет только по два ордера и две сделки.Добрый день, если это сильно Вас не затруднит, Вы точно все в этом посте описали. Сверху, двумя моими постами выше я таки пытаюсь получить нужный мне результат - зафиксировать закрытие позиции. И таки не получается.
Подскажите плиз, где у меня ошибка или недоработка ?????
А вот так разделение вообще пропало, получается что закрытие позиции по ТэйкПрофиту тоже подходит под DEAL_ENTRY_IN ???
Сдаётся мне, что внесены какие-то изменения в обработку события OnTradeTransaction.
Попробуйте заменить TRADE_TRANSACTION_DEAL_ADD на TRADE_TRANSACTION_HISTORY_ADD
Сдаётся мне, что внесены какие-то изменения в обработку события OnTradeTransaction.
Попробуйте заменить TRADE_TRANSACTION_DEAL_ADD на TRADE_TRANSACTION_HISTORY_ADD
Не помогает. Спасибо что откликнулись.
Сдаётся мне, что внесены какие-то изменения в обработку события OnTradeTransaction.
Попробуйте заменить TRADE_TRANSACTION_DEAL_ADD на TRADE_TRANSACTION_HISTORY_ADD
Сделки, открывающие позиции, распечатывает, тоесть этот отбор работает. А как отобрать сделки - закрывающие позиции - не понятно, при том что в списке транзакций терминала они видны (на пару/тройку строчек выше всегда).
Попробую с самого начала, ато в голове уже каша. Как говорил классик кино - "Ну кто так строит.....????".
Торговая транзакция уже есть, а тикета сделки еще нету. Я правильно понимаю ???
Сделки, открывающие позиции, распечатывает, тоесть этот отбор работает. А как отобрать сделки - закрывающие позиции - не понятно, при том что в списке транзакций терминала они видны (на пару/тройку строчек выше всегда).
Попробуйте пройти в отладчике нажав на синюю кнопку.
предварительно поставив точки останова и проверьте где какие значения имеются и какие ожидались. Так, вроде ошибок не вижу, поэтому надо проверять, следовательно писать открытие позиций, подгонять стопы так чтобы не долго ждать закрытия...
Попробую с самого начала, ато в голове уже каша. Как говорил классик кино - "Ну кто так строит.....????".
Торговая транзакция уже есть, а тикета сделки еще нету. Я правильно понимаю ???
Я вообще ничего не понимаю. Вот кусок кода из моего работающего советника
и ведь ни разу не остановился на DebugBreak(); значит всё отрабатывает без проблем.
Видимо у вас отрабатывает добавление ордера в историю, а вы ждёте тикет сделки.