SMA RSI & Plötzliche Kauf-Verkauf-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-20 17:33:04
Tags:

img

Übersicht

Diese Strategie verwendet hauptsächlich den Durchschnittswert des RSI und plötzliche Preisänderungen, um Markttrend und Umkehrpunkte zu identifizieren.

Grundsätze

  1. Berechnen Sie den SMA des RSI. Wenn der RSI SMA über 60 überschreitet oder unter 40 fällt, wird er als überkauft oder überverkauft betrachtet und umgekehrte Positionen werden berücksichtigt.

  2. Wenn die Veränderung des RSI einen bestimmten Wert überschreitet, wird sie als plötzliche Veränderung angesehen.

  3. Nur wenn der Preis über die kürzere EMA-Periode geht, wird eine Long-Position in Betracht gezogen. Nur wenn der Preis unter die kürzere EMA fällt, wird eine Short-Position in Betracht gezogen.

  4. Durch die Kombination von RSI-Durchschnitt, plötzlichen Veränderungen und EMA-Filterung können bessere Einstiegspunkte ermittelt werden.

Analyse der Vorteile

  1. Die Verwendung des RSI-Durchschnitts kann zu präzise überkaufte und überverkaufte Bedingungen beurteilen, was zur Erfassung von Umkehrmöglichkeiten beiträgt.

  2. Plötzliche Veränderungen bedeuten häufig Veränderungen der Kursentwicklung und -richtung. Mit diesem Signal kann die Aktualität der Einträge verbessert werden.

  3. Durch die Mehrstufegehandlung der EMA-Filterung können weitere falsche Signale vermieden und unnötige Verluste verringert werden.

  4. Die Kombination mehrerer Parameter als Entscheidungskriterien kann die Stabilität und Zuverlässigkeit der Strategie verbessern.

Risiken und Minderungsmaßnahmen

  1. Die RSI-Performance kann instabil sein und die SMA-Hit-Rate niedrig sein.

  2. Plötzliche Veränderungen könnten eher kurzfristige Schwankungen sein als echte Umkehrungen.

  3. Es gibt eine Verzögerung bei der EMA-Richtungsfilterung.

  4. Generell ist diese Strategie sehr empfindlich gegenüber Parameter-Tuning. Sorgfältige Tests sind notwendig, um optimale Parameterkombinationen zu finden.

Optimierungsvorschläge

  1. Testen Sie andere Indikatoren wie ADX, MACD in Kombination mit RSI, um bessere Einstiegspunkte zu finden.

  2. Erhöhung der Algorithmen für maschinelles Lernen zur Bewertung der Echtheit und Stabilität plötzlicher Kauf-/Verkaufssignale.

  3. Weiterentwicklung der EMA-Richtungsfilterung, wie z. B. die Verwendung von zusammengesetzten Beurteilungen verschiedener EMA-Perioden.

  4. Zusätzlich wird eine anpassungsfähige Stop-Loss-Strategie hinzugefügt, um den Stop-Loss-Bereich dynamisch anhand der Marktvolatilität anzupassen.

  5. Weiter optimieren Parameter, um optimale Parameterkombinationen zu finden.

Schlussfolgerung

Diese Strategie verwendet zunächst den RSI-Durchschnitt, um Überkauf-/Überverkaufszustände zu bestimmen. Bei plötzlichen Veränderungen werden dann umgekehrte Positionen eingerichtet. EMA wird auch als Hilfsfilter verwendet. Mit den richtigen Parameter-Einstellungen kann diese Strategie effektiv Markttrendverschiebungen bestimmen. Insgesamt hat sie gute Stabilität und praktischen Wert. Es gibt noch Raum für weitere Verbesserungen, die anhaltende Tests und Optimierungen erfordern.


/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-19 00:00:00
period: 3m
basePeriod: 1m
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/
// © samwillington

//@version=5


strategy("sma RSI & sudden buy and sell Strategy v1", overlay=true)
price = close
length = input( 14 )
inst_length = input( 10 )
var rbc = 0
var float rsiBP = 0.0
var rsc = 0
var float rsiSP = 0.0
bars = input(10)

lookbackno2 = input.int(20)
rsi_buy = 0
rsi_sell = 0



//EMA inputs

input_ema20 = input.int(20)
ema20 = ta.ema(price, input_ema20)
input_ema50 = input.int(50)
ema50 = ta.ema(price, input_ema50)
input_ema100 = input.int(100)
ema100 = ta.ema(price, input_ema100)
input_ema200 = input.int(200)
ema200 = ta.ema(price, input_ema200)
input_ema400 = input.int(400)
ema400 = ta.ema(price, input_ema400)
input_ema800 = input.int(800)
ema800 = ta.ema(price, input_ema800)


vrsi = ta.rsi(price, length)


hi2 = ta.highest(price, lookbackno2)
lo2 = ta.lowest(price, lookbackno2)

buy_diff_rsi = vrsi - ta.rsi(close[1], length)
sell_diff_rsi = ta.rsi(close[1],length) - vrsi


//RSI high low

var int sudS = 0
var int sudB = 0
var float sudSO = 0.0
var float sudSC = 0.0
var float sudBO = 0.0
var float sudBC = 0.0
var sudBuy = 0
var sudSell = 0 
var countB = 0
var countS = 0



var co_800 = false
var co_400 = false
var co_200 = false
var co_100 = false
var co_50 = false
var co_20 = false

co_800 := ta.crossover(price , ema800)
co_400 := ta.crossover(price , ema400)
co_200 := ta.crossover(price , ema200)
co_100 := ta.crossover(price , ema100)
co_50 := ta.crossover(price , ema50)
co_20 := ta.crossover(price , ema20)

if(ta.crossunder(price , ema20))
    co_20 := false
if(ta.crossunder(price , ema50))
    co_50 := false
if(ta.crossunder(price , ema100))
    co_100 := false
if(ta.crossunder(price , ema200))
    co_200 := false
if(ta.crossunder(price , ema400))
    co_400 := false
if(ta.crossunder(price , ema800))
    co_800 := false
    
if((price> ema800) and (price > ema400))
    if(co_20)
        if(co_50)
            if(co_100)
                if(co_200)
                    strategy.close("Sell")
                    strategy.entry("Buy", strategy.long, comment="spl Buy")
                    co_20 := false
                    co_50 := false
                    co_100 := false
                    co_200 := false



// too much rsi

if(vrsi > 90)
    strategy.close("Buy")
    strategy.entry("Sell", strategy.short, comment="RSI too overbuy")
if(vrsi < 10)
    strategy.close("Sell")
    strategy.entry("Buy", strategy.long, comment="RSI too oversold")


var sudbcount = 0  // counting no. of bars till sudden rise
var sudscount = 0  // counting no. of bars till sudden decrease



if(sudB == 1)
    sudbcount := sudbcount + 1
if(sudS == 1)
    sudscount := sudscount + 1


if((buy_diff_rsi > inst_length) and (hi2 > price))
    sudB := 1
    sudBO := open
    sudBC := close
if((sell_diff_rsi > inst_length) )
    sudS := 1
    sudSO := open
    sudSC := close   

if(sudbcount == bars)
    if(sudBC < price)
        strategy.close("Sell")
        strategy.entry("Buy", strategy.long, comment="sudd buy")
        sudbcount := 0
        sudB := 0
    sudbcount := 0
    sudB := 0
if(sudscount == bars) 
    if(sudSC > price)
        strategy.close("Buy")
        strategy.entry("Sell", strategy.short, comment="sudd sell")
        sudscount := 0
        sudS := 0
    sudscount := 0
    sudS := 0


over40 = input( 40 )
over60 = input( 60 )
sma =ta.sma(vrsi, length)
coo = ta.crossover(sma, over60)
cuu = ta.crossunder(sma, over40)

if (coo)
    strategy.close("Sell")
	strategy.entry("Buy", strategy.long, comment="modified buy")
if (cuu)
    strategy.close("Buy")
	strategy.entry("Sell", strategy.short, comment="modefied sell")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

Mehr