Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1129

 
Vladimir Karputov:

Это не годится. Вы даёте осколки фраз. В таких случаях универсальный ответ: Документация.

Когда перестанете надувать губы и обижаться - сформулируйте то, о чём я прошу:

То есть сейчас вообще не ясно, что Вы делаете, а самое главное не ясно ДЛЯ ЧЕГО. Не понятна конечная цель - а значит и никто не сможет угадать.

Я задал вопрос, указал проблему, привёл пример, который даже можно скомпилировать. Если Вам это не годится, значит Вы не имеете понятия о чём речь и соответственно не знаете ответа. В таких случаях универсальный ответ: учитесь читать.

Когда перестанете умничать, научитесь читать и формулировать собственные вопросы, то Вам станет ясна тема обсуждения.

Конечная цель: отрисовка гистограммы каждым из заданных цветов.


Alexey Viktorov:

Это как раз совсем не то. Это заполняется массив цветов которые будут присвоены в этой строке кода из документации

Верно, это заполняется массив цветов. И как я уже писал раньше, следующим способом (из примера) цвета заполняются и указываются корректно:

#property indicator_color2 GreenC,RedC

...

Arr23[i]=0.0; //Зелёный

Arr23[i]=1.0; //Красный


А при данном способе:

PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,GreenC);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,RedC);
...

Arr23[i]=0.0; //Зелёный

Arr23[i]=1.0; //Вместо красного получаем чёрный (т.е. цвет не задан)

 
The_Sheikh:
Чему первому? За каким вторым? Каким первым? О чём речь?

Покажите пример, чтобы не ходить вокруг да около.

#property indicator_chart_window
//#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots 2

#define GreenC 0x00FF00
#define RedC 0x0000FF
#property indicator_type1 DRAW_NONE
#property indicator_type2 DRAW_COLOR_HISTOGRAM2
//#property indicator_color2 GreenC,RedC

double
Arr11[],
Arr21[],
Arr22[],
Arr23[];

void OnInit()
{
SetIndexBuffer(0,Arr11,INDICATOR_CALCULATIONS);
SetIndexBuffer(1,Arr21,INDICATOR_DATA);
SetIndexBuffer(2,Arr22,INDICATOR_DATA);
SetIndexBuffer(3,Arr23,INDICATOR_COLOR_INDEX);
IndicatorSetInteger(INDICATOR_DIGITS,Digits());
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,4);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,GreenC);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,RedC);
//PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);

Первый. Второй. Третий.

Вы первому буферу задаёте тип цветной гистограммы. Для чего нужен второй? И почему буфер цвета идёт за вторым, когда должен идти за первым. У вас буфер цвета 3, а должен быть 2

 
Artyom Trishkin:

Первый. Второй. Третий.

Вы первому буферу задаёте тип цветной гистограммы. Для чего нужен второй? И почему буфер цвета идёт за вторым, когда должен идти за первым. У вас буфер цвета 3, а должен быть 2

Артём, ты не обратил внимание на то, что тип DRAW_COLOR_HISTOGRAM2 и у него два буфера данных и третий буфер цвета.

 
The_Sheikh:

Я задал вопрос, указал проблему, привёл пример, который даже можно скомпилировать. Если Вам это не годится, значит Вы не имеете понятия о чём речь и соответственно не знаете ответа. В таких случаях универсальный ответ: учитесь читать.

Когда перестанете умничать, научитесь читать и формулировать собственные вопросы, то Вам станет ясна тема обсуждения.

Конечная цель: отрисовка гистограммы каждым из заданных цветов.


Верно, это заполняется массив цветов. И как я уже писал раньше, следующим способом (из примера) цвета заполняются и указываются корректно:

#property indicator_color2 GreenC,RedC

...

Arr23[i]=0.0; //Зелёный

Arr23[i]=1.0; //Красный


А при данном способе:

PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,GreenC);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,RedC);
...

Arr23[i]=0.0; //Зелёный

Arr23[i]=1.0; //Вместо красного получаем чёрный (т.е. цвет не задан)

А почему эта строка закомментирована

//#property indicator_color2 GreenC,RedC
В неё хоть и другие цвета но должны быть вписаны. Или хотя-бы один, но декларация быть должна.
 
Alexey Viktorov:

Артём, ты не обратил внимание на то, что тип DRAW_COLOR_HISTOGRAM2 и у него два буфера данных и третий буфер цвета.

Да, верно. Не обратил.

 
Artyom Trishkin:

Да, верно.

В общем, да. Первый буфер используется для вычислений, DRAW_COLOR_HISTOGRAM2 рисуется по двум координатам/буферам + нужен ещё один для цвета.


Alexey Viktorov:

А почему эта строка закомментирована

В неё хоть и другие цвета но должны быть вписаны. Или хотя-бы один, но декларация быть должна.

Я использую либо

#property indicator_color2 GreenC,RedC

либо

PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,GreenC);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,RedC);

т.е. что-то одно, и полагал, что они взаимозаменяемы как и в MQL4, т.е. отсутствие директивы препроцессора для задания цвета заменяется функцией PlotIndexSetInteger(). В MQL5 это не так?

 
The_Sheikh:

В общем, да. Первый буфер используется для вычислений, DRAW_COLOR_HISTOGRAM2 рисуется по двум координатам/буферам + нужен ещё один для цвета.


Я использую либо

#property indicator_color2 GreenC,RedC

либо

PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,GreenC);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,RedC);

т.е. что-то одно, и полагал, что они взаимозаменяемы как и в MQL4, т.е. отсутствие директивы препроцессора для задания цвета заменяется функцией PlotIndexSetInteger(). В MQL5 это не так?

Ну вы-же даёте отрывки документации. А почему-же не досконально всё там изучаете? Ведь в примере директива присутствует независимо от наличия PlotIndexSetInteger

 
Alexey Viktorov:

Ну вы-же даёте отрывки документации. А почему-же не досконально всё там изучаете? Ведь в примере директива присутствует независимо от наличия PlotIndexSetInteger

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

В документации так же сказано, что для графического построения можно использовать до 64-х цветов. Но я не нашёл там способа, назначить число такой палитры без монотонного перечисления каждого цвета после директивы.

Тем не менее вопрос исчерпан.

 
The_Sheikh:

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

В документации так же сказано, что для графического построения можно использовать до 64-х цветов. Но я не нашёл там способа, назначить число такой палитры без монотонного перечисления каждого цвета после директивы.

Тем не менее вопрос исчерпан.

А вот это

#define GreenC 0x00FF00
#define RedC 0x0000FF

никак нельзя менять в цикле? Я с этим вообще не дружу и потому не знаю.

Ведь массив цветов можно заполнить и в цикле из другого массива. Там в примере есть массив color colors = {}; где перечислены цвета. А потом из него заполняется тот "служебный" массив посредством PlotIndexSetInteger(1,PLOT_LINE_COLOR, индекс_в_массиве, цвет);

 

Качаю с разных мест котировки, и вижу часто гепы в 1-2 бара, данных просто нет

Как их можно заполнить с минимальной потерей информации? Есть какие то алгоритмы?

Уверен метатрейдер этим занимается