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

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

  1. #2081
    Местный
    Регистрация
    27.12.2018
    Сообщений
    200
    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.

  2. #2082
    Цитата Сообщение от 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.

  3. #2083
    Местный
    Регистрация
    27.12.2018
    Сообщений
    200
    Цитата Сообщение от 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); 
    Спасибо вроде понял,
    кнопка это то что вы выложили я их переименовал под себя для удобства,

  4. #2084
    Местный
    Регистрация
    27.12.2018
    Сообщений
    200
    Вот сделал все как вы сказали, странно но работает), спасибо огромное,
    файл вышел более 100кб поэтому пришлось архивировать,
    Вложения Вложения

  5. #2085
    Местный
    Регистрация
    27.12.2018
    Сообщений
    200
    Может есть функция чтоб рисовать подобные метки?
    Изображения Изображения

  6. #2086
    Цитата Сообщение от 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); 
         } 
    В хелпе много примеров с метками.
    Если что-то другое нужно, то придётся делать что-то другое. например прямоугольник и линию плюс текст.
    А это уже тормоза, что не гуд для оптимизации.

  7. #2087
    Местный
    Регистрация
    27.12.2018
    Сообщений
    200
    Цитата Сообщение от 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); 
         } 
    В хелпе много примеров с метками.
    Если что-то другое нужно, то придётся делать что-то другое. например прямоугольник и линию плюс текст.
    А это уже тормоза, что не гуд для оптимизации.
    Хелп пересмотрел несколько раз, ценовую метку видел но мне нужно вместо цены вписать прибыль или убыток в валюте, кроме цены можноли туда чтолибо вписать? хотел вместо линий чтоб были метки

  8. #2088
    Цитата Сообщение от raboco Посмотреть сообщение
    Хелп пересмотрел несколько раз, ценовую метку видел но мне нужно вместо цены вписать прибыль или убыток в валюте, кроме цены можноли туда чтолибо вписать? хотел вместо линий чтоб были метки
    Если не устроит OBJ_EDIT (найдёте в хелпе), то только прямоугольник и линию плюс текст.
    Хоть она (
    OBJ_EDIT) и поле ввода, но туда можно вписать всё, что угодно и выставить нужные координаты плюс линию подрисовать, сделать как метку (поле ввода и линия).
    Вообщем фантазии предела нет. Главное чтобы вам нравилось.

  9. #2089
    Местный
    Регистрация
    27.12.2018
    Сообщений
    200
    Возможно ли при запуске программы сделать так чтоб включалась "смешение графика к концу" и выключалась сетка?
    сейчас хочу добавить кнопку мартина выставлялка оредеров, и кнопку профит

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

    пока вот так, чтоб проверить нужны открытые сделки
    Вложения Вложения
    Последний раз редактировалось raboco; 22.09.2019 в 01:39.

  10. #2090
    Цитата Сообщение от raboco Посмотреть сообщение
    Возможно ли при запуске программы сделать так чтоб включалась "смешение графика к концу" и выключалась сетка?
    сейчас хочу добавить кнопку мартина выставлялка оредеров, и кнопку профит

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

    пока вот так, чтоб проверить нужны открытые сделки
    Добрый день!
    В хелпе есть смещение ценового графика влево и вправо.
    PHP код:
    CHART_SHIFT – режим отступа ценового графика от правого края.
    //+------------------------------------------------------------------+ 
    //| Функция определяет, включен ли режим отображения ценового графика| 
    //| с отступом от правого края.                                      | 
    //+------------------------------------------------------------------+ 
    bool ChartShiftGet(bool &result,const long chart_ID=0
      { 
    //--- подготовим переменную для получения значения свойства 
       
    long value
    //--- сбросим значение ошибки 
       
    ResetLastError(); 
    //--- получим значение свойства 
       
    if(!ChartGetInteger(chart_ID,CHART_SHIFT,0,value)) 
         { 
          
    //--- выведем сообщение об ошибке в журнал "Эксперты" 
          
    Print(__FUNCTION__+", Error Code = ",GetLastError()); 
          return(
    false); 
         } 
    //--- запомним в переменную значение свойства графика 
       
    result=value
    //--- успешное выполнение 
       
    return(true); 
      } 
    //+------------------------------------------------------------------+ 
    //| Функция включает/выключает режим отображения ценового графика с  | 
    //| отступом от правого края.                                        | 
    //+------------------------------------------------------------------+ 
    bool ChartShiftSet(const bool value,const long chart_ID=0
      { 
    //--- сбросим значение ошибки 
       
    ResetLastError(); 
    //--- установим значение свойства 
       
    if(!ChartSetInteger(chart_ID,CHART_SHIFT,0,value)) 
         { 
          
    //--- выведем сообщение об ошибке в журнал "Эксперты" 
          
    Print(__FUNCTION__+", Error Code = ",GetLastError()); 
          return(
    false); 
         } 
    //--- успешное выполнение 
       
    return(true); 
      } 
    PHP код:
    CHART_SHOW_GRID – свойство отображения сетки на графике.
    //+------------------------------------------------------------------+ 
    //| Функция определяет, отображается ли сетка на графике.            | 
    //+------------------------------------------------------------------+ 
    bool ChartShowGridGet(bool &result,const long chart_ID=0
      { 
    //--- подготовим переменную для получения значения свойства 
       
    long value
    //--- сбросим значение ошибки 
       
    ResetLastError(); 
    //--- получим значение свойства 
       
    if(!ChartGetInteger(chart_ID,CHART_SHOW_GRID,0,value)) 
         { 
          
    //--- выведем сообщение об ошибке в журнал "Эксперты" 
          
    Print(__FUNCTION__+", Error Code = ",GetLastError()); 
          return(
    false); 
         } 
    //--- запомним в переменную значение свойства графика 
       
    result=value
    //--- успешное выполнение 
       
    return(true); 
      } 
    //+------------------------------------------------------------------+ 
    //| Функция включает/выключает отображение сетки на графике.         | 
    //+------------------------------------------------------------------+ 
    bool ChartShowGridSet(const bool value,const long chart_ID=0
      { 
    //--- сбросим значение ошибки 
       
    ResetLastError(); 
    //--- установим значение свойства 
       
    if(!ChartSetInteger(chart_ID,CHART_SHOW_GRID,0,value)) 
         { 
          
    //--- выведем сообщение об ошибке в журнал "Эксперты" 
          
    Print(__FUNCTION__+", Error Code = ",GetLastError()); 
          return(
    false); 
         } 
    //--- успешное выполнение 
       
    return(true); 
      } 
    Всё это есть хелпе. Просто нужно набрать в поиске то, что вам нужно.
    Последний раз редактировалось Valerius; 22.09.2019 в 12:11.

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

Похожие темы

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

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

Ваши права

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