#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