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

EA Pyramid

ea pyramid 7.mq4
Вы автор или правообладатель?

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

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

О программе

EA Pyramid — торговый советник для MetaTrader 4, реализующий стратегию пирамидирования и усреднения позиций на основе полос Боллинджера. Советник открывает и управляет ордерами BUY/SELL с настраиваемыми уровнями фиксации прибыли и стоп-лосса, а также скользящим стопом. Поддерживаются два режима управления лотами: арифметическое усреднение и умножение.

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

НастройкаОписание
_ Разделитель — Разделитель группы настроек основной конфигурации.
Nombre (Name) Имя советника — Имя советника, используемое в комментариях ордеров.
MagicNumber Магический номер — Уникальный идентификатор ордеров для фильтрации.
StartingLots Начальный лот — Начальный объём позиции в лотах.
EnableMoneyManagment Включить управление капиталом — Включает/отключает управление денежными средствами с расчётом лотов на баланс.
USD_PerMicroLot USD за микролот — Стоимость одного микролота в долларах для расчёта лотов при управлении капиталом.
________ Разделитель — Разделитель группы настроек пирамиды.
EnablePyramid Включить пирамидирование — Включает/отключает режим пирамидирования позиций.
P_Grid_Pips Сетка пирамиды (пипсы) — Шаг сетки пирамидирования в пипсах.
TakeProfitMode Режим тейк-профита — Режим установки тейк-профита: фиксированные пипсы, ATR или полосы Боллинджера.
TakeProfitPips Тейк-профит (пипсы) — Расстояние тейк-профита в пипсах в фиксированном режиме.
TakeProfitATR Тейк-профит (ATR) — Множитель ATR для расчёта тейк-профита в ATR-режиме.
StopLossMode Режим стоп-лосса — Режим установки стоп-лосса: фиксированные пипсы, ATR или полосы Боллинджера.
StopLossPips Стоп-лосс (пипсы) — Расстояние стоп-лосса в пипсах в фиксированном режиме.
StopLossATR Стоп-лосс (ATR) — Множитель ATR для расчёта стоп-лосса в ATR-режиме.
TrailingStopMode Режим скользящего стопа — Режим скользящего стопа: фиксированные пипсы или ATR.
TrailingStopPips Скользящий стоп (пипсы) — Расстояние скользящего стопа в пипсах в фиксированном режиме.
TrailingStopATR Скользящий стоп (ATR) — Множитель ATR для расчёта скользящего стопа в ATR-режиме.
_________ Разделитель — Разделитель группы настроек усреднения.
EnableAverage Включить усреднение — Включает/отключает режим усреднения позиций.
A_Lot_Mode Режим лота (усреднение) — Режим расчёта лота при усреднении: арифметическое сложение или умножение.
A_Multiplier Множитель лота — Множитель лота при усреднении в режиме умножения.
A_Grid_Mode Режим сетки (усреднение) — Режим измерения сетки усреднения: пипсы или ATR.
A_Grid_Pips Сетка пипсов (усреднение) — Шаг сетки усреднения в пипсах.
A_Grid_ATR Сетка ATR (усреднение) — Шаг сетки усреднения в единицах ATR.
A_Takeprofit Тейк-профит (усреднение) — Количество пипсов для фиксации прибыли при усреднении.
__ Разделитель — Разделитель группы настроек полос Боллинджера.
BB_Period Период Боллинджера — Период расчёта индикатора полос Боллинджера.
BB_Deviation Отклонение Боллинджера — Отклонение стандартного отклонения для индикатора полос Боллинджера.
BB_Shift Сдвиг Боллинджера — Сдвиг индикатора полос Боллинджера в барах.
BB_Price Цена Боллинджера — Применяемая цена для расчёта полос Боллинджера.
_____ Разделитель — Разделитель группы настроек ATR.
ATR_Period Период ATR — Период расчёта индикатора Average True Range для определения волатильности.
______ Разделитель — Разделитель группы настроек фильтров.
Slipage Проскальзывание — Допустимое проскальзывание в пунктах при открытии ордеров.
Spread Максимальный спред — Максимально допустимый спред в пунктах для открытия позиций.
MinEquity Минимальный капитал — Минимальный допустимый уровень собственного капитала для продолжения торговли.
StartingHour1 Начало сессии 1 — Время начала первой торговой сессии (по серверу).
EndingHour1 Конец сессии 1 — Время окончания первой торговой сессии (по серверу).
StartingHour2 Начало сессии 2 — Время начала второй торговой сессии (по серверу).
EndingHour2 Конец сессии 2 — Время окончания второй торговой сессии (по серверу).
EnableMonday Торговля в понедельник — Разрешает торговлю в понедельник.
EnableTuesday Торговля во вторник — Разрешает торговлю во вторник.
EnableWednesday Торговля в среду — Разрешает торговлю в среду.
EnableThursday Торговля в четверг — Разрешает торговлю в четверг.
EnableFriday Торговля в пятницу — Разрешает торговлю в пятницу.
_______ Разделитель — Разделитель группы настроек фильтра тренда.
EnableTrendFilter Включить фильтр тренда — Включает/отключает фильтр тренда на основе скользящих средних.
T_Period1 Период MA 1 — Период первой скользящей средней фильтра тренда.
T_Period2 Период MA 2 — Период второй скользящей средней фильтра тренда.
T_Period3 Период MA 3 — Период третьей скользящей средней фильтра тренда.
T_Shift Сдвиг фильтра тренда — Сдвиг скользящих средних фильтра тренда в барах.
T_Method Метод скользящей средней — Метод расчёта скользящей средней для фильтра тренда.
T_AppliedPrice Цена фильтра тренда — Применяемая цена для расчёта скользящих средних фильтра тренда.
Получить полный код

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

#property version   "1.00"
#property strict

enum ENUM_STRATEGY
{
   BB_PyramidBreak   =1,
};
enum ENUM_CLOSE_1_2
{
   FixedStops1                =1,
   ATRStops1                  =2,
   MidBand                    =3,
   OpositeBand                =4,
};

enum ENUM_GRID_MODE
{
   Pips                       =1,
   ATR                        =2,
};
enum ENUM_LOTS_MODE
{
   Aritmetic                  =1,
   Multiplier                 =2,
};

enum ENUM_TP_MODE
{
   TP_Pips                    =1,
   TP_ATR                     =2,
   TP_BolligerMidBand         =3,
   TP_BollingerOppositeBand   =4,
};
enum ENUM_SL_MODE
{
   SL_Pips                    =1,
   SL_ATR                     =2,
   SL_BolligerMidBand         =3,
   SL_BollingerOppositeBand   =4,
};
enum ENUM_TS_MODE
{
   TS_Pips                    =1,
   TS_ATR                     =2,
};
input string               _                    ="===Main Configuration===";
input string               Name                 ="EA Pyramid";//Nombre
input int                  MagicNumber          =234;
ENUM_STRATEGY        Strategy             =1;
input double               StartingLots         =0.01;
input bool                 EnableMoneyManagment =0;
input double               USD_PerMicroLot      =1000;

input string               ________             ="===Pyramid Configuration===";
input bool                 EnablePyramid        =0;          
input int                  P_Grid_Pips          =100;
input ENUM_TP_MODE         TakeProfitMode       =1;
input int                  TakeProfitPips       =100;
input double               TakeProfitATR        =1.1;
input ENUM_SL_MODE         StopLossMode         =1;
input int                  StopLossPips         =100;
input double               StopLossATR          =1.3;
input ENUM_TS_MODE         TrailingStopMode     =1;
input int                  TrailingStopPips     =100;
input double               TrailingStopATR      =1.2;
input string               _________            ="===Average Configuration===";
input bool                 EnableAverage        =0;
input ENUM_LOTS_MODE       A_Lot_Mode           =1;
input double               A_Multiplier         =2;
input ENUM_GRID_MODE       A_Grid_Mode          =1;
input int                  A_Grid_Pips          =100;
input double               A_Grid_ATR           =1;
input int                  A_Takeprofit         =10;
input string               __                   ="===Bollinger Bands Configuration===";
input int                  BB_Period            =20;
input double               BB_Deviation         =2;
input int                  BB_Shift             =0;
input ENUM_APPLIED_PRICE   BB_Price             =0;

input string               _____                ="===ATR Configuration===";
input int                  ATR_Period           =14;
input string               ______               ="===Filters===";
input int                  Slipage              =3;
input int                  Spread               =50;
input double               MinEquity            =200;
input int                  StartingHour1        =0;
input int                  EndingHour1          =24;
input int                  StartingHour2        =0;
input int                  EndingHour2          =24;
input bool                 EnableMonday         =1;
input bool                 EnableTuesday        =1;
input bool                 EnableWednesday      =1;
input bool                 EnableThursday       =1;
input bool                 EnableFriday         =1;
input string               _______              ="===Trend Filter===";
input bool                 EnableTrendFilter    =0;
input int                  T_Period1            =62;
input int                  T_Period2            =200;
input int                  T_Period3            =800;
input int                  T_Shift              =0;
input ENUM_MA_METHOD       T_Method             =0;
input ENUM_APPLIED_PRICE   T_AppliedPrice       =0;

int      myaccount=1234567890;
int      myday=0;
int      mymonth=0;
int      myyear=9999;     

double   bbtop1,bbmid1,bbbot1,bbtop0,bbmid0,bbbot0,psar0,psar1,trend1,trend2,trend3,lowerprice,upperprice,lowerbuy,lowersell,upperbuy,uppersell,ATR,SOP,BOP,BBE,SBE,lots,totalbpips,totalspips,totalblots,totalslots,mytrailingb,mytrailings;
int      ticket,totalb,totals,tradingmode=2,totalba,totalbp,totalsa,totalsp,totalbpending,totalspending;
bool     startedb,starteds,closeallb=0,closealls=0,crossedb=0,crosseds=0,trading=1,enabletrailingb=0,enabletrailings=0,buyaverage=0,sellaverage=0,buypyramid=0,sellpyramid=0;

double      aLots(const int index,const int index2)
{
   int a;
   double Lots[200][2];
   if(EnableMoneyManagment==0)
   {
      Lots[0][0]=StartingLots;
      Lots[1][0]=StartingLots;
      Lots[0][1]=StartingLots;
      Lots[1][1]=StartingLots;
      for(a=2;a<200;a++)
      {
         Lots[a][0]=NormalizeDouble(Lots[a-1][0]+StartingLots,2);
         Lots[a][1]=NormalizeDouble(Lots[a-1][1]*A_Multiplier,2);
      }   
   } 
   if(EnableMoneyManagment==1)
   {
      Lots[0][0]=NormalizeDouble((AccountBalance()/USD_PerMicroLot)*0.01,2);
      Lots[1][0]=NormalizeDouble((AccountBalance()/USD_PerMicroLot)*0.01,2);
      Lots[0][1]=NormalizeDouble((AccountBalance()/USD_PerMicroLot)*0.01,2);
      Lots[1][1]=NormalizeDouble((AccountBalance()/USD_PerMicroLot)*0.01,2);
      for(a=2;a<200;a++)
      {
         Lots[a][0]=NormalizeDouble(Lots[a-1][0]+(AccountBalance()/USD_PerMicroLot)*0.01,2);
         Lots[a][1]=NormalizeDouble(Lots[a-1][1]*A_Multiplier,2);
      }   
   } 
   return(Lots[index][index2]);
}

double buylots,buyprofit,selllots,sellprofit;

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

void OnTick()
{
      // код доступен только после оплаты
   }
   if(myaccount==1234567890 || myaccount==AccountNumber())
   {
      if(myyear>Year() 
      || (myyear==Year() && mymonth>Month())
      || (myyear==Year() && mymonth==Month() && myday>=Day())
      )
      {
         ATR=iATR(NULL,0,ATR_Period,0);
         if(EnableTrendFilter==1)
         {
            trend1=iMA(NULL,0,T_Period1,T_Shift,T_Method,T_AppliedPrice,0);
            trend2=iMA(NULL,0,T_Period2,T_Shift,T_Method,T_AppliedPrice,0);
            trend3=iMA(NULL,0,T_Period3,T_Shift,T_Method,T_AppliedPrice,0);
         }
         if(Strategy==1)
         {
            bbtop0=iBands(NULL,0,BB_Period,BB_Deviation,BB_Shift,BB_Price,1,0);
            bbmid0=iBands(NULL,0,BB_Period,BB_Deviation,BB_Shift,BB_Price,0,0);
            bbbot0=iBands(NULL,0,BB_Period,BB_Deviation,BB_Shift,BB_Price,2,0);
            bbtop1=iBands(NULL,0,BB_Period,BB_Deviation,BB_Shift,BB_Price,1,1);
            bbmid1=iBands(NULL,0,BB_Period,BB_Deviation,BB_Shift,BB_Price,0,1);
            bbbot1=iBands(NULL,0,BB_Period,BB_Deviation,BB_Shift,BB_Price,2,1);
         }

         lowerbuy=9999999;
         lowersell=9999999;
         upperbuy=0;
         uppersell=0;
         totalb=0;
         totals=0;
         totalba=0;
         totalsa=0;
         totalbp=0;
         totalsp=0;
         totalbpending=0;
         totalspending=0;
         BBE=0;
         SBE=0;
         totalbpips=0;
         totalspips=0;
         totalblots=0;
         totalslots=0;
         buylots=0;
         selllots=0;
         buyprofit=0;
         sellprofit=0;
         for(int cnt=0;cnt<OrdersTotal();cnt++)
         {
            if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
               continue;
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
            {
               if(OrderType()==OP_BUY)
               {
                  buylots+=OrderLots();
                  buyprofit+=OrderProfit()+OrderCommission()+OrderSwap();
                  totalb++;
                  if(OrderOpenPrice()>upperbuy)
                     upperbuy=OrderOpenPrice();
                  if(OrderOpenPrice()<lowerbuy)
                     lowerbuy=OrderOpenPrice();
                  if(OrderOpenPrice()<BOP)
                     totalba++;
                  if(OrderOpenPrice()>BOP)
                     totalbp++;
                  totalbpips+=(Close[0]-OrderOpenPrice())*100*OrderLots();
                  totalblots+=OrderLots();
               }
               else if(OrderType()==OP_SELL)
               {
                  selllots+=OrderLots();
                  sellprofit+=OrderProfit()+OrderCommission()+OrderSwap();
                  totals++;
                  if(OrderOpenPrice()>uppersell)
                     uppersell=OrderOpenPrice();
                  if(OrderOpenPrice()<lowersell)
                     lowersell=OrderOpenPrice();
                  if(OrderOpenPrice()>SOP)
                     totalsa++;
                  if(OrderOpenPrice()<SOP)
                     totalsp++;
                  totalspips+=(OrderOpenPrice()-Close[0])*100*OrderLots();
                  totalslots+=OrderLots();
               }
            }
         }
         ObjectSetString(0,"l1",OBJPROP_TEXT,"Buy Lots: "+DoubleToStr(buylots,2));
         ObjectSetString(0,"l2",OBJPROP_TEXT,"Buy Profit: "+DoubleToStr(buyprofit,2));
         ObjectSetString(0,"l3",OBJPROP_TEXT,"Sell Lots: "+DoubleToStr(selllots,2));
         ObjectSetString(0,"l4",OBJPROP_TEXT,"Sell Profit: "+DoubleToStr(sellprofit,2));

         if(totalb>0 && buyaverage==1)
         {
            BBE=Close[0]-totalbpips/(totalblots*100);
            ObjectDelete("BBE");
            ObjectCreate( "BBE",OBJ_HLINE, 0,Time[0],BBE);
            ObjectSet("BBE", OBJPROP_COLOR,clrGreen);
            ObjectSet("BBE",OBJPROP_WIDTH,3); 

            ObjectDelete("BTP");
            ObjectCreate( "BTP",OBJ_HLINE, 0,Time[0],BBE+A_Takeprofit*Point());
            ObjectSet("BTP", OBJPROP_COLOR,clrDarkGreen);   
            ObjectSet("BTP",OBJPROP_WIDTH,3); 
         }
         else if(totalb>0 && buypyramid==1)
         {
            BBE=Close[0]-totalbpips/(totalblots*100);
            ObjectDelete("BBE");
            ObjectDelete("BTP");
            ObjectCreate( "BTP",OBJ_HLINE, 0,Time[0],lowerbuy+TakeProfitPips*Point());
            ObjectSet("BTP", OBJPROP_COLOR,clrDarkGreen);   
            ObjectSet("BTP",OBJPROP_WIDTH,3); 

         }
         else
         {
            ObjectDelete("BBE");
            ObjectDelete("BTP");
         }
         if(totals>0 && sellaverage==1)
         {
            SBE=Close[0]+totalspips/(totalslots*100);
            ObjectDelete("SBE");
            ObjectCreate( "SBE",OBJ_HLINE, 0,Time[0],SBE);
            ObjectSet("SBE", OBJPROP_COLOR,clrRed);   
            ObjectSet("SBE",OBJPROP_WIDTH,3); 
            ObjectDelete("STP");
            ObjectCreate( "STP",OBJ_HLINE, 0,Time[0],SBE-A_Takeprofit*Point());
            ObjectSet("STP", OBJPROP_COLOR,clrDarkRed);   
            ObjectSet("STP",OBJPROP_WIDTH,3); 
         }
         else if(totals>0 && sellpyramid==1)
         {
            SBE=Close[0]+totalspips/(totalslots*100);
            ObjectDelete("SBE");   

            ObjectDelete("STP");
            ObjectCreate( "STP",OBJ_HLINE, 0,Time[0],uppersell-TakeProfitPips*Point());
            ObjectSet("STP", OBJPROP_COLOR,clrDarkRed);   
            ObjectSet("STP",OBJPROP_WIDTH,3); 
         }
         else
         {
            ObjectDelete("SBE");
            ObjectDelete("STP");
         }
         if((Strategy==1))
         {
            if((totalb==1 || totalbp>0) && (((EnableAverage==0 || (EnableAverage==0 && EnablePyramid==1) || (EnableAverage==1 && EnablePyramid==1 && buypyramid==1)) && TakeProfitMode==1 && Bid>lowerbuy+TakeProfitPips*Point())
                                        ||  ((EnableAverage==0 || (EnableAverage==0 && EnablePyramid==1) || (EnableAverage==1 && EnablePyramid==1 && buypyramid==1)) && TakeProfitMode==2 && Bid>lowerbuy+ATR*TakeProfitATR)
                                        ||  ((EnableAverage==0 || (EnableAverage==0 && EnablePyramid==1) || (EnableAverage==1 && EnablePyramid==1 && buypyramid==1)) && TakeProfitMode==3 && Bid<bbmid0)
                                        ||  ((EnableAverage==0 || (EnableAverage==0 && EnablePyramid==1) || (EnableAverage==1 && EnablePyramid==1 && buypyramid==1)) && TakeProfitMode==4 && Bid<bbbot0)
                                        ||   (EnableAverage==0 && StopLossMode==1   && Ask<BOP-StopLossPips*Point())
                                        ||   (EnableAverage==0 && StopLossMode==2   && Ask<BOP-ATR*StopLossATR)
                                        ||   (EnableAverage==0 && StopLossMode==3   && Ask<bbmid0)
                                        ||   (EnableAverage==0 && StopLossMode==4   && Ask<bbbot0)
                                        ))
               closeallb=1;
            if((totals==1 || totalsp>0) && (((EnableAverage==0 || (EnableAverage==0 && EnablePyramid==1) || (EnableAverage==1 && EnablePyramid==1 && sellpyramid==1)) && TakeProfitMode==1 && Ask<uppersell-TakeProfitPips*Point())
                                        ||  ((EnableAverage==0 || (EnableAverage==0 && EnablePyramid==1) || (EnableAverage==1 && EnablePyramid==1 && sellpyramid==1)) && TakeProfitMode==2 && Ask<uppersell-ATR*TakeProfitATR)
                                        ||  ((EnableAverage==0 || (EnableAverage==0 && EnablePyramid==1) || (EnableAverage==1 && EnablePyramid==1 && sellpyramid==1)) && TakeProfitMode==3 && Ask>bbmid0)
                                        ||  ((EnableAverage==0 || (EnableAverage==0 && EnablePyramid==1) || (EnableAverage==1 && EnablePyramid==1 && sellpyramid==1)) && TakeProfitMode==4 && Ask>bbtop0)
                                        ||   (EnableAverage==0 && StopLossMode==1   && Bid>SOP+StopLossPips*Point())
                                        ||   (EnableAverage==0 && StopLossMode==2   && Bid>SOP+ATR*StopLossATR)
                                        ||   (EnableAverage==0 && StopLossMode==3   && Bid>bbmid0)
                                        ||   (EnableAverage==0 && StopLossMode==4   && Bid>bbtop0)
                                        ))
               closealls=1;
         }

         if(AccountEquity()<=MinEquity)
         {
            closeallb=1;
            closealls=1;
            trading=0;
         }
         if(totalb==1 && EnableAverage==1 && Ask<lowerbuy)
         {
            buyaverage=1;
            buypyramid=0;
         }
         if(totalb==1 && EnablePyramid==1 && Bid>upperbuy)
         {
            buyaverage=0;
            buypyramid=1;
         }
         if(EnableAverage==1 && Bid>BBE+A_Takeprofit*Point() && buyaverage==1)
            closeallb=1;
         if(EnableAverage==1 && Ask<SBE-A_Takeprofit*Point() && sellaverage==1)
            closealls=1;

         if(totals==1 && EnableAverage==1 && Bid>uppersell)
         {
            sellaverage=1;
            sellpyramid=0;
         }
         if(totals==1 && EnablePyramid==1 && Ask<lowersell)
         {
            sellaverage=0;
            sellpyramid=1;
         }

         Comment(
         "\n| buyaverage: ",buyaverage,
         "\n| buypyramid: ",buypyramid,
         "\n| sellaverage: ",sellaverage,
         "\n| sellpyramid: ",sellpyramid
         );

         if(TrailingStopMode==1)
         {
            if(enabletrailingb==0)
               mytrailingb=0;
            if(enabletrailings==0)
               mytrailings=9999999;
            if(TrailingStopPips!=0 && enabletrailingb==0 && Ask>=BOP+TrailingStopPips*Point())
   

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

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

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

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

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

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

Стоимость полного кода
1 982,60₽ ≈ $24.23