Ответить
19.06.2015, 06:31
Аватар для Yurkov
Yurkov Yurkov вне форума Почётный гражданин
Регистрация: 19.01.2011 / Сообщений: 659
Поблагодарили 365 раз(а) / Репутация: 368
SetIndexBuffer, не хочешь чтобы отображался подпольный индикатор - переделай его(индикатор, а не функцию).
Не знаю на сколько правильный подход, но поменял indicator_separate_window на indicator_chart_window и индюк из подвала пропал.
Подписка на сигналы:
https://www.mql5.com/ru/signals/240803
19.06.2015, 06:38
Аватар для CrazyDoc
CrazyDoc CrazyDoc вне форума Новичок форума
Регистрация: 02.05.2015 / Адрес: Ступино / Сообщений: 28
Поблагодарили 11 раз(а) / Репутация: 12
Если будет много индикаторов\экспертов - подход не верный(МТ имеет ограниченное кол-во возможной используемой памяти). Во всем остальном:
Yurkov 
20.06.2015, 06:46
Аватар для st2050
st2050 st2050 на форуме Местный знаток
Регистрация: 08.09.2012 / Сообщений: 335
Поблагодарили 624 раз(а) / Репутация: 625
Здравствуйте, уважаемые программисты. Я программист негодный, ибо дельфин, а не сишник. Но когда нужно и корова может быть тягловым животным.

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

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

Логика: Ведь сделал же кнопку, которая располагает график сверху/снизу. Лень - двигатель прогресса:

Скрытый текст


Код:
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");
  }
}
[свернуть]

Ну так что скажут знатоки?
20.06.2015, 08:26
Регистрация: 13.03.2009 / Сообщений: 2,360
Поблагодарили 1,966 раз(а) / Репутация: 2043
Здравствуйте, уважаемые программисты. Я программист негодный, ибо дельфин, а не сишник. Но когда нужно и корова может быть тягловым животным.

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

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

Логика: Ведь сделал же кнопку, которая располагает график сверху/снизу. Лень - двигатель прогресса:

Скрытый текст


Код:
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");
  }
}
[свернуть]

Ну так что скажут знатоки?
Индикатор же вычисляет данные для отображаемых буферов. Надо просто сделать что бы он это делал только когда кнопка нажата, а если не нажата буфера заполнить нулями.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
st2050 
20.06.2015, 08:53
Аватар для st2050
st2050 st2050 на форуме Местный знаток
Регистрация: 08.09.2012 / Сообщений: 335
Поблагодарили 624 раз(а) / Репутация: 625
Индикатор же вычисляет данные для отображаемых буферов. Надо просто сделать что бы он это делал только когда кнопка нажата, а если не нажата буфера заполнить нулями.

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

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

Я правильно понял Вашу идею?

Скрытый текст


Код:
int _ShowBarPainter = 0;
GlobalVariableGet(GVNamePrefix+"ShowBarPainter", _ShowBarPainter);
if (_ShowBarPainter==0)
{
   FillNullValues();
   return(0);
}

Дааа, МТ4 такая няшка ) Это Вам даже не BASIC под DOS баловать!
[свернуть]
20.06.2015, 10:05
Регистрация: 13.03.2009 / Сообщений: 2,360
Поблагодарили 1,966 раз(а) / Репутация: 2043
Предлагаете изменить код индикатора так, чтобы он читал, нажата ли кнопка в советнике-торговой панели?

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

Я правильно понял Вашу идею?

Скрытый текст


Код:
int _ShowBarPainter = 0;
GlobalVariableGet(GVNamePrefix+"ShowBarPainter", _ShowBarPainter);
if (_ShowBarPainter==0)
{
   FillNullValues();
   return(0);
}
Дааа, МТ4 такая няшка ) Это Вам даже не BASIC под DOS баловать!
[свернуть]
зачем советник? Индикатором же надо управлять. Добавь в индикатор кнопку и управляй.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
20.06.2015, 10:19
Аватар для st2050
st2050 st2050 на форуме Местный знаток
Регистрация: 08.09.2012 / Сообщений: 335
Поблагодарили 624 раз(а) / Репутация: 625
зачем советник? Индикатором же надо управлять. Добавь в индикатор кнопку и управляй.

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

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

---
Кстати, я у некоторых сов видел, что кнопки там не кнопки прямоугольные, а красивые имаджи. Нет ли какого-нибудь исходника в качестве примера?
А то кнопок у меня все больше, только все они квадратные и одинаковые. Иногда это приводит к неправильным действиям.
20.06.2015, 10:33
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,847
Поблагодарили 9,505 раз(а) / Репутация: 9510
Кстати, я у некоторых сов видел, что кнопки там не кнопки прямоугольные, а красивые имаджи. Нет ли какого-нибудь исходника в качестве примера?
А то кнопок у меня все больше, только все они квадратные и одинаковые. Иногда это приводит к неправильным действиям.
Посмотри этот код, как пример, это сов помощник, много кнопок, есть выбор цветовой темы, изучай:
cnut , st2050 
20.06.2015, 14:11
Регистрация: 14.02.2009 / Сообщений: 1,473
Поблагодарили 4,117 раз(а) / Репутация: 4119
А профилями попереключаться?
20.06.2015, 21:00
Аватар для st2050
st2050 st2050 на форуме Местный знаток
Регистрация: 08.09.2012 / Сообщений: 335
Поблагодарили 624 раз(а) / Репутация: 625
Сообщение от: поручик
А профилями попереключаться?

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

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

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

Скрытый текст


Программист создает


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

[свернуть]

Последний раз редактировалось st2050; 20.06.2015 в 21:34.
22.06.2015, 01:35
Аватар для st2050
st2050 st2050 на форуме Местный знаток
Регистрация: 08.09.2012 / Сообщений: 335
Поблагодарили 624 раз(а) / Репутация: 625
В общем, я так решил вопрос (про сокрытие индикатора с чарта в режиме "линии"):

В торговой панели:

Скрытый текст


Этот код выполняется при нажатии кнопки смены вида графика
Код:
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);      
   }

... дальше родной код
[свернуть]

Спасибо за консультации.
Хорошо или плохо - результат достигнут. Индикатор прилагаю.
23.06.2015, 05:31
Аватар для Yurkov
Yurkov Yurkov вне форума Почётный гражданин
Регистрация: 19.01.2011 / Сообщений: 659
Поблагодарили 365 раз(а) / Репутация: 368
Я сам не программист, поэтому в коде все корректирую под себя методом тыка Но тут мне повстречалась ошибка array out of range. При чем при компиляции все отлично, а появляется она в журнале, если переключить на минутный график или месячный. Что за зверек такой? Не слушается моих тыков
Подписка на сигналы:
https://www.mql5.com/ru/signals/240803
23.06.2015, 06:10
Аватар для CrazyDoc
CrazyDoc CrazyDoc вне форума Новичок форума
Регистрация: 02.05.2015 / Адрес: Ступино / Сообщений: 28
Поблагодарили 11 раз(а) / Репутация: 12
ошибка в массивах. добавь проверки на кол-во баров в истории, просмотри заполнение массивов
Yurkov 
23.06.2015, 15:08
Регистрация: 13.03.2009 / Сообщений: 2,360
Поблагодарили 1,966 раз(а) / Репутация: 2043
Я сам не программист, поэтому в коде все корректирую под себя методом тыка Но тут мне повстречалась ошибка array out of range. При чем при компиляции все отлично, а появляется она в журнале, если переключить на минутный график или месячный. Что за зверек такой? Не слушается моих тыков
Эта ошибка выскакивает при обращении к несуществующей ячейке массива. Например, самая распространённая ошибка:
int Arr[5];
Arr[5]=23;
Здесь попытка записи в несуществующую ячейку массива.
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Yurkov 
23.06.2015, 18:08
Аватар для AlexeyVik
AlexeyVik AlexeyVik вне форума Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,715 раз(а) / Репутация: 3711
И ещё вариант, был баг при обращении к нулевому бару. В билде 840 уже вроде исправлено. Обновись и проверь.
Ugar , Yurkov 
24.06.2015, 09:22
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,847
Поблагодарили 9,505 раз(а) / Репутация: 9510
Подскажите как узнать:
1) установленный цвет фона графика?
2) высоту окна подвального индикатора?
24.06.2015, 13:04
Аватар для st2050
st2050 st2050 на форуме Местный знаток
Регистрация: 08.09.2012 / Сообщений: 335
Поблагодарили 624 раз(а) / Репутация: 625
Подскажите как узнать:
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())
Желаю успехов )
24.06.2015, 13:25
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,847
Поблагодарили 9,505 раз(а) / Репутация: 9510
Подскажите как узнать:
1) установленный цвет фона графика?
2) высоту окна подвального индикатора?
По первому пункту уже нашел, определяется с помощью ф-ции: CHART_COLOR_BACKGROUND.
По второму - пока в поиске решения...
25.06.2015, 00:34
Аватар для ansol
ansol ansol на форуме Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,039
Поблагодарили 872 раз(а) / Репутация: 858
Я тоже люблю, чтобы было красиво, но не до такой же степени!

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

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

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


Подозреваю, что всякие вики и угары тут тоже неспросто околачиваются, ась?
25.06.2015, 01:54
Аватар для st2050
st2050 st2050 на форуме Местный знаток
Регистрация: 08.09.2012 / Сообщений: 335
Поблагодарили 624 раз(а) / Репутация: 625
Я тоже люблю, чтобы было красиво, но не до такой же степени!

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

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

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


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

Последний раз редактировалось st2050; 25.06.2015 в 02:26.
Ответить

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 12:15. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO