Discussão do artigo "Aprendizado de máquina em sistemas de negociação baseados em grade e martingale. Deveríamos apostar nele?" - página 3

 
Onde posso ver as variantes do multiplicador? Por exemplo, não por Martin, mas com diferentes variantes de aumento de lote em crescimento ou diminuição, parando a alteração do tamanho do lote, protegendo um lote de outra sequência e outras variantes.
 
1_lexa:
Onde posso ver as opções de multiplicadores? Por exemplo, não por martin, mas com diferentes variantes de aumento ou diminuição do lote, interrompendo a alteração do tamanho do lote, protegendo um lote de outra sequência e outras variantes.

GRID_COEFFICIENTS, GRID_DISTANCES, GRID_SIZE

a grade é considerada fixa aqui para todos os casos, e o algoritmo de aprendizado de máquina a generaliza para todas as situações. Para a cobertura, você precisa corrigir a marcação e a lógica do testador. Ainda não fiz isso.

 
Aleksey Vyazmikin:

Tente fazer a marcação não pelo lucro, mas pelo número de posições abertas - onde menos é melhor.

Poderei ver que há muitas opções. Quando eu terminar outro estudo, tentarei fazer isso

Não é difícil fazer isso, basta alterar a condição de marcação.
 
Maxim Dmitrievsky:

Vamos ver, há muitas opções. Quando eu terminar o outro estudo, tentarei fazer isso

Não é difícil fazer isso, basta alterar a condição de marcação.
def add_labels(dataset, min, max, distances, coefficients):
    labels = []
    for i in range(dataset.shape[0]-max):
        rand = random.randint(min, max)
        all_pr = dataset['close'][i:i + rand + 1]

        grid_stats = {'up_range': all_pr[0] - all_pr.min(),
                      'dwn_range': all_pr.max() - all_pr[0],
                      'up_state': 0,
                      'dwn_state': 0,
                      'up_orders': 0,
                      'dwn_orders': 0,
                      'up_profit': all_pr[-1] - all_pr[0] - MARKUP,
                      'dwn_profit': all_pr[0] - all_pr[-1] - MARKUP
                      }

        for i in np.nditer(distances):
            if grid_stats['up_state'] + i <= grid_stats['up_range']:
                grid_stats['up_state'] += i
                grid_stats['up_orders'] += 1
                grid_stats['up_profit'] += (all_pr[-1] - all_pr[0] + grid_stats['up_state']) \
                * coefficients[int(grid_stats['up_orders']-1)]
                grid_stats['up_profit'] -= MARKUP * coefficients[int(grid_stats['up_orders']-1)]

            if grid_stats['dwn_state'] + i <= grid_stats['dwn_range']:
                grid_stats['dwn_state'] += i
                grid_stats['dwn_orders'] += 1
                grid_stats['dwn_profit'] += (all_pr[0] - all_pr[-1] + grid_stats['dwn_state']) \
                * coefficients[int(grid_stats['dwn_orders']-1)]
                grid_stats['dwn_profit'] -= MARKUP * coefficients[int(grid_stats['dwn_orders']-1)]
        
        if grid_stats['up_orders'] < grid_stats['dwn_orders'] and grid_stats['up_profit'] > 0:
            labels.append(0.0)
            continue
        elif grid_stats['dwn_profit'] > 0:
            labels.append(1.0)
            continue
        
        labels.append(2.0)

    dataset = dataset.iloc[:len(labels)].copy()
    dataset['labels'] = labels
    dataset = dataset.dropna()
    dataset = dataset.drop(
        dataset[dataset.labels == 2].index).reset_index(drop=True)
    return dataset

Amarelo - alterar a condição

resultado (estudo de 2020.05)

Essas condições são fáceis de alterar à vontade, você pode adicionar filtros de tempo (consulte o artigo anterior) ou outros.

É possível encontrar configurações nas quais o bot é quase impossível de matar desde 2010 e antes (se você trabalhar com drawdowns em alguns casos).

Ainda há muitas negociações

Talvez devêssemos fazer uma pesquisa de parâmetros, por analogia com o artigo anterior.

 
Maxim Dmitrievsky:

Amarelo - alterar a condição

resultado (treinamento a partir de 2020.05)

Essas condições podem ser facilmente alteradas conforme desejado, você pode adicionar filtros de tempo (consulte o artigo anterior) ou outros filtros.

É possível encontrar configurações nas quais o bot é quase inábil desde 2010 e antes (se você trabalhar com drawdowns em alguns casos).

Ainda há muitas negociações

Talvez devêssemos fazer uma pesquisa de parâmetros, por analogia com o artigo anterior.

Isso parece ser melhor.

Para mim, o objetivo do treinamento na grade do modelo é tomar uma decisão sobre a conveniência de abrir uma posição em um determinado nível ou ignorar esse sinal. E, para esse fim, o modelo deve avaliar o fechamento da posição agregada como um lucro quando o ponto de fechamento for atingido. Se houver lucro, não faz sentido abrir uma posição. Para isso, é necessário estimar o valor do preço no momento do fechamento da posição.

 
Aleksey Vyazmikin:

Isso é um pouco melhor.

Para mim, o objetivo do treinamento no modelo de grade é tomar uma decisão sobre a conveniência de abrir uma posição em um determinado nível ou ignorar esse sinal. E, para esse fim, o modelo deve avaliar o fechamento da posição agregada para obter lucro quando o ponto de fechamento for atingido. Se houver lucro, não faz sentido abrir uma posição. Para isso, é necessário estimar o valor do preço no momento do fechamento da posição.

Então, não é ruim, sim, mas ainda é preciso trabalhar com a variante que trabalha com um histórico mais longo. Por exemplo, ela não funciona em crises com uma forte queda, porque não houve exemplos desse tipo durante o treinamento.

 
Maxim Dmitrievsky:

Portanto, não é ruim, sim, mas ainda é preciso trabalhar a variante com o trabalho em um histórico mais longo. Por exemplo, ela não funciona em crises com uma forte queda, porque não houve exemplos desse tipo durante o treinamento.

Se alguém busca sobreviver em uma crise, o ganho total será muito menor do que em períodos anteriores e posteriores à crise. É uma questão filosófica: perder uma parte do depósito na crise e ganhar muitas vezes mais do que o que foi perdido antes e depois da crise, ou ter a chance de não drenar na crise, mas ganhar de 3 a 5 vezes mais devagar.

Você precisa de níveis dinâmicos, pelo menos, para sobreviver em grandes movimentos.

 
Aleksey Vyazmikin:

Se você se esforçar para sobreviver na crise, o ganho total será muito menor do que nos períodos antes e depois da crise. É uma questão filosófica: perder parte do depósito na crise e ganhar muitas vezes mais do que o que foi perdido antes e depois da crise, ou ter a chance de não perder na crise, mas ganhar de 3 a 5 vezes mais devagar.

Você precisa de níveis dinâmicos, pelo menos, para sobreviver em grandes movimentos.

Se aproximarmos a crise do mercado calmo, então sim, está apertado nas fichas padrão, precisamos disso ou daquilo. Ou procurar compromissos.

 
Aleksey Vyazmikin:

Isso é um pouco melhor.

Para mim, o objetivo do treinamento no modelo de grade é tomar uma decisão sobre a conveniência de abrir uma posição em um determinado nível ou ignorar esse sinal. E, para esse fim, o modelo deve avaliar o fechamento da posição agregada para obter lucro quando o ponto de fechamento for atingido. Se houver lucro, não faz sentido abrir uma posição. Para isso, é necessário estimar o valor do preço no momento do fechamento da posição.

Se a previsão indicar que não haverá lucro, então é necessário fechar, e não pensar em abrir ou não. E em uma grade, você deve abrir de qualquer maneira.

Porque a grade está apenas tentando vencer a distância para mover o ponto de fechamento para um mais provável com o mesmo lucro.

Bem, se quiser se preocupar com a grade, você deve criar uma matriz de resultados e corrigi-la por Bayes a cada novo movimento de preço, ou seja, com uma nova previsão.

 
Aleksey Mavrin:

Se a previsão indicar que não haverá lucro, então você deve fechar e não pensar em abrir ou não. E em uma grade, você deve abrir de qualquer maneira.

Porque a grade está apenas tentando vencer a distância para mover o ponto de fechamento para um mais provável com o mesmo lucro.

Bem, se quiser se preocupar com a grade, você deve criar uma matriz de resultados e corrigi-la por Bayes a cada novo movimento de preço, ou seja, com uma nova previsão.

Esse era o objetivo, encontrar outras configurações que são impossíveis sem uma grade