Как начать работу с MQL5 - страница 6

 
Здравствуйте, Владимир
У меня есть отложенный ордер и когда он исполняется и закрывается
Я хочу открыть отложенный ордер по той же цене, что и предыдущий закрытый ордер... пожалуйста, какую функцию мне использовать для исполнения ордера (MQL5)
Спасибо большое.
 
Ahmadahmad654 :
Здравствуйте, Владимир
У меня есть отложенный ордер и когда он исполняется и закрывается
Я хочу открыть отложенный ордер по той же цене, что и предыдущий закрытый ордер... пожалуйста, какую функцию мне использовать для исполнения ордера (MQL5)
Спасибо большое.

Ордер может быть только отложенным. Поэтому ордер нельзя закрыть - его можно только удалить.


Как я понимаю: вы выставляете отложенный ордер (его цена - Price # 1). Затем он срабатывает -> появляется позиция. Затем позиция закрывается и вы хотите снова выставить отложенный ордер по цене Price # 1? Правильно ли я вас понял?

 
Да. После активации ордера и закрытия его по тейк-профиту
 
Ahmadahmad654 :
Да. После активации ордера и закрытия его по тейк-профиту.

В этом случае нужно работать пошагово. Шаг первый: поймать момент закрытия сделки.

Сделки могут быть (по типу входа/выхода): ENUM_DEAL_ENTRY

ENUM_DEAL_ENTRY

Идентификатор

Описание

DEAL_ENTRY_IN

Вход в систему

DEAL_ENTRY_OUT

Выход из системы

DEAL_ENTRY_INOUT

Обратный

DEAL_ENTRY_OUT_BY

Закрытие позиции противоположной пози цией


Нам нужно перехватить сделку DEAL_ENTRY_OUT - сделать это легко в OnTradeTransaction. Процедура: перехватывает транзакцию TRADE_TRANSACTION_DEAL_ADD (добавление сделки в историю ) и видит, что это сделка с типом DEAL_ENTRY_OUT

Пример кода:

//+------------------------------------------------------------------+
//|                                       Example DEAL_ENTRY_OUT.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
/*
   barabashkakvn Trading engine 3.124
*/
#include <Trade\SymbolInfo.mqh>
#include <Trade\DealInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
CDealInfo      m_deal;                       // object of CDealInfo class
//--- input parameters
input ulong    InpMagic             = 200;         // Magic number
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal))
         m_deal.Ticket(trans.deal);
      else
         return;
      if(m_deal.Symbol()==m_symbol.Name() && m_deal.Magic()==InpMagic)
        {
         if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
           {
            if(m_deal.Entry()==DEAL_ENTRY_OUT)
              {
               Print(m_deal.Time()," | ",m_deal.Symbol()," | ",m_deal.Price());
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+


Пожалуйста, попрактикуйтесь в запуске этого советника.

Documentation on MQL5: Constants, Enumerations and Structures / Trade Constants / Deal Properties
Documentation on MQL5: Constants, Enumerations and Structures / Trade Constants / Deal Properties
  • www.mql5.com
A deal is the reflection of the fact of a trade operation execution based on an order that contains a trade request. Each trade is described by properties that allow to obtain information about it. In order to read values of properties, functions of the Identifier of a position, in the opening, modification or closing of which this deal took...
Файлы:
 

OK...
Шаг 1 # Открыть и исполнить отложенный ордер по цене# 1
Шаг 2 #: Закрыть позицию по цене# 2 (m_deal.Price ())
Шаг 3 # Открыть новый отложенный ордер по цене #1
Пожалуйста, помогите мне в шаге#3.

большое спасибо... с наилучшими пожеланиями

 
Ahmadahmad654 :

OK...
Шаг 1 # Открыть и исполнить отложенный ордер по цене# 1
Шаг 2 #: Закрыть позицию по цене# 2 (m_deal.Price ())
Шаг 3 # Открыть новый отложенный ордер по цене #1
Пожалуйста, помогите мне в шаге#3.

большое спасибо... с наилучшими пожеланиями

Да, конечно, я помогу.

Вы только скажите: Вы поняли, как работает код в ? Понимаете ли вы, как поймать закрытие сделки?

How to start with MQL5
How to start with MQL5
  • 2020.06.24
  • www.mql5.com
This thread discusses MQL5 code examples. There will be examples of how to get data from indicators, how to program advisors...
 

Добрый день, Владимир.

Код #54 дает нам информацию о сделке, которая была закрыта.

Но m_deal.Price () == цена закрытия сделки
Где я могу найти цену открытия сделки?
С уважением, Владимир.

 
Ahmadahmad654 :

Добрый день, Владимир.

Код #54 дает нам информацию о транзакции, которая была закрыта

Но m_deal.Price () == цена закрытия сделки
Где я могу найти цену открытия сделки?
С уважением, Владимир.

При срабатывании отложенного ордера появляется сделка типа 'DEAL_ENTRY_IN'.

Мы немного изменим процедуру OnTradeTransaction, теперь мы можем ловить две сделки: вход в рынок (DEAL_ENTRY_IN) и выход из рынка (DEAL_ENTRY_OUT).

//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal))
         m_deal.Ticket(trans.deal);
      else
         return;
      if(m_deal.Symbol()==m_symbol.Name() && m_deal.Magic()==InpMagic)
        {
         if(m_deal.DealType()==DEAL_TYPE_BUY || m_deal.DealType()==DEAL_TYPE_SELL)
           {
            if(m_deal.Entry()==DEAL_ENTRY_IN)
              {
               string entry="in";
               Print(m_deal.Time()," | ",m_deal.Symbol()," | ",entry," | ",m_deal.Price());
              }
            if(m_deal.Entry()==DEAL_ENTRY_OUT)
              {
               string entry="out";
               Print(m_deal.Time()," | ",m_deal.Symbol()," | ",entry," | ",m_deal.Price());
              }
           }
        }
     }
  }
 
Большое спасибо за помощь
 
Ahmadahmad654 :
Большое спасибо за помощь.

Это только один способ - ловить онлайн сделки.

А есть хотя бы способ работы с историей торговли. Можно определить, что привело к сделке "OUT" - срабатывание Stop Loss или Take Profit ...

Но на данном этапе, я думаю, вам просто нужно использовать идею из 58

How to start with MQL5
How to start with MQL5
  • 2020.06.24
  • www.mql5.com
This thread discusses MQL5 code examples. There will be examples of how to get data from indicators, how to program advisors...