L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 3184

 

Ho esaminato diversi tipi di simulazioni di serie temporali e le loro caratteristiche, ho creato una serie sintetica a partire da sinusoidi e rumore (ho scelto le sinusoidi per una maggiore chiarezza).

La conclusione è... Questa simulazione è ancora da capire bene...


La prima riga è quella originale (in alto a sinistra), tutte le altre sono simulazioni costruite sulle caratteristiche della prima riga.

un'altra esecuzione


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 #:

Non vedo quale sia il problema.

In primo luogo non c'era alcun problema. Cioè, non c'era alcun problema da risolvere. Si trattava solo di condividere i risultati intermedi e di discutere le diverse interpretazioni.


Io stesso sono piuttosto amareggiato per la mia ipotesi.

Forum sul trading, sui sistemi di trading automatizzati e sulla verifica delle strategie di trading

Apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading

fxsaber, 2023.08.19 00:50

Se dopilivayut, per Monte Carlo, probabilmente l'opzione migliore per generare un simbolo casuale con le caratteristiche desiderate stat.

Ho pensato che con questa randomizzazione della storia dei tick reali perfettamente scalabile otterrò anche un simbolo, che sarà perfettamente scalabile con una corretta messa a punto. Ma ho ottenuto un fallimento completo, che mi ha fatto chiedere: cosa c'era nella storia reale che ha scalato perfettamente?

 
Maxim Dmitrievsky #:

Significa comunque che c'è più alfa nelle zecche.

Possiamo solo dire con certezza che quando si lavora con i tick ci sono più informazioni rispetto a quando si lavora con le barre. Pertanto, è logico lavorare con i tick con capacità di calcolo adeguate.

 
mytarmailS #:

La prima riga è quella originale (in alto a sinistra), mentre tutte le altre sono simulazioni basate sulle caratteristiche della prima riga.

Non userei nessuna delle simulazioni. Cosa fanno:

  1. Trovare diverse (diciamo 100) caratteristiche statistiche nella storia delle barre.
  2. Generano serie di barre in modo che queste 100 caratteristiche statistiche corrispondano.

È assurdo che 100 valori possano descrivere una serie originale di milioni di valori! Sembra essere uno strumento dei teorici ma non dei praticanti.


L'algoritmo proposto funziona con i tick. I volumi dei tick coincidono nelle barre ricevute, gli spread coincidono. Identica reazione alle notizie, identico comportamento di rollover, ecc.

Sembra tutto a posto. Ma non riesco a insegnare lo scalping nemmeno dopo questa randomizzazione. E per ora non ho una spiegazione.


Vorrei postare un EX5-script che crea il simbolo casuale necessario, ma le regole del forum lo vietano. Non sono ancora pronto a scrivere un articolo sul blog. Se qualcuno è interessato a farlo girare, mi contatti.

 
fxsaber #:

non era qualcosa che doveva essere risolto.

Vorrei risolvere il seguente problema.


Compito.

Rendere casuale un simbolo scalabile reale in modo che rimanga scalabile.


Obiettivo.

Monte Carlile.

 
fxsaber #:
Ma è stato un fallimento completo, il che mi ha fatto chiedere: cosa c'era nella storia reale che la rendeva perfetta?

Credo che la differenza sia la serialità o la ripetitività delle barre/tick consecutivi. Durante un trend la maggior parte di esse sono nella stessa direzione, mentre il randomizzatore le fa in media in 1.

 
Forester #:

Credo che la differenza stia nella serialità o ripetitività delle barre/tick consecutivi. Durante un trend la maggior parte di esse sono in una direzione, mentre il randomizzatore le fa in media in 1 direzione.

Ci sono diverse ipotesi. Per sicurezza ho verificato MathRand eseguendo questo script su un simbolo reale e uno casuale.

#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);
}

Entrambi i simboli hanno mostrato quasi gli stessi valori. È interessante notare che Importo1 ~ Importo2. Cioè la tendenza non è data dal numero di incrementi di un carattere, ma dai valori assoluti degli incrementi stessi.

Nell'attuale algoritmo di randomizzazione, la sequenza dei valori assoluti degli incrementi non cambia.

 
fxsaber #:

Ci sono diverse ipotesi. Per sicurezza ho verificato MathRand eseguendo questo script su un simbolo reale e casuale.

Entrambi i simboli hanno mostrato quasi gli stessi valori. È interessante notare che Importo1 ~ Importo2. Ciò significa che la tendenza non è data dal numero di incrementi di un simbolo, ma dai valori assoluti degli incrementi stessi.

Importo1 - Importo2 è piuttosto volatilità. La tendenza è data dalla somma di molti incrementi. Nei dati reali le tendenze sono una, nei dati randomizzati (fino a circa 1), le tendenze sono più simili a outlier casuali con una volatilità crescente. Presumo che la loro ampiezza sia molte volte inferiore a quella dei dati reali.

AGGIORNAMENTO: non ho visto che hai messo ~ al posto di -.

A proposito di ~. Il loro rave approssimativo significa proprio questo, reale ben miscelato, mediato in 1.
 
fxsaber #:

Non c'è una sola simulazione che utilizzerei. Cosa fanno:

  1. Trovare diverse caratteristiche statistiche (100) nella storia delle barre.
  2. Generare una serie di barre in modo che queste 100 caratteristiche statistiche coincidano.

Èassurdo che 100 valori possano descrivere una serie originale di milioni di valori! Sembra essere uno strumento dei teorici ma non dei professionisti.

È assurdo sorprendersi di qualcosa con cui non si ha familiarità e definirlo assurdo.....

Conoscete gli algoritmi di riduzione della dimensionalità? Gli algoritmi di compressione?

fxsaber #:

L'algoritmo proposto funziona con i tick. I volumi dei tick coincidono nelle barre ricevute, gli spread coincidono. Identica reazione alle notizie, identico comportamento di rollover, ecc.

Sembra tutto a posto. Ma non riesco a insegnare lo scalping nemmeno dopo questa randomizzazione. E per ora non ho una spiegazione.

Ecco la risposta a quanto la vostra randomizzazione simuli il reale processo di mercato.....

fxsaber #:

Task.

Randomizzare un simbolo scalabile reale in modo che rimanga scalabile.

Ed ecco una funzione di criterio/adeguatezza per creare una simulazione di riga adeguata

 
mytarmailS #:

È assurdo essere sorpresi da ciò che non si conosce e chiamarlo assurdo ....

In questi dati artificiali come segnale - funzioni periodiche, per l'analisi delle quali sono sufficienti 1-2-10 periodi (ogni 50 barre, ad esempio, la stessa funzione (in assoluto), ma con un rumore diverso, dopo 50 di nuovo, ecc.) Nei dati di mercato non esiste una funzione periodica, quindi è necessario analizzare tutto....