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

 
Uladzimir Izerski #:

Posso solo consigliarvi di non seguire la strada dei falsi profeti.

Io lo faccio.
 

Buon anno!!!

è importante considerare attentamente i compromessi tra precisione ed efficienza è dall'IA

In generale, questa mi sembra la regola fondamentale della vita. Non c'è precisione nella misurazione senza errore. E l'errore dipende dal momento della misurazione e dalla media.... per così dire...

 
Ebbene, l'hanno sfangata e vietata. La cosa principale cancellata, come fare una SIM olandese per un paio di dollari))))
 
Valeriy Yastremskiy #:
Ebbene, l'hanno sfangata e vietata. La cosa principale cancellata, come fare una SIM olandese per un paio di dollari))))

e grazie a Dio).

 

Esistono script di gestione delle mani per mt5?

come

1) se si entra in un'operazione, lo stop viene impostato automaticamente.

2) se si ottiene una perdita sul conto, non permette di aprire altre operazioni, ecc.

 
mytarmailS #:

Esiste qualche script maneggevole per mt5?

come

1) se si entra in un trade, lo stop viene impostato automaticamente

2) se si registra una perdita sul conto, non è possibile aprire altre operazioni, ecc.

È buffo, proprio ieri stavo pensando: "E se il MO non venisse utilizzato per la direzione dell'entrata nel mercato, ma per la gestione, in particolare per gestire il passaggio al pareggio, impostare gli stop e i take-out".

Dovrebbero esserci molte cose di questo tipo nel codice di base: cercatele.

 
mytarmailS #:

Alexey, penso che tu lo sappia, ma forse no, quindi ti mostrerò come funzionano gli algoritmi che prendono in ingresso fogli/vettori di lunghezza variabile


Abbiamo un foglio con vettori di lunghezza variabile, un vettore == un'osservazione.

Cosa fa il modello, l'algoritmo "sotto il cofano" quando prende questi dati? Li trasforma in una matrice.

Ma poiché per i dati reali la matrice è enorme, l'algoritmo trasforma i dati in una matrice rada efficiente dal punto di vista della memoria.

Quindi è ancora una matrice sotto il cofano). (dati attenti)


Tutti i panieri di merci sono naturalmente ridotti a vettori di dimensione fissa nota, pari al numero di articoli presenti nel negozio.

Il nostro caso è molto diverso. Per semplicità, si consideri che i prezzi siano una sequenza di barre renko, ciascuna etichettata con 1 o -1. Per ogni barra in corrispondenza della posizione numero N, il vettore delle caratteristiche è costituito da tutte le barre precedenti - un vettore di 1 e -1 di lunghezza N-1. Non ci sono vincoli a priori sulla lunghezza del vettore di caratteristiche. L'utilizzo di un numero fisso di barre per le caratteristiche è una misura forzata. Vogliamo allontanarci da questa restrizione e costruire algoritmi che possano gestire vettori di lunghezza arbitraria.

Le funzioni ricorsive sono una fonte di materiale matematico per tali algoritmi. Esse prendono in ingresso un vettore di qualsiasi dimensione, ma sono definite attraverso funzioni con un numero fisso di argomenti. L'esempio più semplice è la media esponenziale.

 
Aleksey Nikolayev #:

Tutti i panieri di prodotti sono naturalmente ridotti a vettori di dimensioni note prefissate, pari al numero di articoli di tutti i prodotti del negozio.

Il nostro caso è molto diverso. Per semplicità, si consideri che i prezzi siano una sequenza di barre renko, ciascuna etichettata come 1 o -1. Per ogni barra al numero N, il vettore delle caratteristiche è costituito da tutte le barre precedenti. Per ogni barra in corrispondenza della posizione numero N, il vettore delle caratteristiche è costituito da tutte le barre precedenti - un vettore di 1 e -1 di lunghezza N-1. Non ci sono vincoli a priori sulla lunghezza del vettore di caratteristiche. L'utilizzo di un numero fisso di barre per le caratteristiche è una misura forzata. Vorremmo allontanarci da questa restrizione e costruire algoritmi che possano gestire vettori di lunghezza arbitraria.

Ho trovato le funzioni ricorsive come materiale matematico di partenza per tali algoritmi. Esse prendono in ingresso un vettore di qualsiasi dimensione, ma sono definite attraverso funzioni con un numero fisso di argomenti. L'esempio più semplice è la media esponenziale.

Cosa si vuole cercare esattamente e in che modo?

Ad esempio, abbiamo un modello, tre picchi o qualsiasi altra cosa (regola, evento, modello, cluster).


Tutto ciò che può accadere tra questi tre picchi, lo consideriamo come rumore e non lo consideriamo.

Prendiamo in input un vettore/matrice rumorosa e controlliamo se c'è un modello o meno....

State considerando questo concetto o qualcos'altro?

========================================================

Lo vedo come una sequenza di eventi che devono accadere, e sono descritti da regole logiche...

evento == regola logica.

Per esempio: se l'evento 1 è accaduto e non c'è stato l'evento 2, allora aspettiamo l' evento 3 ecc....

Esistono quindi due tipi di regole/eventi: gli eventi "go" quando la ricerca continua e gli eventi "stop" quando tutto viene annullato.


L'architettura è la seguente

1) le regole sono generate dalla grammatica

2) l'algoritmo di generazione cerca e migliora le regole tramite funzioni di fitness.

=========================

Ecco un esempio di una semplice grammatica per dati multidimensionali, in questo caso OHLC.

library(gramEvol)

Xcolnames <- c("open","high","low","close")

ruleDef <- list(
  res = grule(t(as.data.frame(multi.expr))),
  
  multi.expr = grule( c(single.expr, single.expr, single.expr,
                        single.expr, single.expr, single.expr)),
  
  single.expr = grule(list(r=c( go_rules   = as.character(expression(Expr)),
                                stop_rules = as.character(expression(Expr))))),
  
  
  Expr     = grule(expr, expr & expr ),
  
  expr     = grule(logy_op(one_var,one_var) ),
  one_var  = gsrule('X[<id>,<var_name>]'),
  
  id       = grule(i,numb,i+numb),
  numb     = gvrule(1:10),
  var_name = gvrule(Xcolnames),
  logy_op  = grule(">","<"))

grammarDef <- CreateGrammar(ruleDef)
gr <- GrammarRandomExpression(grammarDef, 1)
rbind.data.frame(eval(gr))


le regole che la grammatica genera.

Questo blocco di regole è come una singola regola con un insieme di condizioni.

"X" è una matrice con attributi, il ciclo "i" ci cammina sopra e sceglie ciò che gli piace, un sistema molto flessibile.

                                                       go_rules
r   X[i, "low"] < X[2, "close"] & X[i + 3, "low"] > X[i + 2, "low"]
r.1                             X[i + 2, "open"] < X[i + 8, "high"]
r.2   X[2, "open"] < X[i + 3, "high"] & X[i, "high"] < X[8, "high"]
r.3                                   X[1, "low"] < X[i + 8, "low"]
r.4   X[3, "open"] > X[3, "close"] & X[i + 1, "open"] < X[2, "low"]
r.5                                 X[i, "high"] < X[i + 2, "open"]
                                                       stop_rules
r                                    X[i, "open"] > X[2, "close"]
r.1  X[i, "low"] > X[i, "high"] & X[i + 2, "high"] < X[i, "high"]
r.2                                  X[3, "high"] < X[2, "close"]
r.3    X[1, "high"] > X[2, "open"] & X[i, "high"] > X[i, "close"]
r.4                                  X[4, "open"] < X[2, "close"]
r.5 X[i, "high"] < X[1, "high"] & X[2, "low"] < X[i + 2, "close"]

In linea di principio è già tutto implementato, se c'è interesse posso proporvelo.



PS Non c'è alcuna restrizione sulla dimensione della matrice di attributi, ogni istanza può essere di qualsiasi dimensione, l'importante è che tutte le regole funzionino in ordine, non c'è alcun vincolo temporale.

 
mytarmailS #:

Cosa volete cercare esattamente e in che modo?

Ad esempio, abbiamo un modello, tre picchi o qualsiasi altra cosa (regola, evento, modello, cluster).


Tutto ciò che può accadere tra questi tre picchi viene considerato come rumore e non viene preso in considerazione.

Quindi prendiamo in input un vettore/matrice rumorosa e controlliamo se c'è un modello o meno....

È un concetto che state considerando o qualcos'altro?

Il mio concetto è il più ampio possibile, poiché non ci sono restrizioni particolari imposte, e molte cose vi rientrano. Probabilmente anche il tuo esempio vi rientra. Particolarmente importante è il fatto che non c'è una lunghezza del modello rigidamente definita.

In ogni caso, per me il punto è che all'SB la probabilità di 1 o -1 è sempre 0,5 e bisogna cercare i punti in cui la probabilità (frequenza) si discosta fortemente da questo valore. Nel vostro schema questo potrebbe essere, ad esempio, la pendenza del terzo picco.

Suppongo che la regola "siamo sul versante sinistro del terzo picco" possa essere espressa attraverso funzioni ricorsive. Ma non credo che queste funzioni possano essere facilmente scritte in modo esplicito, quindi è necessario un algoritmo di MO per costruirle.

 
Aleksey Nikolayev #:

Ma non credo che queste funzioni possano essere facilmente scritte in modo esplicito, quindi abbiamo bisogno di algoritmi di MO per costruirle.

Bene, vi ho proposto un algoritmo che soddisfa i vostri requisiti


1) nessun limite di tempo, perché scriviamo noi stessi ciò che ci serve

2) qualsiasi logica di ricerca di regolarità, poiché scriviamo noi stessi ciò che ci serve

3) qualsiasi scelta di descrizione delle regolarità, sia con regole logiche che con funzioni , perché scriviamo noi stessiciò che ci serve.


Quindi, nel concetto da me proposto.

questi modelli saranno equivalenti e i modelli stessi possono essere di qualsiasi complessità.

     open high low close
[1,]    1    0   0     0
[2,]    0    1   0     0
[3,]    0    0   1     0
[4,]    0    0   0     1
[5,]    0    0   0     0
      open high low close
 [1,]    0    0   0     0
 [2,]    0    0   0     0
 [3,]    1    0   0     0
 [4,]    0    0   0     0
 [5,]    0    0   0     0
 [6,]    0    1   0     0
 [7,]    0    0   1     0
 [8,]    0    0   0     0
 [9,]    0    0   0     0
[10,]    0    0   0     1

e nessun AMO può farlo.

E ci sono regole di "stop", e nessun AMO può fare nemmeno questo.

Intendo un AMO generico con dati tabellari come input.