Рыночный этикет или правила хорошего тона на минном поле - страница 24

 
Neutron писал(а) >>

Это истина! Вот только суеты не надо - суп отдельно.

Что касается бара, то я использую только цены открытия - никакого усреднения. И в планах, собираюсь поступить так, как свертует мудрый Привал - перейду на тики. Тут правда повозится придётся с режимом сохранания и сбора информации. Но если это того стОит, то от чего нет?

... и не изойдет ли тогда вся эта суета с НС к простому скальперу. Мне сложно верится, что на уровне тика можно уловить, кажем, часовую тенденцию. Хотя, конечно, смотря сколько тиков... но тут мы в вычислительных мощностях ограничены...

 
YDzh >>:

Да я и не суечусь :) Полезность тиков признают и в литературе... Запахло теорией хаоса... Насчет того, стоит ли... Стоит ли? И где Привал это советует?

Посмотрите тут.

 
YDzh >>:

... и не изойдет ли тогда вся эта суета с НС к простому скальперу. Мне сложно верится, что на уровне тика можно уловить, кажем, часовую тенденцию. Хотя, конечно, смотря сколько тиков... но тут мы в вычислительных мощностях ограничены...

Ну, самолеты же полетели... однажды. А сколько было скепсиса...

 
YDzh писал(а) >>

... и не изойдет ли тогда вся эта суета с НС к простому скальперу. Мне сложно верится, что на уровне тика можно уловить, кажем, часовую тенденцию. Хотя, конечно, смотря сколько тиков... но тут мы в вычислительных мощностях ограничены...

Тут как подойти... Нафига больше чем на 5-10 минут назад тики смотреть, там для анализа и баров достаточно, а вот тики последних минутных баров можно запоминать и обсчитывать. И таких огромных мощностей не потребуется.

 
FION >>:

Тут как подойти... Нафига больше чем на 5-10 минут назад тики смотреть, там для анализа и баров достаточно, а вот тики последних минутных баров можно запоминать и обсчитывать. И таких огромных мощностей не потребуется.

Я вот давно испытываю чувство неудовлетворенности, от форматов представления данных в МТ4. Таймфреймы - прямо таки первое, что бросилось в глаза с первых дней присутствия на рынке. Т.е. глядя на имеющиеся в МТ4 ФПД, быстро понимаешь, что сие неспроста! Продумано для удобстФа, так сказать... -:)

Поэтому, как только я разберусь с сеткой, таймфреймы пойдут вслед за индюками - ф топку. Фактически, от этого терминала для работы нужны только котировки и торговый интерфейс. Остальное можно смело, без вреда для депозита, выбрасывать.

 
paralocus писал(а) >>

Я вот давно испытываю чувство неудовлетворенности, от форматов представления данных в МТ4. Таймфреймы - прямо таки первое, что бросилось в глаза с первых дней присутствия на рынке. Т.е. глядя на имеющиеся в МТ4 ФПД, быстро понимаешь, что сие неспроста! Продумано для удобстФа, так сказать... -:)

Поэтому, как только я разберусь с сеткой, таймфреймы пойдут вслед за индюками - ф топку. Фактически, от этого терминала для работы нужны только котировки и торговый интерфейс. Остальное можно смело, без вреда для депозита, выбрасывать.

Так не мучайся, возьми готовую сетку - их полно написано, на java, например... Зачем на MQL4 мозги сушить и велосипед изобретать...

 
YDzh >>:

Так не мучайся, возьми готовую сетку - их полно написано, на java, например... Зачем на MQL4 мозги сушить и велосипед изобретать...

Затем, чтобы знать.

 
YDzh писал(а) >>

Так не мучайся, возьми готовую сетку - их полно написано, на java, например... Зачем на MQL4 мозги сушить и велосипед изобретать...

Ну, ты пошутил! - Чужие ляпы разбирать. Да и у меня алгоритм по-оптимальнее будет 9заточен под конкретную задачу).

paralocus писал(а) >>

Так, кажись до коррекции весов всё!

for(int i = cikl; i >= 0; i--)
{
out = OUT2(i);---------------------------------------------------// Получаем вых. сигнал сетки
test = (Close[i]-Close[i+1])/Close[i+1];--------------------------// Получаем n+1-вый отсчет

d_2_out = test - out;---------------------------------------------// Ошибка на выходе сетки
d_2_in = d_2_out * (1 - out*out);--------------------------------// Ошибка на входе выходного нейрона

Correction2[0] += d_2_in * D2[0];---------------------------// Суммируем микрокоррекции
SquareCorrection2[0] += Correction2[0] * Correction2[0];----------// по каждому весу входящему в вых. нейрон
Correction2[1] += d_2_in * D2[1];---------------------------// и суммируем квадраты оных микрокоррекций
SquareCorrection2[1] += Correction2[1] * Correction2[1];
Correction2[2] += d_2_in * D2[2];
SquareCorrection2[2] += Correction2[2] * Correction2[2];

d_11_in = d_2_in * (1 - D2[1]*D2[1]);-----------------------------// Считаем ошибку на входах нейронов
d_12_in = d_2_in * (1 - D2[2]*D2[2]);-----------------------------// скрытого слоя

for (int k = 0; k < 17; k++)
{---------------------------------------------------------------// Сууммируем микрокоррекции для входов
Correction11[k] += d_11_in * D1[k];----------------------// первого нейрона
SquareCorrection11[k] += Correction11[k] * Correction11[k];
}

for (k = 0; k < 17; k++)
{---------------------------------------------------------------// Суммируем микрокоррекции для входов
Correction12[k] += d_12_in * D1[k];----------------------// второго нейрона
SquareCorrection12[k] += Correction12[k] * Correction12[k];
}
}
paralocus, теперь извлекай корень квадратный из суммы квадратов по каждому весу и дели на эту норму каждую суммарную коррекцию веса. Вот её-то и добавляй к каждому весу! Это одна эпоха. Так нужно повторить столько раз, сколько эпох обучения намечено. Постепенно снижая множетель вклада очередной эпохи до нуля к концу обучения.
 

Господа, расскажите, как боретесь с залетаниями в не глубокие локальные минимумы и с кривыми начальными весами. Я так понимаю, в начале они никак не отражаются на обучении, но в последствии они начинают влиять очень сильно на его результат.

 
Neutron >>:
... теперь извлекай корень квадратный из суммы квадратов по каждому весу и дели на эту норму каждую суммарную коррекцию веса. Вот её-то и добавляй к каждому весу! Это одна эпоха. Так нужно повторить столько раз, сколько эпох обучения намечено. Постепенно снижая множетель вклада очередной эпохи до нуля к концу обучения.

Сделано:

for(int q = 1; q <= 1000; q++)
  {
// ----------------------------------------- ЭПОХА ---------------------------------------------------  
   for(int i = cikl; i >= 0; i--)
     {
       out  = OUT2(i);                                                   // Получаем вых. сигнал сетки
       test = (Close[i]-Close[i+1])/Close[i+1];                          // Получаем n+1-вый отсчет
       
       d_2_out = test - out;                                             // Ошибка на выходе сетки         
       d_2_in  = d_2_out * (1 - out*out);                                // Ошибка на входе выходного нейрона
       
       Correction2[0]       += d_2_in * D2[0];                           // Суммируем микрокоррекции
       SquareCorrection2[0] += Correction2[0] * Correction2[0];          // по каждому весу входящему в вых. нейрон
       Correction2[1]       += d_2_in * D2[1];                           // и суммируем квадраты оных микрокоррекций
       SquareCorrection2[1] += Correction2[1] * Correction2[1];     
       Correction2[2]       += d_2_in * D2[2];
       SquareCorrection2[2] += Correction2[2] * Correction2[2];   
       
       d_11_in = d_2_in * (1 - D2[1]*D2[1]);                             // Считаем ошибку на входах нейронов
       d_12_in = d_2_in * (1 - D2[2]*D2[2]);                             // скрытого слоя
       
       for (int k = 0; k < 17; k++)
         {                                                               // Сууммируем микрокоррекции для входов
          Correction11[k]       += d_11_in * D1[k];                      // первого нейрона
          SquareCorrection11[k] += Correction11[k] * Correction11[k];  
         }                                    
         
       for (k = 0; k < 17; k++)
         {                                                               // Суммируем микрокоррекции для входов
          Correction12[k]       += d_12_in * D1[k];                      // второго нейрона
          SquareCorrection12[k] += Correction12[k] * Correction12[k];
         }   
     }
// ------------------------------------- КОНЕЦ ЭПОХИ --------------------------------------------------

// ----------------------------------- КОРРЕКЦИЯ ВЕСОВ ------------------------------------------------
         for(k = 0; k < 3; k++)
             W2[k] += Correction2[k]/MathSqrt(SquareCorrection2[k]);  

         for(k = 0; k < 17; k++ )
           {
             W1[0,k] += Correction11[k]/MathSqrt(SquareCorrection11[k]);
             W1[1,k] += Correction12[k]/MathSqrt(SquareCorrection12[k]);
           }        

   }                                 


Немного не понял насчет того, как снижать множитель вклада очередной эпохи.... то-то у меня к концу обучения веса выходного слоя очень маленькими становятся, а веса скрытого - наоборот большие.

Alert: W2 [0] = -0.0414 W2 [1] = 0.0188 W2 [2] = -0.0539

Alert: W1[1,0]=-27.0731 W1[1,1]=-30.2069 W1[1,2]=37.6292 W1[1,3]=30.4359 W1[1,4]=-22.7556 W1[1,5]=-37.5899