Strategi penyeberangan rata


Tarikh penciptaan: 2023-10-10 10:44:25 Akhirnya diubah suai: 2023-10-10 10:44:25
Salin: 0 Bilangan klik: 751
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi persilangan rata-rata adalah strategi perdagangan yang biasa digunakan berdasarkan rata-rata bergerak. Strategi ini menggunakan persilangan rata-rata bergerak cepat dan rata-rata bergerak perlahan sebagai isyarat membeli dan menjual. Apabila rata-rata bergerak cepat melintasi rata-rata perlahan dari bawah, ia dianggap sebagai isyarat membeli; apabila rata-rata bergerak cepat melintasi rata-rata perlahan dari atas ke bawah, ia dianggap sebagai isyarat menjual.

Prinsip Strategi

Logik teras strategi ini berdasarkan teori garis rata. Garis rata bergerak dapat meratakan pergerakan harga dengan berkesan, mencerminkan trend harga. Garis rata cepat lebih sensitif terhadap perubahan harga dan dapat menangkap titik perubahan trend; Garis rata perlahan kurang sensitif terhadap perubahan harga dan dapat menyaring pergerakan jangka pendek.

Secara khusus, strategi ini mula-mula mendefinisikan garis purata 50 hari dan garis purata 200 hari. Kemudian menetapkan syarat masuk bermulut sebagai garis purata perlahan di atas garis purata pantas, dan syarat masuk kosong sebagai garis purata pantas di bawah garis purata perlahan. Untuk mengelakkan perdagangan yang berlainan, strategi ini menggunakan isEntry dan isExit untuk kawalan. Apabila syarat masuk dipenuhi, isEntry ditetapkan sebagai True, dan apabila syarat keluar dipenuhi, isExit ditetapkan sebagai True.

Di samping itu, strategi juga menetapkan titik hentian. Pengguna boleh menetapkan jarak hentian dengan memasukkan peratusan. Harga hentian dan hentian akan dikira berdasarkan perubahan peratusan harga masuk. Apabila jumlah pegangan lebih besar daripada 0, hentian akan dilaksanakan mengikut peratusan hentian dan hentian yang ditetapkan; apabila jumlah pegangan kurang dari 0, hentian akan dilaksanakan mengikut peratusan hentian dan hentian yang ditetapkan.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Operasi yang mudah dan mudah dilaksanakan. Hanya bergantung pada penyeberangan linear untuk berdagang, sangat sesuai untuk pemula yang tidak mempunyai pengalaman berdagang.

  2. Pengunduran boleh dikawal, dengan mekanisme pengurusan risiko tertentu. Garis rata bergerak dapat menyaring pergerakan harga jangka pendek dengan berkesan, dan mengelakkan daripada dilaburkan.

  3. Parameter yang boleh disesuaikan, mudah disesuaikan. Pengguna boleh menetapkan sendiri parameter garis rata-rata dan standard stop-loss, parameter untuk mengoptimumkan strategi.

  4. Strategi memetakan garis tengah utama, titik masuk, dan titik hentian secara langsung pada carta.

  5. Kerangka strategi ini lengkap, hanya perlu mengubah isyarat perdagangan utama, menambah petunjuk dan sebagainya untuk meningkatkan strategi.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Kejutan pasaran menyebabkan pergerakan yang besar dan tidak dapat dihentikan. Garis purata cepat lebih sensitif terhadap perubahan harga dan tidak dapat bertindak balas secara berkesan terhadap kejutan.

  2. Ia mudah terjebak dalam keadaan yang bergolak. Jika keadaan yang bergolak untuk jangka masa yang lama, ia akan menyebabkan kerugian berulang.

  3. Kos urus niaga tidak dipertimbangkan. Bayaran dan kehilangan slippage dalam urus niaga sebenar menjejaskan keuntungan.

  4. Risiko penyesuaian data pengulangan. Situasi dalam talian adalah rumit dan berubah-ubah, dan keputusan pengulangan tidak mewakili prestasi sebenar.

Penyelesaian:

  1. Ia juga boleh menetapkan standard penangguhan yang lebih longgar, atau penangguhan penembusan tambahan.

  2. Jarak garis rata-rata boleh diperluaskan, kekerapan transaksi dikurangkan, atau isyarat penapis ditapis dengan penunjuk lain.

  3. Mengambil kira kos transaksi sebenar, anda perlu menetapkan ruang penangguhan yang lebih luas.

  4. Mengambil kira perubahan persekitaran pasaran, optimumkan parameter dan kurangkan kesesuaian secara beransur-ansur.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Uji kombinasi parameter yang berbeza untuk mencari parameter terbaik. Anda boleh menguji bilangan hari rata-rata perlahan, kombinasi parameter, dan sebagainya.

  2. Penapisan untuk penunjuk lain untuk mengelakkan perdagangan yang salah dalam keadaan gegaran. Sebagai contoh, penunjuk MACD, KD dan sebagainya.

  3. Mengoptimumkan strategi hentian hentian dan pengurusan risiko yang lebih cekap. Contohnya, menjejaki hentian, menggantung hentian dan sebagainya.

  4. Meningkatkan saiz pegangan, menggunakan leverage untuk meningkatkan ruang keuntungan. Tetapi mengawal risiko.

  5. Mengambil kira kos transaksi cakera, parameter pengukuran ulang disesuaikan dan dioptimumkan untuk menjadikan parameter strategi lebih sesuai untuk pertempuran sebenar.

  6. Kaedah statistik untuk menilai kestabilan parameter, mengurangkan risiko data yang sesuai, meningkatkan kestabilan.

ringkaskan

Secara keseluruhannya, strategi silang sejajar ini jelas, mudah dilaksanakan, sesuai untuk strategi permulaan perdagangan kuantitatif untuk dipelajari. Tetapi strategi ini juga mempunyai risiko dan kekurangan tertentu, perlu mengoptimumkan parameter dan penapis dengan teliti, dan berhati-hati untuk mengawal risiko perdagangan cakera keras, untuk mendapatkan keuntungan yang stabil.

Kod sumber strategi
/*backtest
start: 2023-10-02 00:00:00
end: 2023-10-09 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gjfsdrtytru

//@version=4
strategy("Backtest Engine", "Backtest", overlay=true, commission_type=strategy.commission.percent, commission_value=0.07, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, currency = currency.USD)


// Start code here...
fastMA = sma(close,50)
slowMA = sma(close,200)

plot(fastMA, "Fast MA",  color.blue)
plot(slowMA, "Slow MA",  color.red)

// Long Enrty/Exit
longCondition = crossover(fastMA,slowMA)
closeLong = crossover(slowMA,fastMA)

// Short Enrty/Exit
shortCondition = crossover(slowMA,fastMA)
closeShort = crossover(fastMA,slowMA)


// Bot web-link alert - {{strategy.order.comment}}
botLONG = "ENTRY LONG ALERT"
botCLOSELONG = "CLOSE LONG ALERT"
botSHORT = "ENTRY SHORT ALERT"
botCLOSESHORT = "CLOSE SHORT ALERT"

//////////////////////////////////////////////////////////////////
//////////////////////// BACKTEST ENGINE \\\\\\\\\\\\\\\\\\\\\\\\\
/////////////////// [NO USER INPUT REQUIRED] /////////////////////
//////////////////////////////////////////////////////////////////

// Time period
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(5, "Backtest Start Month")
testStartDay = input(11, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

periodLength = input(3650, "Backtest Period (days)", minval=0,tooltip="Days until strategy ends") * 86400000 // convert days into UNIX time
testPeriodStop = testPeriodStart + periodLength

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

// Convert Take profit and Stop loss to percentage
longTP = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
longSL = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
shortTP = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options
shortSL = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=0) * 0.01 // Set levels with input options

// 0% TP/SL = OFF (a value of 0 turns off TP/SL feature)
longProfitPerc = longTP == 0 ? 1000 : longTP
longStopPerc = longSL == 0 ? 1 : longSL
shortProfitPerc = shortTP == 0 ? 1 : shortTP
shortStopPerc = shortSL == 0 ? 1000 : shortSL

// Determine TP/SL price based on percentage given
longProfitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
longStopPrice  = strategy.position_avg_price * (1 - longStopPerc)
shortProfitPrice  = strategy.position_avg_price * (1 - shortProfitPerc)
shortStopPrice  = strategy.position_avg_price * (1 + shortStopPerc)

// Anti-overlap
isEntry_Long = false
isEntry_Long := nz(isEntry_Long[1], false)
isExit_Long = false
isExit_Long := nz(isExit_Long[1], false)
isEntry_Short = false
isEntry_Short := nz(isEntry_Short[1], false)
isExit_Short = false
isExit_Short := nz(isExit_Short[1], false)

entryLong = not isEntry_Long and longCondition
exitLong = not isExit_Long and closeLong
entryShort = not isEntry_Short and  shortCondition
exitShort = not isExit_Short and closeShort

if (entryLong)
    isEntry_Long := true
    isExit_Long := false
if (exitLong)
    isEntry_Long := false
    isExit_Long := true
if (entryShort)
    isEntry_Short := true
    isExit_Short := false
if (exitShort)
    isEntry_Short := false
    isExit_Short := true

// Order Execution
if testPeriod() 
    if entryLong
        strategy.entry(id="Long", long=true, when = entryLong, comment=botLONG) // {{strategy.order.comment}}
    if entryShort
        strategy.entry(id="Short", long=false, when = entryShort, comment=botSHORT) // {{strategy.order.comment}}


// TP/SL Execution
if (strategy.position_size > 0)
    strategy.exit(id="Long SL/TP", from_entry="Long", limit=longProfitPrice, stop=longStopPrice)
    strategy.close(id="Long", when=exitLong, comment=botCLOSELONG) // {{strategy.order.comment}}

if (strategy.position_size < 0)
    strategy.exit(id="Short TP/SL", from_entry="Short", limit=shortProfitPrice, stop=shortStopPrice)
    strategy.close(id="Short", when=exitShort, comment=botCLOSESHORT) // {{strategy.order.comment}}
    
// Draw Entry, TP and SL Levels for Long Positions
plot(strategy.position_size > 0 ? longTP == 0 ? na : longProfitPrice : na, style=plot.style_linebr, color=color.green, title="Long TP")
plot(strategy.position_size > 0 ? strategy.position_avg_price : na, style=plot.style_linebr, color=color.blue, title="Long Entry")
plot(strategy.position_size > 0 ? longSL == 0 ? na : longStopPrice : na, style=plot.style_linebr, color=color.red, title="Long SL")
// Draw Entry, TP and SL Levels for Short Positions
plot(strategy.position_size < 0 ? shortTP == 0 ? na : shortProfitPrice : na, style=plot.style_linebr, color=color.green, title="Short TP")
plot(strategy.position_size < 0 ? strategy.position_avg_price : na, style=plot.style_linebr, color=color.blue, title="Short Entry")
plot(strategy.position_size < 0 ? shortSL == 0 ? na : shortStopPrice : na, style=plot.style_linebr, color=color.red, title="Short SL")