FT_Скальп_Parabolic

Author: FORTRADER.RU
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt can change open orders parameters, due to possible stepping strategy
Indicators Used
Parabolic Stop and Reverse system
0 Views
0 Downloads
0 Favorites
FT_Скальп_Parabolic
//+---------------------------------------------------------------------------0+|
//|                                                        Ñêàëüï Parabolic.mq4 |
//|                            Ðàçðàáîòàíî äëÿ 39 âûïóñêà æóðíàëà  FORTRADER.RU |
//|                                                                             |
//| Îïèñàíèå ñòðàòåãèè:         http://www.forexsystems.ru/showthread.php?t=5495|
//| Îïèñàíèå íåêîòîðûõ ôóíêöèé: http://fxnow.ru/blog/programming_mql4/          |
//| Êîíòàêòû:                   yuriy@fortrader.ru                              |
//+----------------------------------------------------------------------------+|
//|4-150
#property copyright "FORTRADER.RU"
#property link      "http://FORTRADER.RU"

//êîíòðîëü âðåìåíè îòêðûòèÿ. 
extern int timecontrol=0; //1 - âêëþ÷åíî, 0 - âûêëþ÷åíî.
extern int starttime = 7; 
extern int stoptime = 17; 

//ðàçìåð â ïóíêòàõ ïîñëå êîòîðîãî ñòîï ïåðåíîñèì â áåçóáûòîê
extern int BBUSize=0;
//ðàçìåð òðåéëèíãà 
extern int TrailingStop=0;
//Íà÷àëüíûé îáüåì ñäåëêè
extern int TrailingShag=5;
//íàñòðîéêè áûñòðîãî ïàðàáîëèêà
extern double stepfast=0.02; 
extern double maximumfast=0.2;
//íàñòðîéêè ìåäëåííîãî ïàðàáîëèêà 
extern double stepslow=0.005; 
extern double maximumslow=0.05;
//êîëè÷åñòâî áàðîâ äëÿ ïîèñêà ìèíèìóìîâ ìàêñèìóìîâ
extern int barsearch=3;
//îòñòóï îò ìèíèìóìà/ìàêñèìóìà äëÿ ðàññ÷åòà ñòîïëîññîâ
extern int otstup=100;
//óðîâåíü âõîäà ïî ôèáîíà÷÷è
extern double Ur1=50;
//óðîâåíü ïðîôèòà ïî ôèáîíà÷÷è
extern double Ur2=161;


int nummodb,nummods;
int bars;
int err1;
int start()
  { //if(err1<0){Print("start() çàâåðøèë ðàáîòó ñ îøèáêîé");return(-1);}
    if(bars!=Bars && ((timecontrol(starttime,stoptime)!=1 && timecontrol==1) ||timecontrol==0))
    {bars=Bars;
     err1=ScalpParabolicPattern();
     }
 
 if(TrailingStop>0){err1=TrailingStop();}
 if(BBUSize>0){err1=BBU();}

   return(0);
  }
  

//+------------------------------------------------------------------+
int sarmax,sarmin,countbars,countbarv;
int ScalpParabolicPattern()
   {int err;double op,sl,tp,max,min,Ur50,Ur116;
   //çàãðóçèì ïàðàáîëèêè
   double sarslow=iSAR(NULL,0,stepslow ,maximumslow,1);
   double fastsar=iSAR(NULL,0,stepfast,maximumfast,1);
   double fastsarlast=iSAR(NULL,0,stepfast,maximumfast,1);



   if(fastsar>Bid && sarslow<Bid){sarmax=1;}
   if(sarslow>Bid){sarmax=0;}

   if(fastsar<Bid && sarslow>Bid){sarmin=1;}
   if(sarslow<Bid){sarmin=0;}


   
   if(sarslow<Bid && fastsar<Bid && sarmax==1 )//åñëè ìåäëåííûé ïàðàáîëèê íàïðàâëåí ââåðõ è ïðîèçîøåë ïðîáîé ïàðàáîëèêà êîòîðûé äâèãàëñÿ âíèç
   {sarmax=0;
    min=MaximumMinimum(0,barsearch);   //íàéäåì òåêóùèé ìèíèìóì
    max=High[1];
   
    Ur50 =GetFiboUr(max,min,Ur1/100);//ïîëó÷èì 50% çíà÷åíèå ôèáî
    Ur116 =GetFiboUr(max,min,Ur2/100); //ïîëó÷èì 116% çíà÷åíèå ôèáî
 
   op=Ur50;  sl=min-otstup*Point;  tp=Ur116;
    if((Ask-op)<5*Point || (Ask-sl)<5*Point || (tp-Ask)<5*Point){return(0);}
   err=OrderSend(Symbol(),OP_BUYLIMIT,0.1,NormalizeDouble(op,Digits),3,sl,tp,"FORTRADER.RU",0,0,Red);
   if(err<0){Print("ScalpParabolicPattern()-  Îøèáêà óñòàíîâêè îòëîæåííûõ îðäåðîâ OP_BUYLIMIT.  op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);}
   nummodb=0;
   }
   
   if(sarslow>Bid && fastsar>Bid && sarmin==1 )//åñëè ìåäëåííûé ïàðàáîëèê íàïðàâëåí ââåðõ è ïðîèçîøåë ïðîáîé ïàðàáîëèêà êîòîðûé äâèãàëñÿ âíèç
   {sarmin=0;
    max=MaximumMinimum(1,barsearch);   //íàéäåì òåêóùèé ìèíèìóì
    min=Low[1];
   
    Ur50 =GetFiboUr(min,max,Ur1/100);//ïîëó÷èì 50% çíà÷åíèå ôèáî
    Ur116 =GetFiboUr(min,max,Ur2/100); //ïîëó÷èì 116% çíà÷åíèå ôèáî
 
   op=Ur50;  sl=max+otstup*Point;  tp=Ur116;
   if((op-Ask)<5*Point || (sl-Ask)<5*Point || (Ask-tp)<5*Point){return(0);}
   err=OrderSend(Symbol(),OP_SELLLIMIT,0.1,NormalizeDouble(op,Digits),3,sl,tp,"FORTRADER.RU",0,0,Red);
   if(err<0){Print("ScalpParabolicPattern()-  Îøèáêà óñòàíîâêè îòëîæåííûõ îðäåðîâ OP_SELLLIMIT.  op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);}
   nummods=0;
   
   }
   
   
   if(fastsar>Bid && ChLimitOrder(1)>0)
   {
   err=deletelimitorder(1);
   }
 
   if(fastsar<Bid && ChLimitOrder(0)>0)
   {
   err=deletelimitorder(0);
   }
 
return(0);
}

int deletelimitorder(int type)
{int i;int err;
  for(  i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {                                   
         if(OrderType()==OP_BUYLIMIT && OrderSymbol()==Symbol() && type==1)
         { 
         err=OrderDelete(OrderTicket());
         }
          if(OrderType()==OP_SELLLIMIT && OrderSymbol()==Symbol() && type==0)
         { 
          err=OrderDelete(OrderTicket());
         }
       }
    }
return(err);
}

int ChLimitOrder(int type)
{int i;
    for(  i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {                                   
         if(OrderType()==OP_BUYLIMIT && OrderSymbol()==Symbol() && type==1)
         { 
          return(1);
         }
         if(OrderType()==OP_SELLLIMIT && OrderSymbol()==Symbol() && type==0)
         { 
          return(1);
         }
       }
    }
return(0);
}


double MaximumMinimum(int type,int barsearch)
{//îïèñàíèå ôóíêöèè http://fxnow.ru/blog/programming_mql4/3.html
 int x=0,stop=0;double minmax;
  
  if(type==0)
   {
   while(stop==0)
    {
    minmax =Low[iLowest(NULL,0,MODE_LOW,barsearch,x)];
    if(minmax>Low[iLowest(NULL,0,MODE_LOW,barsearch,x+barsearch)])
     {
      minmax =Low[iLowest(NULL,0,MODE_LOW,barsearch,x+barsearch)];
      x=x+barsearch;
     }
     else {stop=1;return(minmax);}
    }//while(stop
   }//if(type
   
   if(type==1)
   {
   while(stop==0)
    {
    minmax =High[iHighest(NULL,0,MODE_HIGH,barsearch,x)];
    if(minmax<High[iHighest(NULL,0,MODE_HIGH,barsearch,x+barsearch)])
      {
       minmax =High[iHighest(NULL,0,MODE_HIGH,barsearch,x+barsearch)];
       x=x+barsearch;
       }
       else{stop=1;return(minmax);}
     }// while(sto
   }//if(type
return(0);          
}

double GetFiboUr(double high, double low, double ur)
{//îïèñàíèå ôóíêöèè http://fxnow.ru/blog/programming_mql4/4.html
  int digits = MarketInfo(Symbol(),MODE_DIGITS);                             
  double Fibo = NormalizeDouble(low + (high - low)*ur, digits); return(Fibo);
return(0); 
}


int  TrailingStop()
{//îïèñàíèå ôóíêöèè http://fxnow.ru/blog/programming_mql4/1.html
int i;bool err;double lastbid;

   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {   
        if(TrailingStop>0 && OrderType()==OP_BUY && OrderSymbol()==Symbol())  
        {                
         if(Bid-OrderOpenPrice()>=TrailingStop*Point && TrailingStop>0 && (Bid-Point*TrailingStop)>OrderStopLoss())
          {
           if(((Bid-Point*TrailingStop)-OrderStopLoss())>=TrailingShag*Point)
           {
            Print("ÒÐÅÉËÈÌ");
            err=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
            if(err==false){return(-1);}
           }//if(Bid>=OrderStopLoss()
          }//if(Bid-OrderOpenPrice()
         }//if(BBUSize>0
        }//if(OrderSelect(i
            
       if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {
        if(OrderType()==OP_SELL && OrderSymbol()==Symbol() )  
        {        
         if(OrderOpenPrice()-Ask>=TrailingStop*Point && TrailingStop>0 && OrderStopLoss()>(Ask+TrailingStop*Point))
          {
           if((OrderStopLoss()-(Ask+TrailingStop*Point))>TrailingShag*Point)
           {
            Print("ÒÐÅÉËÈÌ");
            err=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Green);
            if(err==false){return(-1);}
           }//if(Ask<=OrderStopLoss()
          }//if(OrderOpenPrice()
         }//if(BBUSize>0 
       }// if(OrderSelect
    }// for( i=1;
return(0);
}
int  BBU()
{//îïèñàíèå ôóíêöèè http://fxnow.ru/blog/programming_mql4/2.html
int i;bool err;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {   
        if(BBUSize>0 && OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderStopLoss()<OrderOpenPrice())  
        {                
         if(Bid-OrderOpenPrice()>=BBUSize*Point && BBUSize>0 )
          {
           Print("ÏÎÐÀ Â ÁåçóÁûòîê");
           err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+1*Point,OrderTakeProfit(),0,Green);
           if(err==false){return(-1);}
          }//if(Bid-OrderOpenPrice()
         }//if(BBUSize>0
        }//if(OrderSelect(i
            
       if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {
        if(BBUSize>0 && OrderType()==OP_SELL && OrderSymbol()==Symbol() && (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0))  
        {        
         if(OrderOpenPrice()-Ask>=BBUSize*Point && BBUSize>0)
          {
           Print("ÏÎÐÀ Â ÁåçóÁûòîê");
           err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-1*Point,OrderTakeProfit(),0,Green);
           if(err==false){return(-1);}
          }//if(OrderOpenPrice()
         }//if(BBUSize>0 
       }// if(OrderSelect
    }// for( i=1;
return(0);
}

int timecontrol(int starttime, int stoptime)
{//îïèñàíèå ôóíêöèè http://fxnow.ru/blog/programming_mql4/5.html
   if (Hour()>=starttime &&  Hour()<=stoptime) 
      { 
      return(0);
      }  
return(1);
}

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 ---