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

main.mqh

Похожие материалы по тегам

the gold reaper v4.1 mt5.mq4MQL4 / MetaTrader 4 · 1 общих теговquantum queen x 4.3 (1).mq5MQL5 / MetaTrader 5 · 1 общих теговlizard_1.85.mq4MQL4 / MetaTrader 4 · 1 общих теговoverlaychart.mq4MQL4 / MetaTrader 4 · 1 общих теговmarket crusher ea guidlines.txtMQL · 1 общих теговrobot_wti ea.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Файл main.mqh представляет собой библиотеку для MetaTrader 4, содержащий класс CMain — центральный контроллер управления торговыми ордерами и символами. Класс обеспечивает отслеживание открытых и отложенных ордеров, контроль их количества по символам и механизм блокировки позиций. Внутренняя логика опирается на сеточные параметры и дельту для формирования отложенных ордеров.

Библиотека предоставляет методы для создания, контроля и закрытия ордеров, а также для обработки входящих торговых сигналов. Поддерживается работа с несколькими символами, каждый из которых отслеживается в отдельном реестре. Механизм блокировки позволяет привязывать ордера к внутренним записям и управлять их состоянием.

В коде предусмотрены условные ветви для MQL5 (RememberPosition, RememberOrder) и MQL4 (Remember), что обеспечивает адаптацию к платформе. Конструктор инициализирует структуры данных, деструктор освобождает ресурсы блокировки. Количество классов — 1, методов — 15, конструкторов и деструкторов — по одному.

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

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

Классы
Класс class CMain

Основной класс библиотеки, обеспечивающий управление ордерами, символами и механизмом блокировки.

Методы и конструкторы
Конструктор · CMain CMain()

Конструктор класса CMain. Инициализирует массивы ордеров и символов, создаёт объект блокировки CLock.

Деструктор · CMain ~CMain()

Деструктор класса CMain. Освобождает ранее созданный объект блокировки.

Метод · CMain void LockBind()

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

Метод · CMain void Control(CSignal &sgnl)

Запускает последовательный контроль ордеров и, при разрешении, обработку входящих сигналов.

Метод · CMain void OrdersControl()

Контролирует состояние всех управляемых ордеров, обрабатывает завершённые не-сеточные ордера и обновляет реестр символов.

Метод · CMain void SignalsControl(CSignal &sgnl)

Обрабатывает входящие сигналы: добавляет новые символы и создаёт ордера на их основе, затем очищает сигналы.

Метод · CMain bool CheckOrder(CThisTrade &ord,_tTicket mTicket)

Проверяет ордер на допустимость: сопоставляет количество ордеров по символу с максимальным лимитом и контроль отложенных ордеров.

Метод · CMain int QuantSymbol(CThisTrade &ord)

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

Метод · CMain bool IsPendingOrdersControl(CThisTrade &ord)

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

Метод · CMain bool IsOneSymbol(string smb)

Проверяет, существует ли единственный нетиповой ордер для заданного символа.

Метод · CMain bool NewSymbol(string smb)

Добавляет новый символ в отслеживаемый список, если он ещё не содержится и не превышен лимит символов.

Метод · CMain bool CloseAll()

Закрывает все управляемые ордера через механизм блокировки и обновляет реестр символов.

Метод · CMain bool IsEmpty()

Возвращает true, если нет управляемых ордеров и объект блокировки пуст.

Метод · CMain SSignal DoSignal(CThisTrade &mOrder)

Формирует сигнал для создания отложенного ордера (BuyLimit или SellLimit) на основе текущей цены ордера и сеточного дельта.

Метод · CMain void RememberPosition()

Запоминает позицию по её комментарию, передавая управление в объект блокировки (MQL5).

Метод · CMain void RememberOrder()

Запоминает новый ордер, добавляя его в массив управляемых ордеров (MQL5).

Метод · CMain void Remember()

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

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

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

#include "Header.mqh"

#ifndef _MAIN_
#define _MAIN_

class CMain{
public:
   CLock            *lock;
   CThisTrade        order[];
   string            symbol[];
   int               ord_quant;
   int               smb_quant;
                     CMain();
                    ~CMain();
   void              LockBind();
   void              Control(CSignal &sgnl);
   void              OrdersControl();
   void              SignalsControl(CSignal &sgnl);
   void              NewOrder(SSignal &sgnl,_tTicket mTicket=(_tTicket)-1,int mGridStep=0);
   bool              CheckOrder(CThisTrade &ord,_tTicket mTicket);
   int               QuantSymbol(CThisTrade &ord);
   bool              IsPendingOrdersControl(CThisTrade &ord);
   bool              IsOneSymbol(string smb);
   bool              NewSymbol(string smb);
   bool              CloseAll();
   bool              IsEmpty()   {return !ord_quant&&lock.IsEmpty();}
   SSignal           DoSignal(CThisTrade &mOrder);
#ifdef __MQL5__
   void              RememberPosition();
   void              RememberOrder();
#else
   void              Remember();
#endif
  };

CMain::CMain(){
   ord_quant=ArrayResize(order,0);
   smb_quant=ArrayResize(symbol,0);
   lock=new CLock;}

CMain::~CMain(){
   delete lock;}

#ifdef __MQL5__
   void CMain::RememberPosition(void){
      if (StringFind(PositionGetString(POSITION_COMMENT),_LOCK)==0) {lock.RememberPosition(); return;}
      int i=ord_quant;
      ArrayResize(order,++ord_quant);
      order[i].RememberPosition(true);
   }

   void CMain::RememberOrder(void){
      int i=ord_quant;
      ArrayResize(order,++ord_quant);
      order[i].RememberOrder(true);
   }
#else
void CMain::Remember(void){
   if (StringFind(OrderComment(),_LOCK)==0) {lock.Remember(); return;}
   int i=ord_quant;
   ArrayResize(order,++ord_quant);
   order[i].Remember(true);}
#endif

void CMain::LockBind(void){
   for (int i=0;i<ord_quant;i++){
      if (order[i].Type()<2) lock.ControlBind(order[i]);
      for (int ii=0;ii<lock.ord_quant;ii++){
         if (!lock.order[ii].CtrlTicket()==0) continue;
         if (order[i].Ticket()==lock.order[ii].CtrlTicket()) order[i].Locked(true);}}}

void CMain::Control(CSignal &sgnl){
   OrdersControl();
   if (gIsOpenAlloed) SignalsControl(sgnl);}

void CMain::OrdersControl(void){
   for (int i=0;i<ord_quant;i++){
      bool isWasOpen=order[i].IsOpen();
      order[i].Control();
      if (gIsOpenAlloed
         &&gIsGrid
         &&order[i].GridStep()<gGridMaxStep
         &&!isWasOpen
         &&order[i].IsOpen()) NewOrder(DoSignal(order[i]),order[i].Ticket(),order[i].GridStep());
      if (order[i].IsFinish()&&!order[i].IsG

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

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

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

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

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

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

Стоимость полного кода
423,30₽ ≈ $5.17