//+------------------------------------------------------------------+ //| FT_FOZZI_RSI+MA+BB.mq4.mq4 //| Copyright © 2009, FORTRADER.RU. Советник по стратегии FOZZI. //| http://www.fortrader.ru | http://forexsystems.ru/sistemy-ozhidayuschie-realizacii/10910-foezzi.html | Исследование для 55 выпуска журнала FORTRADER.RU //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, FORTRADER.RU. Советник по стратегии FOZZI." #property link "http://www.fortrader.ru | http://forexsystems.ru/sistemy-ozhidayuschie-realizacii/10910-foezzi.html | Исследование для 55 выпуска журнала FORTRADER.RU" extern int maper=8; extern int rsiperiod=8; extern int bbperiod=20; extern int bbotcl=2; extern int SL =5; extern int TP =0; extern int MG=564651; extern double Lots=0.1; extern int mn=1; extern int bbur=45; extern int trailingenable=1; int f1,f2; double opb,ops; int start() {int i; double op,sl,tp;int err1; if(trailingenable==1){TrailingStop();} double rsi[101]; double irsi; ArraySetAsSeries(rsi,true); for( i=100; i>=0; i--) { rsi[i]=iRSI(NULL,0,rsiperiod,PRICE_CLOSE,i); if(i==1){irsi=rsi[i];} } double ma[101]; double ima; ArraySetAsSeries(ma,true); for( i=100; i>=0; i--) { ma[i]=iMAOnArray(rsi,0,maper,0,MODE_SMA,i); if(i==1){ima=ma[i];} } double bbmain =iBandsOnArray(ma,0,bbperiod,bbotcl,0,MODE_MAIN,1); double pma =iMAOnArray(rsi,0,maper,0,MODE_SMA,1); double prsi =iRSI(NULL,0,rsiperiod,PRICE_CLOSE,1); if(prsi>pma){f1=1;} if(f1==1 && prsibbmain && ChPos(0)==0) {f1=0; _OrderClose(1); op=Bid;if(SL>0){sl=MaximumMinimum(1,SL);}if(TP>0){tp=Bid-TP*Point*mn;} opb=op; err1=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"8 FORTRADER.RU",MG,0,Red); if(err1<0){Print("OrderSend()- Ошибка OP_SELL. op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);} } if(Bid<(opb-bbur*Point*mn)){_StopToBB(0);} if(prsipma && pma0){sl=MaximumMinimum(0,SL);}if(TP>0){tp=Ask+TP*Point*mn;} ops=op; err1=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"8 FORTRADER.RU",MG,0,Red); if(err1<0){Print("OrderSend()- Ошибка OP_BUY. op "+op+" sl "+sl+" tp "+tp+" "+GetLastError());return(-1);} } if(Ask>(ops+bbur*Point*mn)){_StopToBB(1);} Print("bbmain "+bbmain+" pma "+pma+" prsi "+prsi); return(0); } double _StopToBB(int type) { int err; for(int i=1; i<=OrdersTotal(); i++) { if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==1 && OrderMagicNumber()==MG && OrderStopLoss()OrderOpenPrice()) { err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green); if(err<0){Print("_StopToBB()- Ошибка OrderModify. OrderTicket "+OrderTicket()+" OrderLots() "+OrderLots()+" Bid "+Bid+" "+GetLastError());return(-1);} } } } return(0); } //проверяет есть ли открытые ордера int ChPos(int type) {//подробное описание: http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=100 int i;int col; for( i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==1&& OrderMagicNumber()==MG){col=1;} if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==0&& OrderMagicNumber()==MG){col=1;} } } return(col); } double MaximumMinimum(int type,int barsearch) { 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(minmax0 && OrderType()==OP_BUY && OrderSymbol()==Symbol()) { if(Bid-OrderOpenPrice()>=TrailingStop*Point*mn && TrailingStop>0 && (Bid-Point*TrailingStop*mn)>OrderStopLoss()) { if(((Bid-Point*TrailingStop*mn)-OrderStopLoss())>=TrailingStep*Point*mn) { Print("ТРЕЙЛИМ"); err=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop*mn,OrderTakeProfit(),0,Green); if(err==false){return(-1);} GlobalVariableSet(DoubleToStr(OrderTicket(),0),Bid); }//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*mn && TrailingStop>0 && OrderStopLoss()>(Ask+TrailingStop*Point*mn)) { if((OrderStopLoss()-(Ask+TrailingStop*Point*mn))>TrailingStep*Point*mn) { Print("ТРЕЙЛИМ"); err=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point*mn,OrderTakeProfit(),0,Green); if(err==false){return(-1);} }//if(Ask<=OrderStopLoss() }//if(OrderOpenPrice() }//if(BBUSize>0 }// if(OrderSelect }// for( i=1; return(0); } //Закрывает позицю по типу int _OrderClose(int type) {//http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=99 int err; for(int i=1; i<=OrdersTotal(); i++) { if (OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==1 && OrderMagicNumber()==MG) { err=OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); if(err<0){Print("OrderClose()- Ошибка закрытия OP_BUY. OrderTicket "+OrderTicket()+" OrderLots() "+OrderLots()+" Bid "+Bid+" "+GetLastError());return(-1);} } if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==0 && OrderMagicNumber()==MG) { err=OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); if(err<0){Print("OrderClose()- Ошибка закрытия OP_SELL. OrderTicket "+OrderTicket()+" OrderLots() "+OrderLots()+" Ask "+Ask+" "+GetLastError());return(-1);} } } } return(0); }