Strategi trading Rainbow Moving Average didasarkan pada Rainbow Moving Average Indicator Design. Strategi ini didasarkan pada Rainbow Moving Average Indicator Design. Strategi ini menggunakan Rainbow Moving Average System yang terdiri dari 7 moving averages untuk menentukan arah tren, dengan RSI Indicator untuk memfilter sinyal palsu, dan memungkinkan masuk ke perdagangan berisiko rendah.
Strategi ini bertujuan untuk menghasilkan sinyal perdagangan melalui beberapa langkah:
Membangun sistem Rainbow Moving Average. Sistem ini terdiri dari 7 moving averages, di mana moving average pertama memiliki periode 12, dan sumber data adalah rata-rata harga close out.
Pertimbangkan arah tren. Jika moving average pertama berada di atas rata-rata bergerak pelangi, itu didefinisikan sebagai tren naik; jika di bawah, itu didefinisikan sebagai tren turun; jika di tengah, itu didefinisikan sebagai konsolidasi.
Membuat sinyal perdagangan. Membuat sinyal jual ketika tren dari sistem rata-rata bergerak pelangi berubah dari naik ke turun; Membuat sinyal beli ketika tren berubah dari turun ke naik; Memperbaiki posisi saat ini ketika tren berubah dari perombakan ke naik atau turun.
Filter RSI. Hanya menerima sinyal perdagangan ketika indikator RSI menunjukkan kondisi normal. Indikator RSI pertama diminta berada di antara zona overbought dan oversold, untuk menghindari false breakout.
Strategi ini memiliki keuntungan sebagai berikut:
Rainbow Moving Average System dapat menentukan arah tren secara akurat. Berbagai kombinasi Moving Average dapat secara efektif menyaring kebisingan pasar dan mengidentifikasi pembalikan tren.
RSI memiliki mekanisme penyaringan ganda yang efektif untuk menyaring sinyal false breakout dan menghindari kebocoran. RSI pertama memastikan berada di area normal, RSI kedua memastikan kekuatan breakout cukup besar.
Kombinasi dengan indikator tren dan reversal, Anda dapat masuk tepat waktu ketika tren berbalik, dan Anda juga dapat menghindari mengejar penurunan.
Untuk menghindari risiko regional selection yang dapat merusak pasar, Anda dapat melakukan penutupan aktif pada tahap penutupan.
Ada banyak ruang untuk mengoptimalkan parameter strategi ini, yang dapat dioptimalkan untuk varietas dan periode yang berbeda dengan menyesuaikan siklus rata-rata bergerak, rasio panjang, parameter RSI, dan lain-lain, sehingga mendapatkan efek yang lebih baik.
Strategi ini memiliki risiko utama sebagai berikut:
Ketika pembalikan tren tidak jelas, mungkin ada sinyal pembalikan palsu yang menyebabkan kerugian perdagangan. Periode rata-rata bergerak dapat disesuaikan dengan tepat untuk membuat sinyal pembalikan lebih jelas.
Ketika indikator muncul dalam periode jangka panjang, posisi damai akan sering dibuka, meningkatkan biaya transaksi dan kehilangan slippage. Anda dapat meningkatkan intensitas penyaringan pada tahap penyaringan dengan mengoptimalkan parameter RSI.
Ketika reversal lambat, setelah sinyal reversal, kerugian memperluas waktu dan ruang. Anda dapat meningkatkan selisih siklus rata-rata bergerak, sehingga sinyal dikirim lebih tepat waktu.
Parameter yang ditetapkan tidak tepat waktu, dapat memfilter beberapa sinyal yang benar, atau membuat sinyal terlambat. Perlu menyesuaikan parameter sesuai dengan karakteristik varietas yang berbeda.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Pengoptimalan parameter moving average. Pengoptimalan parameter seperti panjang siklus moving average, rasio perbedaan siklus, dan cara moving average (SMA atau EMA) dapat digunakan untuk mendapatkan penilaian tren yang lebih akurat.
Pengoptimalan parameter RSI. Pengoptimalan parameter seperti panjang siklus RSI, zona overbought, zona oversold, zona netral, dan lain-lain dapat membuat filter lebih akurat dan efektif.
Optimasi siklus waktu. Anda dapat menguji siklus waktu yang berbeda dan memilih periode waktu yang paling sesuai dengan strategi untuk mendapatkan hasil terbaik.
Optimasi varietas. Anda dapat menyesuaikan parameter atau aturan sesuai dengan karakteristik varietas yang berbeda, sehingga strategi bekerja dengan optimal untuk varietas tersebut.
Menambahkan mekanisme stop loss. Berdasarkan hasil pengukuran, Anda dapat mengatur level stop loss yang wajar untuk mengontrol risiko dan keuntungan dari satu transaksi.
Strategi Rainbow Moving Average Trading menggunakan pengertian tren dan kombinasi pemfilteran sinyal untuk menangkap sinyal di titik-titik perubahan tren. Strategi ini memiliki karakteristik penilaian yang akurat, risiko yang dapat dikendalikan, dan dapat menjadi strategi perdagangan kuantitatif yang sangat praktis melalui pengoptimalan parameter dan penyempurnaan aturan. Secara keseluruhan, strategi ini layak untuk diteliti dan diterapkan secara 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