maximus_v10

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 oscillatorMoving average indicatorStandard Deviation indicator
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
maximus_v10
#property copyright "Evgeny I. SHCHERBINA"
//maximus_vX.mq4
//12.04.2011
//Ïðè èñïîëüçîâàíèè êîíöåïòîâ ñîâåòíèêà ññûëêà íà àâòîðà îáÿçàòåëüíà.

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

maximus_v8 (15.08.2011)
10. Âñå óðîâíè òåïåðü ìîæíî ïåðåíîñèòü âðó÷íóþ, ïðè íåîáõîäèìîñòè ñîâåòíèê îòïðàâëÿåò íîâûå çíà÷åíèÿ íà ñåðâåð.
11. Äîáàâëåíà çâóêîâàÿ ñõåìà. Â ïàïêå Ìåòàòðåéäåðà /sounds/ äîëæíû ëåæàòü ñëåäóþùèå ôàéëû:
  à) instantiation.wav - óñòàíîâêà íîâîé ìåòêè
  á) news.wav - îòêðûòèå ñäåëêè
  â) ok.wav - çàêðûòèå ñäåëêè
  ã) plus.wav, tick.ok - äâèæåíèå íà ïîëïóíêòà (ïëþñ è ìèíóñ)
  ä) new_level.wav - äâèæåíèå íà 10 ïóíêòîâ
  å) timeout.wav - ñòîõàñòèê çàïðåòèë ñäåëêó

maximus_v9 (10.09.2011)
12. Óâåëè÷åíî ìàêñèìàëüíîå êîëè÷åñòâî ñäåëîê - ñ äâóõ äî 10 (ìàêñèìàëüíîå òåîðåòè÷åñêîå êîëè÷åñòâî ñäåëîê).
13. Äîáàâëåíî äâà ïîäâèäà ñäåëîê: òàê íàçûâàåìàÿ "äîëèâêà" è âîëàòèëüíàÿ ñäåëêà (åñëè ïðîèñõîäèò ðåçêèé îòñêîê îò óðîâíÿ, ðàññ÷èòûåòñÿ
ïî ðàçíèöå ñòàíäàðòíîãî îòêëîíåíèÿ). Ýòè äâà ïîäâèäà îòêðûâàþòñÿ íåçàâèñèìî îò ñóùåñòâóþùèõ ñäåëîê, îòñþäà ôîðìóëèðîâêà 
"òåîðåòè÷åñêîå ìàêñèìàëüíîå êîëè÷åñòâî ñäåëîê".
14. Ðàçíèöà ñòàíäàðòíîãî îòêëîíåíèÿ èñïîëüçóåòñÿ äëÿ èçìåðåíèÿ ñêîðîñòè ðûíêà.

maximus_v10 (25.09.2011)
15. Âìåñòî áåñêîíå÷íûõ ïåðå÷èñëåíèé ââåäåíû ãëîáàëüíûå ïåðåìåííûå. Ñêîðîñòü ðàáîòû è òåñòèðîâàíèÿ óâåëè÷åíà íà ïîðÿäîê.
16. Ðàñøèðåíû èçìåíÿåìûå ïàðàìåòðû, òåïåðü ñòàëî óäîáíåå ïðîâîäèòü îïòèìèçàöèþ.
17. Àâòîìàòè÷åñêîå îïðåäåëåíèå 4-õ è 5-çíà÷íîãî äåïîçèòà (èëè â äðóãîé âàëþòå).
18. Âûâîä îøèáîê ñåðâåðà.
19. Îïðåäåëåíèå øàãà, ìèí. è ìàêñ. çíà÷åíèÿ ëîòà ïåðåä îòïðàâêîé îðäåðà íà ñåðâåð.
*/

extern bool sound = true;           //Âêëþ÷åíèå è âûêëþ÷åíèå çâóêà
extern bool stochastic = false;     //Âêëþ÷åíèå è âûêëþ÷åíèå ôèëüòðà ïî ñòîõàñòèêó
extern int add = 1;                 //Âêëþ÷åíèå è âûêëþ÷åíèå "äîëèâêè" (äîïóñòèìûå çíà÷åíèå 1 è 0)
extern int compensation = 0;        //Êîìïåíñàöèÿ, ïî äîñòèæåíèè êîòîðîé çàêðûâàþòñÿ âñå ñäåëêè
extern int deviation = 20;          //Òåêóùåå ñòàíäàðòíîå îòêëîíåíèå â öåëûõ ÷èñëàõ
extern int delay_draw = 1;          //Çàäåðæêà îòêðûòèÿ ñäåëêè ïîñëå ïîÿâëåíèÿ íîâîé ìåòêè (0 - 0 ìèí., 1 - 15 ìèí., 2 - 30 ìèí. è ò.ä.)
extern int delay_open = 1;          //Çàäåðæêà îòêðûòèÿ ñäåëêè ïîñëå ïîñëåäíåé òîðãîâîé îïåðàöèè (0 - 0 ìèí., 1 - 15 ìèí., 2 - 30 ìèí. è ò.ä.)
extern int distance = 5;            //Ðàññòîÿíèå îò ìåòêè, ïî êîòîðîé îòêðûâàåòñÿ ñäåëêà
extern int ima = 70;                //Ðàññòîÿíèå îò öåíû äî ÷àñîâîé ñêîëüçÿùåé ñðåäíåé (èçìåíÿòü íå ðåêîìåíäóåòñÿ)
extern int magic = 123;             //Ìàãè÷åñêîå ÷èñëî (ñîâåòíèêîì íå èñïîëüçóåòñÿ, ìîæíî óêàçàòü ëþáîå)
extern int range = 30;              //Ìèíèìàëüíûé äèàïàçîí ìåæäó ñîïðîòèâëåíèåì è ïîääåðæêîé
extern int risk = 1000;             //Ñîîòíîøåíèå ðèñêà: äåïîçèò ê ëîòó
extern int stop_loss = 2000;        //Ñòîïëîññ (èçìåíÿòü íå ðåêîìåíäóåòñÿ)
extern int trail = 30;              //Òðåéëèí-ñòîï

bool test = false;
double d1, d1_1, h1, h1_1, h4, h4_1, lot, ma, ma_1, maxi, mini, minus, minus_num, plus, plus_num, profit_max, spread, st;
int corner, decimal = 1, trades;

int init(){
  if((IsTesting() == true && IsVisualMode() == false) || IsOptimization() == true){//Ïðîâåðÿåò ðåæèì òîðãîâëè (òîðãîâëÿ/òåñò/îïòèìèçàöèÿ) äëÿ óñêîðåíèÿ òåñòèðîâàíèÿ
    test = true;
  }
  if(IsTesting() == true || IsOptimization() == true){GlobalVariablesDeleteAll();}
  if(MarketInfo(Symbol(),MODE_DIGITS) == 3 || MarketInfo(Symbol(),MODE_DIGITS) == 5){decimal = 10;}//Îïðåäåëÿåò êîë-âî çíàêîâ
  if(GlobalVariableCheck("last_lbl_draw") == false){GlobalVariableSet("last_lbl_draw",TimeCurrent());}
  if(GlobalVariableCheck("last_trade") == false){GlobalVariableSet("last_trade",TimeCurrent());}
  define_corner();
  find_maxi(0);
  find_mini(0);
}

int start(){
  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));
  lot = NormalizeDouble(AccountEquity()/risk/10,3);
  ma = MathFloor((Close[0]-iMA(NULL,PERIOD_H1,12,0,MODE_LWMA,PRICE_CLOSE,0))/decimal/Point);
  ma_1 = MathFloor((Close[0]-iMA(NULL,PERIOD_H1,12,0,MODE_LWMA,PRICE_CLOSE,1))/decimal/Point);
  st = iStdDev(NULL,0,12,0,MODE_LWMA,PRICE_CLOSE,0)*10000;
  spread = MarketInfo(Symbol(),MODE_SPREAD);
  comments("range",5,45,corner,"Äèàïàçîí: "+DoubleToStr((maxi-mini)/decimal/Point,1)+" ("+range+" ïî óìîë÷.)",Aqua);
  comments("lot",5,60,corner,"Ëîò: "+DoubleToStr(lot,3)+"; ñïðåä: "+DoubleToStr(spread/decimal,1)+"; "+DoubleToStr((AccountProfit()/AccountBalance())*100,2)+"%",Aqua);
  comments("iStDev_iMA",5,75,corner,"iStDev: "+DoubleToStr(st,1)+"; iMA H1 äî öåíû: "+DoubleToStr(ma,0)+" ("+DoubleToStr(ma_1,0)+")",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)+")",Tomato);}
  comments("line",5,150,corner,"---------------------------------------------",Aqua);
  comments("last_lvl_draw",5,15,0,"Ïîñëåä. ïîèñê óðîâíåé: "+TimeToStr(GlobalVariableGet("last_lvl_draw"),TIME_MINUTES)+"; ñëåä. ïîèñê: "+TimeToStr(GlobalVariableGet("last_lvl_draw")+14400-TimeCurrent(),TIME_MINUTES),Aqua);
  double bl, bp, sl, sp;
  int add_bt, add_st, b, bt, bt2, bt3, i, s, st, st2, st3;
  for(i=0; i<OrdersTotal(); i++){
    OrderSelect(i,SELECT_BY_POS);
    if(OrderType() == OP_BUY && StringFind(OrderComment(),"m_buy",0) != -1){
      b++;
      bl = OrderLots();
      bp += OrderProfit();
      if(OrderComment() == "m_buy"){bt = OrderTicket();}
      else if(OrderComment() == "m_buy2"){bt2 = OrderTicket();}
      else if(OrderComment() == "m_buy3"){bt3 = OrderTicket();}
      add_bt = OrderTicket();
    }
    if(OrderType() == OP_SELL && StringFind(OrderComment(),"m_sell",0) != -1){
      s++;
      sl = OrderLots();
      sp += OrderProfit();
      if(OrderComment() == "m_sell"){st = OrderTicket();}
      else if(OrderComment() == "m_sell2"){st2 = OrderTicket();}
      else if(OrderComment() == "m_sell3"){st3 = OrderTicket();}
      add_st = OrderTicket();
    }
    define_takeprofit(OrderTicket());
    trail(OrderTicket());
  }
  if(i >= OrdersTotal()-1){
    if(b+s > trades){
      trades = b+s;
      GlobalVariableSet("last_trade",TimeCurrent());
      if(sound == true){PlaySound("news.wav");}
      Sleep(1000);
    }
    if(b+s < trades){
      trades = b+s;
      define_corner();
      find_maxi(0);
      find_mini(0);
      GlobalVariableSet("last_trade",TimeCurrent());
      profit_max = 0;
      redefine_takeprofit(b,bl,bp,bt,s,sl,sp,st);
      if(test == false){
        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);
      GlobalVariableSet("close_manual",0);
    }
    if(st > deviation && add == 1){
      if(add_bt != 0 && bp > 0){add(add_bt);}
      if(add_st != 0 && sp > 0){add(add_st);}
    }
    if(b == 0){ObjectDelete("takeprofit_buy"); open_first(OP_BUY);}
    if((b == 1 || (b > 1 && bt2 == 0)) && ma < -40){open_second(bt,"m_buy2",bl,Close[0]+(((MathAbs(bp)/bl/(b+1))+10)*Point));}
    if((b == 2 || (b > 2 && bt3 == 0)) && ma < -40){open_second(bt2,"m_buy3",bl,Close[0]+(((MathAbs(bp)/bl/(b+1))+10)*Point));}
    if(s == 0){ObjectDelete("takeprofit_sell"); open_first(OP_SELL);}
    if((s == 1 || (s > 1 && st2 == 0)) && ma > 40){open_second(st,"m_sell2",sl,Close[0]-(((MathAbs(sp)/sl/(s+1))+10)*Point));}
    if((s == 2 || (s > 2 && st3 == 0)) && ma > 40){open_second(st2,"m_sell3",sl,Close[0]-(((MathAbs(sp)/sl/(s+1))+10)*Point));}
  }
  if(GlobalVariableGet("last_lvl_draw")+14400 < TimeCurrent()){find_mini(0); find_maxi(0);}
  if(GlobalVariableGet("last_error")+900 < TimeCurrent()){comments("error",5,0,2,"",Tomato);}
  calculate_compensation(b,bl,bp,bt,s,sl,sp,st);
  close_manual();
  close_plus();
  instantiate_levels();
  if(test == false){
    check_extremes();
    play_sound();
    trail(0);
  }
}

int deinit(){
  if(IsTesting() == true || IsOptimization() == true){GlobalVariablesDeleteAll();}
  ObjectDelete("takeprofit_buy");
  ObjectDelete("takeprofit_sell");
}

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

void find_maxi(int points){
  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]){
      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){
        maxi = oc5-3.5*decimal*Point;
        GlobalVariableSet("last_lvl_draw",TimeCurrent());
        if(test == false){
          ObjectDelete("line_maxi");
          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,Digits),Aqua);
        break;
      }
    }
  }
  if(i >= 480){
    maxi = Close[0] + 50*decimal*Point;
    GlobalVariableSet("last_lvl_draw",TimeCurrent());
    if(test == false){
      ObjectDelete("line_maxi");
      ObjectCreate("line_maxi",OBJ_HLINE,0,0,maxi);
      ObjectSet("line_maxi",OBJPROP_COLOR,Tomato);
      ObjectSet("line_maxi",OBJPROP_STYLE,STYLE_DASHDOTDOT);
    }
    comments("maxi",5,15,corner,"Ñîïðîòèâëåíèå: "+DoubleToStr(maxi,Digits),Tomato);
  }
}

void find_mini(int points){
  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]){
      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){
        mini = oc5+3.5*decimal*Point;
        GlobalVariableSet("last_lvl_draw",TimeCurrent());
        if(test == false){
          ObjectDelete("line_mini");
          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,Digits),Aqua);
        break;
      }
    }
  }
  if(i >= 480){
    mini = Close[0] - 50*decimal*Point;
    GlobalVariableSet("last_lvl_draw",TimeCurrent());
    if(test == false){
      ObjectDelete("line_mini");
      ObjectCreate("line_mini",OBJ_HLINE, 0, 0, mini);
      ObjectSet("line_mini",OBJPROP_STYLE,STYLE_DASHDOTDOT);
      ObjectSet("line_mini",OBJPROP_COLOR,Tomato);
    }
    comments("mini",5,30,corner,"Ïîääåðæêà: "+DoubleToStr(mini,Digits),Tomato);
  }
}

void check_extremes(){
  if(maxi != 0 && mini != 0){
    maxi = ObjectGet("line_maxi",OBJPROP_PRICE1);
    mini = ObjectGet("line_mini",OBJPROP_PRICE1);
    if(ObjectGet("line_maxi",OBJPROP_COLOR) == Tomato){comments("maxi",5,15,corner,"Ñîïðîòèâëåíèå: "+DoubleToStr(maxi,Digits),Tomato);}
    else{comments("maxi",5,15,corner,"Ñîïðîòèâëåíèå: "+DoubleToStr(maxi,Digits),Aqua);}
    if(ObjectGet("line_mini",OBJPROP_COLOR) == Tomato){comments("mini",5,30,corner,"Ïîääåðæêà: "+DoubleToStr(mini,Digits),Tomato);}
    else{comments("mini",5,30,corner,"Ïîääåðæêà: "+DoubleToStr(mini,Digits),Aqua);}
  }
}

void instantiate_levels(){
  if(maxi != 0 && mini != 0){
    if(Close[0] > maxi && maxi-mini >= range*decimal*Point){draw_levels(maxi,Red);}
    else if(Close[0] > maxi && maxi-mini < range*decimal*Point){find_maxi(10*decimal);}
    if(Close[0] < mini && maxi-mini >= range*decimal*Point){draw_levels(mini,Lime);}
    else if(Close[0] < mini && maxi-mini < range*decimal*Point){find_mini(10*decimal);}
  }
}

void draw_levels(double price, color couleur){
  string lbl = StringConcatenate("lbl_",TimeCurrent());
  GlobalVariableSet("last_lbl_draw",TimeCurrent());
  GlobalVariableSet("lbl_price",price);
  if(test == false){
    if(ObjectFind(lbl) == -1){ObjectCreate(lbl,OBJ_TREND,0,Time[0]-1800,price,Time[0]+1800,price);}
    ObjectSet(lbl,OBJPROP_COLOR,couleur);
    ObjectSet(lbl,OBJPROP_WIDTH,3);
    ObjectSet(lbl,OBJPROP_RAY,False);
  }
  if(couleur == Lime){
    if(st >= deviation){
      GlobalVariableSet("lbl_clr",2);//Òåìíî-çåëåíûé
      if(test == false){ObjectSet(lbl,OBJPROP_COLOR,Green);}
    }else if(st < deviation){
      GlobalVariableSet("lbl_clr",1);//Ñâåòëî-çåëåíûé
    }
    find_mini(10*decimal);
  }else if(couleur == Red){
    if(st >= deviation){
      GlobalVariableSet("lbl_clr",4);//Òåìíî-êðàñíûé
      if(test == false){ObjectSet(lbl,OBJPROP_COLOR,Maroon);}
    }else if(st < deviation){
      GlobalVariableSet("lbl_clr",3);//Ñâåòëî-êðàñíûé
    }
    find_maxi(10*decimal);
  }
  if(sound == true){PlaySound("instantiation.wav");}
  Sleep(500);
}

void add(int t){
  OrderSelect(t,SELECT_BY_TICKET);
  if(OrderProfit()/OrderLots()/10 > range){
    if(OrderType() == OP_BUY){order_send(OP_BUY,lot,Ask,Ask-stop_loss*decimal*Point,ObjectGet("takeprofit_buy",OBJPROP_PRICE1),"m_buyA",Green);}
    else if(OrderType() == OP_SELL){order_send(OP_SELL,lot,Bid,Bid+stop_loss*decimal*Point,ObjectGet("takeprofit_sell",OBJPROP_PRICE1),"m_sellA",Red);}
  }
}

void open_first(int type){
  if(GlobalVariableGet("last_trade")+delay_open*15*60 < TimeCurrent()){
    color clr = GlobalVariableGet("lbl_clr");
    double buy, sell;
    if(clr == 1 || clr == 2){buy = GlobalVariableGet("lbl_price");}
    else if(clr == 3 || clr == 4){sell = GlobalVariableGet("lbl_price");}
    if(buy > 0){
      if(ma < ima && type == OP_BUY && Close[0]-distance*decimal*Point > buy && maxi-Close[0] >= range*decimal*Point 
      && ((Close[0]+distance*decimal*Point > Open[0] && GlobalVariableGet("last_lbl_draw")+delay_draw*15*60 < TimeCurrent()) 
      || (clr == 2 || (clr == 1 && st > deviation)))){
        //Çåëåíàÿ ìåòêà, ðàçâîðîò, ïîêóïêà
        double buy_tp = ((maxi-Close[0])/3)*2;
        order_send(OP_BUY,lot,Ask,Ask-stop_loss*decimal*Point,Ask+buy_tp,"m_buy",Green);
      }
      if(ma > -ima && Close[0]+distance*decimal*Point < buy && buy-Close[0] <= range*decimal*Point && Open[0]-distance*decimal*Point > Close[0] 
      && (GlobalVariableGet("last_lbl_draw")+delay_draw*15*60 < TimeCurrent() || (clr == 2 || (clr == 1 && st > deviation)))){
        //Çåëåíàÿ ìåòêà, ïðîáîé, ïðîäàæà
        if(type == OP_SELL){order_send(OP_SELL,lot,Bid,Bid+stop_loss*decimal*Point,Bid-range*2*decimal*Point,"m_sell",Red);}
      }
    }
    if(sell > 0){
      if(ma > -ima && type == OP_SELL && Close[0]+distance*decimal*Point < sell && Close[0]-mini >= range*decimal*Point 
      && ((Open[0]-distance*decimal*Point > Close[0] && GlobalVariableGet("last_lbl_draw")+delay_draw*15*60 < TimeCurrent()) 
      || (clr == 4 || (clr == 3 && st > deviation)))){
        //Êðàñíàÿ ìåòêà, ðàçâîðîò, ïðîäàæà
        double sell_tp = ((Close[0]-mini)/3)*2;
        order_send(OP_SELL,lot,Bid,Bid+stop_loss*decimal*Point,Bid-sell_tp,"m_sell",Red);
      }
      if(ma < ima && Close[0]-distance*decimal*Point > sell && Close[0]-sell <= range*decimal*Point && Close[0]-distance*decimal*Point > Open[0]
      && (GlobalVariableGet("last_lbl_draw")+delay_draw*15*60 < TimeCurrent() || (clr == 4 || (clr == 3 && st > deviation)))){
        //Êðàñíàÿ ìåòêà, ïðîáîé, ïîêóïêà
        if(type == OP_BUY){order_send(OP_BUY,lot,Ask,Ask-stop_loss*decimal*Point,Ask+range*2*decimal*Point,"m_buy",Green);}
      }
    }
  }
}

void open_second(int order_ticket, string comment, double order_lots, double tp){
  if(GlobalVariableGet("last_trade")+delay_open*15*60 < TimeCurrent() && order_ticket != 0){
    color clr = GlobalVariableGet("lbl_clr");
    double buy, sell;
    OrderSelect(order_ticket,SELECT_BY_TICKET);
    if(clr == 1 || clr == 2){buy = GlobalVariableGet("lbl_price");}
    else if(clr == 3 || clr == 4){sell = GlobalVariableGet("lbl_price");}
    if(buy > 0){
      if(ma < ima && Close[0]-distance*decimal*Point > buy && OrderOpenPrice()-Close[0] >= range*decimal*Point 
      && ((Close[0]-distance*decimal*Point > Open[0] && GlobalVariableGet("last_lbl_draw")+delay_draw*15*60 < TimeCurrent()) 
      || (clr == 2 || (clr == 1 && st > deviation)))){
        //Êîìïåíñàöèÿ ïîêóïêè ðàçâîðîòîì
        order_send(OP_BUY,order_lots,Ask,Ask-stop_loss*decimal*Point,tp,comment,Green);
      }
      if(ma > -ima && Close[0]+distance*decimal*Point < buy && buy-Close[0] <= range*decimal*Point && Open[0]-distance*decimal*Point > Close[0] 
      && Close[0]-OrderOpenPrice() >= range*decimal*Point && (GlobalVariableGet("last_lbl_draw")+delay_draw*15*60 < TimeCurrent() 
      || (clr == 2 || (clr == 1 && st > deviation)))){
        //Êîìïåíñàöèÿ ïðîäàæè ïðîáîåì
        order_send(OP_SELL,order_lots,Bid,Bid+stop_loss*decimal*Point,tp,comment,Red);
      }
    }
    if(sell > 0){
      if(ma > -ima && Close[0]+distance*decimal*Point < sell && Close[0]-OrderOpenPrice() >= range*decimal*Point 
      && ((Open[0] > Close[0]+distance*decimal*Point && GlobalVariableGet("last_lbl_draw")+delay_draw*15*60 < TimeCurrent())
      || (clr == 4 || (clr == 3 && st > deviation)))){
        //Êîìïåíñàöèÿ ïðîäàæè ðàçâîðîòîì
        order_send(OP_SELL,order_lots,Bid,Bid+stop_loss*decimal*Point,tp,comment,Red);
      }
      if(ma < ima && Close[0]-distance*decimal*Point > sell && Close[0]-OrderOpenPrice() >= range*decimal*Point && Open[0] > Close[0]+distance*decimal*Point 
      && OrderOpenPrice()-Close[0] >= range*decimal*Point && (GlobalVariableGet("last_lbl_draw")+delay_draw*15*60 < TimeCurrent() 
      || (clr == 4 || (clr == 3 && st > deviation)))){
        //Êîìïåíñàöèÿ ïðîäàæè ïðîáîåì
        order_send(OP_BUY,order_lots,Ask,Ask-stop_loss*decimal*Point,tp,comment,Green);
      }
    }
  }
}

void order_send(int type, double order_lot, double price, double sl, double tp, string comment, color couleur){
  double lot_to_send = (MathFloor(order_lot/MarketInfo(Symbol(),MODE_LOTSTEP)))*MarketInfo(Symbol(),MODE_LOTSTEP);
  if(lot_to_send < MarketInfo(Symbol(),MODE_MINLOT)){lot_to_send = MarketInfo(Symbol(),MODE_MINLOT);}
  if(lot_to_send > MarketInfo(Symbol(),MODE_MAXLOT)){lot_to_send = MarketInfo(Symbol(),MODE_MAXLOT);}
  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)))){
    int ticket = OrderSend(Symbol(),type,lot_to_send,NormalizeDouble(price,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),comment,magic,0,couleur);
    if(ticket < 0){print_error(GetLastError());}
    else{
      if(test == false){change_label(ticket);}
      GlobalVariableSet("last_trade",TimeCurrent());
      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] && sound == true){PlaySound("timeout.wav"); GlobalVariableSet("last_cancel",Time[0]);}}
}

void change_label(int t){
  string obj_name;
  if(OrderSelect(t,SELECT_BY_TICKET) == true){
    if(OrderType() == OP_BUY){
      obj_name = StringConcatenate("#",OrderTicket()," buy ",DoubleToStr(OrderLots(),2)," ",OrderSymbol()," at ",DoubleToStr(OrderOpenPrice(),Digits));
    }else if(OrderType() == OP_SELL){
      obj_name = StringConcatenate("#",OrderTicket()," sell ",DoubleToStr(OrderLots(),2)," ",OrderSymbol()," at ",DoubleToStr(OrderOpenPrice(),Digits));
    }
    ObjectSetText(obj_name,ObjectDescription(obj_name)+"; 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(ma,0)+"("+DoubleToStr(ma_1,0)+"); "+DoubleToStr(st,0));
  }
}

void define_takeprofit(int t){
  string type;
  bool modify;
  OrderSelect(t,SELECT_BY_TICKET);
  if(OrderType() == OP_BUY){type = "buy";}
  else if(OrderType() == OP_SELL){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 if(ObjectFind("takeprofit_"+type) != -1){
    if(NormalizeDouble(OrderTakeProfit(),Digits) != NormalizeDouble(ObjectGet("takeprofit_"+type,OBJPROP_PRICE1),Digits)){
      modify = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(ObjectGet("takeprofit_"+type,OBJPROP_PRICE1),Digits),0,Red);
      if(modify == false){print_error(GetLastError());}
    }
  }
}

void redefine_takeprofit(int b, double bl, double bp, int bt, int s, double sl, double sp, int st){
  if(b > 0){
    OrderSelect(bt,SELECT_BY_TICKET);
    if(b == 1 && OrderTakeProfit() < OrderOpenPrice()){ObjectSet("takeprofit_buy",OBJPROP_PRICE1,OrderOpenPrice()+range*2*decimal*Point);}
    else if(b > 1){ObjectSet("takeprofit_buy",OBJPROP_PRICE1,Close[0]+(MathAbs(bp)/bl/b+10)*Point);}
  }
  if(s > 0){
    OrderSelect(st,SELECT_BY_TICKET);
    if(s == 1 && OrderTakeProfit() > OrderOpenPrice()){ObjectSet("takeprofit_sell",OBJPROP_PRICE1,OrderOpenPrice()-range*2*decimal*Point);}
    else if(s > 1){ObjectSet("takeprofit_sell",OBJPROP_PRICE1,Close[0]-(MathAbs(sp)/sl/s-10)*Point);}
  }
}

void calculate_compensation(int b, double bl, double bp, int bt, int s, double sl, double sp, int st){
  if(bp < 0 && sp < 0){
    if(bt < st){OrderSelect(bt,SELECT_BY_TICKET);}
    else if(bt > st){OrderSelect(st,SELECT_BY_TICKET);}
  }else if(bp < 0 && sp >= 0){
    OrderSelect(bt,SELECT_BY_TICKET);
  }else if(sp < 0 && bp >= 0){
    OrderSelect(st,SELECT_BY_TICKET);
  }
  double balance_history, c_lot = (MathFloor(lot*100))/100;
  int order_time = OrderOpenTime(), order_ticket = OrderTicket();
  if(order_time != 0){
    double order_minus = OrderProfit()/OrderLots()/10;
    for(int i=0; i<OrdersHistoryTotal(); i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == true && OrderCloseTime() > order_time){balance_history += OrderProfit();}
    }
    if(balance_history != 0){
      comments("compensation",5,30,0,"Ìèíóñ íàéäåí (#"+order_ticket+"), êîìïåíñàöèÿ "+compensation+" ïóíêòîâ (èòîãî).",Aqua);
      comments("itogo",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 > compensation && order_minus < -range){
        if(test == false){ObjectSet("close_manual",OBJPROP_XDISTANCE,40);}
        else{GlobalVariableSet("close_manual",1);}
      }
    }else{
      comments("compensation",5,30,0,"Ìèíóñ íàéäåí (#"+order_ticket+"), íî ïîñëåäóþùåé êîìïåíñàöèè íåò.",Aqua);
      comments("itogo",5,180,corner,"Èòîãî: "+DoubleToStr(AccountProfit()/c_lot/10,1)+" + 0.0 = "+(DoubleToStr(AccountProfit()/c_lot/10,1)),Aqua);
    }
  }else{
    comments("compensation",5,15,0,"",Aqua);
    comments("itogo",5,180,corner,"Èòîãî: "+DoubleToStr(AccountProfit()/c_lot/10,1)+" + 0.0 = "+(DoubleToStr(AccountProfit()/c_lot/10,1)),Aqua);
  }
}

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

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

void trail(int t){
  bool modify;
  if(ObjectGet("trail",OBJPROP_XDISTANCE) > 30){
    comments("trail",40,135,corner,"Äèíàì. òðåéëèí-ñòîï ÂÊË.",Tomato);
    if(t != 0){
      OrderSelect(t,SELECT_BY_TICKET);
      double profitability = OrderProfit()/OrderLots();
      if(OrderStopLoss() == 0 && OrderType() == OP_BUY){
        modify = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-stop_loss*decimal*Point,Digits),OrderTakeProfit(),0,Red);
        if(modify == false){print_error(GetLastError());}
      }
      if(OrderStopLoss() == 0 && OrderType() == OP_SELL){
        modify = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+stop_loss*decimal*Point,Digits),OrderTakeProfit(),0,Red);
        if(modify == false){print_error(GetLastError());}
      }
      if(profitability > 100 && OrderType() == OP_BUY && StringFind(OrderComment(),"m_buy",0) != -1){
        if(OrderStopLoss() != 0 && OrderStopLoss()-OrderOpenPrice() < NormalizeDouble((Bid-OrderOpenPrice())/2,Digits)){
          modify = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-(Bid-OrderOpenPrice())/2,Digits),OrderTakeProfit(),0,Red);
          if(modify == false){print_error(GetLastError());}
        }
      }
      if(profitability > 100 && OrderType() == OP_SELL && StringFind(OrderComment(),"m_sell",0) != -1){
        if(OrderStopLoss() != 0 && OrderOpenPrice()-OrderStopLoss() < NormalizeDouble((OrderOpenPrice()-Ask)/2,Digits)){
          modify = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+(OrderOpenPrice()-Ask)/2,Digits),OrderTakeProfit(),0,Red);
          if(modify == false){print_error(GetLastError());}
        }
      }
    }
  }else if(ObjectGet("trail",OBJPROP_XDISTANCE) < 30 || test == true){
    comments("trail",5,135,corner,"Äèíàì. òðåéëèí-ñòîï ÂÛÊË.",Aqua);
    OrderSelect(t,SELECT_BY_TICKET);
    if(t != 0){
      if(OrderStopLoss() == 0 && OrderType() == OP_BUY){
        modify = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-stop_loss*decimal*Point,Digits),OrderTakeProfit(),0,Red);
        if(modify == false){print_error(GetLastError());}
      }
      if(OrderStopLoss() == 0 && OrderType() == OP_SELL){
        modify = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+stop_loss*decimal*Point,Digits),OrderTakeProfit(),0,Red);
        if(modify == false){print_error(GetLastError());}
      }
      if(OrderType() == OP_BUY && StringFind(OrderComment(),"m_buy",0) != -1){
        if(OrderStopLoss() != 0 && OrderStopLoss() < NormalizeDouble(Bid-trail*decimal*Point,Digits) && OrderOpenPrice() < NormalizeDouble(Bid-trail*decimal*Point,Digits)){
          modify = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-trail*decimal*Point,Digits),OrderTakeProfit(),0,Red);
          if(modify == false){print_error(GetLastError());}
        }
      }
      if(OrderType() == OP_SELL && StringFind(OrderComment(),"m_sell",0) != -1){
        if(OrderStopLoss() != 0 && OrderStopLoss() > NormalizeDouble(Ask+trail*decimal*Point,Digits) && OrderOpenPrice() > NormalizeDouble(Ask+trail*decimal*Point,Digits)){
          modify = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+trail*decimal*Point,Digits),OrderTakeProfit(),0,Red);
          if(modify == false){print_error(GetLastError());}
        }
      }
    }
  }
}

void comments(string name, int x, int y, int coin, string texto, color couleur){
  if(test == false){
    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);
  }
}

void 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/10/10)) == plus_num){if(sound == true){PlaySound("plus.wav");}}
          else if(MathFloor(MathAbs(profit/10/10)) > plus_num){
            plus_num = MathFloor(MathAbs(profit/10/10));
            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/10/10)) == minus_num){if(sound == true){PlaySound("tick.wav");}}
          else if(MathFloor(MathAbs(profit/10/10)) > minus_num){
            minus_num = MathFloor(MathAbs(profit/10/10));
            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;
  }
}

void print_error(int error){
  string error_string;
  switch(error){
    case 0:   error_string="îøèáêà íå óñòàíîâëåíà!";                   break;
    case 1:   error_string="ðåçóëüòàò îøèáêè íåèçâåñòåí!";             break;
    case 2:   error_string="îáùàÿ îøèáêà!";                            break;
    case 3:   error_string="íåïðàâèëüíûå ïàðàìåòðû!";                  break;
    case 4:   error_string="òîðãîâûé ñåðâåð çàíÿò!";                   break;
    case 5:   error_string="ñòàðàÿ âåðñèÿ òåðìèíàëà!";                 break;
    case 6:   error_string="íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì!";           break;
    case 7:   error_string="íåäîñòàòî÷íî ïðàâ!";                       break;
    case 8:   error_string="ñëèøêîì ÷àñòûå çàïðîñû!";                  break;
    case 9:   error_string="íåäîïóñòèìàÿ îïåðàöèÿ!";                   break;
    case 64:  error_string="ñ÷åò çàáëîêèðîâàí!";                       break;
    case 65:  error_string="íåïðàâèëüíûé íîìåð ñ÷åòà!";                break;
    case 128: error_string="âðåìÿ îæèäàíèÿ èñòåêëî!";                  break;
    case 129: error_string="íåïðàâèëüíàÿ öåíà!";                       break;
    case 130: error_string="íåïðàâèëüíûå ñòîïû!";                      break;
    case 131: error_string="íåïðàâèëüíûé îáúåì!";                      break;
    case 132: error_string="ðûíîê çàêðûò!";                            break;
    case 133: error_string="òîðãîâëÿ çàïðåùåíà!";                      break;
    case 134: error_string="íåäîñòàòî÷íî ñðåäñòâ!";                    break;
    case 135: error_string="öåíû èçìåíèëèñü!";                         break;
    case 136: error_string="íåò öåí!";                                 break;
    case 137: error_string="áðîêåð çàíÿò!";                            break;
    case 138: error_string="íîâûå öåíû!";                              break;
    case 139: error_string="îðäåð îáðàáàòûâàåòñÿ!";                    break;
    case 140: error_string="ðàçðåøåíà òîëüêî ïîêóïêà!";                break;
    case 141: error_string="ñëèøêîì ìíîãî çàïðîñîâ!";                  break;
    case 145: error_string="îðäåð ñëèøêîì áëèçîê ê ðûíêó!";            break;
    case 146: error_string="ïîäñèñòåìà òîðãîâëè çàíÿòà!";              break;
    case 147: error_string="äàòà îðäåðà çàïðåùåíà áðîêåðîì!";          break;
    case 148: error_string="ñëèøêîì ìíîãî îðäåðîâ!";                   break;
    case 149: error_string="õåäæèðîâàíèå çàïðåùåíî!";                  break;
    case 150: error_string="íàðóøåíî ïðàâèëî FIFO!";                   break;
  }
  comments("error",5,1,2,"Îøèáêà: "+error_string+" ("+TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES)+")",Tomato);
  GlobalVariableSet("last_error",TimeCurrent());
  Print(StringConcatenate("Îøèáêà: ",error_string," (",TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES),")"));
}

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