Multi-Zeitrahmen-Adaptive Stop-Loss-Strategie für die Verfolgung

Schriftsteller:ChaoZhang, Datum: 2023-11-21 11:07:44
Tags:

img

Übersicht

Diese Strategie berechnet die umfassenden Signale mehrerer technischer Indikatoren, um die Trendrichtung im aktuellen Zeitrahmen zu bestimmen. Wenn sie als Aufwärtstrend beurteilt wird, wird eine Tracking-Stop-Loss-Linie an einem relativ hohen Punkt gesetzt; wenn sie als Abwärtstrend beurteilt wird, wird eine Tracking-Stop-Loss-Linie an einem relativ niedrigen Punkt gesetzt. Die Strategie kann die Stop-Loss-Linie anpassungsfähig anpassen, um die Risikokontrolle zu erreichen.

Grundsätze

Die Strategie kombiniert mehrere Indikatoren wie gleitende Durchschnitte, ATR, KD und Varianzrate, um die allgemeine Trendrichtung im aktuellen Zeitrahmen zu bestimmen.

  1. Gleitender Durchschnittsrichtungssignal
  2. KD-Indikator Überkauftüberverkauft Signal
  3. Preis-Volumen-Divergenzsignal
  4. Kanaldurchbruchsignal
  5. Mehrzeitrahmen kombiniertes Versuchs- und Fehlersignal
  6. R-Signal in Prozent
  7. Gleitender Durchschnittsregressionssignal
  8. Durchbruchsignal des ATR-Kanals

Jedes Teilsignal wird glättet und verschiedene Schwellenwerte festgelegt, um Kauf/Verkauf zu beurteilen. Dann werden die Teilsignale gewichtet, um das Gesamtsignal im aktuellen Zeitrahmen zu berechnen. Wenn das Signal größer als 0 ist, wird es als Aufwärtstrend beurteilt. Wenn das Signal kleiner als 0 ist, wird es als Abwärtstrend beurteilt.

Wenn die Strategie als Aufwärtstrend beurteilt wird, setzt sie eine Tracking-Stop-Loss-Linie in der Nähe des vorherigen höheren Punktes; wenn sie als Abwärtstrend beurteilt wird, setzt sie eine Tracking-Stop-Loss-Linie in der Nähe des vorherigen unteren Punktes. Dies kann das Stop-Loss-Niveau dynamisch an die tatsächliche Preisbewegung anpassen, um den Zweck der Risikokontrolle zu erreichen.

Vorteile

Die Strategie integriert mehrere Indikatoren, um die aktuelle Trendrichtung zu beurteilen, wodurch die Richtigkeit der Beurteilung verbessert wird.

Am wichtigsten ist, dass die Strategie die Stop-Loss-Linie dynamisch anpassen und das Risikokontrollniveau entsprechend dem tatsächlichen Trend anpassen kann, um systemische Risiken abzusichern.

Risiken

Die Qualität des Trendsignals beeinflusst unmittelbar die Einstellung der Stop-Loss-Linie. Wenn das Urteil falsch ist, kann es dazu führen, dass die Stop-Loss-Level zu locker oder zu streng eingestellt wird. Darüber hinaus kann die Stop-Loss-Linie das Risiko von Marktmutationen nicht vollständig vermeiden.

Die Strategie muss auch das Gewinnniveau und die Stop-Loss-Distanz ausbalancieren. Wenn die Stop-Loss-Distanz zu nahe ist, kann dies zu einer übermäßigen Häufigkeit von Stop-Loss führen; wenn die Stop-Loss-Distanz zu weit ist, kann sie die Risiken nicht effektiv kontrollieren. Dies erfordert eine Parameteroptimierung für verschiedene Sorten und Zyklen.

Optimierungsrichtlinien

Es sollte in Betracht gezogen werden, Algorithmen für maschinelles Lernen einzuführen, um Modelle für die Beurteilung von Trendrichtungen mit historischen Daten zu trainieren, um die Richtigkeit der Beurteilung zu verbessern.

Verschiedene Parameterkombinationen testen, um die Stop-Loss-Distanz zu optimieren, z. B. die ATR-Zyklusparameter dynamisch anpassen, um sich an Veränderungen der Marktvolatilität anzupassen.

Volumenenergieindikatoren können auch kombiniert werden, um wahre Trends zu ermitteln und Signalfehler zu vermeiden, die durch Preis-Volumen-Divergenzen verursacht werden.

Zusammenfassung

Die Strategie beurteilt die aktuelle Trendrichtung durch die Integration mehrerer technischer Indikatoren und passt dementsprechend dynamisch die Tracking-Stop-Loss-Linie an. Sie zielt darauf ab, die Wirksamkeit von Stop-Loss und Kontrollhandelsrisiken zu verbessern. Die Strategieidee ist fortschrittlich und lohnt sich weiter zu optimieren und zu überprüfen.


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



Mehr