Author: Copyright � 2012, admin@vdsforex.ru
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reachedIt Closes Orders by itself
Indicators Used
Parabolic Stop and Reverse system
0 Views
0 Downloads
0 Favorites
pips4_0
//+------------------------------------------------------------------+
//|                                                      pips4.0.mq4 |
//|                                  Copyright © 2012, Sergey Aganin |
//|                                                           www.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, admin@vdsforex.ru"
#property link      "http://www.ru"
#property show_inputs
#define MAGICMA  20120718

//--------------------------------------------------------------------
extern double  lots                 = 0.1;
extern int     Stoploss             = 0,      //ñòîïëîññ, åñëè 0 òî íå èçìåíÿåòñÿ
               Takeprofit           = 0;      //òåéêïðîôèò, åñëè 0 òî íå èçìåíÿåòñÿ
extern int     TrailingStop         = 30;     //äëèííà òðàëëà, åñëè 0 òî íåò òðàëëà
extern int     StepTrall            = 0;      //øàã òðàëëà - ïåðåìåùàòü ñòîïëîññ íå áëèæå ÷åì StepTrall
extern int     NoLoss               = 0,     //ïåðåâîä â áåçóáûòîê ïðè çàäàííîì êîë-âå ïóíêòîâ ïðèáûëè, åñëè 0 òî íåò ïåðåâîäà â áåçóáûòîê
               MinProfitNoLoss      = 0;      //ìèíèìàëüíàÿ ïðèáûëü ïðè ïåðåâîäå âáåçóáûòîê
//extern int     EMAperoid            =15;      // Ôèëüòð ïåðèîä åìà îïðåäåëåíèÿ òðåíäà
extern int     VolumeFiltr          =200;     // Ôèëüòð ïî Volume
extern int     OsMaFast_ema_period  =12; 
extern int     OsMaSlow_ema_period  =26; 
extern int     OsMaSignal_period    =9;
extern bool    Dolivka              =false;  // äî ÒÔ Ì15 âêëþ÷èòåëüíî ëó÷øå íå èñïîëüçîâàòü
extern int     doliv                =300;    //îòñòóï îò óæå îòðûòîãî îðäàðà
extern int     dolivK               =2;      // ìíîæèòåëü ëîòà íà äîëèâêó

 
int limit, closesell1=0, closebuy1=0;
int bar2_period;
int bar3_period;
int bar4_period;
double ma1, ma2, osma1, osma2, osma0, osma3, SL1, valsar1, valsar2;
bool New_Bar;


int sells, buys, sells2, buys2; 
//--------------------------------------------------------------------
int  STOPLEVEL,TimeBar;
//--------------------------------------------------------------------
int init()
{
}
//--------------------------------------------------------------------
int deinit()
{
   ObjectDelete("SLb");
   ObjectDelete("SLs");
}
//--------------------------------------------------------------------
int start()                                  
{
//+------------------------------------------------------------------+
//|                                            TrailingStopLight.mq4 |
//|                              Copyright © 2011, Khlystov Vladimir |
//|                                         http://cmillion.narod.ru |
//+------------------------------------------------------------------+

   //while(!IsStopped())
   {
      //RefreshRates();
      STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
      double OSL,OTP,OOP,StLo,SL,TP;
      double Profit,ProfitS,ProfitB,LB,LS,NLb,NLs,price_b,price_s,OL,sl;
      int b,s,OT,OMN;
      for (int i=OrdersTotal()-1; i>=0; i--)
      {                                               
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            OMN = OrderMagicNumber();
            if (OrderSymbol() == Symbol())
            {
               OOP = NormalizeDouble(OrderOpenPrice(),Digits);
               OT = OrderType();
               OL = OrderLots();
               if (OT==OP_BUY)
               {
                  price_b = price_b+OOP*OL;
                  b++; LB+= OL;
                  ProfitB+=OrderProfit()+OrderSwap()+OrderCommission();
               }
               if (OT==OP_SELL)
               {
                  price_s = price_s+OOP*OL;
                  s++;LS+= OL;
                  ProfitS+=OrderProfit()+OrderSwap()+OrderCommission();
               }
            }
         }
      }
      ObjectDelete("SLb");
      ObjectDelete("SLs");
      if (b>0) 
      {
         NLb = NormalizeDouble(price_b/LB,Digits);
         ObjectCreate("SLb",OBJ_ARROW,0,Time[0],NLb,0,0,0,0);                     
         ObjectSet   ("SLb",OBJPROP_ARROWCODE,6);
         ObjectSet   ("SLb",OBJPROP_COLOR, Blue);
      }
      if (s>0) 
      {
         NLs = NormalizeDouble(price_s/LS,Digits);
         ObjectCreate("SLs",OBJ_ARROW,0,Time[0],NLs,0,0,0,0);                     
         ObjectSet   ("SLs",OBJPROP_ARROWCODE,6);
         ObjectSet   ("SLs",OBJPROP_COLOR, Red);
      }
      int OTicket;
      for (i=0; i<OrdersTotal(); i++)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if (OrderSymbol()==Symbol())
            { 
               OT = OrderType(); 
               OSL = NormalizeDouble(OrderStopLoss(),Digits);
               OTP = NormalizeDouble(OrderTakeProfit(),Digits);
               OOP = NormalizeDouble(OrderOpenPrice(),Digits);
               SL=OSL;TP=OTP;
               if (OT==OP_BUY)             
               {  
                  b++;
                  if (OSL==0 && Stoploss>=STOPLEVEL && Stoploss!=0)
                  {
                      SL = NormalizeDouble(Bid - Stoploss   * Point,Digits);
                  } 
                  else SL=OSL;
                  if (OTP==0 && Takeprofit>=STOPLEVEL && Takeprofit!=0)
                  {
                      TP = NormalizeDouble(Ask + Takeprofit * Point,Digits);
                  } 
                  else TP=OTP;
                  if (NoLoss>=STOPLEVEL && OSL<NLb && NoLoss!=0)
                  {
                     if (OOP<=NLb && NLb!=0 && NLb <= NormalizeDouble(Bid-NoLoss*Point,Digits)) 
                        SL = NormalizeDouble(NLb+MinProfitNoLoss*Point,Digits);
                  }
                  if (TrailingStop>=STOPLEVEL && TrailingStop!=0)
                  {
                     StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits); 
                     if (StLo>=NLb && NLb!=0) if (StLo > OSL) SL = StLo;
                  }
                  if (SL != OSL || TP != OTP)
                  {  
                     OTicket=OrderTicket();
                     if (!OrderModify(OTicket,OOP,SL,TP,0,White)) Print("Error OrderModify ",GetLastError());
                  }
               }                                         
               if (OT==OP_SELL)        
               {
                  s++;
                  if (OSL==0 && Stoploss>=STOPLEVEL && Stoploss!=0)
                  {
                     SL = NormalizeDouble(Ask + Stoploss   * Point,Digits);
                  }
                  else SL=OSL;
                  if (OTP==0 && Takeprofit>=STOPLEVEL && Takeprofit!=0)
                  {
                      TP = NormalizeDouble(Bid - Takeprofit * Point,Digits);
                  }
                  else TP=OTP;
                  if (NoLoss>=STOPLEVEL && (OSL>NLs || OSL==0) && NoLoss!=0)
                  {
                     if (OOP>=NLs && NLs!=0 && NLs >= NormalizeDouble(Ask+NoLoss*Point,Digits)) 
                        SL = NormalizeDouble(NLs-MinProfitNoLoss*Point,Digits);
                  }
                  if (TrailingStop>=STOPLEVEL && TrailingStop!=0)
                  {
                     StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits); 
                     if (StLo<=NLs && NLs!=0) if (StLo < OSL || OSL==0) SL = StLo;
                  }
                  if ((SL != OSL || OSL==0) || TP != OTP)
                  {  
                     OTicket=OrderTicket();
                     if (!OrderModify(OTicket,OOP,SL,TP,0,White)) Print("Error OrderModify ",GetLastError());
                  }
               } 
            }
         }
      }
      
//Èíäþêè
osma0= iOsMA (NULL,0,OsMaFast_ema_period,OsMaSlow_ema_period,OsMaSignal_period,PRICE_CLOSE,0);
osma1= iOsMA (NULL,0,OsMaFast_ema_period,OsMaSlow_ema_period,OsMaSignal_period,PRICE_CLOSE,1);
osma2= iOsMA (NULL,0,OsMaFast_ema_period,OsMaSlow_ema_period,OsMaSignal_period,PRICE_CLOSE,2);
//valsar0=iSAR(NULL,0,0.02,0.2,0);
valsar1=iSAR(NULL,0,0.02,0.2,1);
valsar2=iSAR(NULL,0,0.02,0.2,2);


// óñëîâèÿ
  //BUY
  
if (valsar1<Ask && osma0>osma1 && osma1>osma2 && osma1>0  && osma2<0 && Volume[1]>VolumeFiltr) buys=1; buys2=1;

  //SELL
  

if (valsar1>Bid && osma1>osma0 && osma2>osma1 && osma1<0  && osma2>0  && Volume[1]>VolumeFiltr) sells=1; sells2=1;


//---- îïðåäåëÿåì îòêðûòûå îðäåðà

   for(int cnt=0;cnt<OrdersTotal();cnt++)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY && OrderLots()==lots) buys2=1; buys=0;
      if(OrderType()==OP_BUY && OrderLots()==lots*dolivK) buys2=0;  
        
      if(OrderType()==OP_SELL && OrderLots()==lots) sells2=1; sells=0;  
      if(OrderType()==OP_SELL && OrderLots()==lots*dolivK) sells2=0;
       
     }   

// Æäåì íîâûé áàð
 static datetime New_Time=0;                  // Âðåìÿ òåêóùåãî áàðà
 New_Bar=false;                               // Íîâîãî áàðà íåò
  if(New_Time!=Time[0])                        // Ñðàâíèâàåì âðåìÿ
     {
      New_Time=Time[0];                         // Òåïåðü âðåìÿ òàêîå
      New_Bar=true;                             // Ïîéìàëñÿ íîâûé áàð
     }

//--- Øëåì îðäåðà

     
         if (sells==1 && New_Bar==true) 
             
             OrderSend(Symbol(),OP_SELL,lots,NormalizeDouble(Bid,Digits),3,0,0,"pips4.0",MAGICMA,0,Red);                
               
         if (buys==1  && New_Bar==true)
          
             OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),3,0,0,"pips4.0",MAGICMA,0,Blue);
          
  
 // Äîëèâêà
 int totalorder=OrdersTotal();

    for(int y=0;y<OrdersTotal();y++)
     {
      if(OrderSelect(y,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY && OrderLots()==lots && OrderOpenPrice()>Ask+doliv*Point && Dolivka==true)
        {
         if(buys2==1)
         OrderSend(Symbol(),OP_BUY,lots*dolivK,NormalizeDouble(Ask,Digits),3,0,0,"pips4.0-2",MAGICMA,0,Blue);
         //Print ("Order Time=", TimeCurrent()-OrderOpenTime());
         closebuy1=1;
         break;
        }
      if(OrderType()==OP_SELL && OrderLots()==lots && OrderOpenPrice()<Bid-doliv*Point && Dolivka==true)
        {
         if(sells2==1) 
         OrderSend(Symbol(),OP_SELL,lots*dolivK,NormalizeDouble(Bid,Digits),3,0,0,"pips4.0-2",MAGICMA,0,Red);
         //Print ("Order Time=", TimeCurrent()-OrderOpenTime());
         closesell1=1;
         break;
        }     
    } 

//---- Çàêðûâàåì îðäåðà 
  

   
    
    for(int cn=0;cn<OrdersTotal();cn++)
     {
      if(OrderSelect(cn,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(0==1) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         //Print ("Order Time=", TimeCurrent()-OrderOpenTime());
         break; return(0);
        }
      if(OrderType()==OP_SELL)
        {
         if(0==1) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         //Print ("Order Time=", TimeCurrent()-OrderOpenTime());
         break;  return(0);
        }     

      
   } 

}
return;

}

 
 


//--------------------------------------------------------------------

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