Strategi ini menggabungkan purata bergerak berganda, indeks kekuatan relatif (RSI) dan SAR parabolik (PSAR) untuk mengenal pasti titik pembalikan harga dan membuat keputusan membeli dan menjual dengan sewajarnya.
Strategi ini terutamanya menggunakan penunjuk teknikal berikut untuk menentukan titik pembalikan harga:
Purata bergerak berganda: Mengira purata bergerak pantas (garis pantas MA) dan purata bergerak perlahan (garis perlahan MA). Apabila garis pantas melintasi di atas garis perlahan, ia menunjukkan pasaran lembu dan pergi panjang. Apabila garis pantas melintasi di bawah garis perlahan, ia menunjukkan pasaran beruang dan pergi pendek.
Indikator RSI: Indikator RSI menilai keadaan overbought dan oversold dengan mengira purata keuntungan penutupan dan purata kerugian penutupan dalam tempoh masa.
Penunjuk PSAR: SAR Parabolik menunjukkan arah trend. Titik SAR di bawah harga menunjukkan pasaran lembu dan di atas harga menunjukkan pasaran beruang.
Indikator ADX: ADX mengukur kekuatan trend dengan mengira pergerakan arah. ADX di atas 20 menandakan pasaran yang sedang berkembang dan di bawah 20 menandakan penyatuan.
Logik untuk isyarat beli dan jual adalah seperti berikut:
Isyarat Beli: MA pantas melintasi di atas MA perlahan, RSI di bawah 30 (terlalu terjual), titik SAR di atas harga, ADX di atas 20.
Isyarat Jual: MA pantas melintasi di bawah MA perlahan, RSI di atas 70 (terlalu beli), titik SAR di bawah harga, ADX di atas 20.
Apabila isyarat beli atau jual berlaku, ambil kedudukan dengan 10% ekuiti masing-masing. Tutup kedudukan tepat pada masanya apabila isyarat pembalikan gagal.
MAs berganda menentukan arah trend utama, dengan RSI dan SAR menapis isyarat palsu, yang dapat mengenal pasti titik pembalikan dengan tepat.
Menggabungkan beberapa penunjuk menghalang isyarat yang salah dari satu penunjuk.
Stop loss mengelakkan risiko yang berlebihan.
Logik yang mudah dan jelas menjadikannya mudah dilaksanakan.
Ia berfungsi untuk kedua-dua trend menaik dan turun.
MAs berganda mungkin mempunyai pecah palsu. Pertimbangkan tempoh MA yang lebih lama atau menambah Bollinger Bands untuk mengesahkan pecah sebenar.
RSI boleh menghasilkan isyarat yang salah jika tidak ditetapkan dengan betul. fine tune parameter RSI dan menambah penunjuk lain untuk mengesahkan isyarat RSI.
Hentikan perdagangan apabila ADX di bawah 20 untuk mengelakkan perdagangan pembalikan di pasaran tanpa arah.
SetStringry stop loss boleh menyebabkan kerugian yang tidak perlu. Tetapkan stop loss yang munasabah berdasarkan turun naik pasaran.
Frekuensi perdagangan yang tinggi. Sesuaikan tempoh MA ke frekuensi perdagangan yang lebih rendah.
Uji tempoh MA yang berbeza untuk mencari kombinasi yang optimum.
Uji parameter RSI yang berbeza untuk penilaian overbought / oversold yang lebih baik.
Tambah penunjuk lain seperti Bollinger Bands, KDJ untuk memperkaya logik.
Tetapkan stop loss dinamik berdasarkan produk dan pasaran yang berbeza.
Tambah saiz kedudukan untuk lebih mengikuti trend.
Uji parameter ADX yang berbeza untuk mencari nilai terbaik untuk menentukan kekuatan trend.
Tambah fungsi kehilangan berhenti automatik.
Strategi ini mengenal pasti arah trend utama menggunakan MAs berganda, dan menggunakan RSI, SAR untuk penapisan isyarat tambahan. Ia dapat menentukan titik pembalikan selepas pengoptimuman parameter, dan menangkap trend di sekitar pembalikan. Dalam amalan, pengurusan risiko dengan stop loss yang betul, dan pengoptimuman parameter yang berterusan adalah penting. Secara keseluruhan, strategi menggabungkan penunjuk dengan logik yang jelas dan operasi yang mudah, menjadikannya strategi perdagangan pembalikan yang boleh dipercayai.
/*backtest start: 2023-10-10 00:00:00 end: 2023-11-09 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //Based on Senpai BO 3 strategy(title="Senpai_Strat_3", shorttitle="Senpai_Strat_3", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100) src = close //psar start = input(0.02) increment = input(0.02) maximum = input(0.2) psar = sar(start, increment, maximum) //ADX Init adxlen = input(30, title="ADX Smoothing") dilen = input(30, title="DI Length") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adx, plus, minus] [sig, up, down] = adx(dilen, adxlen) // BB Init source = close length = input(50, minval=1) mult = input(0.5, title="Mult Factor", minval=0.001, maxval=50) alertLevel=input(0.1) impulseLevel=input(0.75) showRange = input(false, type=bool) //RSI CODE up1 = rma(max(change(src), 0), 14) down1 = rma(-min(change(src), 0), 14) rsi = down1 == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up1 / down1)) //BB CODE basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev bbr = source>upper?(((source-upper)/(upper-lower))/10): source<lower?(((source-lower)/(upper-lower))/10) : 0.05 bbi = bbr - nz(bbr[1]) //////////////////// Algo //if (rsi>50 and n1>n2) //strategy.exit("Close", "Short") // strategy.entry("Long", strategy.long) //if (rsi<50 and n2>n1) //strategy.exit("Close", "Long") // strategy.entry("Short", strategy.short) //col = ma30 > ma50 > ma200 and rsi <=53?lime: ma50 < ma200 and rsi >= 60?red : silver //short1 = sig<18.5 and high>=upper and rsi>=70 and psar<close = 100% //long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close = 100% short1 = sig<18.5 and high>=upper and rsi>=70 and psar<close long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close //Entry long = long1[1] == 0 and long1 == 1 short = short1[1] == 0 and short1 == 1 longclose = long[3] == 1 shortclose = short[3] == 1 strategy.entry("short", strategy.short,qty = 10, when=short) strategy.entry("long", strategy.long,qty=10, when=long) strategy.close("long",when=longclose) strategy.close("short",when=shortclose) ///////////////////// ///PLOT plot(long,"long",color=green,linewidth=1) plot(short,"short",color=red,linewidth=1) plot(longclose,"close",color=blue,linewidth=1) plot(shortclose,"close",color=orange,linewidth=1) //plot(short,"short",color=red,linewidth=1) // //strategy.exit(id="long",qty = 100000,when=longclose) //strategy.exit(id="short",qty = 100000,when=shortclose) //strategy.exit(id="Stop", profit = 20, loss = 100)