Strategi Mengikuti Trend Matriks Sisihan


Tarikh penciptaan: 2023-12-12 17:05:27 Akhirnya diubah suai: 2023-12-12 17:05:27
Salin: 0 Bilangan klik: 643
1
fokus pada
1621
Pengikut

Strategi Mengikuti Trend Matriks Sisihan

Gambaran keseluruhan

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.

Prinsip Strategi

Strategi mengikuti trend matriks penyingkiran terdiri daripada beberapa bahagian utama:

  1. Trend penilaian RSI berganda

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.

  1. Matriks rata-rata menghasilkan isyarat transaksi

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.

  1. Perdagangan dua hala

Secara lalai, ia adalah perdagangan dua hala.

Logik urus niaga adalah seperti berikut:

  1. Guna RSI pantas untuk menilai keadaan pasaran yang terlampau berbelanja dan terlampau dijual.

  2. Menggunakan RSI perlahan untuk menentukan arah trend jangka panjang pasaran.

  3. Apabila RSI pantas berlaku overbought dan oversold, dan RSI perlahan menunjukkan trend reversal, mengambil kedudukan yang sesuai dengan keputusan RSI perlahan.

  4. 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.

  5. 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.

  6. 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.

Kelebihan Strategik

Strategi mengikuti trend matriks penyingkiran mempunyai beberapa kelebihan:

  1. Isyarat penghakiman RSI ganda lebih dipercayai. RSI cepat mengelakkan pecah palsu, RSI perlahan memastikan trend besar betul.

  2. Matriks garis purata menjejaki trend untuk mendapat keuntungan. Mengubah kedudukan mengikut tahap perbezaan harga, anda boleh terus mendapat keuntungan.

  3. Menyokong perdagangan dua hala. Perdagangan dua hala secara lalai, dan hanya boleh melakukan lebih banyak. Dapat disesuaikan dengan lebih banyak keadaan pasaran.

  4. Mekanisme pemulihan kedudukan mengawal risiko. Apabila harga mengalami penyesuaian yang ketara, kedudukan semula dapat dihentikan tepat pada masanya.

  5. Tetapan parameter yang fleksibel. Pengguna boleh memilih kombinasi parameter terbaik berdasarkan data sejarah, jenis transaksi dan sebagainya.

  6. 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.

Risiko Strategik

Terdapat beberapa risiko dalam strategi mengikuti trend matriks yang berpusat pada:

  1. 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.

  2. 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.

  3. Terlalu banyak kedudukan meningkatkan risiko. Mengubah kedudukan terlalu besar juga boleh menyebabkan kerugian meningkat. Parameter kedudukan maksimum perlu ditetapkan dengan berhati-hati.

  4. 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.

  5. 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.

Arah pengoptimuman strategi

Terdapat ruang untuk pengoptimuman lebih lanjut untuk strategi yang mengikuti trend matriks penyingkiran:

  1. Mengoptimumkan parameter RSI ganda. Anda boleh menguji lebih banyak kombinasi parameter dan memilih untuk menentukan nilai kitaran RSI yang paling tepat.

  2. 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.

  3. Menambah mekanisme hentian kerugian. Seperti menetapkan garis purata keluar, hentian kerugian apabila harga jatuh di bawah garis purata tersebut.

  4. Meningkatkan peraturan perkadaran kedudukan. Menyesuaikan saiz dan kelajuan kedudukan dengan lebih saintifik dan munasabah, untuk mengelakkan peningkatan kedudukan yang berlebihan.

  5. Gabungan dengan petunjuk lain. Indikator lain seperti MACD, KD boleh diperkenalkan untuk penilaian tambahan, meningkatkan ketepatan isyarat.

  6. Mengoptimumkan struktur kod. Meningkatkan lagi kebolehgunaan, kebolehjagaan dan kecekapan pelaksanaan kod.

ringkaskan

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.

Kod sumber strategi
/*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')