//+---------------------------------------------------------------------------0+| //| Ñêàëüï Parabolic.mq4 | //| Ðàçðàáîòàíî äëÿ 39 âûïóñêà æóðíàëà FORTRADER.RU | //| | //| Îïèñàíèå ñòðàòåãèè: http://www.forexsystems.ru/showthread.php?t=5495| //| Îïèñàíèå íåêîòîðûõ ôóíêöèé: http://fxnow.ru/blog/programming_mql4/ | //| Êîíòàêòû: yuriy@fortrader.ru | //+----------------------------------------------------------------------------+| //|4-150 #property copyright "FORTRADER.RU" #property link "http://FORTRADER.RU" //êîíòðîëü âðåìåíè îòêðûòèÿ. extern int timecontrol=0; //1 - âêëþ÷åíî, 0 - âûêëþ÷åíî. extern int starttime = 7; extern int stoptime = 17; //ðàçìåð â ïóíêòàõ ïîñëå êîòîðîãî ñòîï ïåðåíîñèì â áåçóáûòîê extern int BBUSize=0; //ðàçìåð òðåéëèíãà extern int TrailingStop=0; //Íà÷àëüíûé îáüåì ñäåëêè extern int TrailingShag=5; //íàñòðîéêè áûñòðîãî ïàðàáîëèêà extern double stepfast=0.02; extern double maximumfast=0.2; //íàñòðîéêè ìåäëåííîãî ïàðàáîëèêà extern double stepslow=0.005; extern double maximumslow=0.05; //êîëè÷åñòâî áàðîâ äëÿ ïîèñêà ìèíèìóìîâ ìàêñèìóìîâ extern int barsearch=3; //îòñòóï îò ìèíèìóìà/ìàêñèìóìà äëÿ ðàññ÷åòà ñòîïëîññîâ extern int otstup=100; //óðîâåíü âõîäà ïî ôèáîíà÷÷è extern double Ur1=50; //óðîâåíü ïðîôèòà ïî ôèáîíà÷÷è extern double Ur2=161; int nummodb,nummods; int bars; int err1; int start() { //if(err1<0){Print("start() çàâåðøèë ðàáîòó ñ îøèáêîé");return(-1);} if(bars!=Bars && ((timecontrol(starttime,stoptime)!=1 && timecontrol==1) ||timecontrol==0)) {bars=Bars; err1=ScalpParabolicPattern(); } if(TrailingStop>0){err1=TrailingStop();} if(BBUSize>0){err1=BBU();} return(0); } //+------------------------------------------------------------------+ int sarmax,sarmin,countbars,countbarv; int ScalpParabolicPattern() {int err;double op,sl,tp,max,min,Ur50,Ur116; //çàãðóçèì ïàðàáîëèêè double sarslow=iSAR(NULL,0,stepslow ,maximumslow,1); double fastsar=iSAR(NULL,0,stepfast,maximumfast,1); double fastsarlast=iSAR(NULL,0,stepfast,maximumfast,1); if(fastsar>Bid && sarslow<Bid){sarmax=1;} if(sarslow>Bid){sarmax=0;} if(fastsar<Bid && sarslow>Bid){sarmin=1;} if(sarslow<Bid){sarmin=0;} if(sarslow<Bid && fastsar<Bid && sarmax==1 )//åñëè ìåäëåííûé ïàðàáîëèê íàïðàâëåí ââåðõ è ïðîèçîøåë ïðîáîé ïàðàáîëèêà êîòîðûé äâèãàëñÿ âíèç {sarmax=0; min=MaximumMinimum(0,barsearch); //íàéäåì òåêóùèé ìèíèìóì max=High[1]; Ur50 =GetFiboUr(max,min,Ur1/100);//ïîëó÷èì 50% çíà÷åíèå ôèáî Ur116 =GetFiboUr(max,min,Ur2/100); //ïîëó÷èì 116% çíà÷åíèå ôèáî op=Ur50; sl=min-otstup*Point; tp=Ur116; if((Ask-op)<5*Point || (Ask-sl)<5*Point || (tp-Ask)<5*Point){return(0);} err=OrderSend(Symbol(),OP_BUYLIMIT,0.1,NormalizeDouble(op,Digits),3,sl,tp,"FORTRADER.RU",0,0,Red); if(err<0){Print("ScalpParabolicPattern()- Îøèáêà óñòàíîâêè îòëîæåííûõ îðäåðîâ OP_BUYLIMIT. op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);} nummodb=0; } if(sarslow>Bid && fastsar>Bid && sarmin==1 )//åñëè ìåäëåííûé ïàðàáîëèê íàïðàâëåí ââåðõ è ïðîèçîøåë ïðîáîé ïàðàáîëèêà êîòîðûé äâèãàëñÿ âíèç {sarmin=0; max=MaximumMinimum(1,barsearch); //íàéäåì òåêóùèé ìèíèìóì min=Low[1]; Ur50 =GetFiboUr(min,max,Ur1/100);//ïîëó÷èì 50% çíà÷åíèå ôèáî Ur116 =GetFiboUr(min,max,Ur2/100); //ïîëó÷èì 116% çíà÷åíèå ôèáî op=Ur50; sl=max+otstup*Point; tp=Ur116; if((op-Ask)<5*Point || (sl-Ask)<5*Point || (Ask-tp)<5*Point){return(0);} err=OrderSend(Symbol(),OP_SELLLIMIT,0.1,NormalizeDouble(op,Digits),3,sl,tp,"FORTRADER.RU",0,0,Red); if(err<0){Print("ScalpParabolicPattern()- Îøèáêà óñòàíîâêè îòëîæåííûõ îðäåðîâ OP_SELLLIMIT. op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);} nummods=0; } if(fastsar>Bid && ChLimitOrder(1)>0) { err=deletelimitorder(1); } if(fastsar<Bid && ChLimitOrder(0)>0) { err=deletelimitorder(0); } return(0); } int deletelimitorder(int type) {int i;int err; for( i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUYLIMIT && OrderSymbol()==Symbol() && type==1) { err=OrderDelete(OrderTicket()); } if(OrderType()==OP_SELLLIMIT && OrderSymbol()==Symbol() && type==0) { err=OrderDelete(OrderTicket()); } } } return(err); } int ChLimitOrder(int type) {int i; for( i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUYLIMIT && OrderSymbol()==Symbol() && type==1) { return(1); } if(OrderType()==OP_SELLLIMIT && OrderSymbol()==Symbol() && type==0) { return(1); } } } return(0); } double MaximumMinimum(int type,int barsearch) {//îïèñàíèå ôóíêöèè http://fxnow.ru/blog/programming_mql4/3.html int x=0,stop=0;double minmax; if(type==0) { while(stop==0) { minmax =Low[iLowest(NULL,0,MODE_LOW,barsearch,x)]; if(minmax>Low[iLowest(NULL,0,MODE_LOW,barsearch,x+barsearch)]) { minmax =Low[iLowest(NULL,0,MODE_LOW,barsearch,x+barsearch)]; x=x+barsearch; } else {stop=1;return(minmax);} }//while(stop }//if(type if(type==1) { while(stop==0) { minmax =High[iHighest(NULL,0,MODE_HIGH,barsearch,x)]; if(minmax<High[iHighest(NULL,0,MODE_HIGH,barsearch,x+barsearch)]) { minmax =High[iHighest(NULL,0,MODE_HIGH,barsearch,x+barsearch)]; x=x+barsearch; } else{stop=1;return(minmax);} }// while(sto }//if(type return(0); } double GetFiboUr(double high, double low, double ur) {//îïèñàíèå ôóíêöèè http://fxnow.ru/blog/programming_mql4/4.html int digits = MarketInfo(Symbol(),MODE_DIGITS); double Fibo = NormalizeDouble(low + (high - low)*ur, digits); return(Fibo); return(0); } int TrailingStop() {//îïèñàíèå ôóíêöèè http://fxnow.ru/blog/programming_mql4/1.html int i;bool err;double lastbid; for( i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(TrailingStop>0 && OrderType()==OP_BUY && OrderSymbol()==Symbol()) { if(Bid-OrderOpenPrice()>=TrailingStop*Point && TrailingStop>0 && (Bid-Point*TrailingStop)>OrderStopLoss()) { if(((Bid-Point*TrailingStop)-OrderStopLoss())>=TrailingShag*Point) { Print("ÒÐÅÉËÈÌ"); err=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); if(err==false){return(-1);} }//if(Bid>=OrderStopLoss() }//if(Bid-OrderOpenPrice() }//if(BBUSize>0 }//if(OrderSelect(i if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_SELL && OrderSymbol()==Symbol() ) { if(OrderOpenPrice()-Ask>=TrailingStop*Point && TrailingStop>0 && OrderStopLoss()>(Ask+TrailingStop*Point)) { if((OrderStopLoss()-(Ask+TrailingStop*Point))>TrailingShag*Point) { Print("ÒÐÅÉËÈÌ"); err=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Green); if(err==false){return(-1);} }//if(Ask<=OrderStopLoss() }//if(OrderOpenPrice() }//if(BBUSize>0 }// if(OrderSelect }// for( i=1; return(0); } int BBU() {//îïèñàíèå ôóíêöèè http://fxnow.ru/blog/programming_mql4/2.html int i;bool err; for( i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(BBUSize>0 && OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderStopLoss()<OrderOpenPrice()) { if(Bid-OrderOpenPrice()>=BBUSize*Point && BBUSize>0 ) { Print("ÏÎÐÀ  ÁåçóÁûòîê"); err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+1*Point,OrderTakeProfit(),0,Green); if(err==false){return(-1);} }//if(Bid-OrderOpenPrice() }//if(BBUSize>0 }//if(OrderSelect(i if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(BBUSize>0 && OrderType()==OP_SELL && OrderSymbol()==Symbol() && (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0)) { if(OrderOpenPrice()-Ask>=BBUSize*Point && BBUSize>0) { Print("ÏÎÐÀ  ÁåçóÁûòîê"); err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-1*Point,OrderTakeProfit(),0,Green); if(err==false){return(-1);} }//if(OrderOpenPrice() }//if(BBUSize>0 }// if(OrderSelect }// for( i=1; return(0); } int timecontrol(int starttime, int stoptime) {//îïèñàíèå ôóíêöèè http://fxnow.ru/blog/programming_mql4/5.html if (Hour()>=starttime && Hour()<=stoptime) { return(0); } return(1); }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: