Параболическая стратегия SAR для отслеживания трендов

Автор:Чао Чжан, Дата: 2024-01-18 12:21:17
Тэги:

img

Обзор

Эта стратегия использует индикатор Parabolic SAR (Stop and Reverse) в сочетании с фильтрацией EMA для улучшения точности сигнала.

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

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

В частности, условия длительного входа:

  1. SAR ниже предыдущего закрытия и выше текущего закрытия;
  2. Текущая закрытие находится выше медленной EMA плюс смещение или быстрое EMA пересекается ниже медленной EMA;
  3. Текущее закрытие превышает значение SAR и медленная EMA плюс смещение.

Краткие условия вступления:

  1. SAR выше предыдущего закрытия и ниже текущего закрытия;
  2. Текущая закрытие находится ниже медленной EMA минус смещение или быстрая EMA пересекается над медленной EMA;
  3. Текущее закрытие ниже значения SAR и медленная EMA минус смещение.

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

Сочетая фильтрацию SAR и EMA, эта стратегия может хорошо определить направление тренда и уменьшить ложные сигналы.

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

  1. SAR может быстро реагировать на изменения цен и выявлять моменты переворота тренда.
  2. Фильтрация EMA подтверждает направление тренда и избегает ложных сигналов при использовании SAR в одиночку.
  3. Переход между быстрой и медленной EMA обеспечивает дополнительную точность сигнала.
  4. Прибыльность может быть улучшена за счет оптимизации параметров.

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

Эта стратегия сопряжена с некоторыми рисками:

  1. SAR и EMA могут генерировать неправильные сигналы на рынках с ограниченным диапазоном, что влияет на прибыльность.
  2. Эффект отставания может быть уменьшен сокращением периодов EMA.
  3. Стоп-лосс может быть легко достигнут во время высокой волатильности, что приводит к более высоким потерям.

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

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

  1. Оптимизируйте параметры SAR, такие как шаг и максимум, чтобы сделать его более чувствительным.
  2. Оптимизировать медленные и быстрые периоды EMA для поиска оптимальных комбинаций.
  3. Оптимизируйте смещение EMA, чтобы уменьшить ложные сигналы.
  4. Добавьте другие индикаторы, такие как MACD и KDJ для дополнительной фильтрации и точности.
  5. Оптимизировать стратегию стоп-лосса для сокращения потерь на одну сделку.

Заключение

Эта стратегия объединяет сильные стороны SAR и EMA для разработки гибкой системы следования трендам. В целом она обладает хорошей способностью обнаружения трендов и хорошо работает при отслеживании тенденций. Дальнейшие улучшения в оптимизации параметров и управлении рисками могут улучшить стабильность и прибыльность.


/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("SAR Trend Trader Strategy By: jhanson107", shorttitle="SAR Trend Trader Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


SlowEMALength = input(100, "Slow EMA Length")
FastEMALength = input(10, "Fast EMA Length")
emaoffset = input(1.00, "EMA Offset %")
start = input(0.01)
increment = input(0.005)
maximum = input(0.08)

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

psar = sar(start, increment, maximum)
ema = ema(close, SlowEMALength)
fastema = ema(close, FastEMALength)
offset = (emaoffset / 100) * ema

// Signals
long = high[1] < psar[2] and high >= psar[1] and close > ema + offset or crossunder(ema, fastema) and close > psar and close > ema + offset
short = low[1] > psar[2] and low <= psar[1] and close < ema - offset or crossover(ema, fastema) and close < psar and close < ema - offset

// Plot PSAR
plot(psar, title="PSAR", color = low < psar and not long ? green : red, trackprice=true)

//Barcolor
barcolor(close > psar and close > ema + offset and fastema > ema ? green : na)
barcolor(close > psar and close < ema + offset or close > psar and fastema < ema ? white : na)
barcolor(close < psar and close < ema - offset and fastema < ema and close? red : na)
barcolor(close < psar and close > ema - offset or close < psar and fastema > ema ? white : na)

//Plot EMA
plot(ema, color=blue, linewidth=1, transp=0, title="Slow EMA")
plot(fastema, color=purple, linewidth=1, transp=0, title="Fast EMA")


if(high > psar)
    strategy.close("Short")
    
if(low < psar)
    strategy.close("Long")
    
if(long and time_cond)
    strategy.entry("Long", strategy.long, comment="Long")
   
if(short and time_cond)
    strategy.entry("Short", strategy.short, comment="Short")

if (not time_cond)
    strategy.close_all()

Больше