//+------------------------------------------------------------------+ //| JK_BullP_AutoTrader.mq4 | //| Copyright © 2005, Johnny Kor | //| autojk@mail.ru | //| On-Line Testing http://vesna.on-plus.ru/forex/stat/69740/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Johnny Kor" #property link "autojk@mail.ru" //---- input parameters extern double TakeProfit = 1000; extern double Lots = 1; extern double StopLoss = 200; extern int TrailingStop = 15; extern double Patr=9,Prange=5,Kstop=1.5,kts=2,Vts=2; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int start() {double pos1pre, pos2cur, hzbul1, hzbul2, hzbear1, hzbear2; int cnt, ticket, total,TotalOpenOrders; pos1pre = iBullsPower(NULL, 0, 13,PRICE_CLOSE,2); pos2cur = iBullsPower(NULL, 0, 13,PRICE_CLOSE,1); //hzbear1 = iBearsPower(NULL, 0, 13,PRICE_WEIGHTED,1); //hzbear2 = iBearsPower(NULL, 0, 13,PRICE_CLOSE,0); // = ((hzbear1+hzbul1)/2); // = ((hzbear2+hzbul2)/2); total=OrdersTotal(); /* { int para; // - порядковый номер доргуемой пары double sl[11]; //- массив StopLoss по каждой паре - равен длине свечи на начало утренней сессии double ts[11]; //- массив трейлингов по каждой паре - динамический трейлинг string arSym[12]; //---- // Порядковый номер пары if (Symbol()=="USDCHF") para=0; arSym[0]="по франку"; if (Symbol()=="GBPUSD") para=1; arSym[1]="по Фунту"; if (Symbol()=="USDJPY") para=2; arSym[3]="по ене"; if (Symbol()=="EURUSD") para=3; arSym[3]="по евре"; if (Symbol()=="AUDUSD") para=4; arSym[3]="по австралийцу"; if (Symbol()=="USDCAD") para=5; arSym[3]="по канадцу"; if (Symbol()=="EURGBP") para=6; arSym[3]="по евро фунту"; if (Symbol()=="EURCHF") para=7; arSym[3]="по евро франку"; if (Symbol()=="EURJPY") para=8; arSym[3]="по евро ене"; if (Symbol()=="GBPJPY") para=9; arSym[3]="по Фунт ене"; if (Symbol()=="GPBCHF") para=10; arSym[3]="по фунт франку"; if (Symbol()=="#EPU4") para=11; arSym[3]="по Индексу"; double mode,ValATR,hi,lo; int prevBars,I,j2; int lang_mode=SPEECH_NATIVE; // Двигаем стопы ts[para]=TrailingStop; //------------------------------------------------------- if (prevBars != Bars) { ValATR=0; for ( I=1 ; I<=Patr;I++){ if (I<= Patr) ValATR += High[I]-Low[I]; } ValATR = NormalizeDouble(ValATR / Patr,4); hi=High[Highest(NULL,0,MODE_HIGH,Prange,Prange)]; lo=Low[Lowest(NULL,0,MODE_LOW,Prange,Prange)]; if (Vts==1) { ts[para]=NormalizeDouble(kts*ValATR,4); sl[para]=Kstop*ValATR; } if (Vts==2) { ts[para]=(hi-lo); sl[para]=Kstop*(hi-lo); } prevBars = Bars; } if (Vts<1 || Vts>2) return(0); //------------------------------------------------------- // int total=OrdersTotal(); for(cnt=0;cnt0) { if(Bid-OrderOpenPrice()>TrailingStop*Point) { if(OrderStopLoss()0) { if((OrderOpenPrice()-Ask)>TrailingStop*Point) { if(OrderStopLoss()==0.0 || OrderStopLoss()>(Ask+ts[para])|| OrderStopLoss()>OrderOpenPrice()) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ts[para],OrderTakeProfit(),0,Red); return(0); } } } } } } } OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderType()==OP_BUY && OrderSymbol()==Symbol()&& OrderStopLoss()Ask+ts[para]){ SpeechText("Ордер селл"+ arSym[para]+" модифицирован успешно!", lang_mode);} //---- //---- //---- */ int H,L; for (cnt=0;cnt<30;cnt++) {if (H==0) {if (HLow[cnt]) L=Low[cnt];}} Comment(" BullsPower - ",pos1pre," BearsPower - ",pos2cur); int j; for(cnt=0;cnt0) // пользователь выставил в настройках трейлингстоп { // значит мы идем его проверять if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()0) // пользователь выставил в настройках трейлингстоп { // значит мы идем его проверять if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if(OrderStopLoss()==0.0 || OrderStopLoss()>(Ask+Point*TrailingStop)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } /*if (pos1pre > pos2cur) { for(cnt=0;cnt(OrderSelect(cnt,OrderOpenPrice(), MODE_TRADES)+TrailingStop*Point)) { OrderClose(OrderSelect(cnt,Symbol()),Lots,Bid,3,Violet); } } } } if (pos2cur<0) { for(cnt=0;cnt(OrderSelect(cnt,OrderOpenPrice(), MODE_TRADES)-TrailingStop*Point)) { OrderClose(OrderSelect(cnt,Symbol()),Lots,Ask,3,Violet); } } } } */ if (pos1pre>pos2cur && pos2cur>0 && j<2) { OrderSend(Symbol(), OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,NULL,0,0,Red); } if (pos2cur<0 && j<1) { OrderSend(Symbol(), OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,NULL,0,0,Red); } // TRALiNG return(0); }