Chiến lược giao dịch đảo ngược nến dựa trên kênh Fibonacci

Tác giả:ChaoZhang, Ngày: 2023-11-21 17:24:17
Tags:

img

Tổng quan

Chiến lược này tính toán các kênh mở rộng Fibonacci dựa trên đường trung bình động để xác định các khu vực hỗ trợ và kháng cự chính và giúp các nhà giao dịch dự đoán các điểm đảo ngược tiềm năng trên thị trường.

Chiến lược logic

Cốt lõi của chiến lược này là tính toán ba kênh Keltner dựa trên đường trung bình động, giúp xác định ranh giới trên và dưới của các kênh Fibonacci. Các mức mở rộng Fibonacci mặc định được sử dụng là 1.618, 2.618 và 4.236.

Khi phân tích hành động giá, các nhà giao dịch có thể tập trung vào các dải Fibonacci cực, đó là ranh giới trên và dưới của các dải. Nếu giá giao dịch bên ngoài các dải trong một vài thanh và sau đó quay trở lại bên trong, nó có thể chỉ ra một sự đảo ngược tiềm năng. Mô hình này cho thấy giá đã tạm thời lệch khỏi phạm vi thông thường và có thể phải sửa đổi.

Để tăng độ chính xác của chỉ số Dải Fibonacci, các nhà giao dịch thường sử dụng nhiều khung thời gian. Bằng cách sắp xếp các tín hiệu ngắn hạn với kịch bản khung thời gian lớn hơn, các nhà giao dịch có thể hiểu rõ hơn về xu hướng thị trường tổng thể.

Ngoài việc xác định các bước đảo ngược tiềm năng, các nhà giao dịch cũng có thể sử dụng chỉ số Fibonacci Bands để xác định các điểm nhập và thoát. Mức hỗ trợ và kháng cự ngắn hạn có thể được rút ra từ các dải, cung cấp những hiểu biết có giá trị cho việc ra quyết định giao dịch.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Có thể xác định các khu vực hỗ trợ và kháng cự chính để giúp dự đoán các điểm đảo ngược giá.

  2. Cải thiện độ chính xác tín hiệu giao dịch khi kết hợp với phân tích nhiều khung thời gian.

  3. Có thể xác định rõ các điểm vào và ra.

  4. Có thể đánh giá sức mạnh và hướng xu hướng thị trường bằng cách phân tích độ dốc đường trung.

  5. Sử dụng tỷ lệ tự nhiên dựa trên lý thuyết Fibonacci để xác định mức giá chính.

Phân tích rủi ro

Những rủi ro chính của chiến lược này là:

  1. Giống như tất cả các chỉ số phân tích kỹ thuật, chiến lược không thể dự đoán hành động giá và đảo ngược với độ chính xác 100%.

  2. Cài đặt không chính xác hoặc chủ quan của các mức mở rộng Fibonacci và các thông số kênh Keltner có thể ảnh hưởng đến độ tin cậy của tín hiệu.

  3. Giá có thể vượt qua các dải Fibonacci và tiếp tục chạy, dẫn đến tổn thất.

  4. Phân tích nhiều khung thời gian có thể không phải lúc nào cũng áp dụng.

  5. Các tín hiệu có thể ít đáng tin cậy hơn ở các thị trường biến động cao hoặc thanh khoản thấp.

Để giảm thiểu những rủi ro này, xác nhận tín hiệu với các chỉ số khác như RSI, điều chỉnh các tham số để phù hợp với các điều kiện thị trường khác nhau, sử dụng dừng lỗ để kiểm soát rủi ro cho mỗi giao dịch.

Hướng dẫn tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo nhiều cách:

  1. Kiểm tra các loại và chiều dài các tham số khác nhau để tối ưu hóa đường trung bình động và Keltner Channel để phù hợp hơn với các thuộc tính thống kê của các thị trường khác nhau.

  2. Kiểm tra các khu vực chính khác của Fibonacci như 0,5 hoặc 0,786 như các khu vực mở rộng cho Dải Fibonacci.

  3. Kết hợp các tín hiệu nhập cảnh với các mô hình giá, khối lượng hoặc các chỉ số khác để xác nhận.

  4. Tối ưu hóa các chiến lược dừng lỗ để thoát sớm khi xu hướng đảo ngược.

  5. Phục hồi thử nghiệm tối ưu hóa các quy tắc nhập và xuất.

Kết luận

Tóm lại, chiến lược dựa trên kênh Fibonacci để xác định các khu vực hỗ trợ / kháng cự chính cho giao dịch đảo ngược nến là một cách tiếp cận hiệu quả để tận dụng các nguyên tắc tỷ lệ tự nhiên để hướng dẫn các quyết định giao dịch. Chiến lược đã cho thấy hiệu suất mạnh mẽ trong các điều kiện thị trường khác nhau.


/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
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/
// © blackcat1402
//@version=5
strategy('[blackcat] L2 Fibonacci Bands', overlay=true)

// Define the moving average type and length
maType = input.string(title='MA Type', defval='WMA', options=['SMA', 'EMA', 'WMA', 'HMA'])
maLength = input.int(title='MA Length', defval=233, minval=1)
src = input(title='Data Source', defval=hl2)

// Define the Fibonacci expansion levels
fib1 = input.float(title='Fibonacci Level 1', defval=1.618, minval=0)
fib2 = input.float(title='Fibonacci Level 2', defval=2.618, minval=0)
fib3 = input.float(title='Fibonacci Level 3', defval=4.236, minval=0)

// Calculate the moving average
ma = maType == 'SMA' ? ta.sma(src, maLength) : maType == 'EMA' ? ta.ema(src, maLength) : maType == 'WMA' ? ta.wma(src, maLength) : maType == 'HMA' ? ta.hma(src, maLength) : na

// Calculate the Keltner Channels
kcMultiplier = input.int(title='Keltner Channel Multiplier', defval=2, minval=0)
kcLength = input.int(title='Keltner Channel Length', defval=89, minval=1)
kcTrueRange = ta.tr
kcAverageTrueRange = ta.sma(kcTrueRange, kcLength)
kcUpper = ma + kcMultiplier * kcAverageTrueRange
kcLower = ma - kcMultiplier * kcAverageTrueRange

// Calculate the Fibonacci Bands
fbUpper1 = ma + fib1 * (kcUpper - ma)
fbUpper2 = ma + fib2 * (kcUpper - ma)
fbUpper3 = ma + fib3 * (kcUpper - ma)
fbLower1 = ma - fib1 * (ma - kcLower)
fbLower2 = ma - fib2 * (ma - kcLower)
fbLower3 = ma - fib3 * (ma - kcLower)

// Plot the Fibonacci Bands
plot(ma, title='Midband', color=color.new(color.blue, 0), linewidth=2)
plot(fbUpper1, title='Upper Band 1', color=color.new(color.green, 0), linewidth=1)
plot(fbUpper2, title='Upper Band 2', color=color.new(color.green, 0), linewidth=1)
plot(fbUpper3, title='Upper Band 3', color=color.new(color.green, 0), linewidth=1)
plot(fbLower1, title='Lower Band 1', color=color.new(color.red, 0), linewidth=1)
plot(fbLower2, title='Lower Band 2', color=color.new(color.red, 0), linewidth=1)
plot(fbLower3, title='Lower Band 3', color=color.new(color.red, 0), linewidth=1)

// Define the entry and exit conditions
longCondition = ta.crossover(src, fbUpper3) and ta.rsi(src, 14) > 60
shortCondition = ta.crossunder(src, fbLower3) and ta.rsi(src, 14) < 40
exitCondition = ta.crossover(src, ma) or ta.crossunder(src, ma)

// Execute the trades
if longCondition
    strategy.entry('Long', strategy.long)
if shortCondition
    strategy.entry('Short', strategy.short)
if exitCondition
    strategy.close_all()



Thêm nữa