Подскажите ПЛИЗ как закрыть ордер на mql5?????

 

Добрый день!!! Пожалуйста подскажите на примере кода как закрыть ордер в mql5???

 К примеру у нас открыто 7 ордеров. Из них 3 на продажу.

 Как выбрать с общей массы этих 3 ордера и закрыть их?

Странно, но именно на эту тему в инете мало информации... ооочень мало...

Спасибо большое за помощь!!! 

 
Andrey Kozak:

Добрый день!!! Пожалуйста подскажите на примере кода как закрыть ордер в mql5???

 К примеру у нас открыто 7 ордеров. Из них 3 на продажу.

 Как выбрать с общей массы этих 3 ордера и закрыть их?

Странно, но именно на эту тему в инете мало информации... ооочень мало...

Спасибо большое за помощь!!! 

 Не ордер, а ПОЗИЦИЮ. Список позиций в терминале можно получить: PositionsTotal

А дальше проходите по всему списку ПОЗИЦИЙ и, в зависимости от из показателей, делаете с ними что угодно. Получение данных позиции можно посмотреть на примере PositionGetInteger:

//+------------------------------------------------------------------+ 
//| Trade function                                                   | 
//+------------------------------------------------------------------+ 
void OnTrade() 
  { 
//--- проверим наличие позиции и выведем время её изменения 
   if(PositionSelect(_Symbol)) 
     {      
//--- получим идентификатор позиции для дальнейшей работы с ней 
      ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER); 
      Print(_Symbol," postion #",position_ID); 
//--- получим время образования позиции в миллисекундах с 01.01.1970 
      long create_time_msc=PositionGetInteger(POSITION_TIME_MSC); 
      PrintFormat("Position #%d  POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID, 
                  create_time_msc,TimeToString(create_time_msc/1000)); 
//--- получим время последнего изменения позиции в секундах с 01.01.1970 
      long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE); 
      PrintFormat("Position #%d  POSITION_TIME_UPDATE = %i64 seconds => %s", 
                  position_ID,update_time_sec,TimeToString(update_time_sec)); 
//--- получим время последнего изменения позиции в миллисекундах с 01.01.1970 
      long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC); 
      PrintFormat("Position #%d  POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s", 
                  position_ID,update_time_msc,TimeToString(update_time_msc/1000)); 
     } 
//--- 
  }

 

Закрывать позицию можно с помощью класса CTrade: PositionClose.

 
Karputov Vladimir:

 Не ордер, а ПОЗИЦИЮ. Список позиций в терминале можно получить: PositionsTotal

А дальше проходите по всему списку ПОЗИЦИЙ и, в зависимости от из показателей, делаете с ними что угодно. Получение данных позиции можно посмотреть на примере PositionGetInteger:

 

Закрывать позицию можно с помощью класса CTrade: PositionClose.

А как перебрать все позиции? В mql4 было бы сто то типа:

for(int i=0;i<OrdersTotal();i++)

{

  OrderSelect(i,SELECT_BY_POS);

   

 

А в mql5 в цикле чем заменить функцию OrderSelect() ...? Или PositionSelect это оно и есть?

 
Andrey Kozak:

А как перебрать все позиции? В mql4 было бы сто то типа:

for(int i=0;i<OrdersTotal();i++)

{

  OrderSelect(i,SELECT_BY_POS);

   

 

А в mql5 в цикле чем заменить функцию OrderSelect() ...? Или PositionSelect это оно и есть?

Все позиции в MQL5 можно перебрать так:

    string symbol="";
    double volume=0;
    long   ticket=0;
    for(int i=0;i<PositionsTotal();i++)
     {
      symbol=PositionGetSymbol(i);
      volume=PositionGetDouble(POSITION_VOLUME);
      ticket=PositionGetInteger(POSITION_TICKET);
     }
 
Понял! Спасибо!
 

подскажите пожалуста а как закрыть все открытые позиции

 
alexhabba:

подскажите пожалуста а как закрыть все открытые позиции


Пример из эксперта Autotrade:

Подключение торговых классов стандартной библиотеки и объявление объектов этих торговых классов

//+------------------------------------------------------------------+
//|                           Autotrade(barabashkakvn's edition).mq5 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, народное :-)"
#property link      "scrivimi@mail.ru"
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>  
#include <Trade\OrderInfo.mqh>
CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                      // trading object
CSymbolInfo    m_symbol;                     // symbol info object
COrderInfo     m_order;                      // pending orders object


Функция реализующая закрытие всех ПОЗИЦИЙ (не ордеров, а именно позиций) 

//+------------------------------------------------------------------+
//|  Закрываем все позиции по текущему символу и с текущим Magic     |
//+------------------------------------------------------------------+
void CloseAllPositions()
  {
   Print(__FUNCTION__);
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
            m_trade.PositionClose(m_position.Ticket());
   return;
  }

ds

 

Прошу помощи! Как перебрать финансовый результат закрытых позиций?

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
Aleksey Vyazmikin:

Прошу помощи! Как перебрать финансовый результат закрытых позиций?


Позиция может состоять из более чем двух сделок. Поэтому сначала нужно на базе торговой истории восстановить позиции (скалькулировать сделки относящиеся к одной позиции), потом можно получать уже результат.

Реализовано в коде: HistoryPositionInfo version 2 (запрос истории от ... до ...):

Класс CHistoryPositionInfo предназначен для получения прибыли позиции в пунктах, комиссии, свопа и прибыли в деньгах на основании торговой истории

Там же и пример применения.

 
Aleksey Vyazmikin:

Прошу помощи! Как перебрать финансовый результат закрытых позиций?

Forum on trading, automated trading systems and testing trading strategies

History Profit in MQL5 ?

fxsaber, 2017.08.26 19:16

  1. MQL5
    double Profit( void )
    {
     double Res = 0;
    
     if (HistorySelect(0, INT_MAX))
       for (int i = HistoryDealsTotal() - 1; i >= 0; i--)
       {
         const ulong Ticket = HistoryDealGetTicket(i);
         
         if((HistoryDealGetInteger(Ticket, DEAL_MAGIC) == MagicNumber) && (HistoryDealGetString(Ticket, DEAL_SYMBOL) == Symbol()))
           Res += HistoryDealGetDouble(Ticket, DEAL_PROFIT);
       }
         
      return(Res);
    }


  2. MQL5 + MQL4
    #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
    
    double Profit( void )
    {
     double Res = 0;
    
     for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
       if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderMagicNumber() == MagicNumber) && (OrderSymbol() == Symbol()))
         Res += OrderProfit();
         
      return(Res);
    }
 
Vladimir Karputov:

Позиция может состоять из более чем двух сделок. Поэтому сначала нужно на базе торговой истории восстановить позиции (скалькулировать сделки относящиеся к одной позиции), потом можно получать уже результат.

Реализовано в коде: HistoryPositionInfo version 2 (запрос истории от ... до ...):

Класс CHistoryPositionInfo предназначен для получения прибыли позиции в пунктах, комиссии, свопа и прибыли в деньгах на основании торговой истории

Там же и пример применения.


Спасибо за ответ!

Верно, в позиции может быть много сделок, которые открыты ордерами. Мне вот надо найти к какой позиции относится ордер с определенным комментарием, и считать фин результат по сделкам с этой позиции включительно, как это можно реализовать?

Причина обращения: