Características del lenguaje mql5, sutilezas y técnicas - página 30
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
No lo entiendo en absoluto...
Creo una manija de un AO estándar en el indicador, pero con un marco de tiempo establecido. Cuando recibo datos de AO con un marco temporal que no coincide con el actual, obtengo ... No obtengo nada - error 4806.
Pregunta: ¿Cuál es la forma correcta de obtener datos de indicadores estándar con plazos que no coinciden con el actual?
No lo entiendo en absoluto...
Creo una manija de un AO estándar en el indicador, pero con un marco de tiempo establecido. Cuando recibo datos de AO con un marco temporal que no coincide con el actual, obtengo ... No obtengo nada - error 4806.
¿Cuál es la pregunta, cuál es la forma correcta de obtener los datos de los indicadores estándar con plazos que no coinciden con el actual?
Sobre la obtención de los valores del INDICADOR en el INDICADOR:
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Cómo tomar datos de otro indicador en un indicador
Vladimir Karputov, 2016.12.27 08:41
Teniendo en cuenta que en los indicadores MQL5, la barra con índice "0" es por defecto la barra IZQUIERDA del gráfico, vamos a intentar obtener datos en nuestro indicador desde otros dos indicadores - MA y Alligator(este ejemplo en el indicador "IndicatorFromIndicators.mql5").
Intentemos recibir datos de MA y Alligator en la barra con índice "0", "1" y "2":
//---
Comment("Проверка: time[0]=",time[0],"\n",
"rates_total-1: ",rates_total,"\n",
"BarsCalculated(iMA): ",BarsCalculated(handle_iMA),"\n",
"BarsCalculated(iAlligator): ",BarsCalculated(handle_iAlligator),"\n",
"MA[",0,"]=",StringFormat("%."+IntegerToString(Digits()+1)+"f",iMAGet(0)),"\n",
"MA[",1,"]=",StringFormat("%."+IntegerToString(Digits()+1)+"f",iMAGet(1)),"\n",
"MA[",2,"]=",StringFormat("%."+IntegerToString(Digits()+1)+"f",iMAGet(2)),"\n",
"Jaws[",0,"]=",StringFormat("%."+IntegerToString(Digits())+"f",iAlligatorGet(GATORJAW_LINE,0)),"\n",
"Jaws[",1,"]=",StringFormat("%."+IntegerToString(Digits())+"f",iAlligatorGet(GATORJAW_LINE,1)),"\n",
"Jaws[",2,"]=",StringFormat("%."+IntegerToString(Digits())+"f",iAlligatorGet(GATORJAW_LINE,2)));
//--- return value of prev_calculated for next call
return(rates_total);
}
Adjuntemos el indicador de prueba"IndicatorFromIndicators.mql5" al gráfico y pongamos la retícula en la barra MÁS CORRECTA, es decir, que no sea la barra cero. Esto es lo que parece:
Aunque el retículo se fija en la barra más correcta - es decir, definitivamente no en una barra con índice "0", cuando se utilizaCopyBuffer se debe tener en cuenta queCopyBuffer copiará los datos del presente al pasado, es decir, la barra con índice "0" significa la barra actual.
CopyBuffer: Los elementos de datos a copiar (buffer de indicadores con un índice buffer_num) se cuentan desde la posición de inicio del presente al pasado, es decir, la posición de inicio de 0 significa la barra actual (valor del indicador para la barra actual).
Es decir, en el indicador MQL5, si se utiliza la operación CopyBuffer, hay que voltear el array (ArraySetAsSeries), de forma que la barra más a la derecha del gráfico corresponda al índice "0" del buffer del indicador (ahora en el ejemplo "iMTF_AO.mq5", la barra más a la derecha del gráfico corresponde a rates_total-1).
Sobre la obtención de los valores de INDICATOR en INDICATOR:
CopyBuffer: Los elementos de los datos copiados (buffer indicador con un índice buffer_num) se cuentan desde la posición inicial del presente al pasado, es decir, la posición inicial igual a 0 significa la barra actual (valor del indicador para la barra actual).
Es decir, en el indicador MQL5, si utiliza la operación CopyBuffer, debe voltear el array (ArraySetAsSeries), de manera que la barra más a la derecha del gráfico corresponda al índice "0" del buffer del indicador (ahora en el ejemplo "iMTF_AO.mq5", la barra más a la derecha del gráfico corresponde a rates_total-1).
Sólo consigo una barra. Y el indicador en el marco temporal "nativo" muestra los datos normalmente. En el valor "no nativo" - en blanco. He averiguado empíricamente que se devolverá un valor vacío hasta que se cargue todo el historial para el periodo de tiempo del que recibo los datos de AO.
La pregunta sería entonces: ¿Cómo evitar entrar en el bucle mientras se carga el historial para el marco temporal? Es sólo una prueba, mientras que en general el indicador realiza los cálculos de acuerdo con el historial de un marco de tiempo especificado y no hay necesidad de tratar de realizarlos hasta que no haya historial.
Sólo tengo una barra. Y el indicador en el marco temporal "nativo" muestra los datos normalmente. En el "no nativo" muestra un valor en blanco. He averiguado empíricamente que se devolverá un valor vacío hasta que se cargue todo el historial para el marco temporal, del que recibo datos de AO.
La pregunta entonces sonará de otra manera: ¿cómo no entrar en el bucle, mientras que la historia para el marco de tiempo se está cargando? Esto es sólo una prueba. En general, el indicador realiza los cálculos de acuerdo con la historia de un marco de tiempo especificado y no hay necesidad de tratar de realizarlos hasta que no haya historia.
La "i" no es "0", sino algún valor exorbitante. En resumen: digamos que ejecutamos el ejemplo en M15 - tenemos 5000 barras en este periodo. Solicitamos datos de H4 - sólo tenemos 400 barras en él. Entonces intentamos solicitar "AO(4999)".
Es decir, desde el periodo H4 intentamos solicitar la barra con índice "4999" - pero no hay tal barra en H4 en absoluto, sólo hay 400 barras allí, pero solicitamos la barra "0", y si el indicador utiliza la operación CopyBuffer, deberíamos girar el array (ArraySetAsSeries) para que la barra más a la derecha en el gráfico corresponda al índice "0" en el buffer del indicador (ahora en el ejemplo "iMTF_AO.mq5" la barra más a la derecha en el gráfico corresponde a rates_total-1).
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Bichos, errores, preguntas
fxsaber, 2017.04.12 08:38
Un poco de sombrero. Evitar el operador de asignaciónResultado
Aquí..:
La "i" no es "0", sino algún valor exorbitante. En resumen: digamos que ejecutamos el ejemplo en M15 - tenemos 5000 barras en este periodo. Solicitamos datos de H4 - sólo tenemos 400 barras en él. Entonces intentamos solicitar "AO(4999)".
Por ejemplo, del periodo H4, intentamos solicitar la barra con índice "4999" - pero no hay tal barra en H4, sólo hay 400 barras allí, pero queremos la barra "0", y si el indicador utiliza la operación CopyBuffer, deberíamos invertir el array (ArraySetAsSeries), de modo que la barra más a la derecha en el gráfico corresponde al índice "0" en el buffer del indicador (por ejemplo "iMTF_AO.mq5" ahora la barra más a la derecha en el gráfico corresponde a rates_total-1).
No, por supuesto que intenté calcular el límite:
... Pero veo que he me tido la pata a toda prisa: sólo es apropiado para el marco temporal actual
No, por supuesto que intenté calcular el límite:
... Pero ya veo, metí la p ata deprisa - es apropiado sólo para el marco temporal actual
¿Acaso miraste el código que te mostré? ¿O lo has hecho tú?
No pregunté cómo llenar el buffer del indicador, sino por qué si tomo valores de AO no de la barra actual, devuelven valores vacíos.
Lo tengo - no hay historial, se está cargando y mientras se carga AO desde un marco temporal no nativo devuelve el error "no hay datos".
Ahora la pregunta es: ¿cómo saber que el historial para el marco temporal necesario está completamente cargado, para no entrar en el ciclo del indicador?