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

multirobotgagarin_1.3.1.9.555.mqh

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

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

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

О программе

Программа представляет собой MQL4-приложение для MetaTrader 4, управляющее автоматическими торговыми сессиями. Она обеспечивает контроль времени торговли, позволяя совершать сделки только в заданные временные окна, а также механизмы защиты капитала: стоп по прибыли и убытку, трейлинг по капиталу с настраиваемыми параметрами в валюте или процентах.

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

Приложение интегрируется с внешним DLL-модулем для управления торговыми сигналами и поддерживает фильтрацию по спискам сигналов и тикеров. Торговые операции, включая закрытие позиций, выполняются через объект управления торговлей. При инициализации проводится валидация входных параметров: формат времени, префиксы и суффиксы символов, уровни триггеров.

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

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

#property version   "1.319"
#property strict

#include "MainFunc.mqh"

/*
struct STradeSignal {
	long id;
	datetime time;
	int signal;
	char symbol[32-sizeof(long)-sizeof(datetime)-sizeof(int)];
	STradeSignal(){ZeroMemory(this);}
};

#import "DBSignalsConnector.dll"
   uint RunConnect(int, char& host[], char& user[], char& pw[], char& db[]);
	uint MakeSignals(uint work, STradeSignal& buff[], uint size);
	void Disconnect(uint work);
#import

#include "Header.mqh"

int OnInit(){
      // код доступен только после оплаты
   }

void OnDeinit(const int reason){
   DLOG(__FUNCTION__);
   switch(reason){
      case REASON_PARAMETERS: Start(true);
                              delete gTimeControl;
                              break;
      case REASON_PROGRAM:    
      case REASON_REMOVE:
      case REASON_RECOMPILE:
      case REASON_CHARTCLOSE:
      case REASON_ACCOUNT:
      case REASON_INITFAILED: 
      case REASON_CLOSE:      gTrade.Disconnect();
                              delete gTimeControl;
                              delete gDayEquity;
      case REASON_TEMPLATE:
      case REASON_CHARTCHANGE: break;}
   EventKillTimer();
   delete button;}

void OnTimer(){
   TimeControl();
   EquityControl();
   TradeControl();
}

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam){
   if (id==CHARTEVENT_OBJECT_CLICK)
      if (sparam==_CLOSE_BUTTON){
         if (!is_day_ban) Comment(_BUTTON_STOP);
         is_day_ban=true;
         gIsManualStop=true;
         gTrade.CloseAll();
         delete button;
         button=new CButton(_START_BUTTON);}
      else if (sparam==_START_BUTTON){
         if (!gIsTradeAlloed) {button.SetPress(false); return;}
         if (gIsEquityUpBan&&
             MessageBox("Last trade is finished by profit equity stop\nDo you want to start new trading session?",NULL,MB_YESNO)==IDNO) return;
         if (gIsEquityDownBan&&
             MessageBox("Last trade is finished by loss equity stop\nDo you want to start new trading session?",NULL,MB_YESNO)==IDNO) return;
         if (gIsEquityTralStop&&
             MessageBox("Last trade is finished by equity traling stop\nDo you want to start new trading session?",NULL,MB_YESNO)==IDNO) return;
         is_day_ban=gIsEquityUpBan=gIsEquityDownBan=gIsEquityTralStop=false;
         gEquity=AccountEquity();
         gIsManualStop=false;
         ++gRestartCount;
         delete button;
         button=new CButton(_CLOSE_BUTTON);
         Comment(_ALLOWED_TEXT);}}

ENUM_INIT_RETCODE Start(bool is_new_param=false){
   ENUM_INIT_RETCODE res;
   static bool is_start=true,
               is_param=false;
   if(is_new_param){
      is_param=true;
      return(INIT_SUCCEEDED);}
   if(!is_start&&!is_param) return(INIT_SUCCEEDED);
   res=CheckParam();
   if (is_param) {is_param=false; return(res);}
   if (res==INIT_SUCCEEDED){
      ResetDay();
      Comment(_ALLOWED_TEXT);
      gTrade.FindOrders();
      is_start=false;}
   return(res);}

ENUM_INIT_RETCODE CheckParam(){
   ENUM_INIT_RETCODE res=INIT_SUCCEEDED;
   gTimeControl=is_time_work?new CTradeTimeControl(time_start,time_end,time_close):new CTradeTimeControl();
   DayEquitySet();
   if (is_main_be&&main_be_trigger<=0)                                        {Alert("Неверный уровень включения безубытка основного ордера, должен быть больше 0"); res=INIT_PARAMETERS_INCORRECT;}
   if (is_lock&&is_lock_be&&lock_be_trigger<=0)                               {Alert("Неверный уровень включения безубытка локирующей позиции, должен быть больше 0"); res=INIT_PARAMETERS_INCORRECT;}
   if (is_main_tral&&main_tral<=0)                                            {Alert("Неверный уровень трала основного ордера, должен быть больше 0"); res=INIT_PARAMETERS_INCORRECT;}
   if (is_lock&&is_lock_tral&&lock_tral<=0)                                   {Alert("Неверный уровень трала локирующей позиции, должен быть больше 0"); res=INIT_PARAMETERS_INCORRECT;}
   if (prefix!=""&&StringFind(_Symbol,prefix)!=0)                             {Alert("Неверный префикс символа"); res=INIT_PARAMETERS_INCORRECT;}
   if (suffix!=""&&StringSubstr(_Symbol,StringFind(_Symbol,suffix))!=suffix)  {Alert("Неверный суффикс символа"); res=INIT_PARAMETERS_INCORRECT;}
   if (!gTimeControl.IsTrueFormat())                                           {Alert("Неверный формат времени");res=INIT_PARAMETERS_INCORRECT;}
   return(res);}

void DayEquitySet(){
   if (eDayEquityTralType==PROFIT_TYPE_NONE) delete gDayEquity;
   else if (!CheckPointer(gDayEquity)) gDayEquity=new CEquityControl(eDayEquityTralType==PROFIT_TYPE_CURRENCY?TRAL_TYPE_CURRENCY:TRAL_TYPE_PERCENT);
   else gDayEquity.SetNewParam(eDayEquityTralType==PROFIT_TYPE_CURRENCY?TRAL_TYPE_CURRENCY:TRAL_TYPE_PERCENT);}

void TimeControl(){
   bool isNewDay;
   gTimeControl.Control(gIsOpenAlloed,gIsTradeAlloed,isNewDay);
  

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

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

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

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

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

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

Стоимость полного кода
812,90₽ ≈ $9.94