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

Multik_SMA_Exp

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

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

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

О программе

Программный продукт представляет собой торговый советник для платформы MetaTrader 5. Он реализует автоматическую торговлю на основе анализа простых скользящих средних (SMA) для до 12 финансовых инструментов одновременно, обрабатывая рыночные события в функции OnTick().

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

Советник формирует сигналы на открытие и закрытие позиций на основе изменения направления скользящей средней между последовательными барами. Выполнение торговых операций производится через стандартные торговые функции MetaTrader 5 с использованием структур MqlTradeRequest и MqlTradeResult.

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

НастройкаОписание
Symb0 Символ (символ 0) — Торговый символ (например, EURUSD) для первого инструмента.
Trade0 Торговля включена (символ 0) — Включение или отключение автоматической торговли для первого символа.
Per0 Период SMA (символ 0) — Период скользящей средней для первого символа (количество баров).
ApPrice0 Тип цены (символ 0) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod0 Метод скользящей средней (символ 0) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss0 Стоп-лосс (символ 0) — Уровень стоп-лосса для первого символа (в пунктах).
TkProfit0 Тейк-профит (символ 0) — Уровень тейк-профита для первого символа (в пунктах).
Lots0 Объём лотов (символ 0) — Объём торговой позиции для первого символа.
Slippage0 Проскальзывание (символ 0) — Допустимое проскальзывание цены при выполнении торговых операций для первого символа (в пунктах).
Symb1 Символ (символ 1) — Торговый символ (например, USDCHF) для второго инструмента.
Trade1 Торговля включена (символ 1) — Включение или отключение автоматической торговли для второго символа.
Per1 Период SMA (символ 1) — Период скользящей средней для второго символа (количество баров).
ApPrice1 Тип цены (символ 1) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod1 Метод скользящей средней (символ 1) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss1 Стоп-лосс (символ 1) — Уровень стоп-лосса для второго символа (в пунктах).
TkProfit1 Тейк-профит (символ 1) — Уровень тейк-профита для второго символа (в пунктах).
Lots1 Объём лотов (символ 1) — Объём торговой позиции для второго символа.
Slippage1 Проскальзывание (символ 1) — Допустимое проскальзывание цены при выполнении торговых операций для второго символа (в пунктах).
Symb2 Символ (символ 2) — Торговый символ (например, USDJPY) для третьего инструмента.
Trade2 Торговля включена (символ 2) — Включение или отключение автоматической торговли для третьего символа.
Per2 Период SMA (символ 2) — Период скользящей средней для третьего символа (количество баров).
ApPrice2 Тип цены (символ 2) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod2 Метод скользящей средней (символ 2) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss2 Стоп-лосс (символ 2) — Уровень стоп-лосса для третьего символа (в пунктах).
TkProfit2 Тейк-профит (символ 2) — Уровень тейк-профита для третьего символа (в пунктах).
Lots2 Объём лотов (символ 2) — Объём торговой позиции для третьего символа.
Slippage2 Проскальзывание (символ 2) — Допустимое проскальзывание цены при выполнении торговых операций для третьего символа (в пунктах).
Symb3 Символ (символ 3) — Торговый символ (например, USDCAD) для четвёртого инструмента.
Trade3 Торговля включена (символ 3) — Включение или отключение автоматической торговли для четвёртого символа.
Per3 Период SMA (символ 3) — Период скользящей средней для четвёртого символа (количество баров).
ApPrice3 Тип цены (символ 3) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod3 Метод скользящей средней (символ 3) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss3 Стоп-лосс (символ 3) — Уровень стоп-лосса для четвёртого символа (в пунктах).
TkProfit3 Тейк-профит (символ 3) — Уровень тейк-профита для четвёртого символа (в пунктах).
Lots3 Объём лотов (символ 3) — Объём торговой позиции для четвёртого символа.
Slippage3 Проскальзывание (символ 3) — Допустимое проскальзывание цены при выполнении торговых операций для четвёртого символа (в пунктах).
Symb4 Символ (символ 4) — Торговый символ (например, AUDUSD) для пятого инструмента.
Trade4 Торговля включена (символ 4) — Включение или отключение автоматической торговли для пятого символа.
Per4 Период SMA (символ 4) — Период скользящей средней для пятого символа (количество баров).
ApPrice4 Тип цены (символ 4) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod4 Метод скользящей средней (символ 4) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss4 Стоп-лосс (символ 4) — Уровень стоп-лосса для пятого символа (в пунктах).
TkProfit4 Тейк-профит (символ 4) — Уровень тейк-профита для пятого символа (в пунктах).
Lots4 Объём лотов (символ 4) — Объём торговой позиции для пятого символа.
Slippage4 Проскальзывание (символ 4) — Допустимое проскальзывание цены при выполнении торговых операций для пятого символа (в пунктах).
Symb5 Символ (символ 5) — Торговый символ (например, EURGBP) для шестого инструмента.
Trade5 Торговля включена (символ 5) — Включение или отключение автоматической торговли для шестого символа.
Per5 Период SMA (символ 5) — Период скользящей средней для шестого символа (количество баров).
ApPrice5 Тип цены (символ 5) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod5 Метод скользящей средней (символ 5) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss5 Стоп-лосс (символ 5) — Уровень стоп-лосса для шестого символа (в пунктах).
TkProfit5 Тейк-профит (символ 5) — Уровень тейк-профита для шестого символа (в пунктах).
Lots5 Объём лотов (символ 5) — Объём торговой позиции для шестого символа.
Slippage5 Проскальзывание (символ 5) — Допустимое проскальзывание цены при выполнении торговых операций для шестого символа (в пунктах).
Symb6 Символ (символ 6) — Торговый символ (например, EURAUD) для седьмого инструмента.
Trade6 Торговля включена (символ 6) — Включение или отключение автоматической торговли для седьмого символа.
Per6 Период SMA (символ 6) — Период скользящей средней для седьмого символа (количество баров).
ApPrice6 Тип цены (символ 6) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod6 Метод скользящей средней (символ 6) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss6 Стоп-лосс (символ 6) — Уровень стоп-лосса для седьмого символа (в пунктах).
TkProfit6 Тейк-профит (символ 6) — Уровень тейк-профита для седьмого символа (в пунктах).
Lots6 Объём лотов (символ 6) — Объём торговой позиции для седьмого символа.
Slippage6 Проскальзывание (символ 6) — Допустимое проскальзывание цены при выполнении торговых операций для седьмого символа (в пунктах).
Symb7 Символ (символ 7) — Торговый символ (например, EURCHF) для восьмого инструмента.
Trade7 Торговля включена (символ 7) — Включение или отключение автоматической торговли для восьмого символа.
Per7 Период SMA (символ 7) — Период скользящей средней для восьмого символа (количество баров).
ApPrice7 Тип цены (символ 7) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod7 Метод скользящей средней (символ 7) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss7 Стоп-лосс (символ 7) — Уровень стоп-лосса для восьмого символа (в пунктах).
TkProfit7 Тейк-профит (символ 7) — Уровень тейк-профита для восьмого символа (в пунктах).
Lots7 Объём лотов (символ 7) — Объём торговой позиции для восьмого символа.
Slippage7 Проскальзывание (символ 7) — Допустимое проскальзывание цены при выполнении торговых операций для восьмого символа (в пунктах).
Symb8 Символ (символ 8) — Торговый символ (например, GBPCHF) для девятого инструмента.
Trade8 Торговля включена (символ 8) — Включение или отключение автоматической торговли для девятого символа.
Per8 Период SMA (символ 8) — Период скользящей средней для девятого символа (количество баров).
ApPrice8 Тип цены (символ 8) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod8 Метод скользящей средней (символ 8) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss8 Стоп-лосс (символ 8) — Уровень стоп-лосса для девятого символа (в пунктах).
TkProfit8 Тейк-профит (символ 8) — Уровень тейк-профита для девятого символа (в пунктах).
Lots8 Объём лотов (символ 8) — Объём торговой позиции для девятого символа.
Slippage8 Проскальзывание (символ 8) — Допустимое проскальзывание цены при выполнении торговых операций для девятого символа (в пунктах).
Symb9 Символ (символ 9) — Торговый символ (например, GBPUSD) для десятого инструмента.
Trade9 Торговля включена (символ 9) — Включение или отключение автоматической торговли для десятого символа.
Per9 Период SMA (символ 9) — Период скользящей средней для десятого символа (количество баров).
ApPrice9 Тип цены (символ 9) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod9 Метод скользящей средней (символ 9) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss9 Стоп-лосс (символ 9) — Уровень стоп-лосса для десятого символа (в пунктах).
TkProfit9 Тейк-профит (символ 9) — Уровень тейк-профита для десятого символа (в пунктах).
Lots9 Объём лотов (символ 9) — Объём торговой позиции для десятого символа.
Slippage9 Проскальзывание (символ 9) — Допустимое проскальзывание цены при выполнении торговых операций для десятого символа (в пунктах).
Symb10 Символ (символ 10) — Торговый символ (например, GBPJPY) для одиннадцатого инструмента.
Trade10 Торговля включена (символ 10) — Включение или отключение автоматической торговли для одиннадцатого символа.
Per10 Период SMA (символ 10) — Период скользящей средней для одиннадцатого символа (количество баров).
ApPrice10 Тип цены (символ 10) — Тип цены, используемой для расчёта скользящей средней (например, закрытие, открытие, высокая, низкая).
MaMethod10 Метод скользящей средней (символ 10) — Метод расчёта скользящей средней (простая, экспоненциальная, взвешенная и т.д.).
StLoss10 Стоп-лосс (символ 10) — Уровень стоп-лосса для одиннадцатого символа (в пунктах).
TkProfit10 Тейк-профит (символ 10) — Уровень тейк-профита для одиннадцатого символа (в пунктах).
Lots10 Объём лотов (символ 10) — Объём торговой позиции для одиннадцатого символа.
Slippage10 Проскальзывание (символ 10) — Допустимое проскальзывание цены при выполнении торговых операций для одиннадцатого символа (в пунктах).
Symb11 Символ (символ 11) — Торговый символ (например, EURJPY) для двенадцатого инструмента.
Получить полный код

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

#property version   "1.04"

input string            Symb0 = "EURUSD";
input  bool            Trade0 = true;
input int                Per0 = 50;
input ENUM_APPLIED_PRICE ApPrice0 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod0    = MODE_SMA;
input int             StLoss0 = 0;
input int           TkProfit0 = 0;
input double            Lots0 = 1;
input int           Slippage0 = 30;

input string            Symb1 = "USDCHF";
input  bool            Trade1 = false;
input int                Per1 = 100;
input ENUM_APPLIED_PRICE ApPrice1 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod1    = MODE_SMA;
input int             StLoss1 = 0;
input int           TkProfit1 = 0;
input double            Lots1 = 0.1;
input int           Slippage1 = 30;

input string            Symb2 = "USDJPY";
input  bool            Trade2 = false;
input int                Per2 = 100;
input ENUM_APPLIED_PRICE ApPrice2 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod2    = MODE_SMA;
input int             StLoss2 = 0;
input int           TkProfit2 = 0;
input double            Lots2 = 0.1;
input int           Slippage2 = 30;

input string            Symb3 = "USDCAD";
input  bool            Trade3 = false;
input int                Per3 = 100;
input ENUM_APPLIED_PRICE ApPrice3 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod3    = MODE_SMA;
input int             StLoss3 = 0;
input int           TkProfit3 = 0;
input double            Lots3 = 0.1;
input int           Slippage3 = 30;

input string            Symb4 = "AUDUSD";
input  bool            Trade4 = false;
input int                Per4 = 100;
input ENUM_APPLIED_PRICE ApPrice4 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod4    = MODE_SMA;
input int             StLoss4 = 0;
input int           TkProfit4 = 0;
input double            Lots4 = 0.1;
input int           Slippage4 = 30;

input string            Symb5 = "EURGBP";
input  bool            Trade5 = false;
input int                Per5 = 100;
input ENUM_APPLIED_PRICE ApPrice5 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod5    = MODE_SMA;
input int             StLoss5 = 0;
input int           TkProfit5 = 0;
input double            Lots5 = 0.1;
input int           Slippage5 = 30;

input string            Symb6 = "EURAUD";
input  bool            Trade6 = false;
input int                Per6 = 100;
input ENUM_APPLIED_PRICE ApPrice6 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod6    = MODE_SMA;
input int             StLoss6 = 0;
input int           TkProfit6 = 0;
input double            Lots6 = 0.1;
input int           Slippage6 = 30;

input string            Symb7 = "EURCHF";
input  bool            Trade7 = false;
input int                Per7 = 100;
input ENUM_APPLIED_PRICE ApPrice7 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod7    = MODE_SMA;
input int             StLoss7 = 0;
input int           TkProfit7 = 0;
input double            Lots7 = 0.1;
input int           Slippage7 = 30;

input string            Symb8 = "GBPCHF";
input  bool            Trade8 = false;
input int                Per8 = 100;
input ENUM_APPLIED_PRICE ApPrice8 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod8    = MODE_SMA;
input int             StLoss8 = 0;
input int           TkProfit8 = 0;
input double            Lots8 = 0.1;
input int           Slippage8 = 30;

input string            Symb9 = "GBPUSD";
input  bool            Trade9 = true;
input int                Per9 = 50;
input ENUM_APPLIED_PRICE ApPrice9 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod9    = MODE_SMA;
input int             StLoss9 = 0;
input int           TkProfit9 = 0;
input double            Lots9 = 1;
input int           Slippage9 = 30;

input string            Symb10 = "GBPJPY";
input  bool            Trade10 = false;
input int                Per10 = 100;
input ENUM_APPLIED_PRICE ApPrice10 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod10    = MODE_SMA;
input int             StLoss10 = 0;
input int           TkProfit10 = 0;
input double            Lots10 = 0.1;
input int           Slippage10 = 30;

input string            Symb11 = "EURJPY";
input  bool            Trade11 = false;
input int                Per11 = 100;
input ENUM_APPLIED_PRICE ApPrice11 = PRICE_CLOSE;
input ENUM_MA_METHOD MaMethod11    = MODE_SMA;
input int             StLoss11 = 0;
input int           TkProfit11 = 0;
input double            Lots11 = 0.1;
input int           Slippage11 = 30;

bool TradeSignalCounter(int Number,
                        string Symbol_,
                        bool Trade,
                        int period,
                        ENUM_APPLIED_PRICE ApPrice,
                        ENUM_MA_METHOD MaMethod,
                        bool &UpSignal[],
                        bool &DnSignal[],
                        bool &UpStop[],
                        bool &DnStop[])
  {

   if(!Trade)return(true);

   static int Size_=0;

   static int Handle[];

   static int Recount[],MinBars[];
   double SMA[4],dsma1,dsma2;

   if(Number+1>Size_) // ???? ? ???? ????????????? ?????? ?? ?????? ??????
     {
      Size_=Number+1; // ??? ????? ?????? ???? ? ???? ??????

      ArrayResize(Handle,Size_);
      ArrayResize(Recount,Size_);
      ArrayResize(MinBars,Size_);

      ArrayInitialize(Handle,0);
      ArrayInitialize(Recount,0);
      ArrayInitialize(MinBars,0);

      MinBars[Number]=3*period;

      DnSignal[Number] = false;
      UpSignal[Number] = false;
      DnStop  [Number] = false;
      UpStop  [Number] = false;

      ArraySetAsSeries(SMA,true);

      Handle[Number]=iMA(Symbol_,0,period,0,MODE_SMA,ApPrice);
     }

   if(Bars(Symbol_,0)<MinBars[Number])return(true);

   if(IsNewBar(Number,Symbol_,0) || Recount[Number]) // ???? ? ???? ?? ????? ???? ??? ??? ????????? ??????????? ??????
     {
      DnSignal[Number] = false;
      UpSignal[Number] = false;
      DnStop  [Number] = false;
      UpStop  [Number] = false;

      if(CopyBuffer(Handle[Number],0,0,4,SMA)<0)
        {
         Recount[Number]=true; // ??? ??? ?????? ?? ????????, ?? ??????? ????????? 

         return(false); // ??????? ?? ??????? TradeSignalCounter() ??? ????????? ???????? ????????
        }

      Recount[Number]=false; // ????? ?? ???????????? ? ???? ???? ?? ????????? ????? ????

      dsma2 = NormalizeDouble(SMA[2] - SMA[3], _Digits);      // MA ?? ??????? 2-3
      dsma1 = NormalizeDouble(SMA[1] - SMA[2], _Digits);      // MA ?? ??????? 1-2

      if(dsma2 > 0 && dsma1 > 0) DnSignal[Number] = true;    // ??????? ???? MA ?? ??????? 1-2 ? 2-3 ???????
      if(dsma2 < 0 && dsma1 < 0) UpSignal[Number] = true;    // ???????? ???? MA ?? ??????? 1-2 ? 2-3 ??????

      if(dsma1 < 0) DnStop[Number] = true;                   // ????? ???? ???? MA ?? ??????? 1-2 ??????
      if(dsma1 > 0) UpStop[Number] = true;                   // ????? ???? ???? MA ?? ??????? 1-2 ???????
     }

   return(true);
  }

bool TradePerformer(int    Number,
                    string Symbol_,
                    bool   Trade,
                    int    StLoss,
                    int    TkProfit,
                    double Lots,
                    int    Slippage,
                    bool  &UpSignal[],
                    bool  &DnSignal[],
                    bool  &UpStop[],
                    bool  &DnStop[])
  {

   if(!Trade)return(true);

   if(UpStop[Number])BuyPositionClose(Symbol_,Slippage);
   if(DnStop[Number])SellPositionClose(Symbol_,Slippage);

   if(UpSignal[Number])
      if(BuyPositionOpen(Symbol_,Slippage,Lots,StLoss,TkProfit))
         UpSignal[Number]=false; //?? ???? ???? ?????? ????? ????????? ??????? ?? ?????!

   if(DnSignal[Number])
      if(SellPositionOpen(Symbol_,Slippage,Lots,StLoss,TkProfit))
         DnSignal[Number]=false; //?? ???? ???? ?????? ????? ????????? ??????? ?? ?????!

   return(true);
  }

bool BuyPositionOpen(const string symbol,
                     ulong deviation,
                     double volume,
                     int StopLoss,
                     int Takeprofit)
  {

   MqlTradeRequest request;
   MqlTradeResult result;
   ZeroMemory(request);
   ZeroMemory(result);

   if(!PositionSelect(symbol))
     {

      request.type   = ORDER_TYPE_BUY;
      request.price  = SymbolInfoDouble(symbol, SYMBOL_ASK);
      request.action = TRADE_ACTION_DEAL;
      request.symbol = symbol;
      request.volume = Money_M();
      request.sl = 0;
      request.tp = 0;
      request.deviation=(deviation==ULONG_MAX) ? deviation : deviation;
      request.type_filling=ORDER_FILLING_FOK;

      string word="";
      StringConcatenate(word,
                        "<<< ============ BuyPositionOpen():   ????????? Buy ??????? ?? ",
                        symbol," ============ >>>");
      Print(word);

      if(!OrderSend(request,result) || result.deal==0)
        {
         Print(ResultRetcodeDescription(result.retcode));
         return(false);
        }
     }

   return(true);
  }

bool SellPositionOpen(const string symbol,
                      ulong deviation,
                      double volume,
                      int StopLoss,
                      int Takeprofit)
  {

   MqlTradeRequest request;
   MqlTradeResult result;
   ZeroMemory(request);
   ZeroMemory(result);

   if(!PositionSelect(symbol))
     {

      request.type   = ORDER_TYPE_SELL;
      request.price  = SymbolInfoDouble(symbol, SYMBOL_BID);
      request.action = TRADE_ACTION_DEAL;
      request.symbol = symbol;
      request.volume = Money_M();
      request.sl = 0;
      request.tp

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

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

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

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

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

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

Стоимость полного кода
1 343,90₽ ≈ $16.43