maximus_v9_swith_commentsx

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 strategyChecks for the total of closed ordersIt Closes Orders by itself
Indicators Used
Stochastic oscillatorStandard Deviation indicator
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
maximus_v9_swith_commentsx
#property copyright "Evgeny I. SHCHERBINA"
//maximus_vX.mq4
//12.04.2011
//Ïðè èñïîëüçîâàíèè êîíöåïòîâ ñîâåòíèêà ññûëêà íà àâòîðà îáÿçàòåëüíà.

/*Îïèñàíèå ñîâåòíèêà maximus_vX
1. Ïðîâåðåííàÿ ðàáîòà íà 15-ìèíóòíîì ãðàôèêå åâðîäîëëàðà. Äëÿ äðóãèõ òàéìôðåéìîâ è ïàð ðåêîìåíäóåòñÿ ïðîâåñòè
òåñòèðîâàíèå ñ öåëüþ ïîäáîðà íàèáîëåå îïòèìàëüíûõ ïàðàìåòðîâ.
2. Ïîñêîëüêó èçíà÷àëüíî ñîâåòíèê ïðåäíàçíà÷àëñÿ äëÿ òîðãîâëè âî âðåìÿ ôëåòà, ðåêîìåíäóåòñÿ âûêëþ÷àòü ñîâåòíèê,
êîãäà íà ðûíêå îæèäàþòñÿ ñåðüåçíûå ìàêðîýêîíîìè÷åñêèå äàííûå (1-2 ðàçà â ìåñÿö).
3. Ñîâåòíèê îòêðûâàåò îñíîâíóþ ñäåëêó è êîìïåíñàöèîííóþ, åñëè îñíîâíàÿ âûõîäèò â ìèíóñ. Ìàêñèìàëüíîå òåîðåòè÷åñêîå êîëè÷åñòâî
ñäåëîê - 10. Îäíàêî íà ïðàêòèêå îäíîâðåìåííî ìîæåò áûòü íå áîëåå 6 ñäåëîê. 
4. Âîçìîæíî äâà òèïà ñäåëîê: 
  à) Íà ïðîáîå - öåíà ïðîáèâàåò ìàêñèìóì èëè ìèíèìóì è èäåò äàëüøå. Öåíà íå âîçâðàùàåòñÿ. Ñðàáàòûâàåò ñäåëêà â íàïðàâëåíèè ïðîáîÿ.
  á) Íà ðàçâîðîòå - ïðè äîñòèæåíèè ìàêñèìóìà èëè ìèíèìóìà âûñòàâëÿåòñÿ ìåòêà ïðåäâàðèòåëüíîãî ïðîáîÿ óðîâíÿ.
  Åñëè öåíà ðàçâîðà÷èâàåòñÿ è îïóñêàåòñÿ íèæå (ïîäíèìàåòñÿ âûøå) ìåòêè, îòêðûâàåòñÿ ñäåëêà.
5. Êîìïåíñàöèîííàÿ ñäåëêà îòêðûâàåòñÿ îò ñëåäóþùåãî ýêñòðåìóìà ïî äâîéíîìó îáúåìó â íàïðàâëåíèè îñíîâíîé ñäåëêè.
Óðîâíè òåéêïðîôèòà îáåèõ ñäåëîê ñâîäÿòñÿ â îäíó ëèíèþ. Òàêèì îáðàçîì, öåíà äîëæíà ðåàëèçîâàòü êîððåêöèþ íà òðåòü,
÷òîáû îáå ñäåëêè çàêðûëèñü ñ íåáîëüøèì ïëþñîì (áåçóáûòî÷íàÿ ñòðàòåãèÿ).
6. Âñå óðîâíè îïðåäåëÿþòñÿ ñîâåòíèêîì àâòîìàòè÷åñêè. Èõ òàêæå ìîæíî ïåðåíîñèòü âðó÷íóþ, íîâûå çíà÷åíèÿ ó÷èòûâàþòñÿ
ñîâåòíèêîì. Ïðè íåîáõîäèìîñòè ñîâåòíèê îòïðàâëÿåò íîâîå çíà÷åíèå óðîâíÿ íà ñåðâåð.
7. Òàáëî ñîâåòíèêà èìååò òðè êíîïêè: "Çàêðûòèå â ïëþñå", "Ðó÷íîå çàêðûòèå" è "Äèíàìè÷åñêèé òðåéëèí-ñòîï". Âêëþ÷åíèå êíîïêè
ïðîèñõîäèò ïóòåì åå ïåðåìåùåíèÿ âëåâî - êíîïêà èçìåíèò öâåò è âêëþ÷èò ñîîòâåòñòâóþùóþ ôóíêöèþ. ×òîáû âûêëþ÷èòü êíîïêó,
ïåðåìåñòèòå åå âïðàâî. (Óñòàíîâèòü ôëàã íàïðîòèâ ïóíêòà "Âûäåëÿòü îáúåêò ïî îäèíî÷íîìó êëèêó ìûøè" â ìåíþ
Ìåòàòðåéäåðà Íàñòðîéêè >> Îáúåêòû.)
8. Êíîïêà "Äèíàìè÷åñêèé òðåéëèí-ñòîï" çàìåíÿåò ôèêñèðîâàííûé òðåéëèí-ñòîï â 20 ïóíêòîâ íà äèíàìè÷åñêèé - 50%, âêëþ÷åíèå ïðè
äîñòèæåíèè 4 ïóíêòîâ ïðèáûëè.
9. ×åòûðå öâåòà - Green, Red, Lime è Maroon - çàðåçåðâèðîâàíû çà ñîâåòíèêîì è èñïîëüçóþòñÿ äëÿ îïðåäåëåíèÿ 
óðîâíåé, îòêðûòèÿ è çàêðûòèÿ ñäåëîê. Íå ñëåäóåò ñîçäàâàòü íà ãðàôèêå äðóãèå îáúåêòû ñ ýòèìè öâåòàìè, òàê êàê îíè
ìîãóò ïîìåøàòü ïðàâèëüíîé ðàáîòå ñîâåòíèêà.
10 Ðÿä íåîáõîäèìûõ ïàðàìåòðîâ ñîõðàíÿåòñÿ â îïèñàíèè ñîçäàâàåìûõ íà ãðàôèêå îáúåêòîâ.
11. Íåñêîëüêî äðóãèõ èíòóèòèâíî ïîíÿòíûõ ôóíêöèé è ïàðàìåòðîâ (èíôîðìàöèîííîå òàáëî è ñîïðîâîæäåíèå ñäåëîê).

========================================================================================================================

Èñòîðèÿ èçìåíåíèé
maximus_v2 (14.06.2011)
1. Àâòîìàòè÷åñêèé ðàñ÷åò ëîòà â çàâèñèìîñòè îò óñòàíîâëåííîãî ðèñêà.
2. Êîììåíòèðîâàíèå ñäåëîê, ñîâåòíèê ìîæåò áûòü ñîâìåùåí ñ äðóãèìè ñòðàòåãèÿìè.

maximus_v3 (01.07.2011)
3. Îïòèìèçàöèÿ òàáëî ñîâåòíèêà.

maximus_v4 (08.07.2011)
4. Àâòîìàòè÷åñêîå îïðåäåëåíèå óðîâíåé äîïîëíåíî ðó÷íûì èçìåíåíèåì. Íîâûå çíà÷åíèÿ ó÷èòûâàþòñÿ ñîâåòíèêîì äëÿ ðàñ÷åòà
íåîáõîäèìûõ ïàðàìåòðîâ.
5. Äîáàâëåíû êíîïêè "Ðó÷íîå çàêðûòèå", "Çàêðûòèå â ïëþñå" è "Äèíàìè÷åñêèé òðåéëèí-ñòîï".
6. Óäàëåíî îïðåäåëåíèå ôëåòîâîãî êîðèäîðà â ñèëó íåçíà÷èòåëüíîé ïðàêòè÷åñêîé ïîëüçû.

maximus_v5 (10.07.2011)
7. Óñòàíîâëåí ôèëüòð ïî èíäèêàòîðó Ñòîõàñòèê. Ôèëüòð âêëþ÷àåòñÿ ÷åðåç Ìåòàòðåéäåð (ïî óìîë÷àíèþ âûêëþ÷åí).

maximus_v6 (14.07.2011)
8. Èçìåíåíèå ïîðÿäêà îòêðûòèÿ ñäåëîê íà ðàçâîðîòå, äîáàâëåíèå ìåòêè ïðåäâàðèòåëüíîãî ïðîáîÿ. Äëÿ îòêðûòèÿ ñäåëêè â îáðàòíîì
íàïðàâëåíèè òðåáóåòñÿ äåéñòâèòåëüíûé ðàçâîðîò.

maximus_v7 (17.07.2011)
9. Äîáàâëåíî îòêðûòèå ñäåëîê íà ïðîáîé. 
10. Óâåëè÷åíî ìàêñèìàëüíîå êîëè÷åñòâî ñäåëîê - ñ äâóõ äî 10 (ìàêñèìàëüíîå òåîðåòè÷åñêîå 
êîëè÷åñòâî ñäåëîê).
11. Äîáàâëåíî äâà ïîäâèäà ñäåëîê: òàê íàçûâàåìàÿ "äîëèâêà" è âîëàòèëüíàÿ ñäåëêà (åñëè ïðîèñõîäèò ðåçêèé îòñêîê îò óðîâíÿ, ðàññ÷èòûåòñÿ
ïî ðàçíèöå ñòàíäàðòíîãî îòêëîíåíèÿ).
Ýòè äâà ïîäâèäà îòêðûâàþòñÿ íåçàâèñèìî îò ñóùåñòâóþùèõ ñäåëîê, îòñþäà ôîðìóëèðîâêà "òåîðåòè÷åñêîå ìàêñèìàëüíîå êîëè÷åñòâî ñäåëîê".
*/

extern bool sound = TRUE;               //Âêëþ÷åíèå è âûêëþ÷åíèå çâóêà
extern bool stochastic = FALSE;         //Âêëþ÷åíèå è âûêëþ÷åíèå ôèëüòðà ïî ñòîõàñòèêó
extern double deviation = 6;            //Ðàçíèöà ñòàíäàðòíîãî îòêëîíåíèÿ â öåëûõ ÷èñëàõ
extern int range = 40;                  //Ìèíèìàëüíûé äèàïàçîí ìåæäó ñîïðîòèâëåíèåì è ïîääåðæêîé
extern int risk = 1000;                 //Ñîîòíîøåíèå ðèñêà - äåïîçèò ê ëîòó
extern int trail = 20;                  //Òðåéëèí-ñòîï
extern int distance = 5;                //Ðàññòîÿíèå îò ìåòêè ïðîáîÿ, ïîñëå êîòîðîãî îòêðûâàåòñÿ ñäåëêà

double green_buy, d1, d1_1, h1, h1_1, h4, h4_1, lot, maxi, mini, minus, minus_num, plus, plus_num, profit_max, red_sell, spread, st, st_1;
int corner, global_maxi, global_mini, last_cancel, trades;

int init(){
  define_corner();//Îïðåäåëÿåò óãîë, â êîòîðîì ðàñïîëàãàåòñÿ èíôîðìàöèîííîå òàáëî
  find_maxi(0,0);//Îïðåäåëÿåò ìàêñèìóì (ñîïðîòèâëåíèå)
  find_mini(0,0);//Îïðåäåëåÿåò ìèíèìóì (ïîääåðæêó)
}

int start(){
  comments("line",5,150,corner,"---------------------------------------------",Aqua);
  d1 = MathFloor(iStochastic(NULL,PERIOD_D1,5,3,3,MODE_LWMA,0,MODE_MAIN,0));
  d1_1 = MathFloor(iStochastic(NULL,PERIOD_D1,5,3,3,MODE_LWMA,0,MODE_MAIN,1));
  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));
  st = iStdDev(NULL,0,12,0,MODE_LWMA,PRICE_CLOSE,0)*10000;
  st_1 = iStdDev(NULL,0,12,0,MODE_LWMA,PRICE_CLOSE,1)*10000;
  if(st-st_1 > deviation){comments("iStDev",5,75,corner,"iStDev: "+DoubleToStr(st,2)+" - "+DoubleToStr(st_1,2)+" = "+DoubleToStr((st-st_1),2),Magenta);}
  else{comments("iStDev",5,75,corner,"iStDev: "+DoubleToStr(st,2)+" - "+DoubleToStr(st_1,2)+" = "+DoubleToStr((st-st_1),2),Aqua);}
  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,corner,"Äèàïàçîí: "+DoubleToStr((maxi-mini)/Point/10,1)+" ("+range+" ïî óìîë÷.)",Aqua);
  comments("lot",5,60,corner,"Ëîò: "+DoubleToStr(lot,3)+"; ñïðåä: "+DoubleToStr(spread/10,1)+"; "+DoubleToStr((AccountProfit()/AccountBalance())*100,2)+"%",Aqua);
  if(stochastic == FALSE){comments("stochastic",5,90,corner,"H1: "+DoubleToStr(h1,0)+" ("+DoubleToStr(h1_1,0)+"); H4: "+DoubleToStr(h4,0)+" ("+DoubleToStr(h4_1,0)+"); D1: "+DoubleToStr(d1,0)+" ("+DoubleToStr(d1_1,0)+")",Aqua);}
  else{comments("stochastic",5,90,corner,"H1: "+DoubleToStr(h1,0)+" ("+DoubleToStr(h1_1,0)+"); H4: "+DoubleToStr(h4,0)+" ("+DoubleToStr(h4_1,0)+"); D1: "+DoubleToStr(d1,0)+" ("+DoubleToStr(d1_1,0)+")",Magenta);}
  double buy_lots, buy_profits, sell_lots, sell_profits;
  int buy_ticket, buy2_ticket, buys, i, sell_ticket, sell2_ticket, sells;
  for(i=0; i<OrdersTotal(); i++){//Ïåðå÷èñëåíèå îòêðûòûõ ñäåëîê
    OrderSelect(i,SELECT_BY_POS);
    if(OrderType() == OP_BUY && StringFind(OrderComment(),"m_buy",0) != -1){
      buys++;
      buy_lots += OrderLots();
      buy_profits += (MathAbs(OrderProfit()));
      if(OrderComment() == "m_buy"){buy_ticket = OrderTicket();}
      else if(OrderComment() == "m_buy2"){buy2_ticket = OrderTicket();}
    }
    if(OrderType() == OP_SELL && StringFind(OrderComment(),"m_sell",0) != -1){
      sells++;
      sell_lots += OrderLots();
      sell_profits += (MathAbs(OrderProfit()));
      if(OrderComment() == "m_sell"){sell_ticket = OrderTicket();}
      else if(OrderComment() == "m_sell2"){sell2_ticket = OrderTicket();}
    }
    if(OrderProfit()/OrderLots() < -10){unsure_trade(OrderTicket());}
    add(OrderTicket());
    define_takeprofit(OrderTicket());
  }
  if(i >= OrdersTotal()-1){//Ïåðå÷èñëåíèå îòêðûòûõ ñäåëîê âûïîëíåíî. Âûïîëíåíèå íåîáõîäèìûõ äåéñòâèé
    if(buys+sells > trades){//Åñëè åñòü íîâàÿ ñäåëêà
      trades = buys+sells;
      change_label();//Èçìåíÿåò ïîäïèñü "òðåóãîëüíèêà" ñäåëêè (îáúåêò íà ãðàôèêå)
      if(sound == TRUE){PlaySound("news.wav");}
      Sleep(1000);
    }
    if(buys+sells < trades){//Åñëè ñäåëêà çàêðûëàñü
      trades = buys+sells;
      define_corner();
      find_maxi(0,0);
      find_mini(0,0);
      redefine_takeprofit();//Çàíîâî ðàññ÷èòûâàåò óðîâíè òåéêïðîôèòà
      GlobalVariableSet("last_trade",Time[0]);
      profit_max = 0;
      if(sound == TRUE){PlaySound("ok.wav");}
      Sleep(1000);
    }
    if(trades == 0){comments("profit",5,165,corner,"Ïðèáûëü: 0.0 (ìàêñ. 0.0)",Aqua); ObjectSet("close_manual",OBJPROP_XDISTANCE,5);}
    if(buys == 0){ObjectDelete("takeprofit_buy"); open_first(OP_BUY,st-st_1);}
    if(buys == 1){open_second(buy_ticket,"m_buy2",buy_lots,Close[0]+(((buy_profits/buy_lots/2)+10)*Point));}
    if(buys == 2){open_second(buy2_ticket,"m_buy3",buy_lots/2,Close[0]+(((buy_profits/buy_lots/2)+10)*Point));}
    if(sells == 0){ObjectDelete("takeprofit_sell"); open_first(OP_SELL,st-st_1);}
    if(sells == 1){open_second(sell_ticket,"m_sell2",sell_lots,Close[0]-(((sell_profits/sell_lots/2)+10)*Point));}
    if(sells == 2){open_second(sell2_ticket,"m_sell3",sell_lots/2,Close[0]-(((sell_profits/sell_lots/2)+10)*Point));}
  }
  calculate_compensation();//Ðàññ÷èòûâàåò êîìïåíñàöèþ (èçíà÷àëüíî - ïî äîñòèæåíèþ íóëåâîé ïðîôèòíîñòè)
  check_extremes();//Ïðîâåðÿåò ïîëîæåíèå ïîääåðæêè è ñîïðîòèâëåíèÿ
  close_manual();//Çàêðûâàåò âñå ñäåëêè
  close_plus();//Çàêðûâàåò ïëþñîâûå ñäåëêè
  instantiate_levels();//Îïðåäåëÿåò óðîâíè
  play_sound();//Çâóê
  trail();//Òðåéëèí-ñòîï
  volatile_trade();//Îòêðûâàåò âîëàòèëüíóþ ñäåëêó (êîãäà ïðîèñõîäèò ðåçêèé îòñêîê îò óðîâíÿ)
}

int deinit(){
  ObjectDelete("takeprofit_buy");
  ObjectDelete("takeprofit_sell");
}

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,corner,"Íîâûé ìàêñèìóì: "+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*10*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,corner,"Íîâûé ìàêñèìóì: ",Aqua);
    comments("maxi_magenta",5,15,corner,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,corner,"Íîâûé ìèíèìóì: "+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*10*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,corner,"Íîâûé ìèíèìóì: ",Aqua);
    comments("mini_magenta",5,30,corner,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,corner,"Íîâûé ìàêñèìóì: ",Aqua);
      comments("maxi_magenta",5,15,corner,DoubleToStr(maxi,5),Magenta);
    }
    else{comments("maxi",5,15,corner,"Íîâûé ìàêñèìóì: "+DoubleToStr(maxi,5),Aqua);}
    if(ObjectFind("mini_magenta") != -1){
      comments("mini",45,30,corner,"Íîâûé ìèíèìóì: ",Aqua);
      comments("mini_magenta",5,30,corner,DoubleToStr(mini,5),Magenta);
    }
    else{comments("mini",5,30,corner,"Íîâûé ìèíèìóì: "+DoubleToStr(mini,5),Aqua);}
  }
}

int instantiate_levels(){
  if(maxi != 0 && mini != 0){
    if(Close[0] > maxi && maxi-mini >= range*10*Point){draw_levels(maxi,Maroon);}
    else if(Close[0] > maxi && maxi-mini < range*10*Point){
      find_maxi(100,TimeCurrent()); 
    }
    if(Close[0] < mini && maxi-mini >= range*10*Point){draw_levels(mini,Green);}
    else if(Close[0] < mini && maxi-mini < range*10*Point){
      find_mini(100,TimeCurrent());
    }
  }
}

int draw_levels(double price, color couleur){
  if(ObjectFind("level_"+Time[0]) == -1){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_WIDTH,3);
  ObjectSet("level_"+Time[0],OBJPROP_RAY,False);
  ObjectSetText("level_"+Time[0],StringConcatenate(DoubleToStr(price,5),"; ",DoubleToStr(st-st_1,2)));
  if(couleur == Green){find_mini(100,TimeCurrent()); green_buy = price; red_sell = 0;}
  else if(couleur == Maroon){find_maxi(100,TimeCurrent()); red_sell = price; green_buy = 0;}
  if(st-st_1 < deviation){
    GlobalVariableSet("last_level",Time[0]);
    if(couleur == Green){ObjectSet("level_"+Time[0],OBJPROP_COLOR,Lime);}
    else{ObjectSet("level_"+Time[0],OBJPROP_COLOR,Red);}
  }else{
    GlobalVariableSet("last_level",Time[1]);
    GlobalVariableSet("last_trade",Time[1]);
  }
  invalidate_levels(1,Green,Lime);
  invalidate_levels(1,Red,Maroon);
  if(sound == TRUE){PlaySound("instantiation.wav");}
  Sleep(500);
}

int invalidate_levels(int integer, color couleur1, color couleur2){
  for(int i=integer; i<100; i++){
    if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == couleur1 || ObjectGet("level_"+Time[i],OBJPROP_COLOR) == couleur2){
      ObjectSet("level_"+Time[i],OBJPROP_COLOR,RosyBrown);
      break;
    }
  }
}

int add(int order_ticket){
  OrderSelect(order_ticket,SELECT_BY_TICKET);
  int order_type = OrderType();
  if(OrderProfit()/OrderLots() > trail*10 && st-st_1 > deviation && GlobalVariableGet("last_trade") < Time[0]){
    OrderSelect(OrdersTotal()-1,SELECT_BY_POS);
    if(OrderMagicNumber() < MathFloor(st-st_1)){
      open_first(order_type,st-st_1);
    }
  }
}

int volatile_trade(){
  double order_lot, order_profit, stdev;
  int first_buys, first_sells;
  for(int i=0; i<=47; i++){
    stdev = StrToDouble(StringSubstr(ObjectDescription("level_"+Time[i]),8));
    if(st-st_1 < stdev-2 && GlobalVariableGet("last_trade") < Time[0]){
      if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Green){
        for(int j=0; j<OrdersTotal(); j++){
          OrderSelect(j,SELECT_BY_POS);
          if(OrderType() == OP_BUY && OrderComment() == "m_buy"){
            first_buys++; 
            order_lot = OrderLots();
            order_profit = OrderProfit();
          }
        }
        if(order_lot != 0){
          if(first_buys < 2 && MathAbs(order_profit/order_lot/10) > trail){open_first(OP_BUY,st-st_1); break;}
        }
      }else if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Maroon){
        for(int k=0; k<OrdersTotal(); k++){
          OrderSelect(k,SELECT_BY_POS);
          if(OrderType() == OP_SELL && OrderComment() == "m_sell"){
            first_sells++;
            order_lot = OrderLots();
            order_profit = OrderProfit();
          }
        }if(order_lot != 0){
          if(first_sells < 2 && MathAbs(order_profit/order_lot/10) > trail){open_first(OP_SELL,st-st_1); break;}
        }
      }
    }
  }
}

int open_first(int type, double magic){
  double stdev;
  int i;
  if(maxi != 0 && mini != 0){
    for(i=0; i<=47; i++){
      if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Red || ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Maroon){
        red_sell = StrToDouble(StringSubstr(ObjectDescription("level_"+Time[i]),0,7));
        stdev = StrToDouble(StringSubstr(ObjectDescription("level_"+Time[i]),8));
      }else if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Green || ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Lime){
        green_buy = StrToDouble(StringSubstr(ObjectDescription("level_"+Time[i]),0,7));
        stdev = StrToDouble(StringSubstr(ObjectDescription("level_"+Time[i]),8));
      }
    }
    if(i >= 47){
      if(type == OP_BUY && GlobalVariableGet("last_trade") < Time[0] && 
      ((Close[0]+distance*10*Point > Open[0] && GlobalVariableGet("last_level") < Time[0]) || (stdev > deviation))){
        if(green_buy > 0 && Close[0]-distance*10*Point > green_buy && maxi-Close[0] >= range*10*Point){
          //Çåëåíàÿ ìåòêà, ðàçâîðîò, ïîêóïêà
          double buy_tp = ((maxi-Close[0])/3)*2;
          order_send(OP_BUY,lot,Ask,Ask-20000*Point,Ask+buy_tp,"m_buy",magic,Green);
        }
      }
      if(green_buy > 0 && Close[0]+distance*10*Point < green_buy && green_buy-Close[0] <= range*10*Point && Open[0]-distance*10*Point > Close[0]){
        //Çåëåíàÿ ìåòêà, ïðîáîé, ïðîäàæà
        if(type == OP_SELL){order_send(OP_SELL,lot,Bid,Bid+20000*Point,Bid-range*20*Point,"m_sell",magic,Red);}
      }
      if(green_buy == 0){
        invalidate_levels(0,Green,Lime);
      }
      if(type == OP_SELL && GlobalVariableGet("last_trade") < Time[0] &&
      ((Open[0]-distance*10*Point > Close[0] && GlobalVariableGet("last_level") < Time[0]) || (stdev > deviation))){
        if(red_sell > 0 && Close[0]+distance*10*Point < red_sell && Close[0]-mini >= range*10*Point){
          //Êðàñíàÿ ìåòêà, ðàçâîðîò, ïðîäàæà
          double sell_tp = ((Close[0]-mini)/3)*2;
          order_send(OP_SELL,lot,Bid,Bid+20000*Point,Bid-sell_tp,"m_sell",magic,Red);
        }
      }
      if(red_sell != 0 && Close[0]-distance*10*Point > red_sell && Close[0]-red_sell <= range*10*Point && Close[0]-distance*10*Point > Open[0]){
        //Êðàñíàÿ ìåòêà, ïðîáîé, ïîêóïêà
        if(type == OP_BUY){order_send(OP_BUY,lot,Ask,Ask-20000*Point,Ask+range*20*Point,"m_buy",magic,Green);}
      }
      if(red_sell == 0){
        invalidate_levels(0,Red,Maroon);
      }
    }
  }
}

int open_second(int order_ticket, string comment, double order_lots, double tp){
  if(order_ticket != 0){
    OrderSelect(order_ticket,SELECT_BY_TICKET);
    int i;
    if(maxi != 0 && mini != 0){
      for(i=0; i<=47; i++){
        if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Red || ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Maroon){
          red_sell = StrToDouble(StringSubstr(ObjectDescription("level_"+Time[i]),0,7));
        }else if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Green || ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Lime){
          green_buy = StrToDouble(StringSubstr(ObjectDescription("level_"+Time[i]),0,7));
        }
      }
      if(i >= 47 && GlobalVariableGet("last_trade") < Time[1] && GlobalVariableGet("last_level") < Time[1]){
        if(green_buy > 0 && Close[0]-distance*Point > green_buy && OrderOpenPrice()-Close[0] >= range*10*Point && Close[0]-green_buy <= range*10*Point && Close[0] > Open[0]+distance*10*Point){
          //Êîìïåíñàöèÿ ïîêóïêè ðàçâîðîòîì
          order_send(OP_BUY,order_lots,Ask,Ask-20000*Point,tp,comment,0,Green);
        }
        if(red_sell > 0 && Close[0]-distance*Point > red_sell && OrderOpenPrice()-Close[0] >= range*10*Point && Close[0]-red_sell <= range*10*Point && Close[0] > Open[0]+distance*10*Point){
          //Êîìïåíñàöèÿ ïîêóïêè ïðîáîåì
          order_send(OP_BUY,order_lots,Ask,Ask-20000*Point,tp,comment,0,Green);
        }
        if(green_buy == 0){
          invalidate_levels(0,Green,Lime);
        }
        if(red_sell > 0 && Close[0]+distance*10*Point < red_sell && Close[0]-OrderOpenPrice() >= range*10*Point && red_sell-Close[0] <= range*10*Point && Open[0] > Close[0]+distance*10*Point){
          //Êîìïåíñàöèÿ ïðîäàæè ðàçâîðîòîì
          order_send(OP_SELL,order_lots,Bid,Bid+20000*Point,tp,comment,0,Red);
        }
        if(green_buy > 0 && Close[0]+distance*10*Point < green_buy && Close[0]-OrderOpenPrice() >= range*10*Point && green_buy-Close[0] <= range*10*Point && Open[0] > Close[0]+distance*10*Point){
          //Êîìïåíñàöèÿ ïðîäàæè ïðîáîåì
          order_send(OP_SELL,order_lots,Bid,Bid+20000*Point,tp,comment,0,Red);
        }
        if(red_sell == 0){
          invalidate_levels(0,Red,Maroon);
        }
      }
    }
  }
}

int order_send(int type, double order_lot, double price, double sl, double tp, string comment, double magic, color couleur){
  if(stochastic == FALSE || (stochastic == TRUE && 
  (type == OP_BUY && h1 < 95 && h1_1 < 90 && h4 < 95 && h4_1 < 90 && d1 < 95 && d1_1 < 90 && (h1 > h1_1+2 || h4 > h4_1+2 || d1 > d1_1+2)) || 
  (type == OP_SELL && h1 > 5 && h1_1 > 10 && h4 > 5 && h4_1 > 10 && d1 > 5 && d1_1 > 10 && (h1 < h1_1-2 || h4 < h4_1-2 || d1 < d1_1-2)))){
    if((type == OP_BUY && d1 < 96) || (type == OP_SELL && d1 > 4)){//Îáÿçàòåëüíûé ìÿãêèé ñòîõàñòèê
      int ticket = OrderSend(Symbol(),type,order_lot,price,3,sl,tp,comment,magic,0,couleur);
      if(ticket < 0){GetLastError();}
      else{
        GlobalVariableSet("last_trade",Time[0]);
        if(StringFind(comment,"m_buy",0) != -1 && ObjectFind("takeprofit_buy") != -1){ObjectSet("takeprofit_buy",OBJPROP_PRICE1,tp);}
        if(StringFind(comment,"m_sell",0) != -1 && ObjectFind("takeprofit_sell") != -1){ObjectSet("takeprofit_sell",OBJPROP_PRICE1,tp);}
      }
    }
  }else{if(GlobalVariableGet("last_cancel") < Time[2]){if(sound == TRUE){PlaySound("timeout.wav");} GlobalVariableSet("last_cancel",Time[0]);}}
}

int change_label(){
  for(int i=0; i<ObjectsTotal(); i++){
    string description = ObjectDescription(ObjectName(i));
    if(StringFind(description,"m_",0) != -1 && StringLen(description) <= 12){
      ObjectSetText(ObjectName(i),description+"; H1: "+DoubleToStr(h1,0)+" ("+DoubleToStr(h1_1,0)+"); H4: "+DoubleToStr(h4,0)+" ("+DoubleToStr(h4_1,0)+"); D1: "+DoubleToStr(d1,0)+" ("+DoubleToStr(d1_1,0)+"); "+DoubleToStr(st-st_1,2));
      break;
    }
  }
}

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

int redefine_takeprofit(){
  double buy_openprice1, buy_openprice2, buy_takeprofit, buy_tp, sell_openprice1, sell_openprice2, sell_takeprofit, sell_tp;
  int open_buys, open_sells;
  for(int i=0; i<OrdersTotal(); i++){
    OrderSelect(i,SELECT_BY_POS);
    if(OrderType() == OP_BUY){
      open_buys++;
      if(buy_openprice1 == 0){buy_openprice1 = OrderOpenPrice();}
      else{buy_openprice2 = OrderOpenPrice();}
      buy_takeprofit = OrderTakeProfit();
    }else if(OrderType() == OP_SELL){
      open_sells++;
      if(sell_openprice1 == 0){sell_openprice1 = OrderOpenPrice();}
      else{sell_openprice2 = OrderOpenPrice();}
      sell_takeprofit = OrderTakeProfit();
    }
  }
  if(open_buys == 1 && buy_takeprofit < buy_openprice1){ObjectSet("takeprofit_buy",OBJPROP_PRICE1,buy_openprice1+range*10*Point);}
  if(open_sells == 1 && sell_takeprofit > sell_openprice1){ObjectSet("takeprofit_sell",OBJPROP_PRICE1,sell_openprice1-range*10*Point);}
  if(open_buys > 1){
    if(buy_openprice1 != 0 && buy_openprice2 != 0){
      if(buy_openprice1 > buy_openprice2){buy_tp = buy_openprice2 + (((buy_openprice1-buy_openprice2)/open_buys)+10*Point);}
      else{buy_tp = buy_openprice1 + (((buy_openprice2-buy_openprice1)/open_buys)+10*Point);}
      ObjectSet("takeprofit_buy",OBJPROP_PRICE1,buy_tp);
    }
  }
  if(open_sells > 1){
    if(sell_openprice1 != 0 && sell_openprice2 != 0){
      if(sell_openprice1 > sell_openprice2){sell_tp = sell_openprice1 - (((sell_openprice1-sell_openprice2)/open_sells)+10*Point);}
      else{sell_tp = sell_openprice2 - (((sell_openprice2-sell_openprice1)/open_sells)+10*Point);}
      ObjectSet("takeprofit_sell",OBJPROP_PRICE1,sell_tp);
    }
  }
}

int unsure_trade(int order_ticket){
  double margin;
  int bars;
  bars = iBarShift(NULL,0,OrderOpenTime());
  if(OrderType() == OP_BUY && GlobalVariableGet("last_trade") < Time[1]){
    margin = (High[iHighest(NULL,0,MODE_HIGH,bars,0)]-OrderOpenPrice())/Point;
    //if(margin > trail/2 && OrderProfit() < 100 && bars != 0 && Close[0] < Open[0]){OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);}
  }else if(OrderType() == OP_SELL && GlobalVariableGet("last_trade") < Time[1]){
    margin = (OrderOpenPrice()-Low[iLowest(NULL,0,MODE_LOW,bars,0)])/Point;
    //if(margin > trail/2 && OrderProfit() < 100 && bars != 0 && Close[0] > Open[0]){OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);}
  }
}

int calculate_compensation(){
  double balance_history, order_profit;
  int order_ticket, order_time;
  double c_lot = (MathFloor(lot*100))/100;
  if(trades > 0){
    for(int i=0; i<OrdersTotal(); i++){
      if(OrderSelect(i,SELECT_BY_POS) == TRUE && OrderProfit() < 0){
        order_profit = MathAbs(OrderProfit()/OrderLots()/10);
        order_ticket = OrderTicket();
        order_time = OrderOpenTime(); 
        break;
      }
    }
  }
  if(order_time != 0){
    for(int j=0; j<OrdersHistoryTotal(); j++){
      if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY) == TRUE && OrderCloseTime() > order_time){balance_history += OrderProfit();}
    }
    if(balance_history != 0){
      comments("comment_string",5,15,0,"Ìèíóñ íàéäåí (#"+order_ticket+"), êîìïåíñàöèÿ 0 ïóíêòîâ (èòîãî).",Aqua);
      comments("compensation",5,180,corner,"Èòîãî: "+DoubleToStr(AccountProfit()/c_lot/10,1)+" + "+DoubleToStr(balance_history/c_lot/10,1)+" = "+DoubleToStr((AccountProfit()+balance_history)/c_lot/10,1),Aqua);
      if((AccountProfit()+balance_history)/c_lot/10 > 0 && order_profit > trail){
        ObjectSet("close_manual",OBJPROP_XDISTANCE,40);
      }
    }else{
      comments("comment_string",5,15,0,"Ìèíóñ íàéäåí (#"+order_ticket+"), íî ïîñëåäóþùåé êîìïåíñàöèè íåò.",Aqua);
      comments("compensation",5,180,corner,"Èòîãî: "+DoubleToStr(AccountProfit()/c_lot/10,1)+" + 0.0 = "+(DoubleToStr(AccountProfit()/c_lot/10,1)),Aqua);
    }
  }else{
    comments("comment_string",5,15,0,"",Aqua);
    comments("compensation",5,180,corner,"Èòîãî: "+DoubleToStr(AccountProfit()/c_lot/10,1)+" + 0.0 = "+(DoubleToStr(AccountProfit()/c_lot/10,1)),Aqua);
  }
}

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

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

int trail(){
  if(ObjectGet("trail",OBJPROP_XDISTANCE) > 30){
    comments("trail",40,135,corner,"Äèíàì. òðåéëèí-ñòîï ÂÊË.",Magenta);
    if(trades > 0){
      for(int i=0; i<OrdersTotal(); 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 > 100 && OrderType() == OP_BUY && StringFind(OrderComment(),"m_buy",0) != -1){
          if(OrderStopLoss() != 0 && OrderStopLoss()-OrderOpenPrice() < (Bid-OrderOpenPrice())/2){
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(Bid-OrderOpenPrice())/2,OrderTakeProfit(),0,Red);
          }
        }
        if(profitability > 100 && OrderType() == OP_SELL && StringFind(OrderComment(),"m_sell",0) != -1){
          if(OrderStopLoss() != 0 && OrderOpenPrice()-OrderStopLoss() < (OrderOpenPrice()-Ask)/2){
            OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(OrderOpenPrice()-Ask)/2,OrderTakeProfit(),0,Red);
          }
        }
      }
    }
  }else{
    comments("trail",5,135,corner,"Äèíàì. òðåéëèí-ñòîï ÂÛÊË.",Aqua);
    if(trades > 0){
      for(int j=0; j<OrdersTotal(); 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 && StringFind(OrderComment(),"m_buy",0) != -1){
          if(OrderStopLoss() != 0 && OrderStopLoss() < Bid-trail*10*Point && OrderOpenPrice() < Bid-trail*10*Point){
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-trail*10*Point,OrderTakeProfit(),0,Red);
          }
        }
        if(OrderType() == OP_SELL && StringFind(OrderComment(),"m_sell",0) != -1){
          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, int coin, 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,coin);
  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) && StringFind(OrderComment(),"m_",0) != -1){
      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){if(sound == TRUE){PlaySound("plus.wav");}}
          else if(MathFloor(MathAbs(profit/100)) > plus_num){
            plus_num = MathFloor(MathAbs(profit/100));
            if(sound == TRUE){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){if(sound == TRUE){PlaySound("tick.wav");}}
          else if(MathFloor(MathAbs(profit/100)) > minus_num){
            minus_num = MathFloor(MathAbs(profit/100));
            if(sound == TRUE){PlaySound("new_level.wav");}
            Sleep(1000);
          }
        }
      }
    }
    comments("profit",5,165,corner,"Ïðèáûëü: "+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 ---