Обсуждение статьи "Использование самоорганизующихся карт Кохонена в трейдинге" - страница 3

 

Graff:

ЗЫ: кто-то может выложить мод, чтоб советник напрямую из терминала втягивал инфу, без скрипта? 

какая инфа вам нужна?
 
Graff:

Сам не понимаю зачем они. Ведь можно получать инфу напрямую из терминала.

 страшно даже представить чем именно, наверно кто-то их вручную считал. 

ЗЫ: кто-то может выложить мод, чтоб советник напрямую из терминала втягивал инфу, без скрипта? 

Ну, если страшно, тогда конечно не стоит)
 
sergeev:
какая инфа вам нужна?
Которая выгружается скриптом в файл и втягивается советником для анализа. т.е. чтоб советник SOM.mq5 мог самостоятельно (без помощи скрипта DJ.mq5 и FX.mq5) получать данные из терминала.
 

Здравствуйте, уважаемые форумчане!

Очень интересная статья! Пытаюсь тоже этот код SOM использовать.

somk 

Веса p1-p4 - данные с рынка (пока что просто разница между точками ZZ)

p5 - результат виртуальной сделки Buy -  TP=1,  SL=-1 (пока TP=SP=300пп) . На форварде для предсказания результата просто одного p5 BMU (самого близкого вектора) не достаточно, мне кажется.

Может ли кто подсказать, как проще сделать расчет результата области вокруг BMU (для наглядности обвер синим), с учетом расстояние от BMU ?

 
sealdo:

Может ли кто подсказать, как проще сделать расчет результата области вокруг BMU (для наглядности обвер синим), с учетом расстояние от BMU ?

мне вот интересно, это то что я тоже подумал? вы хотели сказать, как программно найти эту область с координатами?
 
progma137:
мне вот интересно, это то что я тоже подумал? вы хотели сказать, как программно найти эту область с координатами?

В классе CSOM уже есть функция:

int BestMatchingNode(double &vector[]); // нахождения наилучшего узла сети по заданному вектору

Зная размерность нашей сетки, легко вычислить координаты BMU (или BMN в данной реализации).
Здесь хочется сделать именно расчет общего результата (по одному параметру (весу)) области вокруг BMU, с учетом расстояния от BMU. Например, берем область диаметром 10 нейронов (ячеек). Ближайшие нейроны имеют высокое влияние на результат. И чем дальше, тем слабее...

Здесь еще появляется вопрос, как нам относится к BMU-шкам, расположенным у краев сетки. Ведь кол-во соседей у них меньше.


 

Подскажите пожалуйста как находить бары на картах?

На вход подали четыре вектора, получили 4 карты. Хотелось бы начертить на всех траекторию скажем от текущего дня (для дневок) на 3 бара назад и проанализировать состояние кластеров.

Возможно сделать это программно, например функцией void DrawTrajectory(int from, int count) которая на всех картах нарисует траекторию от заданного номера бара.

И второй вопрос, как получить карту выхода и главное, карту частот?

 

Не дождался отклика... Написал сам метод отображения на картах входов траектории от заданного номера входного вектора на заданное число шагов, не обессудьте если что не так - не программист :)

Может кто все же доведет очень толковую библиотеку (спасибо и автору и Алексею Сергееву) до уровня практического прменения?!!


//------------------------------------------------------------------ ShowTrajectory
void CSOM::ShowTrajectory(int n_patern, int m_cnt) // Метод показа траектории входных векторов
{
        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++) // устанавливаем data значениями вектора из обучающего множества
  {
        if(ind<n_patern) continue;  // ждем нужного входного патерна
        for(int k=0; k<m_dimension; k++) data[k]=m_set[m_dimension*(ind)+k];
        int winningnode=BestMatchingNode(data); // находим индекс ближайщего узла
                
         // сохраняем координаты выбранных для трассировки входных патернов
        int x1,y1,x2,y2;
        m_node[winningnode].GetCoordinates(x1,y1,x2,y2);
        if(m_bHexCell) // если шестиугольники
      {
          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[winningnode].X();
        //y[idx]=(int)m_node[winningnode].Y();
        idx++;
        m_cnt--;        
        if(m_cnt==0) break;      // записали необходимое кол вх.патернов
  }
  // рисуем траекторию, узлы и надписи
   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];
         // узел
         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);
         // траектория
         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;
         // номер патерны (бара)  
         m_bmp[k].TypeText(x[j],yc,name[j], clrIndigo);
    }    
  }
}
 

В классе CSOM счетчик загруженных обучающих векторов m_nSet обнуляется только в конструкторе CSOM::CSOM().

В результате, в зацикленном режиме переобучения кол-во обучающих векторов  постоянно растет.

Лучше добавить строчку m_nSet=0; в метод CSOM::LoadTrainData(...) . 

 
GSB:

Может кто все же доведет очень толковую библиотеку (спасибо и автору и Алексею Сергееву) до уровня практического прменения?!!


Что имеется ввиду? красивый SDK? или красивые картинки выдаваемые программой? кому что нужно, тот и делает. эти карты - не более чем средство для устаканивания данных которые нужно проанализировать и на их основании делать выводы
Причина обращения: