Fibo_Open_Day_Safe_v_1_01

Author: Copyright � 2009, �������� ������� ����������
Orders Execution
It automatically opens orders when conditions are reachedIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Fibo_Open_Day_Safe_v_1_01
//+------------------------------------------------------------------+
//|                                           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];
   extern int border=3;
   extern bool ReopenOrders=true;
   extern bool expirationForOrders=true;
   
   extern int FB1SafeLoss = 10, FB1SafeProfitTrailLevel = 10, FB1SafeProfit = 1;// SafeLoss - íà÷àëüíûé ÑòîïËîññ äëÿ îðäåðà, 
   extern int FB2SafeLoss = 10, FB2SafeProfitTrailLevel = 10, FB2SafeProfit = 1;// SafeProfitTrailLevel - óðîâíü ïðè êîòîðîì îðäåð òðåéëèòñÿ
   extern int FS1SafeLoss = 10, FS1SafeProfitTrailLevel = 10, FS1SafeProfit = 1;// SafeProfit - êîëè÷åñòâî ïóíêòîâ ìèíèìàëüíîãî âûèãðûøà âìåñòî ëîñÿ
   extern int FS2SafeLoss = 10, FS2SafeProfitTrailLevel = 10, FS2SafeProfit = 1;
   
   int FB1id, FB2id, FS1id, FS2id;
   
   //////// ------------ /////////
   
   datetime expDate;
   
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   CurrentDay=TimeDay(TimeCurrent());
//----
   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 + 55*Point;
   FB3 = openPrice + 89*Point;

   FS1 = openPrice - 34*Point;
   FS2 = openPrice - 55*Point;
   FS3 = openPrice - 89*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;
   FB1id = OrderSend(Symbol(), OP_BUYSTOP, Lots, FB1, 0.01, FB1-FB1SafeLoss*Point, FB2, "FB1", MagicNumber, expDate, MediumBlue);
   FS1id = OrderSend(Symbol(), OP_SELLSTOP, Lots, FS1, 0.01, FS1+FS1SafeLoss*Point, FS2, "FS1", MagicNumber, expDate, IndianRed);
   
   FB2id = OrderSend(Symbol(), OP_BUYSTOP, Lots, FB2, 0.01, FB2-FB2SafeLoss*Point, FB3, "FB2", MagicNumber, expDate, MediumBlue);
   FS2id = OrderSend(Symbol(), OP_SELLSTOP, Lots, FS2, 0.01, FS2+FS2SafeLoss*Point, FS3, "FS2", MagicNumber, expDate, IndianRed);
   return(0);
}

int CheckOpenOrder()
{
   //Åñëè îòëîæåíûé ñòàë íà ïðîäàæó èëè íà ïîêóïêó
   OrderSelect(FB1id, SELECT_BY_TICKET, MODE_TRADES);
   if((OrderType()==OP_BUY) && (OrderCloseTime()==0))return(FB1id);
   
   OrderSelect(FB2id, SELECT_BY_TICKET, MODE_TRADES);
   if((OrderType()==OP_BUY) && (OrderCloseTime()==0))return(FB2id);
   
   OrderSelect(FS1id, SELECT_BY_TICKET, MODE_TRADES);
   if((OrderType()==OP_SELL) && (OrderCloseTime()==0))return(FS1id);
   
   OrderSelect(FS2id, SELECT_BY_TICKET, MODE_TRADES);
   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 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;
         int delta = (Ask - OrderOpenPrice())/Point; //ðàñòîÿíèå ìåæäó öåíîé è îòêðûòèåì îðäåðà
         if((OrderComment()=="FB1")&&(delta>FB1SafeProfitTrailLevel))//åñëè îðäåð íà ïîêóïêó 1
         {
               isSuccess=OrderModify(CurrentOrderId, OrderOpenPrice(), OrderOpenPrice()+FB1SafeProfit*Point, OrderTakeProfit(), OrderExpiration(), DarkGreen);
               if(isSuccess)SystemState=2; else Alert("Something wrong with order modify");
               return(0);
         }    
  
         if((OrderComment()=="FB2")&&(delta>FB2SafeProfitTrailLevel))//åñëè îðäåð íà ïîêóïêó 2
         {
               isSuccess=OrderModify(CurrentOrderId, OrderOpenPrice(), OrderOpenPrice()+FB2SafeProfit*Point, OrderTakeProfit(), OrderExpiration(), DarkGreen);
               if(isSuccess)SystemState=2; else Alert("Something wrong with order modify");
               return(0);
         }
         
         delta = (OrderOpenPrice()-Bid)/Point;
         if((OrderComment()=="FS1")&&(delta>FS1SafeProfitTrailLevel))//åñëè îðäåð íà ïðîäàæó 1
         {
               isSuccess=OrderModify(CurrentOrderId, OrderOpenPrice(), OrderOpenPrice()-FS1SafeProfit*Point, OrderTakeProfit(), OrderExpiration(), DarkGreen);
               if(isSuccess)SystemState=2; else Alert("Something wrong with order modify");
               return(0);
         }
         if((OrderComment()=="FS2")&&(delta>FS2SafeProfitTrailLevel))//åñëè îðäåð íà ïðîäàæó 2
         {
               isSuccess=OrderModify(CurrentOrderId, OrderOpenPrice(), OrderOpenPrice()-FS2SafeProfit*Point, OrderTakeProfit(), OrderExpiration(), DarkGreen);
               if(isSuccess)SystemState=2; else Alert("Something wrong with order modify");
               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))
      {
         Alert("ReOpenOrder BUY");
         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 ---