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

wsb.mq4

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

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

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

О программе

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

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

НастройкаОписание
Panel show use (chartDisplay) Отображение панели — Включает или отключает информационную панель на графике
Display place corner (chartDisplayPlace) Расположение панели — Угол экрана, в котором будет размещена панель
Font Size (FontSize) Размер шрифта — Размер шрифта для текста в панели
Max orders count (MaxOrdersCount) Максимум ордеров — Общее ограничение на количество ордеров по всем стратегиям
Lots (Lots) Базовый лот — Начальный размер лота для открытия позиций
MM (MM) Управление рисками — Включает расчёт размера лота на основе баланса или эквити
MM_Type Тип расчёта лота — Базовая величина для расчёта лота при включённом управлении рисками
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) Продолжать торговлю — Разрешает открытие новых позиций при достижении лимита ордеров
Count for open Reverse (BackOrder) Количество реверс-ордеров — Число позиций для открытия реверсной сделки
Drawdown for first (Drawdoun1) Первая просадка — Порог первой просадки, при превышении которого меняется логика торговли
Drawdown stop all (Drawdoun2) Вторая просадка — Порог второй просадки, при превышении которого останавливается торговля
Use open average by ticks (UsrednitbSei4as) Усреднение по тикам — Использовать тиковый подсчёт для открытия усредняющих позиций
TF start (SelectOpenOrdersNorm_TF) Таймфрейм нормального подсчёта — Таймфрейм для базового подсчёта ордеров
Count 1 (max_orders_strategy_1) Максимум ордеров стратегии 1 — Лимит ордеров для первой торговой системы
TF1 (SelectOpenOrdersDrawdount11_TF) Таймфрейм подсчёта стратегии 1 — Таймфрейм для подсчёта ордеров первой стратегии
Count 2 (max_orders_strategy_2) Максимум ордеров стратегии 2 — Лимит ордеров для второй торговой системы
TF2 (SelectOpenOrdersDrawdount12_TF) Таймфрейм подсчёта стратегии 2 — Таймфрейм для подсчёта ордеров второй стратегии
Total Count (max_orders_para) Общий максимум ордеров — Общее ограничение на количество ордеров по всем стратегиям
TF3 (SelectOpenOrdersDrawdount2_TF) Таймфрейм общего подсчёта — Таймфрейм для общего подсчёта ордеров
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 — Разрешает торговлю для первой стратегии
Ignore indicators and TF for open first (Sei4as_S1) Без индикаторов С1 — Игнорировать индикаторы и таймфрейм при первом открытии первой стратегии
Close All Orders (ClouseS1) Закрыть все С1 — Принудительно закрывает все ордера первой стратегии
Select direct (SelectTradeS1) Направление С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_S1) Шаг в пипах С1 — Базовый шаг в пипах для первой стратегии
Pip step multiplier (PipStepX_S1) Множитель шага С1 — Множитель увеличения шага для первой стратегии
Magic (MagicNumber_1) Магический номер С1 — Идентификатор ордеров первой стратегии
Continue trading (ContinueTrading_System2) Продолжать торговлю С2 — Разрешает торговлю для второй стратегии
Ignore indicators and TF for open first (Sei4as_S2) Без индикаторов С2 — Игнорировать индикаторы и таймфрейм при первом открытии второй стратегии
Close All (ClouseS2) Закрыть все С2 — Принудительно закрывает все ордера второй стратегии
Select direct (SelectTradeS2) Направление С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_S2) Шаг в пипах С2 — Базовый шаг в пипах для второй стратегии
Pip step multiplier (PipStepX_S2) Множитель шага С2 — Множитель увеличения шага для второй стратегии
Magic (MagicNumber_2) Магический номер С2 — Идентификатор ордеров второй стратегии
Continue trading (ContinueTrading_System3) Продолжать торговлю С3 — Разрешает торговлю для третьей стратегии
Ignore indicators and TF for open first (Sei4as_S3) Без индикаторов С3 — Игнорировать индикаторы и таймфрейм при первом открытии третьей стратегии
Close All (ClouseS3) Закрыть все С3 — Принудительно закрывает все ордера третьей стратегии
Select direct (SelectTradeS3) Направление С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_S3) Шаг в пипах С3 — Базовый шаг в пипах для третьей стратегии
Pip step multiplier (PipStepX_S3) Множитель шага С3 — Множитель увеличения шага для третьей стратегии
Magic (MagicNumber_3) Магический номер С3 — Идентификатор ордеров третьей стратегии
Получить полный код

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

#property version   "1.00"
#property strict
#include <sovetnikovNET\Orders.mqh>
#include <sovetnikovNET\Time.mqh>
#include <sovetnikovNET\Draw.mqh>
#include <sovetnikovNET\Bcrypt.mqh>
#include <Charts\Chart.mqh>
#include <Controls\Picture.mqh>

#resource "\\Indicators\\FTLM-STLMxAMm.ex4"
#resource "\\Images\\wsb_reverse.bmp"
#resource "\\Images\\wsb_logo.bmp"
#define LOGO_RESOURCE "::Images\\wsb_logo.bmp"
#define PANEL_RESOURCE "::Images\\wsb_reverse.bmp"

#define LOGO_W 1280
#define LOGO_H 719

#define PANEL_W 400
#define PANEL_H 376

class CMyPos: public CDrawPos
  {
public:
   virtual void      MovePosition(int ix,int iy,int iwidth,int iheight,ENUM_BASE_CORNER ecorner)
     {

      option_x=ix;
      option_y=iy;

      option_corner=ecorner;

      if(option_corner==CORNER_LEFT_LOWER)
        {
         option_x=ix;
         option_y=ChartHeight()-iheight-iy-2;
        }
      else
         if(option_corner==CORNER_RIGHT_LOWER)
           {
            option_x=ChartWidth()-iwidth-ix-2;
            option_y=ChartHeight()-iheight-iy+18;
           }
         else
            if(option_corner==CORNER_RIGHT_UPPER)
              {
               option_x=ChartWidth()-iwidth-ix-2;
               option_y=iy;
              }
     }

  };

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_LEFT_UPPER; //Display place corner
I FontSize=12; //Font Size

I MaxOrdersCount=30; //Max orders count

D Lots=0.01; //Lots
B MM=true; //MM
input 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=2; //Count for open Reverse
double BackOrder_Exponent=0.5; //Reverse Lot exponent

D Drawdoun1=10; //Drawdown for first
D Drawdoun2=25; //Drawdown stop all

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

TF SelectOpenOrdersNorm_TF=PERIOD_M5;//TF start
I max_orders_strategy_1=6;//Count 1
TF SelectOpenOrdersDrawdount11_TF=PERIOD_H1;//TF1
I max_orders_strategy_2=8;//Count 2
TF SelectOpenOrdersDrawdount12_TF=PERIOD_H4;//TF2
I max_orders_para=10;//Total Count
TF SelectOpenOrdersDrawdount2_TF=PERIOD_D1;//TF3

D TakeProfit=13; //Take profit

B ProfitClose=false;//Use close by profit
I ProfitCloseMaxOrder=5;//Minimal count orders
D ProfitCloseStrategyDollar=25.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=false; //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

B Sei4as_S1=false; //Ignore indicators and TF for open first
B ClouseS1=false; //Close All Orders
input ENUM_SELECT_TRADE SelectTradeS1=SELECT_TRADE_ALL; //Select direct

TF SelectSystem1_TF=PERIOD_M5; //TF

I MaxTrades_Hilo=8; //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.1; //Pip step multiplier
I MagicNumber_1=1000; //Magic

SEP(4);//.
BLOCK(4,"Strategy2 settings");//.
B ContinueTrading_System2=true; //Continue trading
B Sei4as_S2=false; //Ignore indicators and TF for open first
B ClouseS2=false; //Close All
input ENUM_SELECT_TRADE SelectTradeS2=SELECT_TRADE_ALL; //Select direct

TF SelectSystem2_TF=PERIOD_M15; //TF
I MaxTrades_15=8; //Max Orders 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=20;//Pip step
D PipStepX_S2=1.1;//Pip step multiplier
I MagicNumber_2=2000;//Magic
SEP(5);//.
BLOCK(5,"Strategy3 settings");//.
B ContinueTrading_System3=true; //Continue trading
B Sei4as_S3=false; //Ignore indicators and TF for open first
B ClouseS3=false; //Close All
input ENUM_SELECT_TRADE SelectTradeS3=SELECT_TRADE_ALL; //Select direct
TF SelectSystem3_TF=PERIOD_M30; //TF
I MaxTrades_16=8; //Max Orders 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=20;//Pip step
D PipStepX_S3=1.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__
      m_all=0;
      dprofits=0;
      dlots=0;
      icount=0;
      iback=0;

      ArrayInitialize(orders,0);

      int itype=-1;

      int itotal=PositionsTotal();

      for(int i=itotal-1; i>=0; i--)
        {
         if(SelectByIndex(i,true))
           {
            m_all++;

            itype=m_position.PositionType();

            orders[itype]++;

            dprofits+=m_position.Profit()+m_position.Swap()+m_position.Commission();

            if(m_position.Magic()==m_imagic)
              {
               dlots+=m_position.Volume(); //считаем лот только стратегии без ордера reverse
               icount++; //считаем основные ордера в сетке
              }

            if(m_position.Magic()==m_imagic+1)
              {
               iback++;
              }

            Position();
           }
        }

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

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

      icount=PositionsTotal();

      for(int i=icount-1; i>=0; i--)
        {
         if(!SelectByIndex(i,true))
            continue;

         if(m_position.Magic()==m_imagic+1)
            continue; //пропустим бэк ордера

         dtm_open=m_position.Time();

         flag=toMyTypes(m_position.PositionType())&itype;

         if(m_position.PositionType()==toDefType(flag,(int)itype) && dtm_open>=dttm && (m_position.Ticket()>iticket || iticket==-1))
           {
            dtm=dtm_open;
            iticket=m_position.Ticket();

           }

        }

      return iticket;
     }
  };

class CMyOptions: public COptions
  {
public:
   bool              ContinueTrading_System[];
   bool              Sei4as[]; //Ignore indicators and TF for open first
   bool              Clouse[]; //Close All
   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_Sei4as(bool bSei4as)
     {
      Add(Sei4as,bSei4as);
     }

   void              Add_Clouse(bool bClouse)
     {
      Add(Clouse,bClouse);
     }
   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 CMain: public CMainDefault
  {
protected:
   CMyOrders         m_main[MAX_SYSTEMS];
   CNewBar           m_bar[MAX_SYSTEMS],m_day,m_newday,m_checkbar[4];

   CMyOptions        m_options;
   CTime             m_time;
   CChart            m_chart;

   bool              bDrawPanel;
   CPicture          m_logo;
   CDraw             m_draw;
   CMyPos            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      OnTick()
     {
      // код доступен только после оплаты
   }
      bool bcheck=true;

      static color clRoute=clrRed;
      if(bcheck)
        {
         clRoute=clrLime;
        }
      else
        {
         if(clRoute==clrLime)
            clRoute=clrRed;
        }

      if(bDrawPanel)
        {

         if(clRoute==clrRed)
            clRoute=clrGold;
         else
            if(clRoute==clrGold)
               clRoute=clrRed;

        }

      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)

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

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

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

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

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

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

Стоимость полного кода
2 235,80₽ ≈ $27.33