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

genibot.mq4

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

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

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

О программе

Genibot — это торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Программа реализует графический панель интерфейс, отображающий ключевые торговые показатели: баланс, эквити, просадку, прибыль по стратегиям и таймфреймальные сигналы.

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

В советнике реализованы дополнительные механизмы управления рисками: стоп по эквити, закрытие по достижении целевой прибыли, трейлинг-стоп, а также механизм стабилизации с формированием «копилки» для частичного закрытия убыточных позиций. Торговля может ограничиваться по времени — открытием в определённый час понедельника и закрытием в определённый час пятницы.

Программа включает проверку лицензионного ключа, привязанного к торговому счёту, и использует внешний индикатор FTLM-STLMxAMm.ex4 для генерации торговых сигналов. Автор — Gavrilin Alexander V. (DKeN), сайт sovetnikov.net.

Настройки программы

НастройкаОписание
Panel show use (chartDisplay) Показ панели — Включает отображение графической панели на графике
Display place corner (chartDisplayPlace) Угол панели — Угол графика для размещения панели
Font Size (FontSize) Размер шрифта — Размер шрифта текста на панели
Trade Mode (SelectTrade) Режим торговли — Режим торговли: длинные, короткие или оба направления
Lots (Lots) Объём лота — Начальный объём лота для открытия позиции
MM (MM) Управление лотом — Включает автоматическое управление размером лота на основе баланса или эквити
Divider (Divider) Делитель — Делитель для расчёта объёма лота на основе баланса
Lot exponent (LotExponent) Экспонента лота — Экспонента для расчёта лота при усреднении
Max Lots (MaxLots) Максимальный лот — Максимально допустимый объём лота
Use TF by Max Orders (SelectChange_TF_Finish) Таймфрейм по максимуму ордеров — Таймфрейм для генерации сигнала при достижении максимального количества ордеров
Max Orders (Change_TF_max_order) Максимальное количество ордеров — Пороговое количество ордеров для переключения таймфрейма сигнала
Continue trading (ContinueTrading) Продолжение торговли — Разрешает продолжение торговли при наличии убытка в пределах заданной просадки
Use reverse (BackOrder) Обратный ордер — Включает использование обратных ордеров
Reverse Lot exponent (BackOrder_Exponent) Экспонента обратного лота — Экспонента для расчёта лота обратного ордера
Stabilization (Stabilization) Стабилизация — Включает механизм стабилизации с формированием копилки для частичного закрытия убыточных позиций
Drawdown for stabilization (Stabilization_DD) Просадка для стабилизации — Уровень просадки для активации стабилизации
Profit % for stabilization (Stabilization_Procent) Процент прибыли для стабилизации — Процент прибыли для начисления в копилку при стабилизации
TF norma (SelectOpenOrdersNorm_TF) Нормальный таймфрейм — Нормальный таймфрейм для проверки открытых ордеров
Drawdown1 (Drawdoun) Просадка 1 — Первый уровень просадки для управления торговлей
TF1 (SelectOpenOrdersDrawdount11_TF) Таймфрейм просадки 1 — Таймфрейм для проверки первого уровня просадки
Drawdown2 (Drawdoun2) Просадка 2 — Второй уровень просадки для управления торговлей
TF2 (SelectOpenOrdersDrawdount12_TF) Таймфрейм просадки 2 — Таймфрейм для проверки второго уровня просадки
Take profit (TakeProfit) Тейк-профит — Общий тейк-профит для закрытия позиции по сетке
Use close by profit (ProfitClose) Закрытие по прибыли — Включает автоматическое закрытие всех ордеров при достижении целевой прибыли
Minimal count orders (ProfitCloseMaxOrder) Минимум ордеров для закрытия — Минимальное количество ордеров для активации закрытия по прибыли
Profit in valute (ProfitCloseStrategyDollar) Целевая прибыль в долларах — Целевая прибыль в долларах для автоматического закрытия
Use equity stop (UseEquityStop) Стоп по эквити — Включает стоп-торговлю по эквити при достижении заданного уровня риска
Total equity risk (TotalEquityRisk) Риск эквити — Допустимый процент риска эквити для стопа по эквити
Use open monday (OpenMondey) Открытие в понедельник — Включает открытие торговли в понедельник
Hour (OpenMondeyHour) Час открытия в понедельник — Час открытия торговли в понедельник
Use close friday (CloseFriday) Закрытие в пятницу — Включает автоматическое закрытие всех ордеров в пятницу
Hour (CloseFridayHour) Час закрытия в пятницу — Час автоматического закрытия ордеров в пятницу
Continue trading (ContinueTrading_System1) Продолжение торговли (Стратегия 1) — Разрешает продолжение торговли для первой стратегии
TF (SelectSystem1_TF) Таймфрейм (Стратегия 1) — Таймфрейм для первой торговой стратегии
Max Orders (MaxTrades_Hilo) Максимум ордеров (Стратегия 1) — Максимальное количество ордеров для первой стратегии
Use trailing stop (UseTrailingStop_Hilo) Трейлинг-стоп (Стратегия 1) — Включает трейлинг-стоп для первой стратегии
Trailing start (TrailStart_Hilo) Начало трейлинга (Стратегия 1) — Начальное отклонение для трейлинг-стопа первой стратегии
Trailing stop (TrailStop_Hilo) Трейлинг-стоп (Стратегия 1) — Уровень трейлинг-стопа для первой стратегии
Pip step (PipStep_Hilo) Шаг пипов (Стратегия 1) — Шаг пипов для усреднения первой стратегии
Pip step multiplier (PipStepX_Hilo) Множитель шага пипов (Стратегия 1) — Множитель шага пипов для первой стратегии
Magic (MagicNumber_1) Магический номер (Стратегия 1) — Магический номер для ордеров первой стратегии
Continue trading (ContinueTrading_System2) Продолжение торговли (Стратегия 2) — Разрешает продолжение торговли для второй стратегии
TF (SelectSystem2_TF) Таймфрейм (Стратегия 2) — Таймфрейм для второй торговой стратегии
Max Orders Orders (MaxTrades_15) Максимум ордеров (Стратегия 2) — Максимальное количество ордеров для второй стратегии
Use Trailing stop (UseTrailingStop_15) Трейлинг-стоп (Стратегия 2) — Включает трейлинг-стоп для второй стратегии
Trailing start (TrailStart_15) Начало трейлинга (Стратегия 2) — Начальное отклонение для трейлинг-стопа второй стратегии
Trailing stop (TrailStop_15) Трейлинг-стоп (Стратегия 2) — Уровень трейлинг-стопа для второй стратегии
Pip step (PipStep_15) Шаг пипов (Стратегия 2) — Шаг пипов для усреднения второй стратегии
Pip step multiplier (PipStepX_15) Множитель шага пипов (Стратегия 2) — Множитель шага пипов для второй стратегии
Magic (MagicNumber_2) Магический номер (Стратегия 2) — Магический номер для ордеров второй стратегии
Continue trading (ContinueTrading_System3) Продолжение торговли (Стратегия 3) — Разрешает продолжение торговли для третьей стратегии
TF (SelectSystem3_TF) Таймфрейм (Стратегия 3) — Таймфрейм для третьей торговой стратегии
Max Orders Orders (MaxTrades_16) Максимум ордеров (Стратегия 3) — Максимальное количество ордеров для третьей стратегии
Use Trailing stop (UseTrailingStop_16) Трейлинг-стоп (Стратегия 3) — Включает трейлинг-стоп для третьей стратегии
Trailing start (TrailStart_16) Начало трейлинга (Стратегия 3) — Начальное отклонение для трейлинг-стопа третьей стратегии
Trailing stop (TrailStop_16) Трейлинг-стоп (Стратегия 3) — Уровень трейлинг-стопа для третьей стратегии
Pip step (PipStep_16) Шаг пипов (Стратегия 3) — Шаг пипов для усреднения третьей стратегии
Pip step multiplier (PipStepX_16) Множитель шага пипов (Стратегия 3) — Множитель шага пипов для третьей стратегии
Magic (MagicNumber_3) Магический номер (Стратегия 3) — Магический номер для ордеров третьей стратегии
Получить полный код

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

#property version   "1.00"
#property strict

#define POINTS_NEW

#include <sovetnikovGUI\Orders.mqh>
#include <sovetnikovGUI\Button.mqh>
#include <sovetnikovGUI\Time.mqh>
#include <sovetnikovGUI\Bcrypt.mqh>
#include <Charts\Chart.mqh>
#include <Controls\Picture.mqh>

#define VALID_KEY "Advisor activated."
#define EMPTY_KEY "Activate the key."
#define INVALID_KEY "Invalid key."
#define EXPERIED "Key expired."

#define LICENSE_NAME "genibot_key"

#define LICENSE_OFF

#resource "\\Indicators\\FTLM-STLMxAMm.ex4"
#resource "\\Images\\genibot\\panel.bmp"
#resource "\\Images\\genibot\\logo.bmp"
#resource "\\Images\\genibot\\logo2.bmp"
#define PANEL_RESOURCE "::Images\\genibot\\panel.bmp"
#define LOGO_RESOURCE "::Images\\genibot\\logo.bmp"
#define LOGO2_RESOURCE "::Images\\genibot\\logo2.bmp"

#define LOGO2_W 909
#define LOGO2_H 550

#define LOGO_W 700
#define LOGO_H 424

#define PANEL_W 400
#define PANEL_H 376

enum ENUM_MM_TYPE
  {
   MM_TYPE_BALANCE=1, //Balance
   MM_TYPE_EQUITY=2, //Equity
  };

enum ENUM_SELECT_TRADE
  {
   SELECT_TRADE_ALL=7,//Long & Short
   SELECT_TRADE_LONG=8, //Only Long
   SELECT_TRADE_SHORT=9 //Only Short
  };

#define MAX_SYSTEMS 3

string sExpertName="Strategy";
BLOCK(1,"Main settings");//.

B chartDisplay=true; //Panel show use
input ENUM_BASE_CORNER chartDisplayPlace=CORNER_RIGHT_UPPER; //Display place corner
I FontSize=12; //Font Size

input ENUM_SELECT_TRADE SelectTrade=SELECT_TRADE_ALL; //Trade Mode
D Lots=0.01; //Lots
B MM=false; //MM
ENUM_MM_TYPE MM_Type=MM_TYPE_BALANCE;
D Divider=10; //Divider
D LotExponent=1.55; //Lot exponent
D MaxLots=100; //Max Lots

TF SelectChange_TF_Finish=PERIOD_D1; //Use TF by Max Orders
I Change_TF_max_order=10; //Max Orders

B ContinueTrading=true; //Continue trading

I BackOrder=0; //Use reverse
D BackOrder_Exponent=0.5; //Reverse Lot exponent

B Stabilization=false; //Stabilization
D Stabilization_DD=5; //Drawdown for stabilization
D Stabilization_Procent=50;  //Profit % for stabilization

TF SelectOpenOrdersNorm_TF=PERIOD_H1;//TF norma
D Drawdoun=5; //Drawdown1
TF SelectOpenOrdersDrawdount11_TF=PERIOD_H4;//TF1
D Drawdoun2=10; //Drawdown2
TF SelectOpenOrdersDrawdount12_TF=PERIOD_D1;//TF2

D TakeProfit=125; //Take profit

B ProfitClose=true;//Use close by profit
I ProfitCloseMaxOrder=10;//Minimal count orders
D ProfitCloseStrategyDollar=5.0;//Profit in valute

B UseEquityStop=false; //Use equity stop
D TotalEquityRisk=20.0; //Total equity risk

SEP(2);//.
BLOCK(2,"Time settings");//.
B OpenMondey=true; //Use open monday
I OpenMondeyHour=0; //Hour
B CloseFriday=false; //Use close friday
I CloseFridayHour=17; //Hour

SEP(3);//.
BLOCK(3,"Strategy1 settings");//.
B ContinueTrading_System1=true; //Continue trading

TF SelectSystem1_TF=PERIOD_M15; //TF

I MaxTrades_Hilo=15; //Max Orders

B UseTrailingStop_Hilo=false; //Use trailing stop
D TrailStart_Hilo=100.00000000; //Trailing start
D TrailStop_Hilo=50.00000000; //Trailing stop
D PipStep_Hilo=250; //Pip step
D PipStepX_Hilo=1; //Pip step multiplier
I MagicNumber_1=1000; //Magic

SEP(4);//.
BLOCK(4,"Strategy2 settings");//.
B ContinueTrading_System2=true; //Continue trading
TF SelectSystem2_TF=PERIOD_H1; //TF
I MaxTrades_15=15; //Max Orders Orders
B UseTrailingStop_15=false; //Use Trailing stop
D TrailStart_15=100.00000000; //Trailing start
D TrailStop_15=50.00000000;//Trailing stop
D PipStep_15=195;//Pip step
D PipStepX_15=1;//Pip step multiplier
I MagicNumber_2=2000;//Magic
SEP(5);//.
BLOCK(5,"Strategy3 settings");//.
B ContinueTrading_System3=true; //Continue trading
TF SelectSystem3_TF=PERIOD_H4; //TF
I MaxTrades_16=15; //Max Orders Orders
B UseTrailingStop_16=false; //Use Trailing stop
D TrailStart_16=100.00000000; //Trailing start
D TrailStop_16=50.00000000;//Trailing stop
D PipStep_16=150;//Pip step
D PipStepX_16=1;//Pip step multiplier
I MagicNumber_3=3000;//Magic

class CMyOrders: public COrders
  {
public:
   virtual bool      CheckMagic(long iMagic)
     {
      return (iMagic==m_imagic || iMagic==m_imagic+1);
     }

   virtual int       UpdateProfits(double &dprofits,double &dlots,int &icount,int &iback)
     {

      __COPYRIGHT__
      ArrayResize(m_orders,0);
      m_all=0;
      ArrayInitialize(orders,0);

      int isize=0;
      int itotal=::OrdersTotal();

      dprofits=0;
      dlots=0;
      icount=0;
      iback=0;

      m_total=itotal; //запомним для проверок кол-ва лимита ордеров

      for(int i=0; i<itotal; i++)
        {
         if(!::OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
            continue; //если не выбирает, пропускаем

         if(CheckSymbol(::OrderSymbol()))
           {

            if((!options_bSupportMaxLot && CheckMagic(::OrderMagicNumber(),::OrderComment())) || options_bSupportMaxLot)
              {

               isize=ArraySize(m_orders); //кол-во оредров в структуре

               if(ArrayResize(m_orders,isize+1)!=-1)
                 {
                  if(m_orders[isize].getOrderByTicket(::OrderTicket())) //загрузим информацию по ордеру (грузим все ордера)
                    {
                     dprofits+=m_orders[isize].Profit;

                     if(m_orders[isize].OrderMagicNumber==m_imagic)
                       {
                        dlots+=m_orders[isize].OrderLots; //считаем лот только стратегии без ордера reverse
                        icount++; //считаем основные ордера в сетке
                       }

                     if(m_orders[isize].OrderMagicNumber==m_imagic+1)
                       {
                        iback++;
                       }

                     orders[m_orders[isize].OrderType]++; //увеличим счетчик
                     m_all++;
                    }
                 }
              }

           }
        }

      return m_all; //вернем кол-во ордеров в структуре
     }

   virtual double    get_Average(int itype,int &idirect,double dProfit=0)
     {

      double dprofit[2]= {0,0},
                         m_lots[2]= {0,0},
                                    icount[2]= {0,0};

      idirect=0;

      double dask=SymbolInfoDouble(m_name,SYMBOL_ASK);
      double dbid=SymbolInfoDouble(m_name,SYMBOL_BID);

      int flag;

      for(int i=ArraySize(m_orders)-1; i>=0; i--)
        {

         if(m_orders[i].OrderCloseTime>0)
            continue;

         if(CheckMagic(m_orders[i].OrderMagicNumber,m_orders[i].OrderComment) && CheckSymbol(m_orders[i].OrderSymbol))
           {

            flag=toMyTypes(m_orders[i].OrderType)&itype;

            if(m_orders[i].OrderType==OP_BUY && toDefType(flag,itype)==OP_BUY)
              {
               m_lots[0]+=m_orders[i].OrderLots;
               dprofit[0]+=NormalizeDouble(m_orders[i].Profit,2);
               icount[0]++;
              }
            if(m_orders[i].OrderType==OP_SELL && toDefType(flag,itype)==OP_SELL)
              {
               m_lots[1]+=m_orders[i].OrderLots;
               dprofit[1]+=NormalizeDouble(m_orders[i].Profit,2);
               icount[1]++;
              }
           }
        }

      if(NormalizeDouble(m_lots[0],2)-NormalizeDouble(m_lots[1],2)==0.0)
         return (0);

      if(NormalizeDouble(m_lots[0],2)>NormalizeDouble(m_lots[1],2))
         idirect=1;
      if(NormalizeDouble(m_lots[0],2)<NormalizeDouble(m_lots[1],2))
         idirect=-1;

      double PriceLevel=0;
      double TickValue=NormalizeDouble(SymbolInfoDouble(m_name,SYMBOL_TRADE_TICK_VALUE),3);
      if(TickValue==0.0)
         return 0;

      double _dpoint=SymbolInfoDouble(m_name,SYMBOL_POINT);
      if(_dpoint==0.0)
         return 0;

      double sp=ND1((dask-dbid)/p);

      int idigits=(int)SymbolInfoInteger(m_name,SYMBOL_DIGITS);

      if((m_lots[0]-m_lots[1])>0)
         PriceLevel=nd(dbid-((dprofit[0]+dprofit[1]+dProfit)/(TickValue*(m_lots[0]-m_lots[1]))*_dpoint),m_name);
      if((m_lots[1]-m_lots[0])>0)
         PriceLevel=nd(dbid+((dprofit[0]+dprofit[1]+dProfit)/(TickValue*(m_lots[1]-m_lots[0]))*_dpoint),m_name);

      return NormalizeDouble(PriceLevel,idigits);
     }

   virtual long       getOrderTicket(int itype=ALL,const int imode=MODE_TRADES,const datetime dttm=0,bool bHistoryOpenOrderTime=true)
     {
      __COPYRIGHT__
      datetime dtm=0,dtm_open=0;
      long iticket=-1;
      int icount=0;
      int flag;

      icount=ArraySize(m_orders);

      for(int i=icount-1; i>=0; i--)
        {
         if(m_orders[i].OrderCloseTime>0)
            continue;

         if(m_orders[i].OrderMagicNumber==m_imagic+1)
            continue; //пропустим бэк ордера

         dtm_open=m_orders[i].OrderOpenTime;

         flag=toMyTypes(m_orders[i].OrderType)&itype;

         if(m_orders[i].OrderType==toDefType(flag,(int)itype) && dtm_open>=dttm && (m_orders[i].OrderTicket>iticket || iticket==-1))
           {
            dtm=dtm_open;
            iticket=m_orders[i].OrderTicket;

           }

        }

      return iticket;
     }
  };

class CMyOptions: public COptions
  {
public:
   bool              ContinueTrading_System[];
   ENUM_SELECT_TRADE selecttrade[]; //Select direct

   ENUM_TIMEFRAMES   SelectSystem_TF[];
   int               MaxTrades[];
   bool              UseTrailingStop[];
   double            TrailStart[];
   double            TrailStop[];
   double            PipStep[];
   double            PipStepX[];
   int               MagicNumber[];

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

   void              Add_ContinueTrading_System(bool bContinueTrading_System)
     {
      Add(ContinueTrading_System,bContinueTrading_System);
     }

   void              Add_SelectTrade(ENUM_SELECT_TRADE eSelectTrade)
     {
      Add(selecttrade,eSelectTrade);
     }

   void              Add_SelectSystem_TF(ENUM_TIMEFRAMES eSelectSystem_TF)
     {
      Add(SelectSystem_TF,eSelectSystem_TF);
     }
   void              Add_MaxTrades(int iMaxTrades)
     {
      Add(MaxTrades,iMaxTrades);
     }
   void              Add_UseTrailingStop(bool bUseTrailingStop)
     {
      Add(UseTrailingStop,bUseTrailingStop);
     }
   void              Add_TrailStart(double dTrailStart)
     {
      Add(TrailStart,dTrailStart);
     }
   void              Add_TrailStop(double dTrailStop)
     {
      Add(TrailStop,dTrailStop);
     }
   void              Add_PipStep(double dPipStep)
     {
      Add(PipStep,dPipStep);
     }
   void              Add_PipStepX(double dPipStepX)
     {
      Add(PipStepX,dPipStepX);
     }
   void              Add_MagicNumber(int iMagicNumber)
     {
      Add(MagicNumber,iMagicNumber);
     }

  };

class CFullOrders: public COrders
  {
public:
   virtual bool      CheckMagic(long iMagic)
     {
      return (iMagic==MagicNumber_1 || iMagic==MagicNumber_2 || iMagic==MagicNumber_3);
     }

  };

class CMain: public CMainDefault
  {
protected:
   CMyOrders         m_main[MAX_SYSTEMS];
   CNewBar           m_bar[MAX_SYSTEMS],m_day,m_newday,m_checkbar[3];

   CMyOptions        m_options;
   CTime             m_time;
   CChart            m_chart;

   bool              bDrawPanel;

   CDrawPos          m_pos;

   CTimer            m_timer;

public:

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

   virtual void      OnDeinit(const int reason)
     {
      m_timer.OnDeinit();

      m_chart.Detach();

      for(int i=0; i<MAX_SYSTEMS; i++)
         m_main[i].OnDeinit();

      HideTestIndicators(false);

      m_pos.OnDeinit();

     }

   virtual void      OnTick()
     {
      // код доступен только после оплаты
   }

      string sLicense=VALID_KEY;

      bool bcheck=checkAccount(sLicense,LICENSE_NAME);

      if(bDrawPanel)
        {

         m_pos.DrawStatus("status",sLicense,bcheck);

        }

      double dProfits[MAX_SYSTEMS],dLot[MAX_SYSTEMS];
      int iCount[MAX_SYSTEMS],iBack[MAX_SYSTEMS];

      ArrayInitialize(dProfits,0);
      ArrayInitialize(dLot,0);
      ArrayInitialize(iCount,0);
      ArrayInitialize(iBack,0);

      for(int i=0; i<MAX_SYSTEMS; i++)
        {

         m_main[i].OnTick();
         m_main[i].UpdateProfits(dProfits[i],dLot[i],iCount[i],iBack[i]); //получим кол-во ордеров в структуре orders

        }

      int itotal=0;
      double dsummProfits=0;
      int imaxorders=0;

      for(int i=0; i<MAX_SYSTEMS; i++)
        {
         itotal+=iCount[i];
         dsummProfits+=dProfits[i];

         if(iCount[i]>imaxorders)
            imaxorders=iCount[i];//найдем максимальное кол-во ордеров у всех сеток
        }

      double dd=0;
      if(AccountBalance()>0)
         dd=NormalizeDouble((AccountEquity()-AccountBalance())*100/AccountBalance(),3);

      TESTER_EVENT_TIMER(m_timer);

      if(!bcheck && itotal==0)
         return; //обязательно компилировать и накладывать MQL5 защиту!!!

      if(!IsWork())
         return; //отключена торговля?

      m_newday.Refresh();      //новый день
      m_day.Refresh();

      for(int i=0; i<3; i++)
         m_checkbar[i].Refresh();

      if(ProfitClose)
        {
         if(itotal>=ProfitCloseMaxOrder)
           {
            if(dsummProfits>=ProfitCloseStrategyDollar)
              {
               for(int i=0; i<MAX_SYSTEMS; i++)
                  m_main[i].OrderCloseAll(ALL); //закроем все стратегии по прибыли

               return;//вернемся к следующему тику для нового анализа
              }
           }
        }

      if(UseEquityStop && itotal>0)
        {
         if(dd<=-TotalEquityRisk)
           {
            for(int i=0; i<MAX_SYSTEMS; i++)
               m_main[i].OrderCloseAll(ALL); //закроем все стратегии по убытку

            return;//вернемся к следующему тику для нового анализа
           }
        }

      for(int i=0; i<MAX_SYSTEMS; i++)
        {
         m_bar[i].Refresh();

         if(CloseFriday && DayOfWeek()==FRIDAY)
           {
            string stime=StringFormat("%02d:00-24:00",CloseFridayHour);
            if(m_time.time_checking(stime)) //время в пт{
              {
               m_main[i].OrderCloseAll(ALL);

               continue; //пропускаем так как закрываются ордера
              }

           }

         if(Stabilization)
            fnStabilization();

         if(iCount[i]==0 && ContinueTrading &&
            (dd>-Drawdoun || Drawdoun==0))
           {

            if(m_options.ContinueTrading_System[i])
              {

               bool btime=true;

               if(OpenMondey && DayOfWeek()==MONDAY)
                 {
                  string stime=StringFormat("%02d:00-24:00",OpenMondeyHour);
                  btime=m_time.time_checking(stime); //время в пн
                 }

               if(btime)
                 {

                  int iop=signal(i,imaxorders);

                  bool bTrade=false;

                  if(iop==OP_BUY && (m_options.selecttrade[i]==SELECT_TRADE_ALL || m_options.selecttrade[i]==SELECT_TRADE_LONG))
                    {
                     bTrade=true;
                    }

               

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

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

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

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

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

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

Стоимость полного кода
2 675₽ ≈ $32.69