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

 

Analisei vários tipos de simulações de séries temporais e suas características, criei uma série sintética a partir de senoides e ruído (usei senoides para maior clareza).

A conclusão é... Essa simulação ainda não foi compreendida adequadamente...


A primeira linha é a original (canto superior esquerdo), todas as outras linhas são simulações criadas com base nas características da primeira linha.

outra execução


par(mar=c(2,2,2,2),mfrow=c(3,2))

n <- 1:1000
#  original series
s <- sin(n/50+1) + sin(n/20+15)/2 + rnorm(n,sd = 0.1) 
s |> plot(t="l", main = "original series (2 sin + noise)")

s |> rnorm(mean = mean(s),sd = sd(s)) |> cumsum() |> plot(t="l",main = "random generation")
library(forecast)
s |> ets() |> simulate() |> plot(t="l",main = "Exponential smoothing state space model")
s |> ar() |> simulate() |> plot(t="l",main = "Fit Autoregressive Models to Time Series")
s |> nnetar() |> simulate() |> plot(t="l",main = "Neural Network Time Series Forecasts")
s |> Arima() |> simulate() |> cumsum() |> plot(t="l",main = "ARIMA model to univariate time series")
 
Maxim Dmitrievsky #:

Bem, não vejo qual é o problema.

Não havia nenhum problema em primeiro lugar. Ou seja, não havia nenhum problema a ser resolvido. Apenas compartilhar resultados intermediários e discutir diferentes interpretações.


Eu mesmo estou bastante chateado com minha suposição.

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Aprendizado de máquina na negociação: teoria, modelos, prática e algo-trading

fxsaber, 2023.08.19 00:50

Se dopilivayut, para Monte Carlo, provavelmente a melhor opção para gerar um símbolo aleatório com as características estatísticas desejadas.

Pensei que, com essa randomização do histórico de ticks reais perfeitamente escalonável, eu também obteria um símbolo que seria perfeitamente escalonável com o ajuste adequado. Mas obtive um fracasso total, o que, pelo menos, me fez pensar: o que havia no histórico real para que ele fosse perfeitamente escalonado?

 
Maxim Dmitrievsky #:

Ainda assim, significa que há mais alfa nos ticks.

Só podemos dizer com certeza que, ao trabalhar com ticks, há mais informações do que ao trabalhar com barras. Portanto, é lógico trabalhar com ticks com recursos computacionais adequados.

 
mytarmailS #:

A primeira linha é a original (canto superior esquerdo), todas as outras linhas são simulações baseadas nas características da primeira linha

Eu não usaria nenhuma das simulações. O que elas fazem:

  1. Encontram várias (digamos 100) características estatísticas no histórico de barras.
  2. Geram séries de barras de modo que essas 100 características estatísticas correspondam.

É absurdo que 100 valores possam descrever uma série original de milhões de valores! Parece ser uma ferramenta para os teóricos, mas não para os profissionais.


Oalgoritmo proposto funciona com ticks. Os volumes de ticks coincidem nas barras recebidas, os spreads coincidem. Reação aguda idêntica às notícias, comportamento de rolagem idêntico, etc.

Parece que está tudo bem. Mas não consigo ensinar escalpelamento mesmo após essa randomização. E até agora não tenho nenhuma explicação para isso.


Eu postaria um script EX5 que cria o símbolo aleatório necessário, mas as regras do fórum proíbem isso. Ainda não estou pronto para criar uma entrada de blog para isso. Se alguém estiver interessado em fazer isso, entre em contato comigo.

 
fxsaber #:

não era algo que precisava ser resolvido.

Eu gostaria de resolver o seguinte.


Tarefa.

Randomizar um símbolo escalonável real para que ele permaneça escalonável.


Objetivo.

Monte Carlile.

 
fxsaber #:
Mas foi um fracasso total, o que, no mínimo, me fez pensar: o que havia na história real que a tornava perfeita?

Acho que a diferença é a serialidade ou repetitividade das barras/ticks consecutivos. Durante uma tendência, a maioria delas está na mesma direção; o randomizador as faz, em média, em 1.

 
Forester #:

Acho que a diferença está na serialidade ou repetitividade das barras/ticks consecutivos. Durante uma tendência, a maioria delas está em uma direção, enquanto o randomizador as faz, em média, em 1.

Há várias hipóteses. Por via das dúvidas, verifiquei o MathRand executando esse script em um símbolo real e em um símbolo aleatório.

#property script_show_inputs

input datetime inFrom = D'2023.01.01';

double GetAvgPrice( const MqlTick &Tick )
{
  return((Tick.bid + Tick.ask) / 2);
}

void OnStart()
{
  MqlTick Ticks[];
  
  int Amount1 = 0;
  int Amount2 = 0;
  
  for (uint i = CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, inFrom * 1000) - 1; (bool)i--;)
  {
    const double Diff = NormalizeDouble(GetAvgPrice(Ticks[i]) - GetAvgPrice(Ticks[i + 1]), 8);
    
    if (Diff > 0)
      Amount1++;
    else if (Diff < 0)
      Amount2++;
  }
  
  Print(Amount1);
  Print(Amount2);
}

Ambos os símbolos mostraram quase os mesmos valores. O interessante é que Amount1 ~ Amount2. Ou seja, a tendência não é formada pelo número de incrementos de um caractere, mas pelos valores absolutos dos próprios incrementos.

No algoritmo de randomização atual, a sequência de valores absolutos dos incrementos não muda.

 
fxsaber #:

Há várias hipóteses. Por precaução, verifiquei o MathRand executando esse script em um símbolo real e aleatório.

Ambos os símbolos mostraram quase os mesmos valores. O interessante é que Amount1 ~ Amount2. Ou seja, a tendência não é formada pelo número de incrementos de um símbolo, mas pelos valores absolutos dos próprios incrementos.

Quantidade1 - Quantidade2 é bastante volatilidade. A tendência é se você somar muitos deles. Em dados reais, as tendências são uma, em dados aleatórios (até cerca de through1), as tendências são mais parecidas com outliers aleatórios, aumentando a volatilidade. Presumo que elas sejam muitas vezes menores em amplitude do que as reais.

UPD: Não vi que você colocou ~ em vez de - aqui.

Sobre ~. Seu delírio aproximado significa exatamente isso, muito bem misturado, com média em 1.
 
fxsaber #:

Não há uma única simulação que eu usaria. O que eles fazem:

  1. Encontrar várias (digamos, 100) características estatísticas no histórico da barra.
  2. Gerar uma série de barras de modo que essas 100 características estatísticas coincidam.

Éabsurdo que 100 valores possam descrever uma série original de milhões de valores! Parece ser uma ferramenta para os teóricos, mas não para os profissionais.

É absurdo se surpreender com algo com o qual você não está familiarizado e chamá-lo de absurdo.....

Você está familiarizado com algoritmos de redução de dimensionalidade? algoritmos de compressão?

fxsaber #:

Oalgoritmo proposto funciona com ticks. Os volumes de ticks coincidem nas barras recebidas, os spreads coincidem. Reação aguda idêntica às notícias, comportamento de rolagem idêntico, etc.

Parece que está tudo bem. Mas não consigo ensinar escalpelamento mesmo após essa randomização. E até agora não tenho nenhuma explicação para isso.

Aqui está a resposta de quão bem sua randomização simula o processo real do mercado.....

fxsaber #:

Task.

Randomize um símbolo escalpável real para que ele permaneça escalpável.

E aqui está uma função de critério/aptidão para criar uma simulação de linha adequada

 
mytarmailS #:

É absurdo se surpreender com o desconhecido e chamá-lo de absurdo ....

Nesses dados artificiais como um sinal - funções periódicas, para análise das quais 1-2-10 períodos são suficientes (a cada 50 barras, por exemplo, a mesma função (absolutamente), mas com ruído diferente, depois de 50 novamente, etc.). Nos dados de mercado, não há função periódica, portanto, precisamos analisar tudo....

Razão: