Это ежедневная стратегия свингования на основе импульсных методов с использованием ATR Stops.
Стратегия определяет направление тренда с использованием индикаторов импульса и устанавливает линии остановки потери на основе ATR для реализации свинговой торговли с низким уровнем покупки и высоким уровнем продажи.
Код сначала устанавливает временной диапазон обратного тестирования.
Затем в разделе показателей вычисляются следующие показатели:
Основная логика для оценки тренда заключается:
Если закрытие выше предыдущей линии остановки потерь вниз, оно рассматривается как восходящий тренд; если закрытие ниже предыдущей линии остановки потерь вверх, оно рассматривается как нисходящий тренд.
Когда изменяется тренд, корректируйте позицию линии стоп-лосса.
В частности, в восходящем тренде линия стоп-лосса устанавливается на самую высокую цену предыдущего бар минус значение ATR; в нисходящем тренде линия стоп-лосса устанавливается на самую низкую цену предыдущего бар плюс значение ATR.
Это реализует тенденцию после остановки потерь.
В разделе "Правила торговли" открывайте длинные/короткие позиции, когда цена переходит линию стоп-лосса.
Преимущества этой стратегии:
Существуют также некоторые риски:
Некоторые оптимизации:
Некоторые направления для оптимизации этой стратегии:
Проверьте различные параметры ATR, чтобы найти оптимальный. Проверьте несколько наборов параметров и оценить соотношение доходности / риска.
Добавьте метрики волатильности, расслабьте стоп-лосс должным образом в периоды повышения волатильности.
Добавьте трендовый фильтр, чтобы избежать сделок во время нестабильного рынка. Добавьте индикаторы оценки тренда, торгуйте только тогда, когда тренд ясен.
Добавьте механизм размещения позиций. Настройка размера позиции на основе коэффициента использования счета, последовательных времен остановки потери и т.д.
Активно сокращайте убытки перед закрытием рынка, чтобы избежать риска длительного разрыва.
Как основная ежедневная стратегия торговли свингом, общая логика ясна. Она оценивает тренд с помощью импульсных методов и использует ATR для отслеживания стоп-лосса, эффективно контролируя риск.
Все еще большое пространство для оптимизации, может улучшиться из таких аспектов, как суждение о тренде, метод остановки потери, размещение позиций и т. Д., Чтобы сделать стратегию более практичной.
/*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"}] */ //@version=2 strategy("BTC Swinger", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100) ///////////////////////////////////////////////////////////// //START - SET DATE RANGE // === BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1) FromDay = input(defval = 1, title = "From Day", minval = 1) FromYear = input(defval = 2010, title = "From Year") ToMonth = input(defval = 12, title = "To Month", minval = 1) ToDay = input(defval = 31, title = "To Day", minval = 1) ToYear = input(defval = 2020, title = "To Year") startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1) endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59) withinTimeRange = true ///////////////////////////////////////////////////////////// //END - SET DATE RANGE ///////////////////////////////////////////////////////////// //START - INDICATORS length = input(3) mult = input(1, minval = 0.01) atr_ = atr(length) max1 = max(nz(max_[1]), close) min1 = min(nz(min_[1]), close) is_uptrend_prev = nz(is_uptrend[1], true) stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_ vstop_prev = nz(vstop[1]) vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop) is_uptrend = close - vstop1 >= 0 is_trend_changed = is_uptrend != is_uptrend_prev max_ = is_trend_changed ? close : max1 min_ = is_trend_changed ? close : min1 vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1 plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2) ///////////////////////////////////////////////////////////// //END - INDICATORS ///////////////////////////////////////////////////////////// //START - TRADING RULES direction = input(defval=1, title = "Strategy Direction", minval=-1, maxval=1) strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long)) condition1 = close > vstop and withinTimeRange condition2 = close < vstop and withinTimeRange strategy.entry("BUY", strategy.long, when = condition1) strategy.entry("SELL", strategy.short, when = condition2) ///////////////////////////////////////////////////////////// //END - TRADING RULES