//+------------------------------------------------------------------+ //| expert3.mq4 | //| Copyright © 2010, MQL для тебя. | //| http://mql4you.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, MQL для тебя." #property link "http://mql4you.ru" #include extern int MaxRisk=2; extern int TakeProfit=5; extern int StopLoss=5; extern int ExtDepth=12; extern int ExtDeviation=5; extern int ExtBackstep=3; datetime Today=0; //+------------------------------------------------------------------+ int init() {return(0);} //+------------------------------------------------------------------+ int deinit() {return(0);} //+------------------------------------------------------------------+ int start() {if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаем if(!IsTradeAllowed()) return(0); // пропустим тик если терминал занят //…проверим открытие новой свечи if(Time[0]==Today) return(0); Today=Time[0]; //…получим значение ZigZag на предыдущей свече double lZZ=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,1); //…подсчитаем количество ордеров и перенесем стоплосс int oBuy=0,oSell=0; for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {if(OrderType()==OP_BUY) {double f1=NormalizeDouble(iFractals(NULL,0,MODE_LOWER,3),Digits); if(f1>0 && OrderStopLoss()0 && OrderStopLoss()>f2 && f2>Ask) EditOrder(OrderTicket(),f2);} if(OrderType()==OP_BUY) oBuy++; if(OrderType()==OP_SELL) oSell++;} //…откроем ордер по показанию ZigZag при отсутствии открытых if(lZZ>0 && oBuy+oSell==0) {i=2; while(iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i)==0) i++; double fZZ=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i); double Lot=GetLot(MaxRisk); if(Lot==0) {Alert("Недостаточно средств!");return(0);} double tp=0; double sl=0; if(lZZ>fZZ) {sl=NormalizeDouble(lZZ+StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(Bid-(sl-Bid)*TakeProfit,Digits); NewOrder(OP_SELL,Lot,0,tp,sl);} if(lZZ0) tp=NormalizeDouble(Ask+(Ask-sl)*TakeProfit,Digits); NewOrder(OP_BUY,Lot,0,tp,sl);}} return(0);} //+------------------------------------------------------------------+