Ваши вопросы по языку MQL4

Yurkov

Почетный гражданин
SetIndexBuffer, не хочешь чтобы отображался подпольный индикатор - переделай его(индикатор, а не функцию).
Не знаю на сколько правильный подход, но поменял indicator_separate_window на indicator_chart_window и индюк из подвала пропал.
 

CrazyDoc

Новичок форума
Если будет много индикаторов\экспертов - подход не верный(МТ имеет ограниченное кол-во возможной используемой памяти). Во всем остальном:
Destroyer-Hime-Kantai-Collection-Anime-aoi-rin-%28miya1102%29-1669164.jpeg
 

st2050

Гуру форума
Здравствуйте, уважаемые программисты. Я программист негодный, ибо дельфин, а не сишник. Но когда нужно и корова может быть тягловым животным.

Преамбула: Использую индикатор на графике, который красит бары. А еще для анализа часто бывает нужно увидеть чистый график в виде линии. Приходится выключать индикатор руками через свойства, а это долго и неудобно.

Амбула: Подскажите, как программно отобразить/скрыть конкретный индикатор на графике? У меня собственная торговая панель, я специальную кнопку сделаю )))

Логика: Ведь сделал же кнопку, которая располагает график сверху/снизу. Лень - двигатель прогресса:
Код:
void SwapChartForeground() {
  if (ChartGetInteger(0,CHART_FOREGROUND))
  {
    ChartSetInteger(0,CHART_FOREGROUND,false);
    ObjectSetText(ButtonNamePrefix+"GA_ChartForeground","Front");
  }
  else
  {
    ChartSetInteger(0,CHART_FOREGROUND,true);
    ObjectSetText(ButtonNamePrefix+"GA_ChartForeground","Back");
  }
}
Ну так что скажут знатоки? :idea:
 

Ugar

Гуру форума
Здравствуйте, уважаемые программисты. Я программист негодный, ибо дельфин, а не сишник. Но когда нужно и корова может быть тягловым животным.

Преамбула: Использую индикатор на графике, который красит бары. А еще для анализа часто бывает нужно увидеть чистый график в виде линии. Приходится выключать индикатор руками через свойства, а это долго и неудобно.

Амбула: Подскажите, как программно отобразить/скрыть конкретный индикатор на графике? У меня собственная торговая панель, я специальную кнопку сделаю )))

Логика: Ведь сделал же кнопку, которая располагает график сверху/снизу. Лень - двигатель прогресса:
Код:
void SwapChartForeground() {
  if (ChartGetInteger(0,CHART_FOREGROUND))
  {
    ChartSetInteger(0,CHART_FOREGROUND,false);
    ObjectSetText(ButtonNamePrefix+"GA_ChartForeground","Front");
  }
  else
  {
    ChartSetInteger(0,CHART_FOREGROUND,true);
    ObjectSetText(ButtonNamePrefix+"GA_ChartForeground","Back");
  }
}
Ну так что скажут знатоки? :idea:
Индикатор же вычисляет данные для отображаемых буферов. Надо просто сделать что бы он это делал только когда кнопка нажата, а если не нажата буфера заполнить нулями.
 

st2050

Гуру форума
Индикатор же вычисляет данные для отображаемых буферов. Надо просто сделать что бы он это делал только когда кнопка нажата, а если не нажата буфера заполнить нулями.


Предлагаете изменить код индикатора так, чтобы он читал, нажата ли кнопка в советнике-торговой панели?

Технически это конечно возможно ... Только вот подобное решение не кажется изящным. Вроде как изнасилование индикатора получается.
А нельзя ли все таки сделать это каким-нибудь апишным способом?

Я правильно понял Вашу идею?
Код:
int _ShowBarPainter = 0;
GlobalVariableGet(GVNamePrefix+"ShowBarPainter", _ShowBarPainter);
if (_ShowBarPainter==0)
{
   FillNullValues();
   return(0);
}


Дааа, МТ4 такая няшка ) Это Вам даже не BASIC под DOS баловать!
 

Ugar

Гуру форума
Предлагаете изменить код индикатора так, чтобы он читал, нажата ли кнопка в советнике-торговой панели?

Технически это конечно возможно ... Только вот подобное решение не кажется изящным. Вроде как изнасилование индикатора получается.
А нельзя ли все таки сделать это каким-нибудь апишным способом?

Я правильно понял Вашу идею?
Код:
int _ShowBarPainter = 0;
GlobalVariableGet(GVNamePrefix+"ShowBarPainter", _ShowBarPainter);
if (_ShowBarPainter==0)
{
   FillNullValues();
   return(0);
}
Дааа, МТ4 такая няшка ) Это Вам даже не BASIC под DOS баловать!
зачем советник? Индикатором же надо управлять. Добавь в индикатор кнопку и управляй.
 

st2050

Гуру форума
зачем советник? Индикатором же надо управлять. Добавь в индикатор кнопку и управляй.


Это мне некрасиво. У меня все кнопки на торговой панели - она заточена под мой стиль торговли и предоставляет мне все необходимые инструменты управления не только ордерами, но и графиком.

Но в любом случае спасибо за идею, вполне рабочая.

---
Кстати, я у некоторых сов видел, что кнопки там не кнопки прямоугольные, а красивые имаджи. Нет ли какого-нибудь исходника в качестве примера?
А то кнопок у меня все больше, только все они квадратные и одинаковые. Иногда это приводит к неправильным действиям.
 

mobidik

-----
Кстати, я у некоторых сов видел, что кнопки там не кнопки прямоугольные, а красивые имаджи. Нет ли какого-нибудь исходника в качестве примера?
А то кнопок у меня все больше, только все они квадратные и одинаковые. Иногда это приводит к неправильным действиям.

Посмотри этот код, как пример, это сов помощник, много кнопок, есть выбор цветовой темы, изучай:
 

Вложения

  • cm-Trade System 240514-1.mq4
    43,4 КБ · Просмотры: 96

st2050

Гуру форума
А профилями попереключаться?


При переключении профиля все графики по всем парам будут отстроены заново (к тому же куча бесполезных вычислений). Это значит, что графические объекты, которые я рисовал в предыдущем профиле, пропадут с глаз моих. А еще может быть у меня другой тф открыт, чем в профиле сохранен.

Дальше я нарисую трендовый канал по ценам закрытия и переключусь обратно. Что же произойдет? Правильно, графики будут отстроены заново и я не увижу своего трендового канала.

Итого: Ваше предложение не принято.
Вообще, это предложение пользователя, но не программиста. Программисты создают возможности, пользователи используют существующие. Это два разных мира:
Программист создает


Пользователи нажимают кнопки
 
Последнее редактирование:

st2050

Гуру форума
В общем, я так решил вопрос (про сокрытие индикатора с чарта в режиме "линии"):

В торговой панели:
Этот код выполняется при нажатии кнопки смены вида графика
Код:
void SwapChartLine() {
  if (ChartGetInteger(0,CHART_MODE)==CHART_LINE) ChartSetInteger(0,CHART_MODE,CHART_CANDLES);
    else ChartSetInteger(0,CHART_MODE,CHART_LINE);
  RefreshChart();
}
В индикаторе:
Код:
extern bool      DonShowInChartLineMode = true;
...
int start()
  {
  
   if((DonShowInChartLineMode)&&(ChartGetInteger(0,CHART_MODE)==CHART_LINE))
   {
      SetIndexStyle(0,DRAW_NONE, 0, 1);
      SetIndexStyle(1,DRAW_NONE, 0, 1);
      SetIndexStyle(2,DRAW_NONE, 0, 1);
      SetIndexStyle(3,DRAW_NONE, 0, 1);
   }
   else
   {
      SetIndexStyle(0,DRAW_HISTOGRAM, 0, width_histogram);      
      SetIndexStyle(1,DRAW_HISTOGRAM, 0, width_histogram);      
      SetIndexStyle(2,DRAW_HISTOGRAM, 0, width_histogram);      
      SetIndexStyle(3,DRAW_HISTOGRAM, 0, width_histogram);      
   }

... дальше родной код
Спасибо за консультации.
Хорошо или плохо - результат достигнут. Индикатор прилагаю.
 

Вложения

  • Elder Impulse Candle Color2.mq4
    6,7 КБ · Просмотры: 42

Yurkov

Почетный гражданин
Я сам не программист, поэтому в коде все корректирую под себя методом тыка:) Но тут мне повстречалась ошибка array out of range. При чем при компиляции все отлично, а появляется она в журнале, если переключить на минутный график или месячный. Что за зверек такой? Не слушается моих тыков :D
 

CrazyDoc

Новичок форума
ошибка в массивах. добавь проверки на кол-во баров в истории, просмотри заполнение массивов
 

Ugar

Гуру форума
Я сам не программист, поэтому в коде все корректирую под себя методом тыка:) Но тут мне повстречалась ошибка array out of range. При чем при компиляции все отлично, а появляется она в журнале, если переключить на минутный график или месячный. Что за зверек такой? Не слушается моих тыков :D
Эта ошибка выскакивает при обращении к несуществующей ячейке массива. Например, самая распространённая ошибка:
int Arr[5];
Arr[5]=23;
Здесь попытка записи в несуществующую ячейку массива.
 

AlexeyVik

Программист mql4 mql5
И ещё вариант, был баг при обращении к нулевому бару. В билде 840 уже вроде исправлено. Обновись и проверь.
 

mobidik

-----
Подскажите как узнать:
1) установленный цвет фона графика?
2) высоту окна подвального индикатора?
 

st2050

Гуру форума
Подскажите как узнать:
1) установленный цвет фона графика?
2) высоту окна подвального индикатора?

1) Ищите по слову color здесь:
docs.mql4.com/ru/constants/chartconstants/enum_chart_property
Нажимайте на нужное название, откроется код с примером

2) Думаю, как-то так. Вверху кода индикатора:
Код:
#import "user32.dll"
int GetWindowRect(int hwnd, int& lpRect[]);

В функции определения размеров окна:
Код:
  int _Window_rect[4];     // Массив координат окна
  int _GUI_Window_Width, _GUI_Window_Height;

  GetWindowRect(*хендл окна*, Period()), _Window_rect);
  _GUI_Window_Width = _Window_rect[2]-_Window_rect[0];
  _GUI_Window_Height = _Window_rect[3]-_Window_rect[1];
Как получить хэндл подвального окна я не помню, но где-то видел. Хэндл всего окна WindowHandle(Symbol())
Желаю успехов )
 

ansol

Местный знаток
Я тоже люблю, чтобы было красиво, но не до такой же степени!

Система-то работает?

Смысла нет красиво рисовать, если прибыли нема!

Или слупим "якобы систему" и будем продавать? Да, можно больше денег заколотить.
И на этом людя зарабатывают, как, например, великий программер "Ким".


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

st2050

Гуру форума
Я тоже люблю, чтобы было красиво, но не до такой же степени!

Система-то работает?

Смысла нет красиво рисовать, если прибыли нема!

Или слупим "якобы систему" и будем продавать? Да, можно больше денег заколотить.
И на этом людя зарабатывают, как, например, великий программер "Ким".


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

1. Система работает. И я выкладывал ее для всех - в ветке "Поиск индикаторов".
2. Именно до такой степени. Я перфекционист. Если что-то возможно сделать и это мне хорошо и приятно - я это делаю. Торговую панель делал для себя под свой стиль торговли. Я ее не продаю, не раздаю и не хвастаюсь нигде.
3. У Игоря Кима множество скриптов и советников выложено в открытом коде с комментариями, чем я часто пользуюсь, т.к. опыт в MQL небольшой. Лично от меня ему респект за это.
И у него на сайте нет торговых систем - только утильные вещи, помогающие трейдерам. Большинство из них бесплатны.
 
Последнее редактирование:
Верх