рисовать прямоугольник на заданное(настройка в индюке) количество часов. верхняя и нижняя граница определяется по максимуму и минимуму задаваемого временного интервала (настройка в индюке) .
пример.
временной интервал в данном случае 2022.02.01 2:00 - 2022.02.01 14:00 рисуется на 72 часа (от ближайшей точки минимума или максимума к началу интервала)
рисовать прямоугольник на заданное(настройка в индюке) количество часов. верхняя и нижняя граница определяется по максимуму и минимуму задаваемого временного интервала (настройка в индюке) .
пример.
временной интервал в данном случае 2022.02.01 2:00 - 2022.02.01 14:00 рисуется на 72 часа (от ближайшей точки минимума или максимума к началу интервала)
//+------------------------------------------------------------------+//| OBJ_RECTANGLE.mq4 |//| Copyright 2022, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2022, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"//--- описание#property description"Скрипт строит прямоугольник на графике."#property description"Координаты точек привязки задаются в"#property description"процентах от размеров окна графика."#property strict//--- покажем окно входных параметров при запуске скрипта#property script_show_inputs//--- входные параметры скриптаinputstring InpName="Rectangle"; // Имя прямоугольникаinputint InpDate1=40; // Дата 1-ой точки в %inputint InpPrice1=40; // Цена 1-ой точки в %inputint InpDate2=60; // Дата 2-ой точки в %inputint InpPrice2=60; // Цена 2-ой точки в %inputcolor InpColor=clrRed; // Цвет прямоугольникаinputENUM_LINE_STYLE InpStyle=STYLE_DASH; // Стиль линий прямоугольникаinputint InpWidth=2; // Толщина линий прямоугольникаinputbool InpFill=true; // Заливка прямоугольника цветомinputbool InpBack=false; // Прямоугольника на заднем планеinputbool InpSelection=true; // Выделить для перемещенийinputbool InpHidden=true; // Скрыт в списке объектовinputlong InpZOrder=0; // Приоритет на нажатие мышью//+------------------------------------------------------------------+//| Cоздает прямоугольник по заданным координатам |//+------------------------------------------------------------------+bool RectangleCreate(constlong chart_ID=0, // ID графикаconststring name="Rectangle", // имя прямоугольникаconstint sub_window=0, // номер подокнаdatetime time1=0, // время первой точкиdouble price1=0, // цена первой точкиdatetime time2=0, // время второй точкиdouble price2=0, // цена второй точкиconstcolor clr=clrRed, // цвет прямоугольникаconstENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольникаconstint width=1, // толщина линий прямоугольникаconstbool fill=false, // заливка прямоугольника цветомconstbool back=false, // на заднем планеconstbool selection=true, // выделить для перемещенийconstbool hidden=true, // скрыт в списке объектовconstlong z_order=0) // приоритет на нажатие мышью
{
//--- установим координаты точек привязки, если они не заданы
ChangeRectangleEmptyPoints(time1,price1,time2,price2);
//--- сбросим значение ошибкиResetLastError();
//--- создадим прямоугольник по заданным координатамif(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": не удалось создать прямоугольник! Код ошибки = ",GetLastError());
return(false);
}
//--- установим цвет прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линий прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линий прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- включим (true) или отключим (false) режим заливки прямоугольникаObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill);
//--- отобразим на переднем (false) или заднем (true) планеObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection//--- по умолчанию равен true, что позволяет выделять и перемещать этот объектObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектовObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графикеObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнениеreturn(true);
}
//+------------------------------------------------------------------+//| Перемещает точку привязки прямоугольника |//+------------------------------------------------------------------+bool RectanglePointChange(constlong chart_ID=0, // ID графикаconststring name="Rectangle", // имя прямоугольникаconstint point_index=0, // номер точки привязкиdatetime time=0, // координата времени точки привязкиdouble price=0) // координата цены точки привязки
{
//--- если координаты точки не заданы, то перемещаем ее на текущий бар с ценой Bidif(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- сбросим значение ошибкиResetLastError();
//--- переместим точку привязкиif(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": не удалось переместить точку привязки! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнениеreturn(true);
}
//+------------------------------------------------------------------+//| Удаляет прямоугольник |//+------------------------------------------------------------------+bool RectangleDelete(constlong chart_ID=0, // ID графикаconststring name="Rectangle") // имя прямоугольника
{
//--- сбросим значение ошибкиResetLastError();
//--- удалим прямоугольникif(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": не удалось удалить прямоугольник! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнениеreturn(true);
}
//+------------------------------------------------------------------+//| Проверяет значения точек привязки прямоугольника и для пустых |//| значений устанавливает значения по умолчанию |//+------------------------------------------------------------------+void ChangeRectangleEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- если время первой точки не задано, то она будет на текущем бареif(!time1)
time1=TimeCurrent();
//--- если цена первой точки не задана, то она будет иметь значение Bidif(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- если время второй точки не задано, то она лежит на 9 баров левее второйif(!time2)
{
//--- массив для приема времени открытия 10 последних баровdatetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- установим вторую точку на 9 баров левее первой
time2=temp[0];
}
//--- если цена второй точки не задана, сдвинем ее на 300 пунктов ниже первойif(!price2)
price2=price1-300*SymbolInfoDouble(Symbol(),SYMBOL_POINT);
}
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//--- проверим входные параметры на корректностьif(InpDate1<0 || InpDate1>100 || InpPrice1<0 || InpPrice1>100 ||
InpDate2<0 || InpDate2>100 || InpPrice2<0 || InpPrice2>100)
{
Print("Ошибка! Некорректные значения входных параметров!");
return;
}
//--- количество видимых баров в окне графикаint bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- размер массива priceint accuracy=1000;
//--- массивы для хранения значений дат и цен, которые будут использованы//--- для установки и изменения координат точек привязки прямоугольникаdatetime date[];
double price[];
//--- выделение памятиArrayResize(date,bars);
ArrayResize(price,accuracy);
//--- заполним массив датResetLastError();
if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
{
Print("Не удалось скопировать значения времени! Код ошибки = ",GetLastError());
return;
}
//--- заполним массив цен//--- найдем максимальное и минимальное значение графикаdouble max_price=ChartGetDouble(0,CHART_PRICE_MAX);
double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массивdouble step=(max_price-min_price)/accuracy;
for(int i=0; i<accuracy; i++)
price[i]=min_price+i*step;
//--- определим точки для рисования прямоугольникаint d1=InpDate1*(bars-1)/100;
int d2=InpDate2*(bars-1)/100;
int p1=InpPrice1*(accuracy-1)/100;
int p2=InpPrice2*(accuracy-1)/100;
//--- создадим прямоугольникif(!RectangleCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,
InpStyle,InpWidth,InpFill,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- перерисуем график и подождем 1 секундуChartRedraw();
Sleep(1000);
//--- теперь будем перемещать точки привязки прямоугольника//--- счетчик циклаint h_steps=bars/2;
//--- перемещаем точки привязкиfor(int i=0; i<h_steps; i++)
{
//--- возьмем следующие значенияif(d1<bars-1)
d1+=1;
if(d2>1)
d2-=1;
//--- сдвигаем точкиif(!RectanglePointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!RectanglePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- проверим факт принудительного завершения скриптаif(IsStopped())
return;
//--- перерисуем графикChartRedraw();
// задержка в 0.05 секундыSleep(50);
}
//--- задержка в 1 секундуSleep(1000);
//--- счетчик циклаint v_steps=accuracy/2;
//--- перемещаем точки привязкиfor(int i=0; i<v_steps; i++)
{
//--- возьмем следующие значенияif(p1<accuracy-1)
p1+=1;
if(p2>1)
p2-=1;
//--- сдвигаем точкиif(!RectanglePointChange(0,InpName,0,date[d1],price[p1]))
return;
if(!RectanglePointChange(0,InpName,1,date[d2],price[p2]))
return;
//--- проверим факт принудительного завершения скриптаif(IsStopped())
return;
//--- перерисуем графикChartRedraw();
}
//--- задержка в 1 секундуSleep(1000);
//--- удалим прямоугольник с графика
RectangleDelete(0,InpName);
ChartRedraw();
//--- задержка в 1 секундуSleep(1000);
//---
}
//+------------------------------------------------------------------+
OBJ_RECTANGLE - Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Здравствуйте, есть идея для торгового советника на мт5. Идея не нова все тот же сеточник, и тот же мартингейл. Вот только натяжение самой сетки не совсем стандартное, например: при открытии сделки на продажу по цене 1.13200 в один стандартный лот, выставляется отложенный ордер sell limit в 2 стандартных лота по цене 1.13400, следующий ордер равен четырем лотам и по цене 1.13800. То есть получается с каждым умножением лота на два будет умножаться и шаг сетки из расчета 1 лот=100pips
Мне нужно получить имя текущей валютной пары чтоб транслировать его в название кнопки. Например индикатор стоит на графике eurusd, мне необходимо, транслировать надпись eurusd в название кнопки. Соответственно,если на другой паре - транслируем имя другой валютной пары
Вопрос, как подтягивать. Переменная Symbol крашит мт
noxter195 #: Мне нужно получить имя текущей валютной пары чтоб транслировать его в название кнопки. Например индикатор стоит на графике eurusd, мне необходимо, транслировать надпись eurusd в название кнопки. Соответственно,если на другой паре - транслируем имя другой валютной пары
Вопрос, как подтягивать. Переменная Symbol крашит мт
Ничего не крашит, работает отменно со времён создания МетаТрейдера.
здравствуйте.можете написать советник по этим индекаторм с мартином но закрывал позиции или по общему тп или по первому тп исходника нету типа универсального советника для мт4
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
а индикатор написать можно бесплатно ?
такой пойдёт?
кто может напишите индюка для MT4..
задача.
рисовать прямоугольник на заданное(настройка в индюке) количество часов. верхняя и нижняя граница определяется по максимуму и минимуму задаваемого временного интервала (настройка в индюке) .
пример.
временной интервал в данном случае 2022.02.01 2:00 - 2022.02.01 14:00 рисуется на 72 часа (от ближайшей точки минимума или максимума к началу интервала)
кто может напишите индюка для MT4..
задача.
рисовать прямоугольник на заданное(настройка в индюке) количество часов. верхняя и нижняя граница определяется по максимуму и минимуму задаваемого временного интервала (настройка в индюке) .
пример.
временной интервал в данном случае 2022.02.01 2:00 - 2022.02.01 14:00 рисуется на 72 часа (от ближайшей точки минимума или максимума к началу интервала)
вот скрипт для примера - взят отсюда https://www.mql5.com/ru/docs/constants/objectconstants/enum_object/obj_rectangle
Друзья, как в мт4 получить имя окна на котором находится робот/индикатор. Например (eurusd)
Что предполагается под этим понятием?
Что предполагается под этим понятием?
Мне нужно получить имя текущей валютной пары чтоб транслировать его в название кнопки. Например индикатор стоит на графике eurusd, мне необходимо, транслировать надпись eurusd в название кнопки. Соответственно,если на другой паре - транслируем имя другой валютной пары
Ничего не крашит, работает отменно со времён создания МетаТрейдера.
Ничего не крашит, работает отменно со времён создания МетаТрейдера.
Да спасибо. Видимо проблема в терминале было. Попробовал на другом терминале, все заработало.