Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
e-Trailing2
//+----------------------------------------------------------------------------+
//| e-Trailing2.mq4 |
//| |
//| Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//| |
//+----------------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link "http://www.kimiv.ru"
//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -----------------------------------------+
extern string _P_Expert="---------- Ïàðàìåòðû ñîâåòíèêà";
extern bool AllSymbols = True; // Ñëåäèòü çà ïîçèöèÿìè âñåõ ñèìâîëîâ
extern int Magic = -1; // Èäåíòèôèêàòîð ïîçèöèé
extern int TrailingStart = 3; // Íà÷àëüíûé óðîâåíü òðàëà
extern int TStop_Buy = 50; // Ðàçìåð òðàëà â ïóíêòàõ äëÿ ïîêóïîê
extern int TStop_Sell = 35; // Ðàçìåð òðàëà â ïóíêòàõ äëÿ ïðîäàæ
extern int TrailingStep = 3; // Øàã òðàëà â ïóíêòàõ
extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèé
//------- Ïàðàìåòðû èñïîëíåíèÿ òîðãîâûõ ïðèêàçîâ ------------------------------+
extern string _P_Performance="---------- Ïàðàìåòðû èñïîëíåíèÿ";
extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string SoundSuccess = "expert.wav"; // Çâóê óñïåõà
extern string SoundError = "timeout.wav"; // Çâóê îøèáêè
extern int NumberOfTry = 2; // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
bool gbDisabled = False; // Ôëàã áëîêèðîâêè ñîâåòíèêà
bool gbNoInit = False; // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
color clModifyBuy = Aqua; // Öâåò çíà÷êà ìîäèôèêàöèè ïîêóïêè
color clModifySell = Tomato; // Öâåò çíà÷êà ìîäèôèêàöèè ïðîäàæè
//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh>
//+----------------------------------------------------------------------------+
//| |
//| ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| expert initialization function |
//+----------------------------------------------------------------------------+
void init()
{
gbNoInit=False;
if(!IsTradeAllowed())
{
Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
gbNoInit=True; return;
}
if(!IsLibrariesAllowed())
{
Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
gbNoInit=True; return;
}
if(!IsTesting())
{
if(IsExpertEnabled()) Message("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
else Message("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
}
start();
}
//+----------------------------------------------------------------------------+
//| expert deinitialization function |
//+----------------------------------------------------------------------------+
void deinit()
{
if(!IsTesting()) Comment("");
}
//+----------------------------------------------------------------------------+
//| expert start function |
//+----------------------------------------------------------------------------+
void start()
{
if(gbDisabled)
{
Message("Êðèòè÷åñêàÿ îøèáêà! Ñîâåòíèê ÎÑÒÀÍÎÂËÅÍ!"); return;
}
if(gbNoInit)
{
Message("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
}
if(ShowComment)
{
Comment(IIFs(AllSymbols,"AllSymbols ","")
,"Magic=",IIFs(Magic<0,"Ëþáîé",DoubleToStr(Magic,0))," "
,"TrailingStart=",DoubleToStr(TrailingStart,0)," ï. "
,"TStop_Buy=",DoubleToStr(TStop_Buy,0)," ï. "
,"TStop_Sell=",DoubleToStr(TStop_Sell,0)," ï. "
,"TrailingStep=",DoubleToStr(TrailingStep,0)," ï. "
);
}
else Comment("");
string sy=IIFs(AllSymbols,"",NULL);
SimpleTrailing(sy,-1,Magic);
}
//+----------------------------------------------------------------------------+
//| |
//| ÏÎËÜÇÎÂÀÒÅËÜÑÊÈÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
string GetNameOP(int op)
{
switch(op)
{
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("BuyLimit");
case OP_SELLLIMIT: return("SellLimit");
case OP_BUYSTOP : return("BuyStop");
case OP_SELLSTOP : return("SellStop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 18.07.2008 |
//| Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ. |
//+----------------------------------------------------------------------------+
color IIFc(bool condition,color ifTrue,color ifFalse)
{
if(condition) return(ifTrue); else return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.02.2008 |
//| Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ. |
//+----------------------------------------------------------------------------+
string IIFs(bool condition,string ifTrue,string ifFalse)
{
if(condition) return(ifTrue); else return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| m - òåêñò ñîîáùåíèÿ |
//+----------------------------------------------------------------------------+
void Message(string m)
{
Comment(m);
if(StringLen(m)>0) Print(m);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 28.11.2006 |
//| Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| pp - öåíà óñòàíîâêè îðäåðà |
//| sl - öåíîâîé óðîâåíü ñòîïà |
//| tp - öåíîâîé óðîâåíü òåéêà |
//| ex - äàòà èñòå÷åíèÿ |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1,double sl=0,double tp=0,datetime ex=0)
{
bool fm;
color cl=IIFc(OrderType()==OP_BUY
|| OrderType()==OP_BUYLIMIT
|| OrderType()==OP_BUYSTOP, clModifyBuy, clModifySell);
double op,pa,pb,os,ot;
int dg=MarketInfo(OrderSymbol(),MODE_DIGITS),er,it;
if(pp<=0) pp=OrderOpenPrice();
if(sl<0 ) sl=OrderStopLoss();
if(tp<0 ) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);
op=NormalizeDouble(OrderOpenPrice() , dg);
os=NormalizeDouble(OrderStopLoss() , dg);
ot=NormalizeDouble(OrderTakeProfit(), dg);
if(pp!=op || sl!=os || tp!=ot)
{
for(it=1; it<=NumberOfTry; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(),pp,sl,tp,ex,cl);
if(fm)
{
if(UseSound) PlaySound(SoundSuccess); break;
} else {
er=GetLastError();
if(UseSound) PlaySound(SoundError);
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(),
" op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);
Sleep(1000*10);
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 11.09.2008 |
//| Îïèñàíèå : Ñîïðîâîæäåíèå ïîçèöèé ïðîñòûì òðàëîì |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ( "" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ ( -1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber ( -1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
void SimpleTrailing(string sy="",int op=-1,int mn=-1)
{
double po,pp;
int i,k=OrdersTotal();
if(sy==NULL) sy=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
po=MarketInfo(OrderSymbol(),MODE_POINT);
if(mn<0 || OrderMagicNumber()==mn)
{
if(OrderType()==OP_BUY)
{
pp=MarketInfo(OrderSymbol(),MODE_BID);
if(pp-OrderOpenPrice()>=TrailingStart*po)
{
if(OrderStopLoss()<pp-(TStop_Buy+TrailingStep-1)*po)
{
ModifyOrder(-1,pp-TStop_Buy*po,-1);
}
}
}
if(OrderType()==OP_SELL)
{
pp=MarketInfo(OrderSymbol(),MODE_ASK);
if(OrderOpenPrice()-pp>=TrailingStart*po)
{
if(OrderStopLoss()>pp+(TStop_Sell+TrailingStep-1)*po || OrderStopLoss()==0)
{
ModifyOrder(-1,pp+TStop_Sell*po,-1);
}
}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
Comments