Asesores Expertos: MarketPredictor - página 2

 

Gracias por los consejos, el código ha estado en curso durante 5 días, he resuelto el problema con no establecer ningún comercio, sólo quiero hacer pequeñas actualizaciones :)

 

Usted necesita hacer una nueva iteración

    // Ajustar el alfa en función de la volatilidad (ATR)
    double atr = iATR(_Symbol, PERIOD_CURRENT, period); // Calcular ATR
    if(atr > 0.0)
        alpha = atr * 0.1; // Establecer alfa proporcional a la volatilidad
    else
        alpha = inputAlpha; // Vuelta al valor de entrada si ATR no está disponible

este código no va a calcular correctamente ATR

https://www.mql5.com/es/docs/indicators/iatr

Valor de Retorno

Devuelve el handle de un indicador técnico especificado


Devuelve el handle que es un código, y no devuelve el valor ATR

Documentation on MQL5: Technical Indicators / iATR
Documentation on MQL5: Technical Indicators / iATR
  • www.mql5.com
The function returns the handle of the Average True Range indicator. It has only one buffer. Parameters symbol [in] The symbol name of the security...
 
1. corrección de errores:
- En FFT: La llamada recursiva a FFT para matrices pares e impares puede llevar a una recursión infinita si el tamaño de la matriz no es de grado dos.
Debemos asegurarnos de que el tamaño de la matriz es de grado dos. Esto no se comprueba en el código actual.
- En la función CalculateFractalComponentFFT: utilizamos FFT pero no comprobamos que N sea de grado dos.
Además, después de la FFT, sólo utilizamos los primeros N/2 elementos, lo cual es correcto, pero el código de la FFT tiene un error en la indexación al combinar.
2. Mejoras:
- En la función ExecuteTrade: la comprobación de posición abierta mediante PositionSelect(_Symbol) no es del todo correcta,
porque esta función devuelve true si hay alguna posición en un símbolo, pero no necesariamente que esté abierta en ese momento.
Es mejor utilizar un bucle a través de todas las posiciones y comprobar el número mágico y el símbolo.
- Además, en ExecuteTrade no comprobamos si ya hay una posición abierta, por lo que podemos abrir múltiples posiciones.
Necesitamos limitar la apertura a una sola posición (o usar el número mágico para identificar nuestras posiciones).
- En la función OptimiseParameters: el cálculo del movingAverage puede ser reemplazado por la función incorporada iMA.
- En la función SimulatePrice: usar MathRand() puede no ser lo mejor para Monte Carlo, es mejor usar la distribución normal.