
Стратегия сверхтройной двойной равномерной линии - это количественная торговая стратегия, основанная на сверхтройном показателе и простой движущейся средней. Эта стратегия использует сверхтройной показатель для определения направления тенденции рынка, а затем фильтрует в сочетании с 200-дневной простой движущейся средней, открывая позиции в направлении большой тенденции.
Стратегия использует два показателя:
Супер-тенденционный индикатор: он рассчитывает находку и отступление от траектории в зависимости от истинной величины ATR и кратного числа. Когда цена закрытия выше от верхней траектории, это означает позитивную позицию, а ниже от нижней траектории - понижение.
200-дневная простая скользящая средняя: она представляет собой среднее за последние 200 дней по цене закрытия. Цена закрытия выше этой линии представляет собой большую тенденцию к повышению, а ниже этой линии - большую тенденцию к снижению.
Логика стратегии:
Когда индикатор сверхтенденциального тренда является положительным (сверхтенденциальный индикатор больше 0), и цена закрытия выше 200-дневной средней линии, сделайте более длинный вход.
Промежуточный рынок открывается, когда индекс сверхтренда падает (< 0) и цена закрытия ниже 200-дневной средней.
Когда индикатор сверх тренда выходит из равновесного положения, когда предыдущий сигнал отклоняется.
Стоп-лост установлен на 25%.
Эта стратегия, в сочетании с индикатором сверхтенденции для определения краткосрочной тенденции и 200-дневным средним линией для определения долгосрочной тенденции, может эффективно фильтровать ложные прорывы, снижая частоту торговли и одновременно повышая выигрышную вероятность. В больших ситуациях тенденция достаточно четкая, есть большое пространство для остановки убытков, есть большое пространство для получения прибыли.
Основной риск этой стратегии заключается в том, что в случае высокого уровня леверинга увеличивается риск принудительной ликвидации. Кроме того, когда рыночная ситуация сокращается, сверхтенденциальные индикаторы создают избыточные сигналы, что увеличивает частоту и стоимость торгов.
Риск может быть снижен с помощью соответствующей корректировки ATR-циклов, множительных параметров и Stop Loss.
Эта стратегия может быть оптимизирована в следующих аспектах:
корректировка параметров ATR-циклов и умножения, оптимизация параметров сверхтенденционного показателя;
Попробуйте заменить его другими равномерными показателями, такими как EMA, VIDYA и т.д.
Добавление других вспомогательных индикаторов, таких как канал BOLL или индикатор KD, для дальнейшей фильтрации сигналов;
Оптимизация стратегий остановки убытков, например, переход к убыточному равновесию или остановка на крупном уровне.
Эта стратегия очень практична в целом, учитывая как краткосрочные тенденции, так и долгосрочные тенденции, а также более рациональная стоп-страшная настройка.
/*backtest
start: 2023-12-16 00:00:00
end: 2024-01-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef
//@version=5
strategy("Smart SuperTrend Strategy ", shorttitle="ST Strategy", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.01)
// Parametry wskaźnika SuperTrend
atrLength = input(10, title="Lenght ATR")
factor = input(3.0, title="Mult.")
// Parametry dla SMA
lengthSMA = input(200, title="Lenght SMA")
// Parametry dla Stop Loss
sl = input.float(25.0, '% Stop Loss', step=0.1)
// Obliczanie ATR
atr = ta.atr(atrLength)
// Obliczanie podstawowej wartości SuperTrend
up = hl2 - (factor * atr)
dn = hl2 + (factor * atr)
// Obliczanie 200-SMA
sma200 = ta.sma(close, lengthSMA)
// Inicjalizacja zmiennych
var float upLevel = na
var float dnLevel = na
var int trend = na
var int trendWithFilter = na
// Logika SuperTrend
upLevel := close[1] > upLevel[1] ? math.max(up, upLevel[1]) : up
dnLevel := close[1] < dnLevel[1] ? math.min(dn, dnLevel[1]) : dn
trend := close > dnLevel[1] ? 1 : close < upLevel[1] ? -1 : nz(trend[1], 1)
// Filtr SMA i aktualizacja trendWithFilter
trendWithFilter := close > sma200 ? math.max(trend, 0) : math.min(trend, 0)
// Logika wejścia
longCondition = trend == 1
shortCondition = trend == -1
// Wejście w pozycje
if (longCondition) and close > sma200
strategy.entry("Long", strategy.long)
if (shortCondition) and close < sma200
strategy.entry("Short", strategy.short)
// Warunki zamknięcia pozycji
Long_close = trend == -1 and close > sma200
Short_close = trend == 1 and close < sma200
// Zamknięcie pozycji
if (Long_close)
strategy.close("Long")
if (Short_close)
strategy.close("Short")
// Kolory superTrendu z filtrem sma200
trendColor = trendWithFilter == 1 ? color.green : trendWithFilter == -1 ? color.red : color.blue
//ploty
plot(trendWithFilter == 1 ? upLevel : trendWithFilter == -1 ? dnLevel : na, color=trendColor, title="SuperTrend")
// Stop Loss ( this code is from author RafaelZioni, modified by wielkieef )
per(procent) =>
strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
// --------------------------------------------------------------------------------------------------------------------
strategy.exit('SL',loss=per(sl))
//by wielkieef