Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
ha_mazi
//+------------------------------------------------------------------+
//| Ha MaZi v1.00 |
//| Copyright 2015, Nikolay Khrushchev |
//| http://www.MqlLab.ru |
//+------------------------------------------------------------------+
#property copyright "MqlLab.ru"
#property link "http://www.mqllab.com"
#property strict
extern double lot = 1.0;
extern double stop_loss = 70;
extern double take_profit = 200;
extern double noloss = 30;
extern double noloss_pips = 1;
extern double trall = 30;
extern double trall_start = 40;
extern bool ma_filter = true;
extern bool cycle_filter = true;
extern bool close_ma_cross = false;
extern string friday_time = "24:00";
extern double friday_close_profit = 50;
extern string menucomment01 = "========= Ïàðàìåòðû èíäèêàòîðà =========";
extern int zz_InpDepth = 13;
extern int zz_InpDeviation = 11;
extern int zz_InpBackstep = 11;
extern int ma_period = 40;
extern ENUM_MA_METHOD ma_method = MODE_EMA;
extern ENUM_APPLIED_PRICE ma_price = PRICE_CLOSE;
extern string menucomment02 = "========= Ïðî÷èå ïàðàìåòðû =========";
extern int magic = 9238;
int TryToTrade = 20;
int WaitTime = 1500;
extern int CommentSize = 7;
int i,r,z,// ïåðåìåííûå äëÿ ïåðåñ÷åòîâ for
dg, dig, // îêðóãëåíèå ëîòîâ è öåíû
last_ticket; // ïîñëåäíèå òèêåò äëÿ ïåðåñ÷åòà îðäåðîâ for
bool Work=true,Test=false,// ôëàã ðàçðàøåíèÿ ðàáîòû è ôðàã ðàáîòû â òåñòåðå
long_allowed=true,short_allowed=true; // ðàçðåøåíèå ïîêóïàòü è ïðîäàâàòü
double Pp,Mnoj,// Point îêðóãëåííûé äî 2/4 çíàêà è îáðàòíûé ìíîæèòåëü
Pp2, Mnoj2, // ñòàíäàðòíûé Point è îáðàòíûé ìíîæèòåëü
min_lot, max_lot; // ìèíèìàëüíûé è ìàêñèìàëüíûé ëîò
string Symb,// âàëþòà èíñòðóìåíòà
CommentBox[],cm2; // êîììåíòàðèé íà ãðàôèêå
datetime time_bar; // âðåìÿ îòêðûòèå íóëåâîé ñâå÷è
int time_min,time_hour;
bool ta=true;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void start()
{
if(!Work) return;
if(!IsTradeAllowed()) return;
// ïîëó÷åíèå ñèãíàëà
if(Hour()!=time_hour || Minute()!=time_min)
{
time_hour= Hour();
time_min = Minute();
ta=true;
if(DayOfWeek()==5)
{
datetime friday_time_end=StringToTime(TimeToStr(TimeCurrent(),TIME_DATE)+" "+friday_time);
if(TimeCurrent()>=friday_time_end) ta=false;
}
}
int signal=-1;
int close=-1;
double ma=0;
if(time_bar!=Time[0])
{
time_bar=Time[0];
// ðàñ÷åò ÌÀ
ma=iMA(Symb,0,ma_period,0,ma_method,ma_price,1);
if(Close[1]<ma) close=0;
if(Close[1]>ma) close=1;
// ïîèñê ïîñëåäíèõ 4õ òî÷åê çèã çàãà
int zz_points=0;
double zz_point_price[4]={0,0,0,0};
int zz_point_bar[4]={0,0,0,0};
for(i=0;i<500;i++)
{
double zz=iCustom(Symb,0,"ZigZag",zz_InpDepth,zz_InpDeviation,zz_InpBackstep,0,i);
if(zz>0)
{
zz_point_price[zz_points]=zz;
zz_point_bar[zz_points]=i;
zz_points++;
if(zz_points>=4) break;
}
}
// àíàëèç òðîéêè òî÷åê, ñ íà÷àëà 0-1-2, çàòåì 1-2-3
for(i=0;i<2;i++)
{
double zz_price = 0;
double line_price = 0;
int high_bar = 0;
double high_price = 0;
double high_shift = 0;
int low_bar = 0;
double low_price = 0;
double low_shift = 0;
double price_move = 0;
double price_move2 = 0;
double cross_price = 0;
bool cycle_in=false;
if(zz_point_price[2+i]<zz_point_price[1+i])
{ // îæèäàíèå ñèãíàëà íà ïîêóïêó
// àíàëèç ìàêñèìóìîâ
price_move=(zz_point_price[1+i]-zz_point_price[0+i])/(zz_point_bar[1+i]-zz_point_bar[0+i]);
for(r=zz_point_bar[1+i]-1;r>=zz_point_bar[0+i];r--)
{
zz_price=zz_point_price[0+i]+price_move*(r-zz_point_bar[0+i]);
if(high_shift>0)
{
line_price=NormalizeDouble(zz_point_price[1+i]-price_move2*(zz_point_bar[1+i]-r),dig);
}
if(High[r]-zz_price>high_shift && (High[r]>line_price || high_shift==0))
{
high_shift=High[r] - zz_price;
high_price=High[r];
high_bar=r;
price_move2=(zz_point_price[1+i]-high_price)/(zz_point_bar[1+i]-high_bar);
}
}
// ðàñ÷åò òî÷êè äëÿ ïåðåñå÷åíèÿ
price_move=(zz_point_price[1+i]-high_price)/(zz_point_bar[1+i]-high_bar);
cross_price=NormalizeDouble(zz_point_price[1+i]-price_move*(zz_point_bar[1+i]-1),dig);
// ïðîâåðêà ïåðåñå÷åíèÿ
if(Close[1]>cross_price && Close[2]<=cross_price && (Close[1]>ma || !ma_filter))
{
cycle_in=false;
if(zz_point_bar[1+i]<=zz_point_bar[2+i]/2 && zz_point_bar[0+i]>=zz_point_bar[1+i]-(zz_point_bar[2+i]-zz_point_bar[1+i])/2) cycle_in=true;
signal=0;
for(r=2;r<zz_point_bar[0+i];r++) if(Close[r]>cross_price) { signal=-1; break; }
if(signal==0 && cycle_filter && !cycle_in) signal=-1;
}
}
if(zz_point_price[2+i]>zz_point_price[1+i])
{ // îæèäàíèå ñèãíàëà íà ïðîäàæó
// àíàëèç ìèíèìóìîâ
price_move=(zz_point_price[0+i]-zz_point_price[1+i])/(zz_point_bar[1+i]-zz_point_bar[0+i]);
for(r=zz_point_bar[1+i]-1;r>=zz_point_bar[0+i];r--)
{
zz_price=zz_point_price[0+i]-price_move*(r-zz_point_bar[0+i]);
if(low_shift>0)
{
line_price=NormalizeDouble(zz_point_price[1+i]+price_move2*(zz_point_bar[1+i]-r),dig);
}
if(zz_price-Low[r]>low_shift && (Low[r]<line_price || low_shift==0))
{
low_shift=zz_price - Low[r];
low_price=Low[r];
low_bar=r;
price_move2=(low_price-zz_point_price[1+i])/(zz_point_bar[1+i]-low_bar);
}
}
// ðàñ÷åò òî÷êè äëÿ ïåðåñå÷åíèÿ
price_move=(low_price-zz_point_price[1+i])/(zz_point_bar[1+i]-high_bar);
cross_price=NormalizeDouble(zz_point_price[1+i]+price_move*(zz_point_bar[1+i]-1),dig);
//ObjectSetDouble(0,"123",OBJPROP_PRICE,0,cross_price);
//ObjectSetInteger(0,"321",OBJPROP_TIME,0,Time[low_bar]);
// ïðîâåðêà ïåðåñå÷åíèÿ
if(Close[1]<cross_price && Close[2]>=cross_price && (Close[1]<ma || !ma_filter))
{
cycle_in=false;
if(zz_point_bar[1+i]<=zz_point_bar[2+i]/2 && zz_point_bar[0+i]>=zz_point_bar[1+i]-(zz_point_bar[2+i]-zz_point_bar[1+i])/2) cycle_in=true;
signal=1;
for(r=2;r<zz_point_bar[0+i];r++) if(Close[r]<cross_price) { signal=-1; break; }
if(signal==1 && cycle_filter && !cycle_in) signal=-1;
}
}
}
}
// ó÷åò îðäåðîâ
last_ticket=-1;
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symb && OrderMagicNumber()==magic)
{
if(last_ticket==OrderTicket()) continue;
last_ticket=OrderTicket();
if(close_ma_cross && close==OrderType()) { CloseOrder(OrderTicket()); continue; }
if(!ta)
{
if(OrderType()==0 && Bid-OrderOpenPrice()<=friday_close_profit*Pp) { CloseOrder(OrderTicket()); continue; }
if(OrderType()==1 && OrderOpenPrice()-Ask<=friday_close_profit*Pp) { CloseOrder(OrderTicket()); continue; }
}
if(noloss>0)
{
if(OrderType()==0 && NormalizeDouble(OrderOpenPrice(),Digits)>NormalizeDouble(OrderStopLoss(),Digits) && NormalizeDouble(Bid-noloss*Pp,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits)) ModifyOrder(OrderTicket(),-1,0,OrderOpenPrice()+noloss_pips*Pp,0,-1);
if(OrderType()==1 && (NormalizeDouble(OrderOpenPrice(),Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0) && NormalizeDouble(Ask+noloss*Pp,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits)) ModifyOrder(OrderTicket(),-1,0,OrderOpenPrice()-noloss_pips*Pp,0,-1);
}
if(trall>0)
{
if(OrderType()==0 && NormalizeDouble(Bid-(trall+1)*Pp,Digits)>NormalizeDouble(OrderStopLoss(),Digits) && NormalizeDouble(Bid-trall_start*Pp,Digits)>=NormalizeDouble(OrderOpenPrice(),Digits)) ModifyOrder(OrderTicket(),-1,-1,Bid-trall*Pp,-1,-1);
if(OrderType()==1 && (NormalizeDouble(Ask+(trall+1)*Pp,Digits)<NormalizeDouble(OrderStopLoss(),Digits) || OrderStopLoss()==0) && NormalizeDouble(Ask+trall_start*Pp,Digits)<=NormalizeDouble(OrderOpenPrice(),Digits)) ModifyOrder(OrderTicket(),-1,-1,Ask+trall*Pp,-1,-1);
}
}
// òîðãîâîå ðåøåíèå
if(signal==-1) return;
if(!ta) return;
if(signal==0) SendOrder(last_ticket,signal,lot,-1,0,ma-stop_loss*Pp,1,take_profit);
if(signal==1) SendOrder(last_ticket,signal,lot,-1,0,ma+stop_loss*Pp,1,take_profit);
// end start
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void init()
{
dig=Digits;
Pp=Point;
Pp2=Pp;
Mnoj2=1/Pp;
if(Pp==0.00001 || Pp==0.001) Pp*=10;
Mnoj=1/Pp;
Symb=Symbol();
if(MarketInfo(Symb,MODE_LOTSTEP)==0.01) dg=2;
if(MarketInfo(Symb,MODE_LOTSTEP)==0.1) dg=1;
min_lot=NormalizeDouble( MarketInfo(Symb,MODE_MINLOT) ,dg);
max_lot=NormalizeDouble( MarketInfo(Symb,MODE_MAXLOT) ,dg);
if(IsTesting() && !IsVisualMode()) Test=true;
int k;
if(!Test)
{
if(CommentSize>0) ArrayResize(CommentBox,CommentSize);
for(k=0;k<CommentSize;k++) CommentBox[k]="";
}
//ObjectCreate(0,"123",OBJ_HLINE,0,0,0);
//ObjectSetInteger(0,"123",OBJPROP_COLOR,clrYellow);
//ObjectCreate(0,"321",OBJ_VLINE,0,0,0);
//ObjectSetInteger(0,"321",OBJPROP_COLOR,clrYellow);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void deinit()
{
Comment("");
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>> Ôóíêöèÿ îòêðûòèÿ îðäåðà
>>> Ïàðàìåòðû:
>>> int Ticket - òèêåò îòêðûâàåìîãî îðäåðà
>>> int Type - òèï îòêðûâàåìîãî îðäåðà (0-BUY, 1-SELL, 2-BUYLIMIT, 3-SELLLIMIT, 4-BUYSTOP, 5-SELLSTOP)
>>> double LT - îáúåì îòêðûâàåìîãî îðäåðà
>>>
>>> double OP - öåíû ïî êîòîðîé îòêðûâàåì îðäåð (åñëè Type ðàâåí 0 èëè 1, çàäàâàòü íå èìååò ñìûñëà)
>>> int ModeSL - ìåòîä çàäàâàåìîãî ñòîï ëîñà (0-êîíêðåòíàÿ öåíà èíñòðóìåíòà, 1-ïóíêòû)
>>> double SL - ñòîï ëîññ
>>> int ModeTP - ìåòîä çàäàâàåìîãî òåéê ïðîôèòà (0-êîíêðåòíàÿ öåíà èíñòðóìåíòà, 1-ïóíêòû)
>>> double TP - òåéê ïðîôèò
>>> string CM - êîììåíòàðèé îðäåðà
>>> int MG - ìåäæèê îðäåðà
>>>
>>> Âîçâðàùàåìûå çíà÷åíèÿ:
>>> Âîçâðàùàåò TRUE ïðè óñïåøíîì çàâåðøåíèè ôóíêöèè. Âîçâðàùàåò FALSE ïðè íåóäà÷íîì çàâåðøåíèè ôóíêöèè.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
bool SendOrder(int &Ticket,int Type,double LT,double OP=-1,int ModeSL=0,double SL=0,int ModeTP=0,double TP=0,string CM="",int MG=-1)
{
if(MG==-1) MG=magic;
color CL;
int k,LastError;
bool TickeT;
if(Type==0) CL=Blue; else if(Type==1) CL=Red; else if(Type==2 || Type==4) CL=DarkTurquoise; else if(Type==3 || Type==5) CL=Orange;
// ïðîâåðêà íàïðàâëåíèÿ
if(Type==0 || Type==2 || Type==4)
{
if(!long_allowed) return(false);
}else{
if(!short_allowed) return(false);
}
// ïðîâåðêà îáúåìà
if(LT*MarketInfo(Symbol(),MODE_MARGINREQUIRED)>AccountFreeMargin())
{
PnC(StringConcatenate("[S] Íå õâàòàåò ñðåäñòâ äëÿ îòêðûòèÿ ñäåëêè ",TypeToStr(Type)," îáúåìîì: ",DoubleToStr(LT,dg)),1);
PnC("[S] Ñîâåòíèê ïðåêðàòèë ðàáîòó",1);
Work=false;
return(false);
}
if(LT<min_lot)
{
PnC(StringConcatenate("[S] Îáúåì ñäåëêè ìåíüøå ìèíèìàëüíîãî ",DoubleToStr(min_lot,dg),". Áóäåò îòêðûò ìèíèìàëüíûé îáúåì"),1);
LT=min_lot;
}
if(LT>max_lot)
{
PnC(StringConcatenate("[S] Îáúåì ñäåëêè áîëüøå ìàêñèìàëüíîãî ",DoubleToStr(min_lot,dg),". Áóäåò îòêðûò ìàêñèìàëüíûé îáúåì"),1);
LT=max_lot;
}
// ïðîâåðêà îòëîæåííûõ îðäåðîâ
double Slv=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
switch(Type)
{
case 2: if(Ask-OP<Slv) OP=Ask-Slv; break;
case 3: if(OP-Bid<Slv) OP=Bid+Slv; break;
case 4: if(OP-Ask<Slv) OP=Ask+Slv; break;
case 5: if(Bid-OP<Slv) OP=Bid-Slv; break;
}
// îòêðûòèå
for(k=0;k<TryToTrade;k++)
{
RefreshRates();
if(Type==0) OP=Ask;
if(Type==1) OP=Bid;
PnC(StringConcatenate("[S] Îòêðûòèå îðäåðà ",TypeToStr(Type)," îáúåìîì: ",DoubleToStr(LT,dg)," ïî öåíå: ",DoubleToStr(OP,dig)," ìåäæèê: ",MG," êîììåíòàðèé: ",CM),0);
if(IsTradeAllowed())
{
Ticket=OrderSend(Symbol(),Type,LT,NormalizeDouble(OP,dig),3,0,0,CM,MG,0,CL);
}else{
PnC(StringConcatenate("[S] Òîðãîâûé ïîòîê çàíÿò, æäåì ",k),0);
Sleep(WaitTime);
continue;
}
if(Ticket>0)
{
PnC(StringConcatenate("[S] Óñïåøíî îòêðûò îðäåð ",Ticket),0);
break;
}
LastError=Fun_Error(GetLastError());
switch(LastError)
{
case 0:
if(k==TryToTrade) return(false);
Sleep(WaitTime);
break;
case 1:
return(false);
case 2:
Work=false;
return(false);
}
}
if(SL==0 && TP==0) return(true);
if(!OrderSelect(Ticket,SELECT_BY_TICKET))
{
PnC(StringConcatenate("[S] Îøèáêà âûáîðà îòêðûòîãî îðäåðà ",Ticket," äëÿ âûñòàâëåíèÿ ñòîïîâ"),1);
return(false);
}
// ïðîâåðêà è ðàñ÷åò ñòîïîâ
if(SL!=0)
{
if(ModeSL==1)
{
if(Type==0 || Type==2 || Type==4) SL=OrderOpenPrice()-SL*Pp; else SL=OrderOpenPrice()+SL*Pp;
}
if(Type==0 || Type==2 || Type==4)
{
if(Bid-SL<Slv && SL!=0) SL=Bid-Slv;
}else{
if(SL-Ask<Slv && SL!=0) SL=Ask+Slv;
}
}
if(TP!=0)
{
if(ModeTP==1)
{
if(Type==0 || Type==2 || Type==4) TP=OrderOpenPrice()+TP*Pp; else TP=OrderOpenPrice()-TP*Pp;
}
if(Type==0 || Type==2 || Type==4)
{
if(TP-Bid<Slv && TP!=0) TP=Bid+Slv;
}else{
if(Ask-TP<Slv && TP!=0) TP=Ask-Slv;
}
}
// âûñòàâëÿåì ñòîïû
for(k=0;k<TryToTrade;k++)
{
PnC(StringConcatenate("[S] Óñòàíîâêà ñòîïîâ íà îðäåð: ",Ticket," ñ/ë: ",DoubleToStr(SL,dig)," ò/ï: ",DoubleToStr(TP,dig)),0);
if(IsTradeAllowed())
{
TickeT=OrderModify(Ticket,OrderOpenPrice(),NormalizeDouble(SL,dig),NormalizeDouble(TP,dig),0,CLR_NONE);
}else{
PnC(StringConcatenate("[S] Òîðãîâûé ïîòîê çàíÿò, æäåì ",k),0);
Sleep(WaitTime);
continue;
}
if(TickeT)
{
PnC(StringConcatenate("[S] Óñïåøíî ìîäèôèöèðîâàí îðäåð ",Ticket),0);
break;
}
LastError=Fun_Error(GetLastError());
switch(LastError)
{
case 0:
if(k==TryToTrade) return(false);
Sleep(WaitTime);
break;
case 1:
return(false);
case 2:
Work=false;
return(false);
}
}
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>> Ôóíêöèÿ ìîäèôèêàöèè îðäåðà
>>> Ïàðàìåòðû:
>>> int Ticket - íîìåð îðäåðà
>>>
>>> double OP - íîâàÿ öåíà îòêðûòèÿ îðäåðà. Åñëè -1 - îñòàíåòñÿ áåç èçìåíåíèé
>>> int ModeSL - ìåòîä çàäàâàåìîãî ñòîï ëîñà (0-êîíêðåòíàÿ öåíà èíñòðóìåíòà, 1-ïóíêòû)
>>> double SL - íîâûé ñòîï ëîññ îðäåðà. Åñëè -1 - îñòàíåòñÿ áåç èçìåíåíèé
>>> int ModeTP - ìåòîä çàäàâàåìîãî òåéê ïðîôèòà (0-êîíêðåòíàÿ öåíà èíñòðóìåíòà, 1-ïóíêòû)
>>> double TP - íîâûé òåéê ïðîôèò îðäåðà. Åñëè -1 - îñòàíåòñÿ áåç èçìåíåíèé
>>>
>>> Âîçâðàùàåìûå çíà÷åíèÿ:
>>> Âîçâðàùàåò TRUE ïðè óñïåøíîì çàâåðøåíèè ôóíêöèè. Âîçâðàùàåò FALSE ïðè íåóäà÷íîì çàâåðøåíèè ôóíêöèè.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
bool ModifyOrder(int Ticket,double OP=-1,int ModeSL=0,double SL=0,int ModeTP=0,double TP=0)
{
bool TickeT;
int k,LastError;
TickeT=OrderSelect(Ticket,SELECT_BY_TICKET);
if(!TickeT)
{
PnC("[M] Îøèáêà âûáîðà îðäåðà äëÿ ìîäèôèêàöèè ",0);
return(false);
}
if(OrderCloseTime()>0)
{
PnC("[M] Îðäåð áûë çàêðûò èëè óäàëåí",0);
return(false);
}
int Type=OrderType();
double mo_calcl_price=OrderOpenPrice();
if(OP>0) mo_calcl_price=OP;
if(ModeSL==1 && SL!=-1)
{
if(Type==0 || Type==2 || Type==4) SL=mo_calcl_price-SL*Pp; else SL=mo_calcl_price+SL*Pp;
}
if(ModeTP==1 && TP!=-1)
{
if(Type==0 || Type==2 || Type==4) TP=mo_calcl_price+TP*Pp; else TP=mo_calcl_price-TP*Pp;
}
string cm;
if(OP<0) OP=OrderOpenPrice(); else cm="öåíà " + DoubleToStr(OrderOpenPrice(),dig) + " => " + DoubleToStr(OP,dig) + "; ";
if(SL<0) SL=OrderStopLoss(); else cm=cm+"ñ/ë " + DoubleToStr(OrderStopLoss(),dig) + " => " + DoubleToStr(SL,dig) + "; ";
if(TP<0) TP=OrderTakeProfit(); else cm=cm+"ò/ï " + DoubleToStr(OrderTakeProfit(),dig) + " => " + DoubleToStr(TP,dig) + "; ";
if(Type==0 || Type==3 || Type==5) cm=cm+"òåêóùàÿ öåíà Bid: "+DoubleToStr(Bid,dig);
if(Type==1 || Type==2 || Type==4) cm=cm+"òåêóùàÿ öåíà Ask: "+DoubleToStr(Ask,dig);
color modify_color;
if(MathMod(OrderType(),2.0)==0) modify_color=Aqua; else modify_color=Orange;
for(k=0;k<TryToTrade;k++)
{
PnC(StringConcatenate("[M] Ìîäèôèêàöèÿ îðäåðà: ",Ticket," ",cm),0);
if(IsTradeAllowed())
{
TickeT=OrderModify(Ticket,NormalizeDouble(OP,dig),NormalizeDouble(SL,dig),NormalizeDouble(TP,dig),0,modify_color);
}else{
PnC(StringConcatenate("[M] Òîðãîâûé ïîòîê çàíÿò, æäåì ",k),0);
Sleep(WaitTime);
continue;
}
if(TickeT==true)
{
PnC(StringConcatenate("[M] Óñïåøíî ìîäèôèöèðîâàí îðäåð ",Ticket),0);
return(true);
}
LastError=Fun_Error(GetLastError());
switch(LastError)
{
case 0:
if(k==TryToTrade) return(false);
Sleep(WaitTime);
break;
case 1:
return(false);
case 2:
Work=false;
return(false);
}
}
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>> Ôóíêöèÿ çàêðûòèÿ îðäåðà
>>> Ïàðàìåòðû:
>>> int Ticket - íîìåð îðäåðà
>>>
>>> double LT - îáúåì êîòîðûé íåîáõîäèìî çàêðûòü. Åñëè -1 - îðäåð áóäåò çàêðûò ïîëíîñòüþ
>>>
>>> Âîçâðàùàåìûå çíà÷åíèÿ:
>>> Âîçâðàùàåò TRUE ïðè óñïåøíîì çàâåðøåíèè ôóíêöèè. Âîçâðàùàåò FALSE ïðè íåóäà÷íîì çàâåðøåíèè ôóíêöèè.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
bool CloseOrder(int Ticket,double LT=-1)
{
bool TickeT;
double OCP;
int k,LastError;
TickeT=OrderSelect(Ticket,SELECT_BY_TICKET);
if(!TickeT)
{
PnC("[C] Îøèáêà âûáîðà îðäåðà äëÿ çàêðûòèÿ ",0);
return(false);
}
if(OrderCloseTime()>0)
{
PnC("[C] Îðäåð áûë çàêðûò èëè óäàëåí",0);
return(false);
}
int Type=OrderType();
if(Type>1)
{
PnC("[C] Îðäåð çàêðûòü íåëüçÿ, îí îòëîæåííûé ",0);
return(false);
}
if(LT==-1) LT=NormalizeDouble(OrderLots(),dg); else LT=NormalizeDouble(LT,dg);
for(k=0;k<=TryToTrade;k++)
{
RefreshRates();
if(Type==0) OCP=Bid; else OCP=Ask;
PnC(StringConcatenate("[C] Çàêðûòèå îðäåðà ",TypeToStr(Type)," íîìåð: ",Ticket," îáúåìîì: ",DoubleToStr(LT,dg)," ïî öåíå: ",DoubleToStr(OCP,dig)),0);
if(IsTradeAllowed())
{
TickeT=OrderClose(Ticket,LT,NormalizeDouble(OCP,dig),30,White);
}else{
PnC(StringConcatenate("[C] Òîðãîâûé ïîòîê çàíÿò, æäåì ",k),0);
Sleep(WaitTime);
continue;
}
if(TickeT)
{
PnC(StringConcatenate("[C] Óñïåøíî çàêðûò îðäåð ",Ticket),0);
return(true);
}
LastError=Fun_Error(GetLastError());
switch(LastError)
{
case 0:
if(k==TryToTrade) return(false);
Sleep(WaitTime);
break;
case 1:
return(false);
case 2:
Work=false;
return(false);
}
}
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>> Ôóíêöèÿ óäàëåíèÿ îðäåðà
>>> Ïàðàìåòðû:
>>> int Ticket - íîìåð îðäåðà
>>>
>>> Âîçâðàùàåìûå çíà÷åíèÿ:
>>> Âîçâðàùàåò TRUE ïðè óñïåøíîì çàâåðøåíèè ôóíêöèè. Âîçâðàùàåò FALSE ïðè íåóäà÷íîì çàâåðøåíèè ôóíêöèè.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
bool DeleteOrder(int Ticket)
{
bool TickeT;
int k,LastError;
TickeT=OrderSelect(Ticket,SELECT_BY_TICKET);
if(!TickeT)
{
PnC(StringConcatenate("[D] Îøèáêà âûáîðà îðäåðà äëÿ çàêðûòèÿ ",Ticket),0);
return(false);
}
if(OrderCloseTime()>0)
{
PnC(StringConcatenate("[D] Îðäåð áûë çàêðûò èëè óäàëåí ",Ticket),0);
return(false);
}
int Type=OrderType();
if(Type<2)
{
PnC(StringConcatenate("[D] Îðäåð óäàëèòü íåëüçÿ, îí óæå èñïîëíåí ",Ticket),0);
return(false);
}
for(k=0;k<=TryToTrade;k++)
{
PnC(StringConcatenate("[D] Óäàëåíèå îðäåðà: ",Ticket," òèï: ",TypeToStr(Type)),0);
if(IsTradeAllowed())
{
TickeT=OrderDelete(Ticket);
}else{
PnC(StringConcatenate("[D] Òîðãîâûé ïîòîê çàíÿò, æäåì ",k),0);
Sleep(WaitTime);
continue;
}
if(TickeT)
{
PnC(StringConcatenate("[D] Óñïåøíî óäàëåí îðäåð ",Ticket),0);
return(true);
}
LastError=Fun_Error(GetLastError());
switch(LastError)
{
case 0:
if(k==TryToTrade) return(false);
Sleep(WaitTime);
break;
case 1:
return(false);
case 2:
Work=false;
return(false);
}
}
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>> Ôóíêöèÿ óäàëåíèÿ è çàêðûòèÿ âñåõ îðäåðîâ
>>> Âîçâðàùàåìûå çíà÷åíèÿ:
>>> Âîçâðàùàåò TRUE ïðè óñïåøíîì çàâåðøåíèè ôóíêöèè. Âîçâðàùàåò FALSE ïðè íåóäà÷íîì çàâåðøåíèè ôóíêöèè.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
bool CloseAll()
{
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symb && OrderMagicNumber()==magic)
{
if(OrderType()<2)
{
if(!CloseOrder(OrderTicket())) return(false);
}else{
if(!DeleteOrder(OrderTicket())) return(false);
}
}
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>> Ôóíêöèÿ óäàëåíèÿ âñåõ îðäåðîâ
>>> Âîçâðàùàåìûå çíà÷åíèÿ:
>>> Âîçâðàùàåò TRUE ïðè óñïåøíîì çàâåðøåíèè ôóíêöèè. Âîçâðàùàåò FALSE ïðè íåóäà÷íîì çàâåðøåíèè ôóíêöèè.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
bool DeleteAll()
{
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symb && OrderMagicNumber()==magic)
{
if(OrderType()>1)
{
if(!DeleteOrder(OrderTicket())) return(false);
}
}
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>> Ôóíêöèÿ òåêñòîâûõ ñîîáùåíèé
>>> Îïèñàíèå:
>>> Ôóíêöèÿ ïîçâîëÿåò îòîáðàæàòü ñèñòåìíûå ñîîáùåíèÿ íà ýêðàíå â âèäå ëåíòû â ëåâîì âåðõíåì óãëó ýêðàíà,
>>> çàíîñèòü èõ â æóðíàë à òàêæå ïðè íåîáõîäèìîñòè îòîáðàæàòü óâåäîìëåíèå (Alert).
>>>
>>> Ïàðàìåòðû:
>>> string txt - òåêñò ñîîáùåíèÿ
>>> int Mode - òèï ñîîáùåíèÿ (0-òîëüêî Print, 1-Print è Alert, 2-íè÷åãî)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
void PnC(string txt,int Mode)
{
int j;
string cm;
if(Mode!=2)
{
string HR=DoubleToStr(Hour(),0); if(StringLen(HR)<2) HR="0"+HR;
string MN=DoubleToStr(Minute(),0); if(StringLen(MN)<2) MN="0"+MN;
string SC=DoubleToStr(Seconds(),0); if(StringLen(SC)<2) SC="0"+SC;
txt=StringConcatenate(HR,":",MN,":",SC," ",Symb," ",txt);
Print(txt);
if(Test) return;
if(Mode>0) Alert(txt);
for(j=CommentSize-1;j>=1;j--) CommentBox[j]=CommentBox[j-1];
CommentBox[0]=txt;
}
if(CommentSize>0)
{
for(j=CommentSize-1;j>=0;j--) if(CommentBox[j]!="") cm=StringConcatenate(cm,CommentBox[j],"\n");
}
if(CommentSize>0)
cm=StringConcatenate(cm,"\n",cm2);
else
cm=StringConcatenate(cm2);
cm=StringConcatenate(cm,"\n","MqlLab.ru");
Comment(cm);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>> Ôóíêöèÿ ïðåîáðàçîâàíèÿ òèïà îðäåðà
>>> Îïèñàíèå:
>>> Ïðåîáðàçîâàíèå ÷èñëà, ñîäåðæàùåãî ÷èñëîâîå ïðåäñòàâëåíèå òèïà îðäåðà â ñòðîêó
>>>
>>> Ïàðàìåòðû:
>>> int Type - òèï îðäåðà (0-BUY, 1-SELL, 2-BUYLIMIT, 3-SELLLIMIT, 4-BUYSTOP, 5-SELLSTOP)
>>>
>>> Âîçâðàùàåìûå çíà÷åíèÿ:
>>>  ñëó÷àå óñïåøíîãî èñïîëíåíèÿ ôóíêöèè âîçâðàùàåò ñòðîêó ñ òèïîì ïåðåìåííîé.  îáðàòíîì ñëó÷àå âîçâðàùàåò "NONE".
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
string TypeToStr(int Type)
{
switch(Type)
{
case 0: return("BUY");
case 1: return("SELL");
case 2: return("BUYLIMIT");
case 3: return("SELLLIMIT");
case 4: return("BUYSTOP");
case 5: return("SELLSTOP");
}
return("NONE");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>> Ôóíêöèÿ ïðåîáðàçîâàíèÿ òàéì ôðåéìà
>>> Îïèñàíèå:
>>> Ïðåîáðàçîâàíèå òàéì ôðåéìà, ñîäåðæàùåãî ÷èñëîâîå ïðåäñòàâëåíèå âðåìåíè â ñòðîêó
>>>
>>> Ïàðàìåòðû:
>>> int pts_period - òàéì ôðåéì (0,1,5,15,30,60,240,1440,10080,43200)
>>>
>>> Âîçâðàùàåìûå çíà÷åíèÿ:
>>>  ñëó÷àå óñïåøíîãî èñïîëíåíèÿ ôóíêöèè âîçâðàùàåò ñòðîêó ñ òàéì ôðåéìîì.  îáðàòíîì ñëó÷àå âîçâðàùàåò "NONE".
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
string PeriodToStr(int pts_period)
{
if(pts_period==0) pts_period=Period();
switch(pts_period)
{
case 1: return("M1");
case 5: return("M5");
case 15: return("M15");
case 30: return("M30");
case 60: return("H1");
case 240: return("H4");
case 1440: return("D1");
case 10080: return("W1");
case 43200: return("MN1");
}
return("NONE");
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>> Ôóíêöèÿ îáðàáîòêè îøèáîê
>>> Îïèñàíèå:
>>> Ôóíêöèÿ âûâîäèò ñîîáùåíèå îá îøèáêå ñ òåêñòîâûì îïèñàíèåì, à òàêæå âîçâðàùàåò îòâåò â çàâèñèìîñòè îò òîãî ê êàêîé èç òðåõ ãðóïï ïðèíàäëåæèò îøèáêà.
>>> Òàêæå â ñëó÷àå îøèáîê 4110 è 4111 (çàïðåò íà òîðãîâëþ â îïðåäåëåííîì íàïðàâëåíèè â îáùèõ íàñòðîéêàõ ýêñïåðòà) ìåíÿåò ïåðåìåííûå long.allowed è
>>> short.allowed íà false ñ òåì ÷òîáû â ñëåäóþùèé ðàç ôóíêöèÿ SendOrder íå èñïîëíÿëàñü â ýòîì æå íàïðàâëåíèè
>>>
>>> Ïàðàìåòðû:
>>> int er - íîìåð îøèáêè
>>>
>>> Âîçâðàùàåìûå çíà÷åíèÿ:
>>>  ñëó÷àå óñïåøíîãî èñïîëíåíèÿ ôóíêöèè âîçâðàùàåò îäèç èç òðåõ îòâåòîâ:
>>> 0 - ñëåäóåò ïîâòîðèòü âûïîëíåíèå òîðãîâîé ôóíêöèè
>>> 1 - ñëåäóåò ïðåêðàòèòü âûïîëíåíèå òîðãîâîé ôóíêöèè
>>> 2 - ñëåäóåò çàâåðøèòü ðàáîòó ñîâåòíèêà
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
int Fun_Error(int er)
{
switch(er)
{
// ãðóïïà 1: íå ïðåêðàùàòü ïîïûòêè
case 2: PnC("Îáùàÿ îøèáêà",0); return(0);
case 4: PnC("Òîðãîâûé ñåðâåð çàíÿò",0); return(0);
case 8: PnC("Ñëèøêîì ÷àñòûå çàïðîñû",0); return(0);
case 129: PnC("Íåïðàâèëüíàÿ öåíà",0); return(0);
case 135: PnC("Öåíà èçìåíèëàñü",0); return(0);
case 136: PnC("Íåò öåí",0); return(0);
case 137: PnC("Áðîêåð çàíÿò",0); return(0);
case 138: PnC("Íîâûå öåíû",0); return(0);
case 141: PnC("Ñëèøêîì ìíîãî çàïðîñîâ",0); return(0);
case 146: PnC("Ïîäñèñòåìà òîðãîâëè çàíÿòà",0); return(0);
// ãðóïïà 2: ïðåêðàùàåì ïîïûòêè
case 0: PnC("Îøèáêà îòñóòñòâóåò",0); return(1);
case 1: PnC("Íåò îøèáêè, íî ðåçóëüòàò íå èçâåñòåí",0); return(1);
case 3: PnC("Íåïðàâèëüíûå ïàðàìåòðû",0); return(1);
case 6: PnC("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì",0); return(1);
case 128: PnC("Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè",0); return(1);
case 130: PnC("Íåïðàâèëüíûå ñòîïû",0); return(1);
case 131: PnC("Íåïðàâèëüíûé îáúåì",0); return(1);
case 132: PnC("Ðûíîê çàêðûò",0); return(1);
case 133: PnC("Òîðãîâëÿ çàïðåùåíà",0); return(1);
case 134: PnC("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè",0); return(1);
case 139: PnC("Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ",0); return(1);
case 145: PnC("Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó",0); return(1);
case 148: PnC("Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà, óñòàíîâëåííîãî áðîêåðîì",0); return(1);
case 4000: PnC("Íåò îøèáêè",0); return(1);
case 4107: PnC("Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè",0); return(1);
case 4108: PnC("Îðäåð íå íàéäåí",0); return(1);
case 4110: PnC("BUY ïîçèöèè íå ðàçðåøåíû",0); long_allowed=false; return(1);
case 4111: PnC("SELL ïîçèöèè íå ðàçðåøåíû",0); short_allowed=false; return(1);
// ãðóïïà 3: çàâåðøàåì ðàáîòó
case 5: PnC("Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà",1); return(2);
case 7: PnC("Íåäîñòàòî÷íî ïðàâ",1); return(2);
case 9: PnC("Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà",1); return(2);
case 64: PnC("Ñ÷åò çàáëîêèðîâàí",1); return(2);
case 65: PnC("Íåïðàâèëüíûé íîìåð ñ÷åòà",1); return(2);
case 140: PnC("Ðàçðåøåíà òîëüêî ïîêóïêà",1); return(2);
case 147: PnC("Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì",1); return(2);
case 149: PnC("Ïîïûòêà îòêðûòü ïðîòèâîïîëîæíóþ ïîçèöèþ ê óæå ñóùåñòâóþùåé â ñëó÷àå, åñëè õåäæèðîâàíèå çàïðåùåíî",1); return(2);
case 150: PnC("Ïîïûòêà çàêðûòü ïîçèöèþ ïî èíñòðóìåíòó â ïðîòèâîðå÷èè ñ ïðàâèëîì FIFO",1); return(2);
case 4109: PnC("Òîðãîâëÿ íå ðàçðåøåíà, ðàçðåøèòå òîðãîâëþ ñîâåòíèêó è ïåðåçàïóñòèòå åãî",1); return(2);
}
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
---