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

 
Artyom Trishkin:

No todas las matrices tienen la misma orientación.

¡Entiendo, pero también puse ArraySetAsSeries(barsBuffer1 ,true); !

Bueno, esto es la mitad del problema. Pero no puedo averiguar cómo añadir una nueva vela.

Lo intenté de esta manera:

.........
   else
   {
      Print("tick_count = ",++tick_count);
      if(tick_count >= 5)
      {
         Print("Добавляем свечу.");
         
         double   O[1], H[1], L[1], C[1];
         O[0]  = newCandles_Open[3];
         H[0]  = newCandles_High[3];
         L[0]  = newCandles_Low[3];
         C[0]  = newCandles_Close[3];
         
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);
         
         ArrayInsert(barsBuffer1,O,0);
         ArrayInsert(barsBuffer2,H,0);
         ArrayInsert(barsBuffer3,L,0);
         ArrayInsert(barsBuffer4,C,0);
         
         tick_count = 0;
      }
   }
//--- return value of prev_calculated for next call
   return(rates_total);
}

No funciona... (((

 
Сергей Таболин:

¡Entiendo, pero también puse ArraySetAsSeries(barsBuffer1 ,true); !

Bueno, es la mitad del problema. Pero cómo añadir una nueva vela - no puedo averiguar.

Lo intenté de esta manera:

No funciona... (((

Lo siento, pero las matrices asignadas a los búferes indicadores no pueden ser redimensionadas - el subsistema de la terminal lo hace.

   SetIndexBuffer(0, barsBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, barsBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, barsBuffer3, INDICATOR_DATA);
   SetIndexBuffer(3, barsBuffer4, INDICATOR_DATA);
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);

Reconsidere su lógica. No lo sé en absoluto, y sólo puedo mostrar lo que es evidente.

 
Artyom Trishkin:

Me disculpo, por supuesto, pero las matrices asignadas a los búferes indicadores no pueden ser redimensionadas - esto es manejado por el subsistema de la terminal.

Reconsidere su lógica. No lo sé en absoluto, y sólo puedo mostrar lo que es descaradamente erróneo.

Así lo entiendo yo también, pero...

Artem, si el búfer del indicador es gestionado por el subsistema, ¿significa que este subsistema también aumenta su tamaño? En otras palabras, ¿no se puede dibujar una nueva vela de indicador en el gráfico hasta que aparezca una nueva vela?

 
Сергей Таболин:

Así lo entiendo yo también, pero...

Artem, si el búfer del indicador es gestionado por un subsistema, ¿significa que también aumenta su tamaño? En otras palabras, hasta que no aparezca una nueva vela en el gráfico, no se podrá dibujar también una nueva vela de indicador en el gráfico?

¿Qué significa "dibujar una nueva vela"?

Puede dibujarlas, pero las barras no pueden ser añadidas - no están presentes todavía.

Sí, el terminal se encarga del tamaño de las matrices de indicadores. También proporciona datos sobre cuántos de ellos estaban en la convocatoria anterior.

 
Artyom Trishkin:

¿Qué quiere decir con "dibujar una nueva vela"?

Puedes dibujar todo tipo de cosas, pero no puedes añadir barras: aún no existen.

Sí, el propio terminal se encarga del tamaño de las matrices de indicadores. También proporciona datos sobre cuántos de ellos estaban en la convocatoria anterior.

Gracias, ahora entiendo por qué falla.

Entonces, una última pregunta. Sé que podemos mostrar velas de otro marco temporal en el indicador. Si el indicador muestra velas de H2 y velas de H1, significa que debemos sacar 2 velas durante la vida de una vela. ¿Cómo sucede si el búfer sólo lo aumenta el sistema? O dame un enlace al ejemplo, si no es mucha molestia. Tal vez lo descubra ))))

 
Сергей Таболин:

Gracias, ahora entiendo por qué no me funciona.

Entonces, una última pregunta. Sé que se pueden mostrar velas de otro marco temporal en el indicador. Si el indicador muestra velas de H1, significa que debemos dibujar 2 velas durante la vida de una vela. ¿Cómo sucede si el búfer sólo lo aumenta el sistema? O dame un enlace al ejemplo, si no es mucha molestia. Tal vez lo descubra)))

He dado ejemplos en mis últimos artículos sobre indicadores, pero están basados en bibliotecas.

Para entender cómo dibujar dos velas en lugar de una, eche un vistazo al gráfico. Fíjate en la hora en la que se abrió la vela en H2 y donde se encuentra la vela con la misma hora en H1. Todo se aclarará.

 
Artyom Trishkin:

En mis últimos artículos sobre indicadores he dado ejemplos, pero todos ellos están basados en bibliotecas.

Y para entender cómo dibujar dos velas en lugar de una, mira el gráfico. Mira la hora de apertura de la vela en H2 y dónde se encuentra la vela con la misma hora en H1. Todo se aclarará.

Artem, lo que pasa es que no lo entiendo.

Por ejemplo, la vela en H2 está abierta a las 12:00. La próxima será a las 14:00. Pero en el H1 el próximo será a las 13:00. De acuerdo con la lógica, hasta que la vela se abra en el TF más alto, el conjunto de indicadores no se incrementará. ¿Significa que no podré dibujar la segunda vela en el indicador? ¿O qué?

Explícamelo, no está claro takomu..... ¿Por qué y cómo puedo dibujar dos (o en realidad n) velas en un gráfico? ¿Por qué si lleno el índice 0 del buffer del indicador con un nuevo valor (asignación simple) el indicador no cambia?

¿Tal vez debería pedir a los desarrolladores esa posibilidad? He añadido un nuevo elemento a este buffer - se dibuja con un desplazamiento de todos los anteriores a la izquierda. Al fin y al cabo, es mi indicador. Lo escribo como quiero. No quiero vincularlo a la apertura de una nueva barra en el gráfico. ¿Qué tan difícil puede ser?

 

¡Gracias a Artem y Vladimir! Tus respuestas y explicaciones me dieron la idea y el indicador salió. Gracias de nuevo.


 

¿Puede decirme qué pasa?

Hay una simple declaración de variables:

input double   StopLoss=150.0;

Cuando se depura en datos reales, la variable StopLoss tiene un valor establecido de "150". Pero si habilito la depuración de los datos históricos, la misma variable en el mismo código tiene un valor diferente. ¿Cuál puede ser la razón de esto? ¿Y cómo afrontar el problema?

 
Sayberix:

¿Puede decirme qué pasa?

Hay una simple declaración de variables:

cuando se depura en datos reales, la variable StopLoss tiene un valor establecido de "150". Pero si habilito la depuración de los datos históricos, la misma variable en el mismo código tiene un valor diferente. ¿Cuál puede ser la razón de esto? ¿Y cómo afrontar el problema?

Compruebe los valores en la pestaña "Parámetros" del comprobador de estrategias. Cuando se activa la depuración en datos reales, el Asesor Experto toma los valores de las variables de entrada, y si se activa en el historial, los valores se toman de la configuración del probador.

Razón de la queja: