Strategi perdagangan kuantitatif mata uang kripto berdasarkan DCA dinamis

DCA TP SO (Safety Orders) API OHLC4 HL2 HL3 ROI
Tanggal Pembuatan: 2025-02-19 16:59:45 Akhirnya memodifikasi: 2025-02-27 17:56:06
menyalin: 1 Jumlah klik: 462
2
fokus pada
319
Pengikut

Strategi perdagangan kuantitatif mata uang kripto berdasarkan DCA dinamis Strategi perdagangan kuantitatif mata uang kripto berdasarkan DCA dinamis

Ringkasan

Ini adalah strategi perdagangan kuantitatif yang dirancang khusus untuk pasar cryptocurrency, yang memanfaatkan karakteristik volatilitas tinggi pasar cryptocurrency, dengan kenaikan harga secara dinamis saat harga berbalik melalui rata-rata biaya cerdas (DCA). Strategi ini berjalan pada kerangka waktu 15 menit, yang dapat secara efektif menanggapi fluktuasi cepat pasar cryptocurrency, sambil menghindari risiko yang ditimbulkan oleh perdagangan berlebihan.

Prinsip Strategi

Strategi ini terdiri dari empat modul utama:

  1. Sistem Smart Entry: Pendaftaran pertama berdasarkan nilai rata-rata OHLC4 yang beradaptasi dengan volatilitas tinggi pasar kripto
  2. Mekanisme pelunasan dinamis: memicu pesanan aman saat harga kembali, pelunasan meningkat seiring dengan kedalaman, memanfaatkan fluktuasi pasar
  3. Sistem manajemen risiko: Optimalkan rasio risiko-keuntungan dengan penambahan piramida dan penyesuaian leverage yang fleksibel
  4. Pengendalian stop-loss yang cepat: mekanisme stop-loss yang dirancang untuk karakteristik pasar cryptocurrency yang berfluktuasi cepat, termasuk pengoptimalan biaya operasional

Keunggulan Strategis

  1. Adaptasi Pasar: Dioptimalkan khusus untuk karakteristik pasar cryptocurrency yang sangat berfluktuasi
  2. Dispersifikasi risiko: Mengurangi risiko terobosan di pasar cryptocurrency dengan membangun gudang secara dinamis
  3. Efisiensi Leverage: Mengambil Keuntungan dari Fluktuasi Harga di Pasar Cryptocurrency
  4. Eksekusi otomatis: Akses API yang didukung oleh beberapa bursa cryptocurrency utama
  5. Efisiensi dana: Meningkatkan efisiensi penggunaan dana dalam perdagangan cryptocurrency melalui manajemen leverage cerdas

Risiko Strategis

  1. Risiko Pasar: Fluktuasi Ekstrim di Pasar Cryptocurrency Bisa Membuat Penarikan Besar
  2. Risiko likuiditas: Beberapa cryptocurrency dengan nilai pasar kecil mungkin menghadapi masalah likuiditas yang kurang
  3. Risiko Leverage: Volatilitas Tinggi di Pasar Cryptocurrency Meningkatkan Risiko Leverage
  4. Risiko teknis: bergantung pada stabilitas API dan kualitas koneksi jaringan
  5. Risiko regulasi: Perubahan kebijakan di pasar cryptocurrency dapat mempengaruhi pelaksanaan strategi

Arah optimasi strategi

  1. Adaptasi volatilitas: memperkenalkan indikator volatilitas khusus pasar cryptocurrency untuk menyesuaikan parameter secara dinamis
  2. Synergy Multi-Currency: Mengembangkan Logika Transaksi Interaktif Multi-Currency untuk Menciptakan Risiko Uni-Currency
  3. Filter Sentimen Pasar: Mengintegrasikan Indikator Sentimen Pasar Cryptocurrency, Mengoptimalkan Waktu Masuk
  4. Optimalisasi biaya transaksi: Mengurangi biaya melalui rute cerdas dan opsi bursa
  5. Mekanisme peringatan dini risiko: membangun sistem peringatan dini berdasarkan fluktuasi pasar yang tidak biasa

Meringkaskan

Strategi ini memberikan solusi otomatisasi yang komprehensif untuk perdagangan cryptocurrency melalui metode DCA yang inovatif dan manajemen risiko yang dinamis. Meskipun pasar cryptocurrency berisiko tinggi, strategi ini dapat mempertahankan stabilitas di sebagian besar lingkungan pasar melalui mekanisme kontrol risiko yang dirancang dengan cermat dan optimasi adaptasi pasar.

Kode 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