Обсуждение статьи "Практическое применение нейросетей в трейдинге. Python (Часть I)"

 

Опубликована статья Практическое применение нейросетей в трейдинге. Python (Часть I):

В данной статье мы поэтапно разберем вариант реализации торговой системы на основе программирования глубоких нейронных сетей на Python. Для этого мы используем библиотеку машинного обучения TensorFlow, разработанной компанией Google. А для описания нейронных сетей используем библиотеку Keras.

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

  • В данной разработке, для принятия решения, мы будем использовать по две НС для открытия позиций  в одном направлении
  • Исходя из предыдущего пункта, данные для обучения мы также разделим на два направления.
  • Как и в предыдущей системе, первая нейросеть у нас будет обучаться на построение индикаторов подобных стандартным техническим индикаторам. Такой вариант в предыдущей системе был обусловлен тем, что мы использовали самописанные индикаторы и нам не хотелось перегружать рабочий эксперт. На Python же это обусловлено тем, что от терминала мы можем получить только котировки, и тогда нам необходимо для подготовки данных для НС строить эти индикаторы в скрипте Python. Но научив нейронную сеть строить подобные индикаторы, мы обходим необходимость их дублировать в скрипте. 
  • Вторая нейросеть строит уже непосредственно сигнальный индикатор, на основе которого мы делаем стратегию торговли.
  • Обучать НС для часового графике пары EURUSD.
  • В результате для построения системы нам необходимо подготовить две НС для сделок на покупку и две на продажу. Всего в системе будет работать четыре нейронные сети.

Автор: Andrey Dibrov

 

квест какой то, а не статья

1.

в тексте статьи или в исходниках нет описания константы 10 000 (1 и 4 нуля) , поиском по статье используется 51 раз

было подозрение, что это количество знаков для EURUSD , но тогда почему тут 100 000 (1 и 5 нулей):

inB[15]=(iOpen(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*100000;
inB[16]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*100000;
inB[17]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000;
inB[18]=(iHigh(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i)))-iOpen(NULL,PERIOD_H1,i+1))*10000;
inB[19]=(iOpen(NULL,PERIOD_H1,i+1)-iLow(NULL,PERIOD_D1,iBarShift(NULL,PERIOD_D1,iTime(NULL,PERIOD_H1,i))))*10000;


откуда цифры 10000 и 100000? что они означают?


2.  эксперт PythonTestExpert

этот код вообще загадка:

void OnTick()
  {
   MqlDateTime stm;
   TimeToStruct(TimeCurrent(),stm);
   
   for(int i=0; i<=14; i++)
     {
      in[i]=in[i+5];
     }


подозреваю, что сдвигаем массив каждый тик, а начальные значения массива откуда берем? ... ниже вообще загадка заполняем этот массив с 15-го элемента до конца массива


3.

почему код индикаторов DibMin1-1.mq5 и  DibMax1-1.mq5 одинаковый на 99% разнесен в 2 индикатора, а не выполнен в одном индикаторе с 2-мя линиями (буферами)?



4. по Python тоже вопросы, сначала ни одного комментария к скрипту Python  , ни цели написания скрипта, но в конце статьи внезапно появилось описани0е, что же делал скрипт,  а то, что мы уже использовали данные этого скрипта при оптимизации эксперта... ну возвращайся читатель и ищи где же были данные этого скрипта, может быть это:

В процессе работы над статьей решил также привести пример другого подхода к обучающим целям НС.

?




Я бы не писал, что мне статья не понравилась ( или статья абсурдна ?), но название статьи "Практическое применение нейросетей в трейдинге. Python" очень громкое, и жаль, что теперь поисковики будут выводить эту статью в первых результатах поиска

 
Igor Makanu:

квест какой то, а не статья

1.

в тексте статьи или в исходниках нет описания константы 10 000 (1 и 4 нуля) , поиском по статье используется 51 раз

было подозрение, что это количество знаков для EURUSD , но тогда почему тут 100 000 (1 и 5 нулей):


откуда цифры 10000 и 100000? что они означают?


2.  эксперт PythonTestExpert

этот код вообще загадка:


подозреваю, что сдвигаем массив каждый тик, а начальные значения массива откуда берем? ... ниже вообще загадка заполняем этот массив с 15-го элемента до конца массива


3.

почему код индикаторов DibMin1-1.mq5 и  DibMax1-1.mq5 одинаковый на 99% разнесен в 2 индикатора, а не выполнен в одном индикаторе с 2-мя линиями (буферами)?



4. по Python тоже вопросы, сначала ни одного комментария к скрипту Python  , ни цели написания скрипта, но в конце статьи внезапно появилось описани0е, что же делал скрипт,  а то, что мы уже использовали данные этого скрипта при оптимизации эксперта... ну возвращайся читатель и ищи где же были данные этого скрипта, может быть это:

В процессе работы над статьей решил также привести пример другого подхода к обучающим целям НС.

?




Я бы не писал, что мне статья не понравилась ( или статья абсурдна ?), но название статьи "Практическое применение нейросетей в трейдинге. Python" очень громкое, и жаль, что теперь поисковики будут выводить эту статью в первых результатах поиска

Спасибо за хорошие вопросы!!!

1. 10 000 или 100 000? " * " или " / " ?  и т. д. Мы формируем входные данные для НС. (Нейронной сети которая находится в моей черепной коробке визуально понравились  те данные, которые были выведены в файл. Может быть они так же понравятся нейронной сети, которая находится в другой коробке. Шутка.) С НС надо экспериментировать, как с гиперпараметрами самой нейросети, архитектурой - так и входными данными. Здесь скорее всего не "дважды два - четыре", а "дважды два -?"

2. По вопросу PythonTestExpert . Я упустил, тот момент, что необходимо было пояснить - эксперт мы запускаем в тестере стратегий на H1 по ценам открытия. И сдвиг кластера индикаторов производится на каждом баре. В другом случае, я использую сдвиг индикаторов на 00 часов - раз в сутки. Здесь тоже необходимо экспериментировать.  

3. Два индикатора - чисто для удобства и это частный случай. Зачастую стратегии строятся на торгах в каком либо одном направлении. И, поэтому, для выборки данных удобнее пользоваться одной линией индикатора, которая показывает либо максимальный экстремум дня, либо минимальный. Здесь тоже экспериментировать со сдвигом - "вперед-назад".

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

5. И в качестве шутки по вопросу абсурда - не абсурд ли смотреть в ящик на набор формул, которые обозвали техническими индикаторами и пытаться заработать денег!!!))).

 
Andrey Dibrov:

5. И в качестве шутки по вопросу абсурда - не абсурд ли смотреть в ящик на набор формул, которые обозвали техническими индикаторами и пытаться заработать денег!!!))).

абсурдна статья по причине того, что невозможно вот сесть и прочитать материал, нет ни последовательного изложения, нет описания методики, нет цели исследования - я не веду речь от простого к сложному, нет просто логики в следовании излагаемого материала

вот это

В процессе работы над статьей решил также привести пример другого подхода к обучающим целям НС. Для этого внесем некоторые изменения в скрипт PythonIndicators.

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

а в таком изложении это выглядит как, а не попробовать нам методом "научного тыка"  покрутить еще что-нибудь - "я крутил и точно знаю, что получим:"

Здесь логика такова, что мы обучаем НС на достигнутых целях, а не на событиях, которые должны только произойти. Что, согласитесь, логичнее. Ведь оценивать прошедшие события легче, чем давать прогнозы.

В результате получим вот такой индикатор.


про 

Вот некоторые результаты оптимизации.

вообще не хочу комментировать - набор вырезок из Paint-а ? почему на скринах разные даты, разные размеры? где значения-параметров оптимизации?

что это? - это гугл "поиск по картинке" ? это выглядит у Вас так:


 
Igor Makanu:

абсурдна статья по причине того, что невозможно вот сесть и прочитать материал, нет ни последовательного изложения, нет описания методики, нет цели исследования - я не веду речь от простого к сложному, нет просто логики в следовании излагаемого материала

вот это

В процессе работы над статьей решил также привести пример другого подхода к обучающим целям НС. Для этого внесем некоторые изменения в скрипт PythonIndicators.

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

а в таком изложении это выглядит как, а не попробовать нам методом "научного тыка"  покрутить еще что-нибудь - "я крутил и точно знаю, что получим:"


про 

вообще не хочу комментировать - набор вырезок из Paint-а ? почему на скринах разные даты, разные размеры? где значения-параметров оптимизации?

что это? - это гугл "поиск по картинке" ? это выглядит у Вас так:


 В принципе я со всем согласен - доработаю статью с учетом замечаний. Спасибо...

 
Andrey Dibrov:

 В принципе я со всем согласен - доработаю статью с учетом замечаний. Спасибо...

отлично!

материал востребован, по крайней мере меня очень интересует это направление

ЗЫ: да вот еще к предыдущему моему сообщению - все результаты исследований в статье должны иметь эффект воспроизводимости, мало того, что это подтверждает достоверность статьи, так и к Вам отпадут вопросы, откуда Вы это взяли ( Ваши скриншоты оптимизации), ну и скорее всего это будет полезно в качестве обучающего материала


с ув.

 
установили пакет MT5, но ни разу его не использовали. Можно убрать все индикаторы и торговать из питоновской программы, для лаконичности
 
Maxim Dmitrievsky:
установили пакет MT5, но ни разу его не использовали. Можно убрать все индикаторы и торговать из питоновской программы, для лаконичности

Да, мы индикаторы использовали для обучения НС в питоновской программе. А другая питоновская программа будет потом торговать используя, обученные НС...

 

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

5. И в качестве шутки по вопросу абсурда - не абсурд ли смотреть в ящик на набор формул, которые обозвали техническими индикаторами и пытаться заработать денег!!!))).

 "показать простоту практического применения нейронных сетей с помощью интеграции Python"  Вам не удалось. Ту процедуру которую Вы предлагаете нельзя назвать простой. А интеграции так вообще нет. 

"получение входных данных, обучение и тестирование" - это все можно и нужно выполнять в Python. пакет MetaTrader5 для этого собственно и написан. 

Без оптимизации гиперпараметров нейросети  и качественной подготовки входных данных ни о каком серьезном результате говорить не приходится. В Python есть все для выполнения этих архиважных и не простых этапов. В вашей статье этого нет.

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

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

Удачи

 
Vladimir Perervenko:

 "показать простоту практического применения нейронных сетей с помощью интеграции Python"  Вам не удалось. Ту процедуру которую Вы предлагаете нельзя назвать простой. А интеграции так вообще нет. 

"получение входных данных, обучение и тестирование" - это все можно и нужно выполнять в Python. пакет MetaTrader5 для этого собственно и написан. 

Без оптимизации гиперпараметров нейросети  и качественной подготовки входных данных ни о каком серьезном результате говорить не приходится. В Python есть все для выполнения этих архиважных и не простых этапов. В вашей статье этого нет.

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

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

Удачи

Если вы посмотрели ролик в конце статьи, то обратили внимание, что весь процесс получения данных, обучения НС(на тех гиперпараметрах) и построение результирующего индикатора занимает по времени до 2х минут. Не сложно и доступно для любого трейдера, а не только для "избранных".

По вопросу интеграции... Весь творческий процесс происходит на этапах описанных в данной статье, особенно на получении входных данных и выборках этих данных. Лично я использую для этого собственные индикаторы. И сейчас вас немного напрягу))) - на данном этапе развития нейронных сетей гиперпараметры для анализа чистого временного ряда особого значения не имеют. В основном НС сейчас "заточены" под робототехнику(в широком понимании). Для классификации. То есть они работают отлично на законченных образах. Но если мы обучим НС на кошечках и собачках, а покажем ей только ухо - то, утрированно, можем получить ответ, что это пионер в пилотке. А, в нашем деле законченные образы есть только в прошлом, а в настоящем их нет... Поэтому так важен данный этап подготовки к обучению НС. А интеграция... - это уже чисто технический процесс. Python его значительно упрощает и переводит в плоскость практического применения в трейдинге. 

В машинном обучении развивается целое направление - автоматизация машинного обучения. Там да, собрал данные, передал программе и она сама определит способы и методы препроцессинга, подберет модель или модели, которые для этих данных позволяют получить наилучшие результаты, оптимизирует гиперпараметры и выдаст готовый результат для использования.
Опять таки это подходит для классификации законченных образов. Где качество обучения можно определять в процессе обучения....  Нам же надо все время возвращаться к тестированию, оптимизации в MT5 и т.д. И вот здесь интегрировать значительно сложнее, но как перспектива для дальнейшей работы - да...
В статье показана неверная последовательность этапов создания и использования нейросети - это главный недостаток по моему мнению. То, что не используется интеграция в полном объеме - печально, но не смертельно. А с названием статьи конечно нужно быть скромней. 
Какова верная последовательность???
 

После запуска двух Скриптов - PythonIndicators .mq5 , PythonPrices.mq5 создаются пустые .csv файлы - в чем может быть причина?

Спасибо

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