Надежная количественная стратегия VIP


Дата создания: 2023-12-19 13:54:05 Последнее изменение: 2023-12-19 13:54:05
Копировать: 1 Количество просмотров: 665
1
Подписаться
1621
Подписчики

Надежная количественная стратегия VIP

Обзор

Эта стратегия, получившая название VIP-квантификационная стратегия Rock solid, объединяет улучшенные William SMA и SSL Channel, создавая стабильную и надежную квантифицированную торговую структуру.

Принципы

Эта стратегия сочетает в себе два индикатора, один из которых является улучшенным William SMA, который определяет направление тенденции путем расчета средней цены на каждую K-линию, а затем применяет индексный метод движущихся средних. Другой - индикатор SSL-каналов, который использует движущуюся среднюю цены на самую высокую и самую низкую цены для определения ценового канала и оценки текущего состояния тенденции.

Когда улучшенный индикатор William SMA дает сигнал о покупке, то есть золотой форк, мы в сочетании с индикатором SSL-каналов определяем, является ли цена внутри канала подходящей, и мы открываем позицию на покупку в то время, когда объект K-линии полностью находится ниже нижнего предела канала.

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

  1. Комбинируя два показателя, мы делаем сигналы покупок более надежными и избегаем ложных прорывов.
  2. Усовершенствованный индикатор William SMA позволяет более точно определить точку перехода тренда.
  3. Показатель SSL-каналов позволяет четко определить ценовой канал и избежать покупки на высоком уровне.
  4. Применение метода скользящих средних индексов помогает лучше оценить долгосрочные тенденции.

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

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

Направление оптимизации

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

Подвести итог

Эта стратегия создает стабильную и надежную систему количественных сделок с помощью усовершенствованного сочетания показателей William SMA и 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)