Orders Execution
Indicators Used
Miscellaneous
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---