caseTRADE_TRANSACTION_DEAL_ADD: if (trans.order != my_order_ticket) { //Сработал SL или TP } break;
А тем, что последние известные SL и TP позиции могут не совпасть с ценой сделки и сравнивать будет не с чем и не возможно будет определить что именно сработало!
А Вы я посмотрю своими кодами делится не любите зато с удовольствием смотрите чужие...
Вот это будет работать не всегда:
int G_LastTicket = 0; //Последний известный тикет double G_LastSLlevel = 0.0; //Последний известный уровень SL double G_LastTPlevel = 0.0; //Последний известный уровень TP //—————————————————————————————————————————————————————————————————————————————— voidOnTradeTransaction (constMqlTradeTransaction &trans, // структура торговой транзакции constMqlTradeRequest &request, // структура запроса constMqlTradeResult &result) // структура ответа { if(trans.type == TRADE_TRANSACTION_DEAL_ADD) { if(PositionsAny (G_Symbol)) { G_LastSLlevel = GetSLlevel (G_Symbol); G_LastTPlevel = GetTPlevel (G_Symbol); Print ("SLlevel: " + G_LastSLlevel); Print ("TPlevel: " + G_LastTPlevel); }
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Да, примерно так. Просто не тестировал так пока.
Попробуйте...
Добавлено
if (trans.order != my_order_ticket)
{
if(trans.symbol==Symbol())
{
if(проверяем магик)
{
//Сработал SL или TP
}
}
}
break;
А чем не устроил этот метод?
if (trans.order != my_order_ticket)
{
//Сработал SL или TP
}
break;
А тем, что последние известные SL и TP позиции могут не совпасть с ценой сделки и сравнивать будет не с чем и не возможно будет определить что именно сработало!
А Вы я посмотрю своими кодами делится не любите зато с удовольствием смотрите чужие...
Вот это будет работать не всегда:
double G_LastSLlevel = 0.0; //Последний известный уровень SL
double G_LastTPlevel = 0.0; //Последний известный уровень TP
//——————————————————————————————————————————————————————————————————————————————
void OnTradeTransaction (const MqlTradeTransaction &trans, // структура торговой транзакции
const MqlTradeRequest &request, // структура запроса
const MqlTradeResult &result) // структура ответа
{
if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
{
if(PositionsAny (G_Symbol))
{
G_LastSLlevel = GetSLlevel (G_Symbol);
G_LastTPlevel = GetTPlevel (G_Symbol);
Print ("SLlevel: " + G_LastSLlevel);
Print ("TPlevel: " + G_LastTPlevel);
}
if(trans.deal != G_LastTicket)
{
if(trans.price == G_LastSLlevel)
Print ("Сработал SL");
if(trans.price == G_LastTPlevel)
Print ("Сработал TP");
}
}
}
Попробуйте...
А чем не устроил этот метод?
Надо хранить my_order_ticket
Вы вообще в курсе о чём речь?
my_order_ticket - этот ордер имеет место жить, если Вы во время жизни позиции
дополнительно оперируете ордерами (Вы их обязаны хранить).
Надо хранить my_order_ticket
Как-нибудь попробую конечно. Спасибо. Сейчас другими задачами занят.
И не только.
Да, фактически предлагается самому поддерживать и хранить актуальное окружение, сравнивая его с тем, что выдает OnTradeTransaction.
Это не решение.
Да, фактически предлагается самому поддерживать и хранить актуальное окружение, сравнивая его с тем, что выдает OnTradeTransaction.
Это не решение.
Вы просто не внимательно следите за топиком. :)
Изначально топик-стартер писал:
"Как узнать в OnTradeTransaction () что сработал SL/TP?"
Какое решение должно быть?
Можно вовсе ничего не помнить и не проверять, кроме самой позиции, при условии, что
Вы не оперировали другими ордерами
if (!PositionSelect(Symbol())
{
//Сработал SL или TP
}
break;
Вы просто не внимательно следите за топиком. :)
Изначально топик-стартер писал:
Это Вы весьма невнимательны, я не топик-стартер.
Вы бы ещё такой код показали:
void OnTradeTransaction (const MqlTradeTransaction &trans, // структура торговой транзакции
const MqlTradeRequest &request, // структура запроса
const MqlTradeResult &result) // структура ответа
{
}
Ну а что такого - кому надо допишет сам, не нравится - есть джоба! Так что ли?