Orders Execution
Indicators Used
Miscellaneous
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---