Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
e-TFL_v2
//+----------------------------------------------------------------------------+
//| e-TFL_v2.mq4 |
//| Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//| |
//+----------------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link "http://www.kimiv.ru"
//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà -----------------------------------------+
extern string _P_Expert="---------- Ïàðàìåòðû ñîâåòíèêà";
extern string NameUpLine = "UPLine"; // Íàèìåíîâàíèå âåðõíåé ëèíèè
extern string NameDnLine = "DNLine"; // Íàèìåíîâàíèå íèæíåé ëèíèè
extern bool BuyFromUp = False; // Ïîêóïàòü îò âåðõíåé ëèíèè
extern bool BuyFromDn = True; // Ïîêóïàòü îò íèæíåé ëèíèè
extern int OffsetTL = 3; // Ñìåùåíèå òîðãîâîãî óðîâíÿ
extern bool SetRevStopOrd = False; // Ñòàâèòü ïåðåâîðîòíûå ñòîï-îðäåðà
extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèè
extern bool MarketWatch = True; // Çàïðîñû ïîä èñïîëíåíèå "Market Watch".
extern int Magic = 20080320; // Èäåíòèôèêàòîð ïîçèöèé ñîâåòíèêà
extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
extern string _P_Trade="---------- Ïàðàìåòðû òîðãîâëè";
extern double Lots = 0.1; // Ðàçìåð òîðãóåìîãî ëîòà
extern int StopLoss = 30; // Ðàçìåð ôèêñèðîâàííîãî ñòîïà
extern int TakeProfit = 0; // Ðàçìåð ôèêñèðîâàííîãî òýéêà
extern int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû
extern int NumberOfTry = 5; // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê
//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
bool gbDisabled = False; // Ôëàã áëîêèðîâêè ñîâåòíèêà
bool gbNoInit = False; // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
color clOpenBuy = LightBlue; // Öâåò çíà÷êà îòêðûòèÿ ïîêóïêè
color clOpenSell = LightCoral; // Öâåò çíà÷êà îòêðûòèÿ ïðîäàæè
color clModifyBuy = Aqua; // Öâåò çíà÷êà ìîäèôèêàöèè ïîêóïêè
color clModifySell = Tomato; // Öâåò çíà÷êà ìîäèôèêàöèè ïðîäàæè
color clCloseBuy = Blue; // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color clCloseSell = Red; // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
double gdUpPrice, gdDnPrice; // Òåêóùèå öåíîâûå óðîâíè
double gdPrevUpPrice, gdPrevDnPrice; // Ïðåäûäóùèå öåíîâûå óðîâíè
double gdPrevAsk, gdPrevBid; // Ïðåäûäóùèå öåíû
//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh> // Ñòàíäàðòíàÿ áèáëèîòåêà ÌÒ4
//+----------------------------------------------------------------------------+
//| |
//| ÏÐÅÄÎÏÐÅÄÅ˨ÍÍÛÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| Ôóíêöèÿ èíèöèàëèçàöèè |
//+----------------------------------------------------------------------------+
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("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
}
}
//+----------------------------------------------------------------------------+
//| expert deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() { if(!IsTesting()) Comment(""); }
//+----------------------------------------------------------------------------+
//| expert program start function |
//+----------------------------------------------------------------------------+
void start()
{
if(gbDisabled)
{
Message("Êðèòè÷åñêàÿ îøèáêà! Ñîâåòíèê ÎÑÒÀÍÎÂËÅÍ!"); return;
}
if(gbNoInit)
{
Message("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
}
gdUpPrice=0; gdDnPrice=0;
if(idPriceLevel() && gdPrevAsk!=0 && gdPrevBid!=0) ManagePositions();
if(ShowComment)
{
string st="";
if(gdUpPrice==0) st="Íå îïðåäåë¸í âåðõíèé öåíîâîé óðîâåíü\n";
else
{
if(BuyFromUp) st="Ïîêóïêà îò ";
else st="Ïðîäàæà îò ";
st=st+DoubleToStr(gdUpPrice,Digits)+"\n";
if(SetRevStopOrd)
{
if(BuyFromUp) st=st+"SellStop íà "+DoubleToStr(gdUpPrice-StopLoss*Point,Digits)+"\n";
else st=st+"BuyStop íà "+DoubleToStr(gdUpPrice+StopLoss*Point,Digits)+"\n";
}
}
if(gdDnPrice==0) st=st+"Íå îïðåäåë¸í íèæíèé öåíîâîé óðîâåíü";
else
{
if(BuyFromDn) st=st+"Ïîêóïêà îò ";
else st=st+"Ïðîäàæà îò ";
st=st+DoubleToStr(gdDnPrice,Digits)+"\n";
if(SetRevStopOrd)
{
if(BuyFromDn) st=st+"SellStop íà "+DoubleToStr(gdDnPrice-StopLoss*Point,Digits)+"\n";
else st=st+"BuyStop íà "+DoubleToStr(gdDnPrice+StopLoss*Point,Digits)+"\n";
}
}
if(gdUpPrice>0 || gdDnPrice>0)
{
st="Lots="+DoubleToStr(Lots,2)+
" StopLoss="+StopLoss+" ï."+
" TakeProfit="+TakeProfit+" ï.\n"+st;
}
st="OffsetTL="+OffsetTL+IIFs(MarketWatch," MarketWatch","")+" Magic="+Magic+"\n"+st;
Comment(st);
}
if(gdUpPrice>0) gdPrevUpPrice=gdUpPrice;
if(gdDnPrice>0) gdPrevDnPrice=gdDnPrice;
gdPrevAsk=Ask;
gdPrevBid=Bid;
}
//+----------------------------------------------------------------------------+
//| |
//| ÏÎËÜÇÎÂÀÒÅËÜÑÊÈÅ ÔÓÍÊÖÈÈ |
//| |
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 19.02.2008 |
//| Îïèñàíèå: Çàêðûòèå îäíîé ïðåäâàðèòåëüíî âûáðàííîé ïîçèöèè |
//+----------------------------------------------------------------------------+
void ClosePosBySelect()
{
bool fc;
color clClose;
double ll,pa,pb,pp;
int err,it;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for(it=1; it<=NumberOfTry; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if(OrderType()==OP_BUY)
{
pp=pb; clClose=clCloseBuy;
} else {
pp=pa; clClose=clCloseSell;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if(fc)
{
if(UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
ErrorDescription(err),", try ",it);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}
}
}
else Print("Íåêîððåêòíàÿ òîðãîâàÿ îïåðàöèÿ. Close ",GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 19.02.2008 |
//| Îïèñàíèå : Çàêðûòèå ïîçèöèé ïî ðûíî÷íîé öåíå |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
void ClosePositions(string sy="",int op=-1,int mn=-1)
{
int i,k=OrdersTotal();
if(sy=="0") sy=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 12.03.2008 |
//| Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ îðäåðîâ. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáîé îðäåð) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//| ot - âðåìÿ îòêðûòèÿ ( 0 - ëþáîå âðåìÿ óñòàíîâêè) |
//+----------------------------------------------------------------------------+
bool ExistOrders(string sy="",int op=-1,int mn=-1,datetime ot=0)
{
int i,k=OrdersTotal(),ty;
if(sy=="0") sy=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ty=OrderType();
if(ty>1 && ty<6)
{
if((OrderSymbol()==sy || sy=="") && (op<0 || ty==op))
{
if(mn<0 || OrderMagicNumber()==mn)
{
if(ot<=OrderOpenTime()) return(True);
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 06.03.2008 |
//| Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèé |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//| ot - âðåìÿ îòêðûòèÿ ( 0 - ëþáîå âðåìÿ îòêðûòèÿ) |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="",int op=-1,int mn=-1,datetime ot=0)
{
int i,k=OrdersTotal();
if(sy=="0") sy=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==sy || sy=="")
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op<0 || OrderType()==op)
{
if(mn<0 || OrderMagicNumber()==mn)
{
if(ot<=OrderOpenTime()) return(True);
}
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. 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("Buy Limit");
case OP_SELLLIMIT: return("Sell Limit");
case OP_BUYSTOP : return("Buy Stop");
case OP_SELLSTOP : return("Sell Stop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òàéìôðåéìà |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| TimeFrame - òàéìôðåéì (êîëè÷åñòâî ñåêóíä) (0 - òåêóùèé ÒÔ) |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0)
{
if(TimeFrame==0) TimeFrame=Period();
switch(TimeFrame)
{
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("Daily");
case PERIOD_W1: return("Weekly");
case PERIOD_MN1: return("Monthly");
default: return("UnknownPeriod");
}
}
//+----------------------------------------------------------------------------+
//| Âîçâðàùàåò ðàçìåð ëîòà |
//+----------------------------------------------------------------------------+
double GetSizeLot() { return(Lots); }
//+----------------------------------------------------------------------------+
//| Èäåíòèôèêàöèÿ âåðõíåãî è íèæíåãî öåíîâûõ óðîâíåé |
//+----------------------------------------------------------------------------+
bool idPriceLevel()
{
// Âåðõíèé öåíîâîé óðîâåíü
if(ObjectFind(NameUpLine)<0)
{
gdUpPrice=0;
gdPrevUpPrice=0;
Message("Íå íàéäåíà ëèíèÿ "+NameUpLine);
} else {
switch(ObjectType(NameUpLine))
{
case OBJ_HLINE: gdUpPrice=ObjectGet(NameUpLine, OBJPROP_PRICE1); break;
case OBJ_TREND: gdUpPrice=ObjectGetValueByShift(NameUpLine, 0); break;
default: Message("Íåâåðíûé òèï ëèíèè "+NameUpLine); break;
}
if(gdUpPrice>0) gdUpPrice+=OffsetTL*Point;
}
// Íèæíèé öåíîâîé óðîâåíü
if(ObjectFind(NameDnLine)<0)
{
gdDnPrice=0;
gdPrevDnPrice=0;
Message("Íå íàéäåíà ëèíèÿ "+NameDnLine);
} else {
switch(ObjectType(NameDnLine))
{
case OBJ_HLINE: gdDnPrice=ObjectGet(NameDnLine, OBJPROP_PRICE1); break;
case OBJ_TREND: gdDnPrice=ObjectGetValueByShift(NameDnLine, 0); break;
default: Message("Íåâåðíûé òèï ëèíèè "+NameDnLine); break;
}
if(gdDnPrice>0) gdDnPrice-=OffsetTL*Point;
}
if(gdUpPrice<gdPrevBid && gdUpPrice>0)
{
gdUpPrice=0;
Message("Âåðõíÿÿ ëèíèÿ "+NameUpLine+" ðàñïîëîæåíà íèæå ðûíêà");
}
if(gdDnPrice>gdPrevAsk && gdPrevAsk>0)
{
gdDnPrice=0;
Message("Íèæíÿÿ ëèíèÿ "+NameDnLine+" ðàñïîëîæåíà âûøå ðûíêà");
}
if(gdUpPrice!=gdPrevUpPrice|| gdDnPrice!=gdPrevDnPrice
|| gdPrevUpPrice==0 || gdPrevDnPrice==0
|| gdUpPrice==0 || gdDnPrice==0) return(False);
else return(True);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 01.09.2005 |
//| Îïèñàíèå : Âîçâðàùàåò îäíî èç äâóõ çíà÷åíèé âçàâèñèìîñòè îò óñëîâèÿ. |
//+----------------------------------------------------------------------------+
string IIFs(bool condition,string ifTrue,string ifFalse)
{
if(condition) return(ifTrue); else return(ifFalse);
}
//+----------------------------------------------------------------------------+
//| Óïðàâëåíèå ïîçèöèÿìè |
//+----------------------------------------------------------------------------+
void ManagePositions()
{
bool lbBuy=False,lbSell=False;
double ll=GetSizeLot();
double pp,sl=0,tp=0;
int ti;
if((Ask>gdPrevAsk && Ask>=gdUpPrice && BuyFromUp)
|| (Ask<gdPrevAsk && Ask<=gdDnPrice && BuyFromDn)) lbBuy=True;
if((Bid>gdPrevBid && Bid>=gdUpPrice && !BuyFromUp)
|| (Bid<gdPrevBid && Bid<=gdDnPrice && !BuyFromDn)) lbSell=True;
if(lbBuy)
{
if(ExistPositions(NULL,OP_SELL,Magic)) ClosePositions(NULL,OP_SELL,Magic);
if(!ExistPositions(NULL,OP_BUY,Magic))
{
if(MarketWatch)
{
ti=OpenPosition("",OP_BUY,ll,0,0,Magic);
if(SelectByTicket(ti))
{
if(StopLoss >0) sl=Ask-StopLoss *Point; else sl=0;
if(TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0;
ModifyOrder(-1,sl,tp,clModifyBuy);
}
} else {
if(StopLoss >0) sl=Ask-StopLoss *Point; else sl=0;
if(TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0;
OpenPosition("",OP_BUY,ll,sl,tp,Magic);
}
if(SetRevStopOrd && sl>0 && !ExistOrders(NULL,OP_SELLSTOP,Magic))
{
pp=sl;
sl=pp+StopLoss*Point;
if(TakeProfit>0) tp=pp-TakeProfit*Point; else tp=0;
SetOrder("",OP_SELLSTOP,ll,pp,sl,tp,Magic);
}
}
}
if(lbSell)
{
if(ExistPositions(NULL,OP_BUY,Magic)) ClosePositions(NULL,OP_BUY,Magic);
if(!ExistPositions(NULL,OP_SELL,Magic))
{
if(MarketWatch)
{
ti=OpenPosition("",OP_SELL,ll,0,0,Magic);
if(SelectByTicket(ti))
{
if(StopLoss >0) sl=Bid+StopLoss *Point; else sl=0;
if(TakeProfit>0) tp=Bid-TakeProfit*Point; else tp=0;
ModifyOrder(-1,sl,tp,clModifySell);
}
} else {
if(StopLoss >0) sl=Bid+StopLoss *Point; else sl=0;
if(TakeProfit>0) tp=Bid-TakeProfit*Point; else tp=0;
OpenPosition("",OP_SELL,ll,sl,tp,Magic);
}
if(SetRevStopOrd && sl>0 && !ExistOrders(NULL,OP_BUYSTOP,Magic))
{
pp=sl;
sl=pp-StopLoss*Point;
if(TakeProfit>0) tp=pp+TakeProfit*Point; else tp=0;
SetOrder("",OP_BUYSTOP,ll,pp,sl,tp,Magic);
}
}
}
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. 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 - öåíîâîé óðîâåíü òåéêà |
//| cl - öâåò |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1,double sl=0,double tp=0,color cl=CLR_NONE)
{
bool fm;
double pa=MarketInfo(OrderSymbol(), MODE_ASK);
double pb=MarketInfo(OrderSymbol(), MODE_BID);
double op,os,ot;
int dg,err,it;
if(pp<=0) pp=OrderOpenPrice();
if(sl<0) sl=OrderStopLoss();
if(tp<0) tp=OrderTakeProfit();
dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
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,0,cl);
if(fm)
{
if(UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
Print("Error(",err,") modifying order: ",ErrorDescription(err),", 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 |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 06.03.2008 |
//| Îïèñàíèå : Îòêðûâàåò ïîçèöèþ è âîçâðàùàåò å¸ òèêåò. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" èëè NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ |
//| ll - ëîò |
//| sl - óðîâåíü ñòîï |
//| tp - óðîâåíü òåéê |
//| mn - MagicNumber |
//+----------------------------------------------------------------------------+
int OpenPosition(string sy,int op,double ll,double sl=0,double tp=0,int mn=0)
{
color clOpen;
datetime ot;
double pp,pa,pb;
int dg,err,it,ticket=0;
string lsComm=WindowExpertName()+" "+GetNameTF(Period());
if(sy=="" || sy=="0") sy=Symbol();
if(op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
for(it=1; it<=NumberOfTry; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
dg=MarketInfo(sy, MODE_DIGITS);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
if(op==OP_BUY) pp=pa; else pp=pb;
pp=NormalizeDouble(pp, dg);
ot=TimeCurrent();
ticket=OrderSend(sy,op,ll,pp,Slippage,sl,tp,lsComm,mn,0,clOpen);
if(ticket>0)
{
if(UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
if(err==128 || err==142 || err==143)
{
Sleep(1000*66.666);
if(ExistPositions(sy,op,mn,ot))
{
if(UseSound) PlaySound(NameFileSound); break;
}
}
// Âûâîä ñîîáùåíèÿ îá îøèáêå
Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
if(pa==0 && pb==0) Message("Ïðîâåðüòå â Îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
// Áëîêèðîâêà ðàáîòû ñîâåòíèêà
if(err==2 || err==64 || err==65 || err==133)
{
gbDisabled=True; break;
}
// Äëèòåëüíàÿ ïàóçà
if(err==4 || err==131 || err==132)
{
Sleep(1000*300); break;
}
if(err==140 || err==148 || err==4110 || err==4111) break;
if(err==141) Sleep(1000*100);
if(err==145) Sleep(1000*17);
if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
if(err!=135) Sleep(1000*7.7);
}
}
return(ticket);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 20.04.2007 |
//| Îïèñàíèå : Âîçâðàùàåò ôëàã óäà÷íîãî âûáîðà îðäðåðà èëè ïîçèöèè ïî òèêåòó |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| ti - òèêåò îðäåðà, ïîçèöèè |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
bool SelectByTicket(int ti,string sy="",int op=-1,int mn=-1)
{
int i,k=OrdersTotal();
if(sy=="0") sy=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
{
if((mn<0 || OrderMagicNumber()==mn) && OrderTicket()==ti) return(True);
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ : 13.03.2008 |
//| Îïèñàíèå : Óñòàíîâêà îðäåðà. |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà (NULL èëè "" - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ |
//| ll - ëîò |
//| pp - öåíà |
//| sl - óðîâåíü ñòîï |
//| tp - óðîâåíü òåéê |
//| mn - Magic Number |
//| ex - Ñðîê èñòå÷åíèÿ |
//+----------------------------------------------------------------------------+
void SetOrder(string sy,int op,double ll,double pp,
double sl=0,double tp=0,int mn=0,datetime ex=0)
{
color clOpen;
datetime ot;
double pa,pb,mp;
int err,it,ticket,msl;
string lsComm=WindowExpertName()+" "+GetNameTF(Period());
if(sy=="" || sy=="0") sy=Symbol();
msl=MarketInfo(sy,MODE_STOPLEVEL);
if(op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
if(ex>0 && ex<TimeCurrent()) ex=0;
for(it=1; it<=NumberOfTry; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
{
Print("SetOrder(): Îñòàíîâêà ðàáîòû ôóíêöèè");
break;
}
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
ot=TimeCurrent();
ticket=OrderSend(sy,op,ll,pp,Slippage,sl,tp,lsComm,mn,ex,clOpen);
if(ticket>0)
{
if(UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
if(err==128 || err==142 || err==143)
{
Sleep(1000*66);
if(ExistOrders(sy,op,mn,ot))
{
if(UseSound) PlaySound(NameFileSound); break;
}
Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
continue;
}
mp=MarketInfo(sy, MODE_POINT);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
if(pa==0 && pb==0) Message("SetOrder(): Ïðîâåðüòå â îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op),
" pp=",pp," sl=",sl," tp=",tp," mn=",mn);
// Íåïðàâèëüíûå ñòîïû
if(err==130)
{
switch(op)
{
case OP_BUYLIMIT:
if(pp>pa-msl*mp) pp=pa-msl*mp;
if(sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
if(tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
break;
case OP_BUYSTOP:
if(pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
if(sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
if(tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
break;
case OP_SELLLIMIT:
if(pp<pb+msl*mp) pp=pb+msl*mp;
if(sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
if(tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
break;
case OP_SELLSTOP:
if(pp>pb-msl*mp) pp=pb-msl*mp;
if(sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
if(tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
break;
}
Print("SetOrder(): Ñêîððåêòèðîâàíû öåíîâûå óðîâíè");
}
// Áëîêèðîâêà ðàáîòû ñîâåòíèêà
if(err==2 || err==64 || err==65 || err==133)
{
gbDisabled=True; break;
}
// Äëèòåëüíàÿ ïàóçà
if(err==4 || err==131 || err==132)
{
Sleep(1000*300); break;
}
// Ñëèøêîì ÷àñòûå çàïðîñû (8) èëè ñëèøêîì ìíîãî çàïðîñîâ (141)
if(err==8 || err==141) Sleep(1000*100);
if(err==139 || err==140 || err==148) break;
// Îæèäàíèå îñâîáîæäåíèÿ ïîäñèñòåìû òîðãîâëè
if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
// Îáíóëåíèå äàòû èñòå÷åíèÿ
if(err==147)
{
ex=0; continue;
}
if(err!=135 && err!=138) Sleep(1000*7.7);
}
}
}
//+----------------------------------------------------------------------------+
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
---