Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 1906

 
Maxim Dmitrievsky:

короче понятно, оптимизатор ты еще тот.. вообще не пойму че пишешь ))

Ну смотри ВТРИТ оставил вс 24 входа. Если бы глубже капнул оптимизатор Решетова, то понял бы что он использует обёртку, когда в процессе обучения оценивается результат добавления или убирания входа. Я иду с верху вниз, то есть сначала подаю 11 входов, потом идёт функция ремув, которая удаляет по одному входу и оценивает результат, если улучшился знамо вход был гумно, потом идёт функция адд, это когда он добавляет один из не используемых входов и если это приводит к улучшения то оставляет его, и функция чендж, там на картинке выше они есть. Эта функция прсто один убирает один добавляет и смотрит результат. Уверен что ты Не полностью повторил логику работы Оптимизатора.

Я думаю всётаки начну юзать питон и обязательно всё повторю так как там было у Решетова плюс свои примочки....

 
Maxim Dmitrievsky:

мне надо 3 класса

Ну смотри, по сути это Тренарный оптимизатор. Тренд вверх, тренд вниз и флэт. Ответы оптимизатора Да, нет, незнаю. Выбири два класса вверх и вниз, а флетовый у тебя будет оценочный, посмотрим сколько он выдаст именнь не знаю. Ведь когда флэт то +- 10 пипсов могут быть и в этом случае если модель говорит незнаю и реально свеча была без тела, знамо работает....
 

Блин я только что ВТРИТ расспаралели... Красота :-)

Я очень внимательно обращаю именно на те сигналы когда модель говорит НЕ ЗНАЮ, как правило этот сигнал ведёт к закрытию всех позиций и не редко было такое что этот сигнал закрывался с прибылью чисто символической, в такие моменты я просто уверен в работоспособности модели и следующие ближайшие сигналы как правило заходят на УРА!!!!

 
Короче я тупо с АдаБустом дерево сравнил. Он, несомненно, лучше.. но парсить его в код я пока не умею
 
Maxim Dmitrievsky:
Короче я тупо с АдаБустом дерево сравнил. Он, несомненно, лучше.. но парсить его в код я пока не умею
Ты давай скинь файл последний как я прошу... я пока тут своё доделаю и покручу твой.
 
Mihail Marchukajtes:
Ты давай скинь файл последний как я прошу... я пока тут своё доделаю и покручу твой.

мне нжно 3 класса

 
Maxim Dmitrievsky:

мне нжно 3 класса

Максимка ты дурачёк??? Я же сказал что третий класс будет проверочным и при реальной работе он то же будет. Был у меня вариант допилить оптимизатор что бы третий класс натренировавлся на разну значения полиномов. Но его можно использовать как проверочный и на реальной работе он то же будет... Ни хочешь как хочешь....
 
Mihail Marchukajtes:
Максимка ты дурачёк??? Я же сказал что третий класс будет проверочным и при реальной работе он то же будет. Был у меня вариант допилить оптимизатор что бы третий класс натренировавлся на разну значения полиномов. Но его можно использовать как проверочный и на реальной работе он то же будет... Ни хочешь как хочешь....

йа умничко

 
Maxim Dmitrievsky:

ну-ка на-ка такой. Здесь всего 12 фиче, а не 24

у меня ошибки 

>>> print(train_score, " ", tst_score)

1.0   0.5454545454545454

Ликбез теме Максим чисто с барского плеча. Тот файл что ты скинул там всего 12 входов. Чтобы начинать с верху, нужно чтоб ходов было штук 20-24, тогда можно начинать с 11 входов (для моих мощностей это максимально) и идти в них уменьшая количество входов и перебирая их. Когда идёт оптимизация сверху вниз, то первые десять одноразовых прогонов я делаю так чтоб выбрать наилучшый прогон и с него стартануть уже нормально обучение. Если же входов мало то я как правило стартую с низу с 5 входов и стараюсь наростить количество входов при этом выбираю наихудшый вариант первых десяти пробегов, для того чтобы оттянуть старт в облась максимального перебора при обучении. В первом случае я люто экономлю ресурсы. Во втором случае выбрав худший вариант я стараюсь максимально перебрать все возможные варианты.

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

Давай так я тебе сейчас скину модель и файл тренировочный чтоб ты знал какой номер входа соответствует твоим обозначения, НО если ты не покажешь работу модели на ООС больше я тебе этого делать не буду. Любому человеку хочется узнать результат работы. Так то шайтан машина работает не бесплатно.


Собственно выжимка основного кода

vv0[q]=0;//12    вместо нулей подай значения своих входов
vv1[q]=0;//10
vv2[q]=0;//8
vv3[q]=0;//2
double Ress1=getBinaryClassificator1(vv0[q],vv1[q],vv2[q],vv3[q]);  //Вызов результатов полиномов 
double Ress11=getBinaryClassificator2(vv0[q],vv1[q],vv2[q],vv3[q]);

double getBinaryClassificator1(double v0, double v1, double v2, double v3) {
   double x0 = 2.0 * (v0 + 0.00352160000000379) / 0.0060209999999973896 - 1.0;
   double x1 = 2.0 * (v1 + 0.00321680000000524) / 0.006628599999996879 - 1.0;
   double x2 = 2.0 * (v2 + 0.00257640000000836) / 0.00577599999999978 - 1.0;
   double x3 = 2.0 * (v3 + 0.00197520000000417) / 0.00414859999999794 - 1.0;
   double decision = 0.6226912928759895 * x0
  -0.013192612137203167 * x0 * x1
  + 0.9920844327176781 * x2
  + 1.3060686015831136 * x0 * x2
  -3.5395778364116093 * x1 * x2
  -1.1394019349164468 * x3
  + 2.5659630606860158 * x0 * x3
  + 0.5395778364116095 * x1 * x3
  + 0.31090589270008795 * sigmoid(x0)
  + 0.009674582233948988 * sigmoid(x1)
  -0.0839929639401935 * sigmoid(x0 + x1)
  + 0.012313104661389622 * sigmoid(x2)
  + 0.30474934036939316 * sigmoid(x0 + x2)
  -0.5958663148636764 * sigmoid(x1 + x2)
  + 0.002638522427440633 * sigmoid(x0 + x1 + x2)
  -0.05013192612137203 * sigmoid(x3)
  + 0.014951627088830254 * sigmoid(x0 + x3)
  -0.13412489006156553 * sigmoid(x1 + x3)
  -0.006596306068601583 * sigmoid(x0 + x1 + x3)
  + 0.04397537379067722 * sigmoid(x2 + x3)
  + 0.1363236587510994 * sigmoid(x0 + x2 + x3)
  + 0.6952506596306068 * sigmoid(x1 + x2 + x3)
  -0.29331574318381703 * sigmoid(x0 + x1 + x2 + x3)
  + 1.0738786279683377 * sigmoid(1.0 + x0)
  -1.073438874230431 * sigmoid(1.0 + x1)
  -0.4256816182937555 * sigmoid(1.0 + x0 + x1)
  + 1.0708003518029903 * sigmoid(1.0 + x2)
  + 0.9656992084432717 * sigmoid(1.0 + x1 + x2)
  -3.1314863676341247 * sigmoid(1.0 + x3)
  -0.8500439753737907 * sigmoid(1.0 + x0 + x3)
  + 1.0281442392260334 * sigmoid(1.0 + x1 + x3)
  + 0.8544415127528584 * sigmoid(1.0 + x0 + x1 + x3)
  -0.21328056288478453 * sigmoid(1.0 + x0 + x1 + x2 + x3);
   return decision;
}
double sigmoid(double x) {
   if (MathAbs(x) < 1.0) {
      return 2.0 * signum(x) - x;
   }
   return signum(x);
}
double getBinaryClassificator2(double v0, double v1, double v2, double v3) {
   double x0 = 2.0 * (v0 + 0.00518320000001116) / 0.00871940000000327 - 1.0;
   double x1 = 2.0 * (v1 + 0.00542880000001134) / 0.01145720000000306 - 1.0;
   double x2 = 2.0 * (v2 + 0.00578500000001125) / 0.00872540000000166 - 1.0;
   double x3 = 2.0 * (v3 + 0.00496500000001143) / 0.00698900000000191 - 1.0;
   double decision = -0.17965023847376788 * x0
  + 1.7416534181240064 * x1
  + 0.5389507154213037 * x0 * x1
  + 0.5023847376788553 * x2
  -0.16653418124006358 * x1 * x2
  -0.06836248012718601 * x3
  -0.8191573926868044 * x1 * x3
  -0.029809220985691574 * sigmoid(x0)
  -0.009141494435612083 * sigmoid(x1)
  + 0.00794912559618442 * sigmoid(x0 + x1)
  + 1.7150238473767885 * sigmoid(x2)
  -1.2686804451510334 * sigmoid(x0 + x2)
  + 0.051271860095389504 * sigmoid(x1 + x2)
  + 0.05405405405405406 * sigmoid(x0 + x1 + x2)
  -1.095389507154213 * sigmoid(x3)
  -0.2444356120826709 * sigmoid(x0 + x3)
  + 0.34737678855325915 * sigmoid(x1 + x3)
  + 0.9264705882352942 * sigmoid(x0 + x1 + x3)
  + 0.16176470588235295 * sigmoid(x2 + x3)
  -0.7682829888712241 * sigmoid(x0 + x2 + x3)
  -0.16335453100158984 * sigmoid(x1 + x2 + x3)
  + 0.7551669316375199 * sigmoid(x0 + x1 + x2 + x3)
  -2.048489666136725 * sigmoid(1.0 + x0)
  -0.31756756756756754 * sigmoid(1.0 + x1)
  -0.08982511923688394 * sigmoid(1.0 + x0 + x1)
  + 1.4666136724960255 * sigmoid(1.0 + x1 + x2);
   return decision;
}
double signum(double x) {
  if (x == 0.0) {
    return 0.0;
  }
  if (x > 0.0) {
    return 1.0;
  }
  return -1.0;
}

Из прикреплённого файла идентифицирую номера входов в соответствии со своей маркировкой. Жду результаты прогонов на ООС

Файлы:
Si_Splice_10.txt  102 kb
 

Ну и в добавок оценки модели.

В предикторах указан номер столба в файле

258 общее число векторов. Удалил класс 0 и оставил клас 2 переименовав его в ноль, так как по количеству с классом 1 они были сбалансированы, 19.60 это квадратичная ошибка, вернее разница между прямо линейной и квадратичной она должна стремится к нулю, 79.141 это Генеральная обобщающая способность, при стремлении к показателю 100 разница между ошибками снижается, 69.767 это спицифичность. Общее количество контрольного участка 75 при этом генеральная обобщающая способность 70. Ответ НЕ ЗНАЮ мы получили на 77 векторах общей выборки где на контрольном участке их было 17.

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

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