class CMain
Основной класс библиотеки, обеспечивающий управление ордерами, символами и механизмом блокировки.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «main.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Файл main.mqh представляет собой библиотеку для MetaTrader 4, содержащий класс CMain — центральный контроллер управления торговыми ордерами и символами. Класс обеспечивает отслеживание открытых и отложенных ордеров, контроль их количества по символам и механизм блокировки позиций. Внутренняя логика опирается на сеточные параметры и дельту для формирования отложенных ордеров.
Библиотека предоставляет методы для создания, контроля и закрытия ордеров, а также для обработки входящих торговых сигналов. Поддерживается работа с несколькими символами, каждый из которых отслеживается в отдельном реестре. Механизм блокировки позволяет привязывать ордера к внутренним записям и управлять их состоянием.
В коде предусмотрены условные ветви для MQL5 (RememberPosition, RememberOrder) и MQL4 (Remember), что обеспечивает адаптацию к платформе. Конструктор инициализирует структуры данных, деструктор освобождает ресурсы блокировки. Количество классов — 1, методов — 15, конструкторов и деструкторов — по одному.
Классов: 1 · методов: 15 · конструкторов: 1 · деструкторов: 1 · отдельных функций: 0
class CMain
Основной класс библиотеки, обеспечивающий управление ордерами, символами и механизмом блокировки.
CMain()
Конструктор класса CMain. Инициализирует массивы ордеров и символов, создаёт объект блокировки CLock.
~CMain()
Деструктор класса CMain. Освобождает ранее созданный объект блокировки.
void LockBind()
Привязывает и блокирует ордера по их тикетам, сопоставляя с внутренним реестром блокировки.
void Control(CSignal &sgnl)
Запускает последовательный контроль ордеров и, при разрешении, обработку входящих сигналов.
void OrdersControl()
Контролирует состояние всех управляемых ордеров, обрабатывает завершённые не-сеточные ордера и обновляет реестр символов.
void SignalsControl(CSignal &sgnl)
Обрабатывает входящие сигналы: добавляет новые символы и создаёт ордера на их основе, затем очищает сигналы.
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()
Возвращает true, если нет управляемых ордеров и объект блокировки пуст.
SSignal DoSignal(CThisTrade &mOrder)
Формирует сигнал для создания отложенного ордера (BuyLimit или SellLimit) на основе текущей цены ордера и сеточного дельта.
void RememberPosition()
Запоминает позицию по её комментарию, передавая управление в объект блокировки (MQL5).
void RememberOrder()
Запоминает новый ордер, добавляя его в массив управляемых ордеров (MQL5).
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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.