Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Просмотров:
45
Опубликован:
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

В конвейерах маркировки с тройным барьером в качестве порога min_ret часто используется произвольная константа (0,5–1,0 %) или устаревшее допущение о спрэде. Установка порога ниже фактической стоимости транзакции в обоих направлениях приводит к тому, что конвейер маркирует шум, обусловленный затратами, как торгуемый сигнал. В результате маркированный набор данных систематически завышает показатель «edge», и любая модель, обученная на этих метках, переобучается на артефакт схемы маркировки, а не на подлинную рыночную структуру.

TransactionCostCollector.mq5 — это автономный скрипт, который решает задачу сбора данных в рамках данной проблемы. Он производит выборку из исторического распределения спредов, считывает данные брокера о ставках свопа и диагностике комиссионных для привязанного к графику символа и экспортирует все данные в структурированный файл CSV. Файл CSV обрабатывается сопутствующим классом Python TransactionCostModel, который преобразует все затраты в доходность в виде дробей и вычисляет пороговое значение min_ret для конкретного инструмента, необходимое для вашего вызова по маркировке.

Вывод данных модуля сбора данных о транзакционных издержках

Трехпанельная иллюстрация результатов работы TransactionCostCollector: разбивка внутридневных затрат по сессиям (a), полное распределение затрат (b) и кривая процентилей для выбора min_ret (c)

Что собирает скрипт

Скрипт собирает три компонента затрат для одного символа за один прогон:

  • Спред — историческое распределение, полученное с помощью CopySpread() за запрашиваемое количество баров. Представляется в виде среднего значения, стандартного отклонения и процентилей (p25, p50, p75, p90, p95, p99), все в пунктах. Также рассчитывается по часам UTC в течение дня, чтобы выявить влияние сессий.
  • Своп — ставки свопа за ночь по длинным и коротким позициям, считываемые непосредственно из SYMBOL_SWAP_LONG / SYMBOL_SWAP_SHORT, включая режим свопа (пункты, валюта, проценты) и день недели, в который взимается тройной своп.
  • Комиссия — только для диагностики. MQL5 не предоставляет комиссию за лот в виде прямого вызова API у всех брокеров. Скрипт фиксирует значение ACCOUNT_COMMISSION_BLOCKED и примечание, объясняющее, как вычислить ставку за лот на основе одной эталонной сделки.

Входные параметры

Параметр По умолчанию Описание
InpBars 50000 Количество баров истории спредов для выборки. Чем больше значение, тем более репрезентативное распределение и тем больше вариаций сессий будет отражено. 50 000 баров на H1 охватывают примерно 5,7 года; на M15 — примерно 1,4 года. Уменьшите значение, если в терминале имеется ограниченная история по данному инструменту.
InpOutputFile (пусто) Переопределение имени выходного файла. Если поле оставлено пустым (по умолчанию), файл получает имя <SYMBOL>_costs.csv — например, EURUSD_costs.csv для EURUSD. Файл записывается в папку MQL5\Files\ в папке данных терминала (режимFILE_WRITE | FILE_CSV ).

Формат вывода CSV

Формат CSV использует структуру из четырёх столбцов: раздел, ключ, значение, единица. Разделы:

  • symbol_properties — размер пункта, коэффициент пипса, значение тика, размер контракта, идентификаторы валют.
  • swap — ставки по длинным/коротким позициям, режим свопа, дни недели с тройным свопом.
  • commission — диагностическое значение и примечание о его вычислении.
  • spread_summary — среднее, стандартное отклонение и процентили по всем барам выборки.
  • spread_by_hour — средний спред (в пунктах) для каждого часа суток, по одной строке на час (UTC, время брокера).

Как запустить

  1. Поместите файл TransactionCostCollector.mq5 в папку MQL5\Scripts\Downloads\ и скомпилируйте в MetaEditor.
  2. Откройте график нужного символа на любом таймфрейме. Таймфрейм определяет, с какого типа баров будет браться выборка для распределения спреда — рекомендуется H1 как разумный компромисс между детализацией и длиной истории.
  3. Перетащите скрипт на график. Появится диалоговое окно ввода параметров (управляется параметром #property script_show_inputs). Установите для параметра InpBars желаемое количество баров для выборки и нажмите «ОК».
  4. Получите выходной файл CSV из папки MQL5\Files\ в папке данных терминала (Файл → Открыть папку данных в MetaTrader 5).

Интеграция с Python

Сопутствующий класс Python TransactionCostModel загружает файл CSV и вычисляет min_ret для маркировки с тройным барьером:

from afml.transaction_costs import load_cost_model
import pandas as pd

model = load_cost_model(
    csv_path           = "EURUSD_costs.csv",
    spread_percentile  = "p95_pips",   # консервативный
    slippage_pips      = 0.4,
    commission_per_lot = 7.0,          # из эталонной сделки
    lot_size           = 0.01,
)

close = pd.read_parquet("EURUSD_H1.parquet")["close"]
min_ret = model.min_ret_for_symbol(
    price_series    = close,
    holding_days    = 1.0,
    cost_multiplier = 1.5,   # 1,5-кратный уровень безубыточности
)
print(f"min_ret = {min_ret:.6f}")

Примечания по комиссии

Ставку комиссии за лот невозможно получить программным путём у всех брокеров. Рекомендуемая процедура: откройте контрольную сделку объёмом ровно 1,0 стандартного лота на демо-счёте, сразу после открытия сделки счёта с терминала значение ACCOUNT_COMMISSION_BLOCKED, а затем закройте сделку. Заблокированное значение, деленное на 1,0, даёт ставку за лот. Сверьте результат с выпиской со счёта. Эту операцию необходимо выполнять один раз для каждого брокера.

Почему p95, а не среднее значение

Средний спред в основном определяется периодами низкой активности: азиатской сессией, ночной консолидацией и упорядоченными трендовыми условиями. Однако входы по стратегии часто совпадают с моментами наибольшей неопределённости (именно тогда модели генерируют сигналы). Использование 95-го процентиля спреда в качестве входного параметра min_ret учитывает стоимость в типичных условиях входа, а не в условиях среднего рынка.

Ссылки и сопутствующая статья

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/73173

EA Money Management EA Money Management

Простой эксперт, построенный на критерии тренда

Institutional Harmonic Volumetric Gravity Center Institutional Harmonic Volumetric Gravity Center

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

YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя

Скрипт рисует уровни Рудолфа Акселя

YURAZ_MCCH YURAZ_MCCH

Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.