Chiến lược giao dịch định lượng theo dõi xu hướng có điều kiện đa dạng dựa trên mức thoái lui Fibonacci

SL MA TP ATR
Ngày tạo: 2024-12-20 15:55:57 sửa đổi lần cuối: 2024-12-20 15:55:57
sao chép: 1 Số nhấp chuột: 420
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng theo dõi xu hướng có điều kiện đa dạng dựa trên mức thoái lui Fibonacci

Tổng quan

Chiến lược này là một chiến lược theo dõi xu hướng dựa trên mức Fibonacci Reversal. Chiến lược này chủ yếu sử dụng mức Fibonacci Reversal quan trọng để tính toán giá cao nhất và giá thấp nhất của ngày giao dịch trước đó, kết hợp với vị trí giá mở và cửa sổ thời gian để đặt nhiều điều kiện vào, và thiết lập vị trí dừng lỗ tương ứng cho các điều kiện khác nhau, để nắm bắt xu hướng và kiểm soát rủi ro.

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

Chiến lược này đầu tiên tính toán sáu mức thu hồi Fibonacci quan trọng: 0,23,6%, 38,2%, 50%, 61,8% và 100%. Tùy thuộc vào vị trí của giá mở so với các mức này, điều kiện nhập cảnh được phân chia thành ba trường hợp: 1) giá mở nằm giữa 23,6%-50%; 2) giá mở là 61,8% và trong cửa sổ thời gian được chỉ định; 3) giá mở thấp hơn 23,6% và thấp hơn mức thấp ngày trước.

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

  1. Sử dụng các mức thu hồi Fibonacci làm mức kháng cự hỗ trợ quan trọng, các mức này có ý nghĩa hướng dẫn mạnh mẽ trong thị trường.
  2. Kết hợp với nhiều điều kiện về cửa sổ thời gian và vị trí giá, chính xác của chiến lược được nâng cao.
  3. Đặt vị trí dừng lỗ phù hợp cho các tình huống khác nhau, thể hiện sự linh hoạt trong quản lý rủi ro.
  4. Chiến lược logic rõ ràng, các tham số có thể điều chỉnh được, dễ dàng tối ưu hóa theo các tình huống thị trường khác nhau.

Rủi ro chiến lược

  1. Tính hiệu quả của mức Fibonacci có thể bị giảm do môi trường thị trường.
  2. Thiết lập cửa sổ thời gian cố định có thể bỏ lỡ cơ hội tốt trong các khoảng thời gian khác.
  3. Cài đặt vị trí dừng lỗ có thể dễ dàng bị chạm khi dao động mạnh.
  4. Chiến lược không tính đến xu hướng thị trường tổng thể, có thể giao dịch thường xuyên trong thị trường ngang hoặc biến động.

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

  1. Tiến hành các chỉ số đánh giá xu hướng (như hệ thống đường trung bình), thực hiện giao dịch khi xu hướng rõ ràng.
  2. Tăng chỉ số biến động (ví dụ như ATR), động điều chỉnh vị trí dừng lỗ
  3. Thêm vào đó là phân tích khối lượng giao dịch để tăng độ tin cậy của các đợt phá giá.
  4. Thiết lập cửa sổ thời gian tối ưu hóa, xem xét khoảng thời gian giao dịch tốt nhất dựa trên phân tích dữ liệu lịch sử.
  5. Tăng mục tiêu lợi nhuận và cải thiện cơ chế kết thúc lợi nhuận.

Tóm tắt

Chiến lược này xây dựng một hệ thống giao dịch hoàn chỉnh hơn bằng cách kết hợp các mức thu hồi Fibonacci, cửa sổ thời gian và nhiều điều kiện. Ưu điểm của chiến lược là logic rõ ràng, rủi ro có thể được kiểm soát, nhưng vẫn cần phải được tối ưu hóa và cải tiến theo tình hình thị trường. Bằng cách thêm các tính năng tối ưu hóa như phán đoán xu hướng, động thái dừng lỗ và phân tích khối lượng giao dịch, bạn có thể nâng cao hơn nữa sự ổn định và khả năng lợi nhuận của chiến lược.

Mã nguồn chiến lược
/*backtest
start: 2024-11-19 00:00:00
end: 2024-12-18 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Fibonacci Retracement Strategy", overlay=true)

// Get the high and low of the previous day
previousHigh = request.security(syminfo.tickerid, "D", high[1])
previousLow = request.security(syminfo.tickerid, "D", low[1])

// Fibonacci levels for the previous day (from high to low)
fib0 = previousHigh
fib236 = previousHigh - (previousHigh - previousLow) * 0.236
fib382 = previousHigh - (previousHigh - previousLow) * 0.382
fib50 = previousHigh - (previousHigh - previousLow) * 0.5
fib618 = previousHigh - (previousHigh - previousLow) * 0.618
fib1 = previousHigh - (previousHigh - previousLow) * 1

// Current open price (for the current day)
openPrice = open

// Time for 9:15 AM check
timeStart = timestamp(year, month, dayofmonth, 9, 15)
timeClose = timestamp(year, month, dayofmonth, 9, 30) // Time window to allow for opening range

// Entry Conditions
buyCondition1 = openPrice >= fib236 and openPrice <= fib50
buyCondition2 = openPrice == fib618 and time >= timeStart and time <= timeClose
buyCondition3 = openPrice < fib236 and openPrice < previousLow

// Stop Loss based on conditions
stopLoss1 = fib618
stopLoss2 = fib618 - (fib618 - fib1) / 2
stopLoss3 = fib382

// Plot Fibonacci levels with calculated values
plot(fib0, color=color.green, linewidth=1, title="Fib 0")
plot(fib236, color=color.red, linewidth=1, title="Fib 0.236")
plot(fib382, color=color.blue, linewidth=1, title="Fib 0.382")
plot(fib50, color=color.yellow, linewidth=1, title="Fib 0.5")
plot(fib618, color=color.purple, linewidth=1, title="Fib 0.618")
plot(fib1, color=color.orange, linewidth=1, title="Fib 1")

// Plot labels for Fibonacci levels with actual values
label.new(x=bar_index, y=fib0, text="Fib 0: " + str.tostring(fib0), style=label.style_label_right, color=color.green, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib236, text="Fib 0.236: " + str.tostring(fib236), style=label.style_label_right, color=color.red, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib382, text="Fib 0.382: " + str.tostring(fib382), style=label.style_label_right, color=color.blue, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib50, text="Fib 0.5: " + str.tostring(fib50), style=label.style_label_right, color=color.yellow, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib618, text="Fib 0.618: " + str.tostring(fib618), style=label.style_label_right, color=color.purple, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib1, text="Fib 1: " + str.tostring(fib1), style=label.style_label_right, color=color.orange, textcolor=color.white, size=size.small, yloc=yloc.abovebar)

// Entry conditions and strategy execution
if (buyCondition1)
    strategy.entry("Buy", strategy.long, stop=stopLoss1)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition2)
    strategy.entry("Buy", strategy.long, stop=stopLoss2)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition3)
    strategy.entry("Buy", strategy.long, stop=stopLoss3)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

// Show exit signals and labels
if (buyCondition1)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss1)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition2)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss2)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition3)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss3)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)