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

WallStreetBot

wallstreetbot reverse.mq4
Вы автор или правообладатель?

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

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

О программе

WallStreetBot Reverse — это торговый советник для MetaTrader 4, использующий одновременно три скальпинговые стратегии на основе трендового индикатора FTLM-STLM. Каждая стратегия работает на своём таймфрейме и имеет собственные параметры торговли.

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

Программа содержит информационную панель на графике, отображающую состояние позиций, прибыль и сигналы стратегий. Также реализованы защита по эквити, закрытие по достижении целевой прибыли, таймфреймные фильтры и ограничения по торговым сессиям (пятница/понедельник).

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

НастройкаОписание
t1 Текстовый параметр-разделитель для группы настроек.
Lots Начальный размер лота для торговли.
LotExponent Множитель экспоненты для расчёта размера лота при усреднении.
MaxLots Максимально допустимый размер лота.
MM Логический переключатель, включающий автоматический расчёт размера лота на основе баланса или эквити.
MM_Type Тип менеджмента лота: расчёт от депозита или от эквити.
MaxOrdersCount Максимальное общее количество открытых ордеров по всем стратегиям.
SelectChange_TF_Finish Таймфрейм, при достижении максимального количества открытых ордеров на котором происходит смена ТФ для новых сигналов.
Change_TF_max_order Максимальное количество открытых ордеров, при достижении которого происходит смена таймфрейма для новых сигналов.
ContinueTrading Логический переключатель, разрешающий продолжение торговли (функция «сушка») при определённой просадке.
Drawdoun1 Процент просадки, при превышении которого запрещается открытие первых ордеров.
Drawdoun2 Процент просадки, при превышении которого запрещается открытие всех усредняющих ордеров.
ReversOrder Количество ордеров в сетке, при котором разрешается открытие реверсивного ордера.
UsrednitbSei4as Логический переключатель, разрешающий открытие усредняющих ордеров без подтверждения таймфреймом принятия решения.
SelectOpenOrdersNorm_TF Таймфрейм для проверки новых баров при открытии первого ордера.
max_orders_strategy_1 Количество ордеров первого уровня усреднения для первой стратегии.
SelectOpenOrdersDrawdount11_TF Таймфрейм для проверки новых баров при первом уровне усреднения первой стратегии.
max_orders_strategy_2 Количество ордеров второго уровня усреднения для первой стратегии.
SelectOpenOrdersDrawdount12_TF Таймфрейм для проверки новых баров при втором уровне усреднения первой стратегии.
max_orders_para Максимальное количество ордеров, разрешённое для открытия по данной валютной паре.
SelectOpenOrdersDrawdount2_TF Таймфрейм для проверки новых баров при достижении максимального количества ордеров по валютной паре.
Divider Делитель, используемый при расчёте размера лота на основе баланса счёта.
BackgroundColor Стиль оформления графика (чёрный или жёлтый).
chartDisplay Логический переключатель, показывающий или скрывающий информационную панель на графике.
chartDisplayPlace Положение информационной панели на графике (угол).
FontSize Размер шрифта текста на информационной панели графика.
TakeProfit Общий уровень тейк-профита в пунктах от средней цены открытых ордеров.
ProfitClose Логический переключатель, включающий функцию закрытия всех ордеров всех стратегий при достижении общей прибыли.
ProfitCloseMaxOrder Максимальное количество ордеров, при котором активируется функция закрытия по прибыли.
ProfitCloseStrategyDollar Сумма прибыли в долларах, при достижении которой происходит закрытие всех ордеров.
UseEquityStop Логический переключатель, включающий стоп-эквити — автоматическое закрытие всех ордеров при достижении заданной просадки.
TotalEquityRisk Процент эквити-риска — порог просадки для срабатывания стопа по эквити.
t2 Текстовый параметр-разделитель для группы настроек.
CloseFriday Логический переключатель, включающий автоматическое закрытие всех ордеров в пятницу.
CloseFridayHour Час, начиная с которого в пятницу происходит закрытие ордеров.
OpenMondey Логический переключатель, разрешающий открытие ордеров в понедельник.
OpenMondeyHour Час, начиная с которого в понедельник разрешено открытие ордеров.
t3 Текстовый параметр-разделитель для группы настроек.
ContinueTrading_System1 Логический переключатель, разрешающий торговлю для первой стратегии.
Sei4as_S1 Логический переключатель — при включении первая стратегия открывает первый ордер без ожидания сигнала индикатора и подтверждения таймфрейма.
ClouseS1 Логический переключатель — при включении принудительно закрывает все ордера сетки первой стратегии.
SelectTradeS1 Направление торговли первой стратегии: Long, Short или оба.
SelectSystem1_TF Таймфрейм для первого сигнала и усреднений первой стратегии.
MaxTrades_Hilo Максимальное количество ордеров для первой стратегии.
UseTrailingStop_Hilo Логический переключатель, включающий трейлинг-стоп для первой стратегии.
TrailStart_Hilo Расстояние в пунктах для активации трейлинг-стопа первой стратегии.
TrailStop_Hilo Расстояние в пунктах для фиксации трейлинг-стопа первой стратегии.
PipStep_S1 Шаг лота в пунктах для усреднения первой стратегии.
PipStepX_S1 Множитель шага лота (в пунктах) для расчёта следующего ордера первой стратегии.
MagicNumber_1 Магический номер для идентификации ордеров первой стратегии.
t4 Текстовый параметр-разделитель для группы настроек.
ContinueTrading_System2 Логический переключатель, разрешающий торговлю для второй стратегии.
Sei4as_S2 Логический переключатель — при включении вторая стратегия открывает первый ордер без ожидания сигнала индикатора и подтверждения таймфрейма.
ClouseS2 Логический переключатель — при включении принудительно закрывает все ордера сетки второй стратегии.
SelectTradeS2 Направление торговли второй стратегии: Long, Short или оба.
SelectSystem2_TF Таймфрейм для первого сигнала и усреднений второй стратегии.
MaxTrades_15 Максимальное количество ордеров для второй стратегии.
UseTrailingStop_15 Логический переключатель, включающий трейлинг-стоп для второй стратегии.
TrailStart_15 Расстояние в пунктах для активации трейлинг-стопа второй стратегии.
TrailStop_15 Расстояние в пунктах для фиксации трейлинг-стопа второй стратегии.
PipStep_S2 Шаг лота в пунктах для усреднения второй стратегии.
PipStepX_S2 Множитель шага лота (в пунктах) для расчёта следующего ордера второй стратегии.
MagicNumber_2 Магический номер для идентификации ордеров второй стратегии.
t5 Текстовый параметр-разделитель для группы настроек.
ContinueTrading_System3 Логический переключатель, разрешающий торговлю для третьей стратегии.
Sei4as_S3 Логический переключатель — при включении третья стратегия открывает первый ордер без ожидания сигнала индикатора и подтверждения таймфрейма.
ClouseS3 Логический переключатель — при включении принудительно закрывает все ордера сетки третьей стратегии.
SelectTradeS3 Направление торговли третьей стратегии: Long, Short или оба.
SelectSystem3_TF Таймфрейм для первого сигнала и усреднений третьей стратегии.
MaxTrades_16 Максимальное количество ордеров для третьей стратегии.
UseTrailingStop_16 Логический переключатель, включающий трейлинг-стоп для третьей стратегии.
TrailStart_16 Расстояние в пунктах для активации трейлинг-стопа третьей стратегии.
TrailStop_16 Расстояние в пунктах для фиксации трейлинг-стопа третьей стратегии.
PipStep_S3 Шаг лота в пунктах для усреднения третьей стратегии.
PipStepX_S3 Множитель шага лота (в пунктах) для расчёта следующего ордера третьей стратегии.
MagicNumber_3 Магический номер для идентификации ордеров третьей стратегии.
Получить полный код

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

#property description "Официальная версия робота в торговле использует одновременно три стратегии,"
#property description "основанные на трендовом индикаторе FTLM-STLM"
#property description "Благодаря использованию трех разных скальпинговых стратегий основанных на принципе"
#property description "усреднения ордеров, советник успешно торгует и приносит прибыль."
#property description "Каждый ордер тщательно анализируется индикатором FTLM-STLM, после чего определяются точки"
#property description "входа каждой из трех стратегий для достижения максимального эффекта.";

#property strict
#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 "Робот активирован!"
#define EMPTY_KEY "Робот не активирован! Обратитесь к вышестоящему партнеру!"
#define INVALID_KEY "Неправильный ключ."
#define EXPERIED "Время работы закончилось."

#define LICENSE_EXT "wsbreverse"
#define LICENSE_NAME "$b|@kvksf16|}2@mf6euo#6@?1{0ovvi"

#resource "\\Indicators\\FTLM-STLMxAMm.ex4"

#define LOGO_W 696
#define LOGO_H 912

#define PANEL_W 373
#define PANEL_H 385

#define TEXT_COLOR C'204,146,3'
#define LINE_COLOR C'0,135,193'

enum ENUM_MM_TYPE
  {
   MM_TYPE_BALANCE=1, //Расчет лота от депозита
   MM_TYPE_EQUITY=2, //Расчет лота от эквити
  };

enum ENUM_SELECT_TRADE
  {
   SELECT_TRADE_ALL=7,//Long & Short
   SELECT_TRADE_LONG=8, //Only Long
   SELECT_TRADE_SHORT=9 //Only Short
  };
enum enum_color_style
  {
   COLOR_STYLE_BLACK=1,//Черный
   COLOR_STYLE_YELLOW=2 //Жёлтый
  };

#define MAX_SYSTEMS 3

string sExpertName="Стратегия";

S t1="*";
D Lots=0.01; //Lots
D LotExponent=1.55; //LotExponent
D MaxLots=100; //MaxLots
B MM=true; //MM
input ENUM_MM_TYPE MM_Type=MM_TYPE_BALANCE;

I MaxOrdersCount=30;

TF SelectChange_TF_Finish=PERIOD_D1; //ТФ при макс.кол.откр.ордеров
I Change_TF_max_order=10; //Макс.кол.откр.ордеров для смены ТФ
B ContinueTrading=true; //ContinueTrading (сушка)

D Drawdoun1=10; //Просадка для запрета первых ордеров
D Drawdoun2=25; //Просадка для запрета всех ордеров
I ReversOrder=2; //Кол-во ордеров для открытия реверсов
double BackOrder_Exponent=0.5; //множитель реверса
B UsrednitbSei4as=false;//Откр. усредняющих без ТФ прин. реш.

TF SelectOpenOrdersNorm_TF=PERIOD_M5;//TF старт
I max_orders_strategy_1=6;//Кол-во 1
TF SelectOpenOrdersDrawdount11_TF=PERIOD_H1;//TF1
I max_orders_strategy_2=8;//Кол-во 2
TF SelectOpenOrdersDrawdount12_TF=PERIOD_H4;//TF2
I max_orders_para=10;//Кол-во ордеров валютной пары
TF SelectOpenOrdersDrawdount2_TF=PERIOD_D1;//TF3

D Divider=10; //Divider

input enum_color_style BackgroundColor=COLOR_STYLE_BLACK;//Стиль графика
B chartDisplay=true; //Показывать инфо-панель
input ENUM_BASE_CORNER chartDisplayPlace=CORNER_LEFT_UPPER; //Положение инфо-панели
I FontSize=8; //Размер шрифта

D TakeProfit=13; //TakeProfit

B ProfitClose=false;//Включение функции закрытия всех ордеров всех стратегий по общей прибыли
I ProfitCloseMaxOrder=5;//Макс. кол-о ордеров при которых будет включаться функция
D ProfitCloseStrategyDollar=25.0;//Прибыль при достижении которой будут закрываться все ордера

B UseEquityStop=false; //UseEquityStop
D TotalEquityRisk=20.0; //TotalEquityRisk

SEP(2);//.
S t2="Временные настройки";
B CloseFriday=false; //CloseFriday
I CloseFridayHour=17; //CloseFridayHour
B OpenMondey=false; //OpenMondey
I OpenMondeyHour=0; //OpenMondeyHour

SEP(3);//.
S t3="Настройки для стратегии №1";
B ContinueTrading_System1=true;

B Sei4as_S1=false; //Откр. первый сейчас без инд. и ТФ прин. реш.
B ClouseS1=false; //Закрыть сетку ордеров
input ENUM_SELECT_TRADE SelectTradeS1=SELECT_TRADE_ALL; //Направление торговли

TF SelectSystem1_TF=PERIOD_M5; //ТаймФрейм

I MaxTrades_Hilo=8;

B UseTrailingStop_Hilo=false;
D TrailStart_Hilo=10.00000000;
D TrailStop_Hilo=5.00000000;
D PipStep_S1=15;
D PipStepX_S1=1.1;
I MagicNumber_1=1000;

SEP(4);//.
S t4="Настройки для стратегии №2";
B ContinueTrading_System2=true;
B Sei4as_S2=false; //Откр. первый сейчас без инд. и ТФ прин. реш.
B ClouseS2=false; //Закрыть сетку ордеров
input ENUM_SELECT_TRADE SelectTradeS2=SELECT_TRADE_ALL; //Направление торговли

TF SelectSystem2_TF=PERIOD_M15; //ТаймФрейм
I MaxTrades_15=8;
B UseTrailingStop_15=false;
D TrailStart_15=10.00000000;
D TrailStop_15=5.00000000;
D PipStep_S2=20;
D PipStepX_S2=1.1;
I MagicNumber_2=2000;

SEP(5);//.
S t5="Настройки для стратегии №3";
B ContinueTrading_System3=true;
B Sei4as_S3=false;  //Откр. первый сейчас без инд. и ТФ прин. реш.
B ClouseS3=false; //Закрыть сетку ордеров
input ENUM_SELECT_TRADE SelectTradeS3=SELECT_TRADE_ALL; //Направление торговли
TF SelectSystem3_TF=PERIOD_M30; //ТфамФрейм
I MaxTrades_16=8;
B UseTrailingStop_16=false;
D TrailStart_16=10.00000000;
D TrailStop_16=5.00000000;
D PipStep_S3=20;
D PipStepX_S3=1.1;
I MagicNumber_3=3000;

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

   /*   virtual bool      Check(string symbol,long iMagic)
        {

         if((m_name==NULL || symbol==m_name) && (iMagic==m_imagic || iMagic==m_imagic+1))
            return true;

         return false;
        }

      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.Swap();

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

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

              }
           }

         return m_all; //вернем кол-во ордеров в структуре
        }
        */
   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;

      if(imode==MODE_TRADES)
        {

         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; //пропустим бэк ордера

            if(!CheckMagic(m_orders[i].OrderMagicNumber,m_orders[i].OrderComment) || !CheckSymbol(m_orders[i].OrderSymbol))
               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;
     }
   /*
   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 CMyDrawPos: public CDrawPos
  {
public:
   virtual void      DrawStatus(string sname,string sLicense,bool bbcheck)
     {
      static color clRoute=clrRed;

      if(bbcheck)
        {
         clRoute=clrLime;
        }
      else
        {
         if(clRoute==clrLime)
            clRoute=clrRed;
        }

      if((IsTesting() && IsVisualMode()) || (!IsTesting() && !IsOptimization()))
        {
         DrawLabel(0,sname,sLicense,clRoute,CORNER_LEFT_LOWER,5,20,10,"Arial Black");

         if(clRoute==clrRed)
            clRoute=TEXT_COLOR;
         else
            if(clRoute==TEXT_COLOR)
               clRoute=clrRed;
        }
     }
  };

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;
   CMyDrawPos          m_pos,m_pos2;

   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_pos2.OnDeinit();

     }

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

      string sLicense=VALID_KEY;

      bool bcheck=checkAccount(sLicense,LICENSE_NAME);
      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(i

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

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

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

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

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

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

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