Стратегия твердости как скалы

Автор:Чао Чжан, Дата: 2023-12-19 13:54:05
Тэги:

img

Обзор

Эта стратегия называется The Solid as a Rock VIP Quant Strategy. Она сочетает в себе индикатор Modified WMA и индикатор SSL Channel для создания стабильной и надежной количественной торговой структуры.

Принцип

Стратегия включает в себя два индикатора. Один из них - модифицированный индикатор WMA, который рассчитывает среднюю цену каждой свечи, а затем применяет метод экспоненциальной скользящей средней для определения направления тренда. Другой - индикатор SSL Channel, который использует скользящие средние самых высоких и самых низких цен для определения ценового канала и оценки текущего состояния тренда.

Когда индикатор Modified WMA генерирует сигнал покупки, то есть золотой крест, мы объединяем индикатор SSL Channel, чтобы определить, подходит ли цена в канале. Если тело свечи полностью ниже нижнего предела канала, мы разместим ордер на покупку.

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

  1. Объединение двух индикаторов делает сигнал покупки более надежным, чтобы избежать ложных прорывов.
  2. Модифицированный индикатор WMA может определить поворотные моменты более точно.
  3. Канал SSL четко оценивает канал цены, чтобы избежать покупки на высоких уровнях.
  4. Использование метода экспоненциальной скользящей средней более благоприятствует определению долгосрочных тенденций.

Риски и решения

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

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

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

Резюме

Благодаря изобретательному сочетанию модифицированного индикатора WMA и индикатора SSL Channel эта стратегия создает стабильную и надежную количественную торговую структуру. Она обладает сильной способностью фильтровать рыночный шум, избегая риска покупки на высоких уровнях. При правильной настройке параметров и определенных оптимизациях это будет высокопроизводительная стратегия.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
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/
// © Darshana_Alwis

//@version=5
strategy("VIP", overlay=true, initial_capital=1000,currency=currency.USD,default_qty_type=strategy.percent_of_equity,default_qty_value=100,pyramiding=0)
//SSS = Sultan+Saud Strategy

//The original idea of the code belonges to saudALThaidy
//The strategy code is basically made out of two other indicators, edited and combined by me.
// 1- NSDT HAMA Candles => https://www.tradingview.com/script/k7nrF2oI-NSDT-HAMA-Candles/
// 2- SSL Channel => https://www.tradingview.com/script/6y9SkpnV-SSL-Channel/


//MA INFO
WickColor = input.color(color.rgb(80, 80, 80, 100), title='Wick Color', tooltip='Suggest Full Transparency.')
LengthMA = input.int(100, minval=1, title='MA Line Length', inline='MA Info')
TakeProfit = input.float(1, minval=0, title='Take Profit Percentage', step=1)
UseStopLose = input.bool(false, title='Use Stop Percentage')
StopLose = input.float(1, minval=0, title='StopLose Percentage', step=1)

MASource = close

ma(source, length, type) =>
    type == "SMA" ? ta.sma(source, length) :
     type == "EMA" ? ta.ema(source, length) :
     type == "SMMA (RMA)" ? ta.rma(source, length) :
     type == "WMA" ? ta.wma(source, length) :
     type == "VWMA" ? ta.vwma(source, length) :
     na

ma1_color  = color.rgb(230, 172, 0)
ma1 = ma(high, 200, "SMA")

ma2_color  = color.red
ma2 = ma(low, 200, "SMA")

Hlv1 = float(na)
Hlv1 := close > ma1 ? 1 : close < ma2 ? -1 : Hlv1[1]
sslUp1   = Hlv1 < 0 ? ma2 : ma1
sslDown1 = Hlv1 < 0 ? ma1 : ma2

Color1 = Hlv1 == 1 ? ma1_color : ma2_color
fillColor1 = color.new(Color1, 90)

highLine1 = plot(sslUp1, title="UP", linewidth=2, color = Color1)
lowLine1 = plot(sslDown1, title="DOWN", linewidth=2, color = Color1)

OpenLength = 25
HighLength = 20
LowLength = 20
CloseLength = 20


     
SourceOpen = (open[1] + close[1]) / 2
SourceHigh = math.max(high, close)
SourceLow = math.min(low, close)
SourceClose = (open + high + low + close) / 4

funcCalcMA1(src1, len1) => ta.ema(src1, len1)
funcCalcOpen(SourceOpen, OpenLength) => ta.ema(SourceOpen, OpenLength)
funcCalcHigh(SourceHigh, HighLength) => ta.ema(SourceHigh, HighLength)
funcCalcLow(SourceLow, LowLength) => ta.ema(SourceLow, LowLength)
funcCalcClose(SourceClose, CloseLength) => ta.ema(SourceClose, CloseLength)

MA_1 = funcCalcMA1(MASource, LengthMA)

CandleOpen = funcCalcOpen(SourceOpen, OpenLength)
CandleHigh = funcCalcHigh(SourceHigh, HighLength)
CandleLow = funcCalcLow(SourceLow, LowLength)
CandleClose = funcCalcClose(SourceClose, CloseLength)

//PLOT CANDLES
//-------------------------------NSDT HAMA Candels
BodyColor = CandleOpen > CandleOpen[1] ? color.rgb(230, 172, 0) : color.red
barcolor(BodyColor)
plotcandle(CandleOpen, CandleHigh, CandleLow, CandleClose, color=BodyColor, title='HAMA Candles', wickcolor=WickColor, bordercolor=na)
plot(MA_1, title='MA Line', color=BodyColor, style=plot.style_line, linewidth=2)

//------------------------------SSL Channel


plot_buy = false
avg = ((high-low)/2)+low
LongCondition = (Hlv1 == 1 and Hlv1[1] == -1) and (BodyColor == color.rgb(230, 172, 0)) and (MA_1 < avg) and (CandleHigh < avg) and (strategy.opentrades == 0)
if LongCondition
    strategy.entry("BUY with VIP", strategy.long)
    plot_buy := true

base = strategy.opentrades.entry_price(0)
baseProfit = (base+((base/100)*TakeProfit))
baseLose = (base-((base/100)*StopLose))

strategy.exit("SELL with VIP","BUY with VIP",limit = baseProfit)
if UseStopLose and (close < MA_1)
    strategy.exit("SELL with VIP","BUY with VIP",stop = baseLose)
if not UseStopLose and (close < MA_1)
    strategy.exit("SELL with VIP","BUY with VIP", stop = close)
    
plotshape(plot_buy, title="Buy Label", text="Buy", location=location.belowbar, style=shape.labelup, size=size.tiny, color=Color1, textcolor=color.white)

fill(highLine1, lowLine1, color = fillColor1)


Больше