//+------------------------------------------------------------------+ //| FrBestExp02_7.mq4 | //| | //| _7 íàêëîí ÌÀ 2 ÒÔ | //+------------------------------------------------------------------+ #property copyright "" #property link "" extern double Lots = 1.00; extern int Stop_Loss = 1000; extern int Take_Profit = 1000; extern int Trailing_Stop = 0; extern int map=25; extern int mash=1; extern int map2=5; extern int mash2=1; // Only for M15 //extern int Vlim=50; extern int fper=12,sper=26,sigper=9;// ïåðèîäû èíäèêàòîðà OsMA extern int stop=300;// Óðîâåíü îòñå÷êè ïðîôèòà extern int hedg=1;// ôëàã ðàçðåøåíèÿ õåäæà extern double kh=10;// êîýôô.õåäæèðîâàíèÿ extern int lok;// ôëàã ðàçðåøåíèÿ ëîêèðîâàíèÿ ïîçèöèè extern int rpr=1;// ôëàã îïðåäåëåíèÿ ïðîñàäêè ïîçû èëè ïî âñåìó òåñòó extern int ttime=900;// Çàäåðæêà âûñòàâëåíèÿ õåäæ-îðäåðà íà 1 ñâå÷ó extern int hstop=-3000;// ñòîï-ëîññ äëÿ õåäæà int cnt;// èíäåêñ öèêëà int sigs,sigb;// ñóììèðóþùèé ñèãíàë íà ïðîâåäåíèå îïåðàöèè êóïëè-ïðîäàæè double ssig,bsig;// ñèãíàëû íà êóïëþ-ïðîäàæó îò èíäèêàòîðà ôðàêòàëîâ double osmanul,osmaone;// ñèãíàëû èíäèêàòîðà OsMA îò íóëåâîãî è ïåðâîãî áàðîâ int s,b;// êîëè÷åñòâî àêòèâíûõ ñýëë è áàé îðäåðîâ int hml;// ôëàã çàêðûòèÿ ïîçèöèè ñ ìèíóñîâûì ïðîôèòîì (çàêðûâàåòñÿ ïîçèöèÿ ñ ìåíüøèì ëîòîì int pl;// ôëàã çàêðûòèÿ âñåõ ïîçèöèé ïî óñëîâèþ íàëè÷èÿ óñòàíîâëåííîãî ïîëîæèòåëüíîãî ïðîôèòà double summa;// ñóììàðíûé ïðîôèò ïî âñåì ïîçèöèÿì double mlot;// âåëè÷èíà òîðãóåìîãî ëîòà double ssum,bsum;// ïðîôèò ïî îðäåðàì ñýëë è áàé ðàçäåëüíî double pr;// âåëè÷èíãà ïðîñàäêè int hblok,shblok,bhblok;// ôëàã áëîêèðîâàíèÿ âûñòàâëåíèÿ õåäæ-îðäåðà è ôëàãè ïîâòîðíîãî çàïóñêà õåäæ-ïðîöåäóðû double DHMax,DLMin; bool ft=true; int rang; double pt; int nul;// ïåðåìåííûå äëÿ âû÷èñëåíèÿ ïîâîðîòíîé òî÷êè ïðè çàïóñêå è â 00.00 êàæäûõ ñóòîê int LastTradeTime; //--------------------------------------------------------------------------------------------------------------- //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start(){ mlot=Lots; // îïðåäåëåíèå âåëè÷èíû ðàáî÷åãî ëîòà //--------------------------------------------Âû÷èñëåíèÿïîâîðîòíîé òî÷êè------------------------------------------ if ((Hour()==0 && Minute()==0) || ft){//íà÷àëèñü ñóòêè èëè ïåðâûé çàïóñê DHMax=0; DLMin=1000; if(ft){// ïåðâûé çàïóñê rang=MathRound((Hour()*60+Minute())/Period()); nul=rang; } else{ nul=96;//çà ñóòêè íà 15 rang=1; } for(cnt=rang;cnt<=rang+95;cnt++){//ïîèñê ìàêñ è ìèí çà ïîñëåäíèå ñóòêè if(DHMax<High[cnt])DHMax=High[cnt]; if(DLMin>Low[cnt])DLMin=Low[cnt]; } pt=(DHMax+DLMin+Close[nul])/3;//ïîâîðîòíàÿ òî÷êà ft=false; } //---------------------------------------------------------------------------------------------------------------- if(CurTime()-LastTradeTime<20)return(0); //----------------------------Îïðåäåëåíèÿ îáùåãî è ïîçèöèîííîãî ïðîôèòà, à òàêæåïîäñ÷¸ò ïîçèöèé------------------- s=0;b=0;summa=0;bsum=0;ssum=0; for(cnt=0;cnt<OrdersTotal();cnt++){ OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderType()==OP_SELL){ ssum=ssum+OrderProfit(); s=s+1; } if(OrderSymbol()==Symbol() && OrderType()==OP_BUY){ bsum=bsum+OrderProfit(); b=b+1; } } summa=bsum+ssum;summa=MathRound(summa); //------------------------------------------------------Òðåéëèíã-Ñòîï--------------------------------------------- if(Trailing_Stop>0 && hedg==1){ for(cnt=0;cnt<OrdersTotal();cnt++){ OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderProfit()>0){ if(Bid-OrderOpenPrice()>Point*Trailing_Stop){ if(OrderStopLoss()<Bid-Point*Trailing_Stop){ OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing_Stop,OrderTakeProfit(),0,Red); return(0); } } if(OrderOpenPrice()-Ask>Point*Trailing_Stop){ if(OrderStopLoss()>Ask+Point*Trailing_Stop){ OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*Trailing_Stop,OrderTakeProfit(),0,Red); return(0); } } } } } //---------------------------------------------------Âûñòàâëåíèå õåäæ-îðäåðà-------------------------------------- if(hblok==1){ shblok=0;bhblok=0; for(cnt=0;cnt<OrdersTotal();cnt++){ OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderLots()==mlot*kh)shblok=1; if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderLots()==mlot*kh)bhblok=1; } } if(shblok==1 && bhblok==1)hblok=1; if(shblok==0 && bhblok==0)hblok=0; //if s+b=0 then hblok=0; if((s+b<=2 && (lok==1 || lok==0)) && hedg==1 && hblok==0){ if(CurTime()-LastTradeTime<ttime)return(0); if(ssum>=150 || bsum<-300){ OrderSend(Symbol(),OP_SELL,kh*mlot,Bid,5,Bid+Stop_Loss*Point,Bid-Take_Profit*Point,NULL,0,0,Aqua); //SetArrow(Time[0],H+5*Point,159,Aqua); hblok=1; return(0); } if(bsum>=150 || ssum<-300){ OrderSend(Symbol(),OP_BUY,kh*mlot,Ask,5,Ask-Stop_Loss*Point,Ask+Take_Profit*Point,NULL,0,0,Red); //SetArrow(Time[0],L-5*Point,159,Red); hblok=1; return(0); } } //------------------------------------------Âû÷èñëåíèå ïðîñàäêè â ïðîöåññå òîðãîâ------------------------------ if(s+b==0 && rpr==0)pr=0; if(pr>summa && summa<0)pr=MathRound(summa); //-----------------------------------Îïðåäåëåíèå îñíîâíîãî ñèãíàëà è ñèãíàëîâ èíäèêàòîðîâ------------------------ bsig=iCustom(NULL,0,"FractalBest",0,0); ssig=iCustom(NULL,0,"FractalBest",1,0); // bsig=0; // ssig=0; osmanul=iOsMA(NULL,0,fper,sper,sigper,PRICE_CLOSE,0); osmaone=iOsMA(NULL,0,fper,sper,sigper,PRICE_CLOSE,1); double ma1=iMA(NULL,60,map,0,0,0,0); double ma2=iMA(NULL,60,map,0,0,0,mash); double ma12=iMA(NULL,1440,map2,0,0,0,0); double ma22=iMA(NULL,1440,map2,0,0,0,mash2); if(ssig>1 && ma1>ma2 && ma12>ma22 && Volume[1]>Volume[2] && osmaone>osmanul && osmaone<=0 && osmanul<0 && Close[0]>pt){ sigs=1; } else{ sigs=0; } if(bsig>1 && ma1<ma2 && ma12<ma22 && Volume[1]>Volume[2] && osmaone<osmanul && osmaone>=0 && osmanul>0 && Close[0]<pt){ sigb=1; } else{ sigb=0; } /* //--------------------------------------------Âûâîä äàìïà ðàáîòû ýêñïåðòà â æóðíàë--------------------------------- Print("Data: ",Year(),".",Month(),".",Day()," Time ",Hour(),":",Minute()," 1Tik=",Volume[2]," 0Tiks=",Volume[1]," PT=",pt, " Price=",Close[0]," BSig=",MathRound(bsig)," SSig=",MathRound(ssig)," SSum=",MathRound(ssum)," BSum=",MathRound(bsum), " Prosadka=",pr," HBlok=",hblok); //---------------------------------Îïðåäåëåíå ìîäåëè çàêðûòèÿ îðäåðîâ ïî ïðîôèòó----------------------------------- */ if(s+b<=1){ hml=0;pl=0; } if(summa>=stop*mlot && s+b==1 && Trailing_Stop==0)pl=1; if(summa>2*stop && s+b==2 && lok==0 && Trailing_Stop==0)pl=1; if(summa>=3*stop*mlot && s+b==3 && lok==1 && Trailing_Stop==0)pl=1; if(Trailing_Stop>0)pl=0; if(Trailing_Stop>0 && (ssum<hstop || bsum<hstop))pl=1; // ñòîï äëÿ íåóäà÷íîãî õåäæà if(Trailing_Stop>0 && ((ssum<-300 && bsum>300) || (ssum>300 && bsum<-300)) && s+b>=2 && hedg==1 && pl==0)hml=1; // Óäàëåíèå ìåëêîé ïîçèöèè ñ îòðèöàòåëüíûì ïðîôèòîâ ïîñëå óäà÷íîãî çàïóñêà õåäæà //------------------------------Óäàëåíèå õåäæèðóåìîãî îðäåðà ïðè ïîëó÷åíèè çàäàííîãî ïðîôèòà----------------------- if(hml==1){ for(cnt=OrdersTotal()-1;cnt>=0;cnt--){ OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && ssum<-2*stop && NormalizeDouble(OrderLots(),1)==NormalizeDouble(1.0*mlot,1)){ OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); //return(0); } if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && bsum<-2*stop && NormalizeDouble(OrderLots(),1)==NormalizeDouble(1.0*mlot,1)){ OrderClose(OrderTicket(),OrderLots(),Bid,3,Red); //return(0); } } return(0); } //---------------------------Çàêðûòèå âñåõ îòêðûòûõ íà ïàðå îðäåðîâ ïðè äîñòèæåíèè çàäàííîãî ïðîôèòà if(pl==1){ for(cnt=OrdersTotal()-1;cnt>=0;cnt--){ OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol() && OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); //return(0); } if(OrderSymbol()==Symbol() && OrderType()==OP_BUY){ OrderClose(OrderTicket(),OrderLots(),Bid,3,Red); //return(0); } } return(0); } //------------------------------------------Âûñòàâëåíèå îñíîâíûõ è ëîêèðóþùèõ îðäåðîâ------------------------------ if(s+b<=1){ if((sigs==1 && s+b==0) || (bsum<-150 && lok==1)){ OrderSend(Symbol(),OP_SELL,mlot,Bid,5,Bid+Stop_Loss*Point,Bid-Take_Profit*Point,NULL,0,0,Lime); //SetArrow(Time[0],H+5*Point,242,Lime); return(0); } if((sigb==1 && s+b==0) || (ssum<-150 && lok==1)){ OrderSend(Symbol(),OP_BUY,mlot,Ask,5,Ask-Stop_Loss*Point,Ask+Take_Profit*Point,NULL,0,0,Gold); //SetArrow(Time[0],L-5*Point,241,Gold); return(0); } } /* */ //----------------------------------------------------------The END------------------------------------------------- return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains close prices for each bar
Series array that contains tick volumes of each bar
Indicator Curves created:
Indicators Used:
Moving Average of Oscillator
Moving average indicator
Custom Indicators Used:
FractalBest
Order Management characteristics:
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy
It automatically opens orders when conditions are reached
It Closes Orders by itself
Other Features: