
Основная идея этой стратегии заключается в том, чтобы использовать движущуюся среднюю для определения направления тренда, делать дополнительные позиции в направлении тренда и использовать ATR для вычисления стоп-поста для отслеживания стоп-поста.
Эта стратегия использует hl2 в качестве исходной цены и рассчитывает ATR для определенного цикла в качестве предела убытков. В зависимости от значения ATR, умноженного на определенное множество, рассчитывается верхняя и нижняя полосы.
После открытия позиции, в соответствии с изменениями ATR в реальном времени, регулируется остановка, чтобы обеспечить отслеживание остановки. В частности, когда делается много, нижний рельс постоянно повышается в соответствии с последней низкой точкой, чтобы обеспечить остановку; когда делается пусто, верхний рельс постоянно понижается в соответствии с последней высокой точкой, чтобы обеспечить остановку.
Таким образом, эта стратегия использует в полной мере функции движущихся средних для определения направления тенденции, а также добавляет механизм отслеживания стоп-лосса на основе ATR, который гарантирует правильность направления торговли и контролирует торговые риски.
Наибольшее преимущество этой стратегии заключается в контроле риска. Традиционная стратегия движущихся средних учитывает только направленный выбор, и легко разорвать позиции. В то время как эта стратегия включает в себя отслеживание стоп-лосса, рассчитанное ATR, и может динамически регулировать стоп-лосс в зависимости от величины колебаний рынка, эффективно контролируя риск торговли.
Кроме того, данная стратегия объединяет многообещающую двустороннюю торговлю. По сравнению с односторонней стратегией, она позволяет своевременно корректировать направление позиции при переходе тенденции, избегая застрять в одном и том же направлении и повышая прибыль стратегии.
Основные риски этой стратегии заключаются в установке ATR-циклов и кратных. Если ATR-циклы слишком короткие или кратные слишком большие, то стоп-потери будут слишком малыми, чтобы эффективно контролировать риск. Если ATR-циклы слишком длинные или кратные слишком маленькие, то стоп-потери слишком слабые, чтобы получить прибыль. Кроме того, риск ложного прорыва может возникнуть, когда цена прорвется через движущуюся среднюю и вызовет сигнал построения позиции.
Можно сбалансировать убытки и убытки путем оптимизации циклов и кратности параметров; в сочетании с другими показателями фильтруют ложные прорывы, повышают качество сигнала и снижают риск.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизация циклов скользящих средних, поиск оптимальных комбинаций параметров
Добавление фильтров для других показателей, таких как MACD, KDJ и т. д., для улучшения качества сигнала
Повышение доходности стратегий управления позициями, таких как фиксированная доля, Мартингель и т. д.
Можно изучить различия в параметрах различных сортов и оптимизировать их.
Оптимизация обучения параметрам, например генетические алгоритмы, в сочетании с методами машинного обучения
В этой стратегии всесторонне учитываются тенденции и контроль риска, в то же время уделяется особое внимание снижению отступлений в погоне за прибылью. С помощью методов оптимизации параметров и комбинаций, вы можете дополнительно повысить прибыль стратегии.
/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//@version=4
strategy("Trenbolone Strategy", overlay = true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2018, title = "From Year", minval = 999)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
strategy.entry("SELL", strategy.short, when = window())
buy1 = barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)