
Die Strategie verwendet eine Kombination aus einem Spiral-Indikator und einem Differenzrate-Indikator, um ein Kaufsignal zu erzeugen, wenn der Preis die Oberbahnlinie und die Mittellinie durchbricht. Gleichzeitig erzeugt die Strategie ein Verkaufsignal, wenn der Preis die Unterbahnlinie und die Mittellinie durchbricht. Die Strategie nutzt den Spiral-Indikator, um die Trendrichtung des Preises zu bestimmen, und verwendet die Differenzrate-Indikator, um die Preisdynamik zu erfassen, um ein Handelssignal auf der Grundlage der gleichzeitigen Bestätigung beider Indikatoren zu erzeugen, um eine bessere Gewinnrate zu erzielen.
Die Strategie basiert auf zwei Indikatoren:
Spiral-Kanäle: Berechnen Sie die Trendrichtung des Preises anhand der Auf- und Abwärtslinien. Wenn der Preis auftritt, steigt er, wenn er auftritt, und wenn er auftritt, sinkt er.
Der Differenzrate-Indikator (ROC) ermittelt, ob sich der Preis beschleunigt, um die Preisdynamik zu bestimmen. ROC ist größer als ein positiver Wert, um den Preis zu beschleunigen, und kleiner als ein negativer Wert, um den Preis zu beschleunigen.
Die Logik, ein Verkaufssignal zu erzeugen, ist ähnlich.
Diese Kombination erhöht die Signalzuverlässigkeit und verhindert blindes Handeln ohne eindeutige Trends.
Die Kombination von Preis- und Dynamiktrends ergab ein zuverlässiges Signal mit einer hohen Gewinnrate.
Durch die Optimierung von Parametern kann die Handelsfrequenz der Strategie angepasst werden. Zum Beispiel kann die Parameter der Differenzrate-Indikator angepasst werden, um die Empfindlichkeit der Positionseröffnung zu kontrollieren.
Die Einzelschäden werden mit Stop-Loss gesteuert. Die Parameter können benutzerdefiniert gesetzt werden.
Der Wiedereintrittsmechanismus kann Trends verfolgen und die Profitabilität weiter steigern.
Es ist nicht so, dass man sich mit den meisten Unternehmen, die sich in der Region befinden, vertraut machen kann.
Bei einem Durchbruch kann es zu großen Verlusten kommen, wenn sich der Kurs umkehrt.
Die falsche Einstellung der Parameter kann zu zu häufigen oder zu seltenen Handelssignalen führen.
Ein fester Stop-Loss-Prozentsatz verhindert nicht vollständig, dass größere Einzelschäden auftreten.
Die Parameter des Differenzratenindikators werden getestet, um die optimale Kombination zu finden.
Verschiedene Stop-Loss-Levels werden getestet, um die Gewinn- und Verlustquote zu balancieren.
Zusätzliche Filter für andere Indikatoren, z. B. für die Leistungs- und Schwingungsmessung, verbessern die Signalqualität.
Es wird versucht, die verschiedenen Märkte zu testen, um die Sorten zu finden, die am besten zu dieser Strategie passen.
Positionsmanagement zur Optimierung der Strategie, unterschiedliche Positionen unter verschiedenen Marktbedingungen.
Die Strategie kombiniert die Verwendung von Spiralkanälen und Differenzraten, um die Tendenz und Dynamik der Preise zu bestimmen, und die Fähigkeit, durch Wiedereintritt und Parameteroptimierung den Gewinn zu halten, während die Qualität der Handelssignale gewährleistet wird. Die Risikokontrolle basiert auf einem festen Prozentsatz des Stop-Losses und kann weiter optimiert werden.
/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("SSL Chaikin BF 🚀", overlay=true, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)
/////////////// Time Frame ///////////////
_0 = input(false, "════════ Test Period ═══════")
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
/////////////// Chaikin MF ///////////////
_1 = input(false, "═══════ Chaikin MF ═══════")
length = input(20, minval=1, title = "Chaikin SMA Length")
upperThreshold = input(0.04, step=0.01, title="Upper Threshold")
lowerThreshold = input(0.02, step=0.01, title="Lower Threshold")
ad = close==high and close==low or high==low ? 0 : ((2*close-low-high)/(high-low))*volume
mf = sum(ad, length) / sum(volume, length)
/////////////// SSL Channels ///////////////
_2 = input(false, "═════════ SSL ══════════")
len1=input(title="SMA Length 1", defval=12)
len2=input(title="SMA Length 2", defval=13)
smaHigh = sma(high, len1)
smaLow = sma(low, len2)
Hlv = 0
Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? smaHigh : smaLow
sslUp = Hlv < 0 ? smaLow : smaHigh
///////////// Rate Of Change /////////////
_3 = input(false, "══════ Rate of Change ══════")
source = close
roclength = input(13, "ROC Length", minval=1)
pcntChange = input(4, "ROC % Change", minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))
/////////////// Strategy ///////////////
long = sslUp > sslDown and isMoving() or crossover(mf, upperThreshold)
short = sslUp < sslDown and isMoving() or crossunder(mf, lowerThreshold)
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1])
//////////////// Stop loss ///////////////
_4 = input(false, "════════ Stop Loss ═══════")
sl_inp = input(2.0, title='Stop Loss %') / 100
slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("L", strategy.long, when=long)
strategy.entry("S", strategy.short, when=short)
strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)
/////////////// Plotting ///////////////
p1 = plot(sslDown, linewidth = 1, color=color.red)
p2 = plot(sslUp, linewidth = 1, color=color.lime)
fill(p1, p2, color = sslDown < sslUp ? color.lime : color.red, transp=80)
bgcolor(isMoving() ? long ? color.green : short ? color.red : na : color.white, transp=80)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(crossover(mf, upperThreshold) ? color.blue : crossunder(mf, lowerThreshold) ? color.orange : na, transp=30)