Перейти к содержанию

[Дневник трейдера] Среднесрок. написание советника.


Рекомендуемые сообщения

[Дневник трейдера] Среднесрок. написание советника. Опубликовано (изменено)
Стратегия средне-долго-срочной торговли по классическому ТА (Разработка советника)
Описание: В дневнике буду излагать ход создания советника, тестирование различных стратегий с помощью него и различные рассуждения по этому поводу. Отзывы и мнения участников форума будут учитываться в работе.
Правила стратегии для покупок: Классич. ТА
Правила стратегии для продаж: Классич. ТА
Торговые инструменты: все спекулятивные, доступные на платформе
Время торговли: круглосуточно, на открытии баров
Мани менеджмент: консервативный до умеренного
Цель: Создание советника для тестирования и отбора стратегий, основанных на классическом ТА.
Требования к советнику:
Спойлер

Тут моя упрощенная классификация

Спойлер


Классификация советников:
По частоте сделок
Среднесрочники – работают по барам
Скальперы - обычно работают по тикам или низшим барам
По алгоритму получения сигнала
Индикаторные – при наличии минимально-необходимой глубины истории показания не зависят от прошлого
Аналитические – показания зависят от прошлых выводов советника, значит зависят от глубины истории
По использованию мат. статистических методов
Сетки, Мартышки – используют
Классическая тактика – 1 сигнал = 1 сделка
По платформе
МТ4, 5
И др.…
По программной реализации на МТ4,5
С ООП
Без ООП


Требования к разрабатываемому советнику
Классификация (см.выше) Среднесрочник, Аналитический, Классическая, с ООП, МТ4 или 5-?
Цель:
Доход 80-150% /год. Макс просадка 30-40%.
ТФ анализируемый от 1 Неделя до 1 Час.
Кол-во сделок около Принятие решений на основе:
Классич.ТА: трендовый анализ, свечные паттерны, волновые паттерны, индикаторы
Технические Требования:
- универсальность-шаблонность кода, для облегчения создания множества разных ТС (портфелей ТС) на основе, а также для переноса в другие С-родственные платформы,
- оптимальность алгоритма – быстродействие,
- система логирования для последующего анализа работы,
- отсутствие предпосылок для ловушек оптимизации (слишком большое кол-во параметров, высокая корреляция пар-ров и …?).
... Что-то ещё забыл)

Мысли по оптимизации:
Спойлер

Оптимизация для средне- и долгосрочника. мысли на основании изученного материала.
1. нет необходимости опт-ции по тикам. Если принятие решений идет по барам (или временным отрезкам вне-зависимости от ТФ)
В некоторых случаях надо по контр.точкам для более точного сопровождения позиций. В остальных можно по ценам открытия.
2. По принципу устойчивости ТС к изменению параметров. Это позволяет отбраковывать плохие системы быстро – прогоняя полную опт-цию с широким шагом – если приемлемые/лучшие показатели лишь в одном диапазоне пар-ра, а в соседних значениях они сравнимы с худшими – в брак.
3. Много писано про опасность подгонки (кстати это может быть видно и если в кластере лучших рез-тов значения каких-то параметров сильно разбросаны) особенно это актуально для ТС с небольшим кол-вом сделок, т.к. мала выборка. Думаю имеет значение длительность периодов опт-ции и форварда, не должен форвард быть сильно меньше.
Интересна технология пошаговой оптимизации Walk forward optimization.
Еще думаю можно так- оптимизировать отдельно по трём разным годам (периоду с достаточной выборкой) и сравнить результаты – если пар-ры сильно отличаются, то ТС неустойчива и оптимизация по бОльшему периоду смысла не имеет.
4. Учёт коррелированности пар-ров может ускорить. Т.е. – если корреляция влияния двух пар-ров на результат мала, то первоначальную оптимизацию можно проводить только по одному. Т.о. если определить группы пар-ров с общей низкой корреляцией, то можно существенно ускорить оптимизацию. Пример: есть какие-либо пар-ры на вход, SL, TP.
Оптимизация SL при прочих равных суть – это нахождение золотой середины – при меньшем значении он будет срабатывать чаще, если сделка могла бы быть плюсовой, при большем уже нет сделок которые пошли обратно и растёт лишь убыток. Если прочие пар-ры еще не оптимальны, то изменение каждого будет давать изменение оптимального SL в обе стороны. К примеру по ТС мы TP «хотим» от 100 п., но не знаем насколько жадничать – 200-500. Прогоним оптимизацию их двух. Если в кластере рез-тов с макс.показателем их значения близки (не встречается сильно отличающихся, например TP и 100 и 500 п. )Так вот мы определили участок где эти пар-ры дают минимальные изменения друг на друга – низкокоррелированы. Можно смело ставить при оптимизации всех остальных параметров – только один из них, это снизит прогоны в разы. Примерно так и работает генетик, но если низкая корреляция пар-ров известна заранее, то можно ещё сэкономить. Минус- Сложнореализуемо (т.к. всё связано и полагаться приходится на неточные предположения ну и опыт), заморачиваться имеет смысл при очень больших объемах расчётов – более актуально для скальперских ТС.


Доп. инфо: В качестве платформы для создания советника выбор пал на МетаТрейдер, по причине простоты освоения языка и распространенности для тестирования на счетах (также потому что для данной стратегии минусы платформ незначительны). Думаю ещё только над тем, сразу под МТ5 писать или МТ4. МТ5 чуть дольше доосвоить язык, но есть свои плюсы при тестировании, минусов вроде больше нет. Кто что посоветует? Изменено пользователем allex_all
  • Лайк 4
Ссылка на сообщение
Поделиться на другие сайты

[Дневник трейдера] Среднесрок. написание советника. Опубликовано

Думаю ещё только над тем, сразу под МТ5 писать или МТ4.


ИМХО, лучше в МТ5- не придется переучиваться...
Но косяки в платформе еще есть.
Зато есть библиотека, которая позволяет писать мультиплатформенные советники (т.е. можно торговать и в МТ4 без переписывания)
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

[Дневник трейдера] Среднесрок. написание советника. Опубликовано (изменено)

usver73, благодарю. Тоже склоняюсь к МТ5, помимо прочего особенно соблазняет наличие обработчика торговых событий OnOrder, ну и наличие стандартных библиотек для большого кол-ва вспомогательных функций. Кстати размышляя поначалу о том как сделать код работающим и в 4 и в 5, пришла простая мысль разделить код на модули в т.ч. по этому принципу, т.е. какие-то модули сделать "вершн-независимыми", а какие то иметь в двух вариантах, в принципе так в большинстве случаев и реализовано посредством #ifdef и т.д. Ну а пока я изучаю отличия mql5, самое время заняться многими нелюбимой частью работы - планированием :)
Итак, рабочий вариант - разбивка кода на модули тут

Спойлер


1. Инициализация-деинициализация
-проверка параметров и окружения
- загрузка истории
- создание объектов
2. Блок обработки событий
-Тики, таймеры, торговые события, gui
3. Блок анализа
- определение/формирование набора признаков текущей ситуации
4. Блок торговых сигналов
-Тактика определения входов-выходов на основе анализа
5. Блок принятия решений
-ММ, РМ, обработка торг.сигналов, авто / ручная торговля
6. Блок Сопровождения позиций
-Трейлинг, реакция на новости и т.п.
7. Блок хранения информации
-общая инфа и список объектов
8. Блок логирования
9. GUI



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


Добавлено: 01-03-2019 07:47:31

Едем дальше, рабочий вариант иерархии классов. В случае необходимости использования функционала имеющихся классов мт5, я буду свои классы делать их наследниками двойными, либо просто включать в состав объект класса.
Спойлер

ALLObject базовый класс для всего проекта, с интерфейсом по получению лог-сообщений и вводу-выводу данных
- Контроллер – управление событиями и взаимодействием остальных
- График
-- график пары
-- график индикатора
- Анализатор – класс который анализирует график и возвращает сущности которые определил
--Граф.анализ -- Свечной – Волновой …
- Сущность – базовый для всех понятий ТА
--Тенденция—Граф.паттерн—Свеч.паттерн …
- Сигнал – база для всех ТС нахождения точек входа выхода, а также сигналов «приготовиться» и для ручной торговли
- Штаб – принятие решений
-Трейд – торговые операции *
- Сторож – трал, закрыватор и прочее*
-Логгер
- БД -хранение информации, объектов, торговых операций, в памяти и/или в файле, для удобства обмена информацией о истории работы друг друга всех объектов
-Граф.Интерфейс, ой, дойти бы до него)))
* - планируется использовать существующий


Для первого этапа планирую написать основную упаковку и реализовать такие основные виды ТА, как
граф.анализ (построение линий канала, граф.модели, линии поддержки сопротивления) ,
свечной (разворотные модели)
и индикаторный (Диверы разных индюков)
Теперь важный вопрос - логично же чтобы не писать всё с нуля использовать наработки. Понятно для анализа надо взять уже существующие индикаторы и алгоритмы, а вот для упаковки лучше ли использовать стандартную библиотеку MQL5, или упаковку написать свою??? Тут двояко - во 1-х неизвестно что быстрее - изучить станд.библиотеку или написать свою зная только язык, особенно учитывая что в ней реализовано всё на все случаи, а мне может понадобиться меньшая часть функционала.
З.Ы. Понимаю что вопрос в ветку программистов, но пока не было и строчки кода, я туда не решил. Может создать и там тему чисто с программерскими вопросами, а тут в дневнике всякие свободные обсуждения и пр..
Изменено пользователем allex_all
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
[Дневник трейдера] Среднесрок. написание советника. Опубликовано

Изучив возможности стандартной библиотеки МQL 5 пришел к выводу что оптимально делать проект на её основе, т.к. в неё уже заложен мощный базовый инструментарий для создания именно таких как я задумываю сложных комплексных проектов.

Для интересующихся под спойлером иерархия классов с указанием от какого класса стандартной библиотеки наследуется:

Спойлер

ALLObject базовый класс для всего проекта, с интерфейсом по получению лог-сообщений и вводу-выводу данных
- Контроллер - CObject – управление событиями и взаимодействием остальных
- График CSeries
-- график пары
-- график индикатора
- Анализатор – CExpertBase - класс который анализирует график и возвращает сущности которые определил
--Граф.анализ -- Свечной – Волновой …
- Сущность – CObject - базовый для всех понятий ТА
--Тенденция—Граф.паттерн—Свеч.паттерн …
- Сигнал – CExpertSignal - база для всех ТС нахождения точек входа выхода, а также сигналов «приготовиться» и для ручной торговли
- Штаб – CExpert - принятие решений
-Трейд – CExpertTrade - торговые операции *
- Сторож - CExpertTrailing – трал, закрыватор и прочее*
-Логгер - CFile, использует CList
- БД - CArrayObj - хранение информации, объектов, торговых операций, в памяти и/или в файле, для удобства обмена информацией о истории работы друг друга всех объектов
-Граф.Интерфейс - FastEasyGUI, ой, дойти бы до него)))
* - планируется использовать существующий



Пока написал модуль Логирования, работающий по следующему принципу:
Структура:
CLogMessage - собственно класс сообщение для лога хранит все нужные данные - важность, имя тип объекта, само текстовое сообщение и доп.инфу какую надо.
CLogMessageList от CList - двусвязный список ссылок на все объекты сообщений.
СLogger от CFile - Все операции с файлом лога, содержит в себе CLogMessageList.
Алгоритм:
Создается один на всех СLogger.
Все создаваемые рабочие объекты содержат в себе CLogMessage и при инициализации добавляют ссылку на него в CLogMessageList объекта СLogger.
После каждого действия объекты меняют инфу в своём лог-сообщении.
После каждой итерации вызова программы (проведения всех расчетов и т.п.), т.е. на каждом баре - СLogger проходит по всем сообщениям списка и выводит в файл те, которые соответствуют установленным фильтрам и которые обновленные естественно.
При необходимости вывода объектом нескольких сообщений за итерацию - можно вызывать СLogger напрямую, или создавать больше одного сообщения для объекта.

Вопросы пожелания предложения ... :)
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
[Дневник трейдера] Среднесрок. написание советника. Опубликовано

Создал тему в уголке программиста
http://tlap.com/forum/ugolok-programmista/13/srednesrok-napisanie-sovetnika/19195/
Здесь буду вести дневник торговли и тестирования стратегий, все по написанию кода там.
Выложил там для теста модуль фракталов.

Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...