extern int Period_MA_Long1 = 260;// Период средней, необходимой для определения тренда extern int Period_BB1 = 25; // Период средней болинджера extern double deviation1 = 1; extern int Period_MA_Long2 = 20;// Период средней, необходимой для определения тренда extern int Period_BB2 = 25; // Период средней болинджера extern double deviation2 = 1.6; extern int Период_ATR1=20; extern double Коэффициент1=3; extern int Количество_Баров1=10; extern int Период_ATR2=20; extern double Коэффициент2=3; extern int Количество_Баров2=10; extern int режим=0; //выбор режима 1-длинные 2-короткие 0-обе extern double Loss = 0.02; // Величина убытка в процентах на одну сделку extern int режимММ=0; //выбор режима 0-нет ММ 1-убыток % от капиталла 2- величина позиции % от баланса extern double Lots = 0.01; // Величина лота int tmp, tc, st, et, dtmp,tiket; //----------------------------------------------------------------------------------------------------------// int start() { int cnt, total,x; double a;// переменные а-убыток в пипсах //------------------------------------------Защита от ошибок и косяков--------------------------------------// if(BarsOrderStopLoss() && Люстра_Низ1150*x*Point) { OrderModify(OrderTicket(),OrderOpenPrice(),Люстра_Низ11,OrderTakeProfit(),0,Red); return(0); // exit } } if(OrderType()==OP_SELL) // go to short position { if(Люстра_Верх12High[1] && MathAbs(Люстра_Верх12-Close[1])>50*x*Point) { OrderModify(OrderTicket(),OrderOpenPrice(),Люстра_Верх12,OrderTakeProfit(),0,Red); return(0); // exit } } } } total=OrdersTotal(); //-----------------------------------------------Открытие позиции если есть сделка------------------------------------ for(cnt=0;cntBB_Low2 && Close[1]Люстра_Верх12) Люстра_Верх12=iCustom(NULL,0,"Люстра Чижевского",Период_ATR2,Коэффициент2,1,2,1)+50*x*Point; if(High[1]<=Люстра_Верх12 && (Люстра_Верх12-Close[1])<100*x*Point) Люстра_Верх12=Close[1]+100*x*Point; a=MathAbs(Люстра_Верх12-Close[1]); Lots=ValueLot(a); tiket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5*x,Люстра_Верх12,0,"Короткая позиция",16384,0,Red); return(0); } } if(OrderType()==OP_SELL && total<=1) { if(Close[2]BB_Up1 && MA_1_Long1>MA_2_Long1 && (режим==1 || режим==0)) { if(Low[1]<Люстра_Низ11) Люстра_Низ11=iCustom(NULL,0,"Люстра Чижевского",Период_ATR1,Коэффициент1,1,1,1)-50*x*Point; if(Low[1]>=Люстра_Низ11 && (Close[1]-Люстра_Низ11)<100*x*Point) Люстра_Низ11=Close[1]-100*x*Point; a=MathAbs(Close[1]-Люстра_Низ11); Lots=ValueLot(a); tiket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5*x,Люстра_Низ11,0,"Длинная позиция",16384,0,Green); return(0); } } } } if(total==0) // если нет позиций { // открытие длинной позиции if(Close[2]BB_Up1 && MA_1_Long1>MA_2_Long1 && (режим==1 || режим==0)) { if(Low[1]<Люстра_Низ11) Люстра_Низ11=iCustom(NULL,0,"Люстра Чижевского",Период_ATR1,Коэффициент1,1,1,1)-100*x*Point; if(Low[1]>=Люстра_Низ11 && (Close[1]-Люстра_Низ11)<100*x*Point) Люстра_Низ11=Close[1]-100*x*Point; a=MathAbs(Close[1]-Люстра_Низ11); Lots=ValueLot(a); tiket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5*x,Люстра_Низ11,0,"Длинная позиция",16384,0,Green); return(0); } // открытие короткой позиции if(Close[2]>BB_Low2 && Close[1]Люстра_Верх12) Люстра_Верх12=iCustom(NULL,0,"Люстра Чижевского",Период_ATR2,Коэффициент2,1,2,1)+100*x*Point; if(High[1]<=Люстра_Верх12 && (Люстра_Верх12-Close[1])<100*x*Point) Люстра_Верх12=Close[1]+100*x*Point; a=MathAbs(Люстра_Верх12-Close[1]); Lots=ValueLot(a); tiket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5*x,Люстра_Верх12,0,"Короткая позиция",16384,0,Red); return(0); } } return(0); } double ValueLot (double A) { RefreshRates(); double ticvalue=MarketInfo(Symbol(),MODE_TICKVALUE); double minlot=MarketInfo(Symbol(),MODE_MINLOT); double maxlot=MarketInfo(Symbol(),MODE_MAXLOT); double standartlot=MarketInfo(Symbol(),MODE_LOTSIZE); double x=0; if (режимММ==0) x=Lots; if(режимММ==1) x=MathFloor((AccountFreeMargin()*Loss*Point)/(ticvalue*A*minlot))*minlot; if(режимММ==2) x=NormalizeDouble(minlot*((AccountFreeMargin()*Loss)/(1000*minlot)),2); if(режимММ==3) { double bb=MathSqrt(AccountFreeMargin()/1000); x=NormalizeDouble(bb*Loss,2); } if(x>=maxlot) x=maxlot; if(x<=minlot) x=minlot; return(x); }