Strategi kuantitatif mudah berdasarkan penambahan kedudukan berperingkat masa


Tarikh penciptaan: 2023-12-27 17:39:40 Akhirnya diubah suai: 2023-12-27 17:39:40
Salin: 0 Bilangan klik: 684
1
fokus pada
1623
Pengikut

Strategi kuantitatif mudah berdasarkan penambahan kedudukan berperingkat masa

Gambaran keseluruhan

Strategi ini adalah strategi mudah untuk melakukan perdagangan kuantitatif dengan menggunakan cara menaikkan kedudukan tangga masa. Gagasan utama strategi ini adalah untuk membuat banyak kedudukan setiap hari pada masa yang tetap, kemudian menetapkan syarat berhenti dan kehilangan yang berbeza untuk setiap kedudukan, sehingga dapat menghentikan atau menghentikan kerugian secara berturut-turut.

Prinsip Strategi

Strategi ini berasaskan tiga logik utama:

  1. Tangga masa

PenggunaansessionTimeParameter ini menetapkan satu tempoh masa perdagangan dalam sehari, di mana dalam tempoh masa ini, setiap hari di buka pasaran, kenaikan pangkat FIXED secara beransur-ansur, jumlah kenaikan adalah peruntukan purata jumlah kedudukan maksimum kolam modal.

  1. Persendirian Stop Loss

Tetapkan titik henti yang sepadan untuk setiap pesanan simpanantakeProfitdan titik hentistopLossIa membolehkan setiap pesanan mempunyai logik stop-loss yang berasingan, yang membolehkan stop-loss dilakukan secara beratur.

  1. Tempoh tamat kedudukan rata

Pada penghujung tempoh dagangan dalam hari itu, pilihan boleh dibuat sama ada untuk menutup semua pesanan yang tidak terhenti dalam tempoh tersebut.

Kelebihan Strategik

Strategi ini mempunyai kelebihan berikut:

  1. Penyebaran risiko, mengagihkan dana dalam kumpulan kepada pelbagai pesanan, mengawal kerugian pesanan secara berkesan.

  2. Batch Stop Loss, dengan logik Stop Loss yang berasingan untuk setiap pesanan, untuk mengelakkan semua pesanan terhenti pada masa yang sama.

  3. Konfigurasi yang fleksibel, parameter yang boleh disesuaikan seperti jumlah maksimum penambahan, tempoh perdagangan harian, nisbah stop loss dan sebagainya.

  4. Ia mudah difahami, logik strategi mudah dan jelas.

Risiko Strategik

Strategi ini juga mempunyai risiko:

  1. Terdapat risiko terhad, kerugian yang lebih besar akan berlaku jika semua pesanan tidak sampai ke garisan hentian dan kemudian mencetuskan garisan hentian yang sesuai. Ia boleh dielakkan dengan mengkonfigurasi nisbah hentian yang munasabah.

  2. Tidak boleh mengehadkan jumlah dagangan yang dibuka setiap hari, jika terdapat keadaan istimewa, terlalu banyak pesanan yang disimpan pada masa yang sama mungkin melebihi kemampuan kewangan. Anda boleh mempertimbangkan untuk menambah had maksimum jumlah dagangan yang dibuka setiap hari.

  3. Konfigurasikan tempoh masa dengan tidak betul mungkin kehilangan peluang perdagangan, disarankan untuk mengkonfigurasi tempoh dagangan dengan merujuk kepada tempoh masa aktif untuk varieti perdagangan sasaran.

Pengoptimuman Strategi

Strategi ini boleh dioptimumkan dalam beberapa arah:

  1. Menambah logik penilaian syarat untuk membuka kedudukan, hanya membuka kedudukan apabila memenuhi isyarat petunjuk teknikal tertentu, untuk mengelakkan kenaikan kedudukan secara buta.

  2. Meningkatkan had jumlah dagangan harian untuk mengelakkan melebihi kemampuan kolam modal.

  3. Tetapkan peratusan stop-loss yang berbeza untuk pesanan yang berbeza, untuk mencapai stop-loss diferensial.

  4. Logik untuk meningkatkan jumlah pesanan yang dikaitkan dengan baki dana, supaya jumlah pesanan dikaitkan dengan dana yang tersedia.

ringkaskan

Strategi ini secara keseluruhan adalah templat strategi yang sangat mudah untuk melakukan perdagangan kuantitatif dengan menggunakan pemikiran menaikkan kedudukan tangga masa, logik strategi jelas, tetapi terdapat juga risiko dan ruang pengoptimuman, pemaju boleh melakukan pengoptimuman yang sesuai berdasarkan ini, menjadikannya strategi kuantitatif yang lebih stabil dan boleh dipercayai.

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