Это количественная торговая стратегия длинного/короткого ценового диапазона, основанная на теории прорыва. Она рассчитывает самую высокую цену закрытия за последние 100 торговых дней и определяет, произойдет ли прорыв, основываясь на том, превышает ли последняя цена закрытия этот уровень. Если обнаружен прорыв, запускается длинный сигнал. После входа в длинный, позиция будет закрыта стоп-лосом после 25 бар.
Основная логика этой стратегии использует теорию "прорыва" в техническом анализе. Теория прорыва полагает, что когда цена прорывается через последний самый высокий или самый низкий уровень в течение определенного периода времени, это сигнализирует об обратном и рынок может начать новый восходящий или нисходящий тренд.
В частности, эта стратегия использует встроенную функцию Pine Scriptta.highest()
Если цена закрытия превышает максимальную цену закрытия за 100 дней, запускается длинный сигнал входа.
После входа в длинную позицию, стратегия устанавливает условие остановки потери для закрытия позиции.ta.barssince()
чтобы подсчитать количество бар, прошедших с момента входа в длинный, он заставит закрыть позицию после 25 бар.
Логика ввода может быть обобщена как:
Самое большое преимущество этой стратегии заключается в том, чтобы захватить точки переворота цены с относительно высоким уровнем успеха торгов, следующих за трендом.
Конкретные преимущества:
1. Следование тенденциям, более высокий уровень успеха
Теория прорыва предполагает, что после того, как цена превышает ключевой уровень, она может начать новую тенденцию.
2. Контролируемый риск с стоп-лосом
Стратегия устанавливает вынужденный выход стоп-лосса после 25 бар до максимальной потери на одной сделке, избегая огромных потерь.
3. Подходит для среднесрочного и долгосрочного хранения
Период удержания по умолчанию составляет 25 бар, примерно 1 месяц. Эта частота подходит для средне- и долгосрочных стратегий, не слишком коротка для whipsaws и не слишком длинна для увеличения риска.
Небольшое количество параметров, легко оптимизировать
В основном существует два настраиваемых параметра, и с помощью нескольких параметров легко проверить и найти оптимальные параметры для фактической торговли.
5. Передача между различными продуктами
Эта стратегия не отвечает на специфические показатели определенных продуктов. Ее логика применяется к акциям, валюте, сырьевым товарам, криптовалютам и т. Д. Таким образом, это гибко переключаться между продуктами.
Хотя эта стратегия имеет некоторые преимущества, есть также некоторые риски при ее использовании в фактической торговле, главным образом:
Риск убыточных позиций
Если ценовой тренд не проходит как ожидалось, или прорыв оказывается ложным прорывом, то вынужденный выход на заранее установленной точке остановки может привести к большой потере.
2. Может потребоваться настройка параметров
Параметры по умолчанию могут быть не оптимальными. Они должны быть оптимизированы во время торговли в режиме реального времени, чтобы найти наилучшее соответствие конкретным продуктам и режимам рынка. Это добавляет дополнительную работу.
3. Корреляция производительности с рынками
Стратегия слишком сильно опирается на стойкие ценовые тенденции. Она не работает хорошо во время режимов с ограниченным диапазоном. Если столкнуться с рыночными рынками, часто возникает вынужденный выход, приводящий к нестабильным прибылям / потерям.
Для того, чтобы эта стратегия была более надежной и выгодной для фактического применения, можно провести некоторые улучшения в следующих аспектах:
1. Добавить механизм остановки потерь
Добавьте логику остановки потери, чтобы следовать за прибыльными позициями, динамически обновляя точку остановки потери на основе плавающей прибыли.
2. адаптивные параметры на основе рынков
Сделайте такие параметры, как период прорыва и период хранения адаптивными на основе силы рынка, количественно определенных с помощью таких показателей, как ATR. Это может динамически настраивать параметры.
**3. Комбинировать фильтры трендов **
Лучшее отфильтрование неясных тенденций при применении стратегии, посредством предварительного анализа тенденций, либо дискреционно, либо количественно.
4. Испытание на различных продуктах и интервалах
Испытание оптимизированных параметров и правил на различных продуктах (например, индексах, сырьевых товарах, валюте, криптовалюте) и интервалах (например, ежедневные, 60m bars) сделает эту стратегию более надежной и широко применимой.
Эта стратегия сдерживания потерь легко реализовать с четкими правилами определения тренда и управления позицией. Мы анализируем ее силу и риски, предлагаем предложения по повышению ее прибыльности и применимости. При дальнейшей оптимизации она может стать прочной количественной торговой стратегией.
/*backtest start: 2023-01-29 00:00:00 end: 2024-02-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © All_Verklempt //@version=5 strategy("Breakout Strategy", overlay=true) // Input variable for breakout period breakoutPeriod = input.int(100, title="Breakout Period", minval=1) // Calculate the highest close of the past breakout period highestClose = ta.highest(close, breakoutPeriod) // Input variables for start and end dates startYear = input.int(2022, title="Start Year", minval=1900) startMonth = input.int(1, title="Start Month", minval=1, maxval=12) startDay = input.int(1, title="Start Day", minval=1, maxval=31) endYear = input.int(2023, title="End Year", minval=1900) endMonth = input.int(12, title="End Month", minval=1, maxval=12) endDay = input.int(31, title="End Day", minval=1, maxval=31) // Convert start and end dates to timestamp startDate = timestamp(startYear, startMonth, startDay, 00, 00) endDate = timestamp(endYear, endMonth, endDay, 23, 59) // Entry condition: Breakout and higher close within the specified date range enterLong = close > highestClose[1] and close > close[1] // Exit condition: Close the long position after twenty-five bars exitLong = ta.barssince(enterLong) >= 25 // Strategy logic if (enterLong) strategy.entry("Long", strategy.long) if (exitLong) strategy.close("Long")