
Strategi mengikuti trend matriks penyingkiran adalah strategi perdagangan kuantitatif yang menggabungkan trend, penyingkiran dan garis rata. Strategi ini menggunakan indikator RSI ganda untuk menentukan arah trend pasaran, dan menetapkan isyarat masuk dalam kombinasi dengan garis rata matriks.
Strategi mengikuti trend matriks penyingkiran terdiri daripada beberapa bahagian utama:
Menggunakan RSI cepat dan RSI perlahan untuk menentukan arah trend pasaran. Apabila RSI cepat berlaku overbought atau oversold, menggabungkan RSI perlahan untuk menentukan arah trend.
Menetapkan satu set rata-rata matriks mengikut harga masuk, dan menyesuaikan kedudukan apabila harga menyentuh garis rata-rata tertentu. Dengan cara ini, anda boleh mendapat keuntungan lebih banyak dalam trend.
Secara lalai, ia adalah perdagangan dua hala.
Logik urus niaga adalah seperti berikut:
Guna RSI pantas untuk menilai keadaan pasaran yang terlampau berbelanja dan terlampau dijual.
Menggunakan RSI perlahan untuk menentukan arah trend jangka panjang pasaran.
Apabila RSI pantas berlaku overbought dan oversold, dan RSI perlahan menunjukkan trend reversal, mengambil kedudukan yang sesuai dengan keputusan RSI perlahan.
Selepas membina rumah, satu set matriks rata-rata ditetapkan. Matriks rata-rata ini mengelilingi set harga masuk, saiz jarak ditetapkan oleh parameter peratusan ketumpatan antara matriks ketumpatan.
Apabila harga menyentuh garisan purata matriks, sesuaikan jumlah pegangan. Jika naik melampaui garisan purata, anda akan menambah lebih banyak pesanan; jika turun, anda akan mengurangkan pesanan kosong.
Apabila terdapat penyesuaian harga yang besar, kedudukan akan dikembalikan ke tahap awal.
Ini adalah logik perdagangan utama strategi ini. Dengan menggunakan rata-rata matriks, lebih banyak keuntungan dapat dikunci dalam trend.
Strategi mengikuti trend matriks penyingkiran mempunyai beberapa kelebihan:
Isyarat penghakiman RSI ganda lebih dipercayai. RSI cepat mengelakkan pecah palsu, RSI perlahan memastikan trend besar betul.
Matriks garis purata menjejaki trend untuk mendapat keuntungan. Mengubah kedudukan mengikut tahap perbezaan harga, anda boleh terus mendapat keuntungan.
Menyokong perdagangan dua hala. Perdagangan dua hala secara lalai, dan hanya boleh melakukan lebih banyak. Dapat disesuaikan dengan lebih banyak keadaan pasaran.
Mekanisme pemulihan kedudukan mengawal risiko. Apabila harga mengalami penyesuaian yang ketara, kedudukan semula dapat dihentikan tepat pada masanya.
Tetapan parameter yang fleksibel. Pengguna boleh memilih kombinasi parameter terbaik berdasarkan data sejarah, jenis transaksi dan sebagainya.
Struktur kod jelas. Setiap bahagian tanggungjawab jelas, mudah difahami, dioptimumkan dan diperluaskan.
Secara keseluruhannya, kelebihan terbesar strategi ini adalah menggunakan pelbagai mekanisme untuk meningkatkan kualiti isyarat, mengejar keuntungan yang lebih tinggi sambil mengawal risiko. Ini adalah strategi perdagangan yang berimbang dengan risiko dan keuntungan.
Terdapat beberapa risiko dalam strategi mengikuti trend matriks yang berpusat pada:
RSI berganda menilai risiko kegagalan. Apabila pasaran berada dalam penyesuaian gegaran, RSI sering mengeluarkan isyarat palsu. Apabila ini memerlukan momentum masa percubaan, penyesuaian parameter yang sesuai atau penggantungan perdagangan.
Matriks rata-rata tidak sesuai dengan risiko. Jika parameter matriks tidak betul, penyesuaian kedudukan mungkin terlalu radikal, sehingga meningkatkan kerugian. Parameter perlu diuji dengan berhati-hati.
Terlalu banyak kedudukan meningkatkan risiko. Mengubah kedudukan terlalu besar juga boleh menyebabkan kerugian meningkat. Parameter kedudukan maksimum perlu ditetapkan dengan berhati-hati.
Risiko trend reversal. Apabila trend berbalik, anda akan menghadapi kerugian yang lebih besar jika anda tidak menutup kedudukan dengan cepat. Ini memerlukan perhatian kepada indikator trend yang lebih lama.
Risiko ruang pengoptimuman kod yang terhad. Strategi ini sudah matang dan ruang pengoptimuman yang terhad. Logik perdagangan keseluruhan perlu dinilai semula jika keadaan pasaran berubah secara besar-besaran.
Penilaian dan pengoptimuman strategi adalah kunci untuk mengurangkan risiko ini. Cara-cara seperti menyesuaikan kombinasi parameter, memantau indikator jangka panjang, dan sebagainya dapat mengelakkan risiko hingga tahap tertentu.
Terdapat ruang untuk pengoptimuman lebih lanjut untuk strategi yang mengikuti trend matriks penyingkiran:
Mengoptimumkan parameter RSI ganda. Anda boleh menguji lebih banyak kombinasi parameter dan memilih untuk menentukan nilai kitaran RSI yang paling tepat.
Tetapan rata-rata matriks tersuai. Ia membolehkan pengguna menetapkan parameter rata-rata matriks mengikut parameter yang berbeza, supaya lebih sesuai dengan ciri-ciri varieti tersebut.
Menambah mekanisme hentian kerugian. Seperti menetapkan garis purata keluar, hentian kerugian apabila harga jatuh di bawah garis purata tersebut.
Meningkatkan peraturan perkadaran kedudukan. Menyesuaikan saiz dan kelajuan kedudukan dengan lebih saintifik dan munasabah, untuk mengelakkan peningkatan kedudukan yang berlebihan.
Gabungan dengan petunjuk lain. Indikator lain seperti MACD, KD boleh diperkenalkan untuk penilaian tambahan, meningkatkan ketepatan isyarat.
Mengoptimumkan struktur kod. Meningkatkan lagi kebolehgunaan, kebolehjagaan dan kecekapan pelaksanaan kod.
Strategi mengikuti trend matriks perpaduan adalah strategi perdagangan kuantitatif yang merangkumi pelbagai mekanisme. Ia menggunakan pendekatan RSI ganda untuk menentukan arah trend, dan matriks rata-rata untuk menjejaki trend yang menguntungkan. Strategi ini dapat memberikan isyarat perdagangan yang lebih stabil dan efisien berbanding dengan strategi indikator tunggal. Dengan penyesuaian dan pengoptimuman parameter, strategi ini dapat disesuaikan dengan lebih banyak keadaan pasaran yang berbeza, dengan kebolehgunaan yang kuat.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("The Matrix 7.0 Strategy", overlay=false)
//Matrix Settings
entry_size = input(title="Entry Size", defval = 1)
max_size = input(title="Max Size", defval = 10000)
matrix = input(title="Matrix Interval %", defval = 2)
matrix_price_overwrite = input(title="Matrix Overwrite $", defval = 0.0)
adjustment = input(title="Adjustment Size", defval = 1000)
trade_short = input(title="Trade Short", type=bool, defval = true)
//RSI Settings
periods = input(title="RSI Periods", defval = 14)
overbought_short = input(title="RSI Overbought", defval = 65)
oversold_short = input(title="RSI Oversold", defval = 30)
//RSI Trend Settings
resolution_long = input(title="Resolution Trend", defval = "D")
periods_long = input(title="RSI Trend Periods", defval = 14)
overbought_long = input(title="RSI Trend Overbought", defval = 64)
oversold_long = input(title="RSI Trend Oversold", defval = 30)
//Round Off to 2 decimals
round2(x) =>
a = x * 10 * 10
a := floor(a + 0.5)
a := a / 10 / 10
a
//RSI Function
RSI = rsi(close, periods)
//RSI Market Function
rsi_oversold = RSI < oversold_short
rsi_overbought = RSI > overbought_short
market_rsi = 0.0
market_rsi := if (rsi_oversold)
RSI - oversold_short
else
if (rsi_overbought)
RSI - overbought_short
else
0
//RSI Trend Function
rsi_long = request.security(syminfo.tickerid,resolution_long,rsi(close,periods_long))
trend_rsi_long = rsi_long < oversold_long
trend_rsi_short = rsi_long > overbought_long
trend_rsi = 0
trend_rsi := if (trend_rsi_short)
-1
else
if (trend_rsi_long)
1
else
trend_rsi[1]
// // Shorter time resolution to make "close" crosses give faster positives.
// short_resolution = security(tickerid, "1", close)
// quick = round2(short_resolution) //ROUND OFF TO 2 DECIMAL PLACES.
//Declare Other Variables
entry_price = 0.0
entry_price := nz(entry_price[1])
position_size = 0.0
position_size := nz(position_size[1])
last_traded_price = 0.0
last_traded_price := nz(last_traded_price[1])
matrix_price = 0.0
if matrix_price_overwrite > 0.0
matrix_price := matrix_price_overwrite
else
matrix_price := round2((matrix/100) * entry_price)
level = 0
level := nz(level[1])
level_price = entry_price
if not na(level_price[1])
level_price := level_price[1]
// Calculate Level
if close > level_price
level_change = floor((high - level_price)/matrix_price)
level := level + level_change
else
if close < level_price
level_change = ceil((low - level_price)/matrix_price)
level := level + level_change
// Calculate Level Price
level_price := (level * matrix_price) + entry_price
// Calculate Matrix Position
matrix_position = 0.0
if position_size > 0
matrix_position := ((-1 * level) * adjustment) + entry_size
else
if position_size < 0
matrix_position := ((-1 * level) * adjustment) - entry_size
//Trend Entry or Reversal Conditions
trend_reversal_up = trend_rsi == 1 and (trend_rsi[1] == -1 or trend_rsi == 0) and position_size <= 0
trend_reversal_down = trend_rsi == -1 and (trend_rsi[1] == 1 or trend_rsi == 0) and position_size >= 0 and trade_short == true
flatten_position = trend_rsi == -1 and (trend_rsi[1] == 1 or trend_rsi == 0) and position_size >= 0 and trade_short == false
//Reset Conditions
reset_long = (position_size > 0) and (close - entry_price > matrix_price) and (market_rsi < 0) and (position_size != entry_size)
reset_short = (position_size < 0) and (entry_price - close > matrix_price) and (market_rsi > 0) and (position_size != (-1 * entry_size))
//Adjustment Conditions
increase_long = (position_size > 0) and (matrix_position > position_size) and (market_rsi < 0) and (matrix_position <= max_size)
decrease_long = (position_size > 0) and (matrix_position < position_size) and (market_rsi > 0)
increase_short = (position_size < 0) and (matrix_position < position_size) and (market_rsi > 0) and (matrix_position >= (-1 * max_size))
decrease_short = (position_size < 0) and (matrix_position > position_size) and (market_rsi < 0)
//Transactions
//Trend Reversals
if trend_reversal_up
strategy.entry("OL", strategy.long, qty=entry_size)
position_size := entry_size
matrix_position := entry_size
level := 0
else
if trend_reversal_down
strategy.entry("OS", strategy.short, qty=entry_size)
position_size := -1 * entry_size
matrix_position := -1 * entry_size
level := 0
//Reset Positions
else
if reset_long
order = entry_size - position_size[1]
strategy.order("RL", strategy.long, qty=order)
position_size := entry_size
matrix_position := entry_size
level := 0
else
if reset_short
order = position_size[1] - (-1* entry_size)
strategy.order("RS", strategy.short, qty=order)
position_size := -1 * entry_size
matrix_position := -1 * entry_size
level := 0
//Position Adjustments
else
if increase_long
order = matrix_position - position_size[1]
strategy.order("IL", strategy.long, qty=order)
position_size := position_size[1] + order
else
if decrease_long
order = position_size[1] - matrix_position
strategy.order("DL", strategy.short, qty=order)
position_size := position_size[1] - order
else
if increase_short
order = position_size[1] - matrix_position
strategy.order("IS", strategy.short, qty=order)
position_size := position_size[1] - order
else
if decrease_short
order = matrix_position - position_size[1]
strategy.order("DS", strategy.long, qty=order)
position_size := position_size[1] + order
else
if flatten_position
strategy.close_all()
position_size := 0.0
matrix_position := 0.0
level := 0
//Grouped Actions
if trend_reversal_up or trend_reversal_down or reset_short or reset_long
entry_price := round2(close)
last_traded_price := round2(close)
if increase_long or decrease_long or increase_short or decrease_short
last_traded_price := round2(close)
// //RSI Trend & Adjustment Moments. (strategy)
p1 = plot(market_rsi, color = trend_rsi > 0 ? green : red, linewidth = 4, title='Market', transp =0)
p2 = plot(trend_rsi, color = trend_rsi > 0 ? green : red, linewidth = 4, title='Trend', transp = 0)
fill(p1,p2, color=trend_rsi > 0 ? green : red, transp=0)
p3 = plot((rsi_long - 50) *2, color = white, title="Trend Index")
fill(p2,p3, color=white)
hline((overbought_long -50) * 2)
hline((oversold_long -50) * 2)
//Position Plots (strategy)
plot(matrix_position / 100, title='Matrix', color=white, linewidth = 4)
plot(position_size / 100, title='Position', color=blue, linewidth = 4)
plot(strategy.position_size / 100, title='Strategy', color=orange, linewidth = 4)
// //Price Plots (study)
// plot(level_price, title="Matrix Level Price", linewidth=4)
// plot(last_traded_price, title="Last Traded Price", linewidth=2, color=orange)
// plot(entry_price + (4 * matrix_price), title='Adjustment 4', color=white, linewidth = 1)
// plot(entry_price + (3 * matrix_price), title='Adjustment 3', color=white, linewidth = 1)
// plot(entry_price + (2 * matrix_price), title='Adjustment 2', color=white, linewidth = 1)
// plot(entry_price + matrix_price, title='Adjustment 1', color=white, linewidth = 1)
// plot(entry_price, title='Entry Price', color=white, linewidth = 3)
// plot(entry_price - matrix_price, title='Adjustment -1', color=white, linewidth = 1)
// plot(entry_price - (2 * matrix_price), title='Adjustment -2', color=white, linewidth = 1)
// plot(entry_price - (3 * matrix_price), title='Adjustment -3', color=white, linewidth = 1)
// plot(entry_price - (4 * matrix_price), title='Adjustment -4', color=white, linewidth = 1)
// //Alerts (study only)
// alertcondition(trend_reversal_up, title='Trend Reversal Up', message='Market Oversold, Lets Buy')
// alertcondition(trend_reversal_down, title='Trend Reversal Down', message='Market Overbought, Lets Sell')
// alertcondition(reset_long, title='Reset Long', message='Higher Bottom, Lets Buy')
// alertcondition(reset_short, title='Reset Short', message='Lower Top, Lets Sell')
// alertcondition(increase_long, title='Increase Long', message='Price Dropped, Lets Buy')
// alertcondition(decrease_long, title='Decrease Long', message='Price Spiked, Lets Sell')
// alertcondition(increase_short, title='Increase Short', message='Price Spiked, Lets Sell')
// alertcondition(decrease_short, title='Decrease Short', message='Price Dropped, Lets Buy')
// //Grouped Conditions
// condition_buy = trend_reversal_up or increase_long or decrease_short or reset_long
// condition_sell = trend_reversal_down or decrease_long or increase_short or reset_short
// adjustment_matrix = trend_reversal_up or increase_long or decrease_short or trend_reversal_down or decrease_long or increase_short or reset_long or reset_short
// //Grouped Alerts
// alertcondition(condition_buy, title='Condition Buy', message='You Need to Buy')
// alertcondition(condition_sell, title='Condition Sell', message='You Need to Sell!')
// alertcondition(adjustment_matrix, title='Adjustment Matrix', message='You Need to Adjust')