← К каталогу
Исходный код · ID 2356

cordersend.mqh

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

COrderSend — это MQL5-библиотека (include-файл), предоставляющая набор классов для программной отправки и управления торговыми ордерами в MetaTrader 5. Библиотека содержит два класса: синхронный COrderSend и асинхронный COrderSendAsync, каждый из которых реализует аналогичный набор методов для работы с торговым сервером.

Основные возможности включают отправку рыночных ордеров (MarketOrder), отложенных ордеров типов Limit, Stop и StopLimit, а также модификацию ордеров, изменение стоп-лосса и тейк-профита, удаление отложенных ордеров. Для каждого действия предусмотрены синхронные и асинхронные варианты вызова.

Внутри классов используются стандартные структуры MQL5 (MqlTradeRequest, MqlTradeResult) и торговые функции OrderSend / OrderSendAsync. Доступ к результатам операций осуществляется через вспомогательные методы получения кода возврата и тикета ордера. Библиотека не содержит пользовательских настроек и не требует параметров конфигурации.

Состав библиотеки

Классов: 2 · методов: 18 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 0

Классы
Класс class COrderSend

Класс для отправки торговых ордеров в MetaTrader 5 через синхронные вызовы OrderSend.

Класс class COrderSendAsync

Класс для отправки торговых ордеров в MetaTrader 5 через асинхронные вызовы OrderSendAsync.

Методы и конструкторы
Метод · COrderSend bool MarketOrder(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const string comment,const int magic)

Отправка рыночного ордера (BUY/SELL) на указанный инструмент с заданным объёмом, комментарием и magic-номером.

Метод · COrderSend bool PendingOrderLimit(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double sl,const double tp, const string comment,const int magic)

Отправка отложенного ордера типа Limit (Buy/Sell Limit) с ценой открытия, стоп-лоссом, тейком-профитом и параметрами.

Метод · COrderSend bool PendingOrderStop(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double sl,const double tp, const string comment,const int magic)

Отправка отложенного ордера типа Stop (Buy/Sell Stop) с ценой срабатывания, стоп-лоссом и тейком-профитом.

Метод · COrderSend bool PendingOrderStopLimit(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double stoplimit, const double sl,const double tp,const string comment,const int magic)

Отправка отложенного ордера типа StopLimit (Buy/Sell Stop Limit) с ценой, stoplimit, стоп-лоссом и тейком-профитом.

Метод · COrderSend bool ModifyOrder(ulong order_ticket,const double price,const double stoplimit,const double sl,const double tp,const string comment,const int magic)

Модификация существующего ордера по его тикету: изменение цены, stoplimit, стоп-лосса и тейка-профита.

Метод · COrderSend bool ModifySLTP(const string symbol,const double sl,const double tp,const string comment,const int magic)

Модификация стоп-лосса и тейк-профита у открытой позиции на указанном инструменте.

Метод · COrderSend bool RemoveOrder(const string symbol,ulong order_ticket,const string comment,const int magic)

Удаление отложенного ордера по его тикету на указанном инструменте.

Метод · COrderSend bool CheckPriceRange(const string a_symbol, const double price)

Проверка, находится ли указанная цена в допустимом диапазоне цены инструмента (в пределах сессионных лимитов).

Метод · COrderSend uint AccessRetcode()

Возврат кода результата последней торговой операции из структуры результата.

Метод · COrderSend ulong AccessOrderTicket()

Возврат тикета последнего отправленного ордера из структуры результата.

Метод · COrderSendAsync bool MarketOrderAsync(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const string comment,const int magic)

Асинхронная отправка рыночного ордера (BUY/SELL) на указанный инструмент с заданным объёмом, комментарием и magic-номером.

Метод · COrderSendAsync bool PendingOrderLimitAsync(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double sl,const double tp, const string comment,const int magic)

Асинхронная отправка отложенного ордера типа Limit с ценой, стоп-лоссом, тейком-профитом и параметрами.

Метод · COrderSendAsync bool PendingOrderStopAsync(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double sl,const double tp, const string comment,const int magic)

Асинхронная отправка отложенного ордера типа Stop с ценой срабатывания, стоп-лоссом и тейком-профитом.

Метод · COrderSendAsync bool PendingOrderStopLimitAsync(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double stoplimit, const double sl,const double tp,const string comment,const int magic)

Асинхронная отправка отложенного ордера типа StopLimit с ценой, stoplimit, стоп-лоссом и тейком-профитом.

Метод · COrderSendAsync bool ModifyOrderAsync(ulong order_ticket,const double price,const double stoplimit,const double sl,const double tp,const string comment,const int magic)

Асинхронная модификация существующего ордера по тикету: изменение цены, stoplimit, стоп-лосса и тейка-профита.

Метод · COrderSendAsync bool ModifySLTPAsync(const string symbol,const double sl,const double tp,const string comment,const int magic)

Асинхронная модификация стоп-лосса и тейк-профита у позиции на указанном инструменте.

Метод · COrderSendAsync bool RemoveOrderAsync(const string symbol,ulong order_ticket,const string comment,const int magic)

Асинхронное удаление отложенного ордера по его тикету на указанном инструменте.

Метод · COrderSendAsync uint AccessRetcode()

Возврат кода результата последней асинхронной торговой операции из структуры результата.

Получить полный код

Поиск по коду файла

??//+------------------------------------------------------------------+

//|                                                       COrderSend |

//|       ;0AA >1@01>B:8 >@45@>2                                    |

//+------------------------------------------------------------------+



#property copyright   "Copyright 2017"

#property link        ""

#property strict





//+------------------------------------------------------------------+

//| All possible function dOrderSend()                                                                 

//+------------------------------------------------------------------+



class COrderSend

  {

private:

   MqlTradeRequest      m_request;              // AB@C:BC@0 70?@>A0 =0 18@6C

   MqlTradeCheckResult  m_check_result;         // AB@C:BC@0 >B25B0 =0 ?@>25@:C

//   MqlTradeResult    m_result;

   void                 ClearStructures(void); 

public:

   MqlTradeResult       m_result;

   

 //  const ENUM_ORDER_TYPE order_type;          // >B25B =0 B@0=70:F8N

 

   //1.@K=>G=K9 >@45@ =0 ?>:C?:C 8;8 ?@>406C A 2KAB02;5=85< 70O2:8 =0 ?;0=:C

   bool MarketOrder(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const string comment="",const int magic=0);

   

   //2.B>@3>2K9 ?@8:07 =0 CAB0=>2:C >B;>65==>3> >@45@0 (;8<8B:0)

   bool PendingOrderLimit(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double sl=0.0,const double tp=0.0,

                          const string comment="",const int magic=0);

   //3.CAB0=>2:0 >B;>65==>3> AB>? >@45@0 (AB>? ?> @K=:C A 2KAB02;5=85< 70O2:8 =0 ?;0=:C ?@8 A@010BK20=88)

   bool PendingOrderStop(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double sl=0.0,const double tp=0.0,

                             const string comment="",const int magic=0);

   //4.> 4>AB865=88 F5=K >@45@0 2KAB02;O5BAO >B;>65==K9 >@45@ Buy/Sell Limit ?> F5=5 StopLimit

   bool PendingOrderStopLimit(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double stoplimit, 

                              const double sl=0.0,const double tp=0.0,const string comment="",const int magic=0);  

   //5.87<5=8BL >B;>65==K9 >@45@

   bool ModifyOrder (ulong order_ticket,const double price,const double stoplimit,const double sl=0.0,const double tp=0.0,const string comment="",const int magic=0);                        

   

   //6.87<5=8BL C >B:@KB>9 ?>7K AB>? 8 ?@>D8B

   bool ModifySLTP (const string symbol,const double sl,const double tp,const string comment="",const int magic=0);  

   

   //7.C40;5=85 >B;>65==>3> >@45@0

   bool RemoveOrder (const string symbol,ulong order_ticket,const string comment="",const int magic=0);

   

   //8.?@>25@:0 =0 <0:A8<0;L=CN-<8=8<0;L=CN F5=C

   bool CheckPriceRange(const string a_symbol, const double price);

   

   uint AccessRetcode() {return m_result.retcode;}

   ulong AccessOrderTicket() {return  m_result.order;}

};



//-----------------------------------------------------------------------------------------------------------

class COrderSendAsync

  {

private:

   MqlTradeRequest   m_request;              // AB@C:BC@0 70?@>A0 =0 18@6C

   MqlTradeResult    m_result;

   void              ClearStructures(void); 

public:



 //  const ENUM_ORDER_TYPE order_type;          // >B25B =0 B@0=70:F8N

 

   //1.@K=>G=K9 >@45@ =0 ?>:C?:C 8;8 ?@>406C A 2KAB02;5=85< 70O2:8 =0 ?;0=:C

   bool MarketOrderAsync(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const string comment="",const int magic=0);

   

   //2.B>@3>2K9 ?@8:07 =0 CAB0=>2:C >B;>65==>3> >@45@0 (;8<8B:0)

   bool PendingOrderLimitAsync(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double sl=0.0,const double tp=0.0,

                          const string comment="",const int magic=0);

   //3.CAB0=>2:0 >B;>65==>3> AB>? >@45@0 (AB>? ?> @K=:C A 2KAB02;5=85< 70O2:8 =0 ?;0=:C ?@8 A@010BK20=88)

   bool PendingOrderStopAsync(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double sl=0.0,const double tp=0.0,

                             const string comment="",const int magic=0);

   //4.> 4>AB865=88 F5=K >@45@0 2KAB02;O5BAO >B;>65==K9 >@45@ Buy/Sell Limit ?> F5=5 StopLimit

   bool PendingOrderStopLimitAsync(const string symbol,const int volume,const ENUM_ORDER_TYPE order_type,const double price,const double stoplimit, 

                              const double sl=0.0,const double tp=0.0,const string comment="",const int magic=0);  

   //5.87<5=8BL >B;>65==K9 >@45@

   bool ModifyOrderAsync (ulong order_ticket,const double price,const double stoplimit,const double sl=0.0,const double tp=0.0,const string comment="",const int magic=0);                        

   

   //6.87<5=8BL C >B:@KB>9 ?>7K AB>? 8 ?@>D8B

   bool ModifySLTPAsync (const string symbol,const double sl,const double tp,const string comment="",const int magic=0);  

   

   //7.C40;5=85 >B;>65==>3> >@45@0

   bool RemoveOrderAsync (const string symbol,ulong order_ticket,const string comment="",const int magic=0);

   

   uint AccessRetcode() {return m_result.retcode;}

};



//------------------------------------------

void COrderSend::ClearStructures()

  {

   ZeroMemory(m_request);

   ZeroMemory(m_result);

  }

  

void COrderSendAsync::ClearStructures()

  {

   ZeroMemory(m_request);

   ZeroMemory(m_result);

  }

//------------------------------------------



  

//+------------------------------------------------------------------+

//                 " +"  "                              |

//+------------------------------------------------------------------+

bool COrderSend::MarketOrder(const string symbol,

                             const int    volume,

                             const ENUM_ORDER_TYPE order_type,

                             const string comment, 

                             const int    magic=0)

  {

   if (IsStopped())return(false);

   ClearStructures();

   if(order_type!=ORDER_TYPE_BUY && order_type!=ORDER_TYPE_SELL)   // B8? >@45@0 4>;65= 1KBL "?>:C?:0 ?> @K=>G=>9 F5=5""

     {

      m_result.retcode = TRADE_RETCODE_INVALID;                    // 70?8AK205< 40==K5 2 >1J5:B m_result, :>B. O2;-AO AB@C:BC@>9

      m_result.comment= "Invalid order type";

      return(false);

     }

   m_request.action      = TRADE_ACTION_DEAL;

   m_request.symbol      = symbol;

   m_request.volume      = volume;

   m_request.type        = order_type;

   m_request.type_filling= ORDER_FILLING_RETURN;

   m_request.comment     = comment;

   m_request.magic       = magic;

      string OrderTypeString;

   if (m_request.type == ORDER_TYPE_BUY)

      OrderTypeString = "Buy";

      else OrderTypeString = "Sell"; 

   Print(">B?@02:0 B@0=70:F88 ?> @K=:C ", OrderTypeString, " ", volume, " ", symbol);

   if (OrderCheck(m_request,m_check_result))

   {

      bool OK = OrderSend(m_request,m_result);

   }

   uint answer = m_result.retcode;

   return(true);

  }



//+------------------------------------------------------------------+

//                 #!" "+%                           |

//+------------------------------------------------------------------+  

bool COrderSend::PendingOrderLimit(const string symbol,

                                   const int    volume,

                                   const ENUM_ORDER_TYPE order_type,

                                   const double price,

                                   const double sl,

                                   const double tp,

                                   const string comment,

                                   const int    magic=0)

   {

   if (IsStopped())return(false);

   ClearStructures();

   if(order_type!= ORDER_TYPE_BUY_LIMIT && order_type!= ORDER_TYPE_SELL_LIMIT)   //B8? >@45@0 4>;65= 1KBL ">B;>65==K9 >@45@ Buy/Sell Limit"

      {

      m_result.retcode = TRADE_RETCODE_INVALID;                 //70?8AK205< 40==K5 2 >1J5:B m_result, :>B. O2;-AO AB@C:BC@>9

      m_result.comment= "Invalid order type";

      return(false);

      }

   m_request.action      = TRADE_ACTION_PENDING;

   m_request.symbol      = symbol;

   m_request.volume      = volume;

   m_request.price       = price;

   m_request.stoplimit   = 0;

   m_request.sl          = sl;

   m_request.tp          = tp;

   m_request.type        = order_type;

   m_request.type_filling= ORDER_FILLING_RETURN;

   m_request.type_time   = ORDER_TIME_DAY;

   m_request.comment     = comment;

   m_request.magic       = magic;

   string OrderTypeString;

   if (m_request.type == ORDER_TYPE_BUY_LIMIT)

      OrderTypeString = "Buy";

      else OrderTypeString = "Sell"; 

   //Print("#AB0=>2:0 ;8<8B=>9 70O2:8 : ", OrderTypeString, " | ", volume, " | ", symbol, " | ",price);

   bool OK = OrderSend(m_request,m_result);

   return(true);

   }



//+------------------------------------------------------------------+

//                 #!" !"+%                           |

//+------------------------------------------------------------------+   

bool COrderSend::PendingOrderStop(const string symbol,

                                  const int    volume,

                                  const ENUM_ORDER_TYPE order_type,

                                  const double price,

                                  const double sl,

                                  const double tp,

                                  const string comment,

               

Показано первые 50% кода (символов: 32608)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
3 260,80₽ ≈ $39.85