
EdgeMeter отвечает на один вопрос, касающийся любого сигнала входа:
принимая во внимание транзакционные издержки, приносит ли этот сигнал прибыль?
Он не размещает ордеров. Он анализирует историю, оценивает ваш сигнал на каждом закрытом
баре и выводит вердикт.
ПОЧЕМУ Я ЕГО НАПИСАЛ
Я потратил месяц на разработку советника с сеткой на паре XAUUSD M1. Я зафиксировал стоп-лосс, добавил
плавающий лимит убытка, выход при развороте и максимальный срок нахождения в корзине. Он продолжал приносить убытки.
Когда я наконец проанализировал сам сигнал ВХОДА, ответ занял тридцать
секунд:
среднее движение после сигнала за 15 минут: +0,04
сплаченный спред за круглый ход: 0,26
Никакая логика выхода не исправит это. Деньги были потеряны при входе, и каждый час, который я
тратил на выходы, были потрачены впустую. Именно для предотвращения этого и существует этот скрипт.
ЧТО ОН ОТЧИТЫВАЕТ
Для каждого указанного вами периода удержания:
- валовое преимущество: среднее благоприятное изменение цены после появления сигнала
- чистый результат после вычета стоимости, моделируемый по одной позиции за раз
- t-статистика, рассчитанная на основе НЕПЕРЕСЕКАЮЩИХСЯ сделок
- доля прибыльных месяцев
- максимальное падение
Затем проводится аналогичная оценка на СЛУЧАЙНОМ КОНТРОЛЬНОМ НАБОРЕ: с той же частотой открытия позиций,
направление, определяемое подбрасыванием монеты. Случайный вход должен приносить убыток ровно в размере транзакционных издержек,
ни больше, ни меньше. Это позволяет добиться двух целей. Во-первых, доказывается правильность работы симулятора,
и позволяет определить уровень фонового шума. Если ваш сигнал явно не превосходит эти
строк, он не несет никакой информации.
ЛОВУШКА ПЕРЕКРЫТИЯ
Именно эта часть подвела меня, как и большинство людей.
Следующие друг за другом сигналы имеют большую часть общего переднего окна. Горизонт в 60 баров
, отбираемый по каждому бару, даёт окна, которые перекрываются 59 способами. Рассматривая их как
независимые, приводит к завышению t-статистики примерно на корень квадратный из горизонта.
Мой собственный сигнал при таком подходе показал t = 3,32, что выглядит убедительно. На действительно
независимых выборках значение t составляло 1,20 — что неотличимо от шума. EdgeMeter
моделирует по одной позиции за раз, поэтому сделки, о которых он сообщает, не пересекаются, и
t-статистика является достоверной.
КРИТЕРИИ ПРОХОЖДЕНИЯ
Скрипт проверяет три критерия, и все три являются обязательными:
[1] чистая прибыль по сделке > 0 после вычета затрат
[2] |t| > 2
[3] не менее 3 прибыльных месяцев из 4
Определите свои критерии, прежде чем смотреть на цифры. Принимать решение после просмотра — это
приводит к тому, что убыточная система попадает на реальный счет.
КАК ПРОТЕСТИРОВАТЬ СВОЙ СИГНАЛ
Откройте файл и отредактируйте две функции в разделе USER SECTION. Ничего больше менять
.
bool UserInit() — создайте дескрипторы ваших индикаторов и загрузите их
буферы с помощью LoadBuffer() / LoadBufferB()
int UserSignal(int i) — оцените закрытый бар i
возвращайте +1 для покупки, -1 для продажи, 0 для ожидания
Все массивы индексируются так, что 0 = самый старый бар. Это противоположно обычной
индексации рядов, и это сделано намеренно: в этом случае возвращаемое значение просто равно
индекс + горизонт, что устраняет целый класс ошибок со знаком.
Вход моделируется по цене открытия Open(i+1) следующего бара. Никогда не считывайте данные бара i+1 или более поздних
внутри UserSignal — это смещение, связанное с «заглядыванием в будущее», и из-за него бесполезный
сигнал выглядеть блестящим.
По умолчанию UserSignal представляет собой пересечение скользящих средних двух таймфреймов, которое сохраняется в качестве
рабочим примером. Замените его.
НАСТРОЙКА ЗАТРАТ
InpSpread, InpCommission и InpSlippage указаны в единицах PRICE, а не в пунктах, и
они являются самыми важными входными параметрами в скрипте. Получите их из своего собственного
счета, а не из рекламных данных брокера.
Если у вас есть журнал исполнений с реальной или демо-торговли, используйте среднее
среднее значение. Если у вас его нет, возьмите типичный спред, который вы видите на графике, и добавьте
запас на проскальзывание, вместо того чтобы считать, что оно равно нулю. Демо-сервер будет показывать
практически нулевой проскальзывание; это особенность демо-сервера, а не рынка.
ТРЕБОВАНИЯ
Перед запуском загрузите достаточное количество исторических данных: откройте график по вашему инструменту и
таймфрейм, а затем прокрутите график как можно дальше влево. Скрипт сообщит вам, если данных
. Менее 30 сигналов означают, что любой результат является лишь отдельным случаем, а не доказательством.
Использование и модификация разрешены.