Стратегия стоп-профита и стоп-лосса на основе трех индексных скользящих средних


Дата создания: 2024-02-04 10:38:42 Последнее изменение: 2024-02-04 10:38:42
Копировать: 0 Количество просмотров: 680
1
Подписаться
1617
Подписчики

Стратегия стоп-профита и стоп-лосса на основе трех индексных скользящих средних

Обзор

Трёхиндексная среднелинейная стоп-стоп-стратегия - это стратегия отслеживания трендов, основанная на движущихся средних индексов за три различных периода. Она одновременно использует средний реальный диапазон, чтобы установить стоп-стоп-страту и реализовать управление рисками.

Стратегический принцип

Эта стратегия использует три индикаторных движущихся средних: быструю, среднюю и медленную линии. Вы делаете больше, когда средняя линия проходит медленную линию; выровняете, когда средняя линия проходит под быстрой линией. Это типичная стратегия отслеживания тенденций, которая определяет направление тренда путем многомерного преобразования трех равномерных линий.

В то же время, эта стратегия использует средний показатель реальной волны, чтобы рассчитать стоп-стоп. В частности, много стоп-стопов - это цена входа + средняя реальная волна.*Коэффициент остановки; пустые остановки в качестве цены входа - средняя реальная диапазона*Коэффициент остановки. Принцип остановки убытков аналогичен принципу остановки. Это может эффективно ограничить односторонний риск.

Анализ преимуществ

  1. Показатели для принятия решений простые, понятные и понятные.
  2. Сильная систематичность, легко поддающаяся измерению.
  3. Следить за тенденциями и контролировать риски.

Анализ рисков

  1. В результате задержки в переходе на новую платформу не удалось вовремя зафиксировать.
  2. Например, в Китае, где в течение года наблюдается сильная волна землетрясений, наблюдается резкий спад.
  3. Параметры должны быть оптимизированы, иначе они не будут эффективными.

Меры реагирования на риски включают: соответствующее сокращение среднелинейных циклов, оптимизацию коэффициента остановки и остановки убытков, добавление других показателей для принятия решений.

Направление оптимизации

  1. Поиск оптимальных параметров с использованием множества комбинаций среднелинейных индикаторов.
  2. Добавление других технических показателей, таких как MACD, RSI и т. д.
  3. Автоматическая оптимизация параметров с помощью алгоритмов машинного обучения.
  4. Стоп-стоп на основе динамики реальной амплитуды.
  5. Вместе с эмоциональными показателями избегайте переполненных сделок

Подвести итог

Эта стратегия в целом является эффективно устойчивой стратегией отслеживания тенденций, простая настройка параметров, легко реализуема. Можно ограничить односторонний риск путем динамического остановки и остановки средней реальной длины волны. Однако следует обратить внимание на оптимизацию параметров и комбинацию показателей, чтобы предотвратить чрезмерную оптимизацию и задержку принятия решений.

Исходный код стратегии
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//© Densz
strategy("3EMA with TP & SL (ATR)", overlay=true )

// INPUTS
startTime           =       input(title="Start Time", type = input.time, defval = timestamp("01 Jan 2017 00:00 +0000"))
endTime             =       input(title="End Time", type = input.time, defval = timestamp("01 Jan 2022 00:00 +0000"))

slowEMALength       =       input(title="Slow EMA Length", type = input.integer, defval = 55)
middleEMALength     =       input(title="Middle EMA Length", type = input.integer, defval = 21)
fastEMALength       =       input(title="Fast EMA Length", type = input.integer, defval = 9)

trendMALength       =       input(title="Trend indicator MA Length", type = input.integer, defval = 200)

atrLength           =       input(title="ATR Length", type = input.integer, defval = 14)
tpATRMult           =       input(title="Take profit ATR multiplier", type = input.integer, defval = 3)
slATRMult           =       input(title="Stop loss ATR multiplier", type = input.integer, defval = 2)

rsiLength           =       input(title="RSI Length", type = input.integer, defval = 14)

// Indicators
slowEMA             =       ema(close, slowEMALength)
middEMA             =       ema(close, middleEMALength)
fastEMA             =       ema(close, fastEMALength)
atr                 =       atr(atrLength)

rsiValue            =       rsi(close, rsiLength)
isRsiOB             =       rsiValue >= 80
isRsiOS             =       rsiValue <= 20

sma200              =       sma(close, trendMALength)

inDateRange         =       true

// Plotting
plot(slowEMA, title="Slow EMA", color=color.red, linewidth=2, transp=50)
plot(middEMA, title="Middle EMA", color=color.orange, linewidth=2, transp=50)
plot(fastEMA, title="Fast EMA", color=color.green, linewidth=2, transp=50)

plot(sma200, title="SMA Trend indicator", color=color.purple, linewidth=3, transp=10)
plotshape(isRsiOB, title="Overbought", location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, text="OB")
plotshape(isRsiOS, title="Oversold", location=location.belowbar, color=color.green, transp=0, style=shape.triangledown, text="OS")

float takeprofit    =       na
float stoploss      =       na

var line tpline     =       na
var line slline     =       na

if strategy.position_size != 0
    takeprofit := takeprofit[1]
    stoploss := stoploss[1]
    line.set_x2(tpline, bar_index)
    line.set_x2(slline, bar_index)
    line.set_extend(tpline, extend.none)
    line.set_extend(slline, extend.none)
    
// STRATEGY
goLong  = crossover(middEMA, slowEMA) and inDateRange
closeLong = crossunder(fastEMA, middEMA) and inDateRange


if goLong
    takeprofit := close + atr * tpATRMult
    stoploss := close - atr * slATRMult
    // tpline := line.new(bar_index, takeprofit, bar_index, takeprofit, color=color.green, width=2, extend=extend.right, style=line.style_dotted)
    // slline := line.new(bar_index, stoploss, bar_index, stoploss, color=color.red, width=2, extend=extend.right, style=line.style_dotted)
    // label.new(bar_index, takeprofit, "TP", style=label.style_labeldown)
    // label.new(bar_index, stoploss, "SL", style=label.style_labelup)
    strategy.entry("Long", strategy.long, when = goLong)
    strategy.exit("TP/SL", "Long", stop=stoploss, limit=takeprofit)
if closeLong
    takeprofit := na
    stoploss := na
    strategy.close(id = "Long", when = closeLong)

if (not inDateRange)
    strategy.close_all()