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

 
Yedelkin:
Me resulta difícil responder. Volví a leer tus mensajes pero no entendí lo de cambiar el tamaño del array. Su respuesta al código también depende de la comprensión del concepto. Tal vez alguien más responda.

Realmente no me importa cambiar el tamaño del array, le daré 20, por ejemplo.

 double masCenPoc[20]; 

 for(int i=0; i<20; i++){
 
   if((cena_poc < high && cena_poc < low)||(cena_poc > high && cena_poc > low))

//как вот дальше обозначить чтоб он запомнил значение цены уровня Рос?
    
    masCenPoc[i] = cena_poc;

else 

//и удалил значение из массива, если нашлось пересечение с ценой этого уровня Рос?
 
Top2n: Realmente no me importa cambiar el tamaño del array; lo pondré, por ejemplo, a 20.

Aquí tienes un array de 20 elementos. Supongamos que la condición if se cumple: asignamos un valor de precio al primer elemento de la matriz: masCenPoc[0] = cena_poc;

¿Qué asignaremos al segundo elemento de la matriz?

 
Yedelkin:

Aquí tienes un array de 20 elementos. Supongamos que la condición if se cumple: asignamos un valor de precio al primer elemento de la matriz: masCenPoc[0] = cena_poc;

¿Qué debemos asignar al segundo elemento de la matriz?

El siguiente valor de Ros que estará en n número de veces. Las líneas Ros aparecen al principio de cada día, en función de los resultados del día anterior. Si el precio no toca el nivel, el valor de este nivel Ros se almacenará en el array.
 
Top2n: El siguiente valor de Ros, que será dentro de n tiempo. Las líneas Ros aparecen al principio de cada día, en función de los resultados del día anterior. Si el precio no toca el nivel, entonces el valor de este nivel Ros será almacenado en el array.
Ya veo. Yo haría lo siguiente. Crearía un array de 20 elementos y les asignaría el valor -1 a todos ellos. Al principio de cada día, ejecutaría el bucle for(int i=0; i<20; i++) y buscaría el primer elemento con valor -1 en el array. Después de encontrar dicho elemento, comprobaría las condiciones comerciales(if((cena_poc < alta && cena_poc < baja)||(cena_poc > alta && cena_poc > baja)) y si tiene éxito, asignaría el valor de cena_poc al elemento del array encontrado. Esto llenaría gradualmente la matriz con los valores requeridos.
 
Top2n: Ya veo, gracias.
Sí, si usas un array no dinámico (como en tu último ejemplo), tampoco necesitas esta función. Si necesitas un array dinámico, decláralo y dale tamaño en las primeras líneas de código, antes del bucle.
 
Top2n:

Realmente no me importa cambiar el tamaño del array, le daré 20, por ejemplo.

Tiene que tener sentido. En este caso, puede no ser necesaria una matriz. En un bucle con más cálculos, quizás 1 variable sea suficiente. Creo que quieres obtener los datos de la historia, por lo tanto sería más lógico hacer un bucle desde alguna barra hasta el 0. Y entonces se construirán tus datos. Si necesitas un array, debería acumularse como una pila en tu caso.

Si desea construir por las cotizaciones en línea, entonces es todavía de acuerdo a las reglas de la pila.

//Удачи!
 

Hola. Cuando intento copiar los datos del indicador a un array utilizando la función CopyBuffer obtengo valores como -6.9999999999999e-005

¿Cuál puede ser la razón?


Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyBuffer - Документация по MQL5
 
sss20192:

Hola. Cuando intento copiar los datos del indicador a un array utilizando la función CopyBuffer obtengo valores como -6.9999999999999e-005

¿Cuál puede ser la razón?


Quizá los valores sean los mismos que en el original. Sería una buena idea publicar el código.
 

El indicador tiene diferentes datos en la ventana de datos. Adjunto el EA al gráfico H1 y copia los datos de los marcos temporales M5 M15 y H1.

int MacdHandleTf1 = iMACD(_Symbol, Timeframe1, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

int MacdHandleTf2 = iMACD(_Symbol, Timeframe2, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

int MacdHandleTf3 = iMACD(_Symbol, Timeframe3, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

CopyBuffer(MacdHandleTf1, 0, 1, 1, MacdArray);

Print(NormalizeDouble(MacdArray[0], 5)); 

CopyBuffer(MacdHandleTf2, 0, 1, 1, MacdArray);

Print(NormalizeDouble(MacdArray[0], 5)); 

CopyBuffer(MacdHandleTf3, 0, 1, 1, MacdArray); 

Print(NormalizeDouble(MacdArray[0], 5)); 
Razón de la queja: