#property copyright "Evgeny I. SHCHERBINA" //maximus_vX.mq4 //12.04.2011 //При использовании концептов советника ссылка на автора обязательна. extern bool stochastic = FALSE; extern int range = 40; extern int risk = 1000; extern int stop_distance = 15; extern int trail = 20; double h1, h1_1, h4, h4_1, lot, maxi, mini, minus, minus_num, plus, plus_num, profit_max, spread; int corner, global_maxi, global_mini, last_cancel, last_time, trades; int init(){ define_corner(); find_maxi(0,0); find_mini(0,0); } int start(){ h1 = MathFloor(iStochastic(NULL,PERIOD_H1,5,3,3,MODE_LWMA,0,MODE_MAIN,0)); h1_1 = MathFloor(iStochastic(NULL,PERIOD_H1,5,3,3,MODE_LWMA,0,MODE_MAIN,1)); h4 = MathFloor(iStochastic(NULL,PERIOD_H4,5,3,3,MODE_LWMA,0,MODE_MAIN,0)); h4_1 = MathFloor(iStochastic(NULL,PERIOD_H4,5,3,3,MODE_LWMA,0,MODE_MAIN,1)); lot = NormalizeDouble(AccountEquity()/risk/10,3); if(lot < 0.01){lot = 0.01;} else if(lot > 2.5){lot = 2.5;} spread = MarketInfo(Symbol(),MODE_SPREAD); comments("range",5,45,"Диапазон: "+DoubleToStr((maxi-mini)/Point/10,1)+" ("+range+" по умолч.)",Aqua); comments("lot",5,60,"Лот: "+DoubleToStr(lot,3)+"; спред: "+DoubleToStr(spread/10,1),Aqua); if(stochastic == FALSE){comments("stochastic",5,90,"iStoch H1: "+DoubleToStr(h1,0)+" ("+DoubleToStr(h1_1,0)+"); H4: "+DoubleToStr(h4,0)+" ("+DoubleToStr(h4_1,0)+") [ВЫКЛ.]",Aqua);} else{comments("stochastic",5,90,"iStoch H1: "+DoubleToStr(h1,0)+" ("+DoubleToStr(h1_1,0)+"); H4: "+DoubleToStr(h4,0)+" ("+DoubleToStr(h4_1,0)+") [ВКЛ.]",Magenta);} int i, orders; for(i=0; i<=OrdersTotal()-1; i++){ OrderSelect(i,SELECT_BY_POS); if((OrderType() == OP_BUY && (OrderComment() == "m_buy" || OrderComment() == "m_buyDouble")) || (OrderType() == OP_SELL && (OrderComment() == "m_sell" || OrderComment() == "m_sellDouble"))){ orders++; if(OrderProfit() < 0){open_second(OrderTicket());} if(OrderTakeProfit() != 0){define_takeprofit(OrderTicket());} } } if(i >= OrdersTotal()-1){ if(orders == 0){open_first();} if(orders > trades){ trades = orders; change_label(); PlaySound("news.wav"); Sleep(1000); } if(orders < trades){ trades = orders; define_corner(); find_maxi(0,0); find_mini(0,0); profit_max = 0; ObjectDelete("takeprofit"); PlaySound("ok.wav"); Sleep(1000); } if(trades == 0){comments("profit",5,75,"Прибыльность: 0.0 (макс. 0.0)",Aqua);} } check_extremes(); close_manual(); close_plus(); instantiate_levels(); instantiate_stops(); play_sound(); trail(); } int deinit(){ ObjectDelete("buystop"); ObjectDelete("buystop_takeprofit"); ObjectDelete("sellstop"); ObjectDelete("sellstop_takeprofit"); ObjectDelete("takeprofit"); } int define_corner(){ double diff = WindowPriceMax()-WindowPriceMin(); if(Close[0] < (WindowPriceMin()+diff/2)){corner = 1;} else{corner = 3;} } int find_maxi(int points, int transf_maxi){ int i; double oc1, oc2, oc3, oc4, oc5, oc6, oc7, oc8, oc9; for(i=4; i<=480; i++){ if(Close[i] > Open[i]){oc5 = Close[i];}else{oc5 = Open[i];} if(oc5 > Close[0]+points*Point && oc5 > Close[1] && oc5 > Close[2] && oc5 > Close[3] && oc5 > Open[1] && oc5 > Open[2] && oc5 > Open[3] && (points == 0 || (points != 0 && global_maxi != transf_maxi))){ if(Close[i-4] > Open[i-4]){oc1 = Close[i-4];}else{oc1 = Open[i-4];} if(Close[i-3] > Open[i-3]){oc2 = Close[i-3];}else{oc2 = Open[i-3];} if(Close[i-2] > Open[i-2]){oc3 = Close[i-2];}else{oc3 = Open[i-2];} if(Close[i-1] > Open[i-1]){oc4 = Close[i-1];}else{oc4 = Open[i-1];} if(Close[i+1] > Open[i+1]){oc6 = Close[i+1];}else{oc6 = Open[i+1];} if(Close[i+2] > Open[i+2]){oc7 = Close[i+2];}else{oc7 = Open[i+2];} if(Close[i+3] > Open[i+3]){oc8 = Close[i+3];}else{oc8 = Open[i+3];} if(Close[i+4] > Open[i+4]){oc9 = Close[i+4];}else{oc9 = Open[i+4];} if(oc1 <= oc5 && oc2 <= oc5 && oc3 <= oc5 && oc4 <= oc5 && oc6 <= oc5 && oc7 <= oc5 && oc8 <= oc5 && oc9 <= oc5){ ObjectDelete("line_maxi"); ObjectDelete("maxi_magenta"); maxi = oc5 - 35*Point; ObjectCreate("line_maxi",OBJ_HLINE, 0, 0, maxi); ObjectSet("line_maxi",OBJPROP_COLOR,Aqua); ObjectSet("line_maxi",OBJPROP_STYLE,STYLE_DASHDOTDOT); comments("maxi",5,15,"Новый максимум: "+DoubleToStr(maxi,5),Aqua); if(points != 0){global_maxi = transf_maxi;} break; } } } if(i >= 480 && (points == 0 || (points != 0 && global_maxi != transf_maxi))){ ObjectDelete("line_maxi"); maxi = Close[0] + range*15*Point; ObjectCreate("line_maxi",OBJ_HLINE,0,0,maxi); ObjectSet("line_maxi",OBJPROP_COLOR,Magenta); ObjectSet("line_maxi",OBJPROP_STYLE,STYLE_DASHDOTDOT); comments("maxi",45,15,"Новый максимум: ",Aqua); comments("maxi_magenta",5,15,DoubleToStr(maxi,5),Magenta); if(points != 0){global_maxi = transf_maxi;} } } int find_mini(int points, int transf_mini){ int i; double oc1, oc2, oc3, oc4, oc5, oc6, oc7, oc8, oc9; for(i=4; i<=480; i++){ if(Close[i] < Open[i]){oc5 = Close[i];}else{oc5 = Open[i];} if(oc5 < Close[0]-points*Point && oc5 < Close[1] && oc5 < Close[2] && oc5 < Close[3] && oc5 < Open[1] && oc5 < Open[2] && oc5 < Open[3] && (points == 0 || (points != 0 && global_mini != transf_mini))){ if(Close[i-4] < Open[i-4]){oc1 = Close[i-4];}else{oc1 = Open[i-4];} if(Close[i-3] < Open[i-3]){oc2 = Close[i-3];}else{oc2 = Open[i-3];} if(Close[i-2] < Open[i-2]){oc3 = Close[i-2];}else{oc3 = Open[i-2];} if(Close[i-1] < Open[i-1]){oc4 = Close[i-1];}else{oc4 = Open[i-1];} if(Close[i+1] < Open[i+1]){oc6 = Close[i+1];}else{oc6 = Open[i+1];} if(Close[i+2] < Open[i+2]){oc7 = Close[i+2];}else{oc7 = Open[i+2];} if(Close[i+3] < Open[i+3]){oc8 = Close[i+3];}else{oc8 = Open[i+3];} if(Close[i+4] < Open[i+4]){oc9 = Close[i+4];}else{oc9 = Open[i+4];} if(oc1 >= oc5 && oc2 >= oc5 && oc3 >= oc5 && oc4 >= oc5 && oc6 >= oc5 && oc7 >= oc5 && oc8 >= oc5 && oc9 >= oc5){ ObjectDelete("line_mini"); ObjectDelete("mini_magenta"); mini = oc5 + 35*Point; ObjectCreate("line_mini",OBJ_HLINE, 0, 0, mini); ObjectSet("line_mini",OBJPROP_STYLE,STYLE_DASHDOTDOT); ObjectSet("line_mini",OBJPROP_COLOR,Aqua); comments("mini",5,30,"Новый минимум: "+DoubleToStr(mini,5),Aqua); if(points != 0){global_mini = transf_mini;} break; } } } if(i >= 480 && (points == 0 || (points != 0 && global_mini != transf_mini))){ ObjectDelete("line_mini"); mini = Close[0] - range*15*Point; ObjectCreate("line_mini",OBJ_HLINE, 0, 0, mini); ObjectSet("line_mini",OBJPROP_STYLE,STYLE_DASHDOTDOT); ObjectSet("line_mini",OBJPROP_COLOR,Magenta); comments("mini",45,30,"Новый минимум: ",Aqua); comments("mini_magenta",5,30,DoubleToStr(mini,5),Magenta); if(points != 0){global_mini = transf_mini;} } } int check_extremes(){ if(maxi != 0 && mini != 0){ maxi = ObjectGet("line_maxi",OBJPROP_PRICE1); mini = ObjectGet("line_mini",OBJPROP_PRICE1); if(ObjectFind("maxi_magenta") != -1){ comments("maxi",45,15,"Новый максимум: ",Aqua); comments("maxi_magenta",5,15,DoubleToStr(maxi,5),Magenta); } else{comments("maxi",5,15,"Новый максимум: "+DoubleToStr(maxi,5),Aqua);} if(ObjectFind("mini_magenta") != -1){ comments("mini",45,30,"Новый минимум: ",Aqua); comments("mini_magenta",5,30,DoubleToStr(mini,5),Magenta); } else{comments("mini",5,30,"Новый минимум: "+DoubleToStr(mini,5),Aqua);} } } int instantiate_levels(){ if(maxi != 0 && mini != 0 && trades <= 1){ if(Close[0] > maxi && maxi-mini >= range*10*Point){draw_levels(maxi-20*Point,maxi,Red);} else if(Close[0] > maxi && maxi-mini < range*10*Point){ find_maxi(100,TimeCurrent()); ObjectDelete("buystop"); ObjectDelete("buystop_takeprofit"); } if(Close[0] < mini && maxi-mini >= range*10*Point){draw_levels(mini+20*Point,mini,Green);} else if(Close[0] < mini && maxi-mini < range*10*Point){ find_mini(100,TimeCurrent()); ObjectDelete("sellstop"); ObjectDelete("sellstop_takeprofit"); } } } int draw_levels(double price, double price_tag, color couleur){ ObjectCreate("level_"+Time[0],OBJ_TREND,0,Time[0]-1800,price,Time[0]+1800,price); ObjectSet("level_"+Time[0],OBJPROP_COLOR,couleur); ObjectSet("level_"+Time[0],OBJPROP_RAY,False); ObjectSetText("level_"+Time[0],DoubleToStr(price_tag,5)); if(couleur == Green){find_mini(100,TimeCurrent());} else if(couleur == Red){find_maxi(100,TimeCurrent());} last_time = Time[0]; invalidate_levels(1,Red); invalidate_levels(1,Green); PlaySound("instantiation.wav"); Sleep(500); } int invalidate_levels(int integer, color couleur){ for(int i=integer; i<=ObjectsTotal()-1; i++){ if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == couleur){ ObjectSet("level_"+Time[i],OBJPROP_COLOR,RosyBrown); break; } } } int instantiate_stops(){ if(maxi != 0 && mini != 0 && trades == 0){ if(ObjectFind("buystop") == -1){draw_stops("buystop",maxi+stop_distance*10*Point);} if(ObjectFind("buystop_takeprofit") == -1){draw_stops("buystop_takeprofit",maxi+(stop_distance+range)*10*Point);} if(ObjectFind("sellstop") == -1){draw_stops("sellstop",mini-stop_distance*10*Point);} if(ObjectFind("sellstop_takeprofit") == -1){draw_stops("sellstop_takeprofit",mini-(stop_distance+range)*10*Point);} if(ObjectGet("buystop_takeprofit",OBJPROP_PRICE1)-ObjectGet("buystop",OBJPROP_PRICE1) < range*10*Point){ ObjectSet("buystop_takeprofit",OBJPROP_PRICE1,ObjectGet("buystop",OBJPROP_PRICE1)+range*10*Point); } if(ObjectGet("sellstop",OBJPROP_PRICE1)-ObjectGet("sellstop_takeprofit",OBJPROP_PRICE1) < range*10*Point){ ObjectSet("sellstop_takeprofit",OBJPROP_PRICE1,ObjectGet("sellstop",OBJPROP_PRICE1)-range*10*Point); } }else if(maxi != 0 && mini != 0 && trades > 0){ ObjectDelete("buystop"); ObjectDelete("buystop_takeprofit"); ObjectDelete("sellstop"); ObjectDelete("sellstop_takeprofit"); } } int draw_stops(string name, double price){ ObjectCreate(name,OBJ_HLINE,0,0,price); ObjectSet(name,OBJPROP_COLOR,Silver); ObjectSet(name,OBJPROP_STYLE,STYLE_DASHDOTDOT); } int open_first(){ double green_buy, red_sell; int i; if(maxi != 0 && mini != 0){ for(i=0; i<=47; i++){ if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Red){ red_sell = StrToDouble(ObjectDescription("level_"+Time[i])); }else if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Green){ green_buy = StrToDouble(ObjectDescription("level_"+Time[i])); } } if(i >= 47 && last_time < Time[1]){ if(green_buy > 0 && Close[0]-20*Point > green_buy && maxi-Close[0] >= range*10*Point && Close[0]-green_buy <= (range/2)*10*Point){ double buy_tp = ((maxi-Close[0])/3)*2; order_send(OP_BUY,lot,Ask,Ask-20000*Point,Ask+buy_tp,"m_buy",Green); }else if(green_buy == 0){ invalidate_levels(0,Green); } if(red_sell > 0 && Close[0]+20*Point < red_sell && Close[0]-mini >= range*10*Point && red_sell-Close[0] <= (range/2)*10*Point){ double sell_tp = ((Close[0]-mini)/3)*2; order_send(OP_SELL,lot,Bid,Bid+20000*Point,Bid-sell_tp,"m_sell",Red); }else if(red_sell == 0){ invalidate_levels(0,Red); } } if(Close[0] > ObjectGet("buystop",OBJPROP_PRICE1) && ObjectFind("buystop_takeprofit") != -1){ order_send(OP_BUY,lot,Ask,Ask-20000*Point,ObjectGet("buystop_takeprofit",OBJPROP_PRICE1),"m_buy",Green); } if(Close[0] < ObjectGet("sellstop",OBJPROP_PRICE1) && ObjectFind("sellstop_takeprofit") != -1){ order_send(OP_SELL,lot,Bid,Bid+20000*Point,ObjectGet("sellstop_takeprofit",OBJPROP_PRICE1),"m_sell",Red); } } } int open_second(int order_ticket){ OrderSelect(order_ticket,SELECT_BY_TICKET); double green_buy, red_sell; int i; if(maxi != 0 && mini != 0){ for(i=0; i<=47; i++){ if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Red){ red_sell = StrToDouble(ObjectDescription("level_"+Time[i])); }else if(ObjectGet("level_"+Time[i],OBJPROP_COLOR) == Green){ green_buy = StrToDouble(ObjectDescription("level_"+Time[i])); } } if(i >= 47 && last_time < Time[2]){ if(green_buy > 0 && Close[0]-20*Point > green_buy && OrderOpenPrice()-Close[0] >= range*10*Point && Close[0]-green_buy <= (range/2)*10*Point){ double buyDouble_tp = (OrderOpenPrice()-Close[0])/3+20*Point; if(trades == 1){order_send(OP_BUY,OrderLots()*2,Ask,Ask-20000*Point,Ask+buyDouble_tp,"m_buyDouble",Green);} }else if(green_buy == 0){ invalidate_levels(0,Green); } if(red_sell > 0 && Close[0]+20*Point < red_sell && Close[0]-OrderOpenPrice() >= range*10*Point && red_sell-Close[0] <= (range/2)*10*Point){ double sellDouble_tp = (Close[0]-OrderOpenPrice())/3+20*Point; if(trades == 1){order_send(OP_SELL,OrderLots()*2,Bid,Bid+20000*Point,Bid-sellDouble_tp,"m_sellDouble",Red);} }else if(red_sell == 0){ invalidate_levels(0,Red); } } } } int order_send(int type, double order_lot, double price, double sl, double tp, string comment, color couleur){ if(stochastic == FALSE || (stochastic == TRUE && (type == OP_BUY && h1 > h1_1+2) || (type == OP_SELL && h1 < h1_1-2))){ int ticket = OrderSend(Symbol(),type,order_lot,price,3,sl,tp,comment,0,0,couleur); if(ticket < 0){GetLastError();} else{ if(ObjectFind("takeprofit") != -1){ObjectSet("takeprofit",OBJPROP_PRICE1,tp);} for(int i=ObjectsTotal()-1; i>=0; i--){ if(ObjectType(ObjectName(i)) == OBJ_TREND){ if(ObjectGet(ObjectName(i),OBJPROP_COLOR) == Red || ObjectGet(ObjectName(i),OBJPROP_COLOR) == Green){ ObjectDelete(ObjectName(i)); break; } } } } }else{if(last_cancel < Time[2]){PlaySound("timeout.wav"); last_cancel = Time[0];}} } int change_label(){ double adx_h1 = MathFloor(iADX(NULL,PERIOD_H1,14,PRICE_CLOSE,MODE_MAIN,0)); double adx_h1_1 = MathFloor(iADX(NULL,PERIOD_H1,14,PRICE_CLOSE,MODE_MAIN,1)); for(int i=ObjectsTotal(); i>=0; i--){ string description = ObjectDescription(ObjectName(i)); if(StringFind(description,"m_",0) != -1 && ObjectType(ObjectName(i)) == OBJ_ARROW && StringLen(description) <= 12){ ObjectSetText(ObjectName(i),description+"; iStoch H1: "+DoubleToStr(h1,0)+" ("+DoubleToStr(h1_1,0)+"); H4: "+DoubleToStr(h4,0)+" ("+DoubleToStr(h4_1,0)+"); "+DoubleToStr(adx_h1,0)+" <> "+DoubleToStr(adx_h1_1,0)); break; } } } int define_takeprofit(int order_ticket){ OrderSelect(order_ticket,SELECT_BY_TICKET); int order_type = OrderType(); if(ObjectFind("takeprofit") == -1){ ObjectCreate("takeprofit",OBJ_HLINE,0,0,OrderTakeProfit()); ObjectSet("takeprofit",OBJPROP_COLOR,Gold); ObjectSet("takeprofit",OBJPROP_STYLE,STYLE_DASHDOTDOT); }else{ double current_takeprofit = ObjectGet("takeprofit",OBJPROP_PRICE1); for(int i=0; i<=OrdersTotal()-1; i++){ OrderSelect(i,SELECT_BY_POS); if(current_takeprofit != OrderTakeProfit() && order_type == OrderType()){ OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),current_takeprofit,0,Red); } } } } int close_manual(){ if(ObjectGet("close_manual",OBJPROP_XDISTANCE) > 30){ comments("close_manual",40,105,"Ручное закрытие ВКЛ.",Magenta); for(int i=0; i<=OrdersTotal()-1; i++){ OrderSelect(i,SELECT_BY_POS); if(OrderType() == OP_BUY && (OrderComment() == "m_buy" || OrderComment() == "m_buyDouble")){ OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); }else if(OrderType() == OP_SELL && (OrderComment() == "m_sell" || OrderComment() == "m_sellDouble")){ OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); } } } else{comments("close_manual",5,105,"Ручное закрытие ВЫКЛ.",Aqua);} } int close_plus(){ if(ObjectGet("close_plus",OBJPROP_XDISTANCE) > 30){ comments("close_plus",40,120,"Закрытие в плюсе ВКЛ.",Magenta); for(int i=0; i<=OrdersTotal()-1; i++){ OrderSelect(i,SELECT_BY_POS); if(OrderType() == OP_BUY && (OrderComment() == "m_buy" || OrderComment() == "m_buyDouble") && OrderProfit() > 0){ OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); }else if(OrderType() == OP_SELL && (OrderComment() == "m_sell" || OrderComment() == "m_sellDouble") && OrderProfit() > 0){ OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); } } } else{comments("close_plus",5,120,"Закрытие в плюсе ВЫКЛ.",Aqua);} } int trail(){ if(ObjectGet("trail",OBJPROP_XDISTANCE) > 30){ comments("trail",40,135,"Динам. трейлин-стоп ВКЛ.",Magenta); if(trades > 0){ for(int i=0; i<=OrdersTotal()-1; i++){ OrderSelect(i,SELECT_BY_POS); double profitability = OrderProfit()/OrderLots(); if(OrderStopLoss() == 0 && OrderType() == OP_BUY){OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-20000*Point,OrderTakeProfit(),0,Red);} if(OrderStopLoss() == 0 && OrderType() == OP_SELL){OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+20000*Point,OrderTakeProfit(),0,Red);} if(profitability > 40 && OrderType() == OP_BUY && (OrderComment() == "m_buy" || OrderComment() == "m_buyDouble")){ if(OrderStopLoss() != 0 && OrderStopLoss()-OrderOpenPrice() < (Bid-OrderOpenPrice())/2){ OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(Bid-OrderOpenPrice())/2,OrderTakeProfit(),0,Red); } }else if(profitability > 40 && OrderType() == OP_SELL && (OrderComment() == "m_sell" || OrderComment() == "m_sellDouble")){ if(OrderStopLoss() != 0 && OrderOpenPrice()-OrderStopLoss() < (OrderOpenPrice()-Ask)/2){ OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(OrderOpenPrice()-Ask)/2,OrderTakeProfit(),0,Red); } } } } }else{ comments("trail",5,135,"Динам. трейлин-стоп ВЫКЛ.",Aqua); if(trades > 0){ for(int j=0; j<=OrdersTotal()-1; j++){ OrderSelect(j,SELECT_BY_POS); if(OrderStopLoss() == 0 && OrderType() == OP_BUY){OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-20000*Point,OrderTakeProfit(),0,Red);} if(OrderStopLoss() == 0 && OrderType() == OP_SELL){OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+20000*Point,OrderTakeProfit(),0,Red);} if(OrderType() == OP_BUY && (OrderComment() == "m_buy" || OrderComment() == "m_buyDouble")){ if(OrderStopLoss() != 0 && OrderStopLoss() < Bid-trail*10*Point && OrderOpenPrice() < Bid-trail*10*Point){ OrderModify(OrderTicket(),OrderOpenPrice(),Bid-trail*10*Point,OrderTakeProfit(),0,Red); } }else if(OrderType() == OP_SELL && (OrderComment() == "m_sell" || OrderComment() == "m_sellDouble")){ if(OrderStopLoss() != 0 && OrderStopLoss() > Ask+trail*10*Point && OrderOpenPrice() > Ask+trail*10*Point){ OrderModify(OrderTicket(),OrderOpenPrice(),Ask+trail*10*Point,OrderTakeProfit(),0,Red); } } } } } } int comments(string name, int x, int y, string texto, color couleur){ if(ObjectFind(name) == -1){ObjectCreate(name,OBJ_LABEL,0,0,0);} ObjectSet(name,OBJPROP_XDISTANCE,x); ObjectSet(name,OBJPROP_YDISTANCE,y); ObjectSet(name,OBJPROP_CORNER,corner); ObjectSetText(name,texto,10,"Times New Roman",couleur); } int play_sound(){ for(int i=OrdersTotal()-1; i>=0; i--){ OrderSelect(i,SELECT_BY_POS); if(OrderType() == OP_BUY || OrderType() == OP_SELL){ double profit = OrderProfit()/OrderLots(); if(profit > 0 && profit > profit_max){ profit_max = profit; if(MathFloor((profit/10)/0.5) > plus){ plus = MathFloor((profit/10)/0.5); minus = 0; minus_num = 0; if(MathFloor(MathAbs(profit/100)) == plus_num){PlaySound("plus.wav");} else if(MathFloor(MathAbs(profit/100)) > plus_num){ plus_num = MathFloor(MathAbs(profit/100)); PlaySound("new_level.wav"); Sleep(1000); } } }else if(profit < 0 && profit < profit_max){ profit_max = profit; if(MathFloor((profit/10)/0.5) < minus){ minus = MathFloor((profit/10)/0.5); plus = 0; plus_num = 0; if(MathFloor(MathAbs(profit/100)) == minus_num){PlaySound("tick.wav");} else if(MathFloor(MathAbs(profit/100)) > minus_num){ minus_num = MathFloor(MathAbs(profit/100)); PlaySound("new_level.wav"); Sleep(1000); } } } } comments("profit",5,75,"Прибыльность: "+DoubleToStr(profit/10,1)+" (макс. "+DoubleToStr(profit_max/10,1)+")",Aqua); break; } }