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

 
Aleksey Nikolayev #:

должен быть float вектор, а не double

Если убрать ключ ONNX_NO_CONVERSION, то можно подавать на вход double вектор. На выходе всё равно должен быть float вектор.

 
А вот моя реализация советника на собственной нейронке
Файлы:
 

В справке по OnnxTypeInfo не хватает пояснений про поле dimensions[]. Было бы неплохо пояснить смысл этого массива хотя бы на примере проекта ONNX.Price.Prediction, где (версия МТ5 3621) он получается таким:

   OnnxTypeInfo otype;
   OnnxGetInputTypeInfo(handle, 0, otype);
   Print(otype.type == ONNX_TYPE_TENSOR);               // true
   Print(otype.element_type == ONNX_DATA_TYPE_FLOAT);   // true
   ArrayPrint(otype.dimensions);                        // -1 -1 4
   OnnxGetOutputTypeInfo(handle, 0, otype);
   Print(otype.type == ONNX_TYPE_TENSOR);               // true
   Print(otype.element_type == ONNX_DATA_TYPE_FLOAT);   // true  
   ArrayPrint(otype.dimensions);                        // -1 1
 
Bohdan Suvorov #:
А вот моя реализация советника на собственной нейронке

Интересно, а что это за библиотека?

#import "markettrader.dll"
  void AlertT(string &msg,int len);
 
Aleksey Nikolayev #:

В справке по OnnxTypeInfo не хватает пояснений про поле dimensions[]. Было бы неплохо пояснить смысл этого массива хотя бы на примере проекта ONNX.Price.Prediction, где (версия МТ5 3621) он получается таким:

В терминах питона это shape объекта.

 
Rashid Umarov #:

В терминах питона это shape объекта.

Тогда смущают отрицательные числа и то что длина массива на единичку больше числа измерений параметров.

К тому же shape для параметров задаётся в скрипте, а не берётся из свойств модели. Это какой-то баг или фича?

 
Aleksey Nikolayev #:

Тогда смущают отрицательные числа и то что длина массива на единичку больше числа измерений параметров.

К тому же shape для параметров задаётся в скрипте, а не берётся из свойств модели. Это какой-то баг или фича?

Да, забыл про отрицательные значения. Уточню.

 

Всем привет!

Удается торговать с некоторыми успехами в режиме ручной торговли, но хотелось бы все же автоматизировать процесс. Размышляя над этим, решил попробовать проконсультироваться по вопросу машинного обучения. Кто какие модели использует и с какими успехами? Сам же вижу проблему так:

Принципиальная идея, что нужно не направление тренда прогнозировать, а именно три точки: покупки, продажи и ожидания. То есть 1 (покупка), -1 (продажа), 0 (держать текущую сделку при ее наличии или ничего не делать при отсутствии сделок). Желательно работать с временными рядами на минутах, с чем пока не разобрался. Важно, чтобы учитывалась временной ряд за некоторое число прошлых баров, чтобы учитывались показатели на истории, иначе будет не ясна их динами. У меня их около 30, наверное, сложно в уме держать, но все же как то получается торговать руками.

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

То есть больше прибыль, когда размер ее максимален для каждой возможной сделки и минимальны убытки, высокая точность входа и выхода из сделки:

Прибыль = положительные сделки - убыточные сделки, при учете спреда, 

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

То есть по-моему мнению, должна быть кака-та такая модель, тогда и входы с выходами будут точнее.

 
Aleksey Nikolayev #:

Тогда смущают отрицательные числа и то что длина массива на единичку больше числа измерений параметров.

К тому же shape для параметров задаётся в скрипте, а не берётся из свойств модели. Это какой-то баг или фича?

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

 

Понятно, что пример использования модели ONNX  в MQL5 только иллюстрация этого и ничего больше. Но все же хочу обратить внимания на  очень важную ошибку. В машинном обучении первый этап -препроцессинг. Сюда входит много чего начиная с тривиальной нормализации и заканчивая уменьшением размерности и др инженерными трюками. Основное правило любых преобразований предикторов и целевой на этом этапе - все параметры преобразований(как то средняя, медиана, sd, mad и т.д)  вычисляются на обучающем (train) наборе. Тестовый набор и новые данные обрабатываются с использованием параметров полученных на train наборе.

Поэтому в примере нужно было вычислить mean/sd на train, передать эти данные в часть где делается предикт, обработать новые данные с этими параметрами. После этого сделать денормализацию и получить реальные значения прогнозной цены. Эта последовательность важна.

Понятно, что никто реальные цены не подает на вход модели, но это уже частности.

Удачи