Discusión sobre el artículo "Análisis angular de los movimientos de precios: un modelo híbrido para predecir los mercados financieros" - página 2

Una vez más, los ratones lloraron, apuñalaron, hicieron caca, pero ¡persistieron en seguir comiéndose los cactus! ;)

Aquí tenéis una plantilla de Gann más o menos finalizada para MT4, el código está abierto.

https://disk.yandex.ru/d/7YhmKzcqttnQnQ

Con la correcta configuración de todo lo descrito en el TS, se puede ver con unas horas de antelación que la tendencia o la corrección está llegando a su fin. Además, el tiempo del final de la tendencia se puede calcular de antemano.

Cómo configurar correctamente, cada uno sabe por sí mismo.

P.D. - Gunn lo tiene todo en sus obras (matemáticas de los modelos), no encontrarás ni inventarás nada nuevo, 2x2 siempre serán 4. Es mejor profundizar en el estudio del material de origen.

Gann_Box_144_test_FULL_NULL_NEN_SQH4-----.mq4
Gann_Box_144_test_FULL_NULL_NEN_SQH4-----.mq4
  • disk.yandex.ru
Посмотреть и скачать с Яндекс Диска

oro

Ahí hay otra confirmación en el patrón de que la tendencia se estaba desvaneciendo y valía la pena esperar una reacción.

No hay protección contra el caso de que ` copy_rates_range ` devuelva `None`. Si el símbolo, el intervalo de tiempo o el historial no están disponibles, `mt5.copy_rates_range` devuelve `None`, y `pd.DataFrame(None)` generará un error poco útil.
El valor `shuffle=True` en `train_test_split` provoca una fuga de datos. Cada fila de características comparte 14 de sus 15 valores de `angle_j` con la fila vecina (ventanas deslizantes que se solapan en gran medida) y los datos están ordenados cronológicamente. La aleatorización dispersa ventanas casi duplicadas entre el conjunto de entrenamiento y el de prueba, por lo que la precisión y el RMSE reportados parecerán mucho mejores de lo que realmente rinde el modelo fuera de la muestra.
Desajuste de «uno» entre la ventana de características y su etiqueta, tanto en `prepare_features` como en la lógica (duplicada) de `backtest_signals`: `window = filtered_df.iloc[i-lookback:i]` abarca las barras desde `i-lookback` … i-1, pero el valor objetivo se lee de filtered_df.iloc[i]['future_direction_24'] / future_change_pct_24 — lo que describe el movimiento desde la barra i (no i-1) hasta i+24. Por lo tanto, «current_price» y todas las características derivadas de la ventana se fijan una barra por detrás de lo que realmente se está prediciendo, tanto durante el entrenamiento como durante el backtesting.
predict_future_movement no se ancla de la misma manera. Utiliza angular_df.tail(lookback) y trata la última barra de esa ventana como el «precio actual» para la señal en tiempo real — pero, según el punto n.º 3, el modelo se entrenó con un «precio actual» una barra anterior al punto de referencia real de la etiqueta. Las predicciones en tiempo real y las etiquetas de entrenamiento no se calculan según la misma convención.
Posible división por cero en `create_angular_features`: si `time_range` (`tiempo máximo − tiempo mínimo`) es 0 (p. ej., marcas de tiempo duplicadas o erróneas), `scale_factor` se convierte en inf/nan y se propaga a todos los ángulos.
Formato de la salida de CatBoostClassifier.predict(): dependiendo de la versión de CatBoost instalada, puede devolver (n, 1) en lugar de (n,). Se introduce directamente en accuracy_score/classification_report sin comprobar el cambio de formato, por lo que conviene verificarlo en función de la versión que finalmente se instale.
Menor: las llamadas del tipo figsize=(750/100, 750/200) generan dimensiones en pulgadas que no son redondas (7,5×3,75; 7,5×6,0; 7,5×5,0); no es un error, solo una forma extraña de expresar el tamaño de la figura.

Archivos adjuntos: