ow1000p_v_2_1_2_2_realize

Author: Andrey Tsarkov
Orders Execution
It Closes Orders by itself It automatically opens orders when conditions are reached
Indicators Used
Moving average indicator
0 Views
0 Downloads
0 Favorites
ow1000p_v_2_1_2_2_realize
//+------------------------------------------------------------------+
//|                                    ow1000p.v.2.1.2.2.realize.mq4 |
//|                                                   Andrey Tsarkov |
//|                               http://vkontakte.ru/andrey_tsarkov |
//|                                                 ICQ: 206-687-622 |
//|  Åñëè Âû è âïðàâäó çàðàáîòàëè ìèëëèîí ñ ïîìîùüþ ýòîãî ñîâåòíèêà, |
//| êèíüòå äåñÿòîê òûñÿ÷åíîê íà Z360574545386. Àâòîð áóäåò ñ÷àñòëèâ, |
//| êàê ðåáåíîê%)                                                    |
//+------------------------------------------------------------------+
#property copyright "Andrey Tsarkov"
#property link      "http://vkontakte.ru/andrey_tsarkov"

//---- input parameters
extern double    StopLoss=0.005;
extern double    Take_Profit=0.03;
extern double    Money_Buffer=0.002;
extern double    Second_Bar_Buffer=0.003;
extern int       Deal_Percent=5;
extern double    SL_1=0.005;
extern double    SL_2=0.007;
extern double    SL_3=0.009;
extern double    SL_4=0.016;
extern double    SL_5=0.023;
//extern int       Expiration=15;

/*int              Order_Hour=0;
int              Order_Minute=0;
int              Expiration_Hour=0;
int              Expiration_Minute=0;*/
int              MA_Period=64;

bool             More_Than_One_Bar_Left=false;
bool             working=true;

double           Max_Peak;
double           MA;
double           MA1;
double           MA2;
double           MA3;
double           Stop_Loss;
double           Open_Bar_Close_Price;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  double Price,                                                      // Öåíà âûáðàííîãî îðäåðà
         SL,                                                         // SL âûáðàííîãî îðäåðà 
         TP,                                                         // TP âûáðàííîãî îðäåðà
         Lot,                                                        // Êîëè÷. ëîòîâ â âûáðàí.îðäåðå
         A,
         B;
  int Tip=-1,                                                        // Òèï âûáðàí. îðäåðà (B=0,S=1)
      Ticket;                                                        // Íîìåð îðäåðà
      
//----
  MA=iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,0);
  MA1=iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,1);
  MA2=iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,2);
  MA3=iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,3);
  
  if (DayOfWeek()==0 || DayOfWeek()==6)
   {
   working=false;
   }
  else
   {
   if (DayOfWeek()==1 && Hour()<0)
    {
    working=false;
    }
   else
    {
    working=true;
    }
   }
 if (working)
  {
  if (OrdersTotal()>0)                                               //Åñëè åñòü îòêðûòûé îðäåð
   {
   OrderSelect(0,SELECT_BY_POS);
   
   Ticket=OrderTicket();                                             // Íîìåð âûáðàíí. îðä.
   Tip   =OrderType();                                               // Òèï âûáðàííîãî îðä.
   Price =OrderOpenPrice();                                          // Öåíà âûáðàíí. îðä.
   SL    =OrderStopLoss();                                           // SL âûáðàííîãî îðä.
   TP    =OrderTakeProfit();                                         // TP âûáðàííîãî îðä.
   Lot   =OrderLots();                                               // Êîëè÷åñòâî ëîòîâ
   
   RefreshRates();
   
   /*if (Tip==0)                                                       // Åñëè îðäåð íà ïîêóïêó
    {
    if ((Expiration_Hour==Hour()) && (Expiration_Minute<=Minute()))
     {
     OrderClose(Ticket, Lot, Bid, 2);
     }
    
    if (MA-Bid>=Cancel)
     {
     OrderClose(Ticket, Lot, Bid, 2);
     }
    }*/
   
   
   /*if (Tip==1)                                                       // Åñëè îðäåð íà ïðîäàæó
    {
    if ((Expiration_Hour==Hour()) && (Expiration_Minute<=Minute()))
     {
     OrderClose(Ticket, Lot, Ask, 2);
     }
    
    if (Ask-MA>=Cancel)
     {
     OrderClose(Ticket, Lot, Ask, 2);
     }
    }*/
   
   if (Tip==0)                                                       // Åñëè îðäåð íà ïîêóïêó
    {
    if (Close[1]>Max_Peak)
     {
     Max_Peak=Close[1];
     }
    if (Open_Bar_Close_Price==Close[2] && More_Than_One_Bar_Left==false)
     {
     More_Than_One_Bar_Left=true;
     }
    
    if (Close[1]<=MA1)
     {
     OrderClose(Ticket, Lot, Bid, 2);
     }
    else
     {
     if (More_Than_One_Bar_Left==true)
      {
      A=Max_Peak-Price;
      B=Close[1]-Price;
      if (A-B>A/3.5 && Close[2]-Close[1]>=Money_Buffer && A<=0.01 && A>0.006 && Close[2]>Close[1])
       {
       OrderClose(Ticket, Lot, Bid, 2);
       }
      else
       {
       if (A>0.01 && A<=0.015 && Bid-Price<SL_1)
        {
        OrderClose(Ticket, Lot, Bid, 2);
        }
       if (A>0.015 && A<=0.02 && Bid-Price<SL_2)
        {
        OrderClose(Ticket, Lot, Bid, 2);
        }
       if (A>0.02 && A<=0.025 && Bid-Price<SL_3)
        {
        OrderClose(Ticket, Lot, Bid, 2);
        }
       if (A>0.025 && A<=0.029 && Bid-Price<SL_4)
        {
        OrderClose(Ticket, Lot, Bid, 2);
        }
       if (A>0.029 && A<=0.03 && Bid-Price<SL_5)
        {
        OrderClose(Ticket, Lot, Bid, 2);
        }
       }
      }
     }
    }
   
   if (Tip==1)                                                       // Åñëè îðäåð íà ïðîäàæó
    {
    if (Close[1]<Max_Peak)
     {
     Max_Peak=Close[1];
     }
    if (Open_Bar_Close_Price==Close[2] && More_Than_One_Bar_Left==false)
     {
     More_Than_One_Bar_Left=true;
     }
    
    if (Close[1]>=MA1)
     {
     OrderClose(Ticket, Lot, Ask, 2);
     }
    else
     {
     if (More_Than_One_Bar_Left==true)
      {
      A=Price-Max_Peak;
      B=Price-Close[1];
      if (A-B>A/3.5 && Close[1]-Close[2]>=Money_Buffer && A<=0.01 && A>0.006 && Close[1]>Close[2])
       {
       OrderClose(Ticket, Lot, Ask, 2);
       }
      else
       {
       if (A>0.01 && A<=0.015 && Price-Ask<SL_1)
        {
        OrderClose(Ticket, Lot, Ask, 2);
        }
       if (A>0.015 && A<=0.02 && Price-Ask<SL_2)
        {
        OrderClose(Ticket, Lot, Ask, 2);
        }
       if (A>0.02 && A<=0.025 && Price-Ask<SL_3)
        {
        OrderClose(Ticket, Lot, Ask, 2);
        }
       if (A>0.025 && A<=0.029 && Price-Ask<SL_4)
        {
        OrderClose(Ticket, Lot, Ask, 2);
        }
       if (A>0.029 && A<=0.03 && Price-Ask<SL_5)
        {
        OrderClose(Ticket, Lot, Ask, 2);
        }
       }
      }
     }
    }
   }
  else                                                               //Åñëè íåò îòêðûòîãî îðäåðà
   {
   RefreshRates();
   if (cross_the_line(Close[3]) && Minute()==0)                      //Åñëè öåíà ïåðåñåêëà ÌÀ
    {
    if (Close[3]<Close[2] && Close[2]<Close[1]/*Close[2]-Close[1]<0.0004*/)//Åñëè öåíà èäåò ââåðõ
     {
      OrderSend(Symbol(),OP_BUY,Quarter_Balance(),Ask,2,Bid-StopLoss,Bid+Take_Profit);
      Max_Peak=Ask;
      Open_Bar_Close_Price=Close[1];
      More_Than_One_Bar_Left=false;
      /*Order_Hour=Hour();
      Order_Minute=Minute();
      Expiration_Hour=Order_Hour+Expiration;
      Expiration_Minute=Order_Minute;
      if (Expiration_Hour>=24)
       {
       Expiration_Hour=Expiration_Hour-24;
       }*/
     }
    else                                                             //Åñëè öåíà èäåò âíèç
     {
     if (Close[3]>Close[2] && Close[2]>Close[1]/*Close[1]-Close[2]<0.0004*/)
      {
      OrderSend(Symbol(),OP_SELL,Quarter_Balance(),Bid,2,Ask+StopLoss,Ask-Take_Profit);
      Max_Peak=Bid;
      Open_Bar_Close_Price=Close[1];
      More_Than_One_Bar_Left=false;
      /*Order_Hour=Hour();
      Order_Minute=Minute();
      Expiration_Hour=Order_Hour+Expiration;
      Expiration_Minute=Order_Minute;
      if (Expiration_Hour>=24)
       {
       Expiration_Hour=Expiration_Hour-24;
       }*/
      }
     }
    }
   else
    {
    if (cross_the_line2(Close[4]) && Minute()==0)
     {
     if (Close[4]<Close[3] && Close[3]-Close[2]<Second_Bar_Buffer && Close[1]>Close[2])//Åñëè öåíà èäåò ââåðõ
      {
      OrderSend(Symbol(),OP_BUY,Quarter_Balance(),Ask,2,Bid-StopLoss,Bid+Take_Profit);
      Max_Peak=Ask;
      Open_Bar_Close_Price=Close[1];
      More_Than_One_Bar_Left=false;
      /*Order_Hour=Hour();
      Order_Minute=Minute();
      Expiration_Hour=Order_Hour+Expiration;
      Expiration_Minute=Order_Minute;
      if (Expiration_Hour>=24)
       {
       Expiration_Hour=Expiration_Hour-24;
       }*/
      }
     else                                                             //Åñëè öåíà èäåò âíèç
      {
      if (Close[4]>Close[3] && Close[2]-Close[3]<Second_Bar_Buffer && Close[2]>Close[1])
       {
       OrderSend(Symbol(),OP_SELL,Quarter_Balance(),Bid,2,Ask+StopLoss,Ask-Take_Profit);
       Max_Peak=Bid;
       Open_Bar_Close_Price=Close[1];
       More_Than_One_Bar_Left=false;
       /*Order_Hour=Hour();
       Order_Minute=Minute();
       Expiration_Hour=Order_Hour+Expiration;
       Expiration_Minute=Order_Minute;
       if (Expiration_Hour>=24)
        {
        Expiration_Hour=Expiration_Hour-24;
        }*/
       }
      }
     /*else
      {
      if (cross_the_line2(Close[7]) && Minute()==0)
       {
       }
      }*/
     }
    }
   
   }
//----
   }
   return(0);
  }
//+------------------------------------------------------------------+
//| user's functions                                                 |
//+------------------------------------------------------------------+
bool cross_the_line(double Start_Price)
 { 
 if (Start_Price<=MA2 && Bid>=MA && Close[2]>MA2) return(true);
 
 if (Start_Price>=MA2 && Bid<=MA && Close[2]<MA2) return(true);
 
 return(false);
 }
//----
bool cross_the_line2(double Start_Price)
 { 
 if (Start_Price<=MA3 && Bid>=MA && Close[3]>MA3) return(true);
 
 if (Start_Price>=MA3 && Bid<=MA && Close[3]<MA3) return(true);
 
 return(false);
 }
//----
double Quarter_Balance()
 {
 double Free,
        One_Lot,
        Step,
        Lots,
        Min_Lot,
        Max_Lot;
 
 RefreshRates();                                  // Îáíîâëåíèå äàííûõ
 Free   =AccountFreeMargin();                     // Ñâîáîäí ñðåäñòâà
 One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);// Ñòîèìîñòü 1 ëîòà
 Step   =MarketInfo(Symbol(),MODE_LOTSTEP);       // Øàã èçìåíåí ðàçìåðà
 Min_Lot=MarketInfo(Symbol(),MODE_MINLOT);
 Max_Lot=MarketInfo(Symbol(),MODE_MAXLOT);
 
 Lots=MathFloor(Free*Deal_Percent/100/One_Lot/Step)*Step;
 
 if(Lots<Min_Lot) Lots=Min_Lot;
 if(Lots>Max_Lot) Lots=Max_Lot;
 
 return(Lots);
 }

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