//+------------------------------------------------------------------+
//| Button.mq4 |
//| Copyright 2024, Ve |
//| kupiscript@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, Ve"
#property link "kupiscript@yandex.ru"
#property version "1.00"
#property strict
int Magic = 0;
int Slip = 10;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
RectLabelCreate("Main",20,20,120,100,clrSilver);
ButtonCreate("ButtonClose",40,50,80,30,"Close All",clrYellowGreen,false);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ObjectsDeleteAll();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(ObjectGetInteger(0,"ButtonClose",OBJPROP_STATE)==1)
{
if(MessageBox("Действительно вы хотите закрыть все ордера?",NULL,MB_YESNO)==6)
{
CloseAll();
}
ObjectSetInteger(0,"ButtonClose",OBJPROP_STATE,false);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
//| Создает кнопку |
//+------------------------------------------------------------------+
bool ButtonCreate(string name,int x,int y,int width,int height,string text,color back_clr,bool state)
{
long chart_ID=0; // ID графика
int sub_window=0; // номер подокна
ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER; // угол графика для привязки
string font="Arial";
int fonts_size=12; // размер шрифта
color clr=clrBlack; // цвет текста
color border_clr=back_clr; // цвет границы
bool back=false; // на заднем плане
bool selection=true; // выделить для перемещений
bool selected =false;
bool hidden=true; // скрыт в списке объектов
long z_order=0; // приоритет на нажатие мышью
if(ObjectFind(name)<0)
{
//--- сбросим значение ошибки
ResetLastError();
//--- создадим кнопку
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,fonts_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);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- переведем кнопку в заданное состояние
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
//--- включим (true) или отключим (false) режим перемещения кнопки мышью
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selected);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
}
return(true);
}
//+------------------------------------------------------------------+
//| Создает прямоугольную метку |
//+------------------------------------------------------------------+
bool RectLabelCreate(string name,int x,int y,int width,int height,color back_clr)
{
long chart_ID=0; // ID графика
int sub_window=0; // номер подокна
ENUM_BORDER_TYPE border=BORDER_SUNKEN; // тип границы
ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER; // угол графика для привязки
color clr=clrRed; // цвет плоской границы (Flat)
ENUM_LINE_STYLE style=STYLE_SOLID; // стиль плоской границы
int line_width=1; // толщина плоской границы
bool back=false; // на заднем плане
bool selection=true; // выделить для перемещений
bool selected =true;
bool hidden=true; // скрыт в списке объектов
long z_order=0; // приоритет на нажатие мышью
if(ObjectFind(name)<0)
{
//--- сбросим значение ошибки
ResetLastError();
//--- создадим прямоугольную метку
ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,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_BGCOLOR,back_clr);
//--- установим тип границы
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим цвет плоской рамки (в режиме Flat)
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линии плоской рамки
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину плоской границы
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения метки мышью
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selected);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
}
return(true);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if(id==CHARTEVENT_MOUSE_MOVE && sparam=="1")
{
int x=(int)ObjectGetInteger(0,"Main",OBJPROP_XDISTANCE);
int y=(int)ObjectGetInteger(0,"Main",OBJPROP_YDISTANCE);
ObjectSetInteger(0,"ButtonClose",OBJPROP_XDISTANCE,x+20);
ObjectSetInteger(0,"ButtonClose",OBJPROP_YDISTANCE,y+30);
}
if(id==CHARTEVENT_OBJECT_CLICK && sparam=="ButtonClose")
{
int x=(int)ObjectGetInteger(0,"Main",OBJPROP_XDISTANCE);
int y=(int)ObjectGetInteger(0,"Main",OBJPROP_YDISTANCE);
ObjectSetInteger(0,"ButtonClose",OBJPROP_XDISTANCE,x+20);
ObjectSetInteger(0,"ButtonClose",OBJPROP_YDISTANCE,y+30);
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Button.mq4 |
//| Copyright 2024, Ve |
//| kupiscript@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, Ve"
#property link "kupiscript@yandex.ru"
#property version "1.00"
#property strict
int Magic = 0;
int Slip = 10;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
ButtonCreate("ButtonClose",40,50,80,30,"Close All",clrYellowGreen,false);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ObjectsDeleteAll();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(ObjectGetInteger(0,"ButtonClose",OBJPROP_STATE)==1)
{
if(MessageBox("Действительно вы хотите закрыть все ордера?",NULL,MB_YESNO)==6)
{
CloseAll();
}
ObjectSetInteger(0,"ButtonClose",OBJPROP_STATE,false);
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
//| Создает кнопку |
//+------------------------------------------------------------------+
bool ButtonCreate(string name,int x,int y,int width,int height,string text,color back_clr,bool state)
{
long chart_ID=0; // ID графика
int sub_window=0; // номер подокна
ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER; // угол графика для привязки
string font="Arial";
int fonts_size=12; // размер шрифта
color clr=clrBlack; // цвет текста
color border_clr=back_clr; // цвет границы
bool back=false; // на заднем плане
bool selection=true; // выделить для перемещений
bool selected =false;
bool hidden=true; // скрыт в списке объектов
long z_order=0; // приоритет на нажатие мышью
if(ObjectFind(name)<0)
{
//--- сбросим значение ошибки
ResetLastError();
//--- создадим кнопку
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,fonts_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);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- переведем кнопку в заданное состояние
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
//--- включим (true) или отключим (false) режим перемещения кнопки мышью
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selected);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
}
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int SymbolsCount()
{
int count = 0;
string symbols[];
for(int i=PositionsTotal()-1; i>=0; i--)
{
if(PositionSelectByTicket(PositionGetTicket(i)))
{
if(PositionGetInteger(POSITION_TYPE)==1)
{
bool is_elem = false;
for(int j = 0; j < ArraySize(symbols); j++)
{
if(PositionGetString(POSITION_SYMBOL) == symbols[j])
{
is_elem = true;
}
}
if(!is_elem || ArraySize(symbols) == 0)
{
ArrayResize(symbols,i + 1);
symbols[i] = PositionGetString(POSITION_SYMBOL);
count++;
}
}
}
}
return(count);
}
www.opentraders.ru/downloads/3901/
zakaz.opentraders.ru/131799.html
www.opentraders.ru/downloads/3616/
).
AM2