Strategi Kuantum Piramida Sederhana Bertahap Masa

Penulis:ChaoZhang, Tarikh: 2023-12-27 17:39:40
Tag:

img

Ringkasan

Strategi ini adalah strategi perdagangan kuant yang mudah yang menggunakan piramid masa. Idea utama adalah untuk membuka kedudukan panjang setiap hari pada masa yang ditetapkan, dan menetapkan tahap mengambil keuntungan dan menghentikan kerugian yang berbeza untuk setiap kedudukan untuk merealisasikan pengambilan keuntungan dan menghentikan kerugian.

Prinsip-prinsip

Strategi ini berdasarkan tiga logik utama:

  1. Piramida langkah masa

    GunakansessionTimeparameter untuk menetapkan tetingkap masa dagangan harian, kedudukan panjang piramid langkah demi langkah di pasaran terbuka semasa tetingkap ini.

  2. Keuntungan individu dan penghentian kerugian

    Set yang sepadan mengambil tahap keuntungantakeProfitdan tahap stop lossstopLossuntuk setiap kedudukan dibuka, supaya setiap kedudukan mempunyai keuntungan sendiri mengambil dan menghentikan kerugian logik untuk merealisasikan batch pelaksanaan.

  3. Tutup semua kedudukan apabila tetingkap masa berakhir

    Pilih sama ada untuk menutup semua kedudukan dibuka semasa tetingkap masa di akhir tetingkap.

Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Pembahagian risiko: Peruntukkan modal secara merata kepada kedudukan yang berbeza untuk mengawal kerugian kedudukan tunggal dengan berkesan.

  2. Mengambil keuntungan kumpulan dan menghentikan kerugian. Posisi yang berbeza mempunyai logik bebas untuk mengelakkan kerugian menghentikan besar-besaran.

  3. Konfigurasi fleksibel. Parameter yang boleh disesuaikan seperti masa piramid maksimum, tingkap masa harian, nisbah mengambil keuntungan / menghentikan kerugian dll.

  4. Logik yang mudah difahami.

Risiko

Terdapat juga beberapa risiko:

  1. Risiko modal penuh terjebak jika semua kedudukan mencetuskan stop loss sebelum mengambil keuntungan.

  2. Tidak ada had kepada jumlah modal kedudukan terbuka setiap hari. terlalu banyak kedudukan boleh melebihi modal yang boleh ditanggung jika menghadapi keadaan pasaran yang tidak biasa. Pertimbangkan untuk menambah jumlah modal kedudukan maksimum setiap hari.

  3. Konfigurasi tetingkap masa yang tidak betul boleh kehilangan peluang perdagangan.

Peningkatan

Strategi ini boleh ditingkatkan dari aspek berikut:

  1. Tambah keadaan kedudukan terbuka berdasarkan penunjuk teknikal untuk mengelakkan piramida yang sembrono.

  2. Tambah had modal kedudukan terbuka harian untuk mengelakkan melebihi kapasiti modal.

  3. Tetapkan nisbah mengambil keuntungan / menghentikan kerugian yang berbeza untuk kedudukan yang berbeza untuk merealisasikan mengambil keuntungan yang berbeza dan menghentikan kerugian.

  4. Tambah logik untuk menghubungkan jumlah kedudukan dengan baki kumpulan modal.

Kesimpulan

Kesimpulannya, ini adalah templat strategi perdagangan kuant yang sangat mudah dengan menggunakan metodologi piramid berlangkah masa. Logiknya mudah dan jelas sementara terdapat juga beberapa risiko dan ruang untuk peningkatan.


/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
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/
// © A3Sh

//@version=5
strategy("Simple_Pyramiding", overlay=true, pyramiding=99, initial_capital=500, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.075, close_entries_rule='FIFO')

// Study of a Simple DCA strategy that opens a position every day at a specified time.
// A position is opened at the start time of the Timeframe.
// Positions exit individually when the take profit level is triggered.
// Option to activate Stop Loss and/or Position exit at the end of the Timeframe


// Backtest Window
start_time   = input(defval=timestamp("01 April 2021 20:00"), group = "Backtest Window", title="Start Time")
end_time     = input(defval=timestamp("01 Aug 2022 20:00"),  group = "Backtest Window", title="End Time")
window() => true


// Inputs
posCount     = input.int    (6,           group = "Risk",         title = "Max Amount of DCA Entries")
takeProfit   = input.float  (2.5,         group = "Risk",         title = "Take Profit %")
slSwitch     = input.bool   (true,        group = "Risk",         title = "Activate Stop Loss")
stopLoss     = input.float  (9,           group = "Risk",         title = "Stop Loss %")
sessionTime =  input("1800-1700", group = "DCA Settings", title = "DCA Order Timeframe", tooltip="Open order at the start/If ativated, close order at the end")
exitDCA     =  input.bool   (false,       group = "DCA Settings", title = "Exit DCA Entry at end of Timeframe")


// Order size based on max amount of pyramid orders
q = (strategy.equity  / posCount) / open


// Timeframe for opening and closing a DCA order
// example taken from https://stackoverflow.com/questions/69230164/pinescript-basic-question-open-a-trade-at-a-set-time-each-day
t       = time("D", sessionTime)
isStart = na(t[1]) and not na(t) or t[1] < t
isEnd   = na(t) and not na(t[1]) or t[1] < t
bgcolor(t ? color.new(color.blue,95) : na, title = " TimeFrame Color")


// Create DCA Entries
entry_price = 0.0
if isStart and window() 
    for i = 0 to strategy.opentrades
        if strategy.opentrades == i
            entry_price := close
            entry_id = "PE_" + str.tostring(i + 1) 
            strategy.entry(id = entry_id, direction=strategy.long, limit=entry_price, qty=q)
        if strategy.opentrades == posCount
            break
            
 
//Exit DCA Entries when take profit or stop loss is triggered
if strategy.opentrades > 0 and window() 
    for i = 0 to strategy.opentrades 
        exit_from = "PE_" + str.tostring(i + 1)
        exit_id = "Exit_" + str.tostring(i + 1)
        strategy.exit(id= exit_id, from_entry= exit_from, profit = close * takeProfit / 100 / syminfo.mintick, loss = slSwitch ? close * stopLoss /100 / syminfo.mintick :na)
        

//Exit DCA Entries at end of DCA Timeframe
if strategy.opentrades > 0 and exitDCA and isEnd and window() 
    for i = 0 to strategy.opentrades 
        exit_from = "PE_" + str.tostring(i + 1)
        exit_id = "Exit_" + str.tostring(i + 1)
        strategy.exit(id= exit_id, from_entry= exit_from, stop = close)




Lebih lanjut