El sólido como una roca VIP Quant Strategy

El autor:¿ Qué pasa?, Fecha: 2023-12-19 13:54:05
Las etiquetas:

img

Resumen general

Esta estrategia se llama The Solid as a Rock VIP Quant Strategy. Combina el indicador WMA modificado y el indicador SSL Channel para construir un marco comercial cuantitativo estable y confiable.

Principio

La estrategia incorpora dos indicadores. Uno es el indicador WMA modificado, que calcula el precio promedio de cada candelabro y luego aplica el método de promedio móvil exponencial para determinar la dirección de la tendencia. El otro es el indicador SSL Channel, que utiliza promedios móviles de los precios más altos y más bajos para determinar el canal de precios y juzgar el estado de la tendencia actual.

Cuando el indicador WMA modificado genera una señal de compra, es decir, la cruz de oro, combinamos el indicador del canal SSL para determinar si el precio en el canal es adecuado.

Ventajas

  1. La combinación de dos indicadores hace que la señal de compra sea más confiable para evitar falsos breakouts.
  2. El indicador WMA modificado puede determinar los puntos de inflexión con mayor precisión.
  3. El canal SSL juzga claramente el canal de precios para evitar comprar a niveles altos.
  4. El uso del método de la media móvil exponencial es más propicio para determinar las tendencias a largo plazo.

Riesgos y soluciones

  1. Los puntos de stop loss pueden ser fácilmente activados en mercados volátiles.
  2. Los sistemas de medias móviles son sensibles al ruido del mercado a corto plazo, lo que puede generar señales incorrectas.
  3. La configuración incorrecta de parámetros también puede afectar el rendimiento de la estrategia. Podemos optimizar los parámetros a través de backtesting para encontrar la mejor combinación de parámetros.

Direcciones de optimización

  1. Podemos probar diferentes tipos de promedios móviles, como EMA y VWMA, para encontrar el mejor indicador de línea promedio.
  2. Podemos añadir indicadores de volumen para evitar señales en áreas de bajo volumen.
  3. Podemos probar diferentes métodos de dibujo de canales, como el canal de Donchian, para hacer los límites del canal más confiables.
  4. Podemos añadir otros indicadores auxiliares, como el MACD y el RSI, para confirmar aún más el momento de entrada.

Resumen de las actividades

A través de la ingeniosa combinación del indicador WMA modificado y el indicador SSL Channel, esta estrategia construye un marco comercial cuantitativo estable y confiable. Tiene una fuerte capacidad para filtrar el ruido del mercado mientras evita el riesgo de comprar a altos niveles. Con la configuración adecuada de parámetros y ciertas optimizaciones, será una estrategia de alto rendimiento.


/*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)


Más.