Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Можно вовсе ничего не помнить
{
if ((Trans.type == TRADE_TRANSACTION_DEAL_ADD) && (Trans.position > 0) && !PositionSelectByTicket(Trans.position))
Print("Position #" + (string)Trans.position + " - triggered SL/TP.");
}
Но, вроде, разговор стал вестись несколько шире.
Это Вы весьма невнимательны, я не топик-стартер.
Вы бы ещё такой код показали:
void OnTradeTransaction (const MqlTradeTransaction &trans, // структура торговой транзакции
const MqlTradeRequest &request, // структура запроса
const MqlTradeResult &result) // структура ответа
{
}
Ну а что такого - кому надо допишет сам, не нравится - есть джоба! Так что ли?
Я достаточно потратил времени, чтобы ответить на Ваш вопрос.
Если бы Ваш вопрос не был таким "абстрактным", то возможно ответ был бы более конкретным.
А именно:
1. ФОРТС или ФОРЕКС
2. Какой тип Вы используете netting или hedgie
3. Используются ли другие ордера во время жизни позиции
Поэтому каков вопрос - такой ответ
Согласен, что это будет работать (в случае, если полная заливка)
{
if ((Trans.type == TRADE_TRANSACTION_DEAL_ADD) && (Trans.position > 0) && !PositionSelectByTicket(Trans.position))
Print("Position #" + (string)Trans.position + " - triggered SL/TP.");
}
Но, вроде, разговор стал вестись несколько шире.
Что-то я не припомню, что для ST/TP можно установить объём.
Еесли нет (ща проверю), то позиция закроется ПОЛНОСТЬЮ или SL или TP
Что-то я не припомню, что ждя ST/TP можно установить объём, если нет,
то позиция закроется ПОЛНОСТЬЮ или SL или TP
Ликвидности может просто не хватить.
Ага, и Брокер может выключить электричество :)....
Берем малоликвидный инструмент и всего делов.
Вот поэтому-то я и рекомендовал использовать отложенные ордера
Добавлено
Многое зависит от рынка и инструмента...
Для точной идентификации по какому ордеру пришёл ответ в событие OnTradeTransaction все события кроме первого события по ордеру подписаны тикетом.
Первое событие подписано и тикетом и request_id. request_id пользователь получает сразу после отправки ордера от функции OrderSendAsinc. Таким образом происходит связывание конкретной итерации OrderSendAsinc и результатов получаемых в OnTradeTransaction.
Тикета в OrderSendAsync может и не быть и скорее всего не будет если ордерами стрелять по цать штук в сек (retcode 10008 в лучшем случае и псё).
Тикета в OrderSendAsync может и не быть и скорее всего не будет если ордерами стрелять по цать штук в сек (retcode 10008 в лучшем случае и псё).
Ну, не цать, в всего лишь 30 в сек. на стандартном логине.
Если все правильно написано, то ордер(а) обязвтельно будет.
Вместо того, что бы анализировать события, необходимо анализировать состояние торгового окружения, и только если торговое окружение изменилось принимать нужные решения. OnTransaction можно использовать только в очень ограниченных случаях, и как правило в своей работе лучше обходится вообще без него. Посмотрите на MetaTrader 4, в нем нет OnTransaction и все прекрасно обходятся без него.
Согласен. Но, к сожалению, в MT5, в отличие от MT4, торговое окружение может не соответствовать реальности. Например, при исполнении отложенного ордера на несколько миллисекунд его может нигде не быть. И здесь даже OnTradeTransaction не поможет.