
La estrategia determina la dirección de la tendencia en el marco temporal actual mediante el cálculo de una combinación de señales de varios indicadores técnicos. Si se determina que la tendencia es ascendente, se establece una línea de seguimiento de la pérdida en el punto más alto; Si se determina que la tendencia es bajista, se establece una línea de seguimiento de la pérdida en el punto más bajo. La estrategia puede adaptarse a diferentes variedades y diferentes marcos temporales y, mediante el ajuste dinámico de la línea de pérdida, lograr el control del riesgo.
La estrategia combina varios indicadores, como la línea media, ATR, KD y la tasa de cambio, para determinar la dirección de la tendencia general en el marco de tiempo actual. En concreto, calcula los valores combinados de las siguientes señales secundarias:
Cada una de las señales secundarias mencionadas anteriormente ha sido suavizada y se ha establecido un umbral diferente para determinar la compra/venta. Luego, cada señal secundaria ha sido ponderada para calcular la señal general en el marco de tiempo actual. Si la señal es mayor que 0, se juzga una tendencia alcista, y si la señal es menor que 0, se juzga una tendencia bajista.
Cuando se determina que la tendencia es ascendente, la estrategia establecerá una línea de seguimiento de stop loss cerca de los puntos más altos anteriores; cuando se determina que la tendencia es bajista, la estrategia establecerá una línea de seguimiento de stop loss cerca de los puntos más bajos anteriores. De esta manera, se puede ajustar dinámicamente el punto de parada de pérdida según el movimiento real de los precios para lograr el propósito de controlar el riesgo.
La estrategia integra varios indicadores para juzgar la dirección de la tendencia actual, lo que mejora la precisión de los juicios. Al mismo tiempo, la estrategia puede adaptarse a diferentes variedades y marcos de tiempo, con una mayor adaptabilidad.
Lo más importante es que la estrategia es capaz de ajustar dinámicamente los límites de pérdidas y los niveles de control de riesgo en función de las tendencias reales, lo que cubre el riesgo sistémico, que es su mayor ventaja.
Esta estrategia determina la calidad de las señales de tendencia que influyen directamente en la configuración de la línea de pérdidas, y si se comete un error en la determinación, puede provocar que la posición de pérdidas se ajuste demasiado suave o demasiado estricta. Además, la línea de pérdidas no puede evitar por completo el riesgo de que las tendencias cambien.
La estrategia también requiere un equilibrio entre el nivel de ganancias y la distancia de parada. Si la distancia de parada es demasiado cercana, puede provocar que la parada sea demasiado frecuente; si la distancia de parada es demasiado larga, no se puede controlar el riesgo de manera efectiva. Esto requiere la optimización de los parámetros según los diferentes ciclos de las diferentes variedades.
Se puede considerar la introducción de algoritmos de aprendizaje automático para mejorar la precisión de los juicios mediante el uso de modelos que entrenan la dirección de las tendencias con datos históricos.
Se pueden probar diferentes combinaciones de parámetros para optimizar la distancia de la línea de parada. Por ejemplo, se pueden ajustar dinámicamente los parámetros del ciclo ATR para adaptarse a los cambios en la volatilidad del mercado.
También se puede combinar con el indicador de energía del volumen de transacciones para determinar la tendencia real y evitar errores de señal causados por la desviación del precio de la medida.
La estrategia, mediante la integración de varios indicadores técnicos para determinar la dirección de la tendencia actual y, en consecuencia, ajustar dinámicamente el seguimiento de las líneas de stop loss, tiene como objetivo mejorar la efectividad de la detención de pérdidas y controlar el riesgo de las transacciones. La estrategia es una idea avanzada que merece ser optimizada y verificada, y es un marco de referencia para la estrategia de control de riesgo de adaptación múltiple.
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 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/
// © jigneshjc
//@version=5
strategy("Jigga - Survival Level", shorttitle='Jigga - Survival Level', overlay=true)
doBackTesting = input(true, 'Run Back Testing')
entryCondition = false
exitCondition = false
ab21 = 14, gh41 = ab21
gh42 = ab21, ju51 = 14
ki61 = ju51
lkolkp = true ,ab22 = 58
cd31 = 5 , ab23 = 42
aa12 = 29, cd32 = 26
op71 = 5, aa11 = 12
aa13 = 9, op72 = 2.0
movnwx = false
kahachale(byju, h, l) =>
mika = ta.change(h)
awer = -ta.change(l)
uikmhDM = na(mika) ? na : mika > awer and mika > 0 ? mika : 0
wrtdfcDM = na(awer) ? na : awer > mika and awer > 0 ? awer : 0
bbct = ta.rma(ta.tr, byju)
uikmh = fixnan(100 * ta.rma(uikmhDM, byju) / bbct)
wrtdfc = fixnan(100 * ta.rma(wrtdfcDM, byju) / bbct)
[uikmh, wrtdfc]
trial(gh42, gh41, h, l) =>
[uikmh, wrtdfc] = kahachale(gh42, h, l)
uuolop = uikmh + wrtdfc
trial = 100 * ta.rma(math.abs(uikmh - wrtdfc) / (uuolop == 0 ? 1 : uuolop), gh41)
trial
_pr(src, byjugth) =>
max = ta.highest(byjugth)
min = ta.lowest(byjugth)
100 * (src - max) / (max - min)
kyukarna(khulmkhula, mikaarwala, nichewala, bandhwala, partiwala) =>
sig = trial(gh42, gh41, mikaarwala, nichewala)
trialIncreasing = sig > ta.ema(sig, 5) ? lkolkp : movnwx
rolkmn = ta.ema(bandhwala, aa11)
psolkmn = ta.ema(bandhwala, aa12)
ujghd = rolkmn - psolkmn
wrtycv = ta.ema(ujghd, aa13)
kimnjg = ujghd - wrtycv
mikalilo = ta.rma(math.max(ta.change(bandhwala), 0), ab21)
awerlilo = ta.rma(-math.min(ta.change(bandhwala), 0), ab21)
lilo = awerlilo == 0 ? 100 : mikalilo == 0 ? 0 : 100 - 100 / (1 + mikalilo / awerlilo)
juylknlilo = ta.ema(lilo, 3)
rjuylkn = ta.ema(bandhwala, cd31)
psjuylkn = ta.ema(bandhwala, cd32)
percentR = _pr(bandhwala, ju51)
juylknpercentR = ta.ema(percentR, 3)
ad = bandhwala == mikaarwala and bandhwala == nichewala or mikaarwala == nichewala ? 0 : (2 * bandhwala - nichewala - mikaarwala) / (mikaarwala - nichewala) * partiwala
kiloValue = math.sum(ad, ki61) / math.sum(partiwala, ki61)
liiopn = ta.atr(op71)
mikaliiopn = (mikaarwala + nichewala) / 2 - op72 * liiopn
mika1liiopn = nz(mikaliiopn[1], mikaliiopn)
mikaliiopn := bandhwala[1] > mika1liiopn ? math.max(mikaliiopn, mika1liiopn) : mikaliiopn
dnliiopn = (mikaarwala + nichewala) / 2 + op72 * liiopn
dn1liiopn = nz(dnliiopn[1], dnliiopn)
dnliiopn := bandhwala[1] < dn1liiopn ? math.min(dnliiopn, dn1liiopn) : dnliiopn
omnerliiopn = 1
omnerliiopn := nz(omnerliiopn[1], omnerliiopn)
omnerliiopn := omnerliiopn == -1 and bandhwala > dn1liiopn ? 1 : omnerliiopn == 1 and bandhwala < mika1liiopn ? -1 : omnerliiopn
fitur = ujghd > 0 ? ujghd > wrtycv ? 1 : 0 : ujghd > wrtycv ? 0 : -1
mitur = kimnjg >= 0 ? kimnjg > kimnjg[1] ? 1 : 0 : kimnjg > kimnjg[1] ? 0 : -1
ritur = juylknlilo > ab22 ? 1 : juylknlilo < ab23 ? -1 : 0
circuits = rjuylkn > psjuylkn ? 1 : -1
trialPoints = trialIncreasing ? close > ta.ema(close, 3) ? 1 : -1 : 0
virar = juylknpercentR > -ab23 ? 1 : juylknpercentR < -ab22 ? -1 : 0
chikar = kiloValue > 0.1 ? 1 : kiloValue < -0.1 ? -1 : 0
sitar = omnerliiopn
p = fitur + mitur + ritur + circuits + trialPoints + virar + chikar + sitar
p
currentP = kyukarna(open, high, low, close, volume)
currentPNew = currentP >= 0 and currentP[1] <= 0 ? 0 : currentP <= 0 and currentP[1] >= 0 ? 0 : currentP
colorPNew = currentPNew == 0 ? color.black : currentPNew >= 0 ? color.green : color.red
//plot(currentPNew, color=colorPNew, title='CurrentTimeFrame')
LTN = 0.0
LTN := nz(LTN) ? 0.0 : (currentPNew[1] < 0 and currentPNew >= 0) ? high * 1.005 : (currentPNew[1] > 0 and currentPNew <= 0) ? low * 0.995 : LTN[1]
LClr = color.green
LClr := (currentPNew[1] < 0 and currentPNew >= 0) ? color.green : (currentPNew[1] > 0 and currentPNew <= 0) ? color.red : LClr[1]
plot(LTN,color=LClr,title="Level", style=plot.style_circles)
entryCondition:= high > LTN and LClr == color.green ? lkolkp : movnwx
exitCondition:= low < LTN and LClr == color.red ? lkolkp : movnwx
tradeRunning = movnwx
tradeRunning := nz(tradeRunning) ? movnwx : (not tradeRunning[1]) and entryCondition ? lkolkp : tradeRunning[1] and exitCondition ? movnwx : tradeRunning[1]
plotshape(tradeRunning and (not tradeRunning[1]) and (not doBackTesting), style=shape.labelup, location=location.belowbar, color=color.new(#00FF00, 50), size=size.tiny, title='Buy wrtycv', text='➹', textcolor=color.new(color.black,0))
plotshape((not tradeRunning) and tradeRunning[1] and (not doBackTesting), style=shape.labeldown, location=location.abovebar, color=color.new(#FF0000, 50), size=size.tiny, title='Sell wrtycv', text='➷', textcolor=color.new(color.white, 0))
if entryCondition and doBackTesting
strategy.entry(id="Buy",direction=strategy.long)
if exitCondition and doBackTesting
strategy.close(id="Buy")