Добрый день, и снова я попрошайничаю. Вторые сутки не могу понять, почему не работает такой кусок кода
//+------------------------------------------------------------------+//| 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
Сделки, открывающие позиции, распечатывает, тоесть этот отбор работает. А как отобрать сделки - закрывающие позиции - не понятно, при том что в списке транзакций терминала они видны (на пару/тройку строчек выше всегда).
Сделки, открывающие позиции, распечатывает, тоесть этот отбор работает. А как отобрать сделки - закрывающие позиции - не понятно, при том что в списке транзакций терминала они видны (на пару/тройку строчек выше всегда).
Попробуйте пройти в отладчике нажав на синюю кнопку.
предварительно поставив точки останова и проверьте где какие значения имеются и какие ожидались. Так, вроде ошибок не вижу, поэтому надо проверять, следовательно писать открытие позиций, подгонять стопы так чтобы не долго ждать закрытия...
Выношу на суд общественности. Правда проверку еще не прикрутил никакую, но думаю работать должно
Ну и где нибудь в ОнТике: 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(); значит всё отрабатывает без проблем.
Видимо у вас отрабатывает добавление ордера в историю, а вы ждёте тикет сделки.