allex_all Опубликовано 27 февраля, 2019 Поделиться [Дневник трейдера] Среднесрок. написание советника. Опубликовано 27 февраля, 2019 (изменено) Стратегия средне-долго-срочной торговли по классическому ТА (Разработка советника)Описание: В дневнике буду излагать ход создания советника, тестирование различных стратегий с помощью него и различные рассуждения по этому поводу. Отзывы и мнения участников форума будут учитываться в работе. Правила стратегии для покупок: Классич. ТАПравила стратегии для продаж: Классич. ТАТорговые инструменты: все спекулятивные, доступные на платформеВремя торговли: круглосуточно, на открытии баровМани менеджмент: консервативный до умеренногоЦель: Создание советника для тестирования и отбора стратегий, основанных на классическом ТА.Требования к советнику: Спойлер Тут моя упрощенная классификация Спойлер Классификация советников:По частоте сделокСреднесрочники – работают по барамСкальперы - обычно работают по тикам или низшим барамПо алгоритму получения сигналаИндикаторные – при наличии минимально-необходимой глубины истории показания не зависят от прошлогоАналитические – показания зависят от прошлых выводов советника, значит зависят от глубины историиПо использованию мат. статистических методовСетки, Мартышки – используют Классическая тактика – 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 чуть дольше доосвоить язык, но есть свои плюсы при тестировании, минусов вроде больше нет. Кто что посоветует? Изменено 27 февраля, 2019 пользователем allex_all 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 28 февраля, 2019 Поделиться [Дневник трейдера] Среднесрок. написание советника. Опубликовано 28 февраля, 2019 Думаю ещё только над тем, сразу под МТ5 писать или МТ4. ИМХО, лучше в МТ5- не придется переучиваться...Но косяки в платформе еще есть.Зато есть библиотека, которая позволяет писать мультиплатформенные советники (т.е. можно торговать и в МТ4 без переписывания) 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
allex_all Опубликовано 1 марта, 2019 Автор Поделиться [Дневник трейдера] Среднесрок. написание советника. Опубликовано 1 марта, 2019 (изменено) usver73, благодарю. Тоже склоняюсь к МТ5, помимо прочего особенно соблазняет наличие обработчика торговых событий OnOrder, ну и наличие стандартных библиотек для большого кол-ва вспомогательных функций. Кстати размышляя поначалу о том как сделать код работающим и в 4 и в 5, пришла простая мысль разделить код на модули в т.ч. по этому принципу, т.е. какие-то модули сделать "вершн-независимыми", а какие то иметь в двух вариантах, в принципе так в большинстве случаев и реализовано посредством #ifdef и т.д. Ну а пока я изучаю отличия mql5, самое время заняться многими нелюбимой частью работы - планированием :)Итак, рабочий вариант - разбивка кода на модули тут Спойлер 1. Инициализация-деинициализация-проверка параметров и окружения- загрузка истории- создание объектов2. Блок обработки событий-Тики, таймеры, торговые события, gui3. Блок анализа- определение/формирование набора признаков текущей ситуации4. Блок торговых сигналов-Тактика определения входов-выходов на основе анализа5. Блок принятия решений-ММ, РМ, обработка торг.сигналов, авто / ручная торговля6. Блок Сопровождения позиций-Трейлинг, реакция на новости и т.п.7. Блок хранения информации-общая инфа и список объектов8. Блок логирования9. GUI Для того чтобы код был более универсальным, для каждой новой торговой стратегии и тактики, нужно будет поменять модули 3-6 вместе или по отдельности, остальные д.б. независимыми от ТС и претерпевать лишь совершенствование. Также для сокращения времени разработки я рассматриваю заимствовать имеющиеся и на форуме и вообще в сети свободные библиотеки, например ММ и сопровождение поз., поэтому в первую очередь займусь остальным.Позже выложу иерархию классов, пока думаю как раз какие стандартные классы mql5 задействовать и как тогда быть с работой в 4-ке... или забить уже и делать чисто на 5-ку.Добавлено: 01-03-2019 07:47:31Едем дальше, рабочий вариант иерархии классов. В случае необходимости использования функционала имеющихся классов мт5, я буду свои классы делать их наследниками двойными, либо просто включать в состав объект класса. Спойлер ALLObject базовый класс для всего проекта, с интерфейсом по получению лог-сообщений и вводу-выводу данных- Контроллер – управление событиями и взаимодействием остальных- График-- график пары-- график индикатора- Анализатор – класс который анализирует график и возвращает сущности которые определил--Граф.анализ -- Свечной – Волновой … - Сущность – базовый для всех понятий ТА--Тенденция—Граф.паттерн—Свеч.паттерн …- Сигнал – база для всех ТС нахождения точек входа выхода, а также сигналов «приготовиться» и для ручной торговли- Штаб – принятие решений-Трейд – торговые операции * - Сторож – трал, закрыватор и прочее*-Логгер- БД -хранение информации, объектов, торговых операций, в памяти и/или в файле, для удобства обмена информацией о истории работы друг друга всех объектов-Граф.Интерфейс, ой, дойти бы до него)))* - планируется использовать существующий Для первого этапа планирую написать основную упаковку и реализовать такие основные виды ТА, как граф.анализ (построение линий канала, граф.модели, линии поддержки сопротивления) , свечной (разворотные модели) и индикаторный (Диверы разных индюков)Теперь важный вопрос - логично же чтобы не писать всё с нуля использовать наработки. Понятно для анализа надо взять уже существующие индикаторы и алгоритмы, а вот для упаковки лучше ли использовать стандартную библиотеку MQL5, или упаковку написать свою??? Тут двояко - во 1-х неизвестно что быстрее - изучить станд.библиотеку или написать свою зная только язык, особенно учитывая что в ней реализовано всё на все случаи, а мне может понадобиться меньшая часть функционала. З.Ы. Понимаю что вопрос в ветку программистов, но пока не было и строчки кода, я туда не решил. Может создать и там тему чисто с программерскими вопросами, а тут в дневнике всякие свободные обсуждения и пр.. Изменено 1 марта, 2019 пользователем allex_all Ссылка на сообщение Поделиться на другие сайты More sharing options...
allex_all Опубликовано 13 марта, 2019 Автор Поделиться [Дневник трейдера] Среднесрок. написание советника. Опубликовано 13 марта, 2019 Изучив возможности стандартной библиотеки М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 напрямую, или создавать больше одного сообщения для объекта.Вопросы пожелания предложения ... :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
allex_all Опубликовано 22 марта, 2019 Автор Поделиться [Дневник трейдера] Среднесрок. написание советника. Опубликовано 22 марта, 2019 Создал тему в уголке программистаhttp://tlap.com/forum/ugolok-programmista/13/srednesrok-napisanie-sovetnika/19195/Здесь буду вести дневник торговли и тестирования стратегий, все по написанию кода там.Выложил там для теста модуль фракталов. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти