//+------------------------------------------------------------------+ //| FrBestExp02_1.mq4 | //| | //| 1 более надёжные точки входа | //+------------------------------------------------------------------+ #property copyright "" #property link "" //---- extern double Lots = 1.00; extern int Stop_Loss = 1000; extern int Take_Profit = 1000; extern int Trailing_Stop = 0; // Only for M15 extern int Vlim=50; extern int fper=12,sper=26,sigper=9; // периоды индикатора OsMA extern int stop=300; // Уровень отсечки профита extern int hedg=1; // флаг разрешения хеджа extern double kh=10; // коэфф.хеджирования extern int lok; // флаг разрешения локирования позиции extern int rpr=1; // флаг определения просадки позы или по всему тесту extern int ttime=900; // Задержка выставления хедж-ордера на 1 свечу extern int hstop=-3000; // стоп-лосс для хеджа //---- int cnt; // индекс цикла int sigs,sigb; // суммирующий сигнал на проведение операции купли-продажи //---- double ssig,bsig; // сигналы на куплю-продажу от индикатора фракталов double osmanul,osmaone; // сигналы индикатора OsMA от нулевого и первого баров int s,b; // количество активных сэлл и бай ордеров int hml; // флаг закрытия позиции с минусовым профитом (закрывается позиция с меньшим лотом int pl; // флаг закрытия всех позиций по условию наличия установленного положительного профита double summa; // суммарный профит по всем позициям double mlot; // величина торгуемого лота double ssum,bsum; // профит по ордерам сэлл и бай раздельно double pr; // величинга просадки int hblok,shblok,bhblok; // флаг блокирования выставления хедж-ордера и флаги повторного запуска хедж-процедуры double DHMax,DLMin; bool ft=true; int rang; double pt; int nul; // переменные для вычисления поворотной точки при запуске и в 00.00 каждых суток int LastTradeTime; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ double FractalBest(int Dir) { double up,dw; //---- if(High[3]>High[4] && High[3]>High[5] && High[3]>High[2] && High[3]>High[1]){ up=Low[0]-3*Point; } else { up=0; } if(Low[3]Low[cnt])DLMin=Low[cnt]; } pt=(DHMax+DLMin+Close[nul])/3;//поворотная точка ft=false; } //---------------------------------------------------------------------------------------------------------------- if(CurTime()-LastTradeTime<20)return(0); //----------------------------Определения общего и позиционного профита, а такжеподсчёт позиций------------------- s=0;b=0;summa=0;bsum=0;ssum=0; for(cnt=0;cnt0 && hedg==1) { for(cnt=0;cnt0) { if(Bid-OrderOpenPrice()>Point*Trailing_Stop) { if(OrderStopLoss()Point*Trailing_Stop) { if(OrderStopLoss()>Ask+Point*Trailing_Stop) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*Trailing_Stop,OrderTakeProfit(),0,Red); return(0); } } } } } //---------------------------------------------------Выставление хедж-ордера-------------------------------------- if(hblok==1) { shblok=0;bhblok=0; for(cnt=0;cnt=150 || bsum<-300) { OrderSend(Symbol(),OP_SELL,kh*mlot,Bid,5,Bid+Stop_Loss*Point,Bid-Take_Profit*Point,NULL,0,0,Aqua); //SetArrow(Time[0],H+5*Point,159,Aqua); hblok=1; return(0); } if(bsum>=150 || ssum<-300) { OrderSend(Symbol(),OP_BUY,kh*mlot,Ask,5,Ask-Stop_Loss*Point,Ask+Take_Profit*Point,NULL,0,0,Red); //SetArrow(Time[0],L-5*Point,159,Red); hblok=1; return(0); } } //------------------------------------------Вычисление просадки в процессе торгов------------------------------ if(s+b==0 && rpr==0)pr=0; if(pr>summa && summa<0)pr=MathRound(summa); //-----------------------------------Определение основного сигнала и сигналов индикаторов------------------------ // bsig=iCustom(NULL,0,"FractalBest",0,0); // ssig=iCustom(NULL,0,"FractalBest",1,0); bsig=FractalBest(0); ssig=FractalBest(1); osmanul=iOsMA(NULL,0,fper,sper,sigper,PRICE_CLOSE,0); osmaone=iOsMA(NULL,0,fper,sper,sigper,PRICE_CLOSE,1); //---- if(ssig>1 && Volume[1]>Vlim && Volume[1]>Volume[2] && osmaone>osmanul && osmaone<=0 && osmanul<0 && Close[0]>pt) { sigs=1; } else { sigs=0; } if(bsig>1 && Volume[1]>Vlim && Volume[1]>Volume[2] && osmaone=0 && osmanul>0 && Close[0]