Нейросети,как их освоить с чего начать? - страница 16

 
Neutron >>:

Можно, конечно!

Только она обучится вашему правилу за 10 уроков, а потом что?

Этот алгоритм взят как простой пример для создания нейросети, ведь учиться надо с простого....

если диапазон свечи больше среднего диапазона пяти последних свечей на определённый коэффицент (если свеча восходящая - покупка, если свеча нисходящая - продажа.)


Исходя из данного алгоритма входными параметрами будут крэфиценты привышения среднего диапазона последних пяти баров?


 

Вы дайте определения тем терминам, которые используте. Что такое "диапазон свечи"? Сеть должна обучаться на примерах. Что считаь положительным и отрицательным примером для вашей сети (с вашей точки зрения)? Что такое "коэффициент превышения"?

 
Neutron >>:

Вы дайте определения тем терминам, которые используте. Что такое "диапазон свечи"? Сеть должна обучаться на примерах. Что считаь положительным и отрицательным примером для вашей сети (с вашей точки зрения)? Что такое "коэффициент превышения"?

диапазон последнего сформировавшегося бара= High[1]-Low[1];

double сдппб // средний диапазон пяти последних баров

for(i=1;i<5;i++){

сдппб=сдппб+(High[1]-Low[1])/5;

}

условие для покупки 

if(диапазон последнего сформировавшегося бара>средний диапазон пяти последних баров*коэффицент && Close[1]>Open[1]){

покупаем по рынку

}

Подскажите как проще определить положительный отрицательный пример для сети, возможно результат сделки?

 

диапазон последнего сформировавшегося бара>средний диапазон пяти последних баров*коэффицент

Это условие и будет определять алгоритм тренировки сети и её архитектуру. Положительным исходом для НС будем считать совпадение предсказанного движения котира, который начинается с открытия позиции и заканчивается её закрытием при поступлении сигнала на переворот позиции. Отрициательным - соответственно - не совпадение. Итогом тринеровки сети будет нахождение оптимального (с её точки зрения) значения коэффициента. Сеть будет иметь 7-мь входов. На первый мы подадим постоянное смещение (увеличивает вычислительную мощность сети и ускоряет обучение), на второй подадим диапазон 1-го бара, на третий - второго и т.д. до пятого бара, а на седьмой (последний вход НС) подадим диапазон нулегого бара (текущий), что бы она с ним сравнивала.

Сеть выберем простейшую - линейный персептрон. В процессе обучения, он присвоит каждому бару оптимальные коэффициенты (не один на все пять, как у вас, а по одному индивидуальному (w0, w1...w6) на каждый бар) и, если это вожможно в принципе, НС будет предсказывать вам покупку или продажу почти без ошибок!

 
Neutron >>:

Это условие и будет определять алгоритм тренировки сети и её архитектуру. Положительным исходом для НС будем считать совпадение предсказанного движения котира, который начинается с открытия позиции и заканчивается её закрытием при поступлении сигнала на переворот позиции. Отрициательным - соответственно - не совпадение. Итогом тринеровки сети будет нахождение оптимального (с её точки зрения) значения коэффициента. Сеть будет иметь 7-мь входов. На первый мы подадим постоянное смещение (увеличивает вычислительную мощность сети и ускоряет обучение), на второй подадим диапазон 1-го бара, на третий - второго и т.д. до пятого бара, а на седьмой (последний вход НС) подадим диапазон нулегого бара (текущий), что бы она с ним сравнивала.

Сеть выберем простейшую - линейный персептрон. В процессе обучения, он присвоит каждому бару оптимальные коэффициенты (не один на все пять, как у вас, а по одному индивидуальному (w0, w1...w6) на каждый бар) и, если это вожможно в принципе, НС будет предсказывать вам покупку или продажу почти без ошибок!

Огромное спасибо, Neutron.


Если я правильно понл, то входы обозначены как Wn, если это так, то следующая моя задача описать кодом каждый вход, например:

int w0=постоянное смещение (вот с этим не совсем понятно);  
double w1=High[1]-Low[1];
double w2=High[1]-Low[2];
double w3=High[1]-Low[3];
double w4=High[1]-Low[4];
double w5=High[1]-Low[5];
double w6=High[1]-Low[0];


Всё ли правильно?

 

Всё правильно!

А что с постоянным входом не понятно? Мы должны предварительно нормализовать входные данные, эта процедура не обязательна, но желательна (помогает сети быстрее обучаться и повышает её предсказательную силу). В результате этой процедуры, всё многообразие входных сигналов (от -бесконечности, до +бесконечности), будет отображено в конечный интервал +/-1. В качестве постоянного смещения, мы на первый вход НС подадим +1 (для определённости). Выход будет выдавать сигнал Out>0 значит Bue и Out<0 значит Sell.

 
Neutron >>:

Всё правильно!

А что с постоянным входом не понятно? Мы должны предварительно нормализовать входные данные, эта процедура не обязательна, но желательна (помогает сети быстрее обучаться и повышает её предсказательную силу). В результате этой процедуры, всё многообразие входных сигналов (от -бесконечности, до +бесконечности), будет отображено в конечный интервал +/-1. В качестве постоянного смещения, мы на первый вход НС подадим +1 (для определённости).

int    w0=1; // это для того, чтобы все ниже описаные входы были проработаны на истории?
double w1=High[1]-Low[1];
double w2=High[1]-Low[2];
double w3=High[1]-Low[3];
double w4=High[1]-Low[4];
double w5=High[1]-Low[5];
double w6=High[1]-Low[0];
 
Andrey4-min писал(а) >>

Всё ли правильно?

Всё-таки не правильно.

В такой постановке, на входах НС будут только положительные по амплитуде сигналы и сеть не дополучит всей возможной информации на основании которой будет происходить анализ. Лучше, домножить ваши входные значения на цвет свечи: +1, если свеча росла, и -1 - если падала. И даже не на +/-1, а на само значение приращения: Close[i]-Open[i].

Получится так:

w1=(High[1]-Low[1])/Point*( Close[1]-Open[1])/Point;

w1=(High[2]-Low[2])/Point*( Close[2]-Open[2])/Point;

w1=(High[3]-Low[3])/Point*( Close[3]-Open[3])/Point;

Это пока без нормализации.

P.S. Я вот этого не понял: // это для того, чтобы все ниже описаные входы были проработаны на истории?

 
Neutron >>:

Всё-таки не правильно.

В такой постановке, на входах НС будут только положительные по амплитуде сигналы и сеть не дополучит всей возможной информации на основании которой будет происходить анализ. Лучше, домножить ваши входные значения на цвет свечи: +1, если свеча росла, и -1 - если падала. И даже не на +/-1, а на само значение приращения: Close[i]-Open[i].

Получится так:

w1=(High[1]-Low[1])/Point*( Close[1]-Open[1])/Point;

w1=(High[2]-Low[2])/Point*( Close[2]-Open[2])/Point;

w1=(High[3]-Low[3])/Point*( Close[3]-Open[3])/Point;

Это пока без нормализации.

P.S. Я вот этого не понял: // это для того, чтобы все ниже описаные входы были проработаны на истории?

У Вас в примере во всех трёх строчках стоит w1, так и должно быть?

P.S. Я вот этого не понял: // это для того, чтобы все ниже описаные входы были проработаны на истории?

я пытаюсь понять, какую функцию будет выполнять  w0, и предположил, что это какбы шаг в историю, ну как в циклах, если нет, объясните поподробнее...

 
Andrey4-min писал(а) >>

У Вас в примере во всех трёх строчках стоит w1, так и должно быть?

я пытаюсь понять, какую функцию будет выполнять w0, и предположил, что это какбы шаг в историю, ну как в циклах, если нет, объясните поподробнее...

Чтобы понять какую функцию будет выполнять w0 надо всетаки начинать с учебников, а не с наскока влезать в НС, ИМХО.

Причина обращения: