Fibo_Open_Day_Safe_v_1_03

Author: Copyright � 2009, �������� ������� ����������
Orders Execution
It automatically opens orders when conditions are reachedIt Closes Orders by itself
Indicators Used
Moving average indicator
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Fibo_Open_Day_Safe_v_1_03
//+------------------------------------------------------------------+
//|                                           Fibo Open Day Safe.mq4 |
//|                    Copyright © 2009, Ñòåöåíêî Äìèòðèé Äìèòðèåâè÷ |
//|                                                          http:// |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Ñòåöåíêî Äìèòðèé Äìèòðèåâè÷"
#property link      "http://"

extern double Lots = 0.01;              // Âíåøíÿÿ ïåðåìåííàÿ
extern int MagicNumber = 777;
   
   bool IsNewDay = false;

   //////// ------------ /////////
   int SystemState = 0; //
   // 0 - Idle
   // 1 - OpenOrder
   // 2 - SafeProfit
   // 3 - StopLoss

   double FB1, FB2, FB3, FS1, FS2, FS3;// Óðîâíè ôèáîíà÷÷è
   int CurrentDay=0;                   // Äàòà òåêóùåãî äíÿ
   double openPrice;                   // öåíà îòêðûòèÿ äíÿ
   int CurrentOrderId=0;               // Òèêåò îòêðûòîãî îðäåðà
   int OrdFin[3];
   int delta;
   
   extern bool OpenFB1=true;
   extern bool OpenFB2=true;
   extern bool OpenFS1=true;
   extern bool OpenFS2=true;
   
   extern int EMA1Mode=0;
   extern int EMA2Mode=0;
   
   extern int EMA1Type=0;
   extern int EMA2Type=0;
   
   extern int border=3;
   extern bool ReopenOrders=true;
   bool expirationForOrders=false; //èñòå÷åíèå äëÿ îðäåðîâ
   
   extern int FB1SafeLoss = 10; int FB1SafeProfitTrailLevel = 10, FB1SafeProfit = 1;// SafeLoss - íà÷àëüíûé ÑòîïËîññ äëÿ îðäåðà, 
   extern int FB2SafeLoss = 10; int FB2SafeProfitTrailLevel = 10, FB2SafeProfit = 1;// SafeProfitTrailLevel - óðîâíü ïðè êîòîðîì îðäåð òðåéëèòñÿ
   extern int FS1SafeLoss = 10; int FS1SafeProfitTrailLevel = 10, FS1SafeProfit = 1;// SafeProfit - êîëè÷åñòâî ïóíêòîâ ìèíèìàëüíîãî âûèãðûøà âìåñòî ëîñÿ
   extern int FS2SafeLoss = 10; int FS2SafeProfitTrailLevel = 10, FS2SafeProfit = 1;
   
   extern int StopMA = 5;
   
   int FB1id, FB2id, FS1id, FS2id;
   
   extern int SlowMA = 2;
   extern int FastMA = 10;
   
   //////// ------------ /////////
   
   datetime expDate;
   
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   CurrentDay=TimeDay(TimeCurrent())-1;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int InitializeFiboLevels()
{
   SystemState = 0;//ðåæèì îæèäàíèÿ
   openPrice = Ask-Point;
   
   FB1 = openPrice + 34*Point;
   FB2 = openPrice + 89*Point;
   FB3 = openPrice + 144*Point;

   FS1 = openPrice - 34*Point;
   FS2 = openPrice - 89*Point;
   FS3 = openPrice - 144*Point;
   
   OrdFin[0]=0;
   OrdFin[1]=0;
   OrdFin[2]=0;
   OrdFin[3]=0;
   
   expDate = TimeCurrent() + 86000;
   return(0);
} 

int SetStopOrders()
{
   if(expirationForOrders==false)expDate=0;
   if(OpenFB1==true)FB1id = OrderSend(Symbol(), OP_BUYSTOP, Lots, FB1, 0.01, FB1-FB1SafeLoss*Point, FB2, "FB1", MagicNumber, expDate, MediumBlue);
   if(OpenFS1==true)FS1id = OrderSend(Symbol(), OP_SELLSTOP, Lots, FS1, 0.01, FS1+FS1SafeLoss*Point, FS2, "FS1", MagicNumber, expDate, IndianRed);
   
   if(OpenFB2==true)FB2id = OrderSend(Symbol(), OP_BUYSTOP, Lots, FB2, 0.01, FB2-FB2SafeLoss*Point, FB3, "FB2", MagicNumber, expDate, MediumBlue);
   if(OpenFS2==true)FS2id = OrderSend(Symbol(), OP_SELLSTOP, Lots, FS2, 0.01, FS2+FS2SafeLoss*Point, FS3, "FS2", MagicNumber, expDate, IndianRed);

   return(0);
}

int CheckOpenOrder()
{
   //Åñëè îòëîæåíûé ñòàë íà ïðîäàæó èëè íà ïîêóïêó
   if(OpenFB1==true)
   {
      OrderSelect(FB1id, SELECT_BY_TICKET);
      if((OrderType()==OP_BUY) && (OrderCloseTime()==0))return(FB1id);
   }
   
   if(OpenFB2==true)
   {
      OrderSelect(FB2id, SELECT_BY_TICKET);
      if((OrderType()==OP_BUY) && (OrderCloseTime()==0))return(FB2id);
   }
   
   
   if(OpenFS1==true)
   {
      OrderSelect(FS1id, SELECT_BY_TICKET);
      if((OrderType()==OP_SELL) && (OrderCloseTime()==0))return(FS1id);
   }
   
   if(OpenFS2==true)
   {
      OrderSelect(FS2id, SELECT_BY_TICKET);
      if((OrderType()==OP_SELL) && (OrderCloseTime()==0))return(FS2id);
   }
   return(0);
}

int DeleteOrders()
{
   bool isCloseSuccess=true;
   bool isSelectSuccess=true;
   
   isSelectSuccess=OrderSelect(FB1id, SELECT_BY_TICKET);
   if(isSelectSuccess)
   {
      if((OrderType()==OP_BUY) && (OrderCloseTime()==0))isCloseSuccess=OrderClose(FB1id, OrderLots(), Bid, 10*Point, CLR_NONE);
      if((OrderType()==OP_BUYSTOP) && (OrderCloseTime()==0))isCloseSuccess=OrderDelete(FB1id);
   }
   
   isSelectSuccess=OrderSelect(FB2id, SELECT_BY_TICKET);
   if(isSelectSuccess)
   {
      if((OrderType()==OP_BUY) && (OrderCloseTime()==0))isCloseSuccess=OrderClose(FB2id, OrderLots(), Bid, 10*Point, CLR_NONE);
      if((OrderType()==OP_BUYSTOP) && (OrderCloseTime()==0))isCloseSuccess=OrderDelete(FB2id);
   }
   
   isSelectSuccess=OrderSelect(FS1id, SELECT_BY_TICKET);
   if(isSelectSuccess)
   {
      if((OrderType()==OP_SELL) && (OrderCloseTime()==0))isCloseSuccess=OrderClose(FS1id, OrderLots(), Ask, 10*Point, CLR_NONE);
      if((OrderType()==OP_SELLSTOP) && (OrderCloseTime()==0))isCloseSuccess=OrderDelete(FS1id);
   }
   
   isSelectSuccess=OrderSelect(FS2id, SELECT_BY_TICKET);
   if(isSelectSuccess)
   {
      if((OrderType()==OP_SELL) && (OrderCloseTime()==0))isCloseSuccess=OrderClose(FS2id, OrderLots(), Ask, 10*Point, CLR_NONE);
      if((OrderType()==OP_SELLSTOP) && (OrderCloseTime()==0))isCloseSuccess=OrderDelete(FS2id);
   }
   
   if(isCloseSuccess==false)Alert("Something wrong with close orders, codeErr = "+GetLastError());
   return(0);
}

int DifMA(int offset)
{
   double iMA2 = iMA(NULL, 0, FastMA, 0, EMA1Mode, EMA1Type, offset);
   double iMA10 = iMA(NULL, 0, SlowMA, 0, EMA2Mode, EMA2Type, offset);
   int res = (iMA2-iMA10)/Point;
   return(res);
}

int start()
  {
  /////// Öûêë Ñèñòåìû ///////
   if(TimeDay(TimeCurrent())!=CurrentDay)//Èíèöèàëèçàöèÿ îðäåðîâ â íà÷àëå äíÿ
   {
      if(expirationForOrders==false)DeleteOrders();//ïðîâåðêà íà çàïóñê ñîâåòíèêà
      
      InitializeFiboLevels();
      SetStopOrders();
      CurrentDay = TimeDay(TimeCurrent());
      return(0);
   }
   
   if(SystemState==0)//Åñëè ñèñòåìà â ðåæèìå îæèäàíèÿ æäåì îòêðûòèÿ îðäåðà
   {
      CurrentOrderId = CheckOpenOrder();
      if(CurrentOrderId!=0)
      {
         SystemState=1;//Ñîñòîÿíèå ñèñòåìû èçìåíèëîñü íà îòêðûòû îðäåð
      }
   }
   
   if(SystemState==1)//Åñëè ñèñòåìà â ðåæèìå îòêðûòèÿ îðäåðà - ñëåäèò çà óñòàíîâêîé îðäåðà â áåçóáûòîê
   {
      
      OrderSelect(CurrentOrderId, SELECT_BY_TICKET);
      if(OrderCloseTime()==0)//Åñëè îòêðûòûé îðäåð íå çàêðûò
      {
         bool isSuccess;
         //delta = (Ask - OrderOpenPrice())/Point; //ðàñòîÿíèå ìåæäó öåíîé è îòêðûòèåì îðäåðà
         if((OrderComment()=="FB1")&&(DifMA(0)<-StopMA))//åñëè îðäåð íà ïîêóïêó 1
         {
               isSuccess=OrderClose(FB1id, OrderLots(), Bid, 10*Point, CLR_NONE);
               if(isSuccess)SystemState=3; else Alert("Something wrong with order Close");
               return(0);
         }    
  
         if((OrderComment()=="FB2")&&(DifMA(0)<-StopMA))//åñëè îðäåð íà ïîêóïêó 2
         {
               isSuccess=OrderClose(FB2id, OrderLots(), Bid, 10*Point, CLR_NONE);
               if(isSuccess)SystemState=3; else Alert("Something wrong with order Close");
               return(0);
         }
         
         delta = (OrderOpenPrice()-Bid)/Point;
         if((OrderComment()=="FS1")&&(DifMA(0)>StopMA))//åñëè îðäåð íà ïðîäàæó 1
         {
               isSuccess=OrderClose(FS1id, OrderLots(), Ask, 10*Point, CLR_NONE);
               if(isSuccess)SystemState=3; else Alert("Something wrong with order Close");
               return(0);
         }
         if((OrderComment()=="FS2")&&(DifMA(0)>StopMA))//åñëè îðäåð íà ïðîäàæó 2
         {
               isSuccess=OrderClose(FS2id, OrderLots(), Ask, 10*Point, CLR_NONE);
               if(isSuccess)SystemState=3; else Alert("Something wrong with order Close");
               return(0);
         }   
      }else//Åñëè îðäåð çàêðûò ìåíÿåì ñîñòîÿíèå ñèñòåìû
      {
         if(OrderClosePrice()==OrderStopLoss())SystemState=3;//Ïåðåâîäèì ñèñòåìó â ðåæèì Ñòîïëîññà ÷òîá îíà îòêðûëà íîâûé îðäåð êîãäà áóäåò ïîäõîäÿùèé ìîìåíò
         if(OrderClosePrice()==OrderTakeProfit())
         {
            if(CurrentOrderId == FB1id)OrdFin[0]=1;
            if(CurrentOrderId == FB2id)OrdFin[1]=1;
            if(CurrentOrderId == FS1id)OrdFin[2]=1;
            if(CurrentOrderId == FS2id)OrdFin[3]=1;
            SystemState=0;//Ïåðâûé ïðîôèò âçÿëè ïåðåâîäèì ñèñòåìó â ñîñòîÿíèå îæèäàíèÿ ñëóäóþùåãî îðäåðà
         }
         return(0);
      }
   }
   
   if(SystemState==2)//Ñèñòåìà â ðåæèìå îðäåðà áåçóáûòêà è æäåò ëèáî ñòîïËîññà ëèáî ïðîôèòà
   {
      OrderSelect(CurrentOrderId, SELECT_BY_TICKET);
      if(OrderClosePrice()==OrderStopLoss()){SystemState=3; return(0);}//Ïåðåâîäèì ñèñòåìó â ðåæèì Ñòîïëîññà ÷òîá îíà îòêðûëà íîâûé îðäåð êîãäà áóäåò ïîäõîäÿùèé ìîìåíò
      if(OrderClosePrice()==OrderTakeProfit()){SystemState=0; return(0);}//Ïåðâûé ïðîôèò âçÿëè ïåðåâîäèì ñèñòåìó â ñîñòîÿíèå îæèäàíèÿ ñëóäóþùåãî îðäåðà
   }
   
   if(SystemState==3)//Åñëè Ñèñòåìà â ðåæèìå îñòàíîâêè îðäåðà ïî ñòîïëîññó
   {
      if(ReopenOrders==false)
      {
         SystemState = 0;//æäåì ñëåäóþùåãî îðäåðà
         return(0);
      }
      OrderSelect(CurrentOrderId, SELECT_BY_TICKET);
      
      if((OrderType()==OP_BUY) && (OrderCloseTime()>0))
      {
         delta = (OrderOpenPrice()-Ask)/Point;
         if((OrderComment()=="FB1[sl]")&&(delta>border))//åñëè îðäåð íà ïîêóïêó 1
         {
               if(OrdFin[0]==0)FB1id=OrderSend(Symbol(), OP_BUYSTOP, Lots, FB1, 0.01, FB1-FB1SafeLoss*Point, FB2, "FB1", MagicNumber, expDate, MediumBlue);
               SystemState=0;
               return(0);
         }      
         if((OrderComment()=="FB2[sl]")&&(delta>border))//åñëè îðäåð íà ïîêóïêó 2
         {
               if(OrdFin[1]==0)FB2id = OrderSend(Symbol(), OP_BUYSTOP, Lots, FB2, 0.01, FB2-FB2SafeLoss*Point, FB3, "FB2", MagicNumber, expDate, MediumBlue);
               SystemState=0;
               return(0);
         }
      }
      if((OrderType()==OP_SELL) && (OrderCloseTime()>0))
      {
         delta = (Bid-OrderOpenPrice())/Point;
         if((OrderComment()=="FS1[sl]")&&(delta>border))//åñëè îðäåð íà ïîêóïêó 1
         {
               if(OrdFin[2]==0)FS1id = OrderSend(Symbol(), OP_SELLSTOP, Lots, FS1, 0.01, FS1+FS1SafeLoss*Point, FS2, "FS1", MagicNumber, expDate, IndianRed);
               SystemState=0;
               return(0);
         }      
         if((OrderComment()=="FS2[sl]")&&(delta>border))//åñëè îðäåð íà ïîêóïêó 2
         {
               if(OrdFin[3]==0)FS2id = OrderSend(Symbol(), OP_SELLSTOP, Lots, FS2, 0.01, FS2+FS2SafeLoss*Point, FS3, "FS2", MagicNumber, expDate, IndianRed);
               SystemState=0;
               return(0);
         }
      }
   }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

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