Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 1138

 
Konstantin Nikitin:

Para as minhas observações, afiar mais de 1 ainda não funcionou. Sim, e as contas / gráficos de outras pessoas com um grande índice não tem visto. Eu ainda não sei.

Aleksey Vyazmikin:

Não está claro na descrição da fórmula como verificá-la, por exemplo, como calcularo "lucro médio aritmético ao longo do tempo de posse de uma posição"?

Talvez seja uma questão de uma pequena expectativa matemática?

De qualquer forma, notei que quanto maior for este índice, melhor, e isto não é um pouco, e o relatório principal é escrito no arquivo com aqueles índices que eu entendo.

Bem, o que vos posso dizer, estimados senhores...

Estes são efeitos secundários do uso de caixas negras, bibliotecas de outras pessoas, etc.

Eu só posso oferecer-lhe a publicação de equidade em CSV da sua pesquisa e eu vou dizer-lhe qual é a razão Sharp correcta dos seus modelos, você pode calcular o código em anexo (python)

import random

import csv

import matplotlib

import matplotlib.pyplot as plt


def rndWalk(length, start, var):

    rndwalk = []

    curent = start

    for _ in range(length):

        curent*= 1 + random.gauss(0,3) * var

        rndwalk.append(curent)

    return rndwalk


def ParseCsv(path, columnName):

    tab = csv.DictReader(open(path))

    price = []

    for row in tab: price.append(float(row[columnName]))

    return price


def diff(ts):

    return [ts[n] - ts[n - 1] for n in range(1, len(ts))]


def SharpRatio(PnL):

    ret = sum(PnL) / len(PnL)

    var = ((sum([(x - ret) ** 2 for x in PnL]) / len(PnL))) ** 0.5

    return len(PnL) ** 0.5 * ret / var


rw = rndWalk(10000,100,0.001)

sr = SharpRatio(diff(rw))

print(sr)


plt.plot(rw)

plt.show()


O código SharpRatio em si é apenas 3 linhas

def SharpRatio(PnL):

ret = soma(PnL) / len(PnL)

var = ((soma([(x - ret) ** 2 para x em PnL]) / len(PnL)) ** 0.5

return len(PnL) ** 0.5 * ret / var


Se você me enviar equidade ou PnL, eu vou tentar descobrir qual é o problema. Eu posso adivinhar se PnL é usado "descarregado", ou seja, com lacunas entre as negociações (o que, claro, não é correto), daí o escalonamento. Eu apostaria $100 que este é o problema.

 
pantural:

O que vos posso dizer, cavalheiros...

Estes são os efeitos secundários da utilização de caixas negras, bibliotecas estrangeiras, etc.

Eu só posso oferecer-lhe a publicação da equidade em CSV da sua pesquisa e eu vou dizer-lhe qual é a razão Sharp correcta dos seus modelos, você pode calcular o código em anexo (python)

Como dar-lhe a Razão Sharp, por hora a minuto?

 
Aleksey Vyazmikin:

Como se dá equidade, a cada hora por minuto?

Não importa, que sejam as duas coisas.

A propósito, um dos sinais de cálculo Sharp errado é quando a equidade em escalas diferentes dá números significativamente diferentes de Sharp Ratio, enquanto normalmente devem estar muito próximos
 
pantural:

Esquece, vamos fazer as duas coisas.

A propósito, um dos sinais de cálculo errado é quando a equidade em escalas diferentes dá números significativamente diferentes de rácios de embaralhamento, enquanto normalmente deveriam estar muito próximos.

OK, mas um pouco mais tarde - neste momento todas as máquinas estão ofegantes por uma história que se encaixa :)

 
pantural:

Esquece, vamos fazer as duas coisas.

A propósito, um dos sinais de estimação Sharp errada é que as ações em diferentes escalas dão números essencialmente diferentes de Sharp Ratio, enquanto normalmente deveriam estar muito próximas.

Estou a dar a variante por minuto, e estou a anexar o relatório de negociação do testador.

É verdade que melhorei um pouco os indicadores.

A razão Sharpe é agora de 0,29.

Arquivos anexados:
KS.zip  102 kb
 
Aleksey Vyazmikin:

Estou a dar uma variante por minuto, e a anexar o relatório comercial do testador.

Mas eu melhorei um pouco os indicadores.

A razão Sharp é agora de 0,29.

Real Sharp ratio = ~3,79

O erro daqueles que tentaram calcular seus números é óbvio. Eles simplesmente esqueceram de escalar a proporção de retornado para variação pela raiz quadrada do comprimento da série

def SharpRatio(PnL):

PnL = [x para x em PnL se abs(x) > 0]

ret = soma(PnL) / len(PnL)

var = ((soma([(x - ret) ** 2 para x em PnL]) / len(PnL)) ** 0.5

return len(PnL) ** 0.5 * ret / var


PS: SR=3,79 é muito optimista, claro que se não for uma sweatshop e testada correctamente

 
pantural:

Real Sharp ratio = ~3,79

O erro daqueles que fizeram o algoritmo para calcular seus números é óbvio. Eles estupidamente esqueceram de escalar a proporção de retorno para a variação pela raiz quadrada do comprimento da série

def SharpRatio(PnL):

PnL = [x para x em PnL se abs(x) > 0]

ret = soma(PnL) / len(PnL)

var = ((soma([(x - ret) ** 2 para x em PnL]) / len(PnL)) ** 0.5

return len(PnL) ** 0.5 * ret / var


PS: SR=3,79 é muito optimista, claro, se não for um suor (até certo grau) e testado correctamente

Obrigado pelo recálculo!

Se for realmente um erro, talvez valha a pena relatá-lo em um tópico especial, já que é um erro global no terminal?

Quanto à adaptação, tenho a minha própria abordagem ao MO, recolho folhas das árvores e depois olho para o seu desempenho na história em termos de amostra treinada e desconhecida, em que houve um efeito positivo em ambas as amostras, indo para o grupo seguinte para selecção e análise detalhadas. Isto é em parte um ajuste, mas com ajustes para o fato de tal "folha" ter funcionado antes e funcionar agora, e o que acontecerá a seguir - ninguém sabe.

 
Aleksey Vyazmikin:

Obrigado pelo recálculo!

Se for realmente um erro, talvez você deva relatá-lo em um tópico especial, uma vez que é um erro global no terminal?

Sim, não há dúvida que é um erro, deve ser relatado, importa-se que eu use o seu relatório como um exemplo?

Aleksey Vyazmikin:

Quanto à adaptação, tenho a minha própria abordagem ao MO, recolho folhas das árvores e depois olho para o seu desempenho na história em termos de amostra treinada e desconhecida, em que houve um efeito positivo em ambas as amostras, indo para o grupo seguinte para selecção e análise detalhadas. Isto é parcialmente adequado, mas com o ajuste que tal "lista" funcionou antes e funciona agora, e que ninguém sabe o que vai acontecer a seguir.

O ajuste está em toda parte, não importa como você olhe para ele, a questão é como reduzi-lo a um nível aceitável.

 
pantural:

O ajuste está em toda parte, não importa como você olhe para ele, a questão é como reduzi-lo a um nível aceitável.

Não podes. Qualquer optimização, qualquer afinação, qualquer treino é um ajuste. Você só tem que aceitá-lo como uma inevitabilidade e trabalhar com ele.

A questão deve ser colocada de forma diferente aqui. Infelizmente, provavelmente não existem receitas gerais e a formulação em si pode ser diferente para sistemas diferentes.

 
Yuriy Asaulenko:

Não podes. Qualquer optimização, qualquer afinação, qualquer treino é um ajuste.

Aqui a questão tem de ser colocada de forma diferente. Infelizmente, provavelmente não existem receitas gerais e a formulação em si pode ser diferente para sistemas diferentes.

Ver

Não utilize números que necessitem de ser ajustados