Chiến lược dự đoán con đường tương lai của MacD

Tác giả:ChaoZhang, Ngày: 2023-12-13 17:21:44
Tags:

img

Tổng quan

Ý tưởng cốt lõi của chiến lược này là dự đoán xu hướng giá bằng cách phân tích xu hướng tương lai của chỉ số MacD. Chiến lược này tận dụng tối đa các tín hiệu giao dịch được tạo ra bởi sự chéo chéo của các đường trung bình di chuyển nhanh và chậm tạo thành chỉ số MacD.

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

  1. Tính toán sự khác biệt (giá trị lịch sử) của chỉ số MacD để xác định sự gia tăng và giảm của đường MacD và đường tín hiệu.
  2. Sử dụng giá trị tương lai của chỉ số MacD trong khung thời gian 4 giờ bằng cách đặt các tùy chọn mua để đánh giá xu hướng tương lai của chỉ số MacD và dự đoán xu hướng giá.
  3. Đi dài khi chênh lệch chỉ số MacD lớn hơn 0 (tức là thị trường tăng) và dự kiến sẽ tiếp tục tăng; đi ngắn khi chênh lệch chỉ số MacD nhỏ hơn 0 (tức là thị trường giảm) và dự kiến sẽ tiếp tục giảm.
  4. Chiến lược kết hợp cả hai phong cách giao dịch theo xu hướng và đảo ngược xu hướng, nắm bắt xu hướng trong khi cũng nắm bắt các điểm đảo ngược xu hướng.

Phân tích lợi thế

  1. Lợi thế của việc sử dụng chỉ số MacD để đánh giá xu hướng thị trường có thể lọc hiệu quả các sự củng cố và nắm bắt xu hướng dài hạn.
  2. Với sự giúp đỡ của các dự đoán về xu hướng tương lai của chỉ số MacD, các điểm chuyển đổi trong giá có thể được xác định sớm để tăng khả năng nhìn về tương lai của chiến lược.
  3. Tích hợp cả hai phong cách giao dịch theo xu hướng và đảo ngược xu hướng cho phép đảo ngược vị trí kịp thời trong quá trình theo dõi xu hướng để có được lợi nhuận cao hơn.
  4. Các thông số chiến lược có thể điều chỉnh cho phép người dùng tối ưu hóa dựa trên các khung thời gian và môi trường thị trường khác nhau để cải thiện sự ổn định của chiến lược.

Phân tích rủi ro

  1. Việc dựa vào dự đoán về xu hướng tương lai của chỉ số MacD có thể dẫn đến các giao dịch thất bại nếu dự đoán không chính xác.
  2. Stop loss nên được sử dụng để kiểm soát lỗ duy nhất.
  3. Sự chậm trễ của chỉ số MacD có thể bỏ lỡ cơ hội đảo ngược giá nhanh.
  4. Tác động của chi phí giao dịch cần được theo dõi.

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

  1. Kết hợp các chỉ số khác để dự đoán để giảm sự phụ thuộc vào chỉ số MacD duy nhất và cải thiện độ chính xác dự đoán, chẳng hạn như kiểm tra những thay đổi về khối lượng giao dịch.
  2. Thêm các thuật toán máy học, đào tạo mô hình để dự đoán xu hướng trong tương lai của chỉ số MacD.
  3. Tối ưu hóa cài đặt tham số để tìm kết hợp tham số tốt nhất.
  4. Môi trường thị trường khác nhau phù hợp với các cấu hình tham số khác nhau, một hệ thống thích nghi có thể được thêm vào để tự động tối ưu hóa các tham số.

Kết luận

Trong khi cung cấp đầy đủ lợi thế cho chỉ số MacD trong việc xác định xu hướng, chiến lược này cũng kết hợp dự đoán về xu hướng tương lai của chỉ số. Dựa trên việc nắm bắt xu hướng, nó cũng nắm bắt các bước ngoặt quan trọng. So với việc chỉ đơn giản theo đuổi xu hướng, chiến lược này có tiềm năng tiên đoán và lợi nhuận lớn hơn. Tất nhiên, cũng có một số rủi ro cần tối ưu hóa và cải thiện hơn nữa. Nhìn chung, chiến lược xứng đáng với nghiên cứu và ứng dụng sâu sắc.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © x11joe
strategy(title="MacD (Future Known or Unknown) Strategy", overlay=false, precision=2,commission_value=0.26, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//OPTIONAL:: Allow only entries in the long or short position
allowOnlyLong = input(title="Allow position ONLY in LONG",type=input.bool, defval=false)
allowOnlyShort = input(title="Allow position ONLY in SHORT",type=input.bool, defval=false)


strategy.risk.allow_entry_in(allowOnlyLong ? strategy.direction.long : allowOnlyShort ? strategy.direction.short : strategy.direction.all) // There will be no short entries, only exits from long.

// Create MacD inputs
fastLen = input(title="MacD Fast Length", type=input.integer, defval=12)
slowLen = input(title="MacD Slow Length", type=input.integer, defval=26)
sigLen  = input(title="MacD Signal Length", type=input.integer, defval=9)

// Get MACD values
[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)
hist = macdLine - signalLine

useFuture = input(title="Use The Future?",type=input.bool,defval=true)

macDState(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_on)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

macDStateNonFuture(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_off)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"
// === INPUT BACKTEST RANGE END ===

//Get FUTURE or NON FUTURE data
macDState240=useFuture ? macDState("240") : macDStateNonFuture("240") //1 is green up, 2 if green down, 3 is red, 4 is red up

//Fill in the GAPS
if(macDState240==0)
    macDState240:=macDState240[1]

//Plot Positions
plot(close,color= macDState240==1 ? color.green : macDState240==2 ? color.purple : macDState240==3 ? color.red : color.yellow,linewidth=4,style=plot.style_histogram,transp=50)

if(useFuture)
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)
else
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))//If we are in a red macD trending downwards MacD or in a MacD getting out of Red going upward.
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)//If the state is going upwards from red but we are predicting back to red...
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)//If we are predicting the uptrend to end soon.


Thêm nữa