
Strategi ini menggunakan nilai purata RSI dan perubahan harga secara tiba-tiba untuk mengenal pasti trend dan titik-titik perubahan di pasaran. Gagasan utamanya adalah untuk mempertimbangkan kedudukan dalam keadaan RSI overbought dan oversold, dan mencari peluang untuk berbalik apabila terdapat perubahan harga secara tiba-tiba.
Mengira nilai purata RSI pada SMA. Apabila RSI pada SMA melintasi garis 60 atau melintasi garis 40 di bawah, pertimbangkan untuk mengambil kedudukan terbalik sebagai overbought dan oversold.
Apabila perubahan RSI melebihi nilai tertentu, ia dianggap sebagai perubahan mendadak. Ia berfungsi sebagai isyarat untuk membina kedudukan terbalik selepas mengesahkan harga penutupan sebenar.
Dengan menggunakan penyaringan EMA berbilang baris, hanya apabila harga melalui EMA dengan kitaran yang lebih pendek di atas, akan dipertimbangkan untuk membina banyak kepala; hanya apabila harga melalui EMA dengan kitaran yang lebih pendek di bawah, akan dipertimbangkan untuk membina kepala kosong.
Dengan menggunakan RSI, perubahan mendadak dan penapisan EMA, mencari kedudukan yang lebih baik.
Menggunakan nilai purata RSI lebih tepat untuk menilai fenomena overbought dan oversold, yang membantu untuk merebut peluang untuk berbalik.
Perubahan mendadak sering menandakan perubahan trend dan arah harga, dan menggunakan isyarat ini dapat meningkatkan ketepatan masa masuk.
Penapisan berbilang gerak EMA dapat mengelakkan isyarat yang salah, sehingga mengurangkan kerugian yang tidak perlu.
Menggabungkan pelbagai parameter sebagai kriteria penghakiman dapat meningkatkan kestabilan dan kebolehpercayaan strategi.
RSI menunjukkan ketidakstabilan, nilai SMA tidak tinggi. Anda boleh mengoptimumkan parameter RSI dengan sewajarnya atau menggunakan penunjuk lain sebagai pengganti.
Perubahan mendadak mungkin berpunca daripada gegaran jangka pendek, dan bukannya pembalikan sebenar. Panjang kitaran sensasi boleh ditingkatkan untuk meningkatkan ketepatan penghakiman.
Penapisan arah EMA mempunyai keterlambatan. EMA yang lebih pendek boleh diuji untuk meningkatkan kepekaan.
Secara keseluruhannya, strategi ini agak sensitif terhadap penyesuaian parameter, memerlukan ujian yang teliti untuk mencari kombinasi parameter yang optimum.
Uji ADX, MACD, dan lain-lain dalam kombinasi dengan RSI untuk mencari tempat masuk yang lebih baik.
Menambah algoritma pembelajaran mesin untuk menilai keaslian dan kestabilan isyarat beli dan jual yang tiba-tiba melalui latihan model.
Meningkatkan lagi kesan penapisan arah EMA, seperti peningkatan penilaian komprehensif EMA untuk tempoh yang berbeza.
Tambah strategi penangguhan kerugian yang beradaptasi, yang membolehkan anda menyesuaikan stop loss secara dinamik mengikut tahap turun naik pasaran.
Teruskan mengoptimumkan parameter untuk mencari kombinasi parameter yang terbaik. Kriteria penilaian pengoptimuman boleh mempertimbangkan nisbah Sharp dan sebagainya.
Strategi ini mula-mula menggunakan nilai purata RSI untuk menentukan keadaan overbought dan oversold. Kemudian, ia membina kedudukan terbalik apabila terdapat perubahan mendadak. Ia juga menggunakan EMA untuk penapisan tambahan. Dengan parameter yang munasabah, ia dapat menentukan titik perubahan tren pasaran dengan berkesan. Secara keseluruhan, strategi ini stabil dan mempunyai nilai sebenar.
/*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)