Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 102

 
STARIJ:

El precio en el gráfico en el eje vertical de abajo a arriba, y el tiempo y la numeración de las barras en el eje horizontal a la derecha

La barra cero es la última barra disponible actualmente. Las siguientes barras existen en el historial, pero no están disponibles para el probador. Más tarde, cuando se calcule esta barra, el probador pasará a la siguiente, que se convertirá en cero para él.


Por lo tanto, entiendo correctamente, tan pronto como el precio de apertura de la siguiente barra aparece en el probador, se convierte en null[0]. Y si el indicador está hecho de manera que se calcula 500 barras antes de la barra [0] actual, significa que el probador calculará el indicador para ~ 2 años (500 barras D1) antes de la barra [0] actual...

Esto plantea la siguiente cuestión:

Ahora el indicador se basa en el procesamiento de eventos Start() - versión antigua. Me parece que durante las pruebas en cada llamada de iCustom() el indicador se calcula sobre las 500 barras anteriores, 1600 pruebas se calcularon durante una hora y media.
Podemos construir el indicador en el procesamiento de eventos OnCalculate(), lo que permite calcular sólo las barras no calculadas antes del siguiente OnCalculate() - pero es posible hacerlo en un flujo de datos real en un tiempo actual - como entendí de la Referencia MQL4.
En el probador, se reducirá el número de barras calculadas en cada llamada de iCustom() ?

 
MikeZv:

Así que entendí correctamente, tan pronto como el precio de la siguiente barra abierta apareció en el probador - se convierte en null[0]. Y si el indicador está hecho de tal manera, que empieza a calcularse 500 antes de la barra [0] actual, significa, que el probador calculará el indicador para ~ 2 años (500 barras D1) antes de la barra [0] actual...

Esto plantea la siguiente cuestión:

Ahora el indicador se basa en el procesamiento de eventos Start() - versión antigua. Como usted siente, durante la prueba en cada llamada de iCustom(), el indicador se calcula en las 500 barras anteriores, 1600 ejecuciones de prueba se calcularon durante una hora y media.
Podemos construir el indicador en el procesamiento de eventos OnCalculate(), lo que permite calcular sólo las barras no calculadas antes del siguiente OnCalculate() - pero es posible hacerlo en un flujo de datos real en un tiempo actual - como entiendo de MQL4 Reference.
En el probador, se reducirá el número de barras calculadas en cada llamada de iCustom() ?


El indicador está escrito torcido, por lo que es lento, necesito una reescritura profesional, entonces leerá todo el historial y muy rápido... eso es todo...

 
Nikolay Ivanov:


El indicador está escrito de forma torcida, por lo que es lento, se necesita una reescritura profesional, entonces se leerá toda la historia y muy rápido... eso es todo...


Ya se ha reescrito... :)

 

Escribí un nuevo indicador [onCalculate()] basado en el antiguo [on Start()], se planteó la pregunta anterior.
Ejecuto una secuencia de comandos que los compara entre sí durante 5 años (período D1): uno a uno, todos los valores coinciden.
He copiado el mismo ICustom() en elExpert Advisor y lo he emitido en un archivo alprobar el Expert Advisor.
¡¡¡Los antiguos valores de los indicadores se muestran como en el script, los nuevos valores de los indicadores son todos diferentes !!!
¿Por qué iCustom() en un Asesor Experto para un indicador en Start() da los mismos valores que en el script,
pero para un indicador en OnCalculate() la salida en el Asesor Experto es diferente de la salida en el script?


 

Hola a todos.

Chicos, ¿podéis aconsejarme quién se ha encontrado con esto?

Algunos corredores binarios, por ejemplo, Grand Capital, acumulan ingresos y los cargan en la cuenta no a través de los beneficios de una operación, sino como ingresos al/del saldo(s) de la cuenta.


Tengo varias opciones de trabajo alternativas sobre cómo averiguar el resultado de una operación, pero la más correcta sigue siendo leer el valor de la línea de balance y el importe de las ganancias/pérdidas.

Así que la pregunta es: ¿cómo se puede hacer esto "en el momento" pero sobre todo el historial de transacciones? Es decir, estoy interesado en alguna función (incluida en MQL4) que busque en todos los registros de tipo de balance y lea el comentario y el valor en sí. Es la primera vez que me enfrento a esta tarea en varios años de programación.

 
MikeZv:

Escribí un nuevo indicador [en OnCalculate()] basado en el antiguo [en Start()], esta cuestión se planteó anteriormente.
Ejecuto el script comparándolos entre sí durante 5 años (periodo D1): uno a uno, todos los valores coinciden.
He copiado el mismo ICustom() en elAsesor Experto y lo he mostrado en un archivo alprobar el Asesor Experto.
¡¡¡Los antiguos valores de los indicadores se muestran como en el script, los nuevos valores de los indicadores son todos diferentes !!!
¿Por qué iCustom() en un Asesor Experto para el indicador en Start() sale los mismos valores que en el script?
y para el indicador en OnCalculate() la salida en el Asesor Experto es diferente de la salida en el script?


Puede llevar mucho tiempo adivinar.

Yo revisaría el código para ver si hay una conversión errónea del tipo de datos, si se duplican los nombres de las variables (es decir, en el código antiguo se utilizan nombres que ahora están reservados) - como resultado la variable no está obteniendo los valores que debería obtener (en primer lugar, revise los nombres de las variables utilizadas en OnCalculate - open, high, low, close, etc. - Es posible que los encuentres con bastante frecuencia en el código antiguo).
Y en cuanto a iCustom, es la variante más simple, y los errores aquí probablemente pueden estar relacionados con parámetros pasados incorrectamente (de nuevo, por las razones dadas anteriormente).

Imprime todos los valores, o ejecuta en modo de depuración y comprueba a dónde va la discrepancia.
 
Artyom Kuraev:

Puede llevar mucho tiempo adivinar.

Yo revisaría el código para ver si hay una conversión incorrecta del tipo de datos, nombres de variables duplicados (es decir, el código antiguo utiliza nombres que ahora están reservados) - como resultado la variable está recogiendo valores erróneos que debería obtener (en primer lugar compruebe los nombres de las variables utilizadas en OnCalculate - open, high, low, close, etc. - Es posible que los encuentres con bastante frecuencia en el código antiguo).
Y en cuanto a iCustom, es la variante más simple, y los errores aquí probablemente pueden estar relacionados con parámetros pasados incorrectamente (de nuevo, por las razones mencionadas anteriormente).

Imprime todos los valores, o ejecuta en modo de depuración y comprueba a dónde va la discrepancia.
La salida de ambos indicadores en el script es la misma.

Experto ha COOPERADO líneas con iCustom() del script. Se pasan los mismos parámetros.

 
MikeZv:

El Experto COPIA las líneas con iCustom() del script. Se pasan los mismos parámetros.

El hecho de que se copien puede provocar errores. Sólo he sugerido posibles causas y lo que yo comprobaría primero.

El segundo punto, y esta es probablemente la respuesta más obvia, es que el propio indicador está sobrevalorado y dará un valor cuando se aplique al historial y otro cuando trabaje en modo probador de estrategias. Ya escribí sobre ello una vez, puedes verlo en dos fotos.

No insisto en nada en absoluto, y mi respuesta se basará en mi experiencia. Si estás seguro de que ninguna de las opciones que he sugerido es adecuada, espera otras respuestas o da mucha más información de fondo :)

 
Artyom Kuraev:

Hola a todos.

Chicos, ¿podéis aconsejarme quién se ha encontrado con esto?

Algunos corredores binarios, por ejemplo Grand Capital, cobran ingresos y cargan en la cuenta no a través de los beneficios de una operación, sino como ingresos al/del saldo(s) de la cuenta.


Tengo varias opciones de trabajo alternativas sobre cómo averiguar el resultado de una operación, pero la más correcta sigue siendo leer el valor de la línea de balance y el importe de las ganancias/pérdidas.

Así que la pregunta es: ¿cómo se puede hacer esto "en el momento" pero sobre todo el historial de transacciones? Es decir, estoy interesado en alguna función (incluida en MQL4) que busque en todos los registros de tipo de balance y lea el comentario y el valor en sí. Es la primera vez que me enfrento a esta tarea en varios años de programación.


#define  OP_BALANCE 6
#define  OP_CREDIT  7

Más

OrdersHistoryTotal
StringFind(OrderComment(),txt,0)
 
Taras Slobodyanik:

más

¡GRACIAS!

¡Todo salió bien!
Razón de la queja: