Español Português
preview
Моделирование рынка (Часть 14): Сокеты (VIII)

Моделирование рынка (Часть 14): Сокеты (VIII)

MetaTrader 5Примеры |
334 0
Daniel Jose
Daniel Jose

Введение

В предыдущей статье, "Моделирование рынка (Часть 13): Сокеты (VII)", мы показали, как создать простой Python-сервер, который будет продолжать выполнять код даже при отсутствии активности на сокете, за которым следит сервер. Интересным в этой реализации является то, что нет необходимости использовать какой-либо поток.

Тем не менее, ничто не мешает нам объединить увиденное в прошлой статье с тем, что увидели в предыдущей, так как в последней было показано, как сделать такой же сервер, но с использованием потока при подключении клиента. То, что оба метода работают, объясняется тем, что оба ориентированы на такое же наблюдение за сокетом, независимо от количества подключенных клиентов. Однако ни модель, использующая поток, ни модель, использующая функцию select, не подходят для нашей реализации.

Ни одна из вышеупомянутых. И дело не в том, что они неисправны или не работают, а в том, что они мешают Excel из-за того, как написан код. Такое вмешательство заставляет Excel и скрипт Python конкурировать за использование процессора, что делает Excel очень непрактичным.

Многие программисты могут предположить, что нам следует отказаться от использования Excel и перейти непосредственно на Python, используя некоторые пакеты, позволяющие Python создавать Excel-файл, чтобы потом проанализировать результаты. Но, как уже говорилось в предыдущей статье, хотя это решение и является самым простым для многих программистов, оно не понравится некоторым пользователям. И во всей этой истории пользователь всегда прав. Мы, как программисты, должны найти способ заставить всё работать. Если вам не удается добиться успеха в том, к чему вы стремитесь, это связано с тем, что вы ещё не обладаете необходимым уровнем знаний. Старайтесь учиться дальше и углубляться в принципах, на которых основаны ваши знания.

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


Назад к истокам

Многие из вас совсем недавно начали использовать Python. Другие, возможно, уже давно используют его. Однако, поскольку большинство программистов активно используют популярные пакеты, я думаю, немногие действительно знают, как и зачем использовать Python. Я не собираюсь объяснять это здесь, ведь это выходит за рамки данной серии статей. Идея этой серии заключается в том, чтобы показать, как разработать систему репликации/моделирования в MetaTrader 5. Однако для того, чтобы лучше использовать систему репликации/моделирования, необходимо задействовать некоторые ресурсы, поэтому нам пришлось сделать небольшой перерыв в её разработке, чтобы объяснить другие темы, которые, хотя на первый взгляд и не связаны между собой, на самом деле являются таковыми.

Хорошо. Для достижения нашей цели (запуска сервера внутри Excel для передачи информации между Excel и MetaTrader 5) мы можем использовать VBA. Однако создание такого сервера с помощью VBA довольно утомительно. Дело в том, что сервер будет полностью встроен в электронную таблицу, в которой он создан, но нам нужно, чтобы его можно было использовать в нескольких разных электронных таблицах. Причина этого рассматривается ниже. Но не думайте, что создание сервера в VBA - это нечто сложное. На самом деле это просто, хотя, как мы уже говорили, утомительно, поскольку нам придется постоянно повторять код.

Однако с помощью Python можно легко создать такой же сервер, как и на VBA, не говоря уже о возможности использования C/C++, как было показано в предыдущей статье. Несомненно, использование Python - самый простой способ добиться этого. Однако в предыдущих статьях мы показали, что использование простого программирования с помощью популярных пакетов нецелесообразно. Основная причина заключается в том, что после запуска сервера он конкурирует с Excel за использование процессора. Я даже показал, как использовать потоки, чтобы снизить уровень конкуренции. Однако, когда дело доходит до создания потоков в VBA, ситуация начинает становиться утомительной, так как необходимо повторять код каждый раз, когда создается новая электронная таблица.

Таким образом, решение состоит в том, чтобы реализовать большую часть кода на Python и использовать как можно меньше VBA. И да, мы можем это сделать и именно так сделаем. Но имейте в виду, что всё, что будет отображаться с этого момента, может быть довольно запутанным. Поэтому я вам рекомендую спокойно изучить данный вопрос. Не используйте приведенный здесь код в системе эксплуатации. Можно сделать это, если вы хотите, но необходимо помнить, что представленный код предназначен только для образовательных целей.


Давайте немного разберемся, что такое COM

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

COM расшифровывается как «Component Object Model». Он был создан компанией Microsoft в начале 1990-х годов для обеспечения взаимодействия между процессами. Это нечто очень похоже на сокеты, но с некоторыми преимуществами. Это позволило реализовать такую связь независимо от используемого языка, архитектуры или устройства. И всё это не требует от вас, как от разработчиков, понимания того, как реализовать внутренняя реализация, поскольку вам больше не придется об этом беспокоиться и вы будете использовать общий, четко определенный интерфейс.

Это основы работы с COM. Но почему это важно для нас на этом этапе развития? Причина в том, что с помощью данной технологии мы можем заставить Python и Excel работать в полной гармонии, без конфликтов и конкуренции за использование процессора в ходе обмена данными между ними.

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


Теперь мы начнем программировать на Python

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

Давайте сделаем так, чтобы наш первый код на Python использовал эту технологию COM. Для этого мы попросим скрипт на Python открыть Excel и поместить некоторую информацию в определенную ячейку. Кажется, что без этих дополнительных пакетов обойтись сложно, не так ли? Если вы так подумали, то это потому, что вы всё ещё делаете первые шаги в изучении Python. Да, это возможно, и без каких-либо хлопот касаемо использования того или иного пакета. Взгляните на исходный код скрипта, который делает именно это. Вот полный код:

1. from win32com import client as win32
2. 
3. excel = win32.Dispatch('Excel.Application')
4. excel.Visible = True
5. 
6. while True:
7.     pass

Код Python

Если запустить приведенный выше скрипт, то получим такой результат:

Теперь вы можете подумать: "Но где же электронная таблица?". Не переживайте. Мы не сделали ничего, кроме как открыли Excel. Но прошу заметить, как мы это сделали. В строке 01 скрипта мы указываем, что будем использовать. В строке 03 мы отправляем запрос на создание приложения Excel. Однако он будет создан, но останется скрытым. Чтобы сделать его видимым, мы используем строку 04. Если мы не используем цикл в строке 06, приложение будет открываться и закрываться сразу. Строка 07 просто гарантирует, что Python не будет ругаться на то, что цикл пуст.

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

1. from win32com import client as win32
2. 
3. excel = win32.Dispatch('Excel.Application')
4. excel.Visible = True
5. wb = excel.Workbooks.Add()
6. wb.Activate()
7. 
8. while True:
9.     pass

Код Python

Результат показан на изображении ниже:

Как видите, мы добавили две строки: 05 и 06. На данный момент мы используем технологию COM. В ссылках, приведенных в конце статьи, можно будет ознакомиться и изучить эти вызовы, чтобы сделать больше с технологией программирования на COM, если хотите выйти за рамки того, что здесь показано. Помните, что здесь мы покажем вам только основы, достаточные для того, чтобы вы были подготовлены и не запутались на следующем этапе. Прошу заметить, что мы открыли Excel, сделали его видимым, добавили электронную таблицу, а затем активировали его. Всё по-прежнему очень просто.

Теперь представьте, что вы хотите изменить имя той же электронной таблицы, как вы можете сделать это с помощью COM через Python? Всё очень просто. Достаточно использовать следующий модифицированный скрипт:

01. from win32com import client as win32
02. 
03. excel = win32.Dispatch('Excel.Application')
04. excel.Visible = True
05. wb = excel.Workbooks.Add()
06. wb.Activate()
07. ws = wb.Sheets('Sheet1').Name = "New Name"
08. 
09. while True:
10.     pass

Код Python

Результат показан на изображении ниже:

Как видите, мы добавили в скрипт Python только одну строку - номер 07. Результат оказался именно таким, как мы ожидали. Но мы ещё не ввели никакой информации в электронную таблицу. Как мы можем это сделать? Опять же, всё очень просто и понятно. Нам нужно будет только указать место и разместить на нем информацию. Поскольку данная часть может зависеть от того, что мы хотим сделать, мы покажем один из множества способов. Это будет выглядеть примерно так:

01. from win32com import client as win32
02. 
03. excel = win32.Dispatch('Excel.Application')
04. excel.Visible = True
05. wb = excel.Workbooks.Add()
06. wb.Activate()
07. wb.Sheets('Sheet1').Name = "New Name"
08. ws = wb.Sheets('New Name')
09. ws.Range('E6').Value = 'Checking.'
10. 
11. while True:
12.     pass

Код Python

И в результате мы получим именно то, что вы видите на рисунке:

Ух ты, как это интересно! Обратите внимание, что если внести формулу, она будет рассчитана. Теперь обратите внимание на следующее: добавлены строки 08 и 09. Причина в том, что, добавив строку 08, мы гарантируем, что нам не придется постоянно повторять имя вкладки. Однако также можно объединить строки 08 и 09 в одну.

«Но подождите минутку. Код, который мы видели в предыдущем скрипте, мне хорошо знаком». Если вы думаете о том же, то это не случайно. На самом деле, когда мы открываем Excel и делаем его видимым, всё выглядит очень похоже на код, выполненный на VBA. В этом и заключается магия интерфейса COM. Прошу заметить, что мы создаем скрипт на Python, но многое из того, что мы делаем, очень похоже на скрипт на VBA. Это открывает возможность сделать гораздо больше, чем мы видели до этого момента.

«Это хорошо, но всё, что было сделано здесь, можно было бы сделать и с помощью других пакетов, которые можно установить в Python». Да, вы правы. Однако, если мы сделаем это так, как только что было показано, вы заметите, что мы можем использовать в Python скрипт, который вполне можно было бы использовать в VBA. «Ну, я знаю, как это сделать, когда хочу открыть пустую электронную таблицу. Но если у меня уже открыт Excel, как мне поступить?» В таком случае, процесс будет намного проще и понятнее. Всё, что вам нужно будет сделать, - это зайти в Excel и указать, где нужно внести изменения. Код будет выглядеть так:

1. from win32com import client as win32
2. 
3. excel = win32.GetActiveObject('Excel.Application')
4. excel.Worksheets('Sheet1').Range('D5').Value = "Cool..."

Код Python

Результат выполнения этого скрипта можно увидеть чуть ниже:

Вы можете увидеть, что всё гораздо проще и легче, чем кажется на первый взгляд. Прошу заметить, что в строке 03 мы просим интерфейс предоставить нам объект для работы с приложением, которым в данном случае является Excel. В строке 04 мы указываем, что и где мы будем делать. Всё просто. Однако всё, что мы видели до настоящего момента, относится к самому основному. Наша цель - дать вам понять, что не обязательно скачивать и устанавливать большое количество пакетов Python. Всё, что вам нужно знать, - это как использовать то, что уже включено по умолчанию. Кроме того, конечно, чтобы узнать немного больше о некоторых техниках и технологиях, которые существуют уже много лет.

Хорошо. Это была основная часть того, что нам нужно, чтобы запустить наш сервер, не мешая пользователям работать с Excel. Следующее, что нужно понять, - это то, как манипулировать определенными элементами в Excel. И я не имею в виду формулы или что-то подобное. Я хочу, чтобы вы поняли, что мы можем использовать COM-технологию Python, чтобы выйти далеко за рамки того, что обычно делает Python. Однако, чтобы разделить идеи и чтобы вы могли лучше понять, что мы объясним, давайте перейдем к новой теме.


События и ещё больше событий

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

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

Не забывайте: идея в том, чтобы держать Excel открытым и получать данные в реальном времени от MetaTrader 5, что можно сделать через RTD или DDE. Однако мы также хотим, чтобы Excel отправлял команды в MetaTrader 5 таким образом, чтобы трейдер мог отправлять ордеры в MetaTrader 5, просто «взглянув» на Excel. Затем MetaTrader 5 позволит советнику интерпретировать ордеры, созданные в Excel. Таким образом, советник сможет выполнять операции, запрашиваемые трейдером. И всё это без присутствия MetaTrader 5 на экране трейдера. Трейдер будет смотреть только на Excel и, в зависимости от анализа, будь то фундаментального или какого-то иного, он сможет купить или продать любой символ прямо из Excel, независимо от графика.

Хорошо, но как сделать так, чтобы сделанный на Python скрипт знал, что пользователь делает в Excel? Помните, что мы используем Excel только в качестве примера, но то, что мы объясняем, подходит для любой программы, использующей технологию COM.

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

Теперь давайте посмотрим, как это работает на самом деле. Для этого нам нужно немного изменить скрипты, которые были показаны выше. Чтобы сделать всё как можно проще, поскольку идея здесь заключается как в дидактике, так и в практике, мы будем считать, что Excel уже открыт, когда выполняется скрипт на Python. Таким образом, у нас будет гораздо меньше работы, и нам будет проще понять и объяснить происходящее.

Основной скрипт можно увидеть ниже:

01. from win32com import client as win32
02. import pythoncom as pyCOM
03. import time
04. 
05. class AppEvents:
06.     def OnSheetActivate(self, *arg):
07.         print('Tab ' +  str(arg[0].Name) + ' selected...')
08. 
09. class SheetEvent:
10.     def OnSheetSelectionChange(self, *args):
11.         print(args[1].Address)
12.         args[0].Cells(1, 1).Value = "Select " + str(args[1].Address)
13. 
14. excel = win32.GetActiveObject('Excel.Application')
15. 
16. win32.WithEvents(excel, AppEvents)
17. win32.WithEvents(excel.Workbooks('Book1'), SheetEvent)
18. 
19. print("Enter in loop...")
20. while True:
21.     pyCOM.PumpMessages()
22.     print('ping...')
23.     time.sleep(1)

Код Python

Запустив его, мы заметим две вещи. Первая будет отображаться непосредственно в Excel, как показано на рисунке ниже:

Вторая наблюдается на терминале, где запущен скрипт. В нашем случае мы используем Visual Code, поэтому в области, которая воспроизводит то, что мы обычно видим в командной строке, можно увидеть следующие данные:

Прошу заметить: здесь показано, что было сделано в Excel. «Но как это возможно?» Обратите внимание, что данный код предназначен только для образовательных целей. Можно сделать гораздо большее, чем показано здесь, но давайте разберемся, что произошло, чтобы, вы смогли сделать что-то действительно интересное с этими знаниями.

Прежде чем начать, я хотел бы обратить ваше внимание на одну деталь этого кода. Я укажу на конкретный момент, но он применим ко всем случаям, независимо от того, хотим ли мы создать другую подобную точку или ту, которая уже присутствует в скрипте. Это строка 06, хотя то, о чем я буду говорить, относится и к 10.

Если вы обратитесь к справочной документации по этой статье и будете искать события приложения Excel, то обнаружите следующее: Application.SheetActivate event. Хорошо, но почему я говорю такое? Причина проста: МЫ НЕ МОЖЕМ ПРОСТО ИСПОЛЬЗОВАТЬ ЛЮБОЕ ИМЯ для ссылки на событие в скрипте на Python. Иначе скрипт не сработает при захвате события.

Теперь обратите внимание на кое-что в коде. В строке 05 мы определяем класс. Данный класс будет содержать все события приложения, которые мы хотим перехватить, точно так же, как в строке 09, где мы создали ещё один класс для обработки другого типа событий. В данном случае речь идет о событии, в котором участвует сама электронная таблица. Прошу заметить, что эти два вида деятельности разделены и имеют разные цели. Имя класса может быть любым допустимым; однако имя процедуры не подчиняется этому правилу. Чтобы процедура была связана с событием, она должна иметь определенное имя.

Теперь, возвращаясь к документации, поскольку мы хотим использовать событие Application.SheetActivate в нашем скрипте на Python, мы должны сделать следующее: Имя события, которое мы хотим захватить, должно начинаться с On, а сразу после него - название события, которое в данном случае называется SheetActivate. Таким образом, мы получаем имя, которое должно быть у процедуры. Ещё один аспект, который следует учитывать в документации, - количество аргументов или параметров, используемых каждым событием. Можно использовать ту же структуру, которую мы приводим здесь, для всех событий. Таким образом, Python преобразует фактические аргументы в кортеж, который можно использовать в самом языке. Если не знаете, что такое кортеж и как его использовать, обратитесь к документации по Python, - она является самой базовой для тех, кто хочет программировать на этом языке.

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

Обратите внимание, что в строке 14 содержится нечто, что мы уже видели раньше. Его цель - захватить сеанс Excel. Но нас на самом деле интересует сама переменная. Отметим сразу, что она будет использоваться в двух местах. Первое находится в строке 16. В данной строке мы указываем, какой класс будет отвечать за обработку событий, связанных с приложением. Второй параметр этого вызова представляет собой имя класса. Второй момент, когда мы используем переменную, находится в строке 17. А теперь внимание: тут мы используем определенное соединение. В этом случае соединение обозначает имя файла, открытого в Excel. Если мы используем файл с другим именем, то надо будет заменять его в этот момент, чтобы система могла правильно фиксировать события. Второй параметр указывает на имя класса, который будет обрабатывать события, происходящие на листе.

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


Заключительные идеи

В сегодняшней статье мы очень простым образом объяснили то, чего многие не знают: как Python может обработать информацию и получать доступ к программам через интерфейс COM. Я надеюсь, что этот материал пробудит в вас, как начинающих профессиональных программистах, больший интерес к изучению того, как всё на самом деле работает. Всё, что здесь показали, - это самая базовая реализация наших возможностей. Многие считают, что необходимо устанавливать множество инструментов и жонглировать множеством программ, но на самом деле понимания и знания технологий, более чем достаточно, чтобы производить много и качественно.

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


Ссылки:

Файл Описание
Experts\Expert Advisor.mq5
Демонстрирует взаимодействие между Chart Trade и советником (для взаимодействия требуется Mouse Study).
Indicators\Chart Trade.mq5 Создает окно для настройки отправляемого ордера (для взаимодействия требуется Mouse Study).
Indicators\Market Replay.mq5 Создайте элементы управления для взаимодействия с сервисом репликации/моделирования (для взаимодействия требуется Mouse Study).
Indicators\Mouse Study.mq5 Позволяет взаимодействовать между графическими элементами управления и пользователем (необходимо как для воспроизведения, так и для торговли на реальном рынке).
Servicios\Market Replay.mq5 Создает и поддерживает сервис репликации/моделирования рынка (основной файл всей системы).
Код VS C++ Server.cpp Создает и поддерживает сокет-сервер, разработанный на C++ (версия мини-чат).
Код на Python Server.py Создание и поддержка сокета Python для связи между MetaTrader 5 и Excel.
ScriptsCheckSocket.mq5 Позволяет выполнить тест соединения с внешним сокетом
Indicators\Mini Chat.mq5 Позволяет реализовать мини-чат через индикатор (для работы требуется использование сервера)
Experts\Mini Chat.mq5 Позволяет реализовать мини-чат через советник (для работы требуется использование сервера).

Перевод с португальского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/pt/articles/10683

Прикрепленные файлы |
Anexo.zip (560.03 KB)
Трейдинг с экономическим календарем MQL5 (Часть 6): Автоматизация входа в сделку с анализом новостей и таймерами обратного отсчета Трейдинг с экономическим календарем MQL5 (Часть 6): Автоматизация входа в сделку с анализом новостей и таймерами обратного отсчета
В этой статье мы реализуем автоматизированный вход в торговлю с использованием экономического календаря MQL5, применив настраиваемые фильтры и временные смещения для поиска новостей. Мы сравниваем прогнозные и предыдущие значения, чтобы определить, следует ли открывать сделку на покупку или продажу. Динамические таймеры обратного отсчета отображают оставшееся время до выхода новостей и автоматически сбрасываются после совершения сделки.
Разрабатываем менеджер терминалов (Часть 3): Получаем информацию о счёте и добавляем конфигурацию Разрабатываем менеджер терминалов (Часть 3): Получаем информацию о счёте и добавляем конфигурацию
Добавляем в наше веб-приложение возможность получения и отображения информации о торговых счетах терминалов: о балансе, прибыли, статусе подключения и другой важной информации. Также реализуем гибкую систему конфигурации, позволяющую управлять параметрами приложения через внешний JSON-файл, и улучшаем пользовательский интерфейс главной страницы.
Знакомство с языком MQL5 (Часть 13): Руководство для начинающих по созданию пользовательских индикаторов (II) Знакомство с языком MQL5 (Часть 13): Руководство для начинающих по созданию пользовательских индикаторов (II)
Эта статья проведет вас через создание пользовательского индикатора Heikin Ashi с нуля и продемонстрирует, как интегрировать пользовательские индикаторы в советник. В статье рассматриваются расчеты индикаторов, логика исполнения сделок и методы управления рисками для улучшения автоматизированных торговых стратегий.
Нейросети в трейдинге: Спайковая архитектура пространственно-временного анализа рынка (Энкодер) Нейросети в трейдинге: Спайковая архитектура пространственно-временного анализа рынка (Энкодер)
В статье представлена адаптация фреймворка SDformerFlow, обеспечивающая высокую адаптивность за счёт интеграции спайкового внимания с многооконной свёрткой и взвешенным суммированием элементов Query. Архитектура позволяет каждой голове внимания обучать собственные параметры, что повышает точность и чувствительность модели к структуре анализируемых данных.