//+------------------------------------------------------------------+ //| e-Droba-ZigZag.mq4 | //| Copyright © 2010, Michelangelo® | //| www.fxgeneral.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, Michelangelo®" #property link "www.fxgeneral.com" #define MAGICMA 20100930 extern int ExtDepth = 12; extern int ExtDeviation = 5; extern int ExtBackstep = 3; extern int _point = 0; extern double _lots = 0.01; extern int _takeProfit = 70; extern int _stopLoss = 80; extern int BBUSize = 30; //размер в пунктах после которого стоп переносим в безубыток extern int BBUSizepip = 10; //безубыток в пунктах extern bool TrailingStopFr = true; //если= false, то трейлинг по фракталам отключен double _lastExtremum=0.0; double _currentExtremum=0.0; double _previousExtremum=0.0; int _extType=-1; double _workLots=0.0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int err1; int start() { int ticket=0; double _sl=0.0, _tp=0.0; double _price=0.0; if (TrailingStopFr) TrailingStop(); if(BBUSize>0){err1=BBU();} //---- if (Volume[0]>1) return; _lastExtremum=GetExtremumZZPrice(1); Comment (_lastExtremum); if (Close[0]<_lastExtremum){ if (_extType!=OP_BUYSTOP){ _CheckOrder(OP_BUYSTOP); _price=NormalizeDouble((_lastExtremum+_point*Point),Digits); if (_stopLoss>0) _sl=NormalizeDouble(_price-_stopLoss*Point,Digits); if (_takeProfit>0) _tp=NormalizeDouble(_price+_takeProfit*Point,Digits); _extType=OP_BUYSTOP; ticket=OrderSend(Symbol(),_extType,_lots,_price,5,_sl,_tp,0,MAGICMA,0,0); } } if (Close[0]>_lastExtremum){ if (_extType!=OP_SELLSTOP){ _CheckOrder(OP_SELLSTOP); _price=NormalizeDouble((_lastExtremum-_point*Point),Digits); if (_stopLoss>0) _sl=NormalizeDouble(_price+_stopLoss*Point,Digits); if (_takeProfit>0) _tp=NormalizeDouble(_price-_takeProfit*Point,Digits); _extType=OP_SELLSTOP; ticket=OrderSend(Symbol(),_extType,_lots,_price,5,_sl,_tp,0,MAGICMA,0,0); } } //---- return(0); } //+------------------------------------------------------------------+ double GetExtremumZZPrice(int ne=0) { double zz; int i, k=iBars(Symbol(), 0), ke=0; for (i=1; i<k; i++) { zz=iCustom(Symbol(),0, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep,0,i); if (zz!=0) { ke++; if (ke>ne) return(zz); } } return(0); } //+------------------------------------------------------------------+ int _CheckOrder(int _checkType=0){ int i; if (OrdersTotal()>0){ for (i=0; i<=OrdersTotal()-1; i++){ if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if (OrderType()==_checkType && OrderMagicNumber()==MAGICMA) OrderDelete(OrderTicket()); } } } 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() && OrderMagicNumber()==MAGICMA && OrderStopLoss()<OrderOpenPrice()) { if(Bid-OrderOpenPrice()>=BBUSize*Point && BBUSize>0 ) { Print("ПОРА В БезуБыток"); err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BBUSizepip*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() && OrderMagicNumber()==MAGICMA && (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0)) { if(OrderOpenPrice()-Ask>=BBUSize*Point && BBUSize>0) { Print("ПОРА В БезуБыток"); err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BBUSizepip*Point,OrderTakeProfit(),0,Green); if(err==false){return(-1);} }//if(OrderOpenPrice() }//if(BBUSize>0 }// if(OrderSelect }// for( i=1; return(0); } //+------------------------------------------------------------------------------+ //| TrailingStop | //| Copyright © 2010, Хлыстов Владимир | //| cmillion@narod.ru | //+------------------------------------------------------------------------------+ void TrailingStop() { int tip,Ticket; bool error; double StLo,OSL,OOP; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { tip = OrderType(); if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { OSL = OrderStopLoss(); OOP = OrderOpenPrice(); Ticket = OrderTicket(); if (tip==OP_BUY) { StLo = NormalizeDouble(SlLastBar(1,Bid),Digits); if (StLo==0) continue; if (StLo < OOP) continue; if (StLo > OSL) { error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,DeepPink); if (!error) Print("Error order ",Ticket," TrailingStop ",GetLastError()," ",Symbol()," SL ",StLo); else Print("TrailingStopFR ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES)); } } if (tip==OP_SELL) { StLo = NormalizeDouble(SlLastBar(-1,Ask),Digits); if (StLo==0) continue; if (StLo > OOP) continue; if (StLo < OSL || OSL==0 ) { error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,DeepPink); if (!error) Print("Error order ",Ticket," TrailingStop ",GetLastError()," ",Symbol()," SL ",StLo); else Print("TrailingStopFR "+Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES)); } } } } } } //-------------------------------------------------------------------- double SlLastBar(int tip,double price) { double fr; int i; int STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL); if (tip== 1) { for (i=2; i<100; i++) { fr = iFractals(NULL,0,MODE_LOWER,i); if (fr!=0) {if (price-STOPLEVEL*Point > fr) return(fr);} else return(0); } } if (tip==-1) { for (i=2; i<100; i++) { fr = iFractals(NULL,0,MODE_UPPER,i); if (fr!=0) {if (price+STOPLEVEL*Point < fr) return(fr);} else return(0); } } } //--------------------------------------------------------------------
Комментарии к исходному коду форекс советника e-Droba-ZigZag_V2.mq4
В целях безопасности и борьбы со спамом в тексте комментариев запрещено размещать html-теги и ссылки. Благодарим за понимание.