Fibo_Open_Day_Safe_v_1_00

Author: Copyright � 2009, �������� ������� ����������
Orders Execution
It automatically opens orders when conditions are reachedIt 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_00
//+------------------------------------------------------------------+
//|                                           Fibo Open Day Safe.mq4 |
//|                    Copyright © 2009, Ñòåöåíêî Äìèòðèé Äìèòðèåâè÷ |
//|                                                          http:// |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Ñòåöåíêî Äìèòðèé Äìèòðèåâè÷"
#property link      "http://"

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

int Count=0;
   
   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 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 + 0.0034;
   FB2 = openPrice + 0.0089;
   FB3 = openPrice + 0.0144;
   
   FS1 = openPrice - 0.0034;
   FS2 = openPrice - 0.0089;
   FS3 = openPrice - 0.0144;
   
   OrdFin[0]=0;
   OrdFin[1]=0;
   OrdFin[2]=0;
   OrdFin[3]=0;
   
   expDate = TimeCurrent() + 86000;
   return(0);
} 

int SetStopOrders()
{
   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 start()
  {
  /////// Öûêë Ñèñòåìû ///////
   if(TimeDay(TimeCurrent())!=CurrentDay)//Èíèöèàëèçàöèÿ îðäåðîâ â íà÷àëå äíÿ
   {
      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 ---