Chiến lược theo dõi xu hướng tự động dựa trên các điểm trục và đường thoái lui Fibonacci


Ngày tạo: 2024-01-05 11:34:17 sửa đổi lần cuối: 2024-01-05 11:34:17
sao chép: 0 Số nhấp chuột: 687
1
tập trung vào
1621
Người theo dõi

Chiến lược theo dõi xu hướng tự động dựa trên các điểm trục và đường thoái lui Fibonacci

Tổng quan

Chiến lược này tự động xác định các vùng ABC của giá cổ phiếu dựa trên điểm trung tâm và tỷ lệ rút Fibonacci và cung cấp tín hiệu mua bán. Chiến lược sử dụng các điểm trung tâm để xác định các vùng giá cổ phiếu, sau đó tính toán tỷ lệ rút Fibonacci giữa các vùng ABC, tạo ra tín hiệu giao dịch nếu đáp ứng một số điều kiện nhất định.

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

  1. Tính toán điểm cao và điểm thấp của các cổ phiếu
  2. Xác định xem giá đã giảm từ mức cao của đợt trước hay tăng từ mức thấp của đợt trước
  3. Tính toán tỷ lệ Fibonacci rút lui giữa đoạn hiện tại và đoạn trước
  4. Nếu tỷ lệ rút lui của các đoạn tăng và đoạn giảm đều nằm trong phạm vi thích hợp, thì việc hình thành một đoạn ABC có thể được xác định
  5. Sau khi xác nhận băng ABC, thiết lập dừng lỗ là điểm C khi thực hiện nhiều, dừng là 1, 5 lần biến động; thiết lập dừng lỗ là điểm A khi thực hiện ngắn, dừng là 1, 5 lần biến động

Phân tích lợi thế

  1. Sử dụng các điểm trung tâm để xác định các vùng kháng cự hỗ trợ quan trọng để cải thiện độ chính xác tín hiệu
  2. Ứng dụng Fibonacci Retracement nhận dạng hình dạng ABC, tự động nắm bắt các điểm chuyển hướng
  3. Stop Loss là một cách rõ ràng và hợp lý để tránh tổn thất lớn.

Phân tích rủi ro

  1. Các điểm trung tâm và Fibonacci rút lui không đảm bảo đánh giá chính xác các điểm chuyển hướng mỗi lần, có thể có sai sót
  2. Các điểm dừng C và A có thể bị phá vỡ, gây ra tổn thất lớn hơn
  3. Các tham số cần được tối ưu hóa, chẳng hạn như phạm vi của tỷ lệ Fibonacci.

Hướng tối ưu hóa

  1. Có thể kết hợp với nhiều chỉ số kỹ thuật để hỗ trợ xác định hình dạng ABC, tăng độ chính xác tín hiệu
  2. Phạm vi của tỷ lệ rút Fibonacci có thể được tối ưu hóa để phù hợp với nhiều điều kiện thị trường hơn
  3. Mô hình có thể kết hợp các phương pháp học máy để đào tạo để xác định hình dạng ABC

Tóm tắt

Chiến lược này dựa trên các điểm trung tâm để xác định các vùng kháng cự hỗ trợ quan trọng và sử dụng tỷ lệ rút Fibonacci để tự động xác định hình dạng ABC, cho tín hiệu giao dịch dài và ngắn tại các điểm chuyển đổi dải sóng. Lập luận của chiến lược rõ ràng và đơn giản, thiết lập dừng lỗ hợp lý, có thể kiểm soát rủi ro hiệu quả. Tuy nhiên, cũng có một số rủi ro sai lầm, cần phải được tối ưu hóa và cải tiến hơn nữa để thích ứng với nhiều tình huống thị trường.

Mã nguồn chiến lược
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-19 23:59:59
period: 1m
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/
// © kerok3g

//@version=5
strategy("ABCD Strategy", shorttitle="ABCDS", overlay=true, commission_value=0.04)
calcdev(fprice, lprice, fbars, lbars) =>
    rise = lprice - fprice
    run = lbars - fbars
    avg = rise/run
    ((bar_index - lbars) * avg) + lprice

len = input(5)

ph = ta.pivothigh(len, len)
pl = ta.pivotlow(len, len)

var bool ishigh = false
ishigh := ishigh[1]

var float currph = 0.0
var int currphb = 0
currph := nz(currph)
currphb := nz(currphb)

var float oldph = 0.0
var int oldphb = 0
oldph := nz(oldph)
oldphb := nz(oldphb)

var float currpl = 0.0
var int currplb = 0
currpl := nz(currpl)
currplb := nz(currplb)

var float oldpl = 0.0
var int oldplb = 0
oldpl := nz(oldpl)
oldplb := nz(oldplb)

if (not na(ph))
    ishigh := true
    oldph := currph
    oldphb := currphb
    currph := ph
    currphb := bar_index[len]
else
    if (not na(pl))
        ishigh := false
        oldpl := currpl
        oldplb := currplb
        currpl := pl
        currplb := bar_index[len]

endHighPoint = calcdev(oldph, currph, oldphb, currphb)
endLowPoint = calcdev(oldpl, currpl, oldplb, currplb)

plotshape(ph, style=shape.triangledown, color=color.red, location=location.abovebar, offset=-len)
plotshape(pl, style=shape.triangleup, color=color.green, location=location.belowbar, offset=-len)

// var line lnhigher = na
// var line lnlower = na
// lnhigher := line.new(oldphb, oldph, bar_index, endHighPoint)
// lnlower := line.new(oldplb, oldpl, bar_index, endLowPoint)
// line.delete(lnhigher[1])
// line.delete(lnlower[1])

formlong = oldphb < oldplb and oldpl < currphb and currphb < currplb
longratio1 = (currph - oldpl) / (oldph - oldpl)
longratio2 = (currph - currpl) / (currph - oldpl)

formshort = oldplb < oldphb and oldphb < currplb and currplb < currphb
shortratio1 = (oldph - currpl) / (oldph - oldpl)
shortratio2 = (currph - currpl) / (oldph - currpl)

// prevent multiple entry for one pattern
var int signalid = 0
signalid := nz(signalid[1])

longCond = formlong and 
           longratio1 < 0.7 and 
           longratio1 > 0.5 and 
           longratio2 > 1.1 and 
           longratio2 < 1.35 and 
           close < oldph and 
           close > currpl and 
           signalid != oldplb
if (longCond)
    signalid := oldplb
    longsl = currpl - ta.tr
    longtp = ((close - longsl) * 1.5) + close
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", limit=math.min(longtp, oldph), stop=longsl)

shortCond = formshort and 
             shortratio1 < 0.7 and 
             shortratio1 > 0.5 and 
             shortratio2 > 1.1 and 
             shortratio2 < 1.35 and 
             close > oldpl and 
             close < currph and 
             signalid != oldphb

if (shortCond)
    signalid := oldphb
    shortsl = currph + ta.tr
    shorttp = close - ((shortsl - close) * 1.5)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", limit=math.max(shorttp, oldpl), stop=shortsl)