Strategi DCA


Tanggal Pembuatan: 2023-09-26 17:28:27 Akhirnya memodifikasi: 2023-09-26 17:28:27
menyalin: 0 Jumlah klik: 976
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini adalah prosedur pengembalian untuk melakukan perdagangan penargetan dengan menggunakan prinsip dollar cost averaging (DCA). Ia dapat menambahkan posisi berdasarkan persentase penyimpangan harga yang ditetapkan dan aturan jumlah penargetan setelah membuka posisi awal. Strategi ini juga mencakup strategi stop loss dan fitur stop loss tracking.

Prinsip Strategi

Strategi ini pertama-tama akan membuka posisi lebih banyak dalam jendela waktu pengamatan balik, saat harga penutupan lebih besar dari 0 pada hari itu, dengan harga bukaan sebagai harga dasar bo_level. Kemudian, jika tidak ada pesanan aman ((so), maka akan menempatkan semua pesanan posisi kosong yang mungkin berdasarkan persentase harga yang ditetapkan dan jumlah kali penambahan, dan menempatkan semuanya di atas pilar saat ini. Secara khusus, harga pesanan aman akan didasarkan pada harga pesanan aman terbaru (latest_so_level), dengan langkah panjang pesanan aman (step_scale) untuk menghitung harga pesanan aman berikutnya (next_so_level).

Pada tahap memegang posisi, jika jumlah posisi yang dipegang lebih besar dari 0, harga stop akan dihitung berdasarkan harga dasar dan persentase target stop. Jika fitur tracking stop dimatikan, maka harga stop tetap ini akan digunakan. Jika tidak, harga stop akan terus diperbarui berdasarkan harga tertinggi dari stop, dan harga stop akan disesuaikan untuk mencapai tracking stop.

Analisis Keunggulan Strategi

  • Dengan menggunakan strategi DCA, Anda dapat secara otomatis meningkatkan posisi setelah harga turun, mengurangi biaya rata-rata untuk memegang posisi, dan melindungi risiko sistematis.

  • Mendukung parameter khusus, aturan buka posisi dan strategi stop-loss dapat dikonfigurasi secara fleksibel sesuai dengan varietas dan gaya perdagangan yang berbeda.

  • Fungsi tracking stop built-in, yang dapat secara otomatis menyesuaikan posisi stop sesuai dengan situasi, untuk menghindari stop terlalu dini.

  • Pengaturan parameter pengembalian yang fleksibel memungkinkan untuk menguji data dari periode waktu yang berbeda untuk menilai efektivitas strategi.

  • Dengan platform 3commas, Anda dapat langsung mengkonfigurasi robot desktop dengan hasil pengukuran, tanpa perlu pengembangan tambahan.

Analisis Risiko Strategi

  • Strategi DCA memiliki risiko penargetan, jika pasar terus turun, jumlah kepemilikan akan meningkat lebih lanjut, dan kerugian juga akan meningkat. Peraturan penargetan yang tepat diperlukan.

  • Stopper persentase tetap tidak dapat disesuaikan dengan fluktuasi pasar, dan mungkin akan berhenti lebih awal atau berhenti dari lapangan. Stopper pelacakan harus dikonfigurasi.

  • Ada risiko adaptasi, dan efek langsung akan dipengaruhi oleh faktor-faktor seperti biaya transaksi.

  • Perlu diperhatikan stabilitas sistem di bursa dan 3commas untuk menghindari kegagalan dalam pelaksanaan transaksi yang direncanakan.

Arah optimasi strategi

  • Ada beberapa cara yang dapat digunakan untuk mengoptimalkan aturan penambahan saham.

  • Dengan menggunakan indikator fluktuasi, dapat ditentukan persentase stop yang lebih ilmiah.

  • Anda dapat mengatur jendela waktu pengembalian yang masuk akal untuk setiap varietas, tergantung pada waktu transaksi yang berbeda.

  • Strategi stop loss dapat diperkenalkan, dan stop loss dapat ditarik keluar jika terjadi kerugian besar.

  • Strategi ini dapat digabungkan dengan algoritma pembelajaran mesin untuk mengoptimalkan parameter secara dinamis.

Meringkaskan

Secara keseluruhan, strategi ini adalah DCA backtesting yang sangat praktis. Ini mendukung pengaturan parameter kustom yang baik, dapat mengkonfigurasi aturan pembukaan dan penutupan posisi secara fleksibel. Di samping itu, fitur penutupan yang terpasang untuk melacak penutupan melengkapi kekurangan penutupan tetap.

Kode Sumber Strategi
/*backtest
start: 2023-09-18 00:00:00
end: 2023-09-25 00:00:00
period: 15h
basePeriod: 15m
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/
// © rouxam

// Author: rouxam
// Inspired by the original work of ericlin0122

//@version=4
// strategy("Backtesting 3commas DCA Bot", overlay=true, pyramiding=99, process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.1)

// Strategy Inputs
price_deviation         = input(1.0, type=input.float,  title='Price deviation to open safety orders (%)', minval=0.0, step=0.1)/100
take_profit             = input(1.0, type=input.float,  title='Target Take Profit (%)', minval=0.0, step=0.1)/100
ttp                     = input(0.5, type=input.float,  title='Trailing Take Profit (%) [0 = Disabled]', minval=0.0, step=0.1)/100
base_order              = input(10.0, type=input.float, title='base order') 
safe_order              = input(20.0, type=input.float, title='safe order') 
safe_order_volume_scale = input(2.0, type=input.float,  title='Safety order volume scale', step=0.1) 
safe_order_step_scale   = input(1.5, type=input.float,  title='Safety order step scale', step=0.1) 
max_safe_order          = input(5,                      title='Max safe order', minval=1, maxval=99, step=1) 

// Date Inputs
from_month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
from_day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
from_year  = input(defval = 2021, title = "From Year")
to_month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
to_day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
to_year    = input(defval = 9999, title = "To Year")
start  = timestamp(from_year, from_month, from_day, 00, 00)  // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59)        // backtest finish window
window = time >= start and time <= finish ? true : false // create function "within window of time"

var bo_level = 0.0
var latest_so_level = 0.0
var next_so_level = 0.0
var ttp_active = false
var ttp_max = 0.0
var ttp_level = 0.0
var take_profit_level = 0.0

if strategy.position_size <= 0.0
    ttp_max := 0.0
    ttp_active := false


// First Position
if(strategy.opentrades == 0 and window and close > 0)
    // Place Buy Order ASAP
    bo_level := open
    strategy.entry("BO", limit=bo_level, long=strategy.long, qty=base_order/bo_level)
    latest_so_level := open

// Dollar Cost Averaging
place_safety_orders = latest_so_level == bo_level
if place_safety_orders
    // Placing all possible exit orders on that candle
    for i = 1 to max_safe_order
        next_so_level := latest_so_level * (1 - price_deviation * pow(safe_order_step_scale,  i - 1))
        so_name = "SO" + tostring(i) 
        strategy.entry(so_name, long=strategy.long, limit=next_so_level, qty=safe_order * pow(safe_order_volume_scale, i - 1)/next_so_level)
        latest_so_level := next_so_level

// Take Profit
if strategy.position_size > 0
    take_profit_level := strategy.position_avg_price * (1 + take_profit)
    if ttp <= 0.0
        // No trailing take profit
        strategy.exit(id="TP", limit=take_profit_level)
    else
        // Trailing take profit
        if take_profit_level <= close
            ttp_max := max(high, ttp_max)
            ttp_active := true
        if ttp_active 
            // Update exit order
            ttp_level := ttp_max * (1 - ttp)
            strategy.exit(id="TTP", stop=ttp_level)