//+------------------------------------------------------------------+ //| !UsrednenieDynamic.mq4 | //| Melnicuc Alexei | //| miller.bird0@gmail.com | //+------------------------------------------------------------------+ #property copyright "Melnicuc Alexei" #property link "miller.bird0@gmail.com" //--- input parameters extern double Lot=0.1; extern int MinGrid=130; extern int StochPeriod=50; extern int StochPeriodSlow=50; extern int StdDevPeriodEntry=40; extern int StdDevPeriodGrid=1200; extern double DifPrice=0.0945; //--- vars double grid; int UsrednenieMN; string Prefix; double mingrid; int Lock=0; double Level0, Level1, Level2; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Prefix=Symbol()+"!UsrednenieDynamic."; UsrednenieMN=0; for(int i=0; iLevel0)return(-1); double Stohastic=iStochastic(NULL,0,StochPeriod,3,StochPeriodSlow,MODE_SMA,0,MODE_SIGNAL,0); double dif=iStochastic(NULL,0,StochPeriod,3,StochPeriodSlow,MODE_SMA,0,MODE_SIGNAL,1)-iStochastic(NULL,0,StochPeriod,3,StochPeriodSlow,MODE_SMA,0,MODE_SIGNAL,2); if(Stohastic>80 && dif<0)d=true; if(Stohastic<20 && dif>0)u=true; if(u)return(OP_BUY); if(d)return(OP_SELL); return(-1); } //+------------------------------------------------------------------+ void SetOrder(int u){ int k=-1; int op; double tp, sl, entry; //grid=iStdDev(NULL,0,StdDevPeriodGrid,0,MODE_EMA,PRICE_CLOSE,0); grid=HL(MathMod(TimeHour(TimeCurrent())+1,24),PERIOD_H1); //grid=HL(MathMod(TimeHour(TimeCurrent())+1,24),PERIOD_H4); //grid=HL(MathMod(TimeDay(TimeCurrent())+1,31),PERIOD_D1); if(grid=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==UsrednenieMN){ Profit+=-OrderProfit()-grid/Point*OrderLots(); } } } double L=Profit/grid*Point+Lot; if(L=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==UsrednenieMN){ return(OrderType()); } } } return(-1); } //+------------------------------------------------------------------+ void SetLock(bool flag){ double L=0; for(int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==UsrednenieMN){ L+=OrderLots(); } } } int k=-1; double entry=Bid; double tp=0; double sl=0; int op=OP_SELL; if(flag){entry=Ask; tp=0; sl=0; op=OP_BUY;} k=OrderSend(Symbol(),op,NormalizeDouble(L,2),NormalizeDouble(entry,Digits),1,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"Lock",UsrednenieMN,0,Blue); if(k!=-1 && flag)Lock=1; if(k!=-1 && !flag)Lock=-1; return(0); } //+------------------------------------------------------------------+ void DeleteLock(){ for(int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if(OrderMagicNumber()==UsrednenieMN && OrderComment()=="Lock"){ if(OrderType()==OP_BUY){ OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),1,White); } if(OrderType()==OP_SELL){ OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),1,White); } } } } Lock=0; return(0); } //+------------------------------------------------------------------+ double HL(int h, int period){ if(period==PERIOD_H1)int k=0; if(period==PERIOD_H4)k=1; if(period==PERIOD_D1)k=2; static double HL[32,3]; if(HL[h,k]!=0)return(HL[h,k]); double Mean=0; int n=0; for(int i=1; i=0; i--){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderMagicNumber()==UsrednenieMN){ OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(tp,Digits),0,Blue); } } } return(0); } //+------------------------------------------------------------------+