Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1129

 
Alexey Viktorov:

¿Por qué tienes que dar tanta importancia a tu persona? ¿Cuál es el problema de asignar primero los búferes que se van a mostrar y luego los auxiliares?

Una peculiaridad del algoritmo, los búferes auxiliares son siempre un número fijo, mientras que el número de búferes a mostrar varía. Por favor, responde a la pregunta del post anterior sobre cómo especificar todo correctamente?


Alexey Viktorov:

Para DRAW_HISTOGRAM2 se especifican 3 búferes y la secuencia es obligatoria, 2 búferes de valor primero y un búfer de color después. Pero hay una diferencia entre DRAW_HISTOGRAM y DRAW_HISTOGRAM2 en que DRAW_HISTOGRAM se dibuja desde cero hasta el valor del buffer, mientras que DRAW_HISTOGRAM2 se dibuja desde el valor de un buffer hasta el valor de otro buffer.

De la descripción de DRAW_HISTOGRAM2 en https://www.mql5.com/ru/docs/customind/indicators_examples/draw_histogram2 :

"El número de buffers necesarios para construir DRAW_HISTOGRAM2 es 2".

¿De dónde saldría entonces el tercer colchón? Y en el ejemplo del mismo enlace sólo hay dos buffers, pero no se especifica si se pueden intercalar los colores de la misma manera que con un DRAW_HISTOGRA normal?
 
The_Sheikh:

Como peculiaridad del algoritmo, los búferes auxiliares son siempre un número fijo, mientras que el número de búferes mapeados varía. Por favor, responde a la pregunta del post anterior sobre cómo especificar todo correctamente?


De la descripción de DRAW_HISTOGRAM2 en https://www.mql5.com/ru/docs/customind/indicators_examples/draw_histogram2 :

"El número de buffers necesarios para construir DRAW_HISTOGRAM2 es 2".

¿De dónde saldría entonces el tercer colchón? Y en el ejemplo del mismo enlace sólo hay dos buffers, pero no se especifica si se pueden intercalar los colores de la misma manera que con un DRAW_HISTOGRA normal?

Sí, perdón por mi falta de atención. Me refiero a DRAW_COLOR_HISTOGRAM2 y DRAW_COLOR_HISTOGRAM

 
The_Sheikh:

Una peculiaridad del algoritmo, los búferes auxiliares son siempre un número fijo y los búferes mostrados son un número diferente. Por favor, responde a la pregunta del post anterior sobre cómo especificar correctamente todo esto.

Nunca me había burlado así de mí mismo. Si estás dispuesto, experimenta.

 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL4 MT4 MetaTrader 4".
 

¿Cómo puedo establecer los colores correctamente con PlotIndexSetInteger()?

Cuando especifique

#property indicator_color3 clrRed,clrGreen

los colores se ajustan correctamente, pero cuando utilizo el

PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,clrRed);

PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,clrGreen);

entonces el primer color de la línea es rojo, pero el segundo (y los siguientes) son negros (por defecto) en lugar de verdes por alguna razón.

 
The_Sheikh:

¿Cómo puedo establecer los colores correctamente con PlotIndexSetInteger()?

Cuando especifique

#property indicator_color3 clrRed,clrGreen

los colores se ajustan correctamente, pero cuando utilizo el

PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,clrRed);

PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,clrGreen);

entonces el primer color de la línea es rojo, pero el segundo es negro (por defecto) en lugar de verde por alguna razón.

¿Por qué poner un modificador?

 
Alexey Viktorov:

¿Por qué poner un modificador?

¿Cuál, dónde? He mirado el ejemplo en la documentación de MQL5 y he hecho lo mismo. Escríbelo, ¿cómo es de correcto?

 
The_Sheikh:

¿Cuál, dónde? He mirado el ejemplo en la documentación de MQL5 y he hecho lo mismo. Escríbelo, ¿cómo es de correcto?

Mostrar todo el código para la inicialización de los buffers de los indicadores.
 
The_Sheikh:

¿Cuál, dónde? He mirado el ejemplo en la documentación de MQL5 y he hecho lo mismo. ¿Cómo hacerlo bien?

Lo he buscado

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

e hizo esto.

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

Y dice en la documentación

[in] Modificador de la propiedad especificada. Sólo las propiedades de índice de color requieren un modificador.


Esto significa que el modificador debe ser si se van a asignar diferentes colores de niveles de indicadores de sótano, niveles de Fibo o algo similar
 
Artyom Trishkin:
Mostrar todo el código para la inicialización de los buffers de los indicadores.

Algo así

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

Alexey Viktorov:

Lo he buscado

e hizo esto.

Y allí, en la documentación dice

Esto significa que el modificador debe ser si se asignan diferentes colores de los niveles del indicador de sótano, los niveles de fibo y algo similar

Exactamente mi caso.

Aquí hay un trozo del ejemplo para DRAW_COLOR_HISTOGRAM2 en el manual:

/--- для каждого цветового индекса зададим новый цвет случайным образом
   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]);             //  новый цвет

Aquí plot_colors = 8, cols[] - array con diferentes colores. Pero el terminal no percibe ningún color excepto el primero.