Discussão do artigo "Criação de uma estratégia de retorno à média com base em aprendizado de máquina" - página 4

 
Evgeniy Chernish #:
Maxim, conte-nos mais sobre como você agrupa a trajetória de preço de um par de moedas pelo coeficiente de assimetria.

Ele é calculado em uma janela deslizante como uma característica e adicionado ao conjunto de dados. O agrupamento é realizado de acordo com esse recurso e os rótulos de agrupamento são atribuídos a todo o conjunto de dados. Em seguida, as linhas que pertencem a um dos clusters são selecionadas. Os preços e todos os outros atributos permanecem lá. Isso é tudo.

 
fxsaber #:

Então, por que não o ZZ?

No entanto, encontrei uma pequena explicação.

Provavelmente, jogar alguns vértices para fora da linha ZZ teria o mesmo efeito.
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)  # Inicialize todos os rótulos para 2,0 (sem sinal)
    
    for i in range(len_close):
        if i in peaks:
            labels[i] = 1.0  # Sinal de venda nos picos
        elif i in troughs:
            labels[i] = 0.0  # Sinal de compra em pontos baixos
    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.
    """

    # Encontre picos e depressões nos preços de fechamento
    peaks, _ = find_peaks(dataset['close'], prominence=peak_prominence)
    troughs, _ = find_peaks(-dataset['close'], prominence=peak_prominence)
    
    # Calcular rótulos de compra/venda usando a nova função de rotulagem baseada em ziguezague
    labels = calculate_labels_zigzag(peaks, troughs, len(dataset)) 

    # Adicione os rótulos calculados como uma nova coluna "rótulos" ao DataFrame
    dataset['labels'] = labels

    # Remova as linhas em que a coluna "labels" tenha um valor de 2,0 (sem sinal)
    dataset = dataset.drop(dataset[dataset.labels == 2.0].index)
    
    # Retorna o DataFrame modificado 
    return dataset


 
Maxim Dmitrievsky #:

Você mesmo pode adicionar esse código à biblioteca de marcação de negócios.

 
Maxim Dmitrievsky #:

A situação piorou.

 
fxsaber #:

A situação piorou.

Sim, mas é um tiro certeiro, sem truques.
 
Maxim Dmitrievsky #:

É possível combinar modelos no MT5? Digamos que eu tenha selecionado os 20 melhores, portanto, apareceram 40 arquivos onnx. O que devo fazer nesse caso?

 
Evgeni Gavrilovi #:

É possível combinar modelos no MT5? Digamos que eu tenha selecionado os 20 melhores, portanto, apareceram 40 arquivos onnx. O que devo fazer nesse caso?

Este artigo não trata desse tópico. Não há nenhuma disposição para a montagem.
Você pode criar quantas cópias de bots quiser.
 
É claro que poderíamos adicionar drawdowns, pois as linhas suaves são confusas, pois acho que ali o dreno foi de até -80% ou até mais).
 
Evgeni Gavrilovi #:
É claro que seria possível adicionar drawdowns, pois as linhas suaves são confusas, sinto que ali o dreno era de até -80% ou até mais).
Não aceito sugestões para aprimoramento do artigo, apenas discussões sobre o artigo/questões existentes.
 

Adicionados todos os atributos básicos do módulo pandas.

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

Como resultado, obtive este gráfico. Maxim, obrigado por seu trabalho.


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...