
Esta estrategia utiliza una combinación de tres indicadores técnicos diferentes para construir una estrategia de arbitraje en varios períodos de tiempo, que permite obtener ganancias excedentarias de bajo riesgo al capturar tendencias de precios en diferentes períodos de tiempo.
Los tres indicadores técnicos utilizados en esta estrategia son el canal de Kelt (KC), el stop de volatilidad (Vstop) y el indicador de reunión de William (WAE). El canal de Kelt se utiliza para determinar si el precio está fuera del rango de la vía y, por lo tanto, emite una señal de negociación. El stop de volatilidad se utiliza para ajustar dinámicamente la posición de parada y reducir las pérdidas innecesarias al tiempo que se garantiza el stop.
Cuando el precio está por encima de la línea de salida del canal de Celt, se considera una señal de alza. Cuando el precio está por debajo de la línea de salida del canal de Celt, se considera una señal de baja.
El Stop Loss es una posición de pérdida que se ajusta de forma dinámica a la volatilidad de los precios y al ancho de canal. Al mismo tiempo que garantiza el stop, evita posiciones de pérdida demasiado conservadoras.
El índice William determina si el precio está en una fuerte tendencia alcista o bajista mediante el cálculo del MACD y la anchura del canal de la banda de Brin.
Mediante la combinación de estos tres indicadores, las señales de diferentes períodos de tiempo se verifican entre sí. Esto reduce la probabilidad de error y crea una lógica estratégica de optimización estable.
La mayor ventaja de esta estrategia reside en la precisión de las señales de negociación generadas por una combinación de múltiples indicadores. Los tres indicadores actúan en diferentes períodos de tiempo, se verifican entre sí, lo que reduce la probabilidad de error y aumenta la precisión de la señal. Además, la configuración de stop loss de la tasa de volatilidad es dinámica y puede ajustar la posición de stop loss en función de las fluctuaciones en tiempo real, para controlar aún más el riesgo.
En comparación con una sola estrategia de indicadores, la estrategia combinada puede proporcionar una señal de negociación más precisa y eficiente. Al mismo tiempo, los tres indicadores se complementan entre sí para formar un juicio de negociación en varios marcos de tiempo, y este diseño lógico es muy científico y razonable.
El principal riesgo de esta estrategia reside en que la configuración incorrecta de los parámetros puede causar una sobreadaptación. Los tres indicadores tienen un total de 8 parámetros, y la configuración incorrecta puede tener un efecto adverso en la estrategia. Además, la relación de peso entre los indicadores también necesita una configuración razonable, de lo contrario, las señales pueden compensarse entre sí y causar invalidez.
Para reducir estos riesgos, el proceso de configuración de parámetros debe tener en cuenta la adaptabilidad de los diferentes entornos del mercado y ajustarlos a la combinación óptima de parámetros a través del análisis de retroalimentación. Además, se debe ajustar adecuadamente la relación de peso entre los indicadores para garantizar que las señales de negociación se puedan disparar de manera efectiva.
El espacio de optimización de la estrategia se centra principalmente en dos aspectos: la optimización de los parámetros y la mejora de la estrategia de detención de pérdidas. En concreto, se puede comenzar desde los siguientes aspectos:
La selección de los parámetros indicadores de manera más científica y racional, la combinación de parámetros de optimización. Se puede utilizar un algoritmo para buscar los parámetros óptimos de acuerdo con objetivos como la maximización de los beneficios y la minimización del riesgo.
Mejorar las estrategias de parada de pérdidas para reducir aún más las pérdidas innecesarias y aumentar la tasa de éxito, siempre que se garantice la parada de pérdidas. Por ejemplo, la combinación de más indicadores como señal de parada o el ajuste gradual de la posición de parada.
Optimización de las relaciones de peso de los indicadores y la lógica de juicio de las señales de negociación, reduciendo la tasa de error. Se puede introducir más características de comportamiento de precios y construir reglas de juicio más estables y confiables.
Intentar introducir modelos de aprendizaje automático para optimizar los parámetros o usar programación de aprendizaje de refuerzo profundo para evaluar y mejorar la estrategia.
Esta estrategia construye un sistema de arbitraje a lo largo de un marco de tiempo mediante el uso de una combinación de los tres indicadores de la vía de Kelt, el stop de volatilidad y el indicador de William. La combinación de múltiples indicadores mejora la precisión de las señales de negociación y el stop dinámico controla el riesgo. Sin embargo, todavía hay espacio para mejorar la configuración y optimización de los parámetros.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("QuarryLake", overlay=true) ///Ultilized modified full kelly for this strategy = 36%
///Keltner channel///
nPeriod = input(title="Keltner Period", type=input.integer, defval=200, minval=1)
Mult = input(title="Keltner Mult", type=input.integer, defval=5, minval=1)
xPrice = ema(hlc3, nPeriod)
xMove = ema(high - low, nPeriod)
xMoveMult = xMove * Mult
xUpper = xPrice + xMoveMult
xLower = xPrice - xMoveMult
// plot(xPrice, color=red, title="KSmid")
p1 = plot(xUpper, color=color.white, title="KSup")
p2 = plot(xLower, color=color.white, title="KSdn")
fill(p1, p2, color=close > xUpper ? color.green : close < xLower ? color.red : color.white)
kclongcondition = close > xUpper
kcshortcondition = close < xLower
kccloselongcondition = crossunder(close, xUpper)
kccloseshortcondition = crossover(close, xLower)
///Volatility Stop///
length = input(title="Vstop length", type=input.integer, defval=3, minval=1)
mult1 = 1.5
atr_ = atr(length)
max1 = 0.0
min1 = 0.0
is_uptrend_prev = false
stop = 0.0
vstop_prev = 0.0
vstop1 = 0.0
is_uptrend = false
is_trend_changed = false
max_ = 0.0
min_ = 0.0
vstop = 0.0
max1 := max(nz(max_[1]), close)
min1 := min(nz(min_[1]), close)
is_uptrend_prev := nz(is_uptrend[1], true)
stop := is_uptrend_prev ? max1 - mult1 * atr_ : min1 + mult1 * atr_
vstop_prev := nz(vstop[1])
vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed := is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult1 * atr_ : min_ + mult1 * atr_ :
vstop1
plot(vstop, color=is_uptrend ? color.green : color.red, style=plot.style_line, linewidth=1)
vstoplongcondition = close > vstop
vstoplongclosecondition = crossunder(close, vstop)
vstopshortcondition = close < vstop
vstopshortclosecondition = crossover(close, vstop)
///Waddah Attar Explosion///
sensitivity = input(150, title="Sensitivity")
fastLength = input(20, title="FastEMA Length")
slowLength = input(40, title="SlowEMA Length")
channelLength = input(20, title="BB Channel Length")
mult = input(2.0, title="BB Stdev Multiplier")
DEAD_ZONE = nz(rma(tr(true), 100)) * 3.7
calc_macd(source, fastLength, slowLength) =>
fastMA = ema(source, fastLength)
slowMA = ema(source, slowLength)
fastMA - slowMA
calc_BBUpper(source, length, mult) =>
basis = sma(source, length)
dev = mult * stdev(source, length)
basis + dev
calc_BBLower(source, length, mult) =>
basis = sma(source, length)
dev = mult * stdev(source, length)
basis - dev
t1 = (calc_macd(close, fastLength, slowLength) -
calc_macd(close[1], fastLength, slowLength)) * sensitivity
t2 = (calc_macd(close[2], fastLength, slowLength) -
calc_macd(close[3], fastLength, slowLength)) * sensitivity
e1 = calc_BBUpper(close, channelLength, mult) -
calc_BBLower(close, channelLength, mult)
trendUp = t1 >= 0 ? t1 : 0
trendDown = t1 < 0 ? -1 * t1 : 0
waelongcondition = trendUp and trendUp > DEAD_ZONE and trendUp > e1
waeshortcondition = trendDown and trendDown > DEAD_ZONE and trendDown > e1
///Long Entry///
longcondition = kclongcondition and vstoplongcondition and waelongcondition
if longcondition
strategy.entry("Long", strategy.long)
///Long exit///
closeconditionlong = kccloselongcondition or vstoplongclosecondition
if closeconditionlong
strategy.close("Long")
///Short Entry///
shortcondition = kcshortcondition and vstopshortcondition and waeshortcondition
if shortcondition
strategy.entry("Short", strategy.short)
///Short exit///
closeconditionshort = kccloseshortcondition or vstopshortclosecondition
if closeconditionshort
strategy.close("Short")
///Free Hong Kong, the revolution of our time///