//+------------------------------------------------------------------+ //| e-TSATR_NRTR_Last.mq4 | //| Copyright © 2005, Al (idea from Oleg VS) | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ /* Добавлена новая встороенная версия трейлингования, которая задаётся пользовательской переменной Vts. При установке Vts=1 эксперт трейлингует стопы, как и в прежней версии, в зависимости от значения ATR на первом баре(нулевой бар в рассчет не принимается). При установке Vts=2 стоп трейлингуется от последних экстремумов цены на расстоянии амплитуды(ширины диапазона) на заданном периоде(по умолчанию Prange=5). Применение такого способа трейлингования стопа испытано в реальном времени и проверено путём подстановки в различные эксперты и системы. В результате тестов выявлено увеличение профитности на 15-25% в различных экспертах. Все заданные параметры и текущие рассчетные значения комментируются в левом верхнем углу графика. */ extern double Patr=9; extern double Prange=5; extern double Kstop=1.13; extern double kts=2; extern double Vts=1; double cnt=0,ValATR=0,hi=0,lo=0,SL=0,TS=0,prevBars=0; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int i,mode,ticket,total; if (prevBars!=Bars) { ValATR=0; for(i=1; i<=Patr; i++) { if(i<=Patr) { ValATR+=High[i]-Low[i]; } } ValATR=ValATR/Patr; hi=High[Highest(NULL,0,MODE_HIGH,Prange,Prange)]; lo=Low[Lowest(NULL,0,MODE_LOW,Prange,Prange)]; if (Vts==1) {TS=kts*ValATR; SL=Kstop*ValATR;} if (Vts==2) {TS=(hi-lo); SL=Kstop*(hi-lo);} prevBars = Bars; } if (Vts<1 || Vts>2) return(0); //------------------------------------------------------- for (cnt=0; cnt<=OrdersTotal(); cnt++) { OrderSelect(cnt,SELECT_BY_POS); mode=OrderType(); if(OrderSymbol()==Symbol()) { //First Stop--------------------------------- if (mode==OP_BUY && OrderStopLoss()== 0) { OrderModify(OrderTicket(),OrderOpenPrice(),Low[0]-SL,OrderTakeProfit(),0,CLR_NONE); PlaySound("expert.wav"); return(0); } if (mode==OP_SELL && OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),High[0]+SL,OrderTakeProfit(),0,CLR_NONE); PlaySound("expert.wav"); return(0); } //Main Trailing------------------------------- if ((mode==OP_BUY && High[0]-OrderOpenPrice()>TS && OrderStopLoss()TS && OrderStopLoss()>Low[0]+TS) || OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Low[0]+TS,OrderTakeProfit(),0,CLR_NONE); PlaySound("expert.wav"); return(0); } } } Comment("Versia: ",Vts,"\n", "Per_ATR: ",Patr,"\n", "Per_Range: ",Prange,"\n", "Range: ",(High[0]-Low[0]),"\n", "ATR: ",ValATR,"\n", "SL: ",SL,"\n", "TS: ",TS); return(0); }