Хэлп, не могу найти пример кода для отслеживания закрытия позиции по стоп-лоссу.
если возможно БЕЗ Стандартных библиотек(как-то они криво работают, с SendOrder проще)
Во первых, в комментарии должно быть sl или [sl], в общем, надо такую строку поискать.
У меня в классе управления ордерами есть вот такая функция, можно на нее ориентироваться, хотя это не гарантия закрытия по ТП или СЛ
// возвращает причину закрытия ордера OrderCloseReason GetOrderCloseReason(int ticket) { if (!OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY)) return crNotFound; if (OrderType() == OP_BUY) { if (OrderTakeProfit() > 0 && OrderTakeProfit() <= OrderClosePrice()) return crByTakeProfit; if (OrderStopLoss() > 0 && OrderStopLoss() >= OrderClosePrice()) return crByStopLoss; } if (OrderType() == OP_SELL) { if (OrderTakeProfit() > 0 && OrderTakeProfit() >= OrderClosePrice()) return crByTakeProfit; if (OrderStopLoss() > 0 && OrderStopLoss() <= OrderClosePrice()) return crByStopLoss; } return crUnknown; }
Если открыта поза и срабатывает стол-лосс, это значит сработал лимитный ордер выставленный по цене стопа?
Если переводить в аналогии, как Вы пишите в этом посте, то нет - Stop Loss является именно стоповым ордером, т. к. для закрытия позиции Buy нужно открыть позицию Sell. При этом имеется в виду, что Sell появляется путем срабатывания отложенного ордера ниже текущей рыночной цены. Sell ниже текущей цены - это Sell Stop. Поэтому то ордер и стоповый. Аналогично со Stop Loss для Sell - это ордер Buy Stop.
Лимитный ордер - это аналог Take Profit.
Хэлп, не могу найти пример кода для отслеживания закрытия позиции по стоп-лоссу.
если возможно БЕЗ Стандартных библиотек(как-то они криво работают, с SendOrder проще)
Во первых, в комментарии должно быть sl или [sl], в общем, надо такую строку поискать.
Запоминаем тикет ордера
И потом по тикету ордера смотрим есть ли время закрытия ордера.
(Или смотрим историю ордеров по циклу, и ищем самый новый закрытый ордер который имеет свой магик)
Если есть, то смотрим цену закрытия, для бай ордера, если цена закрытия меньше или равна СтопЛосс то ордер закрылся по стопу.
до сих пор, самый надежный способ - это проверять коммент на наличие [sl] / [tp] и надеяться что он там будет?
есть ли способ найти эту инфу в сделках, без написания своего собственного Метатрейдера с отслеживанием "примерного" закрытия по цене какого-то призрачного ордера в истории?
const MqlTradeTransaction& action,
const MqlTradeRequest& query,
const MqlTradeResult& status)
{
switch (action.type)
{
case TRADE_TRANSACTION_DEAL_ADD:
{
if (HistoryDealSelect(action.deal))
{
double volume = HistoryDealGetDouble(action.deal, DEAL_VOLUME);
int direction = HistoryDealGetInteger(action.deal, DEAL_TYPE) == DEAL_TYPE_BUY ? 1 : -1;
ENUM_DEAL_ENTRY deal = (ENUM_DEAL_ENTRY) HistoryDealGetInteger(action.deal, DEAL_ENTRY);
Print(
"#################### : " +
action.deal + " : " + EnumToString(deal) + " : " + direction + " : " + volume
);
}
}
}
}
Запоминаем тикет ордера
И потом по тикету ордера смотрим есть ли время закрытия ордера.
(Или смотрим историю ордеров по циклу, и ищем самый новый закрытый ордер который имеет свой магик)
Если есть, то смотрим цену закрытия, для бай ордера, если цена закрытия меньше или равна СтопЛосс то ордер закрылся по стопу.
Не факт, стопы можно переносить. Можно перенести вверх или вниз. По коменту самый оптимальный вариант при условии что ордера скользят.
Есть правда брокеры у котрых цена закрытия, всегда равна стоп лоссу.(при закрытии по стопу)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Хэлп, не могу найти пример кода для отслеживания закрытия позиции по стоп-лоссу.
если возможно БЕЗ Стандартных библиотек(как-то они криво работают, с SendOrder проще)