JS-Chaos-V3

Author: wsforex@list.ru
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
Indicators Used
Moving average indicatorBill Williams Accelerator/Decelerator oscillatorBill Williams Awesome oscillatorStandard Deviation indicatorFractals
Miscellaneous
It plays sound alerts
1 Views
0 Downloads
0 Favorites
JS-Chaos-V3
//+-----------------------------------------------------------------+
//|                                                 JS-Chaos-V2.mq4 |
//+-----------------------------------------------------------------+
//| HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH |
//| H\    \               http://wsforex.ru/               /    / H |
//| H )----)----------------------------------------------(----(  H |
//| H/    /   Ïèøó òîðãîâûå ñèñòåìû íà çàêàç: wsforex.ru   \    \ H |
//| HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH |
//+-----------------------------------------------------------------+

#property copyright "wsforex@list.ru"
#property link      "http://wsforex.ru/"
//+-----------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"       |
//+-----------------------------------------------------------------+
extern bool    ExpertTime      = True;
extern int     OpenHour        = 7;
extern int     CloseHour       = 18;
extern double  Lots            = 0.1;
extern int     Otstup          = 0;
extern double  Fibo.1          = 1.618;
extern double  Fibo.2          = 4.618;
extern int     MagicNumber     = 321232123;
//+-----------------------------------------------------------------+
extern bool    ClosePos   = True;
extern bool    Trailing   = True;
extern bool    Besubitok  = True;
extern int     BesubUr    = 1;
//+-----------------------------------------------------------------+
bool EaDisabled=False;
string com, Sy;
int    dg, st, sp;
double MA, pa, pb, pt;
#include <stdlib.mqh> // Ñòàíäàðòíàÿ áèáëèîòåêà
//+-----------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"       |
//+-----------------------------------------------------------------+
int init()
  {
//----
  if (!IsTesting()) {
    if (IsExpertEnabled()) Message("\nÑîâåòíèê óñòàíîâëåí è áóäåò çàïóùåí ñëåäóþùèì òèêîì");
    else Message("\nÂíèìàíèå! îòæàòà êíîïêà íà âêëàäêå ñîâåòíèêè");
  }
  Sy = Symbol();
//----
  return(0);
}
//+-----------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"       |
//+-----------------------------------------------------------------+
void start(){
// -----
  com="JS-Chaos";
// -----
  pb = MarketInfo(Sy,MODE_BID);
  pa = MarketInfo(Sy,MODE_ASK); 
  dg = MarketInfo(Sy,MODE_DIGITS);
  pt = MarketInfo(Sy,MODE_POINT);
  sp = MarketInfo(Sy,MODE_SPREAD);
  st = MarketInfo(Sy,MODE_STOPLEVEL);
// -----           
  Comment("\n\n\nÑîâåòíèê JS-Chaos âåñü â ðàáîòå: - ",IIcm(Tradetime()==1 && EaDisabled==False),
          "\nÄåíü: - ",Dayof(),
          "\nÒîðãîâûé ñ÷¸ò: - ",shet(),
          "\nÂðåìÿ ïî GMT: - " + TimeToStr(TimeCurrent()-3600, TIME_MINUTES|TIME_SECONDS),
          "\nSpread: - ",sp,
          "\nStopLevel: - ",st,
          "\n쑌֔: - ",AccountLeverage()
          );              
// -----
  st=st+sp;
  MA=iMA(NULL,0,5,3,MODE_SMMA,PRICE_MEDIAN,0);
  if(Trailing)Trailing.MA();
  if(Besubitok)ModifBesubitok();
// ----- 
  double Fractals.Up=FractalsUp(10);
  double Fractals.Dw=FractalsDw(10);
  if(Tradetime()==1 && EaDisabled==False){
  double tp, lots;
// ---- Ó Ñ Ò À Í Î Â Ê À -1- Î Ð Ä Å Ð À --------------------------------------------------------+
  if(Signals()==1 && Fractals.Up>MA && 
  OrdersCount(OP_BUYSTOP, MagicNumber)==0 && OrdersCount(OP_BUY, MagicNumber)==0) { 
  if(OrdersCount(OP_BUYSTOP, MagicNumber)==0) { tp = MA+(Fractals.Up-MA)*Fibo.1; lots=Lots*2; }
  if(tp>0 && (tp-Fractals.Up)/pt>st && (Fractals.Up-MA)/pt>st && ND(pa+st*pt)<=Fractals.Up){
  int tik.1=SetOrder(Sy, OP_BUYSTOP, lots, Fractals.Up, MA, tp, MagicNumber, com, 0);
  if(tik.1>0) { GlobalVariableSet("Ticket.buy.1 "+Sy, tik.1);
     }
   }
 }
// -----
  if(Signals()==2 && Fractals.Dw<MA && 
  OrdersCount(OP_SELLSTOP,MagicNumber)==0 && OrdersCount(OP_SELL, MagicNumber)==0) {
  if(OrdersCount(OP_SELLSTOP,MagicNumber)==0) { tp = MA-(MA-Fractals.Dw)*Fibo.1; lots=Lots*2; }
  if(tp>0 && (Fractals.Dw-tp)/pt>st && (MA-Fractals.Dw)/pt>st && ND(pb-st*pt)>Fractals.Dw){
  int tik.2=SetOrder(Sy, OP_SELLSTOP, lots, Fractals.Dw, MA, tp, MagicNumber, com, 0);
  if(tik.2>0) { GlobalVariableSet("Ticket.sell.1 "+Sy, tik.2);
     }
   }
 }
// ---- Ó Ñ Ò À Í Î Â Ê À -2- Î Ð Ä Å Ð À --------------------------------------------------------+
  if(Signals()==1 && Fractals.Up>MA && OrdersCount(OP_BUY, MagicNumber)==0
  && GetIndexTicket(GlobalVariableGet("Ticket.buy.1 "+Sy))==True && OrdersCount(OP_BUYSTOP,MagicNumber)==1) { 
  if(OrdersCount(OP_BUYSTOP, MagicNumber)==1) { tp = MA+(Fractals.Up-MA)*Fibo.2; lots=Lots*1; }
  if(tp>0 && (tp-Fractals.Up)/pt>st && (Fractals.Up-MA)/pt>st && ND(pa+st*pt)<=Fractals.Up){
  int tik.3=SetOrder(Sy, OP_BUYSTOP, lots, Fractals.Up, MA, tp, MagicNumber, com, 0);
  if(tik.3>0) { GlobalVariableSet("Ticket.buy.2 "+Sy, tik.3);
      }
    }
  }
// -----
  if(Signals()==2 && Fractals.Dw<MA && OrdersCount(OP_SELL, MagicNumber)==0
  && GetIndexTicket(GlobalVariableGet("Ticket.sell.1 "+Sy))==True && OrdersCount(OP_SELLSTOP,MagicNumber)==1) {
  if(OrdersCount(OP_SELLSTOP,MagicNumber)==1) { tp = MA-(MA-Fractals.Dw)*Fibo.2; lots=Lots*1; }
  if(tp>0 && (Fractals.Dw-tp)/pt>st && (MA-Fractals.Dw)/pt>st && ND(pb-st*pt)>Fractals.Dw){
  int tik.4=SetOrder(Sy, OP_SELLSTOP, lots, Fractals.Dw, MA, tp, MagicNumber, com, 0);
  if(tik.4>0) { GlobalVariableSet("Ticket.sell.2 "+Sy, tik.4);
     }
   }
 }
// ---------------------------------------------------------------------------------------------+
  if(Signals()==2) { 
  DeleteOrders(OP_BUYSTOP, MagicNumber);
  }
  if(Signals()==1) { 
  DeleteOrders(OP_SELLSTOP, MagicNumber);
  } 
// -----
  if(ClosePos) {
     double MA=iMA(NULL,0,34,0,MODE_SMMA,PRICE_CLOSE,1);
     if(MA>Open[1]) { 
       ClosePosBuy(MagicNumber);
     }
     if(MA<Open[1]) { 
       ClosePosSell(MagicNumber);
     }
   }
 }
// -----
 return(0);
}
//+-----------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"       |
//+-----------------------------------------------------------------+
void ModifBesubitok()
{
//+----
  bool fbu, fsl;
  int cnt=OrdersTotal();
  int t.buy.1 = GlobalVariableGet("Ticket.buy.1 "+Sy);
  int t.buy.2 = GlobalVariableGet("Ticket.buy.2 "+Sy);
  int t.sell.1 = GlobalVariableGet("Ticket.sell.1 "+Sy);
  int t.sell.2 = GlobalVariableGet("Ticket.sell.2 "+Sy);
//+----
  if(GetIndexTicket(t.buy.1)==false)fbu=true;
  if(GetIndexTicket(t.sell.1)==false)fsl=true;
//+----
  for (int i=0; i<cnt; i++) {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
     if (OrderSymbol()!=Symbol()) continue;
//+----
       if (OrderType()==OP_BUY && t.buy.2==OrderTicket()) {
        if (fbu==true && OrderStopLoss()<OrderOpenPrice() && (OrderOpenPrice()+st*Point)<=Bid){
         ModifyOrder(OrderOpenPrice(), OrderOpenPrice()+BesubUr*Point,OrderTakeProfit(),OrderExpiration());
      }
    }  
       if (OrderType()==OP_SELL && t.sell.2==OrderTicket()) {
        if (fsl==true && OrderStopLoss()>OrderOpenPrice() && (OrderOpenPrice()-st*Point)>=Ask){
         ModifyOrder(OrderOpenPrice(), OrderOpenPrice()-BesubUr*Point,OrderTakeProfit(),OrderExpiration());
      } 
    }
  }
  return(0);
}
//+-----------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"       |
//+-----------------------------------------------------------------+
void Trailing.MA(){
//+----
   double AC.0=iAC(NULL,0,0);
   double AC.1=iAC(NULL,0,1);
   double AO.0=iAO(NULL,0,0);
   double AO.1=iAO(NULL,0,1);
   double ma=ND(iMA(NULL,0,21,0,MODE_SMMA,PRICE_CLOSE,0));
   double StdDev.0=iStdDev(Symbol(),0,10,0,0,PRICE_CLOSE,0);
   double StdDev.1=iStdDev(Symbol(),0,10,0,0,PRICE_CLOSE,1);
//+----
  int cnt=OrdersTotal();
  for (int i=0; i<cnt; i++) {
   if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol()!=Symbol()) continue;
    if (OrderMagicNumber()!=MagicNumber) continue;
//+----
   if(OrderType()==OP_BUY){
     if((OrderStopLoss()<=0)||(OrderStopLoss()<ma && StdDev.0>StdDev.1 && AO.0>AO.1 && AC.0>AC.1)){
       if(ND(OrderStopLoss())!=ma && ma+st*pt<=Bid){
        ModifyOrder(OrderOpenPrice(),ma,OrderTakeProfit(),OrderExpiration());
      }
    }
  } 
//+----
   if(OrderType()==OP_SELL){
     if((OrderStopLoss()<=0)||(OrderStopLoss()>ma  && StdDev.0>StdDev.1 && AO.0<AO.1 && AC.0<AC.1)){ 
       if(ND(OrderStopLoss())!=ma && ma-st*pt>=Ask){
        ModifyOrder(OrderOpenPrice(),ma,OrderTakeProfit(),OrderExpiration());
       }
     } 
   }
 }
//+----
  return(0);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
string Dayof(){
string dd;
  switch(DayOfWeek()){
    case 1: dd="Ïîíåäåëüíèê"; break;
    case 2: dd="Âòîðíèê";     break;
    case 3: dd="Ñðåäà";       break;
    case 4: dd="×åòâåðã";     break;
    case 5: dd="Ïÿòíèöà";     break;
    case 6: dd="Ñóááîòà";     break;
    case 7: dd="Âîñêðåñåíüå"; break;
  }
  return(dd);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
int Signals(){
// -----
   double AC.1=iAC(Symbol(),0,1);
   double AC.2=iAC(Symbol(),0,2);
   double AO.0=iAO(Symbol(),0,0);
   double AO.1=iAO(Symbol(),0,1);
   double AO.2=iAO(Symbol(),0,2);
   double AL.1=iMA(Symbol(),0, 5,3,MODE_SMMA,PRICE_MEDIAN,-3);  // çåë¸íàÿ ëèíèÿ
   double AL.2=iMA(Symbol(),0, 8,5,MODE_SMMA,PRICE_MEDIAN,-5);  // êðàñíàÿ ëèíèÿ
   double AL.3=iMA(Symbol(),0,13,8,MODE_SMMA,PRICE_MEDIAN,-8);  // ñèíèÿ ëèíèÿ
// -----
   if(AO.0>AO.1 && AO.1>0.0 && AL.1>AL.2 && AL.2>AL.3) { return(1); }
   if(AO.0<AO.1 && AO.1<0.0 && AL.1<AL.2 && AL.2<AL.3) { return(2); }
// -----
 return(0);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
int OrdersCount(int type, int mn)
{
//+----
  int orders=0;
  int cnt=OrdersTotal();
  for (int i=0; i<cnt; i++) {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if (OrderSymbol()!=Symbol()) continue;
    if (OrderMagicNumber()!=mn) continue;
    if (OrderType()==type) orders++;
  }
//+----
  return (orders);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
double FractalsUp(int bars){
    for (int i=0; i<bars; i++) {
    double fr = iFractals(Symbol(), 0, MODE_UPPER, i);
    if(fr==iHigh(NULL,0,i))return (ND(fr+Otstup*pt));
    }
    
  return (0);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
double FractalsDw(int bars){
    for (int i=0; i<bars; i++) {
    double fr = iFractals(Symbol(), 0, MODE_LOWER, i);
    if(fr==iLow(NULL,0,i))return (ND(fr-Otstup*pt));
    }
  return (0);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
void DeleteOrders(int op=-1, int mn=-1) {
  bool fd;
  int  i, it, k=OrdersTotal();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderSymbol()==Symbol() && OrderType()==op) {
          if (OrderMagicNumber()==mn) {
            for (it=1; it<=5; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), 0);
              if (fd) { PlaySound("ok.wav"); break;
              Sleep(1000*5);
            }
          }
        }
      }
    }
  }
  return(0);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
string IIcm(int com){
 if(com==1)return("äà:"); else return("íåò:");
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
string shet(){
  string s;
  if (IsDemo())s="Äåìî"; else s="Ðåàë";
  return(s);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal(), ty;
// ----
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ty=OrderType();
      if (ty>1 && ty<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (ot<=OrderOpenTime()) return(True);
          }
        }
      }
    }
  }
  return(False);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
color IIFc(bool condition, color ifTrue, color ifFalse) {
  if (condition) return(ifTrue); else return(ifFalse);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  switch (TimeFrame) {
    case PERIOD_M1:  return("M1");
    case PERIOD_M5:  return("M5");
    case PERIOD_M15: return("M15");
    case PERIOD_M30: return("M30");
    case PERIOD_H1:  return("H1");
    case PERIOD_H4:  return("H4");
    case PERIOD_D1:  return("Daily");
    case PERIOD_W1:  return("Weekly");
    case PERIOD_MN1: return("Monthly");
    default:         return("Unknown Period");
  }
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("Buy Limit");
    case OP_SELLLIMIT: return("Sell Limit");
    case OP_BUYSTOP  : return("Buy Stop");
    case OP_SELLSTOP : return("Sell Stop");
    default          : return("Unknown Operation");
  }
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+      
int SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, string co="", datetime ex=0) {
  color    cl=IIFc(op==OP_BUYLIMIT || op==OP_BUYSTOP, LightBlue, LightCoral);
  datetime ot;
  double   pa, pb, mp;
  int      err, it, ticket, msl, sp;
// ----
  if (sy=="" || sy=="0") sy=Symbol();
  msl=MarketInfo(sy, MODE_STOPLEVEL);
  if (co=="") co=WindowExpertName()+" "+GetNameTF(Period());
  if (ex>0 && ex<TimeCurrent()) ex=0;
  for (it=1; it<=5; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("SetOrder(): Îñòàíîâêà ðàáîòû ôóíêöèè");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ot=TimeCurrent();
    sp=MarketInfo(sy, MODE_SPREAD);
    pp=NormalizeDouble(pp, Digits);
    sl=NormalizeDouble(sl, Digits);
    tp=NormalizeDouble(tp, Digits);
    ticket=OrderSend(sy, op, ll, pp, sp, sl, tp, co, mn, ex, cl);
    if (ticket>0) { PlaySound("ok.wav"); break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66);
        if (ExistOrders(sy, op, mn, ot)) { PlaySound("ok.wav"); break;
        }
        Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
        continue;
      }
      PlaySound("timeout.wav");
      mp=MarketInfo(sy, MODE_POINT);
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);
      if (pa==0 && pb==0) Message("SetOrder(): Ïðîâåðüòå â îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
      Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa,"  Bid=",pb,"  sy=",sy,"  ll=",ll,"  op=",GetNameOP(op),
            "  pp=",pp,"  sl=",sl,"  tp=",tp,"  mn=",mn);
      // Áëîêèðîâêà ðàáîòû ñîâåòíèêà
      if (err==2 || err==64 || err==65 || err==133) {
        EaDisabled=True; break;
      }
      // Äëèòåëüíàÿ ïàóçà
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      // Ñëèøêîì ÷àñòûå çàïðîñû (8) èëè ñëèøêîì ìíîãî çàïðîñîâ (141)
      if (err==8 || err==141) Sleep(1000*100);
      if (err==139 || err==140 || err==148) break;
      // Îæèäàíèå îñâîáîæäåíèÿ ïîäñèñòåìû òîðãîâëè
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      // Îáíóëåíèå äàòû èñòå÷åíèÿ
      if (err==147) {
        ex=0; continue;
      }
      if (err!=135 && err!=138) Sleep(1000*7.7);
    }
  }
  return(ticket);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
int Tradetime(){
// ---
  int TradingTime=0;
  if(OpenHour>CloseHour){
  if (Hour()<=CloseHour || Hour()>=OpenHour)TradingTime=1;
  }
  if(OpenHour<CloseHour){
  if(Hour()>=OpenHour && Hour()<=CloseHour)TradingTime=1;
  }
  if(OpenHour==CloseHour){
  if(Hour()==OpenHour)TradingTime=1;
  }
  if (DayOfWeek()==1 && Hour()<3)TradingTime=0;
  if (DayOfWeek()>=5 && Hour()>18)TradingTime=0;
  if (Month()==1 && Day()<10)TradingTime=0;
  if (Month()==12 && Day()>20)TradingTime=0;  
  if (ExpertTime==false)TradingTime=1;
// ---
  return(TradingTime); 
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
bool GetIndexTicket(int ti) {
  int i, k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderTicket()==ti) return(true);
    }
  }
  return(false);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
void ClosePosBuy(int mn) {
  int cnt = OrdersTotal();
  int sp=MarketInfo(Symbol(), MODE_SPREAD);
  for (int i=cnt-1; i>=0; i--) {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if (OrderSymbol() != Symbol()) continue;
    if (OrderMagicNumber() != mn) continue;
    if (OrderType() == OP_BUY) 
    OrderClose(OrderTicket(), OrderLots(), Bid, sp);
  }
}
void ClosePosSell(int mn) {
  int cnt = OrdersTotal();
  int sp=MarketInfo(Symbol(), MODE_SPREAD);
  for (int i=cnt-1; i>=0; i--) {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if (OrderSymbol() != Symbol()) continue;
    if (OrderMagicNumber() != mn) continue;
    if (OrderType() == OP_SELL) 
    OrderClose(OrderTicket(), OrderLots(), Ask, sp);
  }
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
  bool   fm;
  color  cl=IIFc(OrderType()==OP_BUY
              || OrderType()==OP_BUYLIMIT
              || OrderType()==OP_BUYSTOP, Blue, Red);
  double op, pa, pb, os, ot;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;

  if (pp<=0) pp=OrderOpenPrice();
  if (sl<0 ) sl=OrderStopLoss();
  if (tp<0 ) tp=OrderTakeProfit();
  
  pp=NormalizeDouble(pp, dg);
  sl=NormalizeDouble(sl, dg);
  tp=NormalizeDouble(tp, dg);
  op=NormalizeDouble(OrderOpenPrice() , dg);
  os=NormalizeDouble(OrderStopLoss()  , dg);
  ot=NormalizeDouble(OrderTakeProfit(), dg);

  if (pp!=op || sl!=os || tp!=ot) {
    for (it=1; it<=5; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl);
      if (fm) { PlaySound("Stops.wav"); break;
      } else {
        er=GetLastError();
        PlaySound("timeout.wav");
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
        Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
        Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
              "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);
        Sleep(1000*10);
      }
    }
  }
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+
double ND(double np) {
  double pp, ts=MarketInfo(Symbol(), MODE_TICKSIZE);
  int di=MarketInfo(Symbol(), MODE_DIGITS);
  if (ts>0) pp=NormalizeDouble(np/ts, 0)*ts;
  else {if (di>0) pp=NormalizeDouble(np*di, 0)/di; else pp=np;
  }
  return(pp);
}
//+------------------------------------------------------------------------------+
//|       Àâòîð : Ñåðãåé   - ìîé ñàéò -  "http://wsforex.ru/"                    |
//+------------------------------------------------------------------------------+




Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---