//+------------------------------------------------------------------+ //| Sniper.mq4 | //| Copyright 2014, Kolosov | //| | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, Kolosov" #property description "Modified by LexLampard 2016" #property link "" #property version "2.00" #property strict // +----------------------------------------------------------------------+ // входные параметры | // +----------------------------------------------------------------------+ input double Lot = 0.1; // лот input int SlipPage = 3; // Проскальзывание int l_SlipPage; bool Tiket; // +----------------------------------------------------------------------+ // кнопки | // +----------------------------------------------------------------------+ string InpFont = "Calibri"; // Шрифт int InpFontSize = 11; // Размер шрифта color InpColor = clrBlack; // Цвет текста color InpBorderColor = clrNONE; // Цвет границы bool InpState = false; // Нажата/Отжата bool InpBack = false; // Объект на заднем плане bool InpSelection = false; // Выделить для перемещений bool InpHidden = true; // Скрыт в списке объектов long InpZOrder = 0; // Приоритет на нажатие мышью color buy_clr = clrRoyalBlue; color sel_clr = clrTomato; color cls_clr = clrGreenYellow; int x_size = 75; int y_size = 30; int x_step = 5; string Button[3] = {"button_buy", "button_sell", "button_close"}; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit(){ DrawElement(); if (Digits == 3 || Digits == 5) {l_SlipPage = SlipPage*10; } else{l_SlipPage = SlipPage; } return(INIT_SUCCEEDED);} //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason){ ObjectDelete(Button[0]); ObjectDelete(Button[1]); ObjectDelete(Button[2]); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if (IsTesting()) { // Кнопка BUY if(ObjectGetInteger(0,Button[0],OBJPROP_STATE,true))//--- если кнопка нажата { BUY(Lot); ObjectSetInteger(0,Button[0],OBJPROP_STATE,false); //--- отжать кнопку } // Кнопка SELL if(ObjectGetInteger(0,Button[1],OBJPROP_STATE,true))//--- если кнопка нажата { SELL(Lot); ObjectSetInteger(0,Button[1],OBJPROP_STATE,false); //--- отжать кнопку } // Кнопка CLOSE ALL if(ObjectGetInteger(0,Button[2],OBJPROP_STATE,true))//--- если кнопка нажата { CloseAll(); ObjectSetInteger(0,Button[2],OBJPROP_STATE,false); //--- отжать кнопку } ChartRedraw(); // принудительно перерисуем все объекты на графике } } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { bool selected; if (id == CHARTEVENT_OBJECT_CLICK) { string clickedChartObject = sparam; // Кнопка BUY if (clickedChartObject == Button[0]) { selected = ObjectGetInteger(0,Button[0],OBJPROP_STATE); //--- если кнопка нажата if (selected) { BUY(Lot); PlaySound("alert1.wav"); ObjectSetInteger(0,Button[0],OBJPROP_STATE,false); } } // Кнопка SELL if (clickedChartObject == Button[1]) { selected = ObjectGetInteger(0,Button[1],OBJPROP_STATE); //--- если кнопка нажата if (selected) { SELL(Lot); PlaySound("alert1.wav"); ObjectSetInteger(0,Button[1],OBJPROP_STATE,false); } } // Кнопка CLOSE ALL if (clickedChartObject == Button[2]) { selected = ObjectGetInteger(0,Button[2],OBJPROP_STATE); //--- если кнопка нажата if (selected) { CloseAll(); PlaySound("alert1.wav"); ObjectSetInteger(0,Button[2],OBJPROP_STATE,false); } } ChartRedraw(); // принудительно перерисуем все объекты на графике } } //+------------------------------------------------------------------+ bool BUY(double lot){ Tiket = OrderSend(Symbol(),OP_BUY,lot,MarketInfo(Symbol(),MODE_ASK),l_SlipPage,0,0,"BUY",0,0,Blue); if(!Tiket)return(false); return(true); } //+------------------------------------------------------------------+ bool SELL(double lot){ Tiket = OrderSend(Symbol(),OP_SELL,lot,MarketInfo(Symbol(),MODE_BID),l_SlipPage,0,0,"SELL",0,0,Red); if(!Tiket)return(false); return(true); } //+------------------------------------------------------------------+ void DrawElement() { string text = ""; // Кнопка для покупок int x_buy = 10, y_buy = 80; text = "Buy "; if (!ButtonCreate(0,Button[0],0,x_buy,y_buy,x_size,y_size,CORNER_LEFT_LOWER,text,InpFont,InpFontSize, InpColor,buy_clr,InpBorderColor,InpState,InpBack,InpSelection,InpHidden,InpZOrder)) return; // Кнопка для продаж int x_sell = 90, y_sell = 80; text = "Sell "; if (!ButtonCreate(0,Button[1],0,x_sell,y_sell,x_size,y_size,CORNER_LEFT_LOWER,text,InpFont,InpFontSize, InpColor,sel_clr,InpBorderColor,InpState,InpBack,InpSelection,InpHidden,InpZOrder)) return; // Кнопка для закрытия всех ордеров int x_close = 10, y_close = 40; text = "Close ALL"; if (!ButtonCreate(0,Button[2],0,x_close,y_close,2*x_size+5,y_size,CORNER_LEFT_LOWER,text,InpFont,InpFontSize, InpColor,cls_clr,InpBorderColor,InpState,InpBack,InpSelection,InpHidden,InpZOrder)) return; ChartRedraw(); } //------------------------------------------------------------------------------------------- //+------------------------------------------------------------------+ //| Создает кнопку | //+------------------------------------------------------------------+ bool ButtonCreate(const long chart_ID=0, // ID графика const string name="Button", // имя кнопки const int sub_window=0, // номер подокна const int x=0, // координата по оси X const int y=0, // координата по оси Y const int width=50, // ширина кнопки const int height=18, // высота кнопки const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки const string text="Button", // текст const string font="Arial", // шрифт const int font_size=10, // размер шрифта const color clr=clrBlack, // цвет текста const color back_clr=C'236,233,216', // цвет фона const color border_clr=clrNONE, // цвет границы const bool state=false, // нажата/отжата const bool back=false, // на заднем плане const bool selection=false, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { ResetLastError(); if(ObjectFind(name) == -1) {ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);} ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); // установим координаты кнопки ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); // установим размер кнопки ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); // установим угол графика, относительно которого будут определяться координаты точки ObjectSetString( chart_ID,name,OBJPROP_TEXT,text); // установим текст ObjectSetString( chart_ID,name,OBJPROP_FONT,font); // установим шрифт текста ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); // установим размер шрифта ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); // установим цвет текста ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); // установим цвет фона ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); // установим цвет границы ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); // отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); // переведем кнопку в заданное состояние ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); // включим (true) или отключим (false) режим перемещения кнопки мышью ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); // скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); // установим приоритет на получение события нажатия мыши на графике return(true); } // +----------------------------------------------------------------------+ // функция закрытия всех ордеров | // +----------------------------------------------------------------------+ void CloseAll(){ bool result; PlaySound("alert2.wav"); while(OrdersTotal() > 0) { for(int i = OrdersTotal(); i >= 0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)continue; switch(OrderType()) { case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, Red );break; case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, Blue);break; } } } PlaySound("alert2.wav"); return; }