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

shustrobotpro.mq4

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

ea_price_action_v6_grid.mq4MQL4 / MetaTrader 4 · 3 общих теговxauusd_gold_perfect.mq4MQL4 / MetaTrader 4 · 2 общих теговtm sniper pro.pineTradingView · 2 общих теговsniper pro.mq5MQL5 / MetaTrader 5 · 2 общих теговpro +.pineTradingView · 2 общих теговofada_gold_trader_v230.mq5MQL5 / MetaTrader 5 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

Советник для платформы MetaTrader 4, реализующий три сеточные торговые стратегии (GridA, GridB, GridC). Каждая стратегия использует собственный технический индикатор для формирования сигналов и управляет сеткой позиций с независимыми параметрами усреднения и фиксации прибыли. Программа включает систему проверки лицензии, привязанную к номеру торгового счёта и сроку действия ключа. Отображается информационная панель с данными по аккаунту, просадке, балансу, марже и результатам каждой из трёх стратегий за текущий и предыдущий день. Реализованы механизмы управления рисками: остановка торговли при достижении заданного уровня маржи, ограничение общей просадки по эквити, а также ручной режим «сушки» для отключения открытия новых позиций. Торговые объёмы рассчитываются автоматически с учётом заданных ограничений.

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

НастройкаОписание
Стратегия GridA (GridA) Стратегия GridA — Включает или отключает работу первой сеточной стратегии
Стратегия GridB (GridB) Стратегия GridB — Включает или отключает работу второй сеточной стратегии
Стратегия GridC (GridC) Стратегия GridC — Включает или отключает работу третьей сеточной стратегии
Мэджик номер GridA (MagicGridA) Мэджик номер GridA — Уникальный идентификатор ордеров первой стратегии
Мэджик номер GridB (MagicGridB) Мэджик номер GridB — Уникальный идентификатор ордеров второй стратегии
Мэджик номер GridC (MagicGridC) Мэджик номер GridC — Уникальный идентификатор ордеров третьей стратегии
StopTradeAfterTP (StopTradeAfterTP) Остановка после ТейкПрофита — Останавливать торговлю по стратегии после достижения тейкпрофита
Остановка торговли по уровню маржи,% (MinStopEquityLev) Остановка торговли по уровню маржи,% — Процентный уровень маржи, при достижении которого торговля прекращается
UseEquityStop (UseEquityStop) Использовать остановку по эквити — Включает аварийное закрытие всех позиций при превышении допустимой просадки
TotalEquityRisk (TotalEquityRisk) Порог общей просадки по эквити — Максимально допустимая просадка по эквити в процентах перед закрытием всех позиций
Максимальный объем ордера (MaxLots) Максимальный объем ордера — Ограничение максимального размера лота для открытых ордеров
АвтоММ (AutoMM) АвтоММ — Параметр автоматического расчёта размера лота на основе баланса счёта
BaseLotLevel (BaseOrderLevel) Базовый уровень лота — Базовый уровень для расчёта размера лота при усреднении
LotExponent (LotExponent) Показатель лота — Множитель для расчёта размера лота при увеличении количества ордеров в сетке
ТейкПрофит GridA (TakeProfitA) ТейкПрофит GridA — Уровень фиксации прибыли для первой стратегии
ТейкПрофит GridB (TakeProfitB) ТейкПрофит GridB — Уровень фиксации прибыли для второй стратегии
ТейкПрофит GridC (TakeProfitC) ТейкПрофит GridC — Уровень фиксации прибыли для третьей стратегии
Шаг усреднения GridA (Step_GridA) Шаг усреднения GridA — Базовый шаг добавления следующего ордера в сетке первой стратегии
Шаг усреднения GridB (Step_GridB) Шаг усреднения GridB — Базовый шаг добавления следующего ордера в сетке второй стратегии
Шаг усреднения GridC (Step_GridC) Шаг усреднения GridC — Базовый шаг добавления следующего ордера в сетке третьей стратегии
Максимум ордеров GridA (MaxTrades_GridA) Максимум ордеров GridA — Максимальное количество ордеров в сетке первой стратегии
Максимум ордеров GridB (MaxTrades_GridB) Максимум ордеров GridB — Максимальное количество ордеров в сетке второй стратегии
Максимум ордеров GridC (MaxTrades_GridC) Максимум ордеров GridC — Максимальное количество ордеров в сетке третьей стратегии
DistanceExponent (DistanceExponent) Показатель расстояния — Множитель для расчёта расстояния между ордерами при увеличении их количества
BaseDistanceLevel (BaseDistanceOrder) Базовый уровень расстояния — Количество ордеров, после которого расстояние между ними пересчитывается по формуле
TF для усреднения ордеров (tf) TF для усреднения ордеров — Таймфрейм, на котором анализируются сигналы и усредняются ордера
Отображение инфо панели (chartDisplay) Отображение инфо панели — Включает или отключает отображение информационной панели на графике
Угол расположения панели (panelCorner) Угол расположения панели — Угол экрана, в котором будет размещена информационная панель
Размер текста (fontSize) Размер текста — Размер шрифта текста в информационной панели
Показать логотип (showLogo) Показать логотип — Включает или отключает отображение логотипа на графике
Получить полный код

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

#property version   "1.00"
#property strict
#include <sovetnikovGUI\Orders.mqh>
#include <sovetnikovGUI\Time.mqh>
#include <sovetnikovGUI\Button.mqh>

#define VALID_KEY "Советник активирован."
#define EMPTY_KEY "Активируйте советник."
#define INVALID_KEY "Неверная лицензия."
#define EXPERIED "Время лицензии истекло."

#define LOGO_RESOURCE "::Images\\automoney\\logo.bmp"
#define PANEL_RESOURCE "::Images\\automoney\\panel.bmp"

#define LOGO_W 520
#define LOGO_H 533

#define PANEL_W 386
#define PANEL_H 195

#resource "\\Images\\automoney\\logo.bmp"
#resource "\\Images\\automoney\\panel.bmp"

#define LICENSE_NAME "automoney"

#define MAX_SYSTEMS 3
string sStrategy[MAX_SYSTEMS]= {"GridA","GridB","GridC"};

BLOCK(0,"-----------  ОБЩИЕ НАСТРОЙКИ  -----------");//.
B GridA=true;//Стратегия GridA
B GridB=true;//Стратегия GridB
B GridC=true;//Стратегия GridC
I MagicGridA=5551;//Мэджик номер GridA
I MagicGridB=5552;//Мэджик номер GridB
I MagicGridC=5553;//Мэджик номер GridC
B StopTradeAfterTP=false;//StopTradeAfterTP
D MinStopEquityLev=750;//Остановка торговли по уровню маржи,%
B UseEquityStop=false;//UseEquityStop
D TotalEquityRisk=20.0;//TotalEquityRisk
BLOCK(1,"-----------  НАСТРОЙКИ ЛОТНОСТИ  -----------");//.
D MaxLots=100.0;//Максимальный объем ордера
D AutoMM=8.0;  //АвтоММ
I BaseOrderLevel=1;//BaseLotLevel
D LotExponent=1.525;//LotExponent
BLOCK(2,"-----------  НАСТРОЙКИ ТЕЙКПРОФИТА  -----------");//.
D TakeProfitA=17;//ТейкПрофит GridA
D TakeProfitB=17;//ТейкПрофит GridB
D TakeProfitC=17;//ТейкПрофит GridC
BLOCK(3,"-----------  НАСТРОЙКИ СЕТКИ  -----------");//.
D Step_GridA=18;//Шаг усреднения GridA
D Step_GridB=24;//Шаг усреднения GridB
D Step_GridC=18;//Шаг усреднения GridC
I MaxTrades_GridA=15;//Максимум ордеров GridA
I MaxTrades_GridB=15;//Максимум ордеров GridB
I MaxTrades_GridC=15;//Максимум ордеров GridC
D DistanceExponent=1.22;//DistanceExponent
I BaseDistanceOrder=5;//BaseDistanceLevel
TF tf=PERIOD_CURRENT;//TF для усреднения ордеров
BLOCK(4,"----------- НАСТРОЙКИ ИНФО ПАНЕЛИ -----------");//.
B chartDisplay=true;//Отображение инфо панели
input ENUM_BASE_CORNER panelCorner=CORNER_RIGHT_UPPER; //Угол расположения панели
I fontSize=13; //Размер текста
B showLogo=true;//Показать логотип

class CMyOptions: public COptions
  {
public:
   /*
   B Grid=true;
   I MagicGrid
   D TakeProfit
   I BaseOrderLevel
   D LotExponent
   D Step_Grid
   I MaxTrades_Grid
   D DistanceExponent
   I BaseDistanceOrder

   B StopTradeAfterTP

   */
   bool              Grid[];
   int               MagicGrid[];
   double            TakeProfit[];
   int               BaseOrderLevel[];
   double            LotExponent[];
   double            Step_Grid[];
   int               MaxTrades_Grid[];
   double            DistanceExponent[];
   int               BaseDistanceOrder[];
   bool              StopTradeAfterTP[];

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

   void              Add_Grid(bool bGrid)
     {
      Add(Grid,bGrid);
     }
   void              Add_MagicGrid(int iMagicGrid)
     {
      Add(MagicGrid,iMagicGrid);
     }
   void              Add_TakeProfit(double dTakeProfit)
     {
      Add(TakeProfit,dTakeProfit);
     }
   void              Add_BaseOrderLevel(int iBaseOrderLevel)
     {
      Add(BaseOrderLevel,iBaseOrderLevel);
     }
   void              Add_LotExponent(double dLotExponent)
     {
      Add(LotExponent,dLotExponent);
     }
   void              Add_Step_Grid(double dStep_Grid)
     {
      Add(Step_Grid,dStep_Grid);
     }
   void              Add_MaxTrades_Grid(int iMaxTrades_Grid)
     {
      Add(MaxTrades_Grid,iMaxTrades_Grid);
     }
   void              Add_DistanceExponent(double dDistanceExponent)
     {
      Add(DistanceExponent,dDistanceExponent);
     }
   void              Add_BaseDistanceOrder(int iBaseDistanceOrder)
     {
      Add(BaseDistanceOrder,iBaseDistanceOrder);
     }
   void              Add_StopTradeAfterTP(bool bStopTradeAfterTP)
     {
      Add(StopTradeAfterTP,bStopTradeAfterTP);
     }

  };

class CMyOrders: public COrders
  {
public:

  };

class CMain: public CMainDefault
  {
protected:
   CMyOptions        m_options;
   CMyOrders         m_main[MAX_SYSTEMS];
   CNewBar           m_bar;

   CTimer            m_timer;
   CDrawPos          m_panel;
   SNButton          m_dry;
   bool              bDrawPanel;
   bool              bDrawLogo;

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

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

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

   void              DrawPanel()
     {

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

      m_panel.Text("name",StringFormat("Аккаунт %s",AccountName()));
      m_panel.Text("account",StringFormat("Счет № %ld",AccountNumber()));
      color ccolor=clrOrange;
      if(dd<=-30)
         ccolor=clrRed;

      m_panel.Color("dd",ccolor);
      m_panel.Text("dd",StringFormat("Просадка %.2f%%",dd));

      m_panel.Text("balance",StringFormat("Баланс %.2f",dBalance));
      m_panel.Text("equity",StringFormat("Эквити %.2f",AccountEquity()));

      double dMarginLevel=AccountLevel();

      ccolor=clrOrange;
      if(MinStopEquityLev>0 && dMarginLevel<MinStopEquityLev && dMarginLevel!=0)
         ccolor=clrRed;
      m_panel.Color("margin",ccolor);
      m_panel.Text("margin",StringFormat("Маржа %.2f%%",dMarginLevel));

      int idir[MAX_SYSTEMS]= {-1,-1,-1},icount[MAX_SYSTEMS]= {0};
      double dlots[MAX_SYSTEMS]= {0},dprofit[MAX_SYSTEMS]= {0};
      double dalltotal=0,dalllast=0,dtotal=0,dlast=0;

      for(int i=0; i<OrdersTotal(); i++)
        {
         if(!OrderSelect(i,SELECT_BY_POS))
            continue;

         if(OrderSymbol()!=_Symbol)
            continue;

         if(OrderMagicNumber()==MagicGridA)
           {
            icount[0]++;
            idir[0]=OrderType();
            dlots[0]+=OrderLots();
            dprofit[0]+=MacroProfit;
           }
         if(OrderMagicNumber()==MagicGridB)
           {
            icount[1]++;
            idir[1]=OrderType();
            dlots[1]+=OrderLots();
            dprofit[1]+=MacroProfit;
           }
         if(OrderMagicNumber()==MagicGridC)
           {
            icount[2]++;
            idir[2]=OrderType();
            dlots[2]+=OrderLots();
            dprofit[2]+=MacroProfit;
           }
        }

      datetime tmDay=iTime(_Symbol,PERIOD_D1,0);
      datetime tmLast=iTime(_Symbol,PERIOD_D1,1);

      for(int i=0; i<OrdersHistoryTotal(); i++)
        {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
            continue;

         if(OrderType()>=2)
            continue;

         if(OrderCloseTime()>=tmDay && ::OrderCloseTime()<=tmDay+86400)
           {
            dalltotal+=MacroProfit;
            if(OrderSymbol()==_Symbol)
               dtotal+=MacroProfit;
           }

         if(OrderCloseTime()>=tmLast && OrderCloseTime()<tmDay)
           {
            dalllast+=MacroProfit;
            if(OrderSymbol()==_Symbol)
               dlast+=MacroProfit;
           }

        }

      m_panel.Text("alltoday",StringFormat("Общий сегодня %.2f",dalltotal));
      m_panel.Text("alllast",StringFormat("Общий вчера %.2f",dalllast));
      m_panel.Text("today",StringFormat("Сегодня %.2f",dtotal));
      m_panel.Text("last",StringFormat("Вчера %.2f",dlast));

      string sdir[MAX_SYSTEMS]= {"","",""};
      for(int i=0; i<MAX_SYSTEMS; i++)
        {
         if(idir[i]==OP_BUY)
            sdir[i]="buy";
         if(idir[i]==OP_SELL)
            sdir[i]="sell";
        }

      if(icount[0]>0)

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

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

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

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

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

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

Стоимость полного кода
1 508,50₽ ≈ $18.44