Эта статья представит количественную торговую стратегию, которая сочетает в себе индикатор параболического периода и индикатор полосы Боллинджера для установки движущейся стратегии стоп-лосса.
Во-первых, эта стратегия использует параболический индикатор для оценки текущей тенденции рынка. Когда сегодняшняя цена закрытия пересекает вчерашнюю параболическую линию периода, считается, что рынок перешел в бычий и может пойти в длинный; когда сегодняшняя цена закрытия пересекается ниже линии периода, то рыночные перспективы являются медвежими и могут пойти в короткий.
Во-вторых, эта стратегия сочетает в себе индикатор Болинджерской полосы для установки динамической позиции стоп-лосса. Верхний рельс Болинджерской полосы можно рассматривать как зону перекупа, а нижний рельс - зону перепродажи. После длинного хода, если цена опять опускается ниже нижней рельсы Болинджерской полосы, остановить потерю до закрытия позиции; после короткого хода, если цена снова поднимается выше верхней рельсы, остановить потерю до выхода. Таким образом, верхние и нижние рельсы Болинджерской полосы становятся движущимися линиями стоп-лосса.
С помощью вышеуказанных принципов эта стратегия определяет направление рынка, устанавливая динамический механизм стоп-лосса для отслеживания прибыли. Это позволяет отслеживать некоторые взлеты и падения в основных тенденциях, а также быть в состоянии блокировать прибыль с помощью стоп-лосса, чтобы избежать рисков.
По сравнению с традиционными стратегиями стоп-лосса, которые устанавливают только одну фиксированную позицию стоп-лосса, эта стратегия использует индикатор полосы Боллинджера в качестве линии стоп-лосса, так что линия стоп-лосса может двигаться с колебаниями цены. Это позволяет блокировать больше прибыли в относительно больших движениях. Кроме того, по сравнению с использованием одной только линии параболического периода, эта стратегия добавляет индикатор полосы Боллинджера для определения перекупленных и перепроданных зон, что может быть более точным.
Основной риск этой стратегии заключается в том, что тенденция параболического индикатора не сильна. На колеблющихся рынках цены могут пересекать параболические периоды несколько раз, в результате чего для стратегии возникают частые, но небольшие прибыльные сделки.
Чтобы справиться с вышеуказанными рисками, параметры могут быть скорректированы с целью увеличения степени изменения параболической периодической линии, чтобы уменьшить вероятность ошибочного суждения; или рассмотреть возможность комбинирования других индикаторов для фильтрации времени входа.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизировать параметры параболического индикатора для корректировки скорости изменения индикатора для снижения вероятности ошибочного суждения
Увеличить фильтрацию других технических индикаторов, таких как добавление MACD, KD для определения типа рынка, избегать арбитража на колеблющемся рынке
Оптимизировать параметры полосы Боллинджера для корректировки параметров пропускной способности, чтобы сделать полосы Боллинджера ближе к изменениям цен
Увеличить показатели объема, такие как объем торговли, позиции, чтобы помочь в оценке, чтобы избежать ложных прорывов
Комбинировать фундаментальные показатели акций, чтобы избежать проблем с прибылью от стратегии хранения акций
Эта стратегия сочетает в себе определение направления и силы тренда рынка с параболическим индикатором, а затем использует верхние и нижние рельсы полос Боллинджера в качестве движущейся позиции стоп-лосса для установки стратегии стоп-лосса, достигая сочетания отслеживания тренда и контроля рисков. По сравнению с традиционными стратегиями фиксированного стоп-лосса эта стратегия может достигать более высокой доходности при больших движениях. Оптимизируя параметры и добавляя другие вспомогательные индикаторы суждения, стабильность стратегии может быть еще больше повышена и снижена ненужная торговля.
/*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")