Комбинированная стратегия перемещения стоп-лосса с параболическим периодом и полосой Боллинджера

Автор:Чао Чжан, Дата: 2024-02-02 11:05:57
Тэги:

img

Обзор

Эта статья представит количественную торговую стратегию, которая сочетает в себе индикатор параболического периода и индикатор полосы Боллинджера для установки движущейся стратегии стоп-лосса.

Принцип стратегии

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

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

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

Преимущества стратегии

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

Риски и решения

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

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

Оптимизация стратегии

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Оптимизировать параметры параболического индикатора для корректировки скорости изменения индикатора для снижения вероятности ошибочного суждения

  2. Увеличить фильтрацию других технических индикаторов, таких как добавление MACD, KD для определения типа рынка, избегать арбитража на колеблющемся рынке

  3. Оптимизировать параметры полосы Боллинджера для корректировки параметров пропускной способности, чтобы сделать полосы Боллинджера ближе к изменениям цен

  4. Увеличить показатели объема, такие как объем торговли, позиции, чтобы помочь в оценке, чтобы избежать ложных прорывов

  5. Комбинировать фундаментальные показатели акций, чтобы избежать проблем с прибылью от стратегии хранения акций

Резюме

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


/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 3h
basePeriod: 15m
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/
// © maxencetajet

//@version=5
strategy("HA_RSI", overlay=true, initial_capital=1000, default_qty_type=strategy.fixed, default_qty_value=0.5, slippage=25)

closeHA = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("5 June 2022"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
backtestEndDate = input(timestamp("5 July 2022"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

swingHighV = input.int(10, title="Swing High", group="number of past candles")
swingLowV = input.int(10, title="Swing Low", group="number of past candles")

emaV = input.int(200, title="Ema Period", group="EMA")

rsiV = input.int(14, title="RSI Period", group="RSI")

start = input(0.02, group="Parabolic SAR")
increment = input(0.02, group="Parabolic SAR")
maximum = input(0.2, "Max Value", group="Parabolic SAR")

ema = ta.ema(closeHA, emaV)
rsi = ta.rsi(closeHA, rsiV)
SAR = ta.sar(start, increment, maximum)

myColor = SAR < low?color.green:color.red

longcondition = closeHA > ema and rsi > 50 and closeHA[1] > SAR and closeHA[1] < SAR[1] 
shortcondition = closeHA < ema and rsi < 50 and closeHA[1] < SAR and closeHA[1] > SAR[1]

float risk_long = na
float risk_short = na
float stopLoss = na
float entry_price = na
float takeProfit = na

risk_long := risk_long[1]
risk_short := risk_short[1]

swingHigh = ta.highest(closeHA, swingHighV)
swingLow = ta.lowest(closeHA, swingLowV)

if strategy.position_size == 0 and longcondition and inTradeWindow
    risk_long := (close - swingLow) / close
    strategy.entry("long", strategy.long, comment="Buy")
    
if strategy.position_size == 0 and shortcondition and inTradeWindow
    risk_short := (swingHigh - close) / close       
    strategy.entry("short", strategy.short, comment="Sell")
    
if strategy.position_size > 0

    stopLoss := strategy.position_avg_price * (1 - risk_long)
    entry_price := strategy.position_avg_price
    strategy.exit("long exit", "long", stop = stopLoss)
    
if strategy.position_size < 0 

    stopLoss := strategy.position_avg_price * (1 + risk_short)
    entry_price := strategy.position_avg_price
    strategy.exit("short exit", "short", stop = stopLoss)

if closeHA[1] < SAR and close > strategy.position_avg_price
    strategy.close("long", comment="Exit Long")
    
if closeHA[1] > SAR and close < strategy.position_avg_price
    strategy.close("short", comment="Exit Short")

p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price')
p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss')
fill(p_sl, p_ep, color.new(color.red, transp=85))

plot(SAR, "ParabolicSAR", style=plot.style_circles, color=myColor, linewidth=1)
plot(ema, color=color.white, linewidth=2, title="EMA")

Больше