Xu hướng theo chiến lược dựa trên đa khung thời gian TEMA Crossover

Tác giả:ChaoZhang, Ngày: 2023-12-25 14:20:36
Tags:

img

Tổng quan

Chiến lược này xác định hướng xu hướng thị trường dựa trên sự chéo chéo của chỉ số TEMA trên nhiều khung thời gian và sử dụng chéo chéo TEMA trong khung thời gian thấp hơn để tìm các điểm vào và ra cụ thể. Chiến lược có thể được cấu hình chỉ dài, chỉ ngắn hoặc cả hai hướng.

Chiến lược logic

Chiến lược sử dụng hai chỉ số TEMA, một với đường nhanh và chậm dựa trên 5 và 15 giai đoạn, một dựa trên khung thời gian cao hơn do người dùng xác định như hàng ngày hoặc hàng tuần.

Khi đường nhanh TEMA khung thời gian cao hơn vượt qua đường chậm, một mục nhập dài có thể được kích hoạt khi đường nhanh TEMA khung thời gian thấp hơn vượt qua đường chậm; Một tín hiệu thoát được đưa ra khi đường nhanh vượt qua dưới đường chậm. Tương tự, khi đường nhanh khung thời gian cao hơn giảm xuống dưới đường chậm, một mục nhập ngắn được kích hoạt trên chéo giảm TEMA khung thời gian thấp hơn và thoát khi chéo tăng xảy ra.

Ưu điểm

  1. Dựa trên giao thoa TEMA, tránh nhiễu nhiễu
  2. Thiết kế nhiều khung thời gian kết hợp các chu kỳ cao và thấp, cải thiện độ chính xác
  3. Cấu hình linh hoạt chỉ cho chiều dài, chỉ cho chiều ngắn hoặc cả hai hướng
  4. Quy tắc đơn giản, dễ hiểu và thực hiện

Phân tích rủi ro

  1. TEMA có hiệu ứng chậm, có thể bỏ lỡ thay đổi giá ban đầu
  2. Sự điều chỉnh ngắn hạn đối với TF cao hơn có thể gây ra các giao dịch ngược không cần thiết
  3. Thiết lập TF cao không chính xác không phản ánh xu hướng thực tế
  4. Thiết lập TF thấp không chính xác làm tăng rủi ro dừng lỗ

Giải pháp rủi ro:

  1. Các tham số TEMA tinh chỉnh cho cân bằng
  2. Nới lỏng ký quỹ dừng lỗ một cách vừa phải
  3. Tối ưu hóa cài đặt chu kỳ cao thấp
  4. Độ bền của các tham số thử nghiệm trên các sản phẩm

Cơ hội gia tăng

  1. Điều chỉnh động các tham số TEMA để tối ưu hóa độ nhạy
  2. Thêm bộ lọc động lực để tránh bỏ lỡ xu hướng
  3. Thêm chỉ số biến động cho kích thước dừng lỗ động
  4. Học máy cho tối ưu hóa tham số

Tóm lại

Chiến lược nói chung là đơn giản và rõ ràng trong logic, xác định xu hướng thiên vị thông qua TEMA chéo trên nhiều khung thời gian, và dựa trên chéo bổ sung trên TF thấp hơn vào các mục thời gian. Nó có một số ưu điểm trong khi cũng có một số không gian để cải thiện.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © Seltzer_

//@version=4
strategy(title="TEMA Cross +HTF Backtest", shorttitle="TEMA_X_+HTF_BT", overlay=true)

orderType = input("Longs+Shorts",title="What type of Orders", options=["Longs+Shorts","LongsOnly","ShortsOnly"])
isLong   = (orderType != "ShortsOnly")
isShort  = (orderType != "LongsOnly")

// Backtest Section {

// Backtest inputs
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=2020, title="From Year", minval=2010)
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)

// Define backtest timewindow
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() => true

// }

//TEMA Section {

//LTF Section
xLength = input(20, minval=1, title="Fast Length")
xPrice = close
xEMA1 = ema(xPrice, xLength)
xEMA2 = ema(xEMA1, xLength)
xEMA3 = ema(xEMA2, xLength)
xnRes = (3 * xEMA1) - (3 * xEMA2) + xEMA3
xnResP = plot(xnRes, color=color.green, linewidth=2, title="TEMA1")

yLength = input(60, minval=1, title="Slow Length")
yPrice = close
yEMA1 = ema(yPrice, yLength)
yEMA2 = ema(yEMA1, yLength)
yEMA3 = ema(yEMA2, yLength)
ynRes = (3 * yEMA1) - (3 * yEMA2) + yEMA3
ynResP = plot(ynRes, color=color.red, linewidth=2, title="TEMA2")

fill(xnResP, ynResP, color=xnRes > ynRes ? color.green : color.red, transp=65, editable=true)

//HTF Section
HTFres = input(defval="D", type=input.resolution, title="HTF Resolution")

HTFxLength = input(5, minval=1, title="HTF Fast Length")
HTFxPrice = close
HTFxEMA1 = security(syminfo.tickerid, HTFres, ema(HTFxPrice, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA2 = security(syminfo.tickerid, HTFres, ema(HTFxEMA1, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA3 = security(syminfo.tickerid, HTFres, ema(HTFxEMA2, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxnRes = (3 * HTFxEMA1) - (3 * HTFxEMA2) + HTFxEMA3
HTFxnResP = plot(HTFxnRes, color=color.yellow, linewidth=1,transp=30, title="TEMA1")

HTFyLength = input(15, minval=1, title="HTF Slow Length")
HTFyPrice = close
HTFyEMA1 = security(syminfo.tickerid, HTFres, ema(HTFyPrice, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA2 = security(syminfo.tickerid, HTFres, ema(HTFyEMA1, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA3 = security(syminfo.tickerid, HTFres, ema(HTFyEMA2, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFynRes = (3 * HTFyEMA1) - (3 * HTFyEMA2) + HTFyEMA3
HTFynResP = plot(HTFynRes, color=color.purple, linewidth=1, transp=30, title="TEMA2")

fill(HTFxnResP, HTFynResP, color=HTFxnRes > HTFynRes ? color.yellow : color.purple, transp=90, editable=true)
bgcolor(HTFxnRes > HTFynRes ? color.yellow : na, transp=90, editable=true)
bgcolor(HTFxnRes < HTFynRes ? color.purple : na, transp=90, editable=true)

// }

// Buy and Sell Triggers
LongEntryAlert = xnRes > ynRes and HTFxnRes > HTFynRes and window()
LongCloseAlert = xnRes < ynRes and window()
ShortEntryAlert = xnRes < ynRes and HTFxnRes < HTFynRes and window()
ShortCloseAlert = xnRes > ynRes

// Entry & Exit signals
if isLong
    strategy.entry("Long", strategy.long, when = LongEntryAlert)
    strategy.close("Long", when = LongCloseAlert)

if isShort
    strategy.entry("Short", strategy.short, when = ShortEntryAlert)
    strategy.close("Short", when = ShortCloseAlert)

Thêm nữa