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

wsb 3.2.1.mq4

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

ares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 1 общих тегов! cycle-identifier.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 1 общих теговprecisionflowea.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Данный продукт представляет собой торговый советник для платформы MetaTrader 4, реализующий мультисистемную стратегию управления ордерами. Советник использует три независимых торговых системы с различными таймфреймами и параметрами, каждая из которых ведёт собственную сетку ордеров с уникальными магическими числами.

Советник обрабатывает рыночные события через обработчик OnTick, управляет торговыми операциями с использованием встроенных функций MetaTrader, а также отображает информационную панель с данными о состоянии позиций, прибыли и настройках стратегий. Доступны функции управления рисками, включая стоп по эквити, трейлинг-стоп и ограничения по времени торгов.

Встроенная система проверки лицензии через ключ активации обеспечивает защиту продукта. Советник поддерживает управление лотами на основе баланса или эквити, а также позволяет задавать параметры продолжения торговли и максимальное количество ордеров.

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

НастройкаОписание
SelectTrade Режим торговли: разрешение на открытие длинных, коротких или всех позиций
MaxOrdersCount Общее максимальное количество ордеров по всем стратегиям на одном символе
chartDisplay Включает или отключает отображение информационной панели на графике
chartDisplayPlace Угол графика для размещения информационной панели
FontSize Размер шрифта на информационной панели советника
MM Включает или отключает систему управления размером лота на основе баланса или эквити
Divider Делитель для расчёта размера лота на основе баланса или эквити при включённом управлении
Lots Начальный размер лота для открытия ордеров
LotExponent Множитель для увеличения размера лота при открытии последующих ордеров в сетке
MaxLots Максимально допустимый размер лота при управлении размером позиции
ContinueTrading Разрешает продолжение торговли при достижении максимального количества ордеров
Drawdoun1 Максимальный допустимый уровень просадки в процентах для продолжения торговли
TakeProfit Общий уровень тейк-профита для всех стратегий, задаваемый в пунктах буфера
UseEquityStop Включает автоматическое закрытие всех ордеров при достижении лимита убытка по эквити
TotalEquityRisk Процент эквити, при превышении которого срабатывает стоп по эквити
CloseFriday Включает автоматическое закрытие всех ордеров в пятницу в заданном часе
CloseFridayHour Час закрытия ордеров в пятницу (от 0 до 23)
OpenMondey Включает ограничение открытия новых ордеров по времени в понедельник
OpenMondeyHour Час начала торговли в понедельник (от 0 до 23)
ContinueTrading_System1 Разрешает продолжение торговли для первой стратегии при достижении лимита ордеров
SelectSystem1_TF Таймфрейм для первой торговой стратегии
MaxTrades_Hilo Максимальное количество ордеров для первой стратегии
UseTrailingStop_Hilo Включает или отключает трейлинг-стоп для первой стратегии
TrailStart_Hilo Расстояние в пунктах для активации трейлинг-стопа первой стратегии
TrailStop_Hilo Расстояние в пунктах от цены для фиксации трейлинг-стопа первой стратегии
PipStep_S1 Шаг пипсов для расчёта точки буфера первой стратегии
PipStepX_S1 Множитель шага пипсов для расчёта точки буфера первой стратегии
MagicNumber_1 Магическое число для идентификации ордеров первой стратегии
ContinueTrading_System2 Разрешает продолжение торговли для второй стратегии при достижении лимита ордеров
SelectSystem2_TF Таймфрейм для второй торговой стратегии
MaxTrades_15 Максимальное количество ордеров для второй стратегии
UseTrailingStop_15 Включает или отключает трейлинг-стоп для второй стратегии
TrailStart_15 Расстояние в пунктах для активации трейлинг-стопа второй стратегии
TrailStop_15 Расстояние в пунктах от цены для фиксации трейлинг-стопа второй стратегии
PipStep_S2 Шаг пипсов для расчёта точки буфера второй стратегии
PipStepX_S2 Множитель шага пипсов для расчёта точки буфера второй стратегии
MagicNumber_2 Магическое число для идентификации ордеров второй стратегии
ContinueTrading_System3 Разрешает продолжение торговли для третьей стратегии при достижении лимита ордеров
SelectSystem3_TF Таймфрейм для третьей торговой стратегии
MaxTrades_16 Максимальное количество ордеров для третьей стратегии
UseTrailingStop_16 Включает или отключает трейлинг-стоп для третьей стратегии
TrailStart_16 Расстояние в пунктах для активации трейлинг-стопа третьей стратегии
TrailStop_16 Расстояние в пунктах от цены для фиксации трейлинг-стопа третьей стратегии
PipStep_S3 Шаг пипсов для расчёта точки буфера третьей стратегии
PipStepX_S3 Множитель шага пипсов для расчёта точки буфера третьей стратегии
MagicNumber_3 Магическое число для идентификации ордеров третьей стратегии
Получить полный код

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

#property strict
#property version   "3.21"
/*
отличие этой версии от последующих
ТР ставиться общий ля всех сеток однонаправленных. для селл единый и для бай единый от их точек бу.
Profit-FX основан на этом
Так же сигнал берется со свечек текущих, а не рабочего тф.
*/
#ifdef __MQL5__
#include <sovetnikovGUI\mql4.mqh>
#endif
#include <sovetnikovGUI\Orders.mqh>
#include <sovetnikovGUI\Time.mqh>
#include <sovetnikovGUI\Bcrypt.mqh>
#include <Charts\Chart.mqh>

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

#define LICENSE_OFF

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

#define LICENSE_NAME "3pr@2e~mh*zrx*5z}o~v7982?neqnok2"

#resource "\\Images\\wsb_reverse.bmp"
#define PANEL_RESOURCE "::Images\\wsb_reverse.bmp"

#define PANEL_W 400
#define PANEL_H 376

#define MAX_SYSTEMS 3

string sExpertName="Strategy";
BLOCK(1,"Main settings");//.
S KEY="***** ***"; //Key
input ENUM_TRADEMODE SelectTrade=TRADEMODE_ALL;//Trade Mode
I MaxOrdersCount=30; //Max orders count

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

B MM=true; //MM
ENUM_MM_TYPE MM_Type=MM_TYPE_BALANCE;
D Divider=10; //Divider

D Lots=0.01; //Lots
D LotExponent=1.55; //Lot exponent
D MaxLots=100; //Max Lot

B ContinueTrading=true; //Continue trading

D Drawdoun1=40; //Drowdown

bool UsrednitbSei4as=false;//Use open average by ticks

D TakeProfit=50; //Take profit

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

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

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

TF SelectSystem1_TF=PERIOD_CURRENT; //TF

I MaxTrades_Hilo=15; //Max Orders

B UseTrailingStop_Hilo=false; //Use trailing stop
D TrailStart_Hilo=10.00000000; //Trailing start
D TrailStop_Hilo=5.00000000; //Trailing stop
D PipStep_S1=15; //Pip step
D PipStepX_S1=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
B UseTrailingStop_15=false; //Use Trailing stop
D TrailStart_15=10.00000000; //Trailing start
D TrailStop_15=5.00000000;//Trailing stop
D PipStep_S2=30;//Pip step
D PipStepX_S2=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_M1; //TF
I MaxTrades_16=15; //Max Orders
B UseTrailingStop_16=false; //Use Trailing stop
D TrailStart_16=10.00000000; //Trailing start
D TrailStop_16=5.00000000;//Trailing stop
D PipStep_S3=45;//Pip step
D PipStepX_S3=1;//Pip step multiplier
I MagicNumber_3=3000;//Magic

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

  };

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

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

      SetExpertMagicNumber(m_imagic);//обновим меджик

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

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

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

      SNOrderInfo atmp;

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

         if(!(iticket=(long)::PositionGetTicket(i)))
            continue; //если не выбирает, пропускаем

         if(::OrderSelect(iticket))
            continue;

         atmp.getOrderByTicket(iticket,true);

         if(CheckSymbol(atmp.OrderSymbol))
           {
            if(COrders::CheckMagic(atmp.OrderMagicNumber,atmp.OrderComment))
              {
               isize=ArraySize(m_orders);
               if(ArrayResize(m_orders,isize+1)!=-1)
                 {
                  m_orders[isize]=atmp;
                 }

               dprofits+=m_orders[isize].Profit;
               dlots+=m_orders[isize].OrderLots; //считаем лот только стратегии без ордера бэк

               orders[(int)atmp.OrderType]++; //увеличим счетчик

               m_all++;
              }

           }
        }

      itotal=::OrdersTotal();

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

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

         if(!(iticket=(long)::OrderGetTicket(i)))
            continue; //если не выбирает, пропускаем

         atmp.getOrderByTicket(iticket,false);//перебираем только ордера

         if(CheckSymbol(atmp.OrderSymbol))
           {
            if(COrders::CheckMagic(atmp.OrderMagicNumber,atmp.OrderComment))
              {
               isize=ArraySize(m_orders);
               if(ArrayResize(m_orders,isize+1)!=-1)
                 {
                  m_orders[isize]=atmp;
                 }

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

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

               orders[(int)::OrderGetInteger(ORDER_TYPE)]++; //увеличим счетчик отложка

               m_all++;
              }

           }

        }

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

#else
   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;

      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 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;
     }
#endif

  };

class CMyOptions: public COptions
  {
public:
   bool              ContinueTrading_System[];
   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_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 CMain: public CMainDefault
  {
protected:
   CMyOrders         m_main[MAX_SYSTEMS];
   CFullOrders       m_full;

   CNewBar           m_bar[MAX_SYSTEMS],m_newday;

   CMyOptions        m_options;
   CTime             m_time;
   CChart            m_chart;

   bool              bDrawPanel;
   CDraw             m_draw;
   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();
      m_draw.OnDeinit();

     }

   virtual void      OnTi

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

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

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

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

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

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

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