Diese Strategie kombiniert die relativ starken (RSI) Indikatoren mit dem K-Linien-Form-Modell, um bestimmte K-Linien-Formen als Einstiegssignale zu identifizieren, wenn der RSI zu einem überkauften und überverkauften Bereich gelangt, um einen Trend zu verfolgen.
Berechnen Sie den Wert des RSI-Indikators mit 30 als Überverkauf und 70 als Überkauf.
Wenn der RSI unter 30 liegt, ist dies ein Überverkaufssignal, wenn er unter 70 liegt, ist dies ein Überkaufsignal.
Beurteilen Sie, ob die aktuelle K-Leitung oder eine vorherige K-Leitung eine bestimmte Form wie eine weiße/schwarze Entität, eine Kopf-/Hohlrad-Leitung bildet, wenn die oben genannten Signale auftreten.
Wenn gleichzeitig die Bedingungen für die Form des RSI-Signals und der K-Linie erfüllt werden, wird ein Kauf-/Verkaufssignal erzeugt.
Entsprechend wird bei der Bildung von mehrköpfigen Formen wie Bindungslinien bei Überverkauf des RSI gekauft; bei der Bildung von leeren Formen wie Shooting Stars bei Überkauf des RSI verkauft.
Identifizieren Sie komplexe Kombinations-Candlestick-Muster, wie z. B. Doppel- oder Dreilinien-Formen, als Einstiegssignale.
Der RSI-Rückschritt durch die Mittellinie dient auch als Ausgleichssignal.
Die Kombination von Indikatoren und Formen filtert falsche Signale und erhöht die Genauigkeit der Einreise.
Die K-Linien-Formen werden identifiziert, um deutliche Trendwendepunkte zu erfassen.
Der RSI-Überkauf-Überverkauf-Bereich ist ein Signal, um die Gewinnchancen zu erhöhen.
Die Kombination von zwei oder drei Formen kann als Trendwendepunkt verwendet werden.
Der RSI durchquert die Mittellinie als Stop/Stopp-Signal und ist für die Gewinnschließung von Vorteil.
Der RSI ist nachlässig und könnte einen Wendepunkt verpassen.
Ein Teil des K-Linien-Formals ist schwach und kann ein falsches Signal enthalten.
Es besteht die Gefahr, dass die Pre-Breakout-Höhe und die Pre-Retest-Tiefe als Stop-Loss-Signal nicht berücksichtigt werden.
Ohne ein mobiles Stop-Loss kann ein starker Umschlag zu einer Verlustvergrößerung führen.
Die Daten sind unzureichend, was zu einer Fehlverteilung der Parameteroptimierung führen kann.
In Kombination mit anderen Indikatoren filtern Sie die Einstiegssignale, wie MACD, Brinband usw.
Hinzufügen einer Trendlinie als Stop-Loss-Stop.
Optimierung der RSI-Parameter nach Rückmeldungsergebnissen und Suche nach der optimalen Parameterkombination.
Optimierung von Stop-Loss-Stopp-Strategien, wie Tracking-Stops, Intervall-Stops usw.
Daten für längere Zeiträume zu testen, um die Parameterstabilität zu bewerten.
Anpassung der Parameter an die verschiedenen Sorten und Marktbedingungen.
Diese Strategie integriert die Vorteile der RSI-Indikator und K-Line-Form-Erkennung, die in der Überkauf-Überverkauf-Punkt-Auswahl von qualitativ hochwertigen Signal Eingang zu erreichen, Trend-Tracking-Effekt. Gleichzeitig zu identifizieren, einige der stärkeren Kombination Form-Signal, kann die Gewinnwahrscheinlichkeit zu erhöhen. Aber es gibt eine gewisse Verzögerung, das Risiko von falschen Signalen, die in Zusammenarbeit mit anderen Mitteln verwendet werden müssen, und weiter optimiert werden.
/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
/////////////////////////////////////
//@version=2
//@author=sb
strategy("RSI-candlestick Strategy", overlay=true)
src = hlc3, len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
//plot(rsi, color=purple)
//band1 = hline(70)
//band0 = hline(30)
//band2 = hline(50,linestyle=dotted,color=silver)
//fill(band1, band0, color=#cc99ff, transp=70)
//end premade RSI
oversold = rsi < 30
overbought = rsi > 70
barcolor(oversold? #7fff00 : overbought? red : na )
//
//
level_70 = 70
level_70rsi = rsi > level_70 ? rsi : level_70
level_30 = 30
level_30rsi = rsi < 30 ? rsi : level_30
level_50 = 50
//
//p1 = plot(series=level_70, color=red, linewidth=1, transp=100)
//p2 = plot(series=level_70rsi, color=red, linewidth=1, transp=100)
//p3 = plot(series=level_30, color=green, linewidth=1, transp=100)
//p4 = plot(series=level_30rsi, color=green, linewidth=1, transp=100)
//fill(p1, p2, color=red, transp=50)
//fill(p3, p4, color=#7fff00, transp=50)
/////////////////////////////////////
bullishcriteria = input(title="RSI Bullish Criteria", defval=55, minval=50, maxval=100)
bearishcriteria = input(title="RSI Bearish Criteria", defval=45, minval=0, maxval=50)
range = high - low
body = abs(close - open)
oc2 = min(close, open) + body/2
upperwick = high - max(open, close)
lowerwick = min(open, close) - low
isUp = close > open
isTrendUp = rsi(close, 14) >= bullishcriteria
isTrendDown = rsi(close, 14) <= bearishcriteria
isDoji = abs(close-open)/(high-low) < 0.05
// Single Candlestick Pattern
// white marubozu
wm = (isUp) and (upperwick <= 0.05*body) and (lowerwick <= 0.05*body) and isTrendDown
plotshape(wm, color=green, style=shape.triangleup, location=location.belowbar, title='white marubozu',text='wm')
if (not na(rsi))
if (crossover(rsi, level_30) and (wm or wm[1]))
strategy.entry("RsiLE", strategy.long, comment="RsiLE")
// black marubozu
bm = (not isUp) and (upperwick <= 0.05*body) and (lowerwick <= 0.05*body) and isTrendUp
plotshape(bm, color=red, style=shape.triangledown, location=location.abovebar, title='black marubozu',text='bm')
if (not na(rsi))
if (crossunder(rsi, level_70)and (bm or bm[1]))
strategy.entry("RsiSE", strategy.short, comment="RsiSE")
// hammer
h = (isUp) and (lowerwick >= 2*body) and (upperwick <= 0.1*body) and isTrendDown
plotshape(h, color=green, style=shape.triangleup, location=location.belowbar, title='hammer',text='h')
if (not na(rsi))
if (crossover(rsi, level_30) and (h or h[1]))
strategy.entry("RsiLE", strategy.long, comment="RsiLE")
// hanging man
hm = (not isUp) and (lowerwick >= 2*body) and (upperwick <= 0.1*body) and isTrendUp
plotshape(hm, color=red, style=shape.triangledown, location=location.abovebar, title='hanging man',text='hm')
if (not na(rsi))
if (crossunder(rsi, level_70)and (hm or hm[1]))
strategy.entry("RsiSE", strategy.short, comment="RsiSE")
// inverted hammer
ih = (isUp) and (upperwick >= 2*body) and (lowerwick <= 0.1*body) and isTrendDown
plotshape(ih, color=green, style=shape.triangleup, location=location.belowbar, title='inverted hammer',text='ih')
//if (not na(rsi))
// if (crossover(rsi, level_30) and (ih or ih[1]))
// strategy.entry("RsiLE", strategy.long, comment="RsiLE")
// shooting star
ss = (not isUp) and (upperwick >= 2*body) and (lowerwick <= 0.1*body) and isTrendUp
plotshape(ss, color=red, style=shape.triangledown, location=location.abovebar, title='shooting star',text='ss')
if (not na(rsi))
if (crossunder(rsi, level_70)and (ss or ss[1]))
strategy.entry("RsiSE", strategy.short, comment="RsiSE")
// Double Candlestick Pattern
// bullish engulfing
bulle = not isDoji[1] and (not isUp[1] and isUp) and (close > open[1] and open < close[1]) and isTrendDown
plotshape(bulle, color=green, style=shape.triangleup, location=location.belowbar, title='bullish engulfing', text='e')
// bearish engulfing
beare = not isDoji[1] and (isUp[1] and not isUp) and (open > close[1] and close < open[1]) and isTrendUp
plotshape(beare, color=red, style=shape.triangledown, location=location.abovebar, title='bearish engulfing',text='e')
// tweezer bottom
twb = (not isUp[1] and isUp) and (min(lowerwick,lowerwick[1])/max(lowerwick,lowerwick[1]) >= 0.99) and (min(low,low[1])/max(low,low[1]) >= 0.99) and isTrendDown
plotshape(twb, color=green, style=shape.triangleup, location=location.belowbar, title='tweezer bottom', text='tb')
if (not na(rsi))
if (crossover(rsi, level_30) and (twb or twb[1]))
strategy.entry("RsiLE", strategy.long, comment="RsiLE")
// tweezer top
twt = (isUp[1] and not isUp) and (min(upperwick,upperwick[1])/max(upperwick,upperwick[1]) >= 0.99) and (min(high,high[1])/max(high,high[1]) >= 0.99) and isTrendUp
plotshape(twt, color=red, style=shape.triangledown, location=location.abovebar, title='tweezer top',text='tt')
if (not na(rsi))
if (crossunder(rsi, level_70)and (twt or twt[1]))
strategy.entry("RsiSE", strategy.short, comment="RsiSE")
// Trible Candlestick Pattern
// three white soldier
tws = (not isUp[3] and isUp[2] and isUp[1] and isUp) and (body[1]>body[2]) and (upperwick<0.1*body and lowerwick<0.1*body) and isTrendDown
plotshape(tws, color=green, style=shape.triangleup, location=location.belowbar, title='three white soldiers',text='tws')
if (not na(rsi))
if (crossover(rsi, level_30) and (tws or tws[1]))
strategy.entry("RsiLE", strategy.long, comment="RsiLE")
// three black crows
tbc = (isUp[3] and not isUp[2] and not isUp[1] and not isUp) and (body[1]>body[2]) and (upperwick<0.1*body and lowerwick<0.1*body) and isTrendUp
plotshape(tbc, color=red, style=shape.triangledown, location=location.abovebar, title='three black crows',text='tbc')
if (not na(rsi))
if (crossunder(rsi, level_70)and (tbc or tbc[1]))
strategy.entry("RsiSE", strategy.short, comment="RsiSE")
// morning star
ms = (not isUp[1]) and (abs(close[1]-open[1])/(high[1]-low[1]) < 0.1) and (close > oc2[2] and close < open[2]) and isTrendDown
plotshape(ms, color=green, style=shape.triangleup, location=location.belowbar, title='morning star',text='ms')
if (not na(rsi))
if (crossover(rsi, level_30) and (ms or ms[1]))
strategy.entry("RsiLE", strategy.long, comment="RsiLE")
// evening star
es = (isUp[1]) and (abs(close[1]-open[1])/(high[1]-low[1]) < 0.1) and (close < oc2[2] and close > open[2]) and isTrendUp
plotshape(es, color=red, style=shape.triangledown, location=location.abovebar, title='evening star',text='es')
//if (not na(rsi))
// if (crossunder(rsi, level_70)and (es or es[1]))
// strategy.entry("RsiSE", strategy.short, comment="RsiSE")
// three inside up
tiu = (not isUp[2]) and (close[1] > oc2[2] and close[1] < open[2]) and (close > high[2]) and isTrendDown
plotshape(tiu, color=green, style=shape.triangleup, location=location.belowbar, title='three inside up',text='tiu')
if (not na(rsi))
if (crossover(rsi, level_30) and (tiu or tiu[1]))
strategy.entry("RsiLE", strategy.long, comment="RsiLE")
// three inside down
tid = (isUp[2]) and (close[1] < oc2[2] and close[1] > open[2]) and (close < low[2]) and isTrendUp
plotshape(tid, color=red, style=shape.triangledown, location=location.abovebar, title='three inside down',text='tid')
if (not na(rsi))
if (crossunder(rsi, level_70)and (tid or tid[1]))
strategy.entry("RsiSE", strategy.short, comment="RsiSE")
if (not na(rsi))
if (crossover(rsi, level_70))
//strategy.exit("RsiSE")
//if(chk[1]==0 or chk[2]==0 or chk[3]==0 or chk[4]==0 or chk[5]==0 or chk[6]==0 or chk[7]==0 or chk[8]==0 or chk[9]==0 or chk[10]==0)
//if(crossover(col[1],zero) or crossover(col[2],zero) or crossover(col[3],zero) or crossover(col[4],zero) or crossover(col[5],zero) or crossover(col[6],zero) or crossover(col[7],zero) or crossover(col[8],zero))
//strategy.entry("RsiLE", strategy.long,0, comment="RsiLE")
strategy.entry("RsiSE", strategy.short,0, comment="RsiSE")
if (crossunder(rsi, level_30))
//strategy.entry("RsiSE", strategy.short,0, comment="RsiSE")
strategy.entry("RsiLE", strategy.long,0, comment="RsiLE")
//if (not na(rsi))
// if (crossover(rsi, level_50))
//strategy.exit("RsiSE")
//if(chk[1]==0 or chk[2]==0 or chk[3]==0 or chk[4]==0 or chk[5]==0 or chk[6]==0 or chk[7]==0 or chk[8]==0 or chk[9]==0 or chk[10]==0)
//if(crossover(col[1],zero) or crossover(col[2],zero) or crossover(col[3],zero) or crossover(col[4],zero) or crossover(col[5],zero) or crossover(col[6],zero) or crossover(col[7],zero) or crossover(col[8],zero))
// strategy.entry("RsiSE", strategy.short,0, comment="RsiSE")
// else
// strategy.exit("RsiSE")
// if (crossunder(rsi, level_50))
// strategy.entry("RsiLE", strategy.long,0, comment="RsiLE")
// else
// strategy.exit("RsiLE")