El mercado siempre se equivoca

 
Una continuación del tema "Arbitraje". Ya hay muchas páginas, y los críticos se han hecho un lío, así que un nuevo tema.

Conseguí aumentar el capital sobre el saldo. Se ve así (EURJPY H1):





Se adjunta el código fuente de EA en el post. Lo mismo ocurre con el informe de los probadores.

Para ello, tuve que añadir un parámetro de entrada más al código: beginEquity - capital inicial. Es decir, el saldo inicial. En el Probador de Estrategias, el Asesor Experto controla automáticamente si se supera el nivel de beginEquity. Y si se sobrepasa, comienza el juego de nuevo, es decir, cambia beginPrice por Bid, beginEquity por la equidad actual y cambia el número mágico (aumenta en 1).

Pero en Demo y Real, el Asesor Experto sólo generará una alerta pidiendo que se cambien estos parámetros manualmente. La cuestión es que el Asesor Experto no guarda los parámetros anteriores en ningún lugar al apagar el terminal o el ordenador, y no podrá restaurarlos después de reiniciar (los que realmente los necesiten pueden crear una base de datos de archivos o almacenar los parámetros en variables globales).
Por lo tanto, tendremos que monitorizar las señales de los Asesores Expertos y si empiezan a mostrar mensajes, tendremos que cambiar manualmente los parámetros de entrada anteriores para todo el grupo.
Archivos adjuntos:
 
Aquí estoy, crítico, encontrándote aquí también, Yuri. Ahora yo también me voy a cagar aquí. El análisis superficial del informe muestra que desde el 20 de agosto de 2004 hasta las 22:00 horas del 4 de mayo de 2007, con un depósito inicial de 200.000, se obtuvieron 72.252 beneficios, y a las 22:00 horas se cerraron todas las posiciones restantes, lo que supuso unos 528.000 beneficios de una sola vez (¡7 veces más que en todo el historial de pruebas!) El efecto se debe probablemente al final del periodo de pruebas.
 
Mathemat:
Aquí estoy, crítico, encontrándote aquí también, Yuri. Ahora yo también me voy a cagar aquí. El análisis superficial del informe muestra que desde el 20 de agosto de 2004 hasta las 22:00 horas del 4 de mayo de 2007, con un depósito inicial de 200.000, se obtuvieron 72.252 beneficios, y a las 22:00 horas se cerraron todas las posiciones restantes, lo que supuso unos 528.000 beneficios de una sola vez (¡7 veces más que en todo el historial de pruebas!). El efecto se debe probablemente a la finalización del periodo de pruebas.
El momento de la finalización de la prueba puede verse en el gráfico de la derecha como una banda verde estrictamente horizontal (equidad) y un fuerte "crecimiento" no lineal del saldo por debajo de esta línea tan horizontal. Es decir, el probador cierra todas las posiciones y el saldo "crece" hasta que es igual a la equidad. Obviamente, en ese momento había muchas posiciones abiertas con beneficio positivo. De lo contrario, el patrimonio no puede aumentar más que el saldo.

El Comprobador siempre ha cerrado forzosamente todas las posiciones abiertas al final del periodo de prueba. Si la equidad no es igual al saldo en ese momento, el saldo será igual al último valor de la equidad después de cerrar todas las posiciones. Por lo tanto, no llame a este comportamiento del probador un "efecto", porque es el principio de funcionamiento.
 
¡Hola!
¡Aquí está el día de tu abuela! Es una broma.
Como dijo Mathemat "por el análisis de la superficie" ¡pues muy bien! Ni un solo valor negativo. Lo pondré a prueba en línea. Pero esto es lo que no entiendo (tal vez lo he entendido mal): no apago mi jugadora y no cierro el terminal. ¿Se mostrará la alerta en tales condiciones o el EA operará por sí mismo como debería? ¿Qué ocurrirá si me desconecto de Internet durante un tiempo y me vuelvo a conectar? ¿Sin ninguna desconexión por mi parte?
Para mí la cuestión es muy importante, ya que me ausento del ordenador durante al menos 18 horas al día (sueño, trabajo, etc.) y si en ese tiempo se produce la desconexión, o no puedo introducir nuevos datos. ..... bueno, no es muy bueno.
Además, si lo he entendido bien: si enciendes la leva o el terminal, sólo tienes que introducir los valores actuales y todo irá como siempre, es decir, volver a conectar el EA?
Además, si se muestra la alerta, pero no hacemos nada, ¿el EA sigue operando según la configuración antigua o espera a que se introduzcan las nuevas?
¡¡¡¡Si es posible, por favor, dé más detalles sobre estos puntos!!!!
¡Gracias por otra razón para devanarme un poco los sesos! (en el buen sentido).
¡¡¡¡Sinceramente !!!!
 
No sé por qué, pero en el modo tester el Expert Advisor abre las operaciones en lotes de unos diez, ¿es esto una coincidencia o no?
No sé por qué, pero en el modo probador el Asesor Experto abre las operaciones en racimos de unos diez. Si tomamos 5 minutos desde el inicio 3000, el EuroUSD, desde el 02.01.2007 hasta este día, abre diez posiciones que se cierran por alguna razón no al final del periodo, sino en algún momento del 12.02.2007 un sólido hundimiento, y este hundimiento es básicamente esas diez primeras órdenes abiertas. Y esta imagen se repite no sólo en los pequeños momentos. Incluso si aumentamos el depósito hasta 50.000, también está perdiendo. Cambiar el marco de tiempo, a 1 hora, también está perdiendo. Algo está mal aquí!
El primero es el más bonito hasta ahora. ¿Quizás he hecho algo mal?
¡Sinceramente!
 
¡Hola!

Tengo una pequeña pregunta: he descargado el Asesor Experto, pero genera un error en la compilación:
MODE_MARGINREQUIRED' - variable no definida C:\N-Archivos de Programa\PFG FX Trader\N-Experts\ArbitrageReverse_1. 5.mq4 (244, 49)
¿Para qué sirve la variable MODE_MARGINREQUIRED y cómo configurarla?

 
Implex:
¡Hola!

Tengo una pequeña pregunta: he descargado el Asesor Experto, pero genera un error en la compilación:
MODE_MARGINREQUIRED' - variable no definida C:\N-Archivos de Programa\PFG FX Trader\N-Experts\ArbitrageReverse_1. 5.mq4 (244, 49)
¿Para qué sirve la variable MODE_MARGINREQUIRED y cómo configurarla?


Actualice su terminal a la última compilación 204 descargando la distribución desde: http://www.metatrader4.com/files/mt4setup.exe
 

Aunque no he terminado la prueba del antiguo EA como estaba previsto, he estado pensando en cómo mejorar esa versión. Y entonces Yuri vino con una nueva. Ya no es "quinto elemento", sino "sexto". ¿Cómo puedo trabajar aquí? Me tiemblan las manos.

Pero en serio, tengo una pregunta sobre el código. Puede ser ingenuo, así que no me dirijo sólo a Yury. Quizás alguien más lo aclare. Se lo agradeceré.

En ArbitrageReverse_1.1.mq4, y en la nueva versión de ArbitrageReverse_1.5.mq4, se repite la misma estructura, lo que no me queda claro: Es una llamada de la función de usuario closeby(ticksell, tickbuy) después de un redondeo en bloque de las órdenes actualmente abiertas. Para ArbitrageReverse_1.1.mq4 es la línea [106], para 1.5 es la línea [128]. La función tiene sentido - si hay órdenes de VENTA abiertas y órdenes de COMPRA abiertas (un símbolo cada una), la VENTA será cerrada por la COMPRA. Lo que no me gusta es que no hay ninguna condición previa para que esta operación se lleve a cabo. En otras palabras, sólo si tenemos COMPRA y VENTA, las órdenes deben cerrarse. Pero más adelante en el código, ya en el bloque 'dt' la llamada de la función closeby(ticksell, tickbuy) (para v:1.1 línea [163], para v:1.5 [189]) está enmarcada en condiciones. Y eso me parece más correcto. En principio, yo mismo veré pronto lo que pasa, habiendo rastreado todas las asignaciones a las variables, mientras trabajo en mis errores menores. Pero ahora le preguntaré a Yuri directamente:
¿Es necesaria la llamada closeby en la línea [106] v:1.1 o en la [128] v:1.5 y, si es así, qué "cerrará" en [163] para v:1.1 o en [189] para v:1.5 si resulta que todo lo que puede cerrarse debe cerrarse antes? Entiendo que puede haber una diferencia en los volúmenes de los lotes, pero aun así, algo aquí me parece "off".

La llamada closeby(tickbuy, ticksell) en [200] para v:1.1 o en [224] para v:1.5 es más o menos clara - si una orden abierta SELL o BUY está definida en órdenes abiertas, y en el bloque "dt", dependiendo de las condiciones, una orden opuesta puede ser abierta por la función OrderSend - entonces el cierre será ejecutado respectivamente.

De todos modos, si he preguntado algo estúpido, me disculpo. Señale el error y lo corregiré.

Atentamente, Fed.

 
Ya he publicado un EA en CodeBase que, adhiriéndose a las tácticas de arbitraje, también gana en los intercambios positivos. Tras la verificación del moderador, el código estará disponible AQUÍ
 
¡Hola!
Estoy tratando de entender - la lógica de esta modificación depende del beginPrice , beginEquity que necesita ser cambiado manualmente. Gracias
 
Fed:

Aunque no he terminado la prueba del antiguo EA como estaba previsto, he estado pensando en cómo mejorar esa versión. Y entonces Yuri vino con una nueva. Ya no es "quinto elemento", sino "sexto". ¿Cómo puedo trabajar aquí? Me tiemblan las manos.

Pero en serio, tengo una pregunta sobre el código. Puede ser ingenuo, así que no me dirijo sólo a Yury. Quizás alguien más lo aclare. Se lo agradeceré.

En ArbitrageReverse_1.1.mq4, y en la nueva versión de ArbitrageReverse_1.5.mq4, se repite la misma estructura, lo que no me queda claro: Es una llamada de la función de usuario closeby(ticksell, tickbuy) después de un redondeo en bloque de las órdenes actualmente abiertas. Para ArbitrageReverse_1.1.mq4 es la línea [106], para 1.5 es la línea [128]. La función tiene sentido - si hay órdenes abiertas de VENTA y órdenes abiertas de COMPRA (un símbolo cada una), la VENTA será cerrada por la COMPRA. Lo que no me gusta es que no hay ninguna condición previa para que esta operación se lleve a cabo. En otras palabras, sólo si tenemos COMPRA y VENTA, las órdenes deben cerrarse. Pero más adelante en el código, ya en el bloque 'dt' la llamada de la función closeby(ticksell, tickbuy) (para v:1.1 línea [163], para v:1.5 [189]) está enmarcada en condiciones. Y eso me parece más correcto. En principio, yo mismo veré pronto lo que pasa, habiendo rastreado todas las asignaciones a las variables, mientras trabajo en mis errores menores. Pero ahora le preguntaré a Yuri directamente:
¿Es necesaria la llamada closeby en la línea [106] v:1.1 o en la [128] v:1.5 y, si es así, qué "cerrará" en [163] para v:1.1 o en [189] para v:1.5 si resulta que todo lo que puede cerrarse debe cerrarse antes? Entiendo que puede haber una diferencia en los volúmenes de los lotes, pero aun así, algo aquí me parece "off".

La llamada closeby(tickbuy, ticksell) en [200] para v:1.1 o en [224] para v:1.5 es más o menos clara - si una orden abierta SELL o BUY está definida en órdenes abiertas, y en el bloque "dt", dependiendo de las condiciones, una orden opuesta puede ser abierta por la función OrderSend - entonces el cierre será ejecutado respectivamente.

De todos modos, si he preguntado algo estúpido, me disculpo. Señale el error y lo corregiré.

Atentamente, Fed.

Si en modo demo y real el cierre de las posiciones del contador fuera tan perfecto como en las pruebas, seguramente bastaría con dejar una sola llamada a closeby() antes del último return(0) en el evento de inicio. Por lo tanto, en el modo de prueba, por muy rastreable que sea, no se producirá ningún cierre en las llamadas adicionales.

Pero en el modo de demostración y en la vida real, las posiciones cerradas a menudo no se cierran en el contador por alguna razón (por ejemplo, no hay conexión con el servidor por un corto tiempo), así que tuve que proporcionar llamadas adicionales a closeby().