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

 
Alexey Burnakov:
  • Vou tentar seleccionar modelos com base no FV máximo (agora estou a seleccionar modelos por MO). Ou seja, vou mudar a função de avaliação da qualidade do modelo. HZ....

A função certa para avaliar a qualidade do modelo é muito importante, porque o que você está procurando e tentando maximizar é o que você vai acabar tendo. Se você usar a precisão do modelo, é fácil de deslizar para um máximo local onde o modelo sempre retorna a classe com o maior número de exemplos. Para dados de treinamento com aulas desequilibradas é melhor usar F-score ou Cohen's Kappa. Mas mesmo com eles eu tive problemas, porque o aumento de preço por barra pode ser diferente, e mesmo tendo uma estimativa positiva, você pode estar no negativo - o número de negócios vencedores será mais que perdedores, mas alguns negócios perdedores podem ter perdas grandes e irrecuperáveis. Simulação de negociação, e avaliar o modelo baseado em resultados de negociação é a coisa certa a fazer, eu concordo com você, eu comecei recentemente a fazer isso também. Precisa de rentabilidade com pequeno drawdown - por isso, a avaliação do modelo deve usar estes conceitos.

Eu acho que o MO não é uma boa escolha porque não leva em conta o drawdown, o que é importante. Eu gosto de Recovery Factor e Sharpe ratio a melhor de todas as funções disponíveis para estimar EAs em MT5.
O Fator de Recuperação é o lucro total dividido pelo máximo de drawdown para todo o período. Muito simples, mas eficaz.
Sharpe Ratio - muitas descrições na Internet, mas eu não encontrei muitas fórmulas. Há um código para o MT4, acho que devíamos transferi-lo para o R e tentar.

double GetSharpeRatioFromHistory(double riskFreeYearlyIncome = 0.01){
   double profitsArray[];
   int profitsArraySize = 0;
   
   double profitsAvg = 0.0;
   int profitsAvgCount = 0;
   
   int ordersHistoryTotal = OrdersHistoryTotal();
   if(ordersHistoryTotal == 0){
      return 0.0;
   }
   for(int i=0; i<ordersHistoryTotal; i++){
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
         if((OrderSymbol() == _Symbol) && (OrderMagicNumber() == magic)){
            double profitForTrade = (OrderProfit() + OrderCommission() + OrderSwap());
            double seconds = double(OrderCloseTime() - OrderOpenTime());
            double riskFreeRate = riskFreeYearlyIncome / double(365*24*60*60) * seconds;
            double tradeResult = profitForTrade - riskFreeRate;
            
            profitsArraySize = ArrayResize(profitsArray, profitsArraySize+1);
            if(profitsArraySize>0){
               profitsArray[profitsArraySize-1] = tradeResult;
            }
            
            profitsAvg += tradeResult;
            profitsAvgCount++;
         }
      }
   }
   
   if(profitsArraySize == 0){
      return 0.0;
   }
   
   profitsAvg /= double(profitsAvgCount);
   
   double stdDev = 0.0;
   for(int i=0; i<profitsArraySize; i++){
      stdDev += ((profitsArray[i]-profitsAvg)*(profitsArray[i]-profitsAvg)/double(profitsArraySize));
   }
   
   if(stdDev == 0.0){
      return 0.0;
   }

   return profitsAvg/stdDev;
}

O parâmetro RiskFreeYearlyIncome - retorno anual do investimento sem risco (depósito bancário), no exemplo, é de 1%. Sharpe Ratio leva em conta o quanto a estratégia é melhor do que um tal investimento.
double seconds = double(OrderCloseTime() - OrderOpenTime()) - quanto tempo uma troca foi aberta em segundos. Para negociação de bar, isto é, respectivamente, quantos segundos num bar.

 
Dr.Trader:

1) A função certa para avaliar a qualidade do modelo é muito importante, porque o que procuramos e tentamos maximizar, é o que obtemos no final.

2) Mas mesmo com eles eu tive problemas, porque o aumento de preço por barra pode ser diferente, e mesmo tendo uma avaliação positiva, você pode estar no negativo - o número de negócios vencedores será mais do que perder, mas alguns negócios perdedores podem ter uma perda grande e irrecuperável.

3) Simular uma troca, e avaliar o modelo baseado nos resultados da troca é a coisa certa a fazer, eu concordo com você, eu comecei recentemente a fazer isso também. Você precisa de rentabilidade com pequeno drawdown - portanto, a avaliação do modelo deve usar esses conceitos.

4)

Eu acho que o MO não é uma boa escolha porque não leva em conta o drawdown que é importante. As minhas características favoritas no MT5 são o Factor de Recuperação e a relação Sharpe.
O Fator de Recuperação é o lucro total dividido pelo máximo de drawdown para todo o período. Muito simples, mas eficaz.
Sharpe Ratio - muitas descrições na Internet, mas eu não encontrei muitas fórmulas. Existe um código para o MT4, acho que devemos transferi-lo para o R e experimentá-lo.


1) Absolutamente

2) exactamente.

3) Sim, ajuda a se livrar do viés de partida na avaliação.

4) O FS é o fator de recuperação. Eu tenho muito respeito por isso em geral. Vou colocá-lo na função de estimativa, é fácil.

Sharpe. É fácil! Eu explico.

a) Você recebe um vetor de resultados comerciais em pips, certo?

b) Você precisa simular a negociação com REINVESTIMENTO e converter o vetor de pontos em um vetor de incrementos percentuais do depósito. Exemplo. Começamos com 100.000 dólares. Trocamos 0,1 lote tem 0,001 (dez pontos). Isto são 10 dólares por lote. Então este valor transforma-se em 10 / 100 000. E assim por diante, tendo em conta o aumento ou a diminuição do lote.

c) Utilizando o vector resultante dos incrementos percentuais, calcular: média, st.deviation.

d) Insira um certo retorno sem risco por ano (3%) - o número é condicional, um número pequeno.

e) Traduza suas negociações em renda média anual, ou decomponha o retorno sem risco por ano pelo retorno médio por negociação. Feito.

f) (seu retorno médio por operação (por período) - retorno sem risco) / desvio padrão

Eu ainda não tenho o código para R. Mas não deve ser difícil escrever tal função.

 

Nos mercados financeiros, tudo é requalificado! Mesmo o que eles dizem que não é recondicionado é recondicionado.

A regressão linear robusta é menos retrabalhada, mas dá uma qualidade de aprendizagem tão merdosa que também é merdosa na exprapolação de novos dados.

 
Alexey Burnakov:

A sua ideia de classificar os ganhos de preço tem sido uma ideia puramente emocional para mim desde o início. Se prevemos tendências, olhamos para ZZ e é claro: aqui há uma classe e aqui há outra classe. Se olharmos para o gráfico de aumentos de preços, é o caos de um masturbação em torno de zero. Onde estão as aulas claramente visíveis aqui?

Isto é pura emoção que dou grande importância à estatística - tudo deve ser claro e óbvio sem a matemática.

Além disso, para aumentos de preços nos mercados financeiros, a ARIMA-ARCH foi desenvolvida há muitos anos e funciona bastante bem. Esta ópera tem até modelos que consideram Hearst. O que é melhor do que uma classificação?

A classificação são os padrões - "cabeça e ombros", a pesquisa para a qual temos automatizado e que prevêem uma classe claramente visível. Com a classificação encontramos um padrão (na forma de uma árvore, por exemplo) e dizemos: "depois deste padrão haverá crescimento". Se tivermos formulado corretamente a variável alvo, ela o fará. Aqui ZZ não é a variável alvo correta. A ideia aqui era prever o crescimento futuro de 100 pips. Uma variável-alvo destas parece-me muito mais correcta.

Conclusão. Devemos começar com a variável alvo, o alvo é sempre o nosso todo, falsos alvos levam ao pântano

 
SanSanych Fomenko:

A sua ideia de classificar os ganhos de preço tem sido uma ideia puramente emocional para mim desde o início. Se prevemos tendências, olhamos para ZZ e é claro: aqui há uma classe e aqui há outra classe. Se olharmos para o gráfico de aumentos de preços, é o caos de um masturbação em torno de zero. Onde estão as aulas claramente visíveis aqui?

Isto é pura emoção que dou grande importância à estatística - tudo deve ser claro e óbvio sem a matemática.

Além disso, para aumentos de preços nos mercados financeiros, a ARIMA-ARCH foi desenvolvida há muitos anos e funciona bastante bem. Esta ópera tem até modelos que consideram Hearst. O que é melhor do que uma classificação?

A classificação são os padrões - "cabeça e ombros", a pesquisa para a qual temos automatizado e que prevêem uma classe claramente visível. Com a classificação encontramos um padrão (na forma de uma árvore, por exemplo) e dizemos: "depois deste padrão haverá crescimento". Se tivermos formulado corretamente a variável alvo, ela o fará. Aqui ZZ não é a variável alvo correta. A ideia aqui era prever o crescimento futuro de 100 pips. Uma variável-alvo destas parece-me muito mais correcta.

Conclusão. Você tem que começar com a variável alvo, como sempre o alvo é tudo para nós, falsos alvos levam ao pântano.

Não sei o que há de errado emocionalmente nisso. Essa é uma maneira de ver as coisas. A cor da vela também é chamada assim.

Deixe-me lembrar-lhe que as tarefas de regressão e classificação foram uma fixação antes da fase de construção de um sistema rentável.

Cheguei ao ponto em que prevejo não apenas o sinal de crescimento, mas um crescimento com um módulo maior. Ou seja, entrar na compra apenas onde o sistema prevê um forte crescimento, e não apenas crescimento. Também com a venda. Tecnicamente, a máquina aprende a regressão. E depois interpreto a sua saída como forte para cima, forte para baixo, pendurada num canal.

Agora isto está muito próximo de prever uma futura subida de 100 pips. Só que não está claro para mim como você vê a formalização de tal direcionamento. O que significa se antes do crescimento houvesse uma queda de 90 pips, e se esse crescimento for atingido apenas em uma semana?

No meu horizonte das 9 horas, uma forte subida é algures por volta de 20 pips. Após 9 horas o negócio está fechado.

E na verdade eu não estou prevendo a classe agora (subida / descida / tagarelice / forte subida). Na verdade, estou a construir um sistema cuja nota na fase de aprendizagem é medida pela expectativa de maturidade do ofício. Ou seja, a precisão da classificação pode ser baixa (53% para mim), mas bater na direção certa dá um ganho um pouco maior do que não bater. Você sente a diferença na declaração do problema? A precisão da classificação está correlacionada, mas não coincide totalmente com a rentabilidade comercial.

 

A propósito, o fator de recuperação em função da avaliação da qualidade do modelo também é desequilibrado. Eu posso ter 10 trocas e 1 troca perdedora, ou 500 trocas e 10 trocas perdedoras. No segundo caso, o FS pode ser menor e o lucro 50 vezes maior.

Alternativamente, você pode pegar o lucro total e subtrair dele o saque máximo. Aqui pelo menos o lucro será maximizado.

Ou o tradicional fator de rentabilidade: lucro total / perda total.

 
Alexey Burnakov:

No segundo caso, o FS pode ser menor e o lucro 50 vezes maior.

Tem tudo a ver com o risco que queres correr. Por exemplo, há dois sinais: o primeiro traz 100% de lucro por ano, com um drawdown máximo de 10%. O segundo sinal é de 300% de lucro com um drawdown de 40%. Portanto, o segundo sinal é liderado pelos lucros.
Mas se você calcular o PV, o líder será o primeiro sinal, e está certo, porque você pode simplesmente aumentar o tamanho das transações (em lotes) do primeiro sinal em quatro vezes, o que dará o mesmo drawdown que o segundo sinal, mas com maiores lucros. Ou se você não quiser arriscar uma grande porcentagem do saldo da conta, você pode reduzir o tamanho de lotes do segundo sinal em 4 vezes, o que dará o risco desejado de 10% do saldo, mas o lucro também será menor do que o primeiro sinal

Ou seja, o plano de negociação da estratégia pode ser o seguinte: determinar o máximo possível de drawdown por estratégia de roll forward; calcular quantas vezes esse drawdown é maior/baixo do que o valor permitido para o saldo da conta; calcular o tamanho do lote para que esses números converjam.
O uso do FS implica que, antes de começar a negociar, você calculará todos os riscos e determinará um tamanho de lote adequado. Quanto menor o drawdown que a estratégia tem ao negociar, maior o tamanho do negócio que você pode usar.

 
Alexey Burnakov:

Ou o tradicional fator de rentabilidade: lucro total/perda total.

IMHO, mais aceitável é:

critério_avaliação_TC = total_transacções_profícitas / (total_transacções_profícitas + total_perdas_transacções)

desde que a negociação seja feita com um lote fixo.

Nesse caso, se o critério for superior a 0,5, então o TS mostrou um lucro total, caso contrário uma perda.

A vantagem deste critério é que ele é estritamente racionado e seu valor não pode exceder a faixa de 0 a 1,0 inclusive.

Os Drawdowns, mesmo apesar do lucro final do sistema de trading, influenciam negativamente este critério, ou seja, são considerados como um factor negativo.

 
Yury Reshetov:

IMHO, mais aceitável é:

critério_avaliação_TC = total_transacções_profitáveis / (total_transacções_profitáveis + total_perdas_transacções)

na condição de negociar com um lote fixo.

Nesse caso, se o critério for superior a 0,5, então o TS mostrou um lucro final, caso contrário uma perda.

A vantagem deste critério é que ele é estritamente racionado e seu valor não pode exceder a faixa de 0 a 1,0 inclusive.

Os sorteios, mesmo apesar do lucro final do comércio, influenciam negativamente este critério, ou seja, são considerados como um fator negativo.

"The_amount_of_losing_deals" - deixe-me deixar claro se me refiro ao valor absoluto. Obrigado, nunca tinha visto um critério tão normalizado.
 
Yury Reshetov:

IMHO, mais aceitável é:

critério_avaliação_TC = total_transacções_profitáveis / (total_transacções_profitáveis + total_perdas_transacções)

na condição de negociar com um lote fixo.

Nesse caso, se o critério for superior a 0,5, então o TS mostrou um lucro final, caso contrário um prejuízo.

A vantagem deste critério é que ele é estritamente racionado e seu valor não pode exceder a faixa de 0 a 1,0 inclusive.

Os sorteios, mesmo apesar do lucro final do comércio, influenciam negativamente este critério, ou seja, são considerados como um fator negativo.

E se obtivermos o lucro principal num par de negócios, enquanto milhares de outros negócios sofrem pequenas perdas? - Eu não acho que seja uma boa ideia.