e-Parabolic-2_0

Author: Copyright � 2011, lukas1
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each barSeries array that contains open time of each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself
Indicators Used
Parabolic Stop and Reverse system
0 Views
0 Downloads
0 Favorites
e-Parabolic-2_0
//+-------------------------------------------------------------------------+
//|                                                        e-Parabolic .mq4 |
//|                            Copyright © 2011, Victor Lukashuk aka lukas1 |
//|                            Exclusive public edition. 
//|                                                             version 2.0 |
//+-------------------------------------------------------------------------+
/* Ñîâåòíèê òîðãóåò ïî èíäèêàòîðó Parabolic. 
   Èñïîëüçóåòñÿ ðàñ÷åò äàííûõ èíäèêàòîðà íà óæå ïðîøåäøåì áàðå (Ind_Bar=1).

   ====     Ïîêóïêà, òîëüêî îäèí îðäåð:     ====
 1. Èíäèêàòîð íà÷àë ðèñîâàòü ëèíèþ íèæå öåíû.
    Çíà÷åíèå áóôåðà èíäèêàòîðà íà çàäàííîì áàðå íèæå öåíû.

   ====     Ïðîäàæà, òîëüêî îäèí îðäåð:     ====
 1. Èíäèêàòîð íà÷àë ðèñîâàòü ëèíèþ âûøå öåíû.
    Çíà÷åíèå áóôåðà èíäèêàòîðà íà çàäàííîì áàðå âûøå öåíû.

   ====     Âûõîä èç ïîçèöèè:               ====
 1. Ñðàáàòûâàíèå îðäåðà Stop Loss, TakeProfit.
 2. Ïî ñèãíàëó ïðè ïåðåêëþ÷åíèè ëèíèè.   
*/
#property copyright "Copyright © 2011, lukas1"
#property link      "lukas1@ngs.ru"
#include <stdlib.mqh>   // áèáëèîòåêà îòîáðàæåíèÿ îøèáîê

extern int TakePr = 0; //òåéêïðîôèò
extern int StopLs = 0; //ñòîïëîññ 

       string Íàçâàíèå_èíäèêàòîðà  = "Parabolic";//òîëüêî âíóòðåííèé ÌÒ4
extern double Param1  = 0.2;//âíåøíèé ïàðàìåòð èíäèêàòîðà
extern double Param2  = 0.2;//âíåøíèé ïàðàìåòð èíäèêàòîðà
              // èñïðàâëåí ðàñ÷åò èíäèêàòîðà íà ñòàðøõ ÒÔ (âåð.1.2)
extern int    TimeFrm = 30;//Òàéìôðåéì íà êîòîðîì ðàñ÷èòûâàþòñÿ äàííûå
extern int    Ind_Bar = 1;//áàð, äëÿ ðàñ÷åòà èíäèêàòîðà

extern double lots = 0.1;
extern int magic = 111222;
extern int slippage = 9;
string msg;
int num_buy,num_sell,sss1,sss2,i;
int m11,m12,m21,m22; 
double m31,m32,m4; 
int br0=1, br1=1, br2=1,nn=1,stoplevel,spread;

//+-------------------------------------------------------------------------+
int init() {
   if(Digits==2 || Digits==4) nn=1;
   else
   if(Digits==3 || Digits==5) nn=10;
   
   TakePr   = TakePr   * nn; 
   StopLs   = StopLs   * nn; 
   slippage = slippage * nn;
   stoplevel= MarketInfo(Symbol(),MODE_STOPLEVEL);
   
   if(!TimeFrame() && !IsOptimization()) 
      Print("Çíà÷åíèå Òàéìôðåéìà= \""+TimeFrm+
            " ìèíóò\" âûáðàíî íå ïðàâèëüíî.");
   return(0);
}

//+-------------------------------------------------------------------------+
int start() {
   //ïðîâåðêà ïðàâèëüíîñòè TF
   if(!TimeFrame()) return(0);
   //êîððåêöèÿ îòîáðàæåíèÿ èíäèêàòîðà íà ãðàôèêå
   if(TimeFrm==0) TimeFrm=Period();
   //ïðîâåðêà ïðàâèëüíîñòè ïàðàìåòðîâ èíäèêàòîðà
   if(Param1>Param2) return(0);

      m11 = f_ind11(); //äëÿ îòêðûòèÿ ÁÀÉ
      m12 = f_ind12(); //äëÿ îòêðûòèÿ ÑÅËË
      m21 = f_ind21(); //äëÿ çàêðûòèÿ ÑÅËË
      m22 = f_ind22(); //äëÿ çàêðûòèÿ ÁÀÉ
      m31 = f_ind31(); //îòîáðàæåíèå íà ãðàôèê 
      m4  = f_ind4(); //îòîáðàæåíèå íà ãðàôèê 

   num_buy=0;num_sell=0; 
   int total = OrdersTotal();
   if (total>0)
   for (i = total - 1; i >= 0; i--) 
     {OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
        {if(OrderType() == OP_BUY)
           {num_buy++;
            if(m22 > 0 ) 
              {if(Close_Buy()==true) num_buy--;}
           }
         if(OrderType() == OP_SELL) 
           {num_sell++;
            if(m21 > 0 ) 
              {if(Close_Sell()==true) num_sell--;}
           }
        }
     }

   text();
   
   if(m11 > 0 && m22 == 0 && num_buy==0 && br1<Bars ) 
      Open_Buy();

   if(m12 > 0 && m21 == 0 && num_sell==0 && br2<Bars ) 
      Open_Sell();

   return(0);
}

//+-------------------------------------------------------------------------+
int f_ind11() {//äëÿ îòêðûòèÿ ÁÀÉ
   
   int    result = 0;
   double ind11,dPrc1;
   //Parabolic 
   ind11 = iSAR(Symbol(), TimeFrm, 
                  Param1,Param2, 
                  Ind_Bar);//ïî 1 áàðó 
   dPrc1 = iHigh(Symbol(), TimeFrm, Ind_Bar);             

   if(ind11 > 0 && ind11 < dPrc1-13*nn*Point )
      result = 1;
   
   return(result);
}

//+-------------------------------------------------------------------------+
int f_ind12() {//äëÿ îòêðûòèÿ ÑÅËË
   
   int    result = 0;
   double ind11,ind12,dPrc1;
   //Parabolic 
   ind11 = iSAR(Symbol(), TimeFrm, 
                  Param1,Param2, 
                  Ind_Bar);//ïî 1 áàðó 
   dPrc1 = iLow(Symbol(), TimeFrm, Ind_Bar);             


   if(ind11 > 0 && ind11 > dPrc1+13*nn*Point )
      result = 1;
   
   return(result);
}
//+-------------------------------------------------------------------------+
int f_ind21() {//äëÿ çàêðûòèÿ ÑÅËË
   
   int    result = 0;
   double ind11,dPrc1;
   //Parabolic 
   ind11 = iSAR(Symbol(), TimeFrm, 
                  Param1,Param2, 
                  Ind_Bar);//ïî 1 áàðó 
   dPrc1 = iHigh(Symbol(), TimeFrm, Ind_Bar);             

   if(ind11 > 0 && ind11 < dPrc1- 3*nn*Point )
      result = 1;
   
   return(result);
}

//+-------------------------------------------------------------------------+
int f_ind22() {//äëÿ çàêðûòèÿ ÁÀÉ
   
   int    result = 0;
   double ind11,ind12,dPrc1;
   //Parabolic 
   ind11 = iSAR(Symbol(), TimeFrm, 
                  Param1,Param2, 
                  Ind_Bar);//ïî 1 áàðó 
   dPrc1 = iLow(Symbol(), TimeFrm, Ind_Bar);             


   if(ind11 > 0 && ind11 > dPrc1+ 3*nn*Point )
      result = 1;
   
   return(result);
}
//+-------------------------------------------------------------------------+
double f_ind31() {//îòîáðàæåíèå íà ãðàôèê èíäèêàòîðà
   
   //Parabolic 
   int bb1=iBarShift(Symbol(),TimeFrm,iTime(Symbol(),TimeFrm, 
                  Ind_Bar),false);
   double ind11 = iSAR(Symbol(), TimeFrm, 
                  Param1,Param2, 
                  bb1);//ïî 1 áàðó 
   string ttt = StringConcatenate("a",Time[0]," Parabolic");
   if(!IsOptimization() && ObjectFind(ttt)<0) 
     {
      int smeschenie = 0;
      ObjectCreate(ttt,OBJ_ARROW,0,Time[Ind_Bar*TimeFrm/Period()],ind11); 
      ObjectSet(ttt,OBJPROP_ARROWCODE,4) ;
     }
                    
   return(ind11);
}

//+-------------------------------------------------------------------------+
double f_ind4() {//îòîáðàæåíèå íà ãðàôèê íîìåðà áàðà äëÿ ðàñ÷åòà èíäèêàòîðà 
   
   //Parabolic 
   int bb1=iBarShift(Symbol(),TimeFrm,iTime(Symbol(),TimeFrm, 
                  Ind_Bar),false);
   return(bb1);
}

//+-------------------------------------------------------------------------+
double nd0(double DOUBLE){return(NormalizeDouble(DOUBLE,Digits));}
//+-------------------------------------------------------------------------+
int Open_Buy() {
   double stop=0,take=0;
   spread=Ask-Bid;
   if(StopLs>0) 
      stop = MathMin(Ask-StopLs*Point,Bid-MathMax(stoplevel,spread)*Point);
   if(TakePr>0) 
      take = MathMax(Ask+TakePr*Point,Ask+MathMax(stoplevel,spread)*Point);
   int ticket = OrderSend(Symbol(), OP_BUY, lots, nd0(Ask), slippage, 
                nd0(stop), nd0(take),
                WindowExpertName()+" "+Symbol()+" "+Period()+" min", 
                magic, 0, Blue);
   if(ticket < 0) 
     {Print("Oøèáêà îòêðûòèÿ ÁÀÉ: ",ErrorDescription(GetLastError())); 
      Print("Öåíà îòêðûòèÿ ÁÀÉ = ", Ask);
      Print("SL ÁÀÉ = ", stop);
      Print("TP ÁÀÉ = ", take);
     }
   else br1 = Bars;
   return(ticket);
  }

//+-------------------------------------------------------------------------+
int Open_Sell() {
   double stop=0,take=0;
   if(StopLs>0) 
      stop = MathMax(Bid+StopLs*Point,Ask+MathMax(stoplevel,spread)*Point);
   if(TakePr>0) 
      take = MathMin(Bid-TakePr*Point,Bid-MathMax(stoplevel,spread)*Point);
   int ticket = OrderSend(Symbol(), OP_SELL, lots, nd0(Bid), slippage, 
                nd0(stop), nd0(take),
                WindowExpertName()+" "+Symbol()+" "+Period()+" min",
                magic, 0, Red);
   if(ticket < 0) 
     {Print("Oøèáêà îòêðûòèÿ ÑÅËË: ",ErrorDescription(GetLastError())); 
      Print("Öåíà îòêðûòèÿ ÑÅËË = ", Bid);
      Print("SL ÑÅËË = ", stop);
      Print("TP ÑÅËË = ", take);
     }
   else br2 = Bars;
   return(ticket);
  }

//+-------------------------------------------------------------------------+
bool Close_Buy(){
   bool make = OrderClose(OrderTicket(),OrderLots(),nd0(OrderClosePrice()), 
               slippage, Blue);
   if(make==false)
     {Print("Oøèáêà çàêðûòèÿ ÁÀÉ: ",ErrorDescription(GetLastError()));
     }
   return(make);    
  }

//+-------------------------------------------------------------------------+
bool Close_Sell(){
   bool make = OrderClose(OrderTicket(),OrderLots(),nd0(OrderClosePrice()),
               slippage, Red);
   if(make==false)
     {Print("Oøèáêà çàêðûòèÿ ÑÅËË: ",ErrorDescription(GetLastError()));
     }
   return(make);    
  }

//+-------------------------------------------------------------------------+
bool TimeFrame(){
   bool valid = false;
   int p1 = TimeFrm;
   if(p1==0 || p1==PERIOD_M1 || 
      p1==PERIOD_M5  || p1==PERIOD_M15 || 
      p1==PERIOD_M30 || p1==PERIOD_H1 || 
      p1==PERIOD_H4  || p1==PERIOD_D1 || 
      p1==PERIOD_W1  || p1==PERIOD_MN1 
      ) valid = true;
   return(valid);   

  }

//+-------------------------------------------------------------------------+
void text () {
   if(IsOptimization()==false) {
      msg="";
      int num1=1;
      if(MathMod(10*Param1,1)>0 ) num1=2;
      if(MathMod(100*Param1,1)>0 ) num1=3;
      int num2=1;
      if(MathMod(10*Param2,1)>0 ) num2=2;
      if(MathMod(100*Param2,1)>0 ) num2=3;
      msg=msg+"\n"+"Èíäèêàòîð \""      +Íàçâàíèå_èíäèêàòîðà+"\" ( "
             +DoubleToStr(Param1, num1)+"; "+DoubleToStr(Param2, num2)+" )";
      int timefr = TimeFrm;
      if(TimeFrm==0) timefr= Period();
      msg=msg+"\n"+"Òàéìôðåéì äëÿ \""
             +Íàçâàíèå_èíäèêàòîðà+"\" = "   +timefr+" min";
      msg=msg+"\n"+"Çíà÷åíèå èíä1 \""  +Íàçâàíèå_èíäèêàòîðà+"\" íà "
             +Ind_Bar+" áàðå= "+DoubleToStr(m31, Digits);
      msg=msg+"\n"+"Çíà÷åíèå èíä1 \""  +Íàçâàíèå_èíäèêàòîðà+"\" íà "
             +(Ind_Bar+1)+" áàðå= "+DoubleToStr(m32, Digits);
      msg=msg+"\n"+"Ðàñ÷åò èíä1 íà ñòàðøåì ÒÔ - íîìåð áàðà= "
             +DoubleToStr(m4, 0);
      msg=msg+"\n"+"Çíà÷åíèå òåêóùåé öåíû "  +DoubleToStr(Bid, Digits);
      if(num_buy==0 && num_sell==0)
        {msg=msg+"\n"+"Íåò îðäåðîâ äëÿ êîíòðîëÿ";}
      if(num_buy>0)
        {msg=msg+"\n"+"Îòêðûòî îðäåðîâ ÁÀÉ "+num_buy;}
      if(num_sell>0)
        {msg=msg+"\n"+"Îòêðûòî îðäåðîâ ÑÅËË "+num_sell;}
      Comment(msg);
     }
  }

//+-------------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---