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

 
Andrey Dik #:

Sì, Sanych ha scritto che non ci sono estremi, e si sbagliava, perché qualsiasi funzione ha degli estremi.

L'estremo è il punto in cui una funzione raggiunge il valore più grande (massimo) o più piccolo (minimo) su un dato intervallo o in una data area. Gli estremi possono essere locali, quando la funzione raggiunge un valore estremo solo in una certa vicinanza di un punto, o globali, quando la funzione raggiunge un valore estremo sull'intero intervallo o in una determinata area.

Gli estremi sono sempre presenti, anche se non li cercate intenzionalmente (gli algoritmi che utilizzate fanno questa operazione di ricerca per voi). L'apprendimento senza ottimizzazione è impossibile, e l'ottimizzazione è impossibile senza una corretta assegnazione di FF. Se la ricerca degli estremi è fatta per voi e nascosta (cucita nell'algoritmo), non significa che non esistano (sia gli estremi che l'ottimizzazione).

Non c'è nessuna funzione.

Per favore, basta con le informazioni da botteghino. So cos'è l'ottimizzazione.
 
mytarmailS #:

in questo modo?

e può davvero gestire un milione di condizioni?

Sono un po' confuso con questa roba di switch e C++.

Le prime due funzioni sono implementazioni di R, l'ultima è switch in C ++.

Unit: microseconds
                              expr    min     lq      mean median     uq       max neval
     rule(n = sample(1:200, 1), x) 40.482 44.473  57.18044 46.754 51.886  2688.931  1000
    rule2(n = sample(1:200, 1), x) 29.079 35.351 567.03671 38.202 43.904 86712.314  1000
 rule_cpp(n = sample(1:200, 1), x) 31.360 34.781  53.26793 36.491 40.482  4924.005  1000

In effetti, non c'è alcun guadagno, com'è possibile?...
 
mytarmailS #:

Sono un po' confuso con questa storia di switch e C++.

Le prime due funzioni sono l'implementazione di R, l'ultima è switch in C ++.

In effetti, non c'è alcun guadagno, come può essere...?

Puoi mostrarmi il codice?

Probabilmente si sta sprecando una funzione quando la risposta è già stata ricevuta...

 
Aleksey Vyazmikin #:

Puoi mostrarmi il codice?

Probabilmente stai eseguendo la funzione invano, quando la risposta è già stata ricevuta...

Il codice è uguale a quello che ho postato, solo che ho reso le regole 300 invece che 5.

Che senso ha postare il codice?
Ho già deciso l'architettura
 
mytarmailS #:
Il codice è lo stesso che hai postato, tranne per il fatto che ho reso le regole 300 invece di 5

Che senso ha postare il codice R?
Ho già deciso l'architettura

La domanda è nel codice della chiamata di funzione.

 
Aleksey Vyazmikin #:

La domanda è nel codice della chiamata di funzione.

Non capisco
 
mytarmailS #:

In pratica nessun guadagno, come può essere...

Ci sono molte cose che potrebbero essere. Lo script è allegato, di seguito è riportata la parte relativa alla funzione.

bool Rule0( const vector<double> &x ) { return(x[3] > x[4]); }
bool Rule1( const vector<double> &x ) { return(x[0] < x[4]); }
bool Rule2( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule3( const vector<double> &x ) { return(x[3] == x[4]); }
bool Rule4( const vector<double> &x ) { return(x[0] != x[4]); }
bool Rule5( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule6( const vector<double> &x ) { return(x[3] <= x[4]); }
bool Rule7( const vector<double> &x ) { return(x[0] < x[4]); }
bool Rule8( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule9( const vector<double> &x ) { return(x[3] <= x[4]); }

bool rule3( const int n, const vector<double> &x )
{
  typedef bool (*RULE)( const vector<double>& );
  static const RULE Rules[] = {Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9};

  return(Rules[n](x));
}

#define  BENCH(A)                                                              \
  StartTime = GetMicrosecondCount();                                          \
  A;                                                                          \
  Print(#A + " - " + (string)(GetMicrosecondCount() - StartTime) + " mcs");

void OnStart()
{
  const vector<double> x = {1, 2, 3, 4, 5};
  int Tmp = 0;

  ulong StartTime;

  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule(i % 100, x));
  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule2(i % 100, x));
  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule3(i % 100, x));
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule(i % 100, x));  // Если добавить эту строку, то выше rule замедлится.
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule2(i % 100, x)); // Если добавить эту строку, то выше rule2 замедлится.
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule3(i % 100, x)); // Если добавить эту строку, то выше rule3 замедлится.

  Print(Tmp);
}


Risultato.

for (uint i = 1 e8; (bool)i--;) Tmp += rule(i % 100, x) - 505436 mcs
for (uint i = 1 e8; (bool)i--;) Tmp += rule2(i % 100, x) - 261261 mcs
for (uint i = 1 e8; (bool)i--;) Tmp += rule3(i % 100, x) - 709846 mcs


Non è chiaro cosa venga misurato qui - si vedano i commenti evidenziati. Presumibilmente molto più veloce della regola2.

File:
 
fxsaber #:

È interessante notare che, in termini di quantità di dati (citazioni), il cervello umano (come rete neurale) rispetto al MO è come un'infusoria rispetto a un essere umano.

Tuttavia, gli esseri umani primitivi hanno dimostrato di essere in grado di creare delle TC che funzionano piuttosto bene. È emerso che non è necessaria un'enorme quantità di dati per creare una CT funzionante.

Per me è un mistero come, ad esempio, l'uomo sia arrivato a creare modelli scalper funzionanti. È stato fatto quasi interamente senza l'ausilio di calcolatori di numeri.


Lo scenario era apparentemente qualcosa di simile:

  1. Vedo spesso una sorta di appiattimento (ho macinato stupidamente sullo schermo per qualche giorno).
  2. Provo a guadagnarci sopra con un TS primitivo.
  3. Non drena molto. Dovrei perfezionare un po' il TS. Ho dato un'occhiata alla storia del trading - sembra che qualcosa possa essere migliorato.
  4. Ha iniziato a guadagnare un po'. Ripeto il punto 3.
Non c'è un calcolatore di numeri. Ho semplicemente guardato il punto 1 e ho iniziato a farlo. La probabilità di questo approccio sembra essere pari a zero, ma in qualche modo funziona. È una specie di metodo di punzecchiatura folle che funziona.


A quanto pare, il cervello umano è ancora in grado di trovare "schemi" su una quantità estremamente ridotta di dati. Non si può chiamare fortuna. È un mistero.

Imho, il segreto sta tutto nel trasferimento dell'esperienza, tutto ciò che è nuovo è costruito sulle conquiste della generazione precedente. Prendiamo i moderni processori. Per le persone del 19° secolo sarà una magia. Per quelli del XX secolo sarà una tecnologia molto complessa che non avrà gli strumenti giusti per essere decodificata. Solo attraverso il trasferimento delle conoscenze e lo sviluppo graduale potremo raggiungere il livello tecnologico moderno. Ecco perché si dice che se ci sarà la terza guerra mondiale, si combatterà con le pietre nella quarta guerra mondiale. Ci sono leggende sul trading, secondo cui prima i mercati erano molto più facili e i trader dello zenit facevano fortuna con l'aiuto delle medie mobili, ora non sarà più possibile farlo.

 
fxsaber #:

Non è chiaro cosa si stia misurando qui - si vedano i commenti evidenziati. Presumibilmente molto più veloce della regola2.

Qui sono state misurate questa funzione e le sue diverse implementazioni (equivalenti), comprese quelle in C++.

Beh, per ora ho già deciso l'architettura, mi siederò su R-ke puro per ora, ho trovato un modo per accelerare di 25 volte + ci sono ancora vantaggi/forti ragioni per non aggiungere il C++ al mio codice.

 

Potete fare una sfida con il mio AMO.

"Risolvi il TS".


Datemi una piccola porzione di dati che utilizzate.

Descrivete quali operatori, funzioni e variabili utilizzate nel codice.

E mi date la vostra equità o i segnali dell'algoritmo.


Io creo una grammatica di ricerca, prendo il codice come un codice cifrato e risolvo la tua ST.