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

SuppResZZTrader

suppreszztrader@lifeindreamsworld.mq4

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

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговsma crossover scalper ea for mt4.mq4MQL4 / MetaTrader 4 · 1 общих теговr15 pivot points expert advisor by @fundedmillionairess.mq4MQL4 / MetaTrader 4 · 1 общих теговnewstrader.mq5MQL5 / MetaTrader 5 · 1 общих теговmm3.0_flip_codepro_v3.1_with_cooldown@lifeindreamsworld.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

SuppResZZTrader — это торговый советник для MetaTrader 4, рассчитанный на работу с парой EURUSD на часовом графике. Советник формирует уровни поддержки и сопротивления на основе индикатора ZigZag и анализирует их в сочетании с полосами Боллинджера, стандартным отклонением, скользящей средней и индикатором ADX.

При выполнении условий для покупки или продажи советник открывает рыночные ордера Buy или Sell с заданными параметрами управления капиталом. Доступны настройки тейк-профита, стоп-лосса, трейлинг-стопа и лимитов на количество открытых ордеров.

Советник обрабатывает события OnTick: отслеживает начало нового бара для оценки торговых сигналов, управляет трейлинг-стопом на каждом тике, а также закрывает позиции при появлении нового триггера или разворачивающегося паттерна. Действия ограничены заданным временным окном торговли.

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

НастройкаОписание
MagicNumber Магический номер — Магический номер для идентификации ордеров данного советника.
Close Trade by New Trigger (CloseTrade) Закрытие сделки по новому триггеру — Переключатель автоматического закрытия позиции при появлении нового триггера.
Close Trade: Prof Type (0:all,1:pos,2:neg) (ProfitTypeClTrd) Тип прибыли при закрытии — Тип прибыли при закрытии: 0 — все позиции, 1 — только прибыльные, 2 — только убыточные.
N1 Разделитель триггеров — Текстовый разделитель группы данных для триггеров покупки/продажи.
Boll Band Lower Limit (BBSprd_LwLim) Нижний предел полос Боллинджера — Нижний предел спреда полос Боллинджера для фильтра триггера.
Boll Band Upper Limit (BBSprd_UpLim) Верхний предел полос Боллинджера — Верхний предел спреда полос Боллинджера для фильтра триггера.
ZigZag Depth (ExtDepth) Глубина ZigZag — Глубина поиска экстремумов для ZigZag.
ZigZag Deviation (ExtDeviation) Отклонение ZigZag — Допустимое отклонение в пунктах для экстремумов ZigZag.
ZigZag BacdkStp (ExtBackstep) Откаты ZigZag — Количество баров для откатов при построении ZigZag.
Min Bars in ZZ Segment (ProcBars_Min) Мин. баров в сегменте ZigZag — Минимальное количество баров в сегменте ZigZag для допуска к торговле.
SMA Period (SMAPer) Период SMA — Период скользящей средней для определения уровней поддержки и сопротивления.
Std Dev Period (SigPer) Период стандартного отклонения — Период расчёта стандартного отклонения.
Std Dev Upper Limit (SigLim) Лимит стандартного отклонения — Верхний предел стандартного отклонения для фильтра сигнала.
Period ADX (ADX_Per) Период ADX — Период расчёта индикатора ADX.
ADX Lim (Min Lvl) (ADX_Lim) Лимит ADX — Минимальное значение индикатора ADX для допуска к торговле (фильтр тренда).
Trade Entry Hour (0, ... 23) (entryhour) Час входа в торговлю — Час начала торговли (от 0 до 23).
Trade Duration Hours (12.. 23) (openhours) Продолжительность торгового окна — Продолжительность торгового окна в часах.
N2 Разделитель управления капиталом — Текстовый разделитель группы параметров управления капиталом.
Lots Размер лота — Размер лота для открытия позиции.
TakeProfit Тейк-профит — Уровень тейк-профита в пунктах для открытой позиции.
StopLoss Стоп-лосс — Уровень стоп-лосса в пунктах для открытой позиции.
TrailingStop Трейлинг-стоп — Расстояние трейлинг-стопа в пунктах для управления открытыми позициями.
N3 Разделитель лимитов ордеров — Текстовый разделитель группы лимитов количества ордеров.
Max Open Orders this Symbol (NumOpenOrders) Макс. открытых ордеров на символ — Максимальное количество открытых ордеров на данный символ.
Max Open Orders All Symbols (TotOpenOrders) Макс. открытых ордеров всего — Максимальное общее количество открытых ордеров по всем символам.
Получить полный код

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

#property strict
#define   NAME		  "SuppResZZTrader" 

#include <WinUser32.mqh>

double       PipValue;
int          magic_number;
double       _point,_bid,_ask,_spread,_Low,_High,_close,_open;
int          _digits;
string       _symbol;
int          slpg=3;
double       MULT;

input int         MagicNumber=123456; //

input bool        CloseTrade=true;   // Close Trade by New Trigger
input int         ProfitTypeClTrd=1; // Close Trade: Prof Type (0:all,1:pos,2:neg)

int         BBPeriod    =   20;      // Boll Band Period
double      BBSigma     =  2.0;      // Boll Band Sigma
input string      N1=" --------- Buy/Sell Trigger Data ----------";

input double      BBSprd_LwLim   =  25.;  // Boll Band Lower Limit
input double      BBSprd_UpLim   =  70.;  // Boll Band Upper Limit

extern int        ExtDepth       = 14;  // ZigZag Depth
extern int        ExtDeviation   =  7;  // ZigZag Deviation
extern int        ExtBackstep    =  8;  // ZigZag BacdkStp
extern int        ProcBars_Min   =  8;  // Min Bars in ZZ Segment

input int         SMAPer= 7; // SMA Period 

input int         SigPer     =  30;     // Std Dev Period
input double      SigLim     =  1.38;   // Std Dev Upper Limit

input int         ADX_Per   =  10;    // Period ADX
input double      ADX_Lim   =  24.;   // ADX Lim (Min Lvl)

input int         entryhour  =  5;     // Trade Entry Hour (0, ... 23)
input int         openhours  = 20;     // Trade Duration Hours (12.. 23)

input string      N2=" --------- Money__Management ----------";
input double      Lots          =  0.01;
input double      TakeProfit    =  200.;
input double      StopLoss      =  125.;
input double      TrailingStop  =   55.;

input string      N3=" ------- Order Number Limits ----------";
input int         NumOpenOrders = 1; // Max Open Orders this Symbol
input int         TotOpenOrders = 8; // Max Open Orders All Symbols

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

void OnDeinit(const int reason)
  {
   Print(" Active Symbol  ",Symbol(),"  Period ",Period()," pip value ",PipValue);
   Print(" Broker Factor*_point =   ",_point*MULT,"  _point =  ",100000.*_point);

   return;
  }//------------------------------------------------------------------

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

void SupResTrigger(bool &buysig,bool &sellsig)
  {

   double ADX1_Val;
   double BB_Spread;
   double Sigma[10]={10*0.};
   double SMA1_Hi,SMA1_Lo;
   double ResVal,SupVal;
   double zzArray[100];
   int Proc_BarsMin=4;
   int jj;
   int BarSel,EndBar,ProcBars;
   int limit = 90;

   buysig  = false;
   sellsig = false;
   EndBar=0;

   BB_Spread=(iBands(_symbol,0,BBPeriod,BBSigma,0,PRICE_CLOSE,MODE_UPPER,1) -
              iBands(_symbol,0,BBPeriod,BBSigma,0,PRICE_CLOSE,MODE_LOWER,1))/(MULT*_point);

   ADX1_Val=iADX(_symbol,0,ADX_Per,PRICE_CLOSE,MODE_MAIN,1);

   if(BB_Spread<BBSprd_LwLim || BB_Spread>BBSprd_UpLim || ADX1_Val < ADX_Lim) return;

   for(jj=0;jj<5;jj++)
     {
      Sigma[jj]=1000.*iStdDev(_symbol,0,SigPer,0,MODE_SMA,PRICE_HIGH,1+jj);
     }

   FunZigZag(limit,ExtDepth,ExtDeviation,ExtBackstep,zzArray);
   for(jj=0; jj<limit; jj++)
    {

     if(zzArray[jj+1]>0.01 && jj>Proc_BarsMin-1)
      {
       EndBar=jj+1;
       break;
      }
    }

   ProcBars=EndBar; // total bars to process
   if(ProcBars<ProcBars_Min) return;
   BarSel=1; // use close of last bar
   GetSupRes(ProcBars,BarSel,SupVal,ResVal);

   SMA1_Hi=iMA(_symbol,0,SMAPer,0,MODE_SMA,PRICE_HIGH,1 );  // high
   SMA1_Lo=iMA(_symbol,0,SMAPer,0,MODE_SMA,PRICE_LOW, 1 );  // low

   if(SMA1_Hi>ResVal && Sigma[0]<SigLim && Sigma[0]>Sigma[1]) buysig=true;
   if(SMA1_Lo<SupVal && Sigma[0]<SigLim && Sigma[0]>Sigma[1]) sellsig=true;
   return;
  }

void GetSupRes(int ProcBars,int BarSel,double &SupVal,double &ResVal)
  {

   double MM,BBS,BBR,ResBarVal,SupBarVal;
   int TotBars,BarSup,BarRes,StartBar;
   StartBar=1;
   TotBars = ProcBars+StartBar-1;

   MM=(iClose(NULL,0,TotBars)-iClose(NULL,0,StartBar))/ProcBars; // slope

   BarRes=Highest(NULL,0,MODE_HIGH,TotBars,StartBar);
   ResBarVal=iHigh(NULL,0,BarRes);
   BBR = ResBarVal-MM*BarRes;  // Res line intercept
   ResVal = MM*BarSel+BBR;     // compute value of Resistance at last closed bar

   BarSup=Lowest(NULL,0,MODE_LOW,TotBars,StartBar);
   SupBarVal=iLow(NULL,0,BarSup);
   BBS = SupBarVal-MM*BarSup; // Supp line intercept
   SupVal = MM*BarSel+BBS;    // compute value of Support at last closed bar
   return;
  }

bool CheckMoneyForTrade(string symb,double &olots,int type)
  {

   if( olots<NormalizeDouble(MarketInfo(NULL,MODE_MINLOT),2) ){ olots=NormalizeDouble(MarketInfo(NULL,MODE_MINLOT),2); }
   if( olots>NormalizeDouble(MarketInfo(NULL,MODE_MAXLOT),2) ){ olots=NormalizeDouble(MarketInfo(NULL,MODE_MINLOT),2); }

   double free_margin=AccountFreeMarginCheck(symb,type,olots);

   if(free_margin<=0.)
     {
      string oper=(type==OP_BUY)? "Buy":"Sell";
      Print("** Not enough money for ",oper," ",olots," ",symb," Error code=",GetLastError());
      Print(" Account Margin ",AccountMargin(),"  Free Margin ",AccountFreeMargin());
      return(false);
     }

   return(true);
  }

int GetOpnTrdType()

  {
   int cnt,total,TrdType;
   total=OrdersTotal();
   TrdType= 0;
   for(cnt=0;cnt<total;cnt++)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==_symbol && OrderMagicNumber()==magic_number)
           {
            if(OrderType()==OP_SELL ) TrdType=2;
            if(OrderType()==OP_BUY  ) TrdType=1;
            break;
           }
        }
     }
   return(TrdType);
  }

bool HourRange(int hour_current,int lentryhour,int lopenhours)

  {
   bool Hour_Test;
   int closehour;
   bool wrap;

   Hour_Test=true;
   wrap=false;
   closehour=lentryhour+lopenhours;
   if(closehour>23)wrap=true;
   closehour=int(MathMod((closehour),24));
   if( wrap && (hour_current<lentryhour && hour_current >closehour))  Hour_Test=false;
   if(!wrap && (hour_current<lentryhour || hour_current >closehour))  Hour_Test=false;

   return(Hour_Test);
  }

void OpenOrder(int tr_entry,double Ord_Lots,double Stop_Loss,double Take_Profit,string New_Comment,int Num_OpenOrders)

  {
   int total_EA,total,Mag_Num,trade_result,cnt;
   double tp_norm,sl_norm;
   string NetString;

   total_EA=0;
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderType()<=OP_SELL)
         total_EA=total_EA+1;
     } // loop
   if(total_EA>=TotOpenOrders) return; // max number of open orders allowed( all symbols)

   total_EA=0;
   for(cnt=0;cnt<total;cnt++)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false) break;
      Mag_Num=OrderMagicNumber();
      if(OrderType()<=OP_SELL && OrderSymbol()==_symbol && Mag_Num==magic_number)
         total_EA=total_EA+1;
     } //----   loop  -------

   if(total_EA<Num_OpenOrders) // open new order if below OpenOrder limit
     {
      if(tr_entry==1) //Open a Buy Order
        {
         sl_norm = NormalizeDouble(_ask - Stop_Loss*MULT*_point, _digits);
         tp_norm = NormalizeDouble(_ask + Take_Profit*MULT*_point, _digits);
         trade_result=Buy_Open(Ord_Lots,sl_norm,tp_norm,magic_number,New_Comment);
         if(trade_result<0)
            return;

        } // ---  end of tr_entry = 1 --------------------------------
      if(tr_entry==2) // Open a Sell Order
        {
         sl_norm = NormalizeDouble((_bid + Stop_Loss*MULT*_point), _digits);
         tp_norm = NormalizeDouble((_bid - Take_Profit*MULT*_point),_digits);
         trade_result=Sell_Open(Ord_Lots,sl_norm,tp_norm,magic_number,New_Comment);
         if(trade_result<0)
            return;
        } // ------------------  end tr_entry = 2

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

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

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

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

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

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

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