
Strategi ini adalah strategi sederhana untuk melakukan perdagangan kuantitatif dengan menggunakan cara menaikkan posisi tangga waktu. Gagasan utama dari strategi ini adalah membangun posisi multi-posisi setiap hari pada waktu yang tetap, dan kemudian mengatur kondisi stop-loss yang berbeda untuk setiap posisi, sehingga mencapai stop-loss atau stop-loss secara bertahap.
Strategi ini didasarkan pada tiga logika utama:
PenggunaansessionTimeParameter ini mengatur satu periode perdagangan dalam sehari, di mana setiap hari di pasar, posisi ditambahkan secara bertahap dalam bentuk tangga FIXED, dengan jumlah penambahan sebagai distribusi rata-rata jumlah posisi terbesar di kolam modal.
Tentukan titik penutupan untuk setiap pesanan yang dibukatakeProfitdan stop lossstopLossHal ini memungkinkan setiap pesanan memiliki logika stop loss yang terpisah, sehingga dapat mencapai stop loss yang terbagi dalam batch.
Pada akhir periode perdagangan intraday, Anda dapat memilih untuk melakukan pelunasan pada semua pesanan yang belum terhenti dalam periode tersebut.
Strategi ini memiliki keuntungan sebagai berikut:
Dispersifikasi risiko, alokasi dana dalam kumpulan dana ke berbagai pesanan, dan pengendalian kerugian pesanan tunggal secara efektif.
Batch Stop Loss, dengan logis stop loss yang terpisah untuk setiap order, mencegah semua order berhenti pada saat yang sama.
Konfigurasi yang fleksibel, parameter yang dapat disesuaikan seperti jumlah maksimum penambahan posisi, periode perdagangan harian, stop loss ratio dan sebagainya.
Ini adalah salah satu contoh yang paling jelas dari apa yang bisa dilakukan oleh seorang blogger.
Strategi ini juga memiliki beberapa risiko:
Ada risiko yang tertutup, jika semua pesanan tidak mencapai garis stop, maka akan terjadi kerugian yang lebih besar. Hal ini dapat dihindari dengan mengkonfigurasi rasio stop loss yang masuk akal.
Tidak dapat membatasi jumlah total yang dibuka setiap hari, jika terjadi situasi khusus, terlalu banyak pesanan dapat ditempatkan di luar kemampuan keuangan. Anda dapat mempertimbangkan untuk menambahkan batas maksimum jumlah total yang ditempatkan setiap hari.
Konfigurasi jangka waktu yang tidak tepat dapat kehilangan peluang pasar, disarankan untuk mengkonfigurasi jangka waktu perdagangan dengan merujuk pada periode aktif dari varietas perdagangan target.
Strategi ini dapat dioptimalkan dari beberapa arah:
Menambahkan logika penilaian kondisi untuk membuka posisi, hanya membuka posisi saat memenuhi sinyal indikator teknis tertentu, untuk menghindari kenaikan posisi secara buta.
Meningkatkan batas jumlah total penambahan per hari untuk mencegah kelebihan kapasitas dana.
Setting Stop Loss Rasio yang Berbeda untuk Perintah yang Berbeda, Untuk Membuat Stop Loss Differential.
Logika untuk meningkatkan jumlah pesanan yang terkait dengan saldo kolam dana, sehingga jumlah pesanan terkait dengan dana yang tersedia.
Secara keseluruhan, strategi ini adalah template strategi yang sangat sederhana untuk melakukan perdagangan kuantitatif dengan menggunakan pemikiran kenaikan posisi tangga waktu, logika strategi jelas, tetapi ada juga risiko dan ruang pengoptimalan tertentu, dan pengembang dapat mengoptimalkan dengan tepat berdasarkan ini, menjadikannya strategi kuantitatif yang lebih 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)