Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
CSetupLedger: a per-setup win rate ledger for Expert Advisors - библиотека для MetaTrader 5
- Просмотров:
- 13
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Почему я это написал
Мой скальпер торгует по двум схемам: бычий блок ордеров и его медвежий зеркальный аналог. Тестер стратегий показал мне один и тот же коэффициент прибыльности для обеих схем. Я потратил две недели на настройку параметров, которые одинаково применялись к каждой из схем.
Затем я разделил сделки по типу сценария. На графике USDCAD M1 бычий сценарий привёл к 88 процентам убытков. Медвежий сценарий был близок к нулевому результату. Цифра, которая мне была нужна, всё это время находилась в моей собственной истории торговли. Просто у меня не было возможности её прочитать.
Этот класс умеет его читать.
Что он вам даёт
Вы регистрируете типы настроек один раз при запуске. Каждый из них получает идентификатор. Этот идентификатор добавляется в базу магических чисел, так что каждый заказ с момента отправки имеет свой собственный тег настроек.
После этого реестр отвечает на три вопроса по каждой настройке: сколько выигрышей и проигрышей; каков чистый результат после учета свопа и комиссии; и заслужила ли доля выигрышей достаточное доверие.
Именно для ответа на этот последний вопрос я и создал эту программу. Три выигрыша из трёх сделок — это 100-процентная доля выигрышей. Это также то, чего достигает монета, выпадающая «орел» в 44 процентах случаев, примерно раз в двенадцать попыток. Поэтому класс выводит нижнюю границу показателя Уилсона рядом с исходной долей выигрышей и сравнивает её с пороговым показателем доли выигрышей, требуемым вашим коэффициентом вознаграждения. При соотношении 1:2 этот порог составляет 33,3%. Схема считается надежной только тогда, когда даже её пессимистичный показатель превышает этот порог. На ранних этапах все схемы оцениваются как «ещё не заслуживающие доверия». Это честный ответ, когда у вас всего двадцать сделок.
Использование
#include <CSetupLedger.mqh> CSetupLedger ledger; int SETUP_BULL, SETUP_BEAR; int OnInit() { ledger.Init(552001); // ваша волшебная база SETUP_BULL = ledger.Register("Bullish OB"); // id 0 -> magic 552001 SETUP_BEAR = ledger.Register("Bearish OB"); // id 1 -> magic 552002 ledger.RebuildFromHistory(); // считывание записи из счета Print(ledger.Report(2.0)); // 2,0 = соотношение прибыли к риску return INIT_SUCCEEDED; }
Применяйте эту схему к сделке до того, как ордер будет отправлен.
trade.SetExpertMagicNumber((ulong)ledger.MagicFor(SETUP_BULL));Закройте позицию сразу после её закрытия.
double net = 0.0; if(ledger.ProcessClosedPosition(posId, setupId, net)) Print(ledger.Report(2.0));
Функция Report() возвращает один блок текста. Она работает как Print () и как Comment (). Вот мой реальный запуск на паре USDCAD на графике M1.
Per-setup ledger (breakeven win rate at 1:2.0 = 33.3%) --------------------------------------------------------------------- Bullish OB 235/529 raw 30.8% wilson 27.6% net -5819.94 not yet trusted Bearish OB 191/393 raw 32.7% wilson 29.0% net -811.42 not yet trusted

Тот же отчёт, переданный в функцию Comment (), отображается в углу графика во время работы советника. Прямоугольник на свече — это метка входа. В ней фиксируются показатели данной настройки до открытия сделки. Здесь указано: 4 выигрыша и 6 проигрышей. Исходный показатель — 40 процентов. Нижняя граница по Уилсону — 16,8 процента. Таким образом, по результатам десяти сделок вердикт по-прежнему гласит «пока не заслуживает доверия», что и является основной целью этой колонки.
Подсчёты представляют собой соотношение выигрышей к проигрышам. Таким образом, по бычьей настройке было совершено 764 сделки, а по медвежьей — 584. Обе суммы чистых результатов в точности совпадают с собственным чистым убытком тестера до цента. Проведите эту сверку по своим собственным результатам, прежде чем доверять какому-либо отчёту, включая этот. Если сумма сделок по каждому сценарию не совпадает с общим количеством сделок тестера, значит, позиции подсчитаны неверно, и любой процент, превышающий эту линию, не имеет никакой ценности.
Три ловушки, с которыми он справляется за вас
В рукописных версиях этого материала обычно допускаются ошибки в этих моментах. Я сам допустил две из них до появления этого курса.
Сделки — это не торговые операции. История MT5 представляет собой список сделок. Позиция, закрытая в три этапа, генерирует три СДЕЛКИ OUT. Пройдите по списку сделок и посчитайте каждую прибыльную как одну победу, и одна выигрышная торговая операция превращается в три победы. Реестр агрегирует данные по DEAL_POSITION_ID , поэтому частичное закрытие по-прежнему учитывается один раз.
DEAL_PROFIT — это не итоговая сумма. Своп и комиссия указываются в отдельных полях. В случае свинг-советника эта разница носит чисто косметический характер. В случае скальпера она определяет, принесла ли данная сделка прибыль вообще. Сделка, принесшая 3 доллара США за счет движения цены и повлекшая комиссионные в размере 4 долларов США, является убыточной. В журнале учитывается сумма прибыли, свопа и комиссионных.
POSITION_TICKET не является POSITION_IDENTIFIER . Функция HistorySelectByPosition () требует идентификатор. На счете с неттингом эти два параметра в большинстве случаев имеют одинаковое значение, поэтому ошибка остается незаметной до тех пор, пока счет с хеджированием или частичное закрытие не разъединят их. Тогда выбор возвращает пустой результат и ничего не сообщает.
Единственное правило, которое нельзя нарушать
Порядок регистрации — это формат данных. Идентификатор настройки существует только в виде «магических чисел» уже закрытых сделок. Вставьте новую настройку в середину списка в следующем месяце, и каждая историческая сделка этой настройки, которая ранее имела этот идентификатор, незаметно станет сделкой новой настройки. Ничто не выдает ошибку. Просто с этого момента номера будут неверными.
Новые настройки добавляются в конец списка. Если вы удаляете настройку, оставьте вызов Register () на прежнем месте, чтобы идентификатор оставался занятым. Краткий комментарий над блоком регистрации, объясняющий это, оправдает себя.
Чего это не сделает
Он хранит одну запись на каждую позицию. Советник, который открывает вторую позицию в рамках одной нетто-позиции, зачтёт всю сделку в пользу первой настройки. Если ваш советник так поступает, ему нужна модель с отдельными записями для каждой сделки.
Максимальное количество позиций — шестнадцать. Увеличьте значение SETUP_LEDGER_MAX , если вам нужно больше. Шестнадцать позиций на одном счете также означают шестнадцать небольших выборок, о чём вам сообщит столбец «Wilson».
Чистый результат, равный точно нулю, считается убытком. Сделки с нулевым результатом встречаются редко, и рассматривать их как выигрыши — более благоприятная ошибка.
Функция ProcessClosedPosition() заменяет глобальный выбор истории, поскольку она вызывает функцию HistorySelectByPosition (). Не вызывайте её в середине собственного цикла просмотра истории, не выполнив последующий повторный выбор.
Кроме того, эта функция оценивает ваши выходы из позиций, а не саму торговую идею. Сет-ап, который правильно определяет направление, но имеет неудачно размещённый стоп, оценивается как плохой сет-ап. Для принятия решения о том, чем торговать завтра, это, пожалуй, правильный подход. Однако это не то же самое, что судить о том, была ли торговая идея обоснованной.
Требования
MetaTrader 5. Никаких зависимостей, кроме стандартной библиотеки. Поместите файл в папку MQL5/Include/ и подключите его. Написано и протестировано на сборке 6190.
И ещё одно. Реестр, построенный на основе одного теста на выборке, оценивает только этот тест. Он не проверяет стратегию на достоверность. Тестирование вне выборки на периоде, который вы никогда не настраивали, — это отдельная задача, и данный класс её не заменяет.
— Али Раджпут
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/77531
Session Candle Counter: candles numbered from the cash open, DST aware
Номера присваиваются каждому свечному бару текущего торгового дня, начиная с момента открытия торгов на биржах во Франкфурте, Лондоне, Нью-Йорке или Токио. Время открытия конвертируется из местного времени биржи в время сервера брокера с автоматической корректировкой на переход на летнее время, поэтому первый свечной бар после открытия всегда имеет номер один — как летом, так и зимой.
RiskGuard Lite - Percent-Risk EMA/ATR EA
Обучающий советник для MT5: вход по пересечению EMA на закрытых свечах, стоп-лосс и тейк-профит на основе ATR, размер лота, рассчитываемый как фиксированный процент от собственного капитала с помощью OrderCalcProfit, фильтр спреда, изоляция магических чисел и проверка кодов ошибок сервера. Удобный шаблон для создания советников с контролируемым риском. Гарантии прибыли не дается.
YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя
Скрипт рисует уровни Рудолфа Акселя
YURAZ_MCCH
Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.