Chiến lược giao dịch đa yếu tố Bitcoin

Tác giả:ChaoZhang, Ngày: 2023-09-25 18:24:02
Tags:

Tổng quan

Đây là một chiến lược giao dịch toàn diện được thiết kế để giao dịch Bitcoin và các loại tiền điện tử khác trong khoảng thời gian 15 phút. Nó kết hợp nhiều chỉ số để tạo ra tín hiệu mua và bán, bao gồm Trung bình Di chuyển Triple Exponential (TEMA), Trung bình True Range (ATR) và nến Heikin-Ashi, cùng với các tính năng quản lý rủi ro như lấy lợi nhuận và dừng lỗ.

Chiến lược logic

Chiến lược sử dụng các chỉ số sau:

  • Trung bình Di chuyển Triple Exponential (TEMA): Ba đường TEMA có chiều dài và nguồn khác nhau, dựa trên giá cao, thấp và gần tương ứng.

  • Giá trị của các loại chứng khoán được tính toán theo các quy định của quy định trên.

  • Supertrend: Được tính bằng cách sử dụng ATR và nhân để xác định hướng xu hướng.

  • Trung bình di chuyển đơn giản (SMA): Được áp dụng trên đường TEMA ngắn để làm mịn các giá trị của nó.

  • Heikin-Ashi Close: Được sử dụng để xác nhận xu hướng bổ sung.

Tín hiệu đầu vào dài được kích hoạt khi TEMA ngắn nằm trên cả hai đường TEMA dài, Supertrend tăng, TEMA ngắn nằm trên SMA của nó và đóng Heikin-Ashi cao hơn đóng trước đó.

Tín hiệu đầu vào ngắn được kích hoạt khi các điều kiện ngược lại được đáp ứng.

Lấy lợi nhuận và dừng lỗ được thiết lập ở mức 1% và 3% giá nhập cảnh.

Phân tích lợi thế

  • Nhiều yếu tố cải thiện độ chính xác Kết hợp các chỉ số xu hướng, biến động, mô hình có thể cải thiện độ chính xác và tránh các tín hiệu sai.

  • Rủi ro kiểm soát dừng lỗ/lấy lợi nhuận hợp lý Đặt tốt mức dừng lỗ và lấy lợi nhuận khóa lợi nhuận và hạn chế lỗ.

  • Không gian tối ưu hóa tham số lớn Các thông số chỉ số có thể được điều chỉnh linh hoạt để thích nghi với thị trường thay đổi.

  • Thực tế hơn với hoa hồng được tính vào Ủy ban xem xét làm cho backtest kết quả gần hơn với hiệu suất sống.

Phân tích rủi ro

  • Rủi ro sai đánh giá do tối ưu hóa quá mức Quá nhiều chỉ số kết hợp cũng có thể dẫn đến đánh giá sai.

  • Rủi ro cao hơn với giao dịch ngắn hạn So với khung thời gian dài hơn, 15 phút dễ bị các sự kiện và rủi ro đột ngột hơn.

  • Chiến lược ổn định cần xác nhận thêm Cần thử nghiệm rộng rãi hơn trên lịch sử và thị trường lâu dài để đảm bảo độ tin cậy.

  • Tối ưu hóa dài với nhiều tham số Nhiều tham số được giới thiệu dẫn đến quá trình dài để tối ưu hóa tất cả các kết hợp tham số.

Hướng dẫn cải thiện

  • Đánh giá hiệu quả thực tế của mỗi chỉ số Kiểm tra ngược để xác minh lợi ích gia tăng thực tế của mỗi chỉ số, tránh dư thừa.

  • Tối ưu hóa và kiểm tra độ ổn định Kết quả tối ưu hóa thử nghiệm trên nhiều thị trường hơn để đảm bảo độ bền.

  • Kết hợp các chiến lược dừng lỗ Ví dụ như dừng lại, dừng lại lệnh để kiểm soát rủi ro hơn nữa.

  • Xem xét các yếu tố chi phí khác Ví dụ như trượt để làm cho backtest gần hơn với màn trình diễn trực tiếp.

Tóm lại

Chiến lược này kết hợp nhiều chỉ số và kỹ thuật quản lý rủi ro phù hợp với giao dịch Bitcoin 15 phút. Vẫn còn nhiều không gian để tối ưu hóa các thông số, đánh giá hiệu quả của chỉ số, kiểm tra ổn định thị trường rộng rãi và giới thiệu nhiều yếu tố thực tế hơn để tìm sự kết hợp tối ưu trong cách tiếp cận đa yếu tố. Với tối ưu hóa và xác minh liên tục, nó có thể trở thành một công cụ hiệu quả cho giao dịch tần số cao tiền điện tử.


/*backtest
start: 2023-08-25 00:00:00
end: 2023-09-09 00:00:00
period: 10m
basePeriod: 1m
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/
// © deperp
//@version=5
strategy('3kilos', shorttitle='3kilos BTC 15m', overlay=true, initial_capital=100000, max_bars_back=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)

short = input.int(50, minval=1)
srcShort = input(high, title='TEMA short')

long = input.int(100, minval=1)
srcLong = input(low, title='TEMA long 2')

long2 = input.int(350, minval=1)
srcLong2 = input(close, title='TEMA long 3')

atrLength = input.int(550, title='ATR Length', minval=1)
mult = input.float(3, title="Multiplier", minval=0.5, step=1)

smaPeriod = input.int(100, title="SMA Period", minval=1)

takeProfitPercent = input.float(1, title="Take Profit (%)", minval=0.1) / 100
stopLossPercent = input.float(3, title="Stop Loss (%)", minval=0.1) / 100


tema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    ema3 = ta.ema(ema2, length)
    3 * (ema1 - ema2) + ema3

tema1 = tema(srcShort, short)
plot(tema1, color=color.new(color.red, 0), linewidth=2)

tema2 = tema(srcLong, long)
plot(tema2, color=color.new(color.blue, 0), linewidth=2)

tema3 = tema(srcLong2, long2)
plot(tema3, color=color.new(color.green, 0), linewidth=2)

// Custom ATR calculation with EMA smoothing
atr_ema(src, length) =>
    trueRange = math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1]))
    emaTrueRange = ta.ema(trueRange, length)
    emaTrueRange

// Calculate ATR with EMA smoothing
atr = atr_ema(close, atrLength)

// Calculate Supertrend
var float up = na
var float dn = na
var bool uptrend = na
up := na(up[1]) ? hl2 - (mult * atr) : uptrend[1] ? math.max(hl2 - (mult * atr), up[1]) : hl2 - (mult * atr)
dn := na(dn[1]) ? hl2 + (mult * atr) : uptrend[1] ? hl2 + (mult * atr) : math.min(hl2 + (mult * atr), dn[1])
uptrend := na(uptrend[1]) ? true : close[1] > dn[1] ? true : close[1] < up[1] ? false : uptrend[1]

// Calculate SMA
sma = ta.sma(tema1, smaPeriod)

// Heikin-Ashi Close
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = request.security(haTicker, timeframe.period, close)


// Trend determination using Heikin-Ashi Close
longC = tema1 > tema2 and tema1 > tema3 and uptrend and tema1 > sma and haClose > haClose[1]
shortC = tema1 < tema2 and tema1 < tema3 and not uptrend and tema1 < sma and haClose < haClose[1]


alertlong = longC and not longC[1]
alertshort = shortC and not shortC[1]

useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2023"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

stopLossLevelLong = close - atr * mult
stopLossLevelShort = close + atr * mult
longTakeProfitLevel = close * (1 + takeProfitPercent)
longStopLossLevel = close * (1 - stopLossPercent)
shortTakeProfitLevel = close * (1 - takeProfitPercent)
shortStopLossLevel = close * (1 + stopLossPercent)



if inTradeWindow and longC
    strategy.entry('Long', strategy.long, comment='Long')
    strategy.exit("TP Long", "Long", limit=longTakeProfitLevel, stop=longStopLossLevel, comment="TP/SL Long")

if inTradeWindow and shortC
    strategy.entry('Short', strategy.short, comment='Short')
    strategy.exit("TP Short", "Short", limit=shortTakeProfitLevel, stop=shortStopLossLevel, comment="TP/SL Short")

// Alerts

alertcondition(longC, title='Long', message=' Buy Signal ')
alertcondition(shortC, title='Short', message=' Sell Signal ')

Thêm nữa