Discussione sull’articolo "Utilizzo di feature map auto-organizzanti (mappe Kohonen) su MetaTrader 5" - pagina 4

 
Graff:

Non so a cosa servano. È possibile ottenere le informazioni direttamente dal terminale.

È spaventoso anche solo immaginare a cosa servano, probabilmente qualcuno li ha contati manualmente.

SZY: qualcuno può postare una mod in modo che l'Expert Advisor possa prelevare le informazioni direttamente dal terminale, senza uno script?

Beh, se hai paura, ovviamente no).
 
sergeev:
Di quali informazioni avete bisogno?
Che viene scaricato dallo script in un file e ritirato dall'Expert Advisor per l'analisi, in modo che l'Expert Advisor SOM.mq5 possa ricevere autonomamente (senza l'aiuto degli script DJ.mq5 e FX.mq5) i dati dal terminale.
 

Questo articolo include tutto ciò che serve per ottenere un expert advisor?

Sono interessato a implementare un Expert Advisor a rete neurale.

 

Salve, cari membri del forum!

Articolo molto interessante! Anch'io sto cercando di utilizzare questo codice SOM.

somk

Pesi p1-p4 - dati dal mercato (finora solo la differenza tra i punti ZZ).

p5 - risultato di un'operazione di acquisto virtuale - TP=1, SL=-1 (finora TP=SP=300pp). Mi sembra che un solo BMU p5 (il vettore più vicino) non sia sufficiente per prevedere il risultato.

Qualcuno può suggerire come calcolare il risultato dell'area intorno alla BMU (per chiarezza in blu), tenendo conto della distanza dalla BMU?

 
sealdo:

Qualcuno sa dirmi come è più facile calcolare il risultato dell'area intorno al BMU (cerchiata in blu per chiarezza), tenendo conto della distanza dal BMU ?

Mi chiedevo, è quello che stavo pensando anch'io, cioè come trovare programmaticamente quest'area con le coordinate?
 
progma137:
Mi chiedo: è quello che ho pensato anch'io? Vuoi dire come trovare programmaticamente quest'area con le coordinate?

Esiste già una funzione nella classe CSOM:

int BestMatchingNode(double &vector[]); // trova il nodo migliore della griglia in base a un vettore dato

Conoscendo la dimensionalità della nostra griglia, è facile calcolare le coordinate del BMU (o BMN in questa implementazione).
Qui vogliamo fare esattamente il calcolo del risultato totale (per un parametro (peso)) dell'area intorno al BMU, tenendo conto della distanza dal BMU. Ad esempio, prendiamo una regione con un diametro di 10 neuroni (cellule). I neuroni più vicini hanno un'influenza elevata sul risultato. E più sono lontani, più è debole....

C'è anche da chiedersi come trattare i gusci di BMU situati ai bordi della griglia. Dopo tutto, hanno meno vicini.

 

Potete dirmi come trovare le barre sulle mappe?

Inseriamo quattro vettori e otteniamo 4 mappe. Vorrei disegnare una traiettoria su tutte, ad esempio dal giorno corrente (per i giorni) a 3 barre indietro e analizzare lo stato dei cluster.

È possibile farlo in modo programmatico, ad esempio con la funzione void DrawTrajectory(int from, int count), che disegnerà una traiettoria da un determinato numero di barre su tutte le mappe.

La seconda domanda è: come ottenere la mappa di output e, soprattutto, la mappa di frequenza?

 

Non ho aspettato una risposta... Ho scritto il metodo di visualizzazione sulle mappe di input della traiettoria dal numero dato del vettore di input per il numero dato di passi, non perdonatemi se qualcosa è sbagliato - non sono un programmatore :)

Qualcuno può portare questa libreria molto intelligente (grazie all'autore e ad Alexey Sergeev) a livello di applicazione pratica? !!!!


//------------------------------------------------------------------ ShowTrajectory
void CSOM::ShowTrajectory(int n_patern, int m_cnt) // Metodo di rappresentazione della traiettoria dei vettori di ingresso
{
        if(m_cnt<=0) return;
        int idx=0,x[],y[], dy=0;
        string name[];
        ArrayResize(x,m_cnt);
        ArrayResize(y,m_cnt);
        ArrayResize(name,m_cnt);
        double data[]; ArrayResize(data, m_dimension);
   for(int ind=0; ind<m_nSet; ind++) // impostare i dati con i valori dei vettori dell'insieme di addestramento
  {
        if(ind<n_patern) continue;  // attendere il modello di input richiesto
        for(int k=0; k<m_dimension; k++) data[k]=m_set[m_dimension*(ind)+k];
        int winningnode=BestMatchingNode(data); // trovare l'indice del nodo più vicino
                
         // salvare le coordinate dei modelli di input selezionati per il tracciamento
        int x1,y1,x2,y2;
        m_node[winningnode].GetCoordinates(x1,y1,x2,y2);
        if(m_bHexCell) // se esagoni
      {
          int x_size=int(MathAbs(x2-x1));
          int y_size=int(MathAbs(y2-y1));
          dy=y_size;
          y1=y1+y_size/4; 
          y2=y2+y_size/4;
      }
        x[idx]=(x1+x2)/2;
        y[idx]=(y1+y2)/2;               
        name[idx]=(string)ind;
        //x[idx]=(int)m_node[winnode].X();
        //y[idx]=(int)m_node[winnode].Y();
        idx++;
        m_cnt--;        
        if(m_cnt==0) break;      // registrare il numero richiesto di paternioni in ingresso
  }
  // disegnare la traiettoria, i nodi e le iscrizioni
   int bcol=clrBlack;
   for(int k=0; k<m_dimension; k++)
  {
      int yp=0, yc;
      int sz=ArraySize(x);
      for(int j=0; j<sz; j++) 
    {
         yc=y[j];
         // nodo
         int sh=2;
         if(j>0) sh=1;
         m_bmp[k].DrawRectangle(x[j]-sh,y[j]-sh,x[j]+sh,y[j]+sh,bcol,true);
         // traiettoria
         if(j<sz-1) m_bmp[k].DrawLine(x[j],y[j],x[j+1],y[j+1],bcol);  
         yc=y[j]-dy;
         if(MathAbs(yp-yc)<dy) yc-=dy;
         yp=yc;
         // numero di paternità (barre) 
         m_bmp[k].TypeText(x[j],yc,name[j], clrIndigo);
    }    
  }
}
 

Nella classe CSOM il contatore dei vettori di addestramento caricati m_nSet viene azzerato solo nel costruttore CSOM::CSOM().

Di conseguenza, il numero di vettori di addestramento cresce costantemente nella modalità di riqualificazione in loop.

È meglio aggiungere la riga m_nSet=0; al metodo CSOM::LoadTrainData(...) .

 
GSB:

Forse qualcuno porterà una libreria molto utile (grazie all'autore e ad Alexey Sergeev) a livello di uso pratico?!!!!


Cosa intendi dire? un bel SDK? o delle belle immagini prodotte dal programma? chi ha bisogno di cosa, lo fa. queste mappe non sono altro che un mezzo per stabilire i dati che devono essere analizzati e sulla base di essi fare conclusioni