
Оптимальная стратегия ATR Stop Loss Multiplier - это стратегия отслеживания тенденций, которая использует множитель средней реальной amplitude (ATR) для установки точки остановки, динамически корректируя риск. Когда ценовая тенденция меняется, она может своевременно остановиться, чтобы избежать больших потерь.
Эта стратегия сначала рассчитывает простые движущиеся средние для быстрых SMA и медленных SMA, делая прибыль при прохождении медленных SMA на быстрых SMA, и делая прибыль при прохождении медленных SMA под быстрыми SMA.
После входа в систему она будет в реальном времени отслеживать значение ATR. ATR представляет собой среднюю частоту колебаний за прошедшие определенные периоды. Эта стратегия позволяет нам установить длину цикла ATR (по умолчанию 14) и кратность (по умолчанию 2). Система будет рассчитывать значение ATR при входе в систему, а затем умножить на установленное кратность, как стоп-дистанцию.
Например, если ATR после входа составляет 50 пунктов, а множитель установлен на 2, то стоп-расстояние составляет 100 пунктов. Если цена затем будет работать более 100 пунктов, то будет задействован стоп-указ. Это позволит вовремя остановить убытки, чтобы избежать чрезмерных потерь.
Стратегия учитывает одновременно тенденции, и только тогда, когда покупательский сигнал соответствует тенденции к росту, запускается длинная стоп-позиция. А дисконтный сигнал запускается, когда соответствует тенденции к снижению.
Стоп-линии будут нанесены на график, и мы сможем проверить их в реальном времени. Когда будут сделаны стоп-условия, соответствующие позиции будут автоматически ликвидированы.
Наибольшим преимуществом этой стратегии является динамическая корректировка стоп-дистанции, которая может автоматически изменять рисковые отверстия в зависимости от изменений волатильности рынка. Когда волатильность увеличивается, стоп-дистанция также увеличивается, уменьшая вероятность того, что стоп-держка будет преодолена.
В отличие от фиксированного стоп-дистанции, этот способ позволяет эффективно контролировать одиночные потери, одновременно отслеживая тенденцию. Он гарантирует возможность получения прибыли, а также обращает внимание на управление рисками.
Кроме того, в сочетании с оценкой тенденций, такой способ уменьшения убытков может снизить количество случаев выбросов в результате землетрясений в регионе.
Основной риск этой стратегии заключается в том, что во время удержания позиции цена может быть затянута вниз, что может вызвать убыточный счет. Особенно при коротком цикле ATR, убыточный промежуток не может полностью отфильтровать влияние краткосрочных колебаний.
Еще один риск заключается в том, что в экстремальных ситуациях ценовые скачки могут напрямую пробиться через линию остановки. Это требует установки более высокого множителя остановки, но также означает уменьшение пространства для прибыли.
Наконец, стратегия не учитывает влияние ночных и предварительных торгов на ATR. Это может привести к тому, что ATR, рассчитанные стратегией, будут неточными при открытии или закрытии торгов.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизация ATR-циклических параметров для тестирования оптимальных комбинаций параметров в различных рынках
Сопоставление доходности с фиксированными и динамически изменяющимися множителями
ATR в сочетании с ночными дисками и предварительными данными для уменьшения влияния скачков цен на открытые диски
Настройка ATR-условия: вводится только после достижения ATR определенного уровня, чтобы избежать ненужных потерь на рынке с низкой волатильностью
Включает в себя дополнительные фильтрующие условия: например, информацию о тенденциях в макроуровне, количественных показателях и т. д.
Оптимальная стратегия ATR Stop Loss Multiplier обеспечивает эффективный баланс между трендовым отслеживанием и контролем риска путем динамического регулирования стоп-дистанции. По сравнению с фиксированной стоп-дистанцией, она может эффективно ограничивать одиночные потери, гарантируя прибыль.
Конечно, есть потенциальные риски, которые необходимо учитывать, такие как высокие цены, чрезмерная чувствительность к остановке. Мы можем продолжать оптимизировать стратегию на многих уровнях, повышая стабильность и доходность.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//@author=Daveatt
//This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
SystemName = "BEST ATR Stop Multiple Strategy"
TradeId = "BEST"
InitCapital = 100000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true
strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay )
fastSMAperiod = input(defval=15, title='Fast SMA', type=input.integer, minval=2, step=1)
slowSMAperiod = input(defval=45, title='Slow SMA', type=input.integer, minval=2, step=1)
src = close
// Calculate moving averages
fastSMA = sma(src, fastSMAperiod)
slowSMA = sma(src, slowSMAperiod)
// Calculate trading conditions
enterLong = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)
// trend states
since_buy = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend = since_sell > since_buy
sell_trend = since_sell < since_buy
is_signal = enterLong or enterShort
// get the entry price
entry_price = valuewhen(enterLong or enterShort, src, 0)
// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)
// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)
///////////////////////////////
//======[ Trailing STOP ]======//
///////////////////////////////
// use SL?
useSL = input(true, "Use stop Loss")
// ATR multiple Stop
stop_atr_length = input(14,title="ATR Length", minval=1, type=input.integer)
stop_atr_mult = input(2,title="ATR Multiple", minval=0.05, step=0.1, type=input.float)
// Global STOP
stop_price = 0.0, stop_price := nz(stop_price[1])
// STOP ATR
var stop_atr = 0.0
var entry_stop_atr = 0.0
stop_atr := nz(atr(stop_atr_length))
if enterLong or enterShort
entry_stop_atr := stop_atr * stop_atr_mult
// display the ATR value multiple
plotshape(enterLong, title='ATR Long Stop value', style=shape.labelup,
location=location.bottom, color=color.green, transp=0, text='', textcolor=color.navy, editable=true, size=size.small, show_last=1, size=size.small)
// var label atr_long_label = na
// var label atr_short_label = na
lapos_y_entry_up = lowest(30)
lapos_y_entry_dn = highest(30)
// text_label = "ATR value: " + tostring(stop_atr, '#.#') + "\n\nATR Multiple value: " + tostring(entry_stop_atr, '#.#')
// if enterLong
// label.delete(atr_long_label)
// atr_long_label := label.new(bar_index, lapos_y_entry_up, text=text_label,
// xloc=xloc.bar_index, yloc=yloc.price, color=color.green, style=label.style_labelup, textcolor=color.white,
// size=size.normal)
// if enterShort
// label.delete(atr_short_label)
// atr_short_label := label.new(bar_index, lapos_y_entry_dn, text=text_label,
// xloc=xloc.bar_index, yloc=yloc.price, color=color.red, style=label.style_labeldown, textcolor=color.black,
// size=size.normal)
// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if useSL and buy_trend
stopValue = entry_price - entry_stop_atr
else
0
shortStopPrice := if useSL and sell_trend
stopValue = entry_price + entry_stop_atr
else
999999
//////////////////////////////////////////////////////////////////////////////////////////
//*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS ***//
//////////////////////////////////////////////////////////////////////////////////////////
cond_long_stop_loss_hit = useSL and buy_trend and crossunder(low, longStopPrice[1])
cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1])
// Plot stop loss values for confirmation
plot(series=useSL and buy_trend and low >= longStopPrice
? longStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Long Trail Stop")
plot(series=useSL and sell_trend and high <= shortStopPrice
? shortStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Short Trail Stop")
close_long = cond_long_stop_loss_hit
close_short = cond_short_stop_loss_hit
// Submit entry orders
strategy.entry(TradeId + " L", long=true, when=enterLong)
strategy.close(TradeId + " L", when=close_long)
//if (enterShort)
strategy.entry(TradeId + " S", long=false, when=enterShort)
strategy.close(TradeId + " S", when=close_short)