Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
e-SOTrailing
//+----------------------------------------------------------------------------+
//| e-SOTrailing.mq4 |
//| |
//| Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//| |
//+----------------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link "http://www.kimiv.ru"
//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -----------------------------------------+
extern bool AllSymbols = False; // Óïðàâëÿòü âñåìè ñòîïîâûìè îðäåðàìè
extern int MagicNumber = -1; // Èäåíòèôèêàòîð îðäåðîâ
extern int TrailingStop = 20; // Ôèêñèðîâàííûé ðàçìåð òðàëà
extern int TrailingStep = 3; // Øàã òðàëà
extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèé
extern color clModifyBuy = Aqua; // Öâåò çíà÷êà ìîäèôèêàöèè ïîêóïêè
extern color clModifySell = Tomato; // Öâåò çíà÷êà ìîäèôèêàöèè ïðîäàæè
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
bool gbNoInit = False; // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
string SoundSuccess = "ok.wav"; // Çâóê óñïåõà
string SoundError = "timeout.wav"; // Çâóê îøèáêè
int NumberOfTry = 3; // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê
//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh> // Ñòàíäàðòíàÿ áèáëèîòåêà
//+----------------------------------------------------------------------------+
//| |
//| ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| expert initialization function |
//+----------------------------------------------------------------------------+
void init()
{
gbNoInit=False;
if(!IsTradeAllowed())
{
Comment("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
gbNoInit=True; return;
}
if(!IsLibrariesAllowed())
{
Comment("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
"Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
gbNoInit=True; return;
}
if(!IsTesting())
{
if(IsExpertEnabled()) Comment("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
else Comment("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
}
start();
}
//+----------------------------------------------------------------------------+
//| expert deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() { if(!IsTesting()) Comment(""); }
//+----------------------------------------------------------------------------+
//| expert start function |
//+----------------------------------------------------------------------------+
void start()
{
if(gbNoInit)
{
Comment("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
}
if(!IsTesting())
{
if(ShowComment)
{
Comment(IIFs(AllSymbols,"AllSymbols ","")
,"MagicNumber=",DoubleToStr(MagicNumber,0)," "
,"TrailingStop=",DoubleToStr(TrailingStop,0),"ï. "
,"TrailingStep=",DoubleToStr(TrailingStep,0),"ï. "
,IIFs(UseSound,"UseSound ","")
);
}
else Comment("");
}
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(AllSymbols || OrderSymbol()==Symbol())
{
if(MagicNumber<0 || OrderMagicNumber()==MagicNumber)
{
TrailingOrders();
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. 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 |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 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);
}
}
}
}
//+----------------------------------------------------------------------------+
//| Ñîïðîâîæäåíèå îðäåðîâ ïðîñòûì òðàëîì |
//+----------------------------------------------------------------------------+
void TrailingOrders()
{
double di,pa,pb,pp,sl,tp;
pp=MarketInfo(OrderSymbol(),MODE_POINT);
if(OrderType()==OP_BUYSTOP)
{
pa=MarketInfo(OrderSymbol(),MODE_ASK);
if(OrderOpenPrice()-pa>(TrailingStop+TrailingStep-1)*pp)
{
di=OrderOpenPrice()-pa-TrailingStop*pp;
if(OrderStopLoss() >0) sl=OrderStopLoss() -di; else sl=0;
if(OrderTakeProfit()>0) tp=OrderTakeProfit()-di; else tp=0;
ModifyOrder(pa+TrailingStop*pp,sl,tp);
}
}
if(OrderType()==OP_SELLSTOP)
{
pb=MarketInfo(OrderSymbol(),MODE_BID);
if(pb-OrderOpenPrice()>(TrailingStop+TrailingStep-1)*pp)
{
di=pb-OrderOpenPrice()-TrailingStop*pp;
if(OrderStopLoss() >0) sl=OrderStopLoss() +di; else sl=0;
if(OrderTakeProfit()>0) tp=OrderTakeProfit()+di; else tp=0;
ModifyOrder(pb-TrailingStop*pp,sl,tp);
}
}
}
//+------------------------------------------------------------------+
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
---