"New Neural" è un progetto di motore di rete neurale Open Source per la piattaforma MetaTrader 5. - pagina 46

 
maxfade:

mi viene subito in mente una barzelletta con la barba

Dubito degli "zeri" al momento della nascita, inoltre penso che gli errori-difetti siano presenti tutto il tempo
A proposito, sì, il bambino nasce con almeno un riflesso di presa e deglutizione, e anche questo è un lavoro del cervello. Quindi non ha un cervello zero, soprattutto perché il suo apprendimento inizia molto prima della sua nascita. È una questione di evoluzione piuttosto che imparare a caricare le bilance di un neonato.
 

L'ho cambiato in modo che quando un oggetto viene creato tramite costruttore con parametri, una nuova sequenza sarà inizializzata alla fine della sequenza.

Funzionerà un po' più lentamente, ma la sequenza sarà sempre unica.

Quando si crea attraverso il costruttore standard, è necessario chiamare Srand() e la sequenza sarà la stessa, girando in cerchio.

  uint st=GetTickCount();
  CRandm *rnd=new CRandm((uint)TimeLocal(),10000);// длинна последовательности
  for(int i=0;i<1000000;i++)// количество вызовов
    {
     rnd.Rand();
    } 
  delete rnd;   
  Print("time=",GetTickCount()-st);
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
File:
Randm.mqh  5 kb
 

Propongo di considerare una bibbia di ordini virtuali (emula l'apertura/chiusura sul mercato. i comandi sono quasi gli stessi degli ordini reali).

Sarà utile quando avrete bisogno di eseguire un modello su dati storici (al di fuori dello strategy tester).

Cosa avete dimenticato? Cosa possiamo migliorare, aggiungere, cambiare, modificare? - La biblioteca è molto semplice.

Finora sono state implementate solo operazioni di tipo buy-0 e sell-1.

File:
C_Orders.mqh  15 kb
 

Lezione 1 qui https://www.mql5.com/ru/forum/4956/page23

Lecture 2 qui https://www.mql5.com/ru/forum/4956/page34

Lecture 3 qui https://www.mql5.com/ru/forum/4956/page36

Lezione 4. Applicazione dell'organizzazione della corteccia visiva alla trasformazione delle serie temporali

Quindi il nostro compito è quello di costruire una rete neurale di classificazione per i modelli di prezzo secondo il principio del cervello. Questa rete può essere divisa in due moduli: il modulo di trasformazione dell'input (prezzo) e il modulo di classificazione che può essere costruito secondo qualsiasi principio conosciuto (per esempio Support Vector Machine):

Nella mia lezione precedente ho descritto il modello HMAX della corteccia visiva come un esempio di trasformazione biologica dell'informazione. Il grande svantaggio di questo modello è che i valori dei pesi (campi recettivi) non sono addestrati in esso, ma semplicemente presi da misure biologiche dei neuroni del cervello. Per esempio, i campi recettivi dei neuroni semplici in V1 (S1) sono misurati come mostrato nel video qui https://www.youtube.com/watch?v=Cw5PKV9Rj3o(i clic che sentite sono impulsi dei neuroni). Nel nostro caso di citazioni di serie temporali, i "campi recettivi" dei neuroni che trasformano l'informazione sono sconosciuti in anticipo. Quindi dovremo trovarli da soli. Per esempio, il primo strato di trasformazione dei prezzi (strato S1) può essere costruito come segue, per analogia con lo strato S1 della corteccia visiva:

In questo esempio, il nostro strato S1 ha 6 sottolivelli, numerati da 0 a 5. I neuroni (cerchi) dello stesso sottolivello hanno gli stessi pesi di ingresso (campi recettivi), convenzionalmente mostrati nei rettangoli a sinistra. Ogni sottolivello di neuroni ha il suo campo recettivo. Sappiamo in anticipo che se c'è un sottolivello con campo recettivo w_0,k dove k=0...5 (direzione "su"), allora deve esserci un sottolivello con campo recettivo -w_0,k (direzione "giù"). Lasciamo che gli strati con campo positivo siano numerati con numeri pari (0, 2, 4) e le loro controparti negative numerate con numeri fuzzy (1, 3, 5). Inoltre, sappiamo che i sub-strati S1 devono avere campi recettivi di dimensioni diverse. Lasciamo che la dimensione del campo aumenti dal sottolivello 0 (e la sua controparte negativa 1) al sottolivello 4 (e la sua controparte negativa 5). Gli ingressi di tutti i neuroni della stessa colonna sono alimentati con gli stessi prezzi (per esempio i neuroni della prima colonna sono alimentati con i prezzi x_0...x_5). Gli ingressi dei neuroni nella colonna successiva sono alimentati con i prezzi spostati di 1 barra (x_1...x_6), ecc. Così, il nostro strato S1 consiste di neuroni con campi recettivi di diverse direzioni (su, giù), dimensioni e posizioni temporali.

L'apprendimento dei pesi d'ingresso dei neuroni dello strato S1 è fatto solo per una colonna di neuroni di diversi sottolivelli, e non importa quale. Poi tutti i pesi sono copiati per i neuroni rimanenti in ogni sottolivello. L'apprendimento viene fatto senza un insegnante alimentando diversi modelli di prezzo negli ingressi dello strato S1 e cambiando i pesi in base a qualche regola. Ci sono molte regole per l'autoapprendimento dei pesi dei neuroni, ben descritte qui:

Miller, K. D., e MacKay, D. J. C. (1994). Il ruolo dei vincoli nell'apprendimento hebbiano, Neural Computat, 6, 100-126.

La prima regola dell'autoapprendimento neuronale fu postulata da Hebb nel 1949(https://en.wikipedia.org/wiki/Hebbian_theory). Questa regola recita: "Se un neurone riceve input da un altro neurone, ed entrambi sono molto attivi, il peso tra i neuroni deve essere aumentato". Matematicamente si scrive come segue

dw_i = mu*x_i*y,

dove dw_i è l'incremento del peso w_i, x_i è il valore all'ingresso i-esimo, y è l'uscita di un neurone, mu è il tasso di apprendimento. Useremo la regola di Oja (https://en.wikipedia.org/wiki/Oja's_rule), che appartiene alla classe delle regole di apprendimento competitivo :

dw_i = mu*y*(x_i - y*w_i/a),

dove dw_i è il peso incrementale w_i, x_i è il prezzo all'ingresso i-esimo, y è l'uscita del neurone calcolato come y = SOMMA(w_i*x_i, i=0..m-1), mu è il tasso di apprendimento, a è un parametro (la somma dei quadrati dei pesi SOMMA(w_i^2,i=0..m-1) tende ad a). Il vantaggio di questa regola è che trova automaticamente i pesi come autovettori principali delle quotazioni dei prezzi. In altre parole, la regola di Ogi riproduce il Principal Component Approach (PCA). Questo coincide con l'assunzione biologica che i campi recettivi dello strato S1 della corteccia visiva rappresentano i principali autovettori dell'informazione visiva. Il codice C++ allegato allena automaticamente i pesi dei 32 sublayers S1 con le quotazioni EURUSD M5 come input, mu=1, a=1. Questi pesi come funzioni di input sono mostrati qui sotto

I pesi dei primi due sottolivelli (0 e 1) sono indicati in rosso. Hanno solo due valori non nulli: -0,707 e +0,707. I pesi dei sub-strati 2 e 3 sono indicati in arancione. Hanno 4 valori non nulli. Ecc.

Per utilizzare il codice allegato, è necessario installare le librerie Boost e CImg http://cimg.sourceforge.net/. Non sono arrivato ai livelli superiori (C1, S2, C2) e molto probabilmente non lo farò per molto tempo. Chi ha letto le mie lezioni precedenti dovrebbe capire come funzionano tutti i livelli HMAX e completare il modulo di conversione delle quotazioni. Nella prossima (ultima) lezione parlerò delle SparseNets.

File:
BrainPower.zip  907 kb
 
joo:

Propongo di considerare una bibbia di ordini virtuali (emula l'apertura/chiusura sul mercato. i comandi sono quasi gli stessi degli ordini reali).

Sarà utile quando avrete bisogno di eseguire un modello su dati storici (al di fuori del tester di strategie).

Cosa avete dimenticato? Cosa possiamo migliorare, aggiungere, cambiare, modificare? - La biblioteca è molto semplice.

Finora sono state implementate solo le operazioni buy-0 e sell-1.

Grazie per la biblioteca. Posso avere una breve istruzione su come usarlo?
 
Graff:
Grazie per la biblioteca. Posso avere un tutorial veloce su come usarlo?

In realtà, non c'è molto da dire.

Prima di ogni esecuzione della cronologia, per cancellare la cronologia degli ordini, chiamate

void Initialise(int MaxPossibleCountOrd, double Spread, double Point_);

e poi, secondo la vostra strategia di trading, chiamate i comandi necessari:

int    OrderOpen        (int Type, double Volume, int Time,double Price,double SL, double TP);
void   Possible_SL_or_TP(int Time, double PriceHigh,double PriceLow);
void   OrderClose       (int Ticket, int Time,double Price);
void   OrderCloseAll    (int Time, double   Price);
int    ProfitTradeCount ();
int    TotalPipsProfit  ();
int    LossSeriesCount  ();
int    ProfitSeriesCount();

Lo spread è fisso, viene impostato durante l'inizializzazione. Per uno spread fluttuante, dovremo aggiungere la funzionalità appropriata. A mio parere, non è necessario - basta impostare il massimo spread possibile per uno strumento e questo è tutto.

 
joo:

Non c'è molto da dire.

Prima di ogni esecuzione della cronologia, per cancellare la cronologia degli ordini, dovremmo chiamare i seguenti comandi:

e poi, secondo la strategia di trading, chiamare i comandi necessari:

Lo spread è fisso, viene impostato durante l'inizializzazione. Per uno spread fluttuante, dovremo aggiungere la funzionalità appropriata. Per me non è necessario nell'inferno - basta impostare il massimo spread possibile per uno strumento e questo è tutto.

Grazie, lo proverò stasera. L'analogo per MT4https://www.mql5.com/ru/forum/124013 potrebbe essere di aiuto.
Простая идея мультивалютного тестера с примером реализации - MQL4 форум
  • www.mql5.com
Простая идея мультивалютного тестера с примером реализации - MQL4 форум
 

Mi dispiace, ma sembra che io abbia fatto male i conti. Al momento, non ho praticamente la possibilità di essere coinvolto nel progetto.

Anche se il desiderio di partecipare è enorme, sono disperatamente a corto di tempo ed energia, il che è un peccato.

Potrò iscrivermi dopo gli esami (metà dicembre). A proposito, uno dei corsi è direttamente collegato alle reti neurali.

 

A proposito. Ci sono due funzioni di destinazione. Per la regressione logistica e la regressione semplice.

La classificazione è un caso di regressione logistica.

La funzione obiettivo è per la regressione logistica:

E per la regressione ordinaria:

anche se i loro derivati sono simili. Forse è per questo che la distinzione di solito è silenziosa.

Il primo è usato nello strato sigmoidale di uscita nei problemi di classificazione.

Il secondo è usato per l'uscita lineare nei problemi di predizione.

 
TheXpert:

Mi dispiace, ma sembra che io abbia fatto male i conti. Al momento, non ho praticamente la possibilità di essere coinvolto nel progetto.

Anche se il desiderio di partecipare è enorme, sono disperatamente a corto di tempo ed energia, il che è un peccato.

Potrò iscrivermi dopo gli esami (metà dicembre). A proposito, uno dei corsi è direttamente collegato alle reti neurali.

Siete sparsi negli angoli compagni. Assolutamente no.
Motivazione: