Есть ли закономерность в хаосе? Попробуем поискать! Машинное обучение на примере конкретной выборки. - страница 5

 
elibrarius #:
Нужен точный фин. результат от ошибок. Без них линия баланса недостоверна.
Фин. рез. если выберем 0 (можно не включать, всегда будет 0), если 1, если -1. Всегда, даже если размечаете, как 0 класс не торговать. Модель будет ошибаться и надо знать цену ошибки.

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

 
Aleksey Vyazmikin #:

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

Я про 0 класс написал, который будет иногда прогнозироваться 1 или -1. Про него вы писали, что фин. результат неизвестен.

 
Aleksey Vyazmikin #:

Направление входа определяет не модель

Если не модель определяет, то незачем ее этому учить.

 
elibrarius #:

Я про 0 класс написал, который будет иногда прогнозироваться 1 или -1. Про него вы писали, что фин. результат неизвестен.

Просто не надо отказываться от направления.

Если класс нулевой и направление +1, а классифицировалось как 1, то будет убыток - берем любой столбец с фин результатом по модулю.

Если класс нулевой и направление +1, а классифицировалось как -1, то входа не будет, убытка не будет.

Если класс нулевой и направление -1, а классифицировалось как -1, то будет убыток - берем любой столбец с фин результатом по модулю.

Если класс нулевой и направление -1, а классифицировалось как 1, то входа не будет, убытка не будет.

elibrarius #:

Если не модель определяет, то незачем ее этому учить.

Тут логика простая - ряд предикторов, или даже их значений, больше тяготеют к конкретному направлению ценового движения. Когда мы учим всё вместе классом 1 и 0, то мы отбираем по сути предикторы, определяюшие сильное движение в любом из направлений - а таких обычно не много, но если каждому направлению дать свой класс, то исчезнут некоторые статистические противоречия и модель уже может включать показатели одного предиктора на разных концах его значения, к примеру RSI 70/30 могут легко разделится.

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

 
Aleksey Vyazmikin #:

Если класс нулевой и направление +1, а классифицировалось как -1, то входа не будет, убытка не будет.

У учителя может и не будет входа. А модель возьмет и ошибется и войдет в рынок. Модель не знает про 0 и +1 от учителя, она получила -1  прогноза и будет торговать

 
elibrarius #:

У учителя может и не будет входа. А модель возьмет и ошибется и войдет в рынок. Или у вас там условный оператор стоит, который запрещает модели торговать как она предсказала? Боюсь у меня для построения баланса такой оператор некуда воткнуть.

В настоящий момент нет оператора, но данные для него есть и они пишутся в столбец "Target_P" - поэтому работать все может вполне успешно.

Вот пример логики кода набросал для построения баланса

int Prognoz=0;//Сюда запишем прогноз
int Target_100[];//Фактическая целевая
int Target_P[];//Тип сделки - покупка/продажа
double Target_100_Buy[];//Финансовый результат от покупки
double Target_100_Sell[];//Финансовый результат от продажи
double Fin_Rez[];//Финансовый результат
int Strok_Total=0;//Всего строк
int Index_Fin_Rez=1;//Считаем число классифицированных 1 и -1 - это размер массива баланса и индекс массива Fin_Rez
ArrayResize(Target_100,Strok_Total);
ArrayResize(Target_P,Strok_Total);
ArrayResize(Target_100_Buy,Strok_Total);
ArrayResize(Target_100_Sell,Strok_Total);
ArrayResize(Fin_Rez,Strok_Total);
ArrayInitialize(Fin_Rez,0);
/*
Прочли данные файла в массивы - не знаю как реализовано у Вас
*/
for(int i=0; i<Strok_Total; i++)
{
/*
Сделали прогноз
*/
   if(Prognoz==-1 && Target_P[i]==-1)
   {
      Fin_Rez[Index_Fin_Rez]=Fin_Rez[Index_Fin_Rez-1]+Target_100_Sell[i];
      Index_Fin_Rez++;
   }
   if(Prognoz==1 && Target_P[i]==1)
   {
      Fin_Rez[Index_Fin_Rez]=Fin_Rez[Index_Fin_Rez-1]+Target_100_Buy[i];
      Index_Fin_Rez++;
   }
}
ArrayResize(Fin_Rez,Index_Fin_Rez);
 
Aleksey Vyazmikin #:

В настоящий момент нет оператора, но данные для него есть и они пишутся в столбец "Target_P" - поэтому работать все может вполне успешно.

Вот пример логики кода набросал для построения баланса

Модель должна только по прогнозу торговать. Если вы результат считаете используя учителя - то это подглядывание в будущее. Торговля должна быть только по прогнозу. В реальном будущем Target_100_Sell  у вас не будет.

Модель не знает про 0 и +1 от учителя, она получила -1  прогноза и будет торговать. Нужно знать только фин результат от каждого варианта прогноза.

 
elibrarius #:

Модель должна только по прогнозу торговать. Если вы результат считаете используя учителя - то это подглядывание в будущее. Торговля должна быть только по прогнозу.

Модель не знает про 0 и +1 от учителя, она получила -1  прогноза и будет торговать. Нужно знать только фин результат от каждого варианта прогноза.

Ну при чем тут подглядывание. Целевую мы меняем для улучшения обучения, а не изменения логики советника. А логика в том, что направление для входа мы знаем и так, без модели, а модель должна сказать стоит входить или нет.

 
Aleksey Vyazmikin #:

а модель должна сказать стоит входить или нет.

Это мы уже проверили.

 
elibrarius #:

Это мы уже проверили.

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

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