Strategi Perdagangan Rata-rata Gerak Pelangi

Penulis:ChaoZhang, Tanggal: 2023-09-28 11:01:59
Tag:

Gambaran umum

Strategi perdagangan Rata-rata Gerak Pelangi dirancang berdasarkan indikator Rata-rata Gerak Pelangi. Strategi ini mengidentifikasi arah tren melalui sistem rata-rata gerak pelangi dengan 7 rata-rata gerak, dan menyaring sinyal palsu dengan indikator RSI untuk mencapai entri berisiko rendah.

Logika Strategi

Strategi menghasilkan sinyal perdagangan melalui langkah-langkah berikut:

  1. Membangun sistem rata-rata bergerak pelangi. Ini berisi 7 rata-rata bergerak. Rata-rata bergerak pertama memiliki periode 12 dan mengambil harga penutupan sebagai data sumber.

  2. Tentukan arah tren. Jika rata-rata bergerak pertama berada di atas pelangi, tentukan sebagai tren naik. Jika berada di bagian bawah, tentukan sebagai tren turun. Jika berada di tengah, tentukan sebagai konsolidasi.

  3. Generasi sinyal. Ketika tren berubah dari uptrend ke downtrend, sinyal jual dihasilkan. Ketika tren berubah dari downtrend ke uptrend, sinyal beli dihasilkan. Ketika tren berubah dari konsolidasi ke uptrend atau downtrend, tutup posisi yang ada.

  4. Filter RSI. Hanya menerima sinyal ketika RSI menunjukkan status normal. RSI pertama harus berada di antara zona overbought dan oversold untuk menghindari breakout palsu. RSI kedua harus berada di luar zona tengah untuk memastikan momentum yang kuat.

Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Sistem rata-rata bergerak pelangi secara akurat mengidentifikasi arah tren. Beberapa rata-rata bergerak bergabung untuk menyaring kebisingan pasar dan pembalikan tren spot.

  2. Mekanisme filter RSI ganda secara efektif menghindari sinyal pecah palsu dan terjebak. RSI pertama memastikan berada di zona normal sementara RSI kedua menjamin momentum yang cukup kuat.

  3. Menggabungkan indikator tren dan pembalikan memungkinkan masuk tepat waktu pada pembalikan tren, sementara menghindari mengejar momentum.

  4. Penutupan posisi aktif selama konsolidasi menghindari risiko pasar yang terikat rentang.

  5. Strategi ini menawarkan ruang pengoptimalan parameter yang besar, yang dapat disesuaikan untuk produk dan kerangka waktu yang berbeda untuk mencapai hasil yang lebih baik.

Risiko

Risiko utama dari strategi ini:

  1. Perubahan tren yang tidak jelas dapat menghasilkan sinyal palsu dan menyebabkan kerugian.

  2. Optimalisasi parameter RSI dapat memperkuat filtrasi dalam konsolidasi.

  3. Penundaan pembalikan memperbesar kerugian setelah sinyal awal. Meningkatkan perbedaan periode rata-rata bergerak membuat sinyal lebih tepat waktu.

  4. Pengaturan parameter yang tidak benar dapat menyaring sinyal yang benar atau menyebabkan keterlambatan sinyal.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Optimasi parameter rata-rata bergerak, termasuk panjang periode, rasio periode, jenis MA dll, untuk membuat penilaian tren lebih akurat.

  2. Optimasi parameter RSI, termasuk periode, tingkat overbought/oversold, zona netral dll, untuk membuat filtrasi lebih tepat.

  3. Optimasi jangka waktu, untuk menemukan jangka waktu yang optimal.

  4. Optimalisasi produk, untuk menyesuaikan parameter dan aturan untuk menyesuaikan produk yang berbeda.

  5. Menambahkan stop loss dan mengambil keuntungan untuk mengontrol risiko dan ukuran keuntungan.

Kesimpulan

Strategi perdagangan rata-rata bergerak pelangi menggabungkan penentuan tren dan penyaringan sinyal untuk menangkap sinyal pembalikan secara efektif. Dengan penilaian yang akurat dan risiko yang dapat dikontrol, strategi ini dapat menjadi sangat praktis setelah penyesuaian parameter dan penyempurnaan logika. Secara keseluruhan, itu layak penelitian dan aplikasi yang mendalam.


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//╔════════════════════════════════════════════════════════════════════════════╗
//║Rainbow Backtesting base on "Rainbow Moving Average" Strategy as below:     ║
//║1.Rainbow Moving Average setup                                              ║
//║- Source: source of 1st MA                                                  ║
//║- Type: SMA/EMA                                                             ║
//║- Period: period of 1st MA                                                  ║
//║- Displacement: period of 2nd MA to 7th MA with source is previous MA       ║
//║2.Trend Define                                                              ║
//║- Up Trend: Main MA moving at the top of Rainbow                            ║
//║- Down Trend: Main MA moving at the bottom of Rainbow                       ║
//║- Sideway: Main MA moving between the top and the bottom of Rainbow         ║
//║3.Signal                                                                    ║
//║- Buy Signal: When Rainbow change to Up Trend.                              ║
//║- Sell Signal: When Rainbow change to Down Trend.                           ║
//║- Exit: When Rainbow change to Sideway.                                     ║
//║4.RSI Filter                                                                ║
//║- "Enable": Only signals have 1st RSI moving between Overbought and Oversold║
//║and 2nd RSI moving outside Middle Channel are accepted.                     ║
//║- The filter may help trader avoid bull trap, bear trap and choppy market.  ║
//╚════════════════════════════════════════════════════════════════════════════╝

//@version=4
strategy("Rainbow Strategy Backtesting",overlay=false)
//++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++ Rainbow Moving Average +++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++
rainbow_tt="=== Rainbow Moving Average ==="
ma1_source=input(hlc3,title="Source",type=input.source, inline="set1", group=rainbow_tt)
rb_type=input("SMA",title="Type",options=["SMA","EMA"], inline="set1", group=rainbow_tt)
ma1_len=input(12,title="Period", inline="set2", group=rainbow_tt)
dis_len=input(3,title="Displacement", inline="set2", group=rainbow_tt,minval=2)
trend_tt="=== Trend Color ==="
up_col=input(color.new(color.blue,0),title="Up",inline="Color",group=trend_tt)
dn_col=input(color.new(color.red,0),title="Down",inline="Color",group=trend_tt)
sw_col=input(color.new(color.yellow,0),title="No",inline="Color",group=trend_tt)
//1st
ma1=rb_type=="SMA"?sma(ma1_source,ma1_len):ema(ma1_source,ma1_len)
//2nd
ma2=rb_type=="SMA"?sma(ma1,dis_len):ema(ma1,dis_len)
//3rd
ma3=rb_type=="SMA"?sma(ma2,dis_len):ema(ma2,dis_len)
//4
ma4=rb_type=="SMA"?sma(ma3,dis_len):ema(ma3,dis_len)
//5
ma5=rb_type=="SMA"?sma(ma4,dis_len):ema(ma4,dis_len)
//6
ma6=rb_type=="SMA"?sma(ma5,dis_len):ema(ma5,dis_len)
//7
ma7=rb_type=="SMA"?sma(ma6,dis_len):ema(ma6,dis_len)
//MinMax
rb_max=max(ma1,ma2,ma3,ma4,ma5,ma6,ma7)
rb_min=min(ma1,ma2,ma3,ma4,ma5,ma6,ma7)
dir_col=
       ma1==rb_max?up_col:
       ma1==rb_min?dn_col:
       sw_col
dir_style=shape.circle
plotshape(dir_col[1]==dir_col?0:na,title="Trend",style=dir_style,color=dir_col,location=location.absolute)
//++++++++++++++++++++++++++++++++++++++
//+++++++++++++ RSI Filter +++++++++++++
//++++++++++++++++++++++++++++++++++++++
rsi_tt="=== RSI Filter ==="
rsi_filter=input("Enable",title="Filter",options=["Enable","Disable"],inline="set",group=rsi_tt)
over_tt="Over Filter"
rsi_len_1=input(12,title="Period",inline="set",group=over_tt)
rsi_ovb=input(65,title="Overbought",inline="set",group=over_tt)
rsi_ovs=input(35,title="Oversold",inline="set",group=over_tt)
rsi_1=rsi(close,rsi_len_1)
mid_tt="Middle Filter"
rsi_len_2=input(9,title="Period",inline="set",group=mid_tt)
rsi_mid_top=input(56,title="Upper",inline="set",group=mid_tt)
rsi_mid_bot=input(44,title="Lower",inline="set",group=mid_tt)
rsi_2=rsi(close,rsi_len_2)
//Status
var rsi_status="None"
if (rsi_1>rsi_ovs and rsi_1<rsi_ovb) and (rsi_2[1]<rsi_mid_bot or rsi_2[1]>rsi_mid_top)
    rsi_status:="Normal"
else
    rsi_status:="None"
//Signal
BuySignal= 
       rsi_filter=="Disable"?
       dir_col[1]!=up_col
       and
       dir_col[0]==up_col
       :
       dir_col[1]!=up_col
       and
       dir_col[0]==up_col
       and
       rsi_status=="Normal"
       
SellSignal= 
       rsi_filter=="Disable"?
       dir_col[1]!=dn_col
       and
       dir_col[0]==dn_col
       :
       dir_col[1]!=dn_col
       and
       dir_col[0]==dn_col
       and
       rsi_status=="Normal"
       
exit=
       (dir_col[1]!=sw_col
       and
       dir_col[0]==sw_col)
buycol =
       BuySignal?
       up_col: na

sellcol =
       SellSignal?
       dn_col: na

exitcol =
       exit?
       sw_col: na

buy_style=shape.arrowup
sell_style=shape.arrowdown
exit_style=shape.square
plotshape(BuySignal?0:na,title="Buy",text="Buy",style=buy_style,color=buycol,location=location.absolute)
plotshape(SellSignal?0:na,title="Sell",text="Sell",style=sell_style,color=sellcol,location=location.absolute)
plotshape(exit?0:na,title="Exit",text="Exit",style=exit_style,color=exitcol,location=location.absolute)

filter=
       rsi_filter=="Enable"?
       dir_col[1]!=dir_col 
       and BuySignal==false 
       and SellSignal==false 
       and exit==false:
       na
filter_style=shape.xcross
filtercol=
       filter?
       dir_col:na
plotshape(filter?0:na,title="Filter",text="Filter",style=filter_style,color=filtercol,location=location.absolute)

//+++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++ Backtesting ++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++
strategy.entry("Long", strategy.long, when=BuySignal)
strategy.close("Long", when=exit or filter)
strategy.entry("Short", strategy.short, when=SellSignal)
strategy.close("Short", when=exit or filter)
//EOF

Lebih banyak