Strategi perdagangan kuantitatif mata wang kripto berdasarkan DCA dinamik

DCA TP SO (Safety Orders) API OHLC4 HL2 HL3 ROI
Tarikh penciptaan: 2025-02-19 16:59:45 Akhirnya diubah suai: 2025-02-27 17:56:06
Salin: 1 Bilangan klik: 462
2
fokus pada
319
Pengikut

Strategi perdagangan kuantitatif mata wang kripto berdasarkan DCA dinamik Strategi perdagangan kuantitatif mata wang kripto berdasarkan DCA dinamik

Gambaran keseluruhan

Ini adalah strategi perdagangan kuantitatif yang direka khas untuk pasaran cryptocurrency, memanfaatkan ciri-ciri turun naik yang tinggi dalam pasaran cryptocurrency, dengan kenaikan harga secara dinamik apabila harga berubah melalui rata-rata kos pintar ((DCA)). Strategi ini berjalan pada jangka masa 15 minit, yang dapat menangani dengan berkesan turun naik pesat dalam pasaran cryptocurrency, sambil mengelakkan risiko yang ditimbulkan oleh perdagangan berlebihan.

Prinsip Strategi

Strategi ini terdiri daripada empat modul utama:

  1. Sistem kemasukan pintar: Pembentukan saham pertama berdasarkan OHLC4 rata-rata berat, menyesuaikan diri dengan ciri-ciri pasaran cryptocurrency yang bergelombang tinggi
  2. Mekanisme pelunasan dinamik: mencetuskan pesanan keselamatan apabila harga kembali, pelunasan meningkat dengan kedalaman, memanfaatkan turun naik pasaran
  3. Sistem Pengurusan Risiko: Optimumkan nisbah risiko-keuntungan dengan penambahan piramid dan penyesuaian leverage yang fleksibel
  4. Kawalan hentian pantas: mekanisme hentian yang direka untuk ciri-ciri turun naik pesat dalam pasaran cryptocurrency, termasuk pengoptimuman yuran

Kelebihan Strategik

  1. Kebolehan beradaptasi pasaran: dioptimumkan khusus untuk ciri-ciri bergelombang tinggi pasaran cryptocurrency
  2. Penyebaran Risiko: Mengurangkan risiko kejutan dalam pasaran cryptocurrency dengan membangunkan simpanan secara dinamik
  3. Keberkesanan Leverage: Mengambil keuntungan daripada turun naik harga di pasaran cryptocurrency
  4. Pelaksanaan automatik: Akses API yang disokong oleh beberapa bursa cryptocurrency utama
  5. Kecekapan dana: Meningkatkan kecekapan penggunaan dana dalam perdagangan mata wang kripto melalui pengurusan leverage pintar

Risiko Strategik

  1. Risiko Pasaran: Ketidakstabilan yang melampau dalam pasaran cryptocurrency boleh menyebabkan pengunduran yang lebih besar
  2. Risiko kecairan: Sesetengah mata wang kripto bernilai rendah mungkin menghadapi masalah kekurangan kecairan
  3. Risiko Leverage: Ketidakstabilan yang tinggi dalam pasaran mata wang kripto meningkatkan risiko perdagangan dengan leverage
  4. Risiko teknikal: bergantung kepada kestabilan API bursa dan kualiti sambungan rangkaian
  5. Risiko pengawal selia: Perubahan dasar dalam pasaran cryptocurrency mungkin mempengaruhi pelaksanaan strategi

Arah pengoptimuman strategi

  1. Kebolehan beradaptasi: pengenalan parameter penyesuaian dinamik untuk penunjuk kadar turun naik yang unik di pasaran cryptocurrency
  2. Kerjasama Multi-Matawang: Membangunkan Logik Pertukaran Berkaitan Multi-Matawang untuk Membahagikan Risiko Satu Matawang
  3. Penapisan Sentimen Pasaran: Mengintegrasikan Indeks Sentimen Pasaran Cryptocurrency, Optimumkan Masa Masuk
  4. Pengoptimuman kos urus niaga: Mengurangkan kos melalui laluan pintar dan pilihan bursa
  5. Mekanisme amaran awal risiko: mewujudkan sistem amaran awal berdasarkan turun naik pasaran yang tidak normal

ringkaskan

Strategi ini menyediakan penyelesaian automatik yang komprehensif untuk perdagangan cryptocurrency melalui kaedah DCA yang inovatif dan pengurusan risiko dinamik. Walaupun terdapat risiko yang tinggi dalam pasaran cryptocurrency, strategi ini dapat mengekalkan kestabilan dalam kebanyakan keadaan pasaran melalui mekanisme kawalan risiko yang dirancang dengan teliti dan pengoptimuman kesesuaian pasaran. Pengoptimuman masa depan akan memberi tumpuan kepada peningkatan kemampuan strategi untuk menyesuaikan diri dengan kekhususan pasaran cryptocurrency.

Kod sumber strategi
/*backtest
start: 2020-08-29 15:00:00
end: 2025-02-18 17:22:45
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"TRB_USDT"}]
*/

//@version=5
strategy('Autotrade.it DCA', overlay=true, pyramiding=999, default_qty_type=strategy.cash, initial_capital=10000, commission_value=0.02)

// Date Ranges
from_month = 1
from_day = 1
from_year = 2021
to_month = 1
to_day = 1
to_year = 9999
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"

source_type = 'OHLC4'
source_function(type) =>
    if type == 'Close'
        close
    else if type == 'Open'
        open
    else if type == 'High'
        high
    else if type == 'Low'
        low
    else if type == 'HL2'
        hl2
    else if type == 'HL3'
        hlc3
    else if type == 'OHLC4'
        ohlc4
    else if type == 'Median Body'
        (open + close) / 2
    else if type == 'Weighted Close'
        (high + low + 2 * close) / 4
    else if type == 'Trend Biased'
        close > open ? (high + close) / 2 : (low + close) / 2
    else if type == 'Trend Biased Extreme'
        close > open ? high : low
truncate(number, decimals) =>
    factor = math.pow(10, decimals)
    int(number * factor) / factor
// Strategy Inputs
price_deviation = input.float(1.0, title='Price deviation to open safety orders (%)', minval=0.0) / 100
take_profit = 1.0 / 100
base_order = 10.0
safe_order = 10.0
safe_order_volume_scale = 1.1
safe_order_step_scale = 1.1
max_safe_order = 30

var current_so = 0
var initial_order = 0.0
var previous_high_value = 0.0
var original_ttp_value = 0.0
// Calculate our key levels
take_profit_level = strategy.position_avg_price * (1 + take_profit)
startTrade = input.int(defval=1, title='Trade Start')
margin = input.float(title='Margin', defval=1, step=1, tooltip='USDT')
leverage = input.int(title='Leverage', defval=50, tooltip='it only used on futures trade')
multi = 1.125
var float multiplier = 1
symbol = str.replace_all(syminfo.ticker, '.P', '')
var float totalMargin = 0.0
var bool isTrade =false
var float totalPrice = 0.0
var int totalTrade = 0
var float totalQtys = 0
var float sellPrice = 0
var float sellQty = 0


// // First Position
if strategy.position_size == 0 and window and source_function(source_type) > 0 and previous_high_value == 0.0
    strategy.entry('No Position', strategy.long, qty=base_order / source_function(source_type))
    initial_order := source_function(source_type)
    current_so := 1
    previous_high_value := 0.0
    original_ttp_value := 0
    original_ttp_value

threshold = 0.0
if safe_order_step_scale == 1.0
    threshold := initial_order - initial_order * price_deviation * safe_order_step_scale * current_so
    threshold
else
    threshold := initial_order - initial_order * ((price_deviation * math.pow(safe_order_step_scale, current_so) - price_deviation) / (safe_order_step_scale - 1))
    threshold

// Average Down
if current_so > 0 and source_function(source_type) <= threshold and current_so <= max_safe_order and previous_high_value == 0.0
    if(startTrade<=current_so)
        margin := math.round(margin * multiplier * 100) / 100
        multiplier *= multi
        totalMargin += margin
        avePrice = (totalPrice/totalTrade)
        qty = margin*leverage/close
        isTrade := true
        totalPrice+=close
        totalTrade+=1
        totalQtys+=qty
        alert('{"category": "linear", "mode": 3, "tradeMode": 0, "symbol": "' + str.tostring(symbol) + '", "leverage": "' + str.tostring(leverage) + '", "side": "Buy", "orderType": "Market", "marketUnit": "quoteCoin", "qty": "' + str.tostring(margin) + '", "reduceOnly": false, "positionIdx": 1 }')
        strategy.entry('Trade # ' + str.tostring(current_so) +"---Margin: $" + str.tostring(margin), direction=strategy.long, qty=safe_order * math.pow(safe_order_volume_scale, current_so - 1) / source_function(source_type))
    else
        strategy.entry('Trade # ' + str.tostring(current_so) +" No position", direction=strategy.long, qty=safe_order * math.pow(safe_order_volume_scale, current_so - 1) / source_function(source_type))
    current_so += 1
    current_so


// Take Profit!
if take_profit_level <= source_function(source_type) and strategy.position_size > 0 or previous_high_value > 0.0
    if(isTrade)
        avePrice = totalMargin * leverage / totalQtys * 1.002  // Include fee directly
        percentGain = math.round((close - avePrice) / avePrice * 100 * 100) / 100
        gain = math.round(percentGain * leverage * totalMargin / 100 * 100) / 100
        isTrade := false
        sellPrice := avePrice*0.95
        sellQty := totalMargin * leverage/sellPrice
        loop = current_so-1
        testQty = sellQty/loop
        strategy.close_all(comment= "Take Profit: $" + str.tostring(gain))
        alert('{"category": "linear", "mode": 3, "tradeMode": 0, "symbol": "' + str.tostring(symbol) + '", "leverage": "' + str.tostring(testQty) + '", "side": "Sell", "orderType": "Market", "marketUnit": "baseCoin", "qty": "' + str.tostring(sellQty) + '", "reduceOnly": true, "positionIdx": 1, "loop": "' + str.tostring(loop) + '" }')
                    
    else
        strategy.close_all(comment='No Position')
    current_so := 0
    previous_high_value := 0
    original_ttp_value := 0
    multiplier:=1
    totalMargin:=0.0
    totalPrice:=0
    totalTrade:=0
    totalQtys:=0