初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1129

 
Alexey Viktorov:

你为什么要把自己搞得这么大呢?先指定要显示的缓冲区,然后再指定辅助缓冲区,这有什么问题?

算法的一个特殊性,辅助缓冲区 总是一个固定的数字,而要显示的缓冲区的数量是变化的。请回答上一篇文章中关于如何正确指定的问题?


阿列克谢-维克多罗夫

对于DRAW_HISTOGRAM2,指定了3个缓冲区,其顺序是强制性的,首先是2个值缓冲区,然后是一个颜色缓冲区。但是DRAW_HISTOGRAM和DRAW_HISTOGRAM2之间有区别,DRAW_HISTOGRAM是从零到缓冲区中的值绘制的,而DRAW_HISTOGRAM2是从一个 缓冲区的值到另一个缓冲区的值。

来自DRAW_HISTOGRAM2的描述:https://www.mql5.com/ru/docs/customind/indicators_examples/draw_histogram2

"建立DRAW_HISTOGRAM2所需的缓冲区数量为2。"

那么第三个缓冲区从哪里来?在同一链接的例子中,只有两个缓冲区,但没有说明颜色是否可以像普通DRAW_HISTOGRA一样交错使用?
 
The_Sheikh:

该算法的一个特点是,辅助缓冲区 总是一个固定的数字,而映射缓冲区的数量是变化的。请回答上一篇文章中关于如何正确指定的问题?


来自DRAW_HISTOGRAM2的描述:https://www.mql5.com/ru/docs/customind/indicators_examples/draw_histogram2

"构建DRAW_HISTOGRAM2所需的缓冲区数量为2。"

那么第三个缓冲区从哪里来?在同一链接的例子中,只有两个缓冲区,但没有说明颜色是否可以像普通DRAW_HISTOGRA一样交错使用?

是的,对不起,我没有注意到。我是指DRAW_COLOR_HISTOGRAM2和DRAW_COLOR_HISTOGRAM

 
The_Sheikh:

该算法的一个特殊性是,辅助缓冲区 总是一个固定的数字,而显示的缓冲区有不同的数字。请回答上一篇文章中关于如何正确指定这一切的问题?

我从来没有像这样取笑过自己。如果你愿意,可以进行实验。

 
与本主题无关的评论已被移至 "MQL4 MT4 MetaTrader 4初学者的问题"。
 

我如何用PlotIndexSetInteger()正确设置颜色?

当我指定

#property indicator_color3 clrRed,clrGreen

颜色设置正确,但当我使用

PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,clrRed)。

PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,clrGreen)。

那么线条的第一种颜色是红色,但第二种(以及随后的)是黑色(默认),而不是绿色,这是由于某种原因。

 
The_Sheikh:

我如何用PlotIndexSetInteger()正确设置颜色?

当我设定

#property indicator_color3 clrRed,clrGreen

颜色设置正确,但当我使用

PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,clrRed)。

PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,clrGreen)。

那么线条的第一种颜色是红色,但第二种颜色是黑色(默认),而不是绿色,这是由于某种原因。

为什么要在那里放一个修饰词?

 
Alexey Viktorov:

为什么要在那里放一个修饰词?

哪一个,在哪里?我看了MQL5文档 中的例子,也做了同样的事情。写下来,如何正确?

 
The_Sheikh:

哪一个,在哪里?我看了MQL5文档 中的例子,也做了同样的事情。写下来,如何正确?

显示指标缓冲区初始化的所有代码。
 
The_Sheikh:

哪一个,在哪里?我看了MQL5文档 中的例子,也做了同样的事情。如何做得正确?

查了一下

bool  PlotIndexSetInteger( 
   int  plot_index,        // индекс графического стиля 
   int  prop_id,           // идентификатор свойства 
   int  prop_value         // устанавливаемое значение 
   );

并做了这个。

bool  PlotIndexSetInteger( 
   int  2,                 // индекс графического стиля 
   int  PLOT_LINE_COLOR,   // идентификатор свойства 
   int  0,                 // модификатор свойства 
   int  clrGreen           // устанавливаемое значение 
   )

而且文件中说

[in] 指定属性的修改器。只有颜色指数属性需要一个修改器。


这意味着修改器必须是如果要分配不同颜色的地下室指标水平、费波水平或类似的东西。
 
Artyom Trishkin:
显示指标缓冲区初始化的所有代码。

类似这样的事情

#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);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]
)
{
ArraySetAsSeries(open,0);
ArraySetAsSeries(close,0);
ArraySetAsSeries(low,0);
ArraySetAsSeries(high,0);
ArrayInitialize(Arr11,0.0);
ArrayInitialize(Arr21,0.0);
ArrayInitialize(Arr22,0.0);
ArrayInitialize(Arr23,0.0);

for (int I=0;I<rates_total;I++)
{
Arr22[I]=low[I];
Arr23[I]=0.0;
//Arr23[I]=1.0;
}

return(rates_total);
}

阿列克谢-维克多罗夫

查了一下

并做了这个。

在那里,文件中说

这意味着修改器应该是如果地下室指标水平、费波水平和类似的东西被分配不同的颜色

正是我的情况。

下面是手册中DRAW_COLOR_HISTOGRAM2的例子的一部分。

/--- для каждого цветового индекса зададим новый цвет случайным образом
   for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)
     {
      //--- получим случайное число
      int number=MathRand();
      //--- получим индекс в массиве col[] как остаток от целочисленного деления
      int i=number%size;
      //--- установим цвет для каждого индекса как свойство PLOT_LINE_COLOR
      PlotIndexSetInteger(0,                    //  номер графического стиля
                          PLOT_LINE_COLOR,      //  идентификатор свойства
                          plot_color_ind,       //  индекс цвета, куда запишем цвет
                          cols[i]);             //  новый цвет

这里 plot_colors = 8, cols[] - 不同颜色的数组。但是,除了第一种颜色之外,终端并没有感知到任何颜色。