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

sma_multihdege2.mq4

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

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

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

О программе

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

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

НастройкаОписание
TradeAllowed Разрешить торговлю — Разрешение на совершение торговых операций. При значении false советник не открывает и не закрывает позиции
periodSMA Период SMA — Период простой скользящей средней SMA, используемой для определения направления тренда базового символа
cPeriod Период корреляции — Период расчёта скользящей средней, используемой для определения корреляции между символами
BaseSymbol Базовый символ — Базовый торговый символ, по которому анализируется тренд и открываются основные позиции
AutoLot Авто лот — Автоматический расчёт размера лота на основе заданного риска от базового капитала счёта
MMBase Основание управления капиталом — Основание для расчёта размера позиции: 1 — баланс, 2 — эквити, 3 — свободный маржинал
10% by default (MaxRisk) Максимальный риск — Максимальный риск в процентах от выбранного основания капитала при автоматическом расчёте лота
HedgeH1 Хедж 1 — Включение или отключение первой хедж-сессии с соответствующим символом
HedgeH2 Хедж 2 — Включение или отключение второй хедж-сессии с соответствующим символом
HedgeH3 Хедж 3 — Включение или отключение третьей хедж-сессии с соответствующим символом
MagicNo Магический номер — Уникальный номер магического идентификатора ордеров для группировки позиций советника
ShowStatus Показывать статус — Отображение текущего баланса, эквити и информации о хедж-позициях в комментарии на графике
PlayAudio Воспроизведение звука — Воспроизведение звуковых уведомлений при открытии и закрытии позиций
Получить полный код

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

#include <stdlib.mqh>

extern bool    TradeAllowed               = false;
extern string  _........SMA.Zone.........="________________________________";
extern int       periodSMA                = 20;
extern string  _........CorRelation.......="________________________________";
extern int       cPeriod                  = 20;
extern string  _........................._="________________________________";
extern string  BaseSymbol                 = "GBPUSD";
extern bool    AutoLot                    = false;
extern int     MMBase                     = 3;
extern double  MaxRisk                    = 0.1;// 10% by default
extern double  Not.AutoLot.LotSize        = 0.1;
extern string  _........Hedge.Symbol......="________________________________";
extern bool    HedgeH1                    = true;
extern string  H1.Symbol                  = "EURUSD";
extern bool    H1.followBase              = false;
extern double  H1.LotsRatio               = 2;
extern double  H1.Expect.CorRelation      = 0.88;
extern string  _._._._._._._._._._._._._._="________________________________";
extern bool    HedgeH2                    = true;
extern string  H2.Symbol                  = "USDCHF";
extern bool    H2.followBase              = true;
extern double  H2.LotsRatio               = 1.5;
extern double  H2.Expect.CorRelation      = -0.90;
extern string  _.._.._.._.._.._.._.._.._.._="________________________________";
extern bool    HedgeH3                    = false;
extern string  H3.Symbol                  = "USDJPY";
extern bool    H3.followBase              = true;
extern double  H3.LotsRatio               = 2;
extern double  H3.Expect.CorRelation      = -0.90;
extern string  _.__.__.__.__.__.__.__.__.__="________________________________";
extern double     Expect.Profit           = 30;
extern int        MagicNo                 = 111;                 
extern bool       ShowStatus              = true;
extern bool       PlayAudio               = false;

int BaseSP, 
    H1.SP, 
    H2.SP, 
    H3.SP, 
    BaseOP = -1,
    H1.OP = -1, 
    H2.OP = -1, 
    H3.OP = -1, 
    up;
double Lot,
       BaseOpen,
       H1.Open, H2.Open, H3.Open,
       BaseLots,
       H1.Lots, H2.Lots, H3.Lots,
       Baseswapshort,
       Baseswaplong,
       H1.swapshort, H2.swapshort, H3.swapshort,
       H1.swaplong, H2.swaplong, H3.swaplong,
       H1.Correlation,
       H2.Correlation,
       H3.Correlation,
       LotSize,
       TP2Close;
bool SResult = false, BResult = false, H1.profitswap, H2.profitswap, H3.profitswap;
bool SwapMode = true;
string H1.string = "", H2.string = "", H3.string = "", OrdComment = "";

int init()
  {
      // код доступен только после оплаты
   }

int start()
  {
      // код доступен только после оплаты
   }
   LotSize = Not.AutoLot.LotSize;
   TP2Close = Expect.Profit;

   if(SMA(0) > SMA(1) && SMA(1) > SMA(2))    
       up = 1;
   else 
       if(SMA(0) < SMA(1) && SMA(1) < SMA(2))
           up = -1;
       else 
           up= 0;

   if(AutoLot)
     {
       BaseLots = Lots(BaseSymbol, MaxRisk) ;
       H1.Lots = Lots(H1.Symbol, MaxRisk*H1.LotsRatio);
       H2.Lots = Lots(H2.Symbol, MaxRisk*H2.LotsRatio);
       H3.Lots = Lots(H3.Symbol, MaxRisk*H3.LotsRatio);
     }
   else
     {
       BaseLots = LotSize;
       H1.Lots = NormalizeDouble(LotSize*H1.LotsRatio, 1);
       H2.Lots = NormalizeDouble(LotSize*H2.LotsRatio, 1);
       H3.Lots = NormalizeDouble(LotSize*H3.LotsRatio, 1);
     }
   BaseSP = MarketInfo(BaseSymbol, MODE_SPREAD);

   if(BaseSP == 0)
       BaseSP = MathRound((MarketInfo(BaseSymbol, MODE_ASK) -
                          MarketInfo(BaseSymbol, MODE_BID)) / 
                          MarketInfo(BaseSymbol, MODE_POINT));

   if(up == 1) 
     {
       BaseOP = OP_BUY; 
       BaseOpen = MarketInfo(BaseSymbol, MODE_ASK);
     }

   if(up == -1)
     {
       BaseOP = OP_SELL;
       BaseOpen = MarketInfo(BaseSymbol, MODE_BID);
     }

   if(H1.Symbol != "" && HedgeH1)
     {
       H1.Correlation = Cor(BaseSymbol, H1.Symbol);
       H1.SP = MarketInfo(H1.Symbol, MODE_SPREAD);

       if(H1.SP == 0)
           H1.SP = MathRound((MarketInfo(H1.Symbol, MODE_ASK) -
                             MarketInfo(H1.Symbol, MODE_BID)) /
                             MarketInfo(H1.Symbol, MODE_POINT));                

       if(H1.Expect.CorRelation > 0 && H1.Correlation >= H1.Expect.CorRelation)
           bool H1.meetCor = true;
       else 
           if(H1.Expect.CorRelation < 0 && H1.Correlation <= H1.Expect.CorRelation)
               H1.meetCor = true;
       else 
           H1.meetCor = false;

       if(up == 1)// base long
         {

           if(H1.followBase) // H.long
             {
               H1.OP = OP_BUY; 
               H1.Open = MarketInfo(H1.Symbol, MODE_ASK);
               H1.profitswap = (((Baseswaplong*BaseLots) + (H1.swaplong*H1.Lots)) > 0);
             }
           else  // H.short
             {
               H1.OP = OP_SELL; 
               H1.Open = MarketInfo(H1.Symbol, MODE_BID);
               H1.profitswap = (((Baseswaplong*BaseLots) + (H1.swapshort*H1.Lots)) > 0);
             }
         }

       if(up == -1) // base short
         {

           if(H1.followBase) // H.short
             {
               H1.OP = OP_SELL; 
               H1.Open = MarketInfo(H1.Symbol, MODE_BID);
               H1.profitswap = (((Baseswaplong*BaseLots) + (H1.swapshort*H1.Lots)) > 0);
             }
           else            //H.long
             {
               H1.OP = OP_BUY; 
               H1.Open = MarketInfo(H1.Symbol, MODE_ASK);
               H1.profitswap = (((Baseswaplong*BaseLots) + (H1.swaplong*H1.Lots)) > 0);
             }
         }
       H1.string = "\n--------------------------------"
                   + "\n" + BaseSymbol + "->" + Val2String(BaseOP)
                   + " ~ " + H1.Symbol + "->" + Val2String(H1.OP)
                   + "\n" + BaseSymbol + "->" + DoubleToStr(BaseLots, 2)
                   + " ~ " + H1.Symbol + "->" + DoubleToStr(H1.Lots, 2)
                   + "\nFollow Base : " + bool2string(H1.followBase)
                   + "\nRaito : " + DoubleToStr(H1.LotsRatio, 2)
                   + "\nMagic No. : " + MagicNo
                   + "\nCur Correlation : " + DoubleToStr(H1.Correlation, 2)
                   + "\n" + "Expected Correlation : " + DoubleToStr(H1.Expect.CorRelation, 2)
                   + "\nOverAllProfit : " + DoubleToStr(TotalSwapnProfit(MagicNo), 2)
                   + "\nExpected : $" + DoubleToStr(TP2Close, 2);

     }
   else
       H1.string = "";

   if(H2.Symbol != "" && HedgeH2)
     {
       H2.Correlation = Cor(BaseSymbol, H2.Symbol);
       H2.SP = MarketInfo(H2.Symbol, MODE_SPREAD);

       if(H2.SP == 0)
           H2.SP = MathRound((MarketInfo(H2.Symbol, MODE_ASK) -
                             MarketInfo(H2.Symbol, MODE_BID)) /
                             MarketInfo(H2.Symbol, MODE_POINT));

       if(H2.Expect.CorRelation > 0 && H2.Correlation >= H2.Expect.CorRelation)
           bool H2.meetCor = true;
       else 
           if(H2.Expect.CorRelation < 0 && H2.Correlation <= H2.Expect.CorRelation)
               H2.meetCor = true;
       else 
           H2.meetCor = false;

       if(up == 1) // base long
         {
           if(H2.followBase) // H.long
             {
               H2.OP = OP_BUY; 
               H2.Open = MarketInfo(H2.Symbol, MODE_ASK);
               H2.profitswap = (((Baseswaplong*BaseLots) + (H2.swaplong*H2.Lots)) > 0);
             }
           else  // H.short
             {
               H2.OP = OP_SELL; 
               H2.Open = MarketInfo(H2.Symbol, MODE_BID);
               H2.profitswap = (((Baseswaplong*BaseLots) + (H2.swapshort*H2.Lots)) > 0);
             }
         }

       if(up == -1) // base short
         {
           if(H2.followBase) // H.short
             {
               H2.OP = OP_SELL; 
               H2.Open = MarketInfo(H2.Symbol, MODE_BID);
               H2.profitswap = (((Baseswaplong*BaseLots) + (H2.swapshort*H2.Lots)) > 0);
             }
           else  // H.long
             {
               H2.OP = OP_BUY; 
               H2.Open = MarketInfo(H2.Symbol, MODE_ASK);
               H2.profitswap = (((Baseswaplong*BaseLots) + (H2.swaplong*H2.Lots)) > 0);
             }
         }
       H2.string = "\n--------------------------------"
                   + "\n" + BaseSymbol + "->" + Val2String(BaseOP)
                   + " ~ " + H2.Symbol+"->" + Val2String(H2.OP)
                   + "\n" + BaseSymbol+"->" + DoubleToStr(BaseLots, 2)
                   + " ~ " + H2.Symbol + "->" + DoubleToStr(H2.Lots, 2)
                   + "\nFollow Base : " + bool2string(H2.followBase)
                   + "\nRaito : " + DoubleToStr(H2.LotsRatio, 2)
                   + "\nMagic No. : " + DoubleToStr(MagicNo+1, 0)
                   + "\nCur Correlation : " + DoubleToStr(H2.Correlation, 2)
                   + "\n" + "Expected Correlation : " + DoubleToStr(H2.Expect.CorRelation, 2)
                   + "\nOverAllProfit : " + DoubleToStr(TotalSwapnProfit(MagicNo + 1), 2)
                   + "\nExpected : $" + DoubleToStr(TP2Close, 2);
     }
   else
     {
       H2.string = "";
     }

   if(H3.Symbol != "" && HedgeH3)
     {
       H3.Correlation = Cor(BaseSymbol, H3.Symbol);
       H3.SP = MarketInfo(H3.Symbol, MODE_SPREAD);

       if(H3.SP == 0)
           H3.SP = MathRound((MarketInfo(H3.Symbol, MODE_ASK) -
                             MarketInfo(H3.Symbol, MODE_BID)) /
                             MarketInfo(H3.Symbol, MODE_POINT));

       if(H3.Expect.CorRelation > 0 && H3.Correlation >= H3.Expect.CorRelation)
           bool H3.meetCor = true;
       else 
           if(H3.Expect.CorRelation < 0 && H3.Correlation <= H3.Expect.CorRelation)
               H3.meetCor = true;
           else
               H3.meetCor = false;

       if(up == 1) // base long
         {
           if(H3.followBase) // H.long
             {
               H3.OP = OP_BUY; 
               H3.Open = MarketInfo(H3.Symbol, MODE_ASK);
               H3.profitswap = (((Baseswaplong*BaseLots) + (H3.swaplong*H3.Lots)) > 0);
             }
           else   // H.short
             {
               H3.OP = OP_SELL; 
               H3.Open = MarketInfo(H3.Symbol, MODE_BID);
               H3.profitswap = (((Baseswaplong*BaseLots) + (H3.swapshort*H3.Lots)) > 0);
             }
         }
       if(up == -1) // base short
         {
           if(H3.followBase) // H.short
             {
               H3.OP = OP_SELL; 
               H3.Open = MarketInfo(H3.Symbol, MODE_BID);
               H3.profitswap = (((Baseswaplong*BaseLots) + (H3.swapshort*H3.Lots)) > 0);
             }
           else  // H.long
             {
               H3.OP = OP_BUY; 
               H3.Open = MarketInfo(H3.Symbol, MODE_ASK);
               H3.profitswap = (((Baseswaplong*BaseLots) + (H3.swaplong*H3.Lots)) > 0);
             }
         }
       H3.string = "\n--------------------------------"
   

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

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

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

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

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

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

Стоимость полного кода
1 317₽ ≈ $16.10