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.
Die Strategie kombiniert mehrere Indikatoren wie gleitende Durchschnitte, ATR, KD und Varianzrate, um die allgemeine Trendrichtung im aktuellen Zeitrahmen zu bestimmen.
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.
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.
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.
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.
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")