Основная стратегия SuperTrend

Автор:Чао Чжан, Дата: 2023-10-11 15:14:54
Тэги:

Обзор

Основная стратегия SuperTrend - это надежная и прибыльная алгоритмическая стратегия торговли, основанная на трех мощных индикаторах: SuperTrend (ATR), RSI и EMA. Она направлена на определение направления и силы рыночных тенденций, вход на рынок в оптимальные моменты и выход, когда достигнута остановка потери или получение прибыли.

Логика стратегии

Стратегия использует индикатор SuperTrend, чтобы определить, находится ли цена в восходящем или нисходящем тренде.

RSI используется для обнаружения условий перекупки/перепродажи. Выше 50 - бычье, а ниже 50 - медвежье. RSI фильтрует ложные сигналы.

EMA оценивает направление долгосрочного тренда. Выше EMA - восходящий тренд, ниже - нисходящий. Он подтверждает направление торговли.

Торговые сигналы:

Длинный вход: цена выше SuperTrend и RSI выше 50 и цена выше EMA Длинный выход: цена закрывается ниже SuperTrend или Stop loss или Take profit

Короткий вход: цена ниже SuperTrend и RSI ниже 50 и цена ниже EMA Короткий выход: цена закрывается выше SuperTrend или Stop loss или Take profit

Стоп-лосс и прибыль могут быть установлены в процентах от входной цены.

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

Преимущества этой стратегии:

  1. Комбинация трех индикаторов, надежное обнаружение тенденции

  2. СуперТренд четко определяет восходящий и нисходящий тренд

  3. RSI отфильтровывает ложные прорывы, избегает перекупа/перепродажи

  4. EMA подтверждает общее направление тренда

  5. Простые и понятные торговые сигналы, которые легко следовать

  6. Настраиваемый период ATR, параметры RSI и период EMA для оптимизации

  7. Стоп-потеря и получение прибыли для контроля риска

  8. Только длинный или только короткий режим для разных рынков

  9. Применимо к любому сроку

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

Основные риски:

  1. Отставание SuperTrend в обратном тренде может привести к потерям.

  2. Небольшая стоп-лосс/прибыль не поймает большие движения

  3. EMA не может обнаружить точки переворота тренда

  4. Отсутствие обнаружения расхождений

  5. Все еще есть риск волатильности и риск времени

Решения:

  1. Добавить другие индикаторы для обнаружения обратного движения

  2. Оптимизировать стоп-лосс/прибыль

  3. Добавление других показателей к спотовой реверсии

  4. Включить показатели дивергенции

  5. Настройка размера положения

Руководство по оптимизации

Способы оптимизации стратегии:

  1. Оптимизировать период ATR для чувствительности и стабильности

  2. Оптимизировать параметры RSI для более высокой точности

  3. Оптимизировать период EMA для различных рынков

  4. Добавьте такие индикаторы, как MACD, KD для обнаружения реверсии

  5. Добавить показатели расхождения

  6. Используйте волны Эллиота для обнаружения обратных движений

  7. Использование машинного обучения для динамической оптимизации параметров

  8. Продвинутые алгоритмы остановки потери, такие как отслеживание остановки потери

  9. Оптимизация размеров позиций для различной волатильности

  10. Испытать более сложные условия входа и выхода

Заключение

Основная стратегия SuperTrend объединяет SuperTrend, RSI и EMA в простую и практичную систему следования тренду. Она четко определяет направление тренда, отфильтровывает ложные сигналы и подтверждает общий тренд. Ясные правила входа, выхода и конфигурации стоп-лосс/стоп-прибыли. Легко в использовании, надежная прибыльность. Применима к любому временному диапазону. Ее можно дополнительно оптимизировать путем настройки параметров, добавления инструментов для обратного движения, улучшения остановок, чтобы стать более мощной торговой системой.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
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/
// © JS_TechTrading

//@version=5
// strategy("Supertrend", overlay=true,default_qty_type =strategy.percent_of_equity,default_qty_value = 1,process_orders_on_close = false)

// group string////
var string group_text000="Choose Strategy"
var string group_text0="Supertrend Settings"
var string group_text0000="Ema Settings"
var string group_text00="Rsi Settings"
var string group_text1="Backtest Period"
var string group_text2="Trade Direction"
// var string group_text3="Quantity Settings"
var string group_text4="Sl/Tp Settings"
////////////////////
option_ch=input.string('Pullback',title = "Type Of Strategy",options =['Pullback','Simple'])

//atr period input supertrend 
atrPeriod = input(10, "ATR Length",group = group_text0)
factor = input.float(3.0, "Factor", step = 0.01,group=group_text0)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

long=direction < 0 ? supertrend : na
short=direction < 0? na : supertrend

longpos=false
shortpos=false

longpos :=long?true :short?false:longpos[1]
shortpos:=short?true:long?false:shortpos[1]

fin_pullbuy= (ta.crossunder(low[1],long) and long and high>high[1])
fin_pullsell=(ta.crossover(high[1],short) and short and low<low[1]) 

//Ema 1
on_ma=input.bool(true,"Ema Condition On/Off",group=group_text0000)
ma_len= input.int(200, minval=1, title="Ema Length",group = group_text0000)
ma_src = input.source(close, title="Ema Source",group = group_text0000)
ma_out = ta.ema(ma_src, ma_len)

ma_buy=on_ma?close>ma_out?true:false:true
ma_sell=on_ma?close<ma_out?true:false:true

// rsi indicator and condition
// Get user input
en_rsi    = input.bool(true,"Rsi Condition On/Off",group = group_text00)
rsiSource = input(title='RSI Source', defval=close,group = group_text00)
rsiLength = input(title='RSI Length', defval=14,group = group_text00)
rsiOverbought = input(title='RSI BUY Level', defval=50,group = group_text00)
rsiOversold   = input(title='RSI SELL Level', defval=50,group = group_text00)

// Get RSI value
rsiValue = ta.rsi(rsiSource, rsiLength)

rsi_buy=en_rsi?rsiValue>=rsiOverbought ?true:false:true
rsi_sell=en_rsi?rsiValue<=rsiOversold?true:false:true

// final condition
buy_cond=option_ch=='Simple'?long and not(longpos[1]) and rsi_buy and ma_buy:option_ch=='Pullback'?fin_pullbuy and rsi_buy and ma_buy:na
sell_cond=option_ch=='Simple'?short and not(shortpos[1]) and rsi_sell and ma_sell:option_ch=='Pullback'?fin_pullsell and rsi_sell and ma_sell:na

//backtest engine
start = input(timestamp('2005-01-01'), title='Start calculations from',group=group_text1)
end=input(timestamp('2045-03-01'), title='End calculations',group=group_text1)
time_cond =true

// Make input option to configure trade direction

tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both',group = group_text2)

// Translate input into trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")



// strategy start
if buy_cond and longOK and time_cond and strategy.position_size==0
    strategy.entry('long',direction = strategy.long)
if sell_cond and shortOK and time_cond and strategy.position_size==0
    strategy.entry('short',direction =strategy.short)

// fixed percentage based stop loss and take profit 

// User Options to Change Inputs (%)
stopPer = input.float(1.0,step=0.10, title='Stop Loss %',group =group_text4) / 100
takePer = input.float(1.0,step =0.10, title='Take Profit %',group =group_text4) / 100

// Determine where you've entered and in what direction
longStop  = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake  = strategy.position_avg_price * (1 + takePer)


if strategy.position_size > 0
    strategy.exit(id='Close Long',stop=longStop, limit=longTake)
if strategy.position_size < 0
    strategy.exit(id='Close Short',stop=shortStop, limit=shortTake)

//PLOT FIXED SLTP LINE
plot(strategy.position_size > 0 ? longStop : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Fixed SL')
plot(strategy.position_size < 0 ? shortStop :na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Short Fixed SL')
plot(strategy.position_size > 0 ? longTake : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='Long Take Profit')
plot(strategy.position_size < 0 ? shortTake : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='Short Take Profit')

//

Больше