Estrategia de seguimiento adaptativo de pérdida de pérdidas en varios plazos

El autor:¿ Qué pasa?, Fecha: 2023-11-21 11:07:44
Las etiquetas:

img

Resumen general

Esta estrategia calcula las señales integrales de múltiples indicadores técnicos para determinar la dirección de la tendencia en el marco de tiempo actual. Cuando se juzga como una tendencia alcista, una línea de stop loss de seguimiento se establece en un punto relativamente alto; cuando se juzga como una tendencia bajista, una línea de stop loss de seguimiento se establece en un punto relativamente bajo. La estrategia puede ajustar adaptativamente la línea de stop loss para lograr el control del riesgo.

Principio

La estrategia combina múltiples indicadores como promedios móviles, ATR, KD y tasa de variación para determinar la dirección general de la tendencia en el marco de tiempo actual.

  1. Signo de dirección media móvil
  2. Indicador KD señal de sobrecompra sobreventa
  3. Señales de divergencia precio-volumen
  4. Señales de despliegue del canal
  5. La señal combinada de ensayo y error de varios marcos de tiempo
  6. Porcentaje de señal R
  7. Signo de regresión de la media móvil
  8. señal de avance del canal ATR

Cada subsigna se suaviza y se establecen diferentes umbrales para juzgar la compra/venta. Luego se ponderan las subsignales para calcular la señal general en el marco de tiempo actual. Si la señal es mayor de 0, se juzga como una tendencia alcista. Si la señal es menor de 0, se juzga como una tendencia bajista.

Cuando se juzga como una tendencia alcista, la estrategia establece una línea de stop loss de seguimiento cerca del punto más alto anterior; cuando se juzga como una tendencia bajista, establece una línea de stop loss de seguimiento cerca del punto más bajo anterior.

Ventajas

La estrategia integra múltiples indicadores para juzgar la dirección actual de la tendencia, lo que mejora la precisión del juicio.

Lo más importante es que la estrategia puede ajustar dinámicamente la línea de stop loss y ajustar el nivel de control de riesgos de acuerdo con la tendencia real para cubrir los riesgos sistémicos.

Los riesgos

La calidad del juicio de la señal de tendencia afecta directamente el establecimiento de la línea de stop loss. Si el juicio es incorrecto, puede causar que el nivel de stop loss se establezca demasiado suelto o demasiado estricto. Además, la línea de stop loss no puede evitar completamente el riesgo de mutaciones del mercado.

La estrategia también necesita equilibrar el nivel de ganancia y la distancia de stop loss. Si la distancia de stop loss es demasiado cercana, puede causar una frecuencia excesiva de stop loss; si la distancia de stop loss es demasiado larga, no puede controlar eficazmente los riesgos. Esto requiere optimización de parámetros para diferentes variedades y ciclos.

Direcciones de optimización

Considere la introducción de algoritmos de aprendizaje automático para entrenar modelos para juzgar las direcciones de tendencia utilizando datos históricos para mejorar la precisión del juicio.

Pruebe diferentes combinaciones de parámetros para optimizar la distancia de stop loss. Por ejemplo, ajuste dinámicamente los parámetros del ciclo ATR para adaptarse a los cambios en la volatilidad del mercado.

Los indicadores de energía de volumen también pueden combinarse para determinar las tendencias verdaderas y prevenir los errores de señal causados por la divergencia precio-volumen.

Resumen de las actividades

La estrategia juzga la dirección de la tendencia actual mediante la integración de múltiples indicadores técnicos y, en consecuencia, ajusta dinámicamente la línea de seguimiento de stop loss. Su objetivo es mejorar la efectividad de la stop loss y controlar los riesgos comerciales. La idea de la estrategia es avanzada y vale la pena una mayor optimización y verificación.


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



Más.