Бесплатное написание советников и индикаторов на MQL4 #1 - Страница 209
Страница 209 из 215 ПерваяПервая ... 109 159 199 205 206 207 208 209 210 211 212 213 ... ПоследняяПоследняя
Показано с 2,081 по 2,090 из 2148

Тема: Бесплатное написание советников и индикаторов на MQL4 #1

  1. #2081
    Местный
    Регистрация
    04.01.2017
    Сообщений
    361
    Благодарности
    Получено: 136
    Отправлено: 6
    =raboco;1393064]Вот добавлена сетка на вторую кнопку, теперь стоит задача, вывести на них значение которое будет при достижении этого уровня
    может у кого завалялось, функция которая рисует линию с меткой надписью ?, был бы очень благодарен
    Добрый день!
    Попробуйте вместо ваших ...
    ObjectSetText("metka"+"1"," тренд более " +(DoubleToString(dlina_trenda + step*20,0)) +".п "+DoubleToString(ttrend_21,0)+" кол "+IntegerToString(tt21));

    сделать через ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
    Например:
    PHP код:

    //===================================================================
    void OnTick()
    {
    LANGUAGE=TerminalInfoString(TERMINAL_LANGUAGE)=="Russian";
    DrawLABEL("IsTradeAllowed",Text(LANGUAGE,"Торговля","Trade"),100,30,clrRed,ANCHOR_CENTER);
    DrawLABEL("rl CloseProfit",Text(LANGUAGE,"Закрытие по прибыли","Closing profit"),100,115,clrRed,ANCHOR_CENTER);

    return;
    }

    //------------------------------------------------------------------
    void DrawLABEL(string namestring Nameint Xint Ycolor clr,ENUM_ANCHOR_POINT align=ANCHOR_RIGHT)
    {
       if (
    ObjectFind(name)==-1)
       {
          
    ObjectCreate(nameOBJ_LABEL000);
          
    ObjectSet(nameOBJPROP_CORNER1);
          
    ObjectSet(nameOBJPROP_XDISTANCEX);
          
    ObjectSet(nameOBJPROP_YDISTANCEY);
          
    ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
          
    ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
          
    ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
          
    ObjectSetInteger(0,name,OBJPROP_ANCHOR,align);
       }
       
    ObjectSetText(name,Name,8,"Arial",clr);
    }

    //+------------------------------------------------------------------+ 
    string Text(bool P,string a,string b)
    {
       if (
    P) return(a);   else return(b);

    Тут как раз есть координаты, которые можно привязать к координатам окна.

    Вы не можете благодарить!
    Последний раз редактировалось Valerius; 18.09.2019 в 11:08.

  2. #2082
    Местный
    Регистрация
    27.12.2018
    Сообщений
    153
    Благодарности
    Получено: 0
    Отправлено: 76
    PHP код:
    ResetLastError();//--- сбросим значение ошибки  
    if(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);}  //--- успешное выполнение 
    //=================================================================== 
    Подскажите где в коде привязка ? именно кнопки к краю прямоугольника,

    - - - Добавлено - - -

    Как и где указать, что координата метки равна координате определенного прямоугольника
    я не понимаю как происходит перетаскивание т.е как меняются координаты X и Y
    в функции которая рисует кнопку,

    Вы не можете благодарить!
    Последний раз редактировалось raboco; 19.09.2019 в 00:38.

  3. #2083
    Местный
    Регистрация
    04.01.2017
    Сообщений
    361
    Благодарности
    Получено: 136
    Отправлено: 6
    Цитата Сообщение от raboco Посмотреть сообщение
    PHP код:
    ResetLastError();//--- сбросим значение ошибки  
    if(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);}  //--- успешное выполнение 
    //=================================================================== 
    Подскажите где в коде привязка ? именно кнопки к краю прямоугольника,

    - - - Добавлено - - -

    Как и где указать, что координата метки равна координате определенного прямоугольника
    я не понимаю как происходит перетаскивание т.е как меняются координаты X и Y
    в функции которая рисует кнопку,
    Вот смотрите, в int OnInit() есть строка ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
    указывающая, что при любом движении мышкой, будет выполнена функция
    void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam),
    в которой задаётся
    PHP код:
    RectLabelCreate(0,"RectLabel",0,20,30,44,180,C'236,233,216',BORDER_FLAT,CORNER_LEFT_UPPER,clrRed,STYLE_SOLID,1,false,true,true,0); //рисуется прямоугольник

       
    ButtonCreate(0,"NameBUY",0,22,32,40,14,CORNER_LEFT_UPPER,"B U Y","Tahoma",9,clrBlack,clrAliceBlue,clrNONE,false,false,false,true,0); //рисуются кнопки
       
    ButtonCreate(0,"NameSELL",0,22,52,40,14,CORNER_LEFT_UPPER,"SELL","Tahoma",9,clrBlack,clrAliceBlue,clrNONE,false,false,false,true,0);
       
       
    int x=(int) ObjectGetInteger(0,"RectLabel",OBJPROP_XDISTANCE); 
       
    int y=(int) ObjectGetInteger(0,"RectLabel",OBJPROP_YDISTANCE); 
    сам прямоугольник и кнопки.
    Иксу и Игреку присваиваются начальные значения левого и верхнего угла прямоугольника. Это та точка, за которую мышкой тянем или перемещаем сам прямоугольник.
    Далее от этих X и Y мы дистанцируем координаты кнопок.
    PHP код:
    ObjectSetInteger(0,"NameBUY",OBJPROP_XDISTANCE,x+2); 
       
    ObjectSetInteger(0,"NameBUY",OBJPROP_YDISTANCE,y+2); 
       
    ObjectSetInteger(0,"NameSELL",OBJPROP_XDISTANCE,x+2); 
       
    ObjectSetInteger(0,"NameSELL",OBJPROP_YDISTANCE,y+22); 
    то есть х+2, у+2 и т.д.
    Я вам скидывал файл, там есть эти строки. Вроде ничего сложного тут нет.
    А в вашем коде только создаётся кнопка с её параметрами.
    Также эти строки вот эти строки и отвечают за установку кнопки в определенном месте.
    PHP код:
    ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); 
    ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); //--- установим координаты кнопки 
    только к X и Y в ваших строчках нужно добавлять значения X и Y, взятые из координат прямоугольника...
    PHP код:
       int x=(int) ObjectGetInteger(0,"RectLabel",OBJPROP_XDISTANCE); 
       
    int y=(int) ObjectGetInteger(0,"RectLabel",OBJPROP_YDISTANCE); 
    Вложения Вложения

    Вы не можете благодарить!
    Последний раз редактировалось Valerius; 19.09.2019 в 09:43.

  4. #2084
    Местный
    Регистрация
    27.12.2018
    Сообщений
    153
    Благодарности
    Получено: 0
    Отправлено: 76
    Цитата Сообщение от Valerius Посмотреть сообщение
    Вот смотрите, в int OnInit() есть строка ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
    указывающая, что при любом движении мышкой, будет выполнена функция
    void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam),
    в которой задаётся
    PHP код:
    RectLabelCreate(0,"RectLabel",0,20,30,44,180,C'236,233,216',BORDER_FLAT,CORNER_LEFT_UPPER,clrRed,STYLE_SOLID,1,false,true,true,0); //рисуется прямоугольник

       
    ButtonCreate(0,"NameBUY",0,22,32,40,14,CORNER_LEFT_UPPER,"B U Y","Tahoma",9,clrBlack,clrAliceBlue,clrNONE,false,false,false,true,0); //рисуются кнопки
       
    ButtonCreate(0,"NameSELL",0,22,52,40,14,CORNER_LEFT_UPPER,"SELL","Tahoma",9,clrBlack,clrAliceBlue,clrNONE,false,false,false,true,0);
       
       
    int x=(int) ObjectGetInteger(0,"RectLabel",OBJPROP_XDISTANCE); 
       
    int y=(int) ObjectGetInteger(0,"RectLabel",OBJPROP_YDISTANCE); 
    сам прямоугольник и кнопки.
    Иксу и Игреку присваиваются начальные значения левого и верхнего угла прямоугольника. Это та точка, за которую мышкой тянем или перемещаем сам прямоугольник.
    Далее от этих X и Y мы дистанцируем координаты кнопок.
    PHP код:
    ObjectSetInteger(0,"NameBUY",OBJPROP_XDISTANCE,x+2); 
       
    ObjectSetInteger(0,"NameBUY",OBJPROP_YDISTANCE,y+2); 
       
    ObjectSetInteger(0,"NameSELL",OBJPROP_XDISTANCE,x+2); 
       
    ObjectSetInteger(0,"NameSELL",OBJPROP_YDISTANCE,y+22); 
    то есть х+2, у+2 и т.д.
    Я вам скидывал файл, там есть эти строки. Вроде ничего сложного тут нет.
    А в вашем коде только создаётся кнопка с её параметрами.
    Также эти строки вот эти строки и отвечают за установку кнопки в определенном месте.
    PHP код:
    ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); 
    ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); //--- установим координаты кнопки 
    только к X и Y в ваших строчках нужно добавлять значения X и Y, взятые из координат прямоугольника...
    PHP код:
       int x=(int) ObjectGetInteger(0,"RectLabel",OBJPROP_XDISTANCE); 
       
    int y=(int) ObjectGetInteger(0,"RectLabel",OBJPROP_YDISTANCE); 
    Спасибо вроде понял,
    кнопка это то что вы выложили я их переименовал под себя для удобства,

    Вы не можете благодарить!

  5. #2085
    Местный
    Регистрация
    27.12.2018
    Сообщений
    153
    Благодарности
    Получено: 0
    Отправлено: 76
    Вот сделал все как вы сказали, странно но работает), спасибо огромное,
    файл вышел более 100кб поэтому пришлось архивировать,
    Вложения Вложения

    Вы не можете благодарить!

  6. #2086
    Местный
    Регистрация
    27.12.2018
    Сообщений
    153
    Благодарности
    Получено: 0
    Отправлено: 76
    Может есть функция чтоб рисовать подобные метки?
    Изображения Изображения

    Вы не можете благодарить!

  7. #2087
    Местный
    Регистрация
    04.01.2017
    Сообщений
    361
    Благодарности
    Получено: 136
    Отправлено: 6
    Цитата Сообщение от raboco Посмотреть сообщение
    Может есть функция чтоб рисовать подобные метки?
    Добрый день!
    Можете попробовать например такое:
    PHP код:
       if(!ObjectCreate(chart_ID,name,OBJ_ARROW_LEFT_PRICE,sub_window,time,price)) 
         { 
          Print(
    __FUNCTION__
                
    ": не удалось создать левую ценовую метку! Код ошибки = ",GetLastError()); 
          return(
    false); 
         } 
    или
    PHP код:
       if(!ObjectCreate(chart_ID,name,OBJ_ARROW_RIGHT_PRICE,sub_window,time,price)) 
         { 
          Print(
    __FUNCTION__
                
    ": не удалось создать правую ценовую метку! Код ошибки = ",GetLastError()); 
          return(
    false); 
         } 
    В хелпе много примеров с метками.
    Если что-то другое нужно, то придётся делать что-то другое. например прямоугольник и линию плюс текст.
    А это уже тормоза, что не гуд для оптимизации.

    Вы не можете благодарить!

  8. #2088
    Местный
    Регистрация
    27.12.2018
    Сообщений
    153
    Благодарности
    Получено: 0
    Отправлено: 76
    Цитата Сообщение от Valerius Посмотреть сообщение
    Добрый день!
    Можете попробовать например такое:
    PHP код:
       if(!ObjectCreate(chart_ID,name,OBJ_ARROW_LEFT_PRICE,sub_window,time,price)) 
         { 
          Print(
    __FUNCTION__
                
    ": не удалось создать левую ценовую метку! Код ошибки = ",GetLastError()); 
          return(
    false); 
         } 
    или
    PHP код:
       if(!ObjectCreate(chart_ID,name,OBJ_ARROW_RIGHT_PRICE,sub_window,time,price)) 
         { 
          Print(
    __FUNCTION__
                
    ": не удалось создать правую ценовую метку! Код ошибки = ",GetLastError()); 
          return(
    false); 
         } 
    В хелпе много примеров с метками.
    Если что-то другое нужно, то придётся делать что-то другое. например прямоугольник и линию плюс текст.
    А это уже тормоза, что не гуд для оптимизации.
    Хелп пересмотрел несколько раз, ценовую метку видел но мне нужно вместо цены вписать прибыль или убыток в валюте, кроме цены можноли туда чтолибо вписать? хотел вместо линий чтоб были метки

    Вы не можете благодарить!

  9. #2089
    Местный
    Регистрация
    04.01.2017
    Сообщений
    361
    Благодарности
    Получено: 136
    Отправлено: 6
    Цитата Сообщение от raboco Посмотреть сообщение
    Хелп пересмотрел несколько раз, ценовую метку видел но мне нужно вместо цены вписать прибыль или убыток в валюте, кроме цены можноли туда чтолибо вписать? хотел вместо линий чтоб были метки
    Если не устроит OBJ_EDIT (найдёте в хелпе), то только прямоугольник и линию плюс текст.
    Хоть она (
    OBJ_EDIT) и поле ввода, но туда можно вписать всё, что угодно и выставить нужные координаты плюс линию подрисовать, сделать как метку (поле ввода и линия).
    Вообщем фантазии предела нет. Главное чтобы вам нравилось.

    Вы не можете благодарить!

  10. #2090
    Местный
    Регистрация
    27.12.2018
    Сообщений
    153
    Благодарности
    Получено: 0
    Отправлено: 76
    Возможно ли при запуске программы сделать так чтоб включалась "смешение графика к концу" и выключалась сетка?
    сейчас хочу добавить кнопку мартина выставлялка оредеров, и кнопку профит

    кстати, мартин у меня на реальных ордерах, собираюсь сделать выставлялку виртуальных ордеров, чтоб визуально видеть возможные риски
    пока в голове вместо ордера выставлять метку какую нибудь,
    просьба, кто делал уже подобное и если есть какие ни будь наброски, можно и не рабочие, если выложите буду благодарен,

    пока вот так, чтоб проверить нужны открытые сделки
    Вложения Вложения

    Вы не можете благодарить!
    Последний раз редактировалось raboco; 22.09.2019 в 01:39.

Страница 209 из 215 ПерваяПервая ... 109 159 199 205 206 207 208 209 210 211 212 213 ... ПоследняяПоследняя

Похожие темы

  1. Ответов: 14
    Последнее сообщение: 14.10.2019, 13:00
  2. Бесплатное написание советников и индикаторов на MQL4
    от Rubinovi4 в разделе Программирование на MQL
    Ответов: 3446
    Последнее сообщение: 10.02.2017, 12:27

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •