Полезно MQL: примеры и готовые рецепты

Тема в разделе "В помощь трейдеру", создана пользователем loopsider, 7 Сентябрь 2014.

  1. loopsider

    loopsider Бывалый Команда форума Модератор

    Регистрация:
    13 Ноябрь 2013
    Сообщения:
    4.167
    Симпатии:
    3.802
    Баллы:
    435
    Пол:
    Мужской
    Как программно закрыть терминал?
    Следующий скрипт при перетаскивании на любой график закрывает терминал
    Код:
    //+------------------------------------------------------------------+
    //| Находит дескриптор главного окна и закрывает терминал            |
    //+------------------------------------------------------------------+
    #include <WinUser32.mqh>
    #property strict
    void OnStart() {
       // Дескриптор окна графика, на который брошен скрипт
       int hwnd=WindowHandle(Symbol(),Period());
       int hwnd_parent=0;
       while(!IsStopped())      // Поиск главного окна
       {
          hwnd=GetParent(hwnd); // Дескриптор предыдущего окна
          if(hwnd==0) break;    // Если предыдущий отсутствует
          hwnd_parent=hwnd;     // Запомнить
       }
       PostMessageA(hwnd_parent,WM_CLOSE,0,0);
    }
     
  2. loopsider

    loopsider Бывалый Команда форума Модератор

    Регистрация:
    13 Ноябрь 2013
    Сообщения:
    4.167
    Симпатии:
    3.802
    Баллы:
    435
    Пол:
    Мужской
    Как проверить, разрешена ли торговля советнику?
    Код:
    if(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))
       {Print("Automated trading is forbidden at the trade server side");Error=133;return;}
    if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
       {Print("Trading is forbidden!");Error=64;return;}
    if (!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)) 
       {Print("Check if automated trading is allowed in the terminal settings!");Error=4109;return;}
    if(!IsTradeAllowed(Symbol(),TimeLocal()))
       {Error=132; Print("Trading on the symbol "+symb+" is forbidden!");return;}
    Обращаем внимание на то, что в IsTradeAllowed передается TimeLocal, а не TimeCurrent. В противном случае на выходных TimeCurrent имеет значение времени последней котировки, так что IsTradeAllowed возвратит true.
     
  3. esa_vn

    esa_vn Новичок - ARGOLab.net -

    Регистрация:
    19 Декабрь 2016
    Сообщения:
    8
    Симпатии:
    4
    Баллы:
    3
    Пол:
    Мужской
    Я на Forex с:
    2013
    У меня на рабочем чарте присутствует информер, выводящий данные в несколько строк о некоторых параметрах текущего инструмента. Информер докручивал сам, переделывая готовую разработку на схожую тему. Строки формируются операторами вида
    ObjectCreate(BlockName,OBJ_LABEL,.....
    ObjectSetText("BlockName",BlockInfo,...
    в место экрана, задаваемое входными параметрами информера. И бывает так, что на этот информер наезжает график и инфу становится неудобно читать. Есть идея привязать положение последующих строк к положению первой строки, а её ведь по мере необходимости можно через двойной клик мышью переместить в любое место экрана. Как реализовать эту привязку средствами MQL4 ? Заранее благодарен, если сможете ответить !
     
  4. loopsider

    loopsider Бывалый Команда форума Модератор

    Регистрация:
    13 Ноябрь 2013
    Сообщения:
    4.167
    Симпатии:
    3.802
    Баллы:
    435
    Пол:
    Мужской
    Это обычно делается так.
    1. Если объекта на графике нет, создаем его с какими-то начальными координатами X,Y. Разрешаем его перетаскивать по графику. Обычно делают подложку, на которую выводят текст и которую можно перетаскивать.
    2. Если объект уже существует, считываем его координаты X,Y.
    Код:
       if (ObjectFind(name)==0)   { // если объект есть, считываем его координаты
          ObjectGetInteger(0,name,OBJPROP_XDISTANCE,0,X);
          ObjectGetInteger(0,name,OBJPROP_YDISTANCE,0,Y);
       }   else   { // если объекта нет, создаем его
          RectLabelCreate(....);
       }
    
    Все остальные объекты перетаскивать не разрешаем, их координаты отсчитываем от X,Y.
     
  5. esa_vn

    esa_vn Новичок - ARGOLab.net -

    Регистрация:
    19 Декабрь 2016
    Сообщения:
    8
    Симпатии:
    4
    Баллы:
    3
    Пол:
    Мужской
    Я на Forex с:
    2013
    Спасибо ! А как это делается ?
     
    Dmitri нравится это.
  6. loopsider

    loopsider Бывалый Команда форума Модератор

    Регистрация:
    13 Ноябрь 2013
    Сообщения:
    4.167
    Симпатии:
    3.802
    Баллы:
    435
    Пол:
    Мужской
    Код:
          ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
    
     
  7. esa_vn

    esa_vn Новичок - ARGOLab.net -

    Регистрация:
    19 Декабрь 2016
    Сообщения:
    8
    Симпатии:
    4
    Баллы:
    3
    Пол:
    Мужской
    Я на Forex с:
    2013
    А эту функцию надо создавать ?
    У меня ее в редакторе вроде бы нет ... upload_2016-12-19_11-55-1.png
     
  8. loopsider

    loopsider Бывалый Команда форума Модератор

    Регистрация:
    13 Ноябрь 2013
    Сообщения:
    4.167
    Симпатии:
    3.802
    Баллы:
    435
    Пол:
    Мужской
    Да, тут вы создаете тот объект который вам нужен.
    Код:
    //--------------------------------------------------------------------
    bool RectLabelCreate(const long             chart_ID=0,               // ID графика
                         const string           name="RectLabel",         // имя метки
                         const int              sub_window=0,             // номер подокна
                         const long              x=0,                     // координата по оси X
                         const long              y=0,                     // координата по оси y
                         const int              width=50,                 // ширина
                         const int              height=18,                // высота
                         const color            back_clr=clrNONE,         // цвет фона
                         const color            clr=clrNONE,              //цвет плоской границы (Flat)
                         const ENUM_LINE_STYLE  style=STYLE_SOLID,        // стиль плоской границы
                         const int              line_width=1,             // толщина плоской границы
                         const bool             back=false,               // на заднем плане
                         const bool             selection=false,          // выделить для перемещений
                         const bool             hidden=true,              // скрыт в списке объектов
                         const long             z_order=0,                // приоритет на нажатие мышью
                         const bool             selected=false)           // выделен
      {
       ResetLastError();
       if (ObjectFind(chart_ID,name)==-1)
       {
          ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0);
          ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
          ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
          ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
          ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
          ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
          ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
          ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selected);
          ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
          ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
       }
       ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
       ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
       ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
       ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
       ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
       ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
       return(true);
    }
     
  9. esa_vn

    esa_vn Новичок - ARGOLab.net -

    Регистрация:
    19 Декабрь 2016
    Сообщения:
    8
    Симпатии:
    4
    Баллы:
    3
    Пол:
    Мужской
    Я на Forex с:
    2013
    А вот ещё хочу спросить - нет ли решения в MQL4 для быстрого доступа к свойствам одного из установленных на чарте индикаторов, типа создания нужной кнопки ? Не очень удобно клацать Ctrl-I , затем ещё выбрать нужный индикатор из списка ... А если их многовато ? Вобщем, хочется слегка облегчить себе трейдерские будни
     
  10. loopsider

    loopsider Бывалый Команда форума Модератор

    Регистрация:
    13 Ноябрь 2013
    Сообщения:
    4.167
    Симпатии:
    3.802
    Баллы:
    435
    Пол:
    Мужской
    В индикаторе вы можете прописать создание любых объектов и какие угодно кнопки.
    Вот тут еще хорошая тема на эту тему Пожалуйста, войдите или зарегистрируйтесь для просмотра ссылок.
     
    Последнее редактирование: 19 Декабрь 2016
    esa_vn нравится это.

.

Поделиться этой страницей

translate