Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
ZigZaHod_v1_0
//+------------------------------------------------------------------+
//| ZigZaHod v1.0.mq4 |
//| |
//| Coders ZEVs |
//| https://www.mql5.com/ru/users/fortorg |
//+------------------------------------------------------------------+
#property copyright "Coders ZEVs"
#property link "http://"
#include <stdlib.mqh>
int BarsFr=5;
int PervFr=3;
int PropCandlFr=0;
extern bool SigFractal=true;
// extern bool SigCandle=false;
extern int ABminRazmer=100; // ìèíèìàëüíûé ðàçìåð AB
extern int Otstup=15; // îòñòóï ïóíêòîâ îòë.( ñïðåä)
extern double OtstupProc=0.1; // îòñòóï îòë. îò AB (0.1 = 10 %)
extern int MaxOrder=10; // ìàõ. êîë-âî îðäåðîâ (íå áîëüøå 30, îãð. â ìàññèâå)
int MaxOrdersetka = 1; //êîë-âî îðäåðîâ ñåòêè
int delta = 25; //ðàññòîÿíèå îò òåêóùåé öåíû
extern double KoefProfit=1.5; // Êîåôèöèåíò ïðîôèòà
extern double DelKorStopOrder=0.6; // ãëóáèíà êîððåêöèè ïðè êîòîðîé óáèðàòü îòë.
// extern bool TudySydy=false;
extern bool OtmerennyiHod=true; // îòìåðåííûé õîä.
extern bool OdnaStor=true; // Òîðãîâëÿ â îäíó ñòîðîíó.
bool ObeStor=false;
double temp;// ABBA
extern bool SignalDelOldOtl=false; // óäàëÿåò ïðåäûäóùóþ îòëîæêó ñâîåãî íàïðàâëåíèÿ ïðè ñèãíàëå
extern bool SignalDelOldOtlAll=false; // óäàëÿå ÂÑÅ ñòàðûå îòëîæêè ïðè ñèãíàëå
bool DelBS=false;
bool DelSS=false;
//extern bool DelBStopOrder=true;
extern bool StopLos=false; // âûñòàâëÿåò SL çà Â
int OpBar=0;
int OtkatBar=0;
double Hod=0;
double OtkatCena=0;
double MA,MB,MRazmer,MTime;
//----
int TfFr,hi,lo;
double h1,h2,h3,h4,l1,l2,l3,l4;
int hk1,hk2,hk3,hk4,lk1,lk2,lk3,lk4,kstart;
double hf,lf;
bool NewOrder=true;
double A,B,C,D,Eh,El,AB,E,F,Up,Dn;
int k=1,i=0,Ak,Bk=0,Ck,Dk,Ek,Fk,Upk,Dnk;
int SigTfFr=0;
//----
extern string Òðàë="-=-=-";
//extern int TipTrala=1;
extern bool bTrlinloss= false; // ñëåäóåò ëè òðàëèòü íà ó÷àñòêå ëîññîâ (ìåæäó êóðñîì ñòîïëîññà è îòêðûòèÿ)
extern bool SLSignal=false; // âûñòàâëÿåò SL íà óðîâíå íîâîãî ñèãíàëà ïðîòèâîïîëîæíîãî íàïðàâëåíèÿ (åñëè "îäíà ñòîðîíà" òî íå ðàáîòàåò)
extern int iTmfrm=240; // ïåðèîä ãðàôèêà, íà êîòîðîì îïðåäåëÿþòñÿ ôðàêòàëû èëè òåíè (1, 5, 15, 30, 60, 240, 1440, 10080, 43200)
extern int iIndent=50; // îòñòóï îò òåíè áàðà, íà êîòîðîì ðàçìåùàåòñÿ ñòîïëîññ
extern int Frktl_bars = 5; // êîë-âî áàðîâ âî ôðàêòàëå
extern int Frktl_kol = 0; // êîë-âî ôðàêòàëîâ ïî êîòîðûì òðàëèòü
extern int Bars_kol=19; // êîë-âî áàðîâ, ïî òåíÿì êîòîðûõ ñëåäóåò òðàëèòü
//--------
extern double TargetLoss = 99999; // Öåëåâîé óáûòîê
extern double TargetProfit = 99999; // Öåëåâàÿ ïðèáûëü
int NumberOfTry= 5; // Êîëè÷åñòâî ïîïûòîê
color clCloseBuy = Blue; // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color clCloseSell = Red; // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
color clDelete = Yellow; // Öâåò çíà÷êà óäàëåíèÿ îðäåðà
bool UseSound = False; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
string SoundSuccess = "ok.wav"; // Çâóê óñïåõà
string SoundError = "timeout.wav"; // Çâóê îøèáêè
//-------
int iTicket;
int H_fractal=0,L_fractal=0;
int hTralFr,lTralFr;
int Tmfrm;
//---
double SelSL,BuySL;
double Target,Razmer;
int BBars=0;
bool New_Bar=true;
string ExpertComment="test";
int NumberOfTries=5;
double BStp=0,SStp=0,BSsl=0,SSsl=0,BSotl=0,SSotl=0;
double Mas_Ord_Tek[31][8]; // Îáüÿâëÿåì ìàññèâ òåêóùèõ îðäåðîâ
// 1é èíäåêñ = ïîðÿäêîâûé íîìåð îðäåðà â ýòîì ìàññèâå
// [0][0] Êîë-âî îòêðûòûõ îðäåðîâ
// [][1] êóðñ îòêð. îðäåðà (àáñîëþòíîå çíà÷. êóðñà)
// [][2] StopLoss îðäåðà (àáñîëþòíîå çíà÷. êóðñà)
// [][3] TakeProfit îðäåðà (àáñîëþòíîå çíà÷. êóðñà)
// [][4] íîìåð îðäåðà ticket
// [][5] êîëè÷. ëîòîâ îðäåðà (àáñîëþòíîå çíà÷. êóðñà)
// [][6] òèï îðäåðà 0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] Ìàãè÷åñêîå ÷èñëî îðäåðà MagicNumber
double Massiv[31][10]; // Îáüÿâëÿåì ìàññèâ -= Massiv =- Îñíîâíîé ìàññèâ
// 1é èíäåêñ = ïîðÿäêîâûé íîìåð îðäåðà â ýòîì ìàññèâå
// [0][1] MagicNumber !!! ñàìûé Íîâûé ìàãèê !!!
// [0][2] MinMagicNumber îòêð. îðäåðîâ(èç áëîêà ñðàâíåíèÿ îðäåðîâ)
// [0][3] áëèæàéøàÿ ñâîáîäíàÿ ñòðîêà
// [0][5] ñ÷åò÷èê ñîõðàíåíèé
// Massiv[][1]; // Öåíà A
// Massiv[][2]; // Öåíà B
// Massiv[][3]; // Ðàçìåð ÀB
// Massiv[][5]; // Âðåìÿ ÀB
// Massiv[][6]; // òàéìôðåéì TfFr
//--------------------------------------------------------------------
extern bool Commentariy=true;
// extern bool DelHistoryMassiv=true;
bool DelHistoryMassiv=true;
extern bool SaveMassiv=false;
extern int MagicNumber=515000000;
double LotB,LotS;
extern double Lot=0.01;
int Kol_B_S;
extern bool LotProiz=false; // ;-)
double Lots;
extern int Slippage=10;
bool BuyCondition=false,SellCondition=false;// CloseBuyCondition=false , CloseSellCondition=false;
int Magic;int MN;
bool PauseNews=false;
string Spread;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int init()
{
// Magic=StrToInteger(StringSubstr(DoubleToStr(MagicNumber,0), 0, 3));
// if (SaveMassiv==false)//Massiv[0][1]=MagicNumber;
// {
// Massiv[0][1]=MagicNumber;
// MN=MagicNumber;
// if (Massiv[0][1]>MagicNumber) MagicNumber=Massiv[0][1]; // !!! ñàìûé Íîâûé ìàãèê !!!
// if (MagicNumber>MN+9999) MagicNumber= MN;
// }
if(SaveMassiv)
{
FilesOpen(); // ×èòàåì Ôàéë â ìàññèâ -->-Massiv
// MN=MagicNumber;
// if (Massiv[0][1]>MagicNumber) MagicNumber=Massiv[0][1]; // !!! ñàìûé Íîâûé ìàãèê !!!
// if (Massiv[0][1]<MN) {MagicNumber=MN ; Massiv[0][1]=MagicNumber; FilesWrite();}
// if (MagicNumber>MN+99999) {MagicNumber= MN;Massiv[0][1]=MagicNumber;FilesWrite();}
// return(0);
}
//Magic=StrToInteger(StringSubstr(DoubleToStr(MagicNumber,0), 0, 3));
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int deinit()
{
// Massiv [0][1]=Massiv [0][1]+1;
if(SaveMassiv)
{
// if (Massiv [0][1]==0) Massiv [0][1]=MagicNumber;
// if (Massiv [0][1]!=MagicNumber)
// Massiv [0][1]=Massiv [0][1]+1;
FilesWrite(); // // Ïèøåì ìàññèâ Massiv --> â Ôàéë
}
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Crossed()
{
// -------- Îïðåäåëÿåì íîâîñòè ... Åñëè åñòü òî íå òîðãóåì.
int Min_Dist=MarketInfo(Symbol(),MODE_STOPLEVEL); // Ìèí. äèñòàíöèÿ STOPLEVEL
int Min_Freez=MarketInfo(Symbol(),MODE_FREEZELEVEL); // Ìèí. äèñòàíöèÿ FREEZELEVEL
if(PauseNews==true &&(Min_Dist>100|| Min_Freez>100)) // ïðîâåðêà íîâîñòåé
// -------- Ïðîâåðÿåì íîâûé áàð...
// Fun_New_Bar(); // Ïðîâåðÿåì íîâûé áàð
// if (New_Bar==false) return; // ..òî óõîäèì
NewOrder=false;
hi=0;lo=0;A=0;B=0;C=0;D=0;E=0;F=0;Up=0;Dn=0;
Ak=0;Bk=0;Ck=0;Dk=0;Ek=0;Fk=0;Upk=0;Dnk=0;
// hk1=0;hk2=0;hk3=0;lk1=0;lk2=0;lk3=0;
TfFr=0;
// BarsFr=0;
kstart=PropCandlFr;
hlFractal(); // Íàõîäèì hl ôðàêòàëû
if(hk1==lk1 && hk1==PervFr) return(0); // òóäà-ñþäà
if(SigFractal)
{
if((hk1<lk1) && (hk1==PervFr) && (High[1]<High[3] && High[2]<High[3])) // && (hk2>=lk2)) // up
{
A=iHigh(Symbol(),TfFr,PervFr); B=l1;C=h2;D=l2;
Ak=hk1;Bk=lk1;Ck=hk2;Dk=lk2;
// hi=iHighest(Symbol(),TfFr, MODE_HIGH, lk2,PropCandlFr);
// lo=iLowest(Symbol(),TfFr, MODE_LOW, lk2,PropCandlFr);
// if (iHigh(Symbol(),TfFr,hi)>A || iLow(Symbol(),TfFr,lo)<B){return(0);}
}
if((lk1<hk1) && (lk1==PervFr) && (Low[1]>Low[3] && Low[2]>Low[3]))// && (lk2>=hk2)) //
{
A=iLow(Symbol(),TfFr,PervFr);B=h1;C=l2;D=h2;
Ak=lk1;Bk=hk1;Ck=lk2;Dk=hk2;
// lo=iLowest(Symbol(),TfFr, MODE_LOW, hk2,PropCandlFr) ;
// hi=iHighest(Symbol(),TfFr, MODE_HIGH, hk2,PropCandlFr) ;
// if (iHigh(Symbol(),TfFr,hi)>B || iLow(Symbol(),TfFr,lo)<A){ return(0);}
}
}
AB=(A-B)*100000; // ??? *Point
Razmer=AB;
if(Razmer<0) {Razmer=-Razmer;}
if(Razmer<ABminRazmer)return(0);
SelSL=0;
BuySL=0;
if(A>B)
{
if((DelKorStopOrder>0) && ((B+Razmer*DelKorStopOrder*Point)>iLow(Symbol(),0,1)))return(0);
NewOrder=true; SelSL=A;BuySL=0;
if(ObeStor) return(5);
return(1);//BuyCondition return(1);
}
if(A<B)
{
if((DelKorStopOrder>0) && ((B-Razmer*DelKorStopOrder*Point)<iHigh(Symbol(),0,1)))return(0);
NewOrder=true; BuySL=A;SelSL=0;
if(ObeStor) return(5);
return(2);//SellCondition return(2);
}
return(0); //elsewhere
}
//+------------------------------------------------------------------+
int start()
{
string st;
// Magic=StrToInteger(StringSubstr(DoubleToStr(MagicNumber,0), 0, 3));
if(OtstupProc==10) {OtstupProc=0.1;} // åíòî äëÿ ñîâìåñòèìîñòè ñî ñòàðîé âåðñèåé
if(AccountProfit()<-TargetLoss || AccountProfit()>TargetProfit)
{
ClosePosFirstProfit();
DeleteOrders();
}
// MasTekOrder (); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà
// SravMas();
int cnt,ticket,total;
BuyCondition=false; SellCondition=false;// CloseBuyCondition=false , CloseSellCondition=false;
//--- Trading conditions
Fun_New_Bar(); // Ïðîâåðÿåì íîâûé áàð
if(New_Bar)
{ // ..òî óõîäèì
if(Crossed()==1)
BuyCondition=true;
if(Crossed()==2)
SellCondition=true;
if(Crossed()==5){SellCondition=true;BuyCondition=true;}
}
//================================================================
// Èùåì âñå îòêðûòûå îðäåðà è Ðàáîòåì ñ íèìè... Óäàëÿåì îòëîæêè è òðàëèì
//================================================================
Kol_B_S=0;
DelBS=false;DelSS=false;
LotB=0; LotS=0;
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
ticket=OrderTicket();
iTicket=ticket;
if((OdnaStor) && (OrderType()==1)) {DelBS=true;} // buy
if((OdnaStor) && (OrderType()==0)) {DelSS=true;} // sell
if((OrderType()==1) || (OrderType()==0)) {Kol_B_S++;} // buy
if((OdnaStor) && (BuyCondition) &&(OrderType()==1)) {BuyCondition=false;} // buy
if((OdnaStor) &&(SellCondition) &&(OrderType()==0)) {SellCondition=false;} // sell
if(OrderType()==OP_BUY) {LotB=LotB+OrderLots();}
if(OrderType()==OP_SELL) {LotS=LotS+OrderLots();}
}
}
//================================================================
// Èùåì âñå îòêðûòûå îðäåðà è Ðàáîòåì ñ íèìè... Óäàëÿåì îòëîæêè è òðàëèì TP
// -=-=-=-=-=-=-= Ìàñèâ... ;-) -=-=-=-=-=-=
//================================================================
// MasTekOrder();
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
ticket=OrderTicket();
iTicket=ticket;
for(int h=1;h<=30;h++) //
{
if((Massiv[h][4]==ticket)) break; //
}
MA=Massiv[h][1]; // Öåíà A
MB=Massiv[h][2]; // Öåíà B
MRazmer=Massiv[h][3]; // Ðàçìåð ÀB
MTime=Massiv[h][5]; // Âðåìÿ ÀB
if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol())
{
if(DelSS){CloseOrder(OrderType());}
if((SignalDelOldOtl) && (SellCondition)) {CloseOrder(OrderType());}
if((SignalDelOldOtlAll) && ((BuyCondition) || (SellCondition))) {CloseOrder(OrderType());}
if((DelKorStopOrder>0) && (OtmerennyiHod==false) && ((MB-MRazmer*DelKorStopOrder*Point)<iHigh(Symbol(),0,1))){CloseOrder(OrderType());}
// if ((DelBStopOrder) && MB<iHigh(Symbol(),0,1)){CloseOrder (OrderType());}
if(OtmerennyiHod) MasOtmerHod(ticket);
}
if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol())
// if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol() && Magic==StrToInteger(StringSubstr(DoubleToStr(OrderMagicNumber(),0), 0, 3)))
{
if(DelBS){CloseOrder(OrderType());}
if((SignalDelOldOtl) && (BuyCondition)) {CloseOrder(OrderType());}
if((SignalDelOldOtlAll) && ((BuyCondition) || (SellCondition))) {CloseOrder(OrderType());}
if((DelKorStopOrder>0) && (OtmerennyiHod==false) && ((MB+MRazmer*DelKorStopOrder*Point)>iLow(Symbol(),0,1))){CloseOrder(OrderType());}
// if ((DelBStopOrder) && MB>iLow(Symbol(),0,1)){CloseOrder (OrderType());}
if(OtmerennyiHod) MasOtmerHod(ticket);
}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{
if(OtmerennyiHod) MasOtmerHod(ticket);
TrailingByZ(iTicket,iTmfrm,Bars_kol,iIndent,bTrlinloss);
} // Çàïóñêàåì TrailingStop
if(OrderType()==OP_BUY && OrderSymbol()==Symbol()) //<-- Go to short position
{
if(OtmerennyiHod) MasOtmerHod(ticket);
TrailingByZ(iTicket,iTmfrm,Bars_kol,iIndent,bTrlinloss);
} // Çàïóñêàåì TrailingStop
}
}
//================================================================
// Âûñòàâëÿåì îòëîæêè
//================================================================
total=OrdersTotal();
SLTP(); // Âûçûâàåì ïîäïðîãðàììó ðàñ÷åòà sl, tp,... îòêðûâàåìûõ îðäåðîâ
// if ((ObeStor==true)&&((BuyCondition==true)||(SellCondition==true))){BuyCondition=true;SellCondition=true;}
Lots=Lot;
if(LotProiz)
{
Lots=(Lot*(Kol_B_S+1)*2); // ïèïåö... ÿ ñàì â øîêå ;-)
if(Lots==0) Lots=Lot;
}
if(total<MaxOrder)
{
if((BuyCondition))//<-- BUY condition
{
ticket=OpenOrder(OP_BUYSTOP); //<-- Open BUYSTOP order
CheckError(ticket,"BUYSTOP"); // return(0);
}
if((SellCondition)) //<-- SELL condition
{
ticket=OpenOrder(OP_SELLSTOP); //<-- Open SELLSTOP order
CheckError(ticket,"SELLSTOP"); // return(0);
}
}
BuyCondition=false; SellCondition=false;// CloseBuyCondition=false ; CloseSellCondition=false;
//Spread=MarketInfo(Symbol(),MODE_SPREAD); ExpertComment=MarketInfo(Symbol(),MODE_SPREAD);
//MasTekOrder (); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà
//SravMas();
if(Commentariy==true)
{
Spread=MarketInfo(Symbol(),MODE_SPREAD); ExpertComment=MarketInfo(Symbol(),MODE_SPREAD);
st="Öåëåâîé óáûòîê="+DoubleToStr(-TargetLoss,2)+" "+AccountCurrency()+" Òåêóù";
if(AccountProfit()<0) st=st+"èé óáûòîê=";
else st=st+"àÿ ïðèáûëü=";
st=st+DoubleToStr(AccountProfit(),2)+" "+AccountCurrency()+" Öåëåâàÿ ïðèáûëü="+DoubleToStr(TargetProfit,2)+" "+AccountCurrency();
MasTekOrder(); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà
SravMas();
Comment("",TimeToStr(Time[0],TIME_MINUTES),
"\n ",st,
"\n Êîë-âî îðäåðîâ= ",Mas_Ord_Tek[0][0],",Ïóñòî= ",Massiv[0][3],
// "\n ticket= ",Mas_Ord_Tek[1][4],", Òèï îðäåðà= ",Mas_Ord_Tek[1][6],", magik= ",Mas_Ord_Tek[1][7],
// "\n ticket= ",Mas_Ord_Tek[2][4],", Òèï îðäåðà= ",Mas_Ord_Tek[2][6],", magik= ",Mas_Ord_Tek[2][7],
// "\n ticket= ",Mas_Ord_Tek[3][4],", Òèï îðäåðà= ",Mas_Ord_Tek[3][6],", magik= ",Mas_Ord_Tek[3][7],
"\n ticketm= ",Massiv[1][4],", Òèï îðäåðà= ",Massiv[1][6],", magik= ",Massiv[1][7],", A= ",Massiv[1][1],", B= ",Massiv[1][2],", Razmer= ",Massiv[1][3],", Time= ",Massiv[1][5],
"\n ticketm= ",Massiv[2][4],", Òèï îðäåðà= ",Massiv[2][6],", magik= ",Massiv[2][7],", A= ",Massiv[2][1],", B= ",Massiv[2][2],", Razmer= ",Massiv[2][3],", Time= ",Massiv[2][5],
// "\n ticketm= ",Massiv[3][4],", Òèï îðäåðà= ",Massiv[3][6],", magik= ",Massiv[3][7],", A= ",Massiv[3][1],", B= ",Massiv[3][2],", Razmer= ",Massiv[3][3],", Time= ",Massiv[3][5],
// "\n ticketm= ",Massiv[4][4],", Òèï îðäåðà= ",Massiv[4][6],", magik= ",Massiv[4][7],", A= ",Massiv[4][1],", B= ",Massiv[4][2],", Razmer= ",Massiv[4][3],", Time= ",Massiv[4][5],
// "\n ticketm= ",Massiv[5][4],", Òèï îðäåðà= ",Massiv[5][6],", magik= ",Massiv[5][7],
// "\n ticketm= ",Massiv[6][4],", Òèï îðäåðà= ",Massiv[6][6],", magik= ",Massiv[6][7],
// "\n ticketm= ",Massiv[7][4],", Òèï îðäåðà= ",Massiv[7][6],", magik= ",Massiv[7][7],
// "\n MagicNumberRead= ",Massiv [0][1],", MinMagic= ",Massiv [0][2],", MagicNumber= ",MagicNumber,
"\n Spread ",Spread,", MagicNumber= ",MagicNumber," Ñîõðàíåííî= ",Massiv[0][5],
"\n A= ",Ak," ",A,
"\n B= ",Bk," ",B,
"\n AB= ",AB);
}
//Massiv[0][1]=MagicNumber;
if(AccountProfit()<-TargetLoss || AccountProfit()>TargetProfit)
{
ClosePosFirstProfit();
DeleteOrders();
}
return(0);
}
//+------------------------------------------------------------------+
// Êîíåö...
// äàëüøå èäóò ïîäïðîãðàììû...
//+------------------------------------------------------------------+
void Fun_New_Bar() // Ô-èÿ îáíàðóæåíèÿ ..íîâîãî áàðà
{
if(BBars==iBars(Symbol(),SigTfFr)) New_Bar=false;
if(BBars!=iBars(Symbol(),SigTfFr)) {BBars=iBars(Symbol(),SigTfFr);New_Bar=true;}
}
//+------------------------------------------------------------------+
// Ðàñ÷èòûâàåì SL TP è öåíó îòêðûòèÿ.
void SLTP() // Ðàñ÷èòûâàåì SL TP
{
SStp=0;SSsl=0;BStp=0;BSsl=0;BSotl=0;SSotl=0;
if(KoefProfit>0) {SStp=A-Razmer*KoefProfit*Point;}
SSotl=A-Otstup*0.5*Point-Razmer*OtstupProc*Point;
if(StopLos) SSsl=B+Otstup*Point;
if(ObeStor) {temp=B;B=A;A=temp;}
if(KoefProfit>0) {BStp=A+Razmer*KoefProfit*Point;}
BSotl=A+Otstup*Point+Razmer*OtstupProc*Point;
if(StopLos) BSsl=B-Otstup/2*Point;
if(ObeStor) {temp=B;B=A;A=temp;}
}
//+------------------------------------------------------------------+
// Îòêðûâàåì îòëîæåííûé îðäåð
//=-=-=-=-
int OpenOrder(int type)
{
MasTekOrder(); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà
SravMas();
int err=0;int ticket=0;int c=0;
if(type==OP_BUYSTOP)
{
// MagicNumber=Massiv[0][1];
BSotl= NormalizeDouble(BSotl-delta*Point,Digits);
for(i=1; i<=MaxOrdersetka; i++)
{
BSotl= NormalizeDouble(BSotl+delta*Point,Digits);
for(c=0;c<NumberOfTries;c++)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,BSotl,Slippage,BSsl,BStp,ExpertComment,MagicNumber,0,Green);
err=GetLastError();
if(err==0)
{
ZapOrdMas(ticket);
break;
}
else
{
if(err==4 || err==137 || err==146 || err==136) //Busy errors
{
Sleep(60);
continue;
}
else //normal error
{
// ZapOrdMas(ticket);
break;
}
}
}
}
}
if(type==OP_SELLSTOP)
{
// MagicNumber=Massiv[0][1];
SSotl= NormalizeDouble(SSotl+delta*Point,Digits);
for(i=1; i<=MaxOrdersetka; i++)
{
SSotl=NormalizeDouble(SSotl-delta*Point,Digits);
for(c=0;c<NumberOfTries;c++)
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,SSotl,Slippage,SSsl,SStp,ExpertComment,MagicNumber,0,Red);
err=GetLastError();
if(err==0)
{
ZapOrdMas(ticket);
break;
}
else
{
if(err==4 || err==137 || err==146 || err==136) //Busy errors
{
Sleep(60);
continue;
}
else //normal error
{
// ZapOrdMas(ticket);
break;
}
}
}
}
// }
}
// ZapOrdMas(ticket);
//MasTekOrder (); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà
//SravMas();
return(ticket);
}
//+------------------------------------------------------------------+
// Çàêðûâàåì îòëîæåííûé îðäåð
bool CloseOrder(int type)
{
if(type==OP_BUYSTOP)
return(OrderDelete(OrderTicket()));
if(type==OP_SELLSTOP)
return(OrderDelete(OrderTicket()));
return (0);
}
//+------------------------------------------------------------------+
void CheckError(int ticket,string Type)
{
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(Type+" order opened : ",OrderOpenPrice());
}
else Print("Error opening "+Type+" order : ",ErrorDescription(GetLastError()));
}
//+------------------------------------------------------------------+
//+- ×èòàåì è ïèøåì â ôàéë -=- -----------------------------------+
//+------------------------------------------------------------------+
void FilesWrite() // Ïèøåì Massiv --> â Ôàéë (ðåçåðâíîå êîïèðîâàíèå)
{
Massiv[0][5]=Massiv[0][5]+1;
int h=FileOpen("Massiv.bin",FILE_BIN|FILE_WRITE);
FileWriteInteger(h,ArraySize(Massiv),LONG_VALUE);
FileWriteArray(h,Massiv,0,ArraySize(Massiv));
FileClose(h);
}
//+------------------------------------------------------------------+
void FilesOpen() // ×èòàåì Ôàéë â Massiv -->-- (ðåçåðâíîå êîïèðîâàíèå)
{
int h=FileOpen("Massiv.bin",FILE_BIN|FILE_READ);
if(h<1)
{
Print("Ôàéë Massiv.bin íå îáíàðóæåí, ïîñëåäíÿÿ îøèáêà ",GetLastError());
return(false);
}
int s=FileReadInteger(h,LONG_VALUE);
ArrayResize(Massiv,s);
FileReadArray(h,Massiv,0,s);
FileClose(h);
}
//+------------------------------------------------------------------+
//+- -=- -----------------------------------+
//+------------------------------------------------------------------+
void MasTekOrder() // Èùåì è çàíîñèì â Ìàññèâ "Mas_Ord_Tek" âñå îðäåðà
{
int Kol=0; // Îáíóëåíèå ñ÷¸ò÷èêà îðäåðîâ
// Massiv[0][2]=Massiv[0][1]; // ñàìûé ìàëûé ìàãèê = Ñàìûé áîëüøîé(ñáðîñ)
ArrayInitialize(Mas_Ord_Tek,0); // Îáíóëåíèå ìàññèâà
for(i=0; i<OrdersTotal(); i++)// Àíàëèç ïî âñåì îðäåðàì òåðìèíàëà
{
if((OrderSelect(i,SELECT_BY_POS)==true) && (OrderSymbol()==Symbol()))// && Magic==StrToInteger(StringSubstr(DoubleToStr(OrderMagicNumber(),0), 0, 3)))) //Åñëè åñòü ñëåäóþù è íàøà âàë.ïàðà è íàø ìàãèê
{
Kol++; // Ñ÷èòàåì îáùåå êîëè÷åñòâî îðäåðîâ
//--- Ôîðìèðîâàíèå íîâîãî ìàññèâà îðäåðîâ --
Mas_Ord_Tek[Kol][1] = NormalizeDouble(OrderOpenPrice(),Digits); // Êóðñ îòêðûòèÿ îðäåðîâ
Mas_Ord_Tek[Kol][2] = NormalizeDouble(OrderStopLoss(), Digits); // Êóðñ SL
Mas_Ord_Tek[Kol][3]= NormalizeDouble(OrderTakeProfit(),Digits); // Êóðñ ÒÐ
Mas_Ord_Tek[Kol][4] = OrderTicket(); // Íîìåð îðäåðà
Mas_Ord_Tek[Kol][5] = OrderLots(); // Êîëè÷åñòâî ëîòîâ
Mas_Ord_Tek[Kol][6] = OrderType(); // Òèï îðäåðà
Mas_Ord_Tek[Kol][7] = OrderMagicNumber();// Ìàãè÷åñêîå ÷èñëî
// if (Massiv[0][2]>OrderMagicNumber()) Massiv[0][2]=OrderMagicNumber(); // Èùåì ñàìûé ìàëåíüêèé ìàãèê ñðåäè îòêðûòûõ îðäåðîâ
}
}
Mas_Ord_Tek[0][0]=Kol; // Ñîõðàíÿåì â íóëåâóþ ÿ÷åå÷êó êîë-âî îðäåðîâ.
// Massiv[0][2]=MinMagicNumber; // Çàíîñèì â îñíîâíîé ìàññèâ ñàìûé ìàëåíüêèé ìàãèê îòêðûòûõ îðäåðîâ
// return();
}
//==================================================================
void SravMas() //==================================== Ïîèñê ïðîïàâøèõ îðäåðîâ ====
{
for(int oo=1;oo<=30;oo++) // Âîçüì¸ì íîìåð îðäåðà èç ñòàðîãî ìàññèâà
// for (int oo=1;oo<=Massiv[0][0];oo++) // Âîçüì¸ì íîìåð îðäåðà èç ñòàðîãî ìàññèâà
{
int Sovpadenie=0; // Äëÿ íà÷àëà îáíóëèì ôàêò ïðèçíàêà ñîâïàä.
for(i=1;i<=Mas_Ord_Tek[0][0];i++) // Ïîèùåì ýòîò îðäåðîê â òåêóùåì ìàññèâå
{
if(Mas_Ord_Tek[i][4]==Massiv[oo][4]) // Åñëè ñîâïàë ticket îðäåðà, òî çàïîìíèì, ò.å ïîêà æèâ
// è âûõîäèì èç âíóòðåííåãî öèêëà
{
Sovpadenie=1;
if(Massiv[oo][6]!=Mas_Ord_Tek[i][6]) Massiv[oo][6]=Mas_Ord_Tek[i][6]; //èçìåíÿåì ñòàòóñ îðäåðà
break;
}
}
if(Sovpadenie==1) continue; // Ïåðåõîäèì ê ñëåäóþùåìó ñòàðîìó
if(Massiv[oo][6]<9) Massiv[oo][6]=Massiv[oo][6]+10; // Çàêðûò îðäåð
}
Massiv[0][3]=0; // Ñáðîñ ïóñòîé ÿ÷åéêè äëÿ çàïèñè îðäåðîâ
for(int f=1;f<=30;f++) // Ïåðåáèðàåì âåñü ìàññèâ â ïîèñêàõ ñòàðûõ îðäåðîâ è èõ óäàëåíèÿ
{
if((Massiv[0][3]==0) && (Massiv[f][4]==0)) Massiv[0][3]=f; // åñëè íåò ticket çíà÷èò ñòðîêà ïóñòà
if((DelHistoryMassiv) && (Massiv[f][6]>9)) // Åñëè îðäåðà óæå íåò
{
for(int g=0;g<=7;g++) // Îáíóëÿåì âñþ ñòðîêó
{
Massiv[f][g]=0; // çàïîëíÿåì 0
if(Massiv[0][3]==0) Massiv[0][3]=f;// Çàïîìèíàåì ïóñòóþ ñòðîêó äëÿ çàïèñè íîâûõ îðäåðîâ
}
}
}
// return();
}
//=================================================================
void ZapOrdMas(int ticket)
{
MasTekOrder(); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà
SravMas();
int pusto=Massiv[0][3];
if(pusto==0)
{
for(int f=1;f<=30;f++) // Ïåðåáèðàåì âåñü ìàññèâ â ïîèñêàõ ïóñòûõ ñòðîê
{
if((pusto==0) && (Massiv[f][4]==0)) {pusto=f; break;} // åñëè íåò ticket çíà÷èò ñòðîêà ïóñòà
}
}
for(i=0; i<OrdersTotal(); i++)// Àíàëèç ïî âñåì îðäåðàì òåðìèíàëà
{
if((OrderSelect(i,SELECT_BY_POS)==true) && (OrderSymbol()==Symbol()) && (ticket==OrderTicket())) //Åñëè åñòü ñëåäóþù è íàøà âàë.ïàðà
{
if((ObeStor) && (Ak>Bk) && (OrderType()==5)) {temp=B;B=A;A=temp;} // buy
if((ObeStor) && (Ak<Bk) && (OrderType()==4)) {temp=B;B=A;A=temp;} // sell
// Ak=hk1;Bk=lk1; SelSL=A
Massiv[pusto][1] = A;// A
Massiv[pusto][2] = B;// B
Massiv[pusto][3]=Razmer;// Razmer
Massiv[pusto][4]=OrderTicket(); // Íîìåð îðäåðà
Massiv[pusto][5]=Time[0];// Âðåìÿ îòêðûòèÿ ñäåëêè
Massiv[pusto][6] = OrderType(); // Òèï îðäåðà
Massiv[pusto][7] = OrderMagicNumber();// Ìàãè÷åñêîå ÷èñëî
// Massiv[pusto][8] = // Ïåðèîä ãðàôèêà ïðèíÿòèÿ ðåøåíèÿ
// Massiv[pusto][9] =
Massiv[0][3]=0;
// MagicNumber=MagicNumber+1;
Massiv[0][1]=MagicNumber;
if((ObeStor) && (Ak>Bk) && (OrderType()==5)) {temp=B;B=A;A=temp;} // buy
if((ObeStor) && (Ak<Bk) && (OrderType()==4)) {temp=B;B=A;A=temp;} // sell
if(SaveMassiv==true)
{
FilesWrite();
// return(0);
} // // Ïèøåì ìàññèâ Massiv --> â Ôàéë
}
}
//SravMas();
return;
}
//--------------------------------------------------------------------------
void MasOtmerHod(int ticket)
{
for(int m=1;m<=30;m++) //
{
if((Massiv[m][4]==ticket)) break; //
}
for(i=0; i<OrdersTotal(); i++)// Àíàëèç ïî âñåì îðäåðàì òåðìèíàëà
{
if((OrderSelect(i,SELECT_BY_POS)==true) && (OrderSymbol()==Symbol()) && (ticket==OrderTicket())) //Åñëè åñòü ñëåäóþù è íàøà âàë.ïàðà
{
if((OtmerennyiHod) && ((Massiv[m][6]==0) || (Massiv[m][6]==4))) // buy
{
if((DelKorStopOrder>0) && (Massiv[m][6]==4) && ((Massiv[m][2]+Massiv[m][3]*DelKorStopOrder*Point)>iLow(Symbol(),0,1))){CloseOrder(OrderType());}
OpBar=(iBarShift(Symbol(),0,MTime)+1);
OtkatBar=iLowest(Symbol(),0,MODE_LOW,OpBar,1);
OtkatCena=iLow(Symbol(),0,OtkatBar);
// Hod=(MB-MA)*100000; // ??? *Point
// DelKor
Hod=MRazmer;
// if (Hod<0) {Hod=-Hod;}
Target=OtkatCena+Hod*KoefProfit*Point;
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Target,0,Yellow);
}
if((OtmerennyiHod) && ((Massiv[m][6]==1) || (Massiv[m][6]==5))) //sell
{
if((DelKorStopOrder>0) && (Massiv[m][6]==5) && ((Massiv[m][2]-Massiv[m][3]*DelKorStopOrder*Point)<iHigh(Symbol(),0,1))){CloseOrder(OrderType());}
OpBar=(iBarShift(Symbol(),0,MTime)+1);
OtkatBar=iHighest(Symbol(),0,MODE_HIGH,OpBar,1);
OtkatCena=iHigh(Symbol(),0,OtkatBar);
// Hod=(MB-MA)*100000; // ??? *Point
Hod=MRazmer;
// if (Hod<0) {Hod=-Hod;}
Target=OtkatCena-Hod*KoefProfit*Point;// A+Razmer*KoefProfit*Point;
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Target,0,Yellow);
}
}
}
return;
}
//--------------------------------------------------------------------------
void hlFractal()
{
//+--------------Âû÷èñëÿåì h1-h3
hk1=0;hk2=0;hk3=0;hk4=0;hf=0;lf=0;
k=kstart;
while(hk1<1) //...h1
{
hf=iCustom(Symbol(),TfFr,"Fr",BarsFr,0,k);
if(hf>0) {hk1=k;h1=hf;}
k++;
}
k=k+1;
while(hk2<1) //...h2
{
hf=iCustom(Symbol(),TfFr,"Fr",BarsFr,0,k);
if(hf>0) {hk2=k;h2=hf;}
k++;
}
k=k+1;
while(hk3<1) //...h3
{
hf=iCustom(Symbol(),TfFr,"Fr",BarsFr,0,k);
if(hf>0) {hk3=k;h3=hf;}
k++;
}
k=k+1;
while(hk4<1) //...h4
{
hf=iCustom(Symbol(),TfFr,"Fr",BarsFr,0,k);
if(hf>0) {hk4=k;h4=hf;}
k++;
}
//+--------------Âû÷èñëÿåì l1-l3
lk1=0;lk2=0;lk3=0;lk4=0;
k=kstart;
while(lk1<1) //...l1
{
lf=iCustom(Symbol(),TfFr,"Fr",BarsFr,1,k);
if(lf>0) {lk1=k;l1=lf;}
k++;
}
k=k+1;
while(lk2<1) //...l2
{
lf=iCustom(Symbol(),TfFr,"Fr",BarsFr,1,k);
if(lf>0) {lk2=k;l2=lf;}
k++;
}
k=k+1;
while(lk3<1) //...l3
{
lf=iCustom(Symbol(),TfFr,"Fr",BarsFr,1,k);
if(lf>0) {lk3=k;l3=lf;}
k++;
}
k=k+1;
while(lk4<1) //...l4
{
lf=iCustom(Symbol(),TfFr,"Fr",BarsFr,1,k);
if(lf>0) {lk4=k;l4=lf;}
k++;
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+-----------------------------------------------------TrailingStop-+
//+------------------------------------------------------------------+
void TralFractal()
{
k=0;hTralFr=0;
hf=0;
Tmfrm=iTmfrm;
for(int a=0; a<Frktl_kol; a++) //
{
hTralFr=0;
while(hTralFr<1) //...
{
hf=iCustom(Symbol(),Tmfrm,"Fr",Frktl_bars,0,k);
if(hf>0) hTralFr=k;
k++;
}
}
k=0;lTralFr=0;
lf=0;
for(a=0; a<Frktl_kol; a++) //
{
lTralFr=0;
while(lTralFr<1) //...
{
lf=iCustom(Symbol(),Tmfrm,"Fr",Frktl_bars,1,k);
if(lf>0) lTralFr=k;
k++;
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void TrailingByZ(int ticket,int tmfrm,int bars_n,int indent,bool trlinloss)
{
TralFractal();
// int i; // counter
double new_extremum;
// ïðîâåðÿåì ïåðåäàííûå çíà÷åíèÿ
if((indent<0) || (ticket==0) || ((tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) && (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)) || (!OrderSelect(ticket,SELECT_BY_TICKET)))
{
Print("Òðåéëèíã ôóíêöèåé TrailingByShadows() íåâîçìîæåí èç-çà íåêîððåêòíîñòè çíà÷åíèé ïåðåäàííûõ åé àðãóìåíòîâ.");
return(0);
}
// åñëè äëèííàÿ ïîçèöèÿ (OP_BUY), íàõîäèì ìèíèìóì bars_n ñâå÷åé
if(OrderType()==OP_BUY)
{
if(Frktl_kol>0) // new_extremum = ArrayMinimum(Symbol(),tmfrm,lTralFr);
{
// TralFractal();
int IndMin=ArrayMinimum(Low,lTralFr,1); // èíäåêñ áàðà
new_extremum=iLow(Symbol(),tmfrm,IndMin);
}
if(Bars_kol>0)
{
for(i=1;i<=bars_n;i++)
{
if(i==1) new_extremum=iLow(Symbol(),tmfrm,i);
else
if(new_extremum>iLow(Symbol(),tmfrm,i)) new_extremum=iLow(Symbol(),tmfrm,i);
}
}
if((BuySL>0) && (SLSignal)) new_extremum=BuySL;
// åñëè òðàëèì è â çîíå óáûòêîâ
if(trlinloss==true)
{
// åñëè íàéäåííîå çíà÷åíèå "ëó÷øå" òåêóùåãî ñòîïëîññà ïîçèöèè, ïåðåíîñèì
if((((new_extremum-indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum-indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if(!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
Print("Íå óäàëîñü ìîäèôèöèðîâàòü îðäåð ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
}
else
{
// åñëè íîâûé ñòîïëîññ íå òîëüêî ëó÷øå ïðåäûäóùåãî, íî è êóðñà îòêðûòèÿ ïîçèöèè
if((((new_extremum-indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && ((new_extremum-indent*Point)>OrderOpenPrice()) && (new_extremum-indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if(!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
Print("Íå óäàëîñü ìîäèôèöèðîâàòü îðäåð ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
}
}
// åñëè êîðîòêàÿ ïîçèöèÿ (OP_SELL), íàõîäèì ìèíèìóì bars_n ñâå÷åé
if(OrderType()==OP_SELL)
{
if(Frktl_kol>0)
{
int IndMax=ArrayMaximum(High,hTralFr,1); // èíäåêñ áàðà
new_extremum=iHigh(Symbol(),tmfrm,IndMax);
}
if(Bars_kol>0)
{
for(i=1;i<=bars_n;i++)
{
if(i==1) new_extremum=iHigh(Symbol(),tmfrm,i);
else
if(new_extremum<iHigh(Symbol(),tmfrm,i)) new_extremum=iHigh(Symbol(),tmfrm,i);
// if ((Frktl_kol>0) && new_extremum<iHigh(Symbol(),tmfrm,hTralFr)) new_extremum = iHigh(Symbol(),tmfrm,hTralFr);
// if (Frktl_kol>0) new_extremum = iHigh(Symbol(),tmfrm,hTralFr);
}
}
if((SelSL>0) && (SLSignal)) new_extremum=SelSL;
// åñëè òðàëèì è â çîíå óáûòêîâ
if(trlinloss==true)
{
// åñëè íàéäåííîå çíà÷åíèå "ëó÷øå" òåêóùåãî ñòîïëîññà ïîçèöèè, ïåðåíîñèì
if((((new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if(!OrderModify(ticket,OrderOpenPrice(),new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
Print("Íå óäàëîñü ìîäèôèöèðîâàòü îðäåð ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
}
else
{
// åñëè íîâûé ñòîïëîññ íå òîëüêî ëó÷øå ïðåäûäóùåãî, íî è êóðñà îòêðûòèÿ ïîçèöèè
if((((new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss()) || (OrderStopLoss()==0)) && ((new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderOpenPrice()) && (new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if(!OrderModify(ticket,OrderOpenPrice(),new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
Print("Íå óäàëîñü ìîäèôèöèðîâàòü îðäåð ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//| Àâòîð : Êèì Èãîðü Â. 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(SoundSuccess); break;
} else {
err=GetLastError();
if(UseSound) PlaySound(SoundError);
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()));
}
//| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| 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");
}
}
//+----------------------------------------------------------------------------+
//| Îïèñàíèå : Çàêðûòèå ïîçèöèé ïî ðûíî÷íîé öåíå ñíà÷àëà ïðèáûëüíûõ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="",int op=-1,int mn=-1)
{
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)
{
if(OrderProfit()+OrderSwap()>0) ClosePosBySelect();
}
}
}
}
}
// Ïîòîì âñå îñòàëüíûå
k=OrdersTotal();
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();
}
}
}
}
}
//| Îïèñàíèå : Óäàëåíèå îðäåðîâ |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû: |
//| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, |
//| NULL - òåêóùèé ñèìâîë) |
//| op - îïåðàöèÿ (-1 - ëþáîé îðäåð) |
//| mn - MagicNumber (-1 - ëþáîé ìàãèê) |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="",int op=-1,int mn=-1)
{
bool fd;
int err,it,ot;
k=OrdersTotal();
if(sy=="0") sy=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
ot=OrderType();
if(ot>1 && ot<6)
{
if((OrderSymbol()==sy || sy=="") && (op<0 || ot==op))
{
if(mn<0 || OrderMagicNumber()==mn)
{
for(it=1; it<=NumberOfTry; it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) Sleep(5000);
fd=OrderDelete(OrderTicket(),clDelete);
if(fd)
{
if(UseSound) PlaySound(SoundSuccess); break;
} else {
err=GetLastError();
if(UseSound) PlaySound(SoundError);
Print("Error(",err,") delete order ",GetNameOP(ot),": ",ErrorDescription(err),", try ",it);
Sleep(1000*5);
}
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
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
---