Discusión sobre el artículo "Creación de una estrategia de retorno a la media basada en el aprendizaje automático" - página 4

 
Evgeniy Chernish #:
Maxim, cuéntanos más sobre cómo agrupas la trayectoria del precio de un par de divisas por el coeficiente de asimetría.

Se calcula en una ventana deslizante como rasgo y se añade al conjunto de datos. La agrupación se realiza en función de este rasgo, se asignan etiquetas de agrupación a todo el conjunto de datos. A continuación, se seleccionan las filas que pertenecen a uno de los clusters. Los precios y todos los demás atributos permanecen ahí. Eso es todo.

 
fxsaber #:

¿Por qué no ZZ entonces?

Sin embargo, he encontrado una pequeña explicación.

Probablemente, lanzar algunos vértices fuera de la fila ZZ tendría el mismo efecto.
import pandas as pd
from scipy.signal import find_peaks

@njit
def calculate_labels_zigzag(peaks, troughs, len_close):
    """
    Generates labels based on the occurrence of peaks and troughs in the data.

    Args:
        peaks (np.array): Indices of the peaks in the data.
        troughs (np.array): Indices of the troughs in the data.
        len_close (int): The length of the close prices.

    Returns:
        np.array: An array of labels.
    """
    labels = np.empty(len_close, dtype=np.float64)
    labels.fill(2.0)  # Inicializar todas las etiquetas a 2.0 (sin señal)
    
    for i in range(len_close):
        if i in peaks:
            labels[i] = 1.0  # Señal de venta en los picos
        elif i in troughs:
            labels[i] = 0.0  # Buy signal at troughs
    return labels

def get_labels_filter_ZZ(dataset, peak_prominence=0.1) -> pd.DataFrame:
    """
    Generates labels for a financial dataset based on zigzag peaks and troughs.

    This function identifies peaks and troughs in the closing prices using the 'find_peaks' 
    function from scipy.signal. It generates buy signals at troughs and sell signals at peaks.

    Args:
        dataset (pd.DataFrame): DataFrame containing financial data with a 'close' column.
        peak_prominence (float, optional): Minimum prominence of peaks and troughs, 
                                           used to filter out insignificant fluctuations. 
                                           Defaults to 0.1.

    Returns:
        pd.DataFrame: The original DataFrame with a new 'labels' column and filtered rows:
                       - 'labels' column: 
                            - 0: Buy
                            - 1: Sell
                       - Rows where 'labels' is 2 (no signal) are removed.
                       - Rows with missing values (NaN) are removed.
    """

    # Encuentra máximos y mínimos en los precios de cierre
    peaks, _ = find_peaks(dataset['close'], prominence=peak_prominence)
    troughs, _ = find_peaks(-dataset['close'], prominence=peak_prominence)
    
    # Calcular etiquetas de compra/venta utilizando la nueva función de etiquetado en zigzag.
    labels = calculate_labels_zigzag(peaks, troughs, len(dataset)) 

    # Añade las etiquetas calculadas como una nueva columna 'labels' al DataFrame
    dataset['labels'] = labels

    # Elimina las filas en las que la columna 'labels' tiene un valor de 2.0 (sin señal)
    dataset = dataset.drop(dataset[dataset.labels == 2.0].index)
    
    # Devuelve el DataFrame modificado 
    return dataset


 
Maxim Dmitrievsky #:

Usted mismo puede añadir este código a la biblioteca de marcado de acuerdos.

 
Maxim Dmitrievsky #:

Se puso peor.

 
fxsaber #:

Se puso peor.

Sí, pero es un tiro recto, sin trucos.
 
Maxim Dmitrievsky #:

¿Es posible combinar modelos en MT5? Digamos que seleccioné top 20, por lo tanto aparecieron 40 archivos onnx. ¿Qué debo hacer en este caso?

 
Evgeni Gavrilovi #:

¿Es posible combinar modelos en MT5? Digamos que seleccioné top 20, por lo tanto aparecieron 40 archivos onnx. ¿Qué debo hacer en este caso?

Este artículo no trata sobre este tema. No hay ninguna disposición para ensamblar.
Puedes crear tantas copias de bots como quieras.
 
Por supuesto, podríamos añadir drawdowns, porque las líneas suaves son confusas, siento que allí el drenaje fue de hasta -80% o incluso más).
 
Evgeni Gavrilovi #:
Por supuesto, sería posible añadir detracciones, porque las líneas suaves son confusas, siento que allí la detracción era de hasta -80% o incluso más).
No acepto ninguna sugerencia para mejorar el artículo, sólo la discusión del artículo existente / preguntas.
 

Añadidos todos los atributos básicos del módulo pandas.

https://pandas.pydata.org/docs/reference/window.html

Como resultado, obtuve este gráfico. Maxim, gracias por tu trabajo.


Window#
  • pandas.pydata.org
Window# instances are returned by calls: and . instances are returned by calls: and . instances are returned by calls: and . Rolling window functions# Weighted window functions# Expanding window functions# Exponentially-weighted window functions...