Ayuda a la codificación - página 408

 
airquest:
Bueno, aún así... Aquí hay algunas pruebas :

- Configuración por defecto (sin optimización, WriteCSV a True) : Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h11-SA1.csv

- Optimización establecida en True, PeriodMin en 20 y PeriodMax en 20 : Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h13-SA1.csv

El primero da valores coherentes (el archivo CSV y los resultados en pantalla coinciden). Eso es normal, porque ambos provienen de las mismas variables. Pero en el segundo, los resultados de opti se multiplican casi por 10 en comparación con los resultados de pantalla. Aunque, deberían terminar en los mismos resultados...

De todos modos, no hay prisa, tal vez con el tiempo voy a encontrar lo que está mal. Gracias por tu amable ayuda Mladen.

Hola Airquest,

Gracias por una alternativa muy interesante al Probador de Estrategias... ¡una pieza de codificación muy creativa y talentosa de tu parte...!

He jugado un poco con tu indicador...

Y parece que tienes dos variables diferentes para los totales...

Una para la ejecución normal = TotalTrades...

Y una para la ejecución de optimización = totalTrades...

Sin embargo... sus comentarios sólo muestran el TotalTrades de su ejecución normal...

Siga adelante y agregue su Optimizado...totalTrades...a sus Comentarios y vea si eso resuelve el rompecabezas...

Esto puede responder a su pregunta de por qué la diferencia entre la pantalla de visualización ... y los totales de la hoja de cálculo ...

Espero que esto ayude,

Robert

 
cosmiclifeform:
Hola Airquest,

Gracias por una alternativa muy interesante al Probador de Estrategias... ¡una pieza de codificación muy creativa y talentosa de su parte...!

He jugado un poco con tu indicador...

Y parece que tienes dos variables diferentes para los totales...

Una para la ejecución normal = TotalTrades...

Y una para la ejecución de optimización = totalTrades...

Sin embargo... sus comentarios sólo muestran el TotalTrades de su ejecución normal...

Siga adelante y agregue su Optimizado...totalTrades...a sus Comentarios y vea si eso resuelve el rompecabezas...

Esto puede responder a su pregunta de por qué la diferencia entre la pantalla de visualización ... y los totales de la hoja de cálculo ...

Espero que esto ayude,

Robert

No estoy seguro de que los resultados finales sean correctos. El problema es que al mostrar el total de las operaciones procedentes de la función opti, se puede ver si la función está funcionando bien o no. También no estoy seguro de cómo devolver más de un parámetro de la función doble (es necesario devolver el saldo y la tasa de ganancia también). Pero la razón principal es ver que hay una diferencia en los resultados y así que algo debe estar mal en la función...

 

Hola a todos, Acabo de escribir este indicador personalizado basado en el RSI.

Tengo una idea para usarlo en un EA. Necesito ayuda para escribirlo...

Es una estrategia de compra solamente.

Compra en cada señal alcista... Cerrar todo en señal de baja

Lo ideal es que el EA aumente el tamaño del Lote por cada señal consecutiva alcista sin cierre. (con un máximo por supuesto)

El indicador funciona poniendo una flecha en el gráfico cada vez que el RSI cruza por debajo/por encima de un nivel establecido.

arrow_rsi.mq4

Archivos adjuntos:
arrow_rsi.mq4  3 kb
 
airquest:
No estoy seguro de que los resultados finales sean correctos. El problema es que al mostrar el total de operaciones que vienen de la función opti, se puede ver si la función está funcionando bien o no. También no estoy seguro de cómo devolver más de un parámetro de la función doble (es necesario devolver el saldo y la tasa de ganancia también). Pero la razón principal es ver que hay una diferencia en los resultados y así que algo debe estar mal en la función...

airquest

Para "devolver" todos los parámetros que necesites de una función, pasa un parámetro por referencia a una función. Algo así :

double a;

double b;

double c = testFunction(a,b);

double tectFunction(double& _a,double& _b)

{

_a = 1;

_b = 2;

return(_a+_b);

}

después de lo cual a y b serán asignados a los valores 1 y 2 por el testFunction (implícitamente "devolviendo" 3 valores en este caso de ejemplo - usé los nombres de _a y _b en la función sólo para mostrar que no tienen que tener el mismo nombre en absoluto cuando se pasan por referencia, de lo contrario no hay necesidad de hacer eso en absoluto)

 
airquest:
No estoy seguro de que los resultados finales sean correctos. El problema es que al mostrar el total de las operaciones procedentes de la función opti, se puede ver si la función está funcionando bien o no. Tampoco estoy seguro de cómo devolver más de un parámetro de la función doble (necesitas devolver el saldo y la tasa de ganancias también). Pero la razón principal es ver que hay una diferencia en los resultados y así que algo debe estar mal en la función...

Hola Airquest,

Por lo que veo...tu indicador parece funcionar bien.

Sigo pensando que es un problema de "visualización de valores"...y no un problema de cálculo.

Esto es lo que veo que ocurre en el indicador...

El programa tiene 2 opciones - 1) Ejecución normal 2) Ejecución de optimización

No son opciones exclusivas...

Cuando la Optimización NO está seleccionada... el programa sólo hace la Ejecución Normal...

Cuando se selecciona Optimización... el programa sigue haciendo la Ejecución Normal... Y... luego hace la Ejecución de Optimización... por lo que está obteniendo ambos valores...

Sin embargo...sólo se muestran los valores de la Ejecución Normal en la pantalla de Comentarios...y no muestra los valores de Optimización en absoluto.

Adjunto mi prueba mostrando que los valores de Optimización mostrados en pantalla son los mismos que los de la hoja de cálculo...

Esto me muestra que todos sus cálculos están bien...

También parece que utiliza el último registro de la hoja de cálculo para obtener los valores finales de optimización...

También recomiendo ejecutarlo sin otros gráficos/indicadores cargados... y utilizar sólo unos pocos valores seleccionados para probar a la vez.

Tengo más de 20 gráficos corriendo...y MT4 no responde mientras hace sus cálculos para este indicador...

Es mejor utilizar una configuración limpia de MT4 para ejecutar las pruebas de optimización...

Pero la buena noticia es... que no se bloquea mi sistema ya que puedo hacer otras cosas mientras está calculando los números y haciendo el informe.

Mientras tanto... por lo que puedo ver en las capturas de pantalla de abajo... su indicador parece funcionar bien...

BTW...es una pieza increíble de codificación... ¡Muchas gracias por compartirlo...!

Espero que esto ayude,

Robert

 
cosmiclifeform:
Hola Airquest, Por lo que veo... tu indicador parece funcionar bien.

De nada, muchas gracias por tus palabras. Efectivamente, la idea es sustituir la optimización del probador de estrategias de mt4 (que me parece una mierda y demasiado lenta) para hacer backtesting de estrategias sencillas. Y sí, hay que esperar un poco a que cargue y haga el cálculo, pero por lo que he visto ya es más rápido y cómodo que una optimización normal.

Pero, sigo pensando que hay un problema con el indicador y que no funciona correctamente. Al sustituir el texto de la pantalla por los resultados que salen de la optimización no muestra en absoluto si estos resultados que salen son correctos o incorrectos. Es como pintar un coche oxidado.

Creo que la función opti da resultados erróneos. Puedes ver en tu captura de pantalla que los resultados en el CSV dan 5'307 operaciones. Eso está muy lejos del techo. Depende de cuántas barras tengas en tu pantalla, pero no es posible que la estrategia diera 5'307 operaciones a tomar. Para estar seguro, no hace falta que cuentes las flechas, puedes reducir el número de barras a probar como he hecho en esta captura de pantalla (lo he puesto a 100 barras) :

Puedes ver aquí que, para 100 barras, sólo hay 10 operaciones que tomar, con 4 ganadores (contando las flechas), mientras que los resultados de opti muestran 89 operaciones tomadas. Por lo tanto, basado en un backtest visual, los resultados de la pantalla son correctos (para el mejor período que la opti dijo), mientras que el CSV es incorrecto. Así que eso demuestra que no debemos confiar en los resultados del CSV, ni para contar las operaciones ni para determinar qué configuración es la mejor.

Así que he planteado el problema de una manera más sencilla. He hecho un indicador sencillo (adjunto) que muestra en pantalla los resultados que salen de la función Optimization double y de la función Start int (cálculo principal). Así no es necesario escribir un CSV para ver que ambos resultados son diferentes.

Basándome en este indicador, mi pregunta (simple) es : ¿POR QUÉ DOS CÁLCULOS EXACTAMENTE IGUALES (el de la función Start y el de la función Optimization double) DAN RESULTADOS DIFERENTES? Si alguien puede ayudarme a entender esto, sería genial, porque realmente no lo entiendo. Por lo que veo, las dos son exactamente iguales y deberían dar los mismos resultados. Muchas gracias.

PS : el indicador es todavía un poco lento y probablemente tendrás que esperar unos segundos para que muestre los resultados. Sin embargo, emitirá un sonido cuando salgan los resultados.

Archivos adjuntos:
sa1.png  78 kb
sa3.png  41 kb
 

Hola Airquest,

Probé tu "Ejemplo de Prueba" pero no pude hacerlo funcionar. Miré el código y tenía más de 400 líneas eliminadas...así que lo dejé.

Volví a probar tu código original... y creo que empiezo a ver lo que dices sobre el problema de "demasiadas operaciones"...

Para mantener las pruebas simples y rápidas...probé usando sólo Bandas...y minimicé los ajustes (Bandas 10 y Bandas 20) para tener sólo dos (2) ejecuciones para ver los resultados más rápido.

También me centré en "BarsToCount" ya que debería parecer que se relaciona directamente con el número de operaciones...

Aunque no encontré ninguna respuesta... puede que tenga algunas pistas más para ti...

"BarsToCount"...no parece funcionar...

Corrí su código con 1 Barra...2 Bares...y 100 Bares atrás...

Y todos tuvieron exactamente los mismos resultados...lo cual no debería ser...ya que más barras deberían equivaler a más operaciones...y menos barras deberían equivaler a menos operaciones.

He adjuntado mis capturas de pantalla de las 3 ejecuciones que hice...cambiando sólo el "BarsToCount"...

Tal vez esta pista le ayudará a rastrear los otros problemas.. Buena suerte en la búsqueda de sus respuestas.

Espero que esto ayude,

Robert

Archivos adjuntos:
 

Finalmente he conseguido hacer una versión que funciona. Ahora los resultados de la opti son correctos y se corresponden con los de la pantalla. Acabo de eliminar la función doble y lo he puesto todo en la de Inicio. Así que ahora, sólo tienes una opción entre ejecutarlo en modo Tester (por lo que utilizará la configuración por defecto) o en modo optimizador (que no trazará nada sino que sólo escribirá un archivo CSV). Después de ejecutar una optimización, puedes volver al modo tester y comprobar si los resultados son correctos.

Por favor, hazme saber si encuentras algún problema, por PM es mejor, ya que no queremos estropear este hilo. Chicos, muchas gracias por vuestra ayuda. Este foro es genial, la gente se motiva y se ayuda (la mayoría de las veces) y por eso lo publico aquí. Ahora vamos a empezar a hacer backtesting

 
cosmiclifeform:
Hola Airquest,

Robert, gracias por tu ayuda. Vea la versión que publiqué arriba, ahora debería funcionar.

PS : Para limitar el número de barras, tienes que poner UseAllBars en False. Probablemente no lo hayas visto.

Saludos.

 

Hola Airquest,

¡Buen trabajo para localizarlo y conseguir que funcione...!

Estaré pendiente de jugar con él esta semana...

Gracias y cuídate,

Robert

Razón de la queja: