
Эта стратегия является динамической, основанной на технологиях, и использует ATR-стоп. Стратегия была разработана Корри Хоангом из Stabley.
Стратегия использования динамического индикатора для определения направления тренда, в сочетании с ATR-индикатором, чтобы установить линию стоп-лосс и реализовать стратегию шоковой торговли с низкой ценой покупки и высокой продажи.
В коде сначала устанавливается диапазон времени отслеживания.
Затем мы переходим к показателям, которые включают в себя следующие показатели:
Основная логика суждения о тенденциях заключается в следующем:
Если закрытие выше, чем предыдущая линия остановки (vstop) падения, то это будет восходящий тренд; если закрытие ниже предыдущей линии остановки (vstop) подъема, то это будет нисходящий тренд.
При изменении тренда, скорректируйте положение стоп-линии.
В частности, при восходящем тренде стоп-линия определяется как максимальная цена предыдущей K-линии минус ATR; при нисходящем тренде стоп-линия определяется как минимальная цена предыдущей K-линии плюс 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