Strategi Piramida Kuantum Sederhana

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

img

Gambaran umum

Strategi ini adalah strategi perdagangan kuantum sederhana yang memanfaatkan time-stepped pyramiding. Ide utamanya adalah untuk membuka posisi panjang setiap hari pada waktu yang ditetapkan, dan menetapkan tingkat mengambil keuntungan dan stop loss yang berbeda untuk setiap posisi untuk mewujudkan profit batch taking dan stop loss.

Prinsip-prinsip

Strategi ini didasarkan pada tiga logika utama:

  1. Piramida berkala

    GunakansessionTimeparameter untuk mengatur jendela waktu perdagangan harian, posisi panjang piramida langkah demi langkah di pasar terbuka selama jendela ini.

  2. Keuntungan individu dan penghentian kerugian

    Set yang sesuai dengan tingkat mengambil keuntungantakeProfitdan level stop lossstopLossuntuk setiap posisi terbuka, sehingga setiap posisi memiliki keuntungan sendiri mengambil dan menghentikan logika kerugian untuk mewujudkan eksekusi batch.

  3. Tutup semua posisi saat jendela waktu berakhir

    Pilih apakah untuk menutup semua posisi yang dibuka selama jendela waktu di akhir jendela.

Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Diversifikasi risiko: alokasikan modal secara merata ke posisi yang berbeda untuk secara efektif mengendalikan kerugian posisi tunggal.

  2. Batch profit taking dan stop loss. Posisi yang berbeda memiliki logika independen untuk menghindari stop loss massal.

  3. Konfigurasi yang fleksibel. Parameter yang dapat disesuaikan seperti waktu piramida maksimum, jendela waktu harian, rasio profit taking/stop loss dll.

  4. Logika yang sederhana dan jelas.

Risiko

Ada juga beberapa risiko:

  1. Risiko seluruh modal terjebak jika semua posisi memicu stop loss sebelum mengambil keuntungan.

  2. Tidak ada batas pada total modal posisi terbuka per hari. terlalu banyak posisi dapat melebihi kapasitas modal jika menghadapi situasi pasar yang tidak biasa. Pertimbangkan untuk menambahkan total modal posisi maksimum per hari.

  3. Konfigurasi jendela waktu yang tidak benar dapat kehilangan peluang perdagangan.

Peningkatan

Strategi dapat ditingkatkan dari aspek berikut:

  1. Tambahkan kondisi posisi terbuka berdasarkan indikator teknis untuk menghindari piramida sembrono.

  2. Tambahkan batas modal total posisi terbuka harian untuk mencegah melebihi kapasitas modal.

  3. Menetapkan rasio profit/stop loss yang berbeda untuk posisi yang berbeda untuk mewujudkan profit taking dan stop loss yang berbeda.

  4. Tambahkan logika untuk menghubungkan jumlah posisi dengan saldo pool modal.

Kesimpulan

Sebagai kesimpulan, ini adalah templat strategi perdagangan kuantum yang sangat sederhana menggunakan metodologi piramida berlangkah waktu. Logika sederhana dan jelas sementara ada juga beberapa risiko dan ruang untuk peningkatan. Pengembang dapat mengoptimalkannya dengan benar untuk menjadikannya strategi kuantum yang relatif stabil dan andal.


/*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 banyak