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

 
elibrarius:

Пропустил)

Еще момент, если взять например не 0, а например 0.5 - он даже при вашем методе будет "плавать" от выборки к выборке.

Поможет только жесткое ручное задание диапазона для каждого входа. Но не понятно, как его определить. Может например прогнать данные за год, и откинуть 1-5% выбросов. И в течении года работать по ним. Хотя через год они изменятся.


да, нужно взять максимально доступную выборку сначала и найти делитель (у меня он почему-то назван multiplier :)

а если в новой выборке вдруг будет значение больше.. ну что придется делить уже на него. Но такое редко происходит если брать приращения с небольшим лагом, например close[0]/close[10].. а при close[0]/close[100] уже может быть чаще.. но мне кажется там уже в порядке исключения, тем более если периодически переобучать НС

про 0.5 не успеваю подумать, ухожу в гости.. :)

 

Использовать надо только предикторы, которые ИМЕЮТ ОТНОШЕНИЕ к целевой переменной. При этом "линейно" или "нелинейно" не имеет значения, не имеют отношения к очень точно сформулированному "имеют отношение".

Чтобы уточнить значение "имеют отношение" повторно приведу пример, который приводил несколько раз на этой ветке.


Целевая: население, имеет два класса: мужчины и женщины

Берем один предиктор: одежда. Имеет два значения: штаны и юбки.

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

Если мы эту систему применим на шотландцах, то возникнет пересечение по "юбкам", которые носят оба пола. Это пересечение даст верхнюю границу ошибки, которую преодолеть невозможно.


При этом обязательна проверка модели на двух разных по времени файлах: до 1 января и после первого января.

На первом файле: учим, тестируем и "вне-выборки". Если все три величины ошибки примерно равны, то прогоняем на втором файле - ошибка не должна сильно отличаться (не более 10%) от первых трех.

ЭТА МОДЕЛЬ НЕ ПЕРЕОБУЧЕНА. 


ПС.

Если включить предикторы, которые не имеют отношения к целевой, "кофейную гущу", то ошибку можно будет радикально уменьшить. Я, например, не рассматриваю модели, в которых ошибка менее 10%. Но всегда одно и тоже: на втором файле ошибка кратно отличается от ошибок на первом файле. Модель ПЕРЕОБУЧЕНА, она нахватала неких значений из шума, пытаясь уменьшить ошибку классификации, а в будущем таких значений скорее всего не будет, или будет, или через раз.... Эта модель не обладает предсказательной способностью.

 
СанСаныч Фоменко:

На первом файле: учим, тестируем и "вне-выборки". Если все три величины ошибки примерно равны, то прогоняем на втором файле - ошибка не должна сильно отличаться (не более 10%) от первых трех.

Какая разница между

1) участком из "вне выборки" из первого файла + другой файл "вне выборки"

2) и одним "вне выборки" но большим по размеру участком, включающим и второй файл?

Мне кажется результат будет одинаков. Если по первому варианту во втором файле все плохо, то и во втором варианте те же данные все испортят.

 

Ну вообще как правило при тренировки НС есть три участка. Тренировочный, Тестовый и Контрольный. Если на контрольном участке ошибка в пределах нормы то считаем что модель не переобучена. ИМХО.

 
Mihail Marchukajtes:

Ну вообще как правило при тренировки НС есть три участка. Тренировочный, Тестовый и Контрольный. Если на контрольном участке ошибка в пределах нормы то считаем что модель не переобучена. ИМХО.

Согласен, но почему СанСаныч 4-й участок вводит (второй конторльный), - не понятно. Можно ведь и один расширить, чтобы он оба включал в себя.
 
elibrarius:

Какая разница между

1) участком из "вне выборки" из первого файла + другой файл "вне выборки"

2) и одним "вне выборки" но большим по размеру участком, включающим и второй файл?

Мне кажется результат будет одинаков. Если по первому варианту во втором файле все плохо, то и во втором варианте те же данные все испортят.


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

А вот второй  - это имитация торговли: мы всегда торгует ПОСЛЕ участка обучения. Вопреки Вашему мнению очень часто результаты на втором файле очень сильно отличаются от результатов на первом - модель переобучена и не годится для использования.

 
Grigoriy Chaunin:

https://github.com/RandomKori/Py36MT5 Вот исходники библиотеки Питон для МТ5. Только вот проблема с массивами. Передача массива или его получение работает неправильно. Код DLL отладил в Visual Studio. В нем все работает. Вопрос в том что это может быть баг терминала. Как работать с библиотекой не писал. Смысла нет. Без массивов это никому не нужно. Хотя может быть напортачил в файле pythom.mqh Помогите разобраться. Всем польза будет.

Хорошая идея и полезная MT5 библиотека, только синхронизироваться с файлом питоновского скрипта, ИМХО довольно хлопотная задача.

Думаю лучше напрямую синхронизировать MQL переменные c переменными питона через локальный словарь и выполнять фрагменты Python кода прямо из строковых констант в коде советника.

Вот я пробовал тест, компилирую bcc64 с командной строки - прекрасно работает в питоне 3.6:

#include <stdio.h>
#include "python.h"
#pragma link "python36.lib"

int main(int argc, char **argv)
{
  Py_Initialize();
  PyObject* main = PyImport_AddModule("__main__");
  PyObject* global = PyModule_GetDict(main);
  PyObject* local = PyDict_New();

  int a, b = 2, c = 2; // synchronize python variables and calc a = b * c
  PyDict_SetItemString(local, "b", PyLong_FromLong(b));
  PyDict_SetItemString(local, "c", PyLong_FromLong(c));
  a = PyLong_AsLong(PyRun_String("b * c", Py_eval_input, global, local));
  printf("%d*%d=%d\n",b,c,a);

  PyRun_SimpleString("import sys"); // import python sys and read version
  printf(_PyUnicode_AsString(PyRun_String("sys.version", Py_eval_input, global, local)));

  Py_Finalize();
  return 0;
}

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

Кстати я писал об этой, новой нейросети тут в ветке, по предварительным результатам тестов на примерах c Ирисами Фишера она обучается на три порядка быстрее чем DNN в TensorFlow, при равных тестовых результатах.

 
СанСаныч Фоменко:

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

А вот второй  - это имитация торговли: мы всегда торгует ПОСЛЕ участка обучения. Вопреки Вашему мнению очень часто результаты на втором файле очень сильно отличаются от результатов на первом - модель переобучена и не годится для использования.

Я первые 3 части всегда последовательно ставлю. И если 3-й плохой, то модель переобучена.
 

Не забывайте что любое резервирование данных ведёт к отсрочки вступления модели в бой. Что на  прямую влияет на качество полученных сигналов после....

Лично для себя выбрал следующую методику. Модель полученныю на сигналах Buy, я переворачиваю и тестирую  на этом же самом учатске рынка, но для сигналов Sell. Тем самым не теряю драгоценное время и адекватно оцениваю возможности модели. ИМХО

 
СанСаныч Фоменко:

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

А вот второй  - это имитация торговли: мы всегда торгует ПОСЛЕ участка обучения. Вопреки Вашему мнению очень часто результаты на втором файле очень сильно отличаются от результатов на первом - модель переобучена и не годится для использования.


Для систем прогнозирования, порядок поступления данных важен. Для классификации - НЕТ.

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