Strategi DCA


Tarikh penciptaan: 2023-09-26 17:28:27 Akhirnya diubah suai: 2023-09-26 17:28:27
Salin: 0 Bilangan klik: 976
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini adalah prosedur pengembalian untuk perdagangan kenaikan harga menggunakan prinsip dolar cost averaging (DCA). Ia boleh menambah kedudukan berdasarkan peratusan penyimpangan harga yang ditetapkan dan peraturan bilangan kenaikan harga selepas kedudukan awal dibuka. Strategi ini juga merangkumi strategi hentian dan fungsi hentian pengesanan yang dikesan.

Prinsip Strategi

Strategi ini mula-mula akan membuka lebih banyak kedudukan dalam jendela masa pengetua, apabila harga penutupan hari lebih besar daripada 0, harga pembukaan sebagai harga asas bo_level. Kemudian, jika tidak ada pesanan selamat (((so), maka semua pesanan yang mungkin diletakkan di atas pagar semasa berdasarkan peratusan harga yang ditetapkan dan jumlah kenaikan saham.

Pada peringkat memegang kedudukan, jika jumlah memegang kedudukan lebih besar daripada 0, harga berhenti akan dikira berdasarkan harga asas dan peratus hentian sasaran. Jika fungsi hentian hentian dipadamkan, gunakan harga hentian tetap ini; jika tidak, harga hentian hentian akan dikemas kini mengikut harga tertinggi hentian.

Analisis kelebihan strategi

  • Dengan menggunakan strategi DCA, anda boleh menaikkan kedudukan secara automatik selepas penurunan harga, mengurangkan kos memegang rata-rata, dan melindungi risiko sistematik.

  • Sokongan parameter tersuai, peraturan pembukaan dan strategi berhenti boleh dikonfigurasi secara fleksibel mengikut pelbagai jenis dan gaya perdagangan.

  • Fungsi penangguhan penjejakan terbina dalam, yang dapat menyesuaikan kedudukan penangguhan secara automatik mengikut keadaan, untuk mengelakkan penangguhan yang terlalu awal.

  • Tetapan parameter pengukuran fleksibel, yang memudahkan untuk menguji data untuk tempoh masa yang berbeza dan menilai keberkesanan strategi.

  • Dengan platform 3commas, robot boleh dikonfigurasi secara langsung dengan hasil tinjauan, tanpa memerlukan pembangunan tambahan.

Analisis risiko strategi

  • Strategi DCA mempunyai risiko kenaikan peruntukan, jika pasaran terus menurun, jumlah pegangan akan meningkat lagi, dan kerugian akan meningkat. Peraturan kenaikan peruntukan yang wajar diperlukan.

  • Penangguhan peratusan tetap tidak dapat disesuaikan dengan turun naik pasaran, dan mungkin akan berhenti atau berhenti terlalu awal. Penangguhan pengesanan perlu dikonfigurasikan.

  • Mengesan terdapat risiko kecocokan, kesan cakera langsung akan dipengaruhi oleh faktor-faktor seperti kos urus niaga.

  • Perlu memberi perhatian kepada kestabilan sistem pertukaran dan 3 commas untuk mengelakkan kegagalan pelaksanaan urus niaga yang dirancang.

Arah pengoptimuman strategi

  • Ia boleh menyesuaikan harga secara dinamik mengikut kadar turun naik pelbagai jenis, untuk mengoptimumkan peraturan kenaikan saham.

  • Ia boleh digabungkan dengan indikator kadar turun naik untuk menentukan peratusan penangguhan yang lebih saintifik.

  • Anda boleh menetapkan tetingkap masa pengembalian yang munasabah mengikut masa dagangan yang berbeza untuk jenis tertentu.

  • Anda boleh memperkenalkan strategi hentikan kerugian dan keluar daripada kerugian besar.

  • Ia boleh digabungkan dengan algoritma pembelajaran mesin untuk membolehkan strategi mengoptimumkan parameter secara dinamik.

ringkaskan

Secara keseluruhan, strategi ini adalah DCA backtesting yang sangat praktikal. Ia menyokong tetapan parameter tersuai yang baik, boleh mengkonfigurasi peraturan pembukaan dan hentian dengan fleksibel. Di samping itu, fungsi pengesanan hentian yang terbina dalam mengatasi kekurangan hentian tetap.

Kod 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)