Chiến lược giao dịch định lượng tiền điện tử dựa trên DCA động

DCA TP SO (Safety Orders) API OHLC4 HL2 HL3 ROI
Ngày tạo: 2025-02-19 16:59:45 sửa đổi lần cuối: 2025-02-27 17:56:06
sao chép: 1 Số nhấp chuột: 462
2
tập trung vào
319
Người theo dõi

Chiến lược giao dịch định lượng tiền điện tử dựa trên DCA động Chiến lược giao dịch định lượng tiền điện tử dựa trên DCA động

Tổng quan

Đây là một chiến lược giao dịch định lượng được thiết kế đặc biệt cho thị trường tiền điện tử, tận dụng các đặc điểm biến động cao của thị trường tiền điện tử, tích lũy động khi giá cả thay đổi thông qua trung bình chi phí thông minh ((DCA)). Chiến lược này hoạt động trong khung thời gian 15 phút, có thể đáp ứng hiệu quả với sự biến động nhanh chóng của thị trường tiền điện tử, đồng thời tránh rủi ro do giao dịch quá mức.

Nguyên tắc chiến lược

Chiến lược bao gồm bốn mô-đun cốt lõi:

  1. Hệ thống nhập cảnh thông minh: Đặt hàng đầu tiên dựa trên giá trung bình trọng số OHLC4, thích nghi với tính năng biến động cao của thị trường tiền điện tử
  2. Cơ chế bù đắp động: kích hoạt đơn đặt hàng an toàn khi giá bị điều chỉnh, số lượng bù đắp tăng theo độ sâu, tận dụng tối đa biến động của thị trường
  3. Hệ thống quản lý rủi ro: tối ưu hóa tỷ lệ lợi nhuận rủi ro bằng cách tăng cường theo kiểu kim tự tháp và điều chỉnh lợi nhuận linh hoạt
  4. Kiểm soát dừng nhanh: Cơ chế dừng được thiết kế cho các đặc điểm biến động nhanh của thị trường tiền điện tử, bao gồm tối ưu hóa phí tổn

Lợi thế chiến lược

  1. Thị trường thích ứng: được tối ưu hóa đặc biệt cho các đặc tính biến động cao của thị trường tiền điện tử
  2. Phân tán rủi ro: Giảm rủi ro bất ngờ trong thị trường tiền điện tử bằng cách xây dựng kho hàng loạt động
  3. Hiệu quả lợi nhuận: Tận dụng tối đa biến động giá của thị trường tiền điện tử
  4. Tự động hóa thực thi: hỗ trợ truy cập API cho nhiều sàn giao dịch tiền điện tử chính
  5. Hiệu quả tài chính: Tăng hiệu quả sử dụng vốn giao dịch tiền điện tử thông qua quản lý đòn bẩy thông minh

Rủi ro chiến lược

  1. Rủi ro thị trường: Sự biến động cực đoan của thị trường tiền điện tử có thể dẫn đến sự rút lui lớn hơn
  2. Rủi ro thanh khoản: Một số đồng tiền điện tử có giá trị thị trường nhỏ có thể gặp vấn đề thiếu thanh khoản
  3. Rủi ro đòn bẩy: Sự biến động cao của thị trường tiền điện tử làm tăng rủi ro giao dịch đòn bẩy
  4. Rủi ro kỹ thuật: phụ thuộc vào sự ổn định của API của sàn giao dịch và chất lượng kết nối mạng
  5. Rủi ro về quy định: Thay đổi chính sách thị trường tiền điện tử có thể ảnh hưởng đến việc thực hiện chiến lược

Hướng tối ưu hóa chiến lược

  1. Tính tự điều chỉnh biến động: giới thiệu các chỉ số biến động đặc trưng cho thị trường tiền điện tử để điều chỉnh các tham số động
  2. Hợp tác đa tiền tệ: Phát triển logic giao dịch liên kết đa tiền tệ để phân tán rủi ro đồng tiền đơn
  3. Bộ lọc cảm xúc thị trường: tích hợp các chỉ số cảm xúc thị trường tiền điện tử, tối ưu hóa thời gian nhập cảnh
  4. Tối ưu hóa chi phí giao dịch: Giảm chi phí bằng cách chọn tuyến thông minh và sàn giao dịch
  5. Cơ chế cảnh báo rủi ro: xây dựng hệ thống cảnh báo dựa trên biến động bất thường của thị trường

Tóm tắt

Chiến lược này cung cấp một giải pháp tự động hóa toàn diện cho giao dịch tiền điện tử thông qua các phương pháp DCA sáng tạo và quản lý rủi ro động. Mặc dù thị trường tiền điện tử có rủi ro cao, chiến lược này có thể duy trì sự ổn định trong hầu hết các môi trường thị trường thông qua các cơ chế kiểm soát rủi ro được thiết kế cẩn thận và tối ưu hóa khả năng thích ứng của thị trường.

Mã nguồn chiến lược
/*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