Author: Evgeny I. SHCHERBINA
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
Indicators Used
Stochastic oscillatorMovement directional index
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
maximus_v8
#property copyright "Evgeny I. SHCHERBINA"
//maximus_vX.mq4
//12.04.2011
//Ïðè èñïîëüçîâàíèè êîíöåïòîâ ñîâåòíèêà ññûëêà íà àâòîðà îáÿçàòåëüíà.

extern bool stochastic = FALSE;
extern int range = 40;
extern int risk = 1000;
extern int stop_distance = 15;
extern int trail = 20;

double h1, h1_1, h4, h4_1, lot, maxi, mini, minus, minus_num, plus, plus_num, profit_max, spread;
int corner, global_maxi, global_mini, last_cancel, last_time, trades;

int init(){
  define_corner();
  find_maxi(0,0);
  find_mini(0,0);
}

int start(){
  h1 = MathFloor(iStochastic(NULL,PERIOD_H1,5,3,3,MODE_LWMA,0,MODE_MAIN,0));
  h1_1 = MathFloor(iStochastic(NULL,PERIOD_H1,5,3,3,MODE_LWMA,0,MODE_MAIN,1));
  h4 = MathFloor(iStochastic(NULL,PERIOD_H4,5,3,3,MODE_LWMA,0,MODE_MAIN,0));
  h4_1 = MathFloor(iStochastic(NULL,PERIOD_H4,5,3,3,MODE_LWMA,0,MODE_MAIN,1));
  lot = NormalizeDouble(AccountEquity()/risk/10,3);
  if(lot < 0.01){lot = 0.01;}
  else if(lot > 2.5){lot = 2.5;}
  spread = MarketInfo(Symbol(),MODE_SPREAD);
  comments("range",5,45,"Äèàïàçîí: "+DoubleToStr((maxi-mini)/Point/10,1)+" ("+range+" ïî óìîë÷.)",Aqua);
  comments("lot",5,60,"Ëîò: "+DoubleToStr(lot,3)+"; ñïðåä: "+DoubleToStr(spread/10,1),Aqua);
  if(stochastic == FALSE){comments("stochastic",5,90,"iStoch H1: "+DoubleToStr(h1,0)+" ("+DoubleToStr(h1_1,0)+"); H4: "+DoubleToStr(h4,0)+" ("+DoubleToStr(h4_1,0)+") [ÂÛÊË.]",Aqua);}
  else{comments("stochastic",5,90,"iStoch H1: "+DoubleToStr(h1,0)+" ("+DoubleToStr(h1_1,0)+"); H4: "+DoubleToStr(h4,0)+" ("+DoubleToStr(h4_1,0)+") [ÂÊË.]",Magenta);}
  int i, orders;
  for(i=0; i<=OrdersTotal()-1; i++){
    OrderSelect(i,SELECT_BY_POS);
    if((OrderType() == OP_BUY && (OrderComment() == "m_buy" || OrderComment() == "m_buyDouble")) || (OrderType() == OP_SELL && (OrderComment() == "m_sell" || OrderComment() == "m_sellDouble"))){
      orders++;
      if(OrderProfit() < 0){open_second(OrderTicket());}
      if(OrderTakeProfit() != 0){define_takeprofit(OrderTicket());}
    }
  }
  if(i >= OrdersTotal()-1){
    if(orders == 0){open_first();}
    if(orders > trades){
      trades = orders;
      change_label();
      PlaySound("news.wav");
      Sleep(1000);
    }
    if(orders < trades){
      trades = orders;
      define_corner();
      find_maxi(0,0);
      find_mini(0,0);
      profit_max = 0;
      ObjectDelete("takeprofit");
      PlaySound("ok.wav");
      Sleep(1000);
    }
    if(trades == 0){comments("profit",5,75,"Ïðèáûëüíîñòü: 0.0 (ìàêñ. 0.0)",Aqua);}
  }
  check_extremes();
  close_manual();
  close_plus();
  instantiate_levels();
  instantiate_stops();
  play_sound();
  trail();
}

int deinit(){
  ObjectDelete("buystop");
  ObjectDelete("buystop_takeprofit");
  ObjectDelete("sellstop");
  ObjectDelete("sellstop_takeprofit");
  ObjectDelete("takeprofit");
}

int define_corner(){
  double diff = WindowPriceMax()-WindowPriceMin();
  if(Close[0] < (WindowPriceMin()+diff/2)){corner = 1;}
  else{corner = 3;}
}

int find_maxi(int points, int transf_maxi){
  int i;
  double oc1, oc2, oc3, oc4, oc5, oc6, oc7, oc8, oc9;
  for(i=4; i<=480; i++){
    if(Close[i] > Open[i]){oc5 = Close[i];}else{oc5 = Open[i];}
    if(oc5 > Close[0]+points*Point && oc5 > Close[1] && oc5 > Close[2] && oc5 > Close[3] && oc5 > Open[1] && oc5 > Open[2] && oc5 > Open[3] && (points == 0 || (points != 0 && global_maxi != transf_maxi))){
      if(Close[i-4] > Open[i-4]){oc1 = Close[i-4];}else{oc1 = Open[i-4];}
      if(Close[i-3] > Open[i-3]){oc2 = Close[i-3];}else{oc2 = Open[i-3];}
      if(Close[i-2] > Open[i-2]){oc3 = Close[i-2];}else{oc3 = Open[i-2];}
      if(Close[i-1] > Open[i-1]){oc4 = Close[i-1];}else{oc4 = Open[i-1];}
      if(Close[i+1] > Open[i+1]){oc6 = Close[i+1];}else{oc6 = Open[i+1];}
      if(Close[i+2] > Open[i+2]){oc7 = Close[i+2];}else{oc7 = Open[i+2];}
      if(Close[i+3] > Open[i+3]){oc8 = Close[i+3];}else{oc8 = Open[i+3];}
      if(Close[i+4] > Open[i+4]){oc9 = Close[i+4];}else{oc9 = Open[i+4];}
      if(oc1 <= oc5 && oc2 <= oc5 && oc3 <= oc5 && oc4 <= oc5 && oc6 <= oc5 && oc7 <= oc5 && oc8 <= oc5 && oc9 <= oc5){
        ObjectDelete("line_maxi");
        ObjectDelete("maxi_magenta");
        maxi = oc5 - 35*Point;
        ObjectCreate("line_maxi",OBJ_HLINE, 0, 0, maxi);
        ObjectSet("line_maxi",OBJPROP_COLOR,Aqua);
        ObjectSet("line_maxi",OBJPROP_STYLE,STYLE_DASHDOTDOT);
        comments("maxi",5,15,"Íîâûé ìàêñèìóì: "+DoubleToStr(maxi,5),Aqua);
        if(points != 0){global_maxi = transf_maxi;}
        break;
      }
    }
  }
  if(i >= 480 && (points == 0 || (points != 0 && global_maxi != transf_maxi))){
    ObjectDelete("line_maxi");
    maxi = Close[0] + range*15*Point;
    ObjectCreate("line_maxi",OBJ_HLINE,0,0,maxi);
    ObjectSet("line_maxi",OBJPROP_COLOR,Magenta);
    ObjectSet("line_maxi",OBJPROP_STYLE,STYLE_DASHDOTDOT);
    comments("maxi",45,15,"Íîâûé ìàêñèìóì: ",Aqua);
    comments("maxi_magenta",5,15,DoubleToStr(maxi,5),Magenta);
    if(points != 0){global_maxi = transf_maxi;}
  }
}

int find_mini(int points, int transf_mini){
  int i; 
  double oc1, oc2, oc3, oc4, oc5, oc6, oc7, oc8, oc9;
  for(i=4; i<=480; i++){
    if(Close[i] < Open[i]){oc5 = Close[i];}else{oc5 = Open[i];}
    if(oc5 < Close[0]-points*Point && oc5 < Close[1] && oc5 < Close[2] && oc5 < Close[3] && oc5 < Open[1] && oc5 < Open[2] && oc5 < Open[3] && (points == 0 || (points != 0 && global_mini != transf_mini))){
      if(Close[i-4] < Open[i-4]){oc1 = Close[i-4];}else{oc1 = Open[i-4];}
      if(Close[i-3] < Open[i-3]){oc2 = Close[i-3];}else{oc2 = Open[i-3];}
      if(Close[i-2] < Open[i-2]){oc3 = Close[i-2];}else{oc3 = Open[i-2];}
      if(Close[i-1] < Open[i-1]){oc4 = Close[i-1];}else{oc4 = Open[i-1];}
      if(Close[i+1] < Open[i+1]){oc6 = Close[i+1];}else{oc6 = Open[i+1];}
      if(Close[i+2] < Open[i+2]){oc7 = Close[i+2];}else{oc7 = Open[i+2];}
      if(Close[i+3] < Open[i+3]){oc8 = Close[i+3];}else{oc8 = Open[i+3];}
      if(Close[i+4] < Open[i+4]){oc9 = Close[i+4];}else{oc9 = Open[i+4];}
      if(oc1 >= oc5 && oc2 >= oc5 && oc3 >= oc5 && oc4 >= oc5 && oc6 >= oc5 && oc7 >= oc5 && oc8 >= oc5 && oc9 >= oc5){
        ObjectDelete("line_mini");
        ObjectDelete("mini_magenta");
        mini = oc5 + 35*Point;
        ObjectCreate("line_mini",OBJ_HLINE, 0, 0, mini);
        ObjectSet("line_mini",OBJPROP_STYLE,STYLE_DASHDOTDOT);
        ObjectSet("line_mini",OBJPROP_COLOR,Aqua);
        comments("mini",5,30,"Íîâûé ìèíèìóì: "+DoubleToStr(mini,5),Aqua);
        if(points != 0){global_mini = transf_mini;}
        break;
      }
    }
  }
  if(i >= 480 && (points == 0 || (points != 0 && global_mini != transf_mini))){
    ObjectDelete("line_mini");
    mini = Close[0] - range*15*Point;
    ObjectCreate("line_mini",OBJ_HLINE, 0, 0, mini);
    ObjectSet("line_mini",OBJPROP_STYLE,STYLE_DASHDOTDOT);
    ObjectSet("line_mini",OBJPROP_COLOR,Magenta);
    comments("mini",45,30,"Íîâûé ìèíèìóì: ",Aqua);
    comments("mini_magenta",5,30,DoubleToStr(mini,5),Magenta);
    if(points != 0){global_mini = transf_mini;}
  }
}

int check_extremes(){
  if(maxi != 0 && mini != 0){
    maxi = ObjectGet("line_maxi",OBJPROP_PRICE1);
    mini = ObjectGet("line_mini",OBJPROP_PRICE1);
    if(ObjectFind("maxi_magenta") != -1){
      comments("maxi",45,15,"Íîâûé ìàêñèìóì: ",Aqua);
      comments("maxi_magenta",5,15,DoubleToStr(maxi,5),Magenta);
    }
    else{comments("maxi",5,15,"Íîâûé ìàêñèìóì: "+DoubleToStr(maxi,5),Aqua);}
    if(ObjectFind("mini_magenta") != -1){
      comments("mini",45,30,"Íîâûé ìèíèìóì: ",Aqua);
      comments("mini_magenta",5,30,DoubleToStr(mini,5),Magenta);
    }
    else{comments("mini",5,30,"Íîâûé ìèíèìóì: "+DoubleToStr(mini,5),Aqua);}
  }
}

int instantiate_levels(){
  if(maxi != 0 && mini != 0 && trades <= 1){
    if(Close[0] > maxi && maxi-mini >= range*10*Point){draw_levels(maxi-20*Point,maxi,Red);}
    else if(Close[0] > maxi && maxi-mini < range*10*Point){
      find_maxi(100,TimeCurrent()); 
      ObjectDelete("buystop"); 
      ObjectDelete("buystop_takeprofit");
    }
    if(Close[0] < mini && maxi-mini >= range*10*Point){draw_levels(mini+20*Point,mini,Green);}
    else if(Close[0] < mini && maxi-mini < range*10*Point){
      find_mini(100,TimeCurrent());
      ObjectDelete("sellstop");
      ObjectDelete("sellstop_takeprofit");
    }
  }
}

int draw_levels(double price, double price_tag, color couleur){
  ObjectCreate("level_"+Time[0],OBJ_TREND,0,Time[0]-1800,price,Time[0]+1800,price);
  ObjectSet("level_"+Time[0],OBJPROP_COLOR,couleur);
  ObjectSet("level_"+Time[0],OBJPROP_RAY,False);
  ObjectSetText("level_"+Time[0],DoubleToStr(price_tag,5));
  if(couleur == Green){find_mini(100,TimeCurrent());}
  else if(couleur == Red){find_maxi(100,TimeCurrent());}
  last_time = Time[0];
  invalidate_levels(1,Red);
  invalidate_levels(1,Green);
  PlaySound("instantiation.wav");
  Sleep(500);
}

int invalidate_levels(int integer, color couleur){
  for(int i=integer; i<=ObjectsTotal()-1; i++){
    if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == couleur){
      ObjectSet("level_"+Time[i],OBJPROP_COLOR,RosyBrown);
      break;
    }
  }
}

int instantiate_stops(){
  if(maxi != 0 && mini != 0 && trades == 0){
    if(ObjectFind("buystop") == -1){draw_stops("buystop",maxi+stop_distance*10*Point);}
    if(ObjectFind("buystop_takeprofit") == -1){draw_stops("buystop_takeprofit",maxi+(stop_distance+range)*10*Point);}
    if(ObjectFind("sellstop") == -1){draw_stops("sellstop",mini-stop_distance*10*Point);}
    if(ObjectFind("sellstop_takeprofit") == -1){draw_stops("sellstop_takeprofit",mini-(stop_distance+range)*10*Point);}
    if(ObjectGet("buystop_takeprofit",OBJPROP_PRICE1)-ObjectGet("buystop",OBJPROP_PRICE1) < range*10*Point){
      ObjectSet("buystop_takeprofit",OBJPROP_PRICE1,ObjectGet("buystop",OBJPROP_PRICE1)+range*10*Point);
    }
    if(ObjectGet("sellstop",OBJPROP_PRICE1)-ObjectGet("sellstop_takeprofit",OBJPROP_PRICE1) < range*10*Point){
      ObjectSet("sellstop_takeprofit",OBJPROP_PRICE1,ObjectGet("sellstop",OBJPROP_PRICE1)-range*10*Point);
    }
  }else if(maxi != 0 && mini != 0 && trades > 0){
    ObjectDelete("buystop");
    ObjectDelete("buystop_takeprofit");
    ObjectDelete("sellstop");
    ObjectDelete("sellstop_takeprofit");
  }
}

int draw_stops(string name, double price){
  ObjectCreate(name,OBJ_HLINE,0,0,price);
  ObjectSet(name,OBJPROP_COLOR,Silver);
  ObjectSet(name,OBJPROP_STYLE,STYLE_DASHDOTDOT);
}

int open_first(){
  double green_buy, red_sell;
  int i;
  if(maxi != 0 && mini != 0){
    for(i=0; i<=47; i++){
      if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Red){
        red_sell = StrToDouble(ObjectDescription("level_"+Time[i]));
      }else if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Green){
        green_buy = StrToDouble(ObjectDescription("level_"+Time[i]));
      }
    }
    if(i >= 47 && last_time < Time[1]){
      if(green_buy > 0 && Close[0]-20*Point > green_buy && maxi-Close[0] >= range*10*Point && Close[0]-green_buy <= (range/2)*10*Point){
        double buy_tp = ((maxi-Close[0])/3)*2;
        order_send(OP_BUY,lot,Ask,Ask-20000*Point,Ask+buy_tp,"m_buy",Green);
      }else if(green_buy == 0){
        invalidate_levels(0,Green);
      }
      if(red_sell > 0 && Close[0]+20*Point < red_sell && Close[0]-mini >= range*10*Point && red_sell-Close[0] <= (range/2)*10*Point){
        double sell_tp = ((Close[0]-mini)/3)*2;
        order_send(OP_SELL,lot,Bid,Bid+20000*Point,Bid-sell_tp,"m_sell",Red);
      }else if(red_sell == 0){
        invalidate_levels(0,Red);
      }
    }
    if(Close[0] > ObjectGet("buystop",OBJPROP_PRICE1) && ObjectFind("buystop_takeprofit") != -1){
      order_send(OP_BUY,lot,Ask,Ask-20000*Point,ObjectGet("buystop_takeprofit",OBJPROP_PRICE1),"m_buy",Green);
    }
    if(Close[0] < ObjectGet("sellstop",OBJPROP_PRICE1) && ObjectFind("sellstop_takeprofit") != -1){
      order_send(OP_SELL,lot,Bid,Bid+20000*Point,ObjectGet("sellstop_takeprofit",OBJPROP_PRICE1),"m_sell",Red);
    }
  }
}

int open_second(int order_ticket){
  OrderSelect(order_ticket,SELECT_BY_TICKET);
  double green_buy, red_sell;
  int i;
  if(maxi != 0 && mini != 0){
    for(i=0; i<=47; i++){
      if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Red){
        red_sell = StrToDouble(ObjectDescription("level_"+Time[i]));
      }else if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Green){
        green_buy = StrToDouble(ObjectDescription("level_"+Time[i]));
      }
    }
    if(i >= 47 && last_time < Time[2]){
      if(green_buy > 0 && Close[0]-20*Point > green_buy && OrderOpenPrice()-Close[0] >= range*10*Point && Close[0]-green_buy <= (range/2)*10*Point){
        double buyDouble_tp = (OrderOpenPrice()-Close[0])/3+20*Point;
        if(trades == 1){order_send(OP_BUY,OrderLots()*2,Ask,Ask-20000*Point,Ask+buyDouble_tp,"m_buyDouble",Green);}
      }else if(green_buy == 0){
        invalidate_levels(0,Green);
      }
      if(red_sell > 0 && Close[0]+20*Point < red_sell && Close[0]-OrderOpenPrice() >= range*10*Point && red_sell-Close[0] <= (range/2)*10*Point){
        double sellDouble_tp = (Close[0]-OrderOpenPrice())/3+20*Point;
        if(trades == 1){order_send(OP_SELL,OrderLots()*2,Bid,Bid+20000*Point,Bid-sellDouble_tp,"m_sellDouble",Red);}
      }else if(red_sell == 0){
        invalidate_levels(0,Red);
      }
    }
  }
}

int order_send(int type, double order_lot, double price, double sl, double tp, string comment, color couleur){
  if(stochastic == FALSE || (stochastic == TRUE && (type == OP_BUY && h1 > h1_1+2) || (type == OP_SELL && h1 < h1_1-2))){
    int ticket = OrderSend(Symbol(),type,order_lot,price,3,sl,tp,comment,0,0,couleur);
    if(ticket < 0){GetLastError();}
    else{
      if(ObjectFind("takeprofit") != -1){ObjectSet("takeprofit",OBJPROP_PRICE1,tp);}
      for(int i=ObjectsTotal()-1; i>=0; i--){
        if(ObjectType(ObjectName(i)) == OBJ_TREND){
          if(ObjectGet(ObjectName(i),OBJPROP_COLOR) == Red || ObjectGet(ObjectName(i),OBJPROP_COLOR) == Green){
            ObjectDelete(ObjectName(i));
            break;
          }
        }
      }
    }
  }else{if(last_cancel < Time[2]){PlaySound("timeout.wav"); last_cancel = Time[0];}}
}

int change_label(){
  double adx_h1 = MathFloor(iADX(NULL,PERIOD_H1,14,PRICE_CLOSE,MODE_MAIN,0));
  double adx_h1_1 = MathFloor(iADX(NULL,PERIOD_H1,14,PRICE_CLOSE,MODE_MAIN,1));
  for(int i=ObjectsTotal(); i>=0; i--){
    string description = ObjectDescription(ObjectName(i));
    if(StringFind(description,"m_",0) != -1 && ObjectType(ObjectName(i)) == OBJ_ARROW && StringLen(description) <= 12){
      ObjectSetText(ObjectName(i),description+"; iStoch H1: "+DoubleToStr(h1,0)+" ("+DoubleToStr(h1_1,0)+"); H4: "+DoubleToStr(h4,0)+" ("+DoubleToStr(h4_1,0)+"); "+DoubleToStr(adx_h1,0)+" <> "+DoubleToStr(adx_h1_1,0));
      break;
    }
  }
}

int define_takeprofit(int order_ticket){
  OrderSelect(order_ticket,SELECT_BY_TICKET);
  int order_type = OrderType();
  if(ObjectFind("takeprofit") == -1){
    ObjectCreate("takeprofit",OBJ_HLINE,0,0,OrderTakeProfit());
    ObjectSet("takeprofit",OBJPROP_COLOR,Gold);
    ObjectSet("takeprofit",OBJPROP_STYLE,STYLE_DASHDOTDOT);
  }else{
    double current_takeprofit = ObjectGet("takeprofit",OBJPROP_PRICE1);
    for(int i=0; i<=OrdersTotal()-1; i++){
      OrderSelect(i,SELECT_BY_POS);
      if(current_takeprofit != OrderTakeProfit() && order_type == OrderType()){
        OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),current_takeprofit,0,Red);
      }
    }
  }
}

int close_manual(){
  if(ObjectGet("close_manual",OBJPROP_XDISTANCE) > 30){
    comments("close_manual",40,105,"Ðó÷íîå çàêðûòèå ÂÊË.",Magenta);  
    for(int i=0; i<=OrdersTotal()-1; i++){
      OrderSelect(i,SELECT_BY_POS);
      if(OrderType() == OP_BUY && (OrderComment() == "m_buy" || OrderComment() == "m_buyDouble")){
        OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
      }else if(OrderType() == OP_SELL && (OrderComment() == "m_sell" || OrderComment() == "m_sellDouble")){
        OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
      }
    }
  }
  else{comments("close_manual",5,105,"Ðó÷íîå çàêðûòèå ÂÛÊË.",Aqua);}
}

int close_plus(){
  if(ObjectGet("close_plus",OBJPROP_XDISTANCE) > 30){
    comments("close_plus",40,120,"Çàêðûòèå â ïëþñå ÂÊË.",Magenta);  
    for(int i=0; i<=OrdersTotal()-1; i++){
      OrderSelect(i,SELECT_BY_POS);
      if(OrderType() == OP_BUY && (OrderComment() == "m_buy" || OrderComment() == "m_buyDouble") && OrderProfit() > 0){
        OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
      }else if(OrderType() == OP_SELL && (OrderComment() == "m_sell" || OrderComment() == "m_sellDouble") && OrderProfit() > 0){
        OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
      }
    }
  }
  else{comments("close_plus",5,120,"Çàêðûòèå â ïëþñå ÂÛÊË.",Aqua);}
}

int trail(){
  if(ObjectGet("trail",OBJPROP_XDISTANCE) > 30){
    comments("trail",40,135,"Äèíàì. òðåéëèí-ñòîï ÂÊË.",Magenta);
    if(trades > 0){
      for(int i=0; i<=OrdersTotal()-1; i++){
        OrderSelect(i,SELECT_BY_POS);
        double profitability = OrderProfit()/OrderLots();
        if(OrderStopLoss() == 0 && OrderType() == OP_BUY){OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-20000*Point,OrderTakeProfit(),0,Red);}
        if(OrderStopLoss() == 0 && OrderType() == OP_SELL){OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+20000*Point,OrderTakeProfit(),0,Red);}
        if(profitability > 40 && OrderType() == OP_BUY && (OrderComment() == "m_buy" || OrderComment() == "m_buyDouble")){
          if(OrderStopLoss() != 0 && OrderStopLoss()-OrderOpenPrice() < (Bid-OrderOpenPrice())/2){
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(Bid-OrderOpenPrice())/2,OrderTakeProfit(),0,Red);
          }
        }else if(profitability > 40 && OrderType() == OP_SELL && (OrderComment() == "m_sell" || OrderComment() == "m_sellDouble")){
          if(OrderStopLoss() != 0 && OrderOpenPrice()-OrderStopLoss() < (OrderOpenPrice()-Ask)/2){
            OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(OrderOpenPrice()-Ask)/2,OrderTakeProfit(),0,Red);
          }
        }
      }
    }
  }else{
    comments("trail",5,135,"Äèíàì. òðåéëèí-ñòîï ÂÛÊË.",Aqua);
    if(trades > 0){
      for(int j=0; j<=OrdersTotal()-1; j++){
        OrderSelect(j,SELECT_BY_POS);
        if(OrderStopLoss() == 0 && OrderType() == OP_BUY){OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-20000*Point,OrderTakeProfit(),0,Red);}
        if(OrderStopLoss() == 0 && OrderType() == OP_SELL){OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+20000*Point,OrderTakeProfit(),0,Red);}
        if(OrderType() == OP_BUY && (OrderComment() == "m_buy" || OrderComment() == "m_buyDouble")){
          if(OrderStopLoss() != 0 && OrderStopLoss() < Bid-trail*10*Point && OrderOpenPrice() < Bid-trail*10*Point){
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-trail*10*Point,OrderTakeProfit(),0,Red);
          }
        }else if(OrderType() == OP_SELL && (OrderComment() == "m_sell" || OrderComment() == "m_sellDouble")){
          if(OrderStopLoss() != 0 && OrderStopLoss() > Ask+trail*10*Point && OrderOpenPrice() > Ask+trail*10*Point){
            OrderModify(OrderTicket(),OrderOpenPrice(),Ask+trail*10*Point,OrderTakeProfit(),0,Red);
          }
        }
      }
    }
  }
}

int comments(string name, int x, int y, string texto, color couleur){
  if(ObjectFind(name) == -1){ObjectCreate(name,OBJ_LABEL,0,0,0);}
  ObjectSet(name,OBJPROP_XDISTANCE,x);
  ObjectSet(name,OBJPROP_YDISTANCE,y);
  ObjectSet(name,OBJPROP_CORNER,corner);
  ObjectSetText(name,texto,10,"Times New Roman",couleur);
}

int play_sound(){
  for(int i=OrdersTotal()-1; i>=0; i--){
    OrderSelect(i,SELECT_BY_POS);
    if(OrderType() == OP_BUY || OrderType() == OP_SELL){
      double profit = OrderProfit()/OrderLots();
      if(profit > 0 && profit > profit_max){
        profit_max = profit;
        if(MathFloor((profit/10)/0.5) > plus){
          plus = MathFloor((profit/10)/0.5);
          minus = 0;
          minus_num = 0;
          if(MathFloor(MathAbs(profit/100)) == plus_num){PlaySound("plus.wav");}
          else if(MathFloor(MathAbs(profit/100)) > plus_num){
            plus_num = MathFloor(MathAbs(profit/100));
            PlaySound("new_level.wav");
            Sleep(1000);
            
          }
        }
      }else if(profit < 0 && profit < profit_max){
        profit_max = profit;
        if(MathFloor((profit/10)/0.5) < minus){
          minus = MathFloor((profit/10)/0.5);
          plus = 0;
          plus_num = 0;
          if(MathFloor(MathAbs(profit/100)) == minus_num){PlaySound("tick.wav");}
          else if(MathFloor(MathAbs(profit/100)) > minus_num){
            minus_num = MathFloor(MathAbs(profit/100));
            PlaySound("new_level.wav");
            Sleep(1000);
          }
        }
      }
    }
    comments("profit",5,75,"Ïðèáûëüíîñòü: "+DoubleToStr(profit/10,1)+" (ìàêñ. "+DoubleToStr(profit_max/10,1)+")",Aqua);
    break;
  }
}

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 ---