Chiến lược theo xu hướng dựa trên sự giao thoa của chỉ báo TEMA đa khung thời gian


Ngày tạo: 2023-12-25 14:20:36 sửa đổi lần cuối: 2023-12-25 14:20:36
sao chép: 0 Số nhấp chuột: 671
1
tập trung vào
1623
Người theo dõi

Chiến lược theo xu hướng dựa trên sự giao thoa của chỉ báo TEMA đa khung thời gian

Tổng quan

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

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

Chiến lược sử dụng hai chỉ số TEMA, một dựa trên đường chậm nhanh 5 và 15 chu kỳ, và một dựa trên khung thời gian chu kỳ cao được tùy chỉnh bởi người dùng, chẳng hạn như đường mặt trời hoặc đường vòng. TEMA đường cao chu kỳ giao nhau xác định hướng xu hướng tổng thể, khi đường nhanh đi qua đường chậm là lạc quan, đi xuống là đi xuống; TEMA đường thấp chu kỳ giao nhau được sử dụng để tìm kiếm thời gian vào thị trường và ra thị trường cụ thể.

Khi TEMA chu kỳ cao vượt qua đường dây chậm, TEMA chu kỳ thấp vượt qua đường dây chậm có thể tham gia nhiều hơn; Khi TEMA chu kỳ thấp vượt qua đường dây chậm, nên ra sân. Tương tự như vậy, khi TEMA chu kỳ cao vượt qua đường dây chậm, TEMA chu kỳ thấp vượt qua đường dây chậm có thể tham gia trống; Khi vượt qua đường dây chậm, nên ra sân.

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

  1. Xuyên qua các chỉ số TEMA để tránh bị lừa bởi tiếng ồn
  2. Thiết lập nhiều khung thời gian, kết hợp với định kỳ cao và thấp, để tăng độ chính xác
  3. Có thể giao dịch một chiều, hai chiều, linh hoạt
  4. Quy tắc rõ ràng, dễ hiểu và thực hiện

Phân tích rủi ro

  1. Chỉ số TEMA bị chậm trễ, có thể bỏ lỡ thời điểm thay đổi giá ban đầu
  2. Trong đánh giá xu hướng cao chu kỳ, điều chỉnh ngắn hạn có thể dẫn đến hoạt động đảo ngược không cần thiết
  3. Setting high cycle không được lựa chọn đúng và có thể không phản ánh được xu hướng thực sự
  4. Lưu ý: Nếu bạn chọn một thiết lập có chu kỳ thấp, bạn sẽ có nguy cơ dừng lỗ lớn hơn.

Phương pháp giải quyết rủi ro:

  1. Điều chỉnh các tham số TEMA để đạt được sự cân bằng
  2. Giảm lỗ hổng thích hợp
  3. Tối ưu hóa tham số chu kỳ cao thấp Setting
  4. Thử nghiệm sức khỏe của các tham số khác nhau

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

  1. Hoạt động điều chỉnh tham số TEMA, tối ưu hóa độ nhạy của chỉ số
  2. Tăng bộ lọc động lực để tránh bỏ lỡ xu hướng
  3. Tăng chỉ số biến động, động điều chỉnh mức dừng lỗ
  4. Các tham số tối ưu hóa phương pháp học máy

Tóm tắt

Khái niệm tổng thể của chiến lược này rất rõ ràng và dễ hiểu, dựa trên các chỉ số TEMA để đánh giá xu hướng theo khung thời gian đa dạng, và kết hợp với giao dịch theo chu kỳ thấp để tìm thời gian vào. Có một số lợi thế, nhưng cũng có một số không gian cải tiến. Nhìn chung, chiến lược này cung cấp một tài liệu tham khảo có giá trị cho thực tiễn giao dịch định lượng.

Mã nguồn chiến lược
/*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)