Discussão do artigo "Usar Mapas Auto-organizáveis (mapas de Kohonen) no MetaTrader 5" - página 4

 
sergeev:
De que informações você precisa?
Que são descarregadas pelo script em um arquivo e retraídas pelo Expert Advisor para análise, ou seja, para que o Expert Advisor SOM.mq5 possa receber dados do terminal de forma independente (sem a ajuda dos scripts DJ.mq5 e FX.mq5).
 

Este artigo inclui tudo para obter um consultor especialista?

Estou interessado em implementar o Neural Network Expert Advisor.

 

Olá, queridos membros do fórum!

Artigo muito interessante! Também estou tentando usar esse código SOM.

somk

Pesos p1-p4 - dados do mercado (até agora, apenas a diferença entre os pontos ZZ).

p5 - resultado de uma operação de compra virtual - TP=1, SL=-1 (até agora TP=SP=300pp). No forward, apenas um p5 BMU (vetor mais próximo) não é suficiente para prever o resultado, ao que me parece.

Alguém pode sugerir como fazer o cálculo do resultado da área ao redor do BMU (para maior clareza, em azul), levando em conta a distância do BMU?

 
sealdo:

Alguém pode me dizer como é mais fácil calcular o resultado da área ao redor da BMU (circulada em azul para maior clareza), levando em conta a distância da BMU?

Você quer dizer como encontrar programaticamente essa área com coordenadas?
 
progma137:
Você quer dizer como encontrar programaticamente essa área com coordenadas?

Já existe uma função na classe CSOM:

int BestMatchingNode(double &vector[]); // encontrar o melhor nó na grade com base em um determinado vetor

Conhecendo a dimensionalidade de nossa grade, é fácil calcular as coordenadas da BMU (ou BMN nesta implementação).
Aqui queremos fazer exatamente o cálculo do resultado total (por um parâmetro (peso)) da área ao redor da BMU, levando em conta a distância da BMU. Por exemplo, consideramos uma região com um diâmetro de 10 neurônios (células). Os neurônios mais próximos têm uma grande influência no resultado. E quanto mais distantes, mais fraco....

Aqui temos uma dúvida sobre como devemos tratar as BMU-shells localizadas nas bordas da grade. Afinal de contas, elas têm menos vizinhos.

 

Você pode me dizer como encontrar barras nos mapas?

Inserimos quatro vetores e obtemos quatro mapas. Eu gostaria de desenhar uma trajetória em todos eles, digamos, do dia atual (para os dias) até 3 barras atrás e analisar o estado dos grupos.

É possível fazer isso de forma programática, por exemplo, com a função void DrawTrajectory(int from, int count), que desenhará uma trajetória a partir de um determinado número de barra em todos os mapas.

E a segunda pergunta é: como obter o mapa de saída e, o mais importante, o mapa de frequência?

 

Não esperei por uma resposta... Escrevi o método de exibição nos mapas de entrada da trajetória a partir do número determinado do vetor de entrada pelo número determinado de etapas, não me perdoe se algo estiver errado - não sou programador :)

Alguém pode trazer essa biblioteca muito inteligente (graças ao autor e a Alexey Sergeev) para o nível de aplicação prática? !!!!


//------------------------------------------------------------------ ShowTrajectory
void CSOM::ShowTrajectory(int n_patern, int m_cnt) // Método para mostrar a trajetória dos vetores de entrada
{
        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++) // definir dados por valores de vetores do conjunto de treinamento
  {
        if(ind<n_patern) continue;  // aguardar o padrão de entrada necessário
        for(int k=0; k<m_dimension; k++) data[k]=m_set[m_dimension*(ind)+k];
        int winningnode=BestMatchingNode(data); // encontrar o índice do nó mais próximo
                
         // salvar as coordenadas dos padrões de entrada selecionados para rastreamento
        int x1,y1,x2,y2;
        m_node[winningnode].GetCoordinates(x1,y1,x2,y2);
        if(m_bHexCell) // se hexágonos
      {
          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;      // registre o número necessário de paternions de entrada
  }
  // desenhar a trajetória, os nós e as inscrições
   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];
         // nó
         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);
         // trajetória
         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;
         // número de paternas (barras) 
         m_bmp[k].TypeText(x[j],yc,name[j], clrIndigo);
    }    
  }
}
 

Na classe CSOM, o contador de vetores de treinamento carregados m_nSet é redefinido somente no construtor CSOM::CSOM().

Como resultado, o número de vetores de treinamento está crescendo constantemente no modo de retreinamento em loop.

É melhor adicionar a linha m_nSet=0; ao método CSOM::LoadTrainData(...) .

 
GSB:

Talvez alguém traga uma biblioteca muito útil (graças ao autor e a Alexey Sergeev) para o nível de uso prático?!!!!


Como assim? belo SDK? ou belas imagens produzidas pelo programa? quem precisa do quê, faz o quê. esses mapas nada mais são do que um meio de estabelecer dados que precisam ser analisados e, em seguida, tirar conclusões com base neles.
 
sealdo:

Olá, queridos membros do fórum!

Artigo muito interessante! Também estou tentando usar esse código SOM.

Alguém pode sugerir como facilitar o cálculo do resultado da área ao redor da BMU (circulada em azul para maior clareza), levando em conta a distância da BMU?

Alguém encontrou uma solução? Só agora encontrei este artigo. Junto com você, agradeço. E à pergunta.