Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Profitability Reports
GBP/USD
Oct 2024 - Jan 2025
0.00 %
Total Trades
0
Won Trades
0
Lost trades
0
Win Rate
0.0 %
Expected payoff
0.00
Gross Profit
0.00
Gross Loss
0.00
Total Net Profit
0.00
-100%
-50%
0%
50%
100%
OrderChase_V3
//+------------------------------------------------------------------+
//| OrderChase.mq4 |
//| Roger |
//| http://www.rogersignals.com |
//+------------------------------------------------------------------+
#property copyright "Roger"
#property link "http://www.rogersignals.com/ru/"
//Ýòîò ñîâåòíèê ïðåäíàçíà÷åí äëÿ ïîñëåäîâàòåëüíîãî îòêðûòèÿ îðäåðîâ ïî çàëîæåííîé Âàìè ïðîãðàììå.
//Ïðåäâàðèòåëüíî íåîáõîäèìî ïîäãîòîâèòü êîíôèãóðàöèîííûé ôàéë, â êîòîðîì Âû ðàñïèñûâàåòå ñöåíàðèé îòêðûòèÿ îðäåðîâ.
//Íàçâàíèå ôàéëà - Chase.csv, ëåæèò îí â ïîääèðåêòîðèè \experts\files\ è ìîæåò âûãëÿäåòü ïðèáëèçèòåëüíî òàê:
//1;SELL;0;;1.0;0;1.667;1.6285
//2;BUY;1;TP;2.2;0;1000;650
//3;SELLLIMIT;2;TP;4.0;Bid+500;0;1000
//Ïðîùå âñåãî çàïîëíÿòü ýòîò ôàéë ÷åðåç Excel, íî â ïðèíöèïå âîçìîæíî è ÷åðåç ëþáîé ðåäàêòîð
//Íàçíà÷åíèå êîëîíîê ñëåäóùåå:
//1 - ïîðÿäêîâûé íîìåð, èäåò ñòðîãî îò 1, 2,3 è äî ìàêñèìàëüíîãî;
//2 - òèï îðäåðà (BUY, SELL, BUYLIMIT, SELLLIMIT, BUYSTOP è SELLSTOP), ìîæíî öèôðàìè;
//3 - çàâèñèìîñòü îðäåðà, ò.å. åñëè Âû æåëàåòå, ÷òîáû îðäåð âûñòàâèëñÿ ïîñëå îòêðûòèÿ 1-ãî îðäåðà, ñòàâèòñÿ 1;
//4 - òèï çàâèñèìîñòè, ìîæåò áûòü OP - îòêðûòèå (èìåííî îòêðûòèå, à íå âûñòàâëåíèå) îðäåðà, OR - âûñòàâëåíèå îðäåðà, SL - çàêðûòèå îðäåðà ïî ñòîïó,
//TP - çàêðûòèå îðäåðà ïî òåéêïðîôèòó, CL - ëþáîå çàêðûòèå îðäåðà, CL- è CL+ - çàêðûòèå îðäåðà, ñîîòâåòñòâåííî, â ìèíóñ è â ïëþñ ;
//5 - ðàçìåð ëîòà;
//6 - öåíà îòêðûòèÿ îðäåðà (äëÿ BUY è SELL îðäåðîâ âñåãäà 0, ïîòîìó êàê îòêðîåòñÿ ïî ðûíêó). Äëÿ îòëîæåííûõ îðäåðîâ âîçìîæíî êîñâåííîå çàäàíèå öåíû
// íàïðèìåð, äëÿ BUYLIMIT - ASK-200;
//7 - öåíà ñòîïëîññà çàêðûòèÿ îðäåðà (åñëè ñòàâèòå 0 èëè ïóñòîå ìåñòî, çíà÷èò ñòîïà íå áóäåò). Òàêæå âîçìîæíî çàäàíèå ñòîïà â ïèïñàõ öåëûõ ÷èñëîì;
//8 - öåíà òåéêïðîôèòà çàêðûòèÿ îðäåðà (òî æå).
//Ñîâåòíèê ðàáîòàåò òîëüêî äëÿ îäíîé ïàðû âàëþò, íà ãðàôèê êîòîðîé îí óñòàíîâëåí.
//Åñëè öåíû èëè êîëè÷åñòâî ëîòîâ óñòàíîâëåíî íåïðàâèëüíî, îðäåð íå âûñòàâëÿåòñÿ è âñÿ öåïî÷êà íàðóøàåòñÿ.
//Áóäüòå âíèìàòåëüíû!!!
//Äëÿ çàïóñêà íîâîé öåïî÷êè, íåîáõîäèìî, ÷òîáû âñå îðäåðà, îòêðûòûå ýòèì ñîâåòíèêîì, áûëè çàêðûòû.
//Ïåðâûé îðäåð ìîæíî îòêðûâàòü âðó÷íóþ (â îáùåé íóìåðàöèè îí áóäåò íóëåâûì).
//Åñëè ïðè çàïóñêå òåðìèíàëà íè îäíîãî îðäåðà íå îòêðûòî (íàïðèìåð ïðè ãýïå çà âûõîäíûå çàêðîþòñÿ âñå îðäåðà), öèêë íà÷íåòñÿ ñ ïåðâîãî îðäåðà.
//Âîçìîæíî äîïèñûâàíèå çàäàíèé, íàïðèìåð, ïîñëå îòêðûòèÿ òðåòüåãî îðäåðà äîïèñûâàåòå âåðîÿòíóþ ïîñëåäîâàòåëüíîñòü íà âîçìîæíûå çàêðûòèÿ îðäåðà è
//ïåðåçàïóñêàåòå ñîâåòíèê. Êîãäà ñðàáîòàåò ñëåäóþùèé, äîïèñûâàåòå óæå äëÿ ýòîãî îðäåðà è òàê ïîêà íå íàäîåñò.
//Åñëè óñòàíîâèòü loop=true, öèêë áóäåò ïîâòîðÿòüñÿ ïîñëå çàêðûòèÿ ïîñëåäíåãî îðäåðà äëÿ äàííîãî ñèìâîëà.
//Óñëè óñòàíîâèòü Sound=true, ïðè àñòóïëåíèè êàêîãî-ëèáî ñîáûòèÿ áóäåò âûñêàêèâàòü îêíî ñ îïèñàíèåì ýòîãî ñîáûòèÿ.
extern bool loop=false;
extern bool Sound=false;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int trade[],num[],numfrom[],ortrade[],ortic[],ormag[];
string price[],stopl[],takep[],res[];
double lots[];
int row,flag,flag2,flag3,mag,x,ord;
int init()
{
//----
int handle,maghis,cnt;
string str,typord;
handle=FileOpen("Chase.csv",FILE_CSV|FILE_READ);//îòêðûâàåì ôàéë
if(handle==-1)//à åñòü ëè ýòîò ôàéë âîîáùå
{
Alert("Ôàéë îòñóòñòâóåò!!!");
flag=1;
return(0);
}
if(FileSize(handle)==0)//à íå ïóñòîé ëè îí
{
FileClose(handle);
Alert("Ôàéë ïóñòîé!!!");
flag=1;
return(0);
}
row=0;
while(!FileIsEnding(handle))//íà÷èíàåì ïàðñèòü ñòðîêè
{
str=FileReadString(handle);
if(StrToInteger(str)==0)
{
FileClose(handle);
break;
}
row++;
ArrayResize(num,row);//ðàñøèðÿåì ìàññèâû
ArrayResize(numfrom,row);
ArrayResize(trade,row);
ArrayResize(res,row);
ArrayResize(lots,row);
ArrayResize(price,row);
ArrayResize(stopl,row);
ArrayResize(takep,row);
num[row-1]=StrToInteger(str); //ñ÷èòûâàåì ïîýëåìåíòíî, ñíà÷àëà íîìåð
typord=FileReadString(handle);
if(StrToInteger(typord)==0&&typord!="0")trade[row-1]=ordtoint(typord); else trade[row-1]=StrToInteger(typord);
numfrom[row-1]=StrToInteger(FileReadString(handle));
res[row-1]=FileReadString(handle);
lots[row-1]=StrToDouble(FileReadString(handle));
price[row-1]=FileReadString(handle);
stopl[row-1]=FileReadString(handle);
takep[row-1]=FileReadString(handle);// è ïîñëåäíèé
}
x=OrdersTotal();
ord=0;
if(x>0)for(cnt=0;cnt<x;cnt++)//ñîñòàâëÿåì ìàññèâ îòêðûòûõ îðäåðîâ íà òåðìèíàëå
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol())
{
ord++;
ArrayResize(ortrade,ord);
ArrayResize(ormag,ord);
ArrayResize(ortic,ord);
ortic[ord-1]=OrderTicket();
ormag[ord-1]=OrderMagicNumber();
ortrade[ord-1]=OrderType();
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int i,ii,iii,his,hisend,cnt,magic, flag1, flag11;
string result;
//----
if(flag==1)//åñëè ôàéë áûë ïóñòîé
{
Alert("Çàïîëíèòå ôàéë Chase.csv ñîãëàñíî èíñòðóêöèè è ïåðåçàïóñòèòå ñîâåòíèê!!");
return(0);
}
if(flag2==1)return(0);
if(x==OrdersTotal()&&x!=0)//ïðîâåðÿåì ñðàáàòûâàíèå îòëîæåííûõ
{
for(i=0;i<ord;i++)
{
OrderSelect(ortic[i], SELECT_BY_TICKET);
if(ortrade[i]!=OrderType())//åñëè ñðàáîòàë
{
ortrade[i]=OrderType();
magic=ormag[i];
result="OP";
if(Sound)Alert("Îòëîæåííûé îðäåð ñðàáîòàë!");
flag1=1;
break;
}
}
}
if(x>OrdersTotal())//ïðîâåðÿåì, êàêèå îðäåðà çàêðûëèñü è ñ êàêèì ðåçóëüòàòîì
{
cnt=x-OrdersTotal();
int nn;
for(i=OrdersHistoryTotal()-1;i>OrdersHistoryTotal()-cnt-1;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
int mag1[],kol;
string res1[];
for(ii=0;ii<ord;ii++)
{
if(ormag[ii]==OrderMagicNumber()&&Symbol()==OrderSymbol())
{
kol++;
ArrayResize(res1,kol);
ArrayResize(mag1,kol);
mag1[kol-1]=ormag[ii];
nn=ii;
result="CL";
for(iii=0;iii<row;iii++)
{
if(num[iii]==mag1[kol-1])
{
if((OrderClosePrice()>=OrderOpenPrice()&&OrderType()==0)||(OrderClosePrice()<=OrderOpenPrice()&&OrderType()==1))res1[kol-1]="CL+";
if((OrderClosePrice()>=OrderTakeProfit()&&OrderTakeProfit()!=0&&OrderType()==0)||(OrderClosePrice()<=OrderTakeProfit()&&OrderType()==1))res1[kol-1]="TP";
if((OrderClosePrice()<OrderOpenPrice()&&OrderType()==0)||(OrderClosePrice()>OrderOpenPrice()&&OrderType()==1))res1[kol-1]="CL-";
if((OrderClosePrice()<=OrderStopLoss()&&OrderType()==0)||(OrderClosePrice()>=OrderStopLoss()&&OrderStopLoss()!=0&&OrderType()==1))res1[kol-1]="SL";
//break;
}
}
if(Sound)Alert("Îðäåð çàðêðûëñÿ ñ êîäîì çàâåðøåíèÿ - ",res1[kol-1]);
if(nn>=0)//èçìåíÿåì ìàññèâ îðäåðîâ
{
while(nn<ord)
{
if(ortic[nn+1]!=0)
{
ortic[nn]=ortic[nn+1];
ormag[nn]=ormag[nn+1];
ortrade[nn]=ortrade[nn+1];
ortic[nn+1]=0;
ormag[nn+1]=0;
ortrade[nn+1]=0;
}
else break;
nn++;
}
}
ord--;
ArrayResize(ortrade,ord);
ArrayResize(ormag,ord);
ArrayResize(ortic,ord);
}
}
}
flag11=1;
x=OrdersTotal();
}
if(x<OrdersTotal())//äîáàâëåì íîâûå îðäåðà ê ìàññèâó
{
cnt=OrdersTotal()-x;
for(i=OrdersTotal()-1;i>OrdersTotal()-1-cnt;i--)
{
OrderSelect(i, SELECT_BY_POS);
if(Symbol()==OrderSymbol())
{
ord++;
ArrayResize(ortrade,ord);
ArrayResize(ormag,ord);
ArrayResize(ortic,ord);
ArrayResize(res1,ord);
ArrayResize(mag1,ord);
ortic[ord-1]=OrderTicket();
ormag[ord-1]=OrderMagicNumber();
mag1[ord-1]=OrderMagicNumber();
res1[ord-1]="OR";
ortrade[ord-1]=OrderType();
}
}
kol=ord;
flag11=1;
x=OrdersTotal();
}
if(flag1==1)//åñëè óñëîâèÿ íàñòóïèëè îòêðûâàåì îðäåðà èç ñïèñêà
{
for(iii=0;iii<row;iii++)
{
if(numfrom[iii]==magic)
{
if(StringFind(result,res[iii])!=-1)
{
flag2=OpenOrders(trade[iii],lots[iii],price[iii],stopl[iii],takep[iii],num[iii]);
if(flag2==1)
{
Alert("Îøèáêà îòêðûòèÿ îðäåðà! Âñÿ öåïî÷êà íàðóøåíà! Ïåðåïðîâåðüòå ôàéë êîíôèãóðàöèè!!");
return(0);
}
}
}
}
return(0);
}
if(flag11==1)//åñëè óñëîâèÿ íàñòóïèëè îòêðûâàåì îðäåðà èç ñïèñêà
{
for(i=0;i<kol;i++)
{
for(iii=0;iii<row;iii++)
{
if(numfrom[iii]==mag1[i])
{
if((StringFind(res1[i],res[iii])!=-1&&res1[i]!="OR")||(res[iii]=="CL"&&res1[i]!="OP"&&res1[i]!="OR")||(res[iii]=="CL+"&&res1[i]=="TP")||(res[iii]=="CL-"&&res1[i]=="SL"))
{
flag2=OpenOrders(trade[iii],lots[iii],price[iii],stopl[iii],takep[iii],num[iii]);
if(flag2==1)
{
Alert("Îøèáêà îòêðûòèÿ îðäåðà! Âñÿ öåïî÷êà íàðóøåíà! Ïåðåïðîâåðüòå ôàéë êîíôèãóðàöèè!!");
return(0);
}
}
if(StringFind(res1[i],res[iii])!=-1&&res1[i]=="OR")
{
res1[i]="NO";
flag2=OpenOrders(trade[iii],lots[iii],price[iii],stopl[iii],takep[iii],num[iii]);
if(flag2==1)
{
Alert("Îøèáêà îòêðûòèÿ îðäåðà! Âñÿ öåïî÷êà íàðóøåíà! Ïåðåïðîâåðüòå ôàéë êîíôèãóðàöèè!!");
return(0);
}
}
}
}
}
return(0);
}
if(ord==0&&(flag3==0||loop))flag2=OpenOrders(trade[0],lots[0],price[0],stopl[0],takep[0],1);//åñëè îòêðûòûõ îðäåðîâ íåò, çàïóñêàåì ïåðâûé
flag3=1;
if(flag2==1)
{
Alert("Îøèáêà îòêðûòèÿ îðäåðà! Âñÿ öåïî÷êà íàðóøåíà! Ïåðåïðîâåðüòå ôàéë êîíôèãóðàöèè!!");
return(0);
}
return(0);
}
//+------------------------------------------------------------------+
int OpenOrders(int trad, double lot, string pr, string sl, string tp, int magc)//ôóíêöèÿ îòêðûòèÿ îðäåðîâ
{
double stop,take,prc;
int cnt,ticket,err;
if(StrToDouble(pr)!=0)prc= NormalizeDouble(StrToDouble(pr),Digits);
else
{
if(StringSubstr(StringLower(pr),0,3)=="ask")
{
if(StringSubstr(pr,3,1)=="+")prc=Ask+StrToInteger(StringSubstr(pr,4))*Point;
else prc=Ask-StrToInteger(StringSubstr(pr,4))*Point;
}
if(StringSubstr(StringLower(pr),0,3)=="bid")
{
if(StringSubstr(pr,3,1)=="+")prc=Bid+StrToInteger(StringSubstr(pr,4))*Point;
else prc=Bid-StrToInteger(StringSubstr(pr,4))*Point;
}
}
if(trad==0)prc=Ask;
if(trad==1)prc=Bid;
if(MathFloor(StrToDouble(sl))==StrToInteger(sl))
{
if(MathMod(trad,2)==0)stop=prc-StrToInteger(sl)*Point;
else stop=prc+StrToInteger(sl)*Point;
}
else stop= NormalizeDouble(StrToDouble(sl),Point);
if(StrToDouble(sl)==0)stop=0;
if(MathFloor(StrToDouble(tp))==StrToInteger(tp))
{
if(MathMod(trad,2)==0)take=prc+StrToInteger(tp)*Point;
else take=prc-StrToInteger(tp)*Point;
}
else take= NormalizeDouble(StrToDouble(tp),Point);
if(StrToDouble(tp)==0)take=0;
//Print("SL - ",stop," TP - ",take);
if(trad==0)//áàé îðäåð
{
if((take==0||take-Bid>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)&&Bid-stop>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
for(cnt=0;cnt<5;cnt++)
{
RefreshRates();
ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,50,stop,take,"",magc,0,CLR_NONE);
if(ticket<0)
{
err=GetLastError();
Print("Îøèáêà - ",err);
if(StrToInteger(err)<135||StrToInteger(err)>141)return(1);
}
else
{
return(0);
}
}
}
else
{
Print("Îðäåð Buy íå óñòàíîâëåí - íåïðàâèëüíî çàäàíû óðîâíè ñòîïîâ èëè òåéêîâ! ");
return(1);
}
}
if(trad==1)//sell îðäåð
{
if((stop==0||stop-Ask>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)&&Ask-take>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
for(cnt=0;cnt<5;cnt++)
{
RefreshRates();
ticket=OrderSend(Symbol(),OP_SELL,lot,Bid,50,stop,take,"",magc,0,CLR_NONE);
if(ticket<0)
{
err=GetLastError();
Print("Îøèáêà - ",err);
if(StrToInteger(err)<135||StrToInteger(err)>141)return(1);
}
else
{
return(0);
}
}
}
else
{
Print("Îðäåð Sell íå óñòàíîâëåí - íåïðàâèëüíî çàäàíû óðîâíè ñòîïîâ èëè òåéêîâ! ");
return(1);
}
}
if(trad==2)//áàéëèìèò îðäåð
{
if((take==0||take-prc>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)&&prc-stop>(MarketInfo(Symbol(),MODE_SPREAD)+MarketInfo(Symbol(),MODE_STOPLEVEL))*Point
&&Ask-prc>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
for(cnt=0;cnt<5;cnt++)
{
RefreshRates();
ticket=OrderSend(Symbol(),OP_BUYLIMIT,lot,prc,50,stop,take,"",magc,0,CLR_NONE);
if(ticket<0)
{
err=GetLastError();
Print("Îøèáêà - ",err);
if(StrToInteger(err)<135||StrToInteger(err)>141)return(1);
}
else
{
return(0);
}
}
}
else
{
Print("Îðäåð BuyLimit íå óñòàíîâëåí - íåïðàâèëüíî çàäàíû óðîâíè öåí, ñòîïîâ èëè òåéêîâ! ");
return(1);
}
}
if(trad==3)//selllimit îðäåð
{
if((stop==0||stop-prc>(MarketInfo(Symbol(),MODE_SPREAD)+MarketInfo(Symbol(),MODE_STOPLEVEL))*Point)&&prc-take>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point
&&prc-Bid>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
for(cnt=0;cnt<5;cnt++)
{
RefreshRates();
ticket=OrderSend(Symbol(),OP_SELLLIMIT,lot,prc,50,stop,take,"",magc,0,CLR_NONE);
if(ticket<0)
{
err=GetLastError();
Print("Îøèáêà - ",err);
if(StrToInteger(err)<135||StrToInteger(err)>141)return(1);
}
else
{
return(0);
}
}
}
else
{
Print("Îðäåð SellLimit íå óñòàíîâëåí - íåïðàâèëüíî çàäàíû óðîâíè öåí, ñòîïîâ èëè òåéêîâ! ");
return(1);
}
}
if(trad==4)//áàéñòîï îðäåð
{
if((take==0||take-prc>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)&&prc-stop>(MarketInfo(Symbol(),MODE_SPREAD)+MarketInfo(Symbol(),MODE_STOPLEVEL))*Point
&&prc-Ask>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
for(cnt=0;cnt<5;cnt++)
{
RefreshRates();
ticket=OrderSend(Symbol(),OP_BUYSTOP,lot,prc,50,stop,take,"",magc,0,CLR_NONE);
if(ticket<0)
{
err=GetLastError();
Print("Îøèáêà - ",err);
if(StrToInteger(err)<135||StrToInteger(err)>141)return(1);
}
else
{
return(0);
}
}
}
else
{
Print("Îðäåð BuyStop íå óñòàíîâëåí - íåïðàâèëüíî çàäàíû óðîâíè öåí, ñòîïîâ èëè òåéêîâ! ");
return(1);
}
}
if(trad==5)//sellstop îðäåð
{
if((stop==0||stop-prc>(MarketInfo(Symbol(),MODE_SPREAD)+MarketInfo(Symbol(),MODE_STOPLEVEL))*Point)&&prc-take>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point
&&Bid-prc>MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
for(cnt=0;cnt<5;cnt++)
{
RefreshRates();
ticket=OrderSend(Symbol(),OP_SELLSTOP,lot,prc,50,stop,take,"",magc,0,CLR_NONE);
if(ticket<0)
{
err=GetLastError();
Print("Îøèáêà - ",err);
if(StrToInteger(err)<135||StrToInteger(err)>141)return(1);
}
else
{
return(0);
}
}
}
else
{
Print("Îðäåð SellStop íå óñòàíîâëåí - íåïðàâèëüíî çàäàíû óðîâíè öåí, ñòîïîâ èëè òåéêîâ! ");
return(1);
}
}
}
int ordtoint(string tip)//ïåðåâîäèì ñäåëêè íà ÿçûê ÌÒ
{
int type=6;
tip=StringLower(tip);
if(tip=="buy")type=0;
if(tip=="sell")type=1;
if(tip=="buy-limit"||tip=="buy limit"||tip=="buylimit")type=2;
if(tip=="sell-limit"||tip=="sell limit"||tip=="selllimit")type=3;
if(tip=="buy-stop"||tip=="buy stop"||tip=="buystop")type=4;
if(tip=="sell-stop"||tip=="sell stop"||tip=="sellstop")type=5;
return(type);
}
string StringLower(string s) {//ïåðåâîäèì âñå â íèæíèé ðåãèñòð
int c, i, k=StringLen(s), n;
for (i=0; i<k; i++) {
n=0;
c=StringGetChar(s, i);
if (c>64 && c<91) n=c+32; // A-Z -> a-z
if (n>0) s=StringSetChar(s, i, n);
}
return(s);
}
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
---