Не знаю на сколько правильный подход, но поменял indicator_separate_window на indicator_chart_window и индюк из подвала пропал.SetIndexBuffer, не хочешь чтобы отображался подпольный индикатор - переделай его(индикатор, а не функцию).
Не знаю на сколько правильный подход, но поменял indicator_separate_window на indicator_chart_window и индюк из подвала пропал.SetIndexBuffer, не хочешь чтобы отображался подпольный индикатор - переделай его(индикатор, а не функцию).
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:Код: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"); } }
Индикатор же вычисляет данные для отображаемых буферов. Надо просто сделать что бы он это делал только когда кнопка нажата, а если не нажата буфера заполнить нулями.
int _ShowBarPainter = 0;
GlobalVariableGet(GVNamePrefix+"ShowBarPainter", _ShowBarPainter);
if (_ShowBarPainter==0)
{
FillNullValues();
return(0);
}
зачем советник? Индикатором же надо управлять. Добавь в индикатор кнопку и управляй.Предлагаете изменить код индикатора так, чтобы он читал, нажата ли кнопка в советнике-торговой панели?
Технически это конечно возможно ... Только вот подобное решение не кажется изящным. Вроде как изнасилование индикатора получается.
А нельзя ли все таки сделать это каким-нибудь апишным способом?
Я правильно понял Вашу идею?
Дааа, МТ4 такая няшка ) Это Вам даже не BASIC под DOS баловать!Код:int _ShowBarPainter = 0; GlobalVariableGet(GVNamePrefix+"ShowBarPainter", _ShowBarPainter); if (_ShowBarPainter==0) { FillNullValues(); return(0); }
зачем советник? Индикатором же надо управлять. Добавь в индикатор кнопку и управляй.
Кстати, я у некоторых сов видел, что кнопки там не кнопки прямоугольные, а красивые имаджи. Нет ли какого-нибудь исходника в качестве примера?
А то кнопок у меня все больше, только все они квадратные и одинаковые. Иногда это приводит к неправильным действиям.
А профилями попереключаться?
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);
}
... дальше родной код
Эта ошибка выскакивает при обращении к несуществующей ячейке массива. Например, самая распространённая ошибка:Я сам не программист, поэтому в коде все корректирую под себя методом тыка Но тут мне повстречалась ошибка array out of range. При чем при компиляции все отлично, а появляется она в журнале, если переключить на минутный график или месячный. Что за зверек такой? Не слушается моих тыков
Подскажите как узнать:
1) установленный цвет фона графика?
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];
Подскажите как узнать:
1) установленный цвет фона графика?
2) высоту окна подвального индикатора?
Я тоже люблю, чтобы было красиво, но не до такой же степени!
Система-то работает?
Смысла нет красиво рисовать, если прибыли нема!
Или слупим "якобы систему" и будем продавать? Да, можно больше денег заколотить.
И на этом людя зарабатывают, как, например, великий программер "Ким".
Подозреваю, что всякие вики и угары тут тоже неспросто околачиваются, ась?