Стратегия двойного SSL с EMA Stop Loss

Автор:Чао Чжан, Дата: 2023-11-06 16:52:11
Тэги:

img

Обзор

Эта стратегия объединяет индикатор Dual SSL и индикатор скользящей средней, используя индикатор Dual SSL для определения направления тренда рынка и скользящие средние для подтверждения тренда.

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

  1. Вычислить верхнюю рельсу, взяв SMA самой высокой цены за определенный период по сравнению с закрытием вчера. Вычислить нижнюю рельсу, взяв SMA самой низкой цены за определенный период по сравнению с закрытием вчера.

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

  3. Вычислить 200-периодную СВМ цены закрытия в качестве ориентира для среднесрочных и долгосрочных тенденций.

  4. При бычьем, если цена закрытия превышает SMA снизу, генерируется сигнал покупки. При медвежьем, если цена закрытия превышает SMA снизу, генерируется сигнал продажи.

  5. После входа в длинную позицию, если цена закрытия превышает верхний рельс, это сигнал закрытия. После входа в короткую позицию, если цена закрытия превышает нижний рельс, это сигнал закрытия.

  6. Установите фиксированную процентную точку стоп-лосса. Если цена закрытия превышает точку стоп-лосса, запускается ордер стоп-лосса.

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

  1. Использование индикатора Dual SSL для определения направления тренда может эффективно идентифицировать тенденции и увеличить вероятность выхода в правильном направлении.

  2. Добавление скользящих средних может отфильтровать некоторые шумные сигналы и избежать неправильных сделок на нестабильных рынках.

  3. Использование стоп-лосса для контроля риска одной сделки может эффективно избежать чрезмерных потерь.

  4. Логика стратегии относительно проста и легко понятна, подходит для начинающих.

Риски

  1. Показатель Dual SSL чувствителен к настройке параметров, различные комбинации периодов могут привести к очень разным результатам. Параметры должны быть тщательно оптимизированы.

  2. Слишком длинный МР отфильтровывает слишком много торговых возможностей, а слишком короткий не может эффективно обозначить.

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

  4. Стратегия в значительной степени опирается на оптимизацию параметров. Неправильные параметры могут не идентифицировать тенденции правильно, что приводит к неправильным торговым решениям.

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

  1. Проверить различные комбинации периодов, чтобы найти параметры, которые могут улучшить точность определения тренда для индикатора Dual SSL.

  2. Испытывать различные периоды МА для поиска оптимального баланса между деноизацией и сохранением сигналов.

  3. Исследуйте адаптивные стоп-потери, которые корректируются на основе волатильности рынка, чтобы сделать стоп-потерю более отзывчивой.

  4. Для повышения надежности включать другие индикаторы для подтверждения, такие как объем, слияние с несколькими временными рамками.

  5. Для обеспечения надежности следует проводить анализ развития оптимизированной стратегии.

Заключение

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


/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@Isaac
//Estrategia vista en ▼▼
//YT: Trading Zone
strategy('SSL Strategy + EMA 200 AND Stop Loss', overlay=true)

ema = ta.ema(close, 200)

stop_loss = input.float(2.00, title='Stop Loss', step=0.10)

period = input(title='Period', defval=10)
len = input(title='Period', defval=10)
smaHigh = ta.sma(high, len)
smaLow = ta.sma(low, len)
Hlv = int(na)
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh


cruceArriba = ta.crossover(sslUp, sslDown)
cruceAbajo = ta.crossunder(sslUp, sslDown)

alcista = (close > ema ) and (cruceArriba) 
bajista = (close < ema) and (cruceAbajo)

var SL = 0.0
//Cerrar compra por cruce
por_cruce = ta.crossunder(sslUp, sslDown)

//Cerrar venta por cruce
por_cruceAB = ta.crossunder(sslDown, sslUp)

//Cerrar compra y venta por stop loss
Stop = SL

comprado = strategy.position_size > 0
vendido = strategy.position_size < 0

UTmpconvertL = strategy.position_avg_price * (1 + 0.1)
UTmpdefineL = (UTmpconvertL > close and strategy.openprofit > 0.1)
UTSPL = UTmpdefineL

SPL = UTSPL

///////////////////////////////////////////////////////////////////////

UTmpconvertLS = strategy.position_avg_price * (1 + 0.1)
UTmpdefineLS = (UTmpconvertLS > close and strategy.openprofit > 0.1)
UTSPLS = UTmpdefineLS

SPLS = UTSPLS

////////////////////////////////////////////////////////////////////////

if not comprado and not vendido and alcista
    cantidad = (strategy.equity / close)
    strategy.entry('Compra', strategy.long, qty=cantidad, comment="Long")
    SL := sslDown


if comprado and not vendido and por_cruce and SPL
    strategy.close("Compra", comment="Exit Long")
    SL := 0
    
if comprado and not vendido and Stop
    strategy.exit('Compra', stop=Stop, comment="SL")
    SL := 0

///////////////////////////////////////////////////////////////////

if not comprado and not vendido and bajista
    cantidad = (strategy.equity / close)
    strategy.entry('Venta', strategy.short, qty=cantidad, comment="Short")
    SL := sslDown

if not comprado and vendido and por_cruceAB and SPLS
    strategy.close("Venta", comment="Exit Short")
    SL := 0
    
if not comprado and vendido and Stop
    strategy.exit('Venta', stop=Stop, comment="SLS")
    SL := 0



plot(Stop > 0 ? Stop : na, style=plot.style_circles, color=color.new(color.yellow,0))
plot(ema)
plot(sslDown, linewidth=2, color=color.new(color.red, 0))
plot(sslUp, linewidth=2, color=color.new(color.lime, 0))




Больше