Chiến lược trọng tài xuyên chu kỳ dựa trên nhiều chỉ số

Tác giả:ChaoZhang, Ngày: 2024-01-29 11:10:33
Tags:

img

Tổng quan

Chiến lược này sử dụng sự kết hợp của ba chỉ số kỹ thuật khác nhau để xây dựng một chiến lược điều chỉnh chu kỳ chéo nắm bắt xu hướng giá trên các khung thời gian khác nhau để đạt được lợi nhuận vượt quá rủi ro thấp.

Chiến lược logic

Các chỉ số kỹ thuật được sử dụng trong chiến lược này là Keltner Channel (KC), Volatility Stop (Vstop), và Williams Alligator (WAE). Keltner Channel được sử dụng để xác định giá có nằm ngoài phạm vi kênh và do đó tạo ra tín hiệu giao dịch.

  1. Khi giá cao hơn đường ray trên kênh Keltner, nó được coi là tín hiệu tăng. Khi giá thấp hơn đường ray dưới kênh Keltner, nó được coi là tín hiệu giảm.

  2. Dừng biến động đặt vị trí dừng lỗ dựa trên biến động giá và chiều rộng kênh. Nó có thể điều chỉnh năng động để đảm bảo dừng lỗ trong khi tránh các vị trí dừng lỗ quá bảo thủ.

  3. Chỉ số Williams Alligator đánh giá liệu giá có đang trong xu hướng tăng hoặc giảm mạnh bằng cách tính toán chiều rộng kênh MACD và Bollinger Band.

Bằng cách kết hợp ba chỉ số này, các tín hiệu trên các khung thời gian khác nhau được xác nhận chéo. Điều này làm giảm khả năng đánh giá sai và xây dựng một chiến lược tối ưu hóa logic.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là các tín hiệu giao dịch chính xác được mang lại bởi sự kết hợp của nhiều chỉ số. Ba chỉ số hoạt động trong các khung thời gian khác nhau và xác nhận chéo nhau, có thể làm giảm hiệu quả khả năng đánh giá sai và tăng độ chính xác của tín hiệu. Ngoài ra, cài đặt dừng biến động là năng động và có thể điều chỉnh vị trí dừng lỗ theo biến động thời gian thực để kiểm soát thêm rủi ro.

So với các chiến lược chỉ số duy nhất, chiến lược kết hợp này có thể cung cấp các tín hiệu giao dịch chính xác và hiệu quả hơn. Đồng thời, ba chỉ số làm việc cùng nhau để hình thành các phán đoán giao dịch trong nhiều khung thời gian, đó là một thiết kế logic rất khoa học và hợp lý đáng học hỏi.

Phân tích rủi ro

Rủi ro chính của chiến lược này là việc cài đặt tham số không chính xác có thể gây quá mức. Ba chỉ số có tổng cộng 8 tham số. Các thiết lập không chính xác có thể ảnh hưởng tiêu cực đến chiến lược. Ngoài ra, mối quan hệ trọng lượng giữa các chỉ số cũng cần được cấu hình đúng cách, nếu không các tín hiệu có thể trung hòa lẫn nhau và trở nên vô hiệu.

Để giảm rủi ro này, khả năng thích nghi với các môi trường thị trường khác nhau nên được xem xét đầy đủ trong quá trình thiết lập tham số và sự kết hợp tham số tối ưu nên được điều chỉnh thông qua phân tích backtesting. Ngoài ra, điều chỉnh đúng cân nặng giữa các chỉ số để đảm bảo tín hiệu giao dịch có thể được kích hoạt hiệu quả. Khi xảy ra thua lỗ liên tiếp, hãy xem xét giảm kích thước vị trí để kiểm soát thua lỗ.

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

Không gian tối ưu hóa của chiến lược này chủ yếu tập trung vào hai khía cạnh: điều chỉnh tham số và cải thiện các chiến lược dừng lỗ.

  1. Chọn các tham số chỉ số một cách khoa học hơn và tối ưu hóa sự kết hợp các tham số. Các thuật toán có thể được sử dụng để tìm các tham số tối ưu với các mục tiêu như tối đa hóa lợi nhuận và giảm thiểu rủi ro.

  2. Cải thiện chiến lược stop loss để giảm thêm stop loss không cần thiết trong khi đảm bảo stop loss, do đó cải thiện tỷ lệ thắng. Ví dụ, kết hợp nhiều chỉ số hơn như tín hiệu stop loss, hoặc đặt pullback dần dần của các vị trí stop loss.

  3. Tối ưu hóa trọng lượng giữa các chỉ số và logic của các phán quyết tín hiệu giao dịch để giảm tỷ lệ đánh giá sai. Nhiều tính năng hành vi giá có thể được giới thiệu để xây dựng các quy tắc đánh giá ổn định và đáng tin cậy hơn.

  4. Cố gắng giới thiệu các mô hình học máy để đạt được tối ưu hóa tham số tự động hoặc sử dụng lập trình học tăng cường sâu để đánh giá và cải thiện chiến lược.

Tóm lại

Chiến lược này xây dựng một hệ thống trọng tài chéo chu kỳ thông qua sự kết hợp của Keltner Channel, Volatility Stop và Williams Alligator. Sự kết hợp nhiều chỉ số cải thiện độ chính xác tín hiệu và kiểm soát rủi ro dừng mất động. Nhưng có chỗ để cải thiện trong thiết lập và tối ưu hóa các tham số. Nhìn chung, chiến lược này có tính khoa học mạnh mẽ và đáng nghiên cứu và áp dụng thêm.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("QuarryLake", overlay=true)  ///Ultilized modified full kelly for this strategy = 36%

///Keltner channel///
nPeriod = input(title="Keltner Period", type=input.integer, defval=200, minval=1)
Mult = input(title="Keltner Mult", type=input.integer, defval=5, minval=1)
xPrice = ema(hlc3, nPeriod)
xMove = ema(high - low, nPeriod)
xMoveMult = xMove * Mult
xUpper = xPrice + xMoveMult
xLower = xPrice - xMoveMult

// plot(xPrice, color=red, title="KSmid")
p1 = plot(xUpper, color=color.white, title="KSup")
p2 = plot(xLower, color=color.white, title="KSdn")
fill(p1, p2, color=close > xUpper ? color.green : close < xLower ? color.red : color.white)

kclongcondition = close > xUpper
kcshortcondition = close < xLower
kccloselongcondition = crossunder(close, xUpper)
kccloseshortcondition = crossover(close, xLower)

///Volatility Stop///
length = input(title="Vstop length", type=input.integer, defval=3, minval=1)
mult1 = 1.5

atr_ = atr(length)
max1 = 0.0
min1 = 0.0
is_uptrend_prev = false
stop = 0.0
vstop_prev = 0.0
vstop1 = 0.0
is_uptrend = false
is_trend_changed = false
max_ = 0.0
min_ = 0.0
vstop = 0.0
max1 := max(nz(max_[1]), close)
min1 := min(nz(min_[1]), close)
is_uptrend_prev := nz(is_uptrend[1], true)
stop := is_uptrend_prev ? max1 - mult1 * atr_ : min1 + mult1 * atr_
vstop_prev := nz(vstop[1])
vstop1 := is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed := is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult1 * atr_ : min_ + mult1 * atr_ : 
   vstop1

plot(vstop, color=is_uptrend ? color.green : color.red, style=plot.style_line, linewidth=1)

vstoplongcondition = close > vstop
vstoplongclosecondition = crossunder(close, vstop)
vstopshortcondition = close < vstop
vstopshortclosecondition = crossover(close, vstop)

///Waddah Attar Explosion///
sensitivity = input(150, title="Sensitivity")
fastLength = input(20, title="FastEMA Length")
slowLength = input(40, title="SlowEMA Length")
channelLength = input(20, title="BB Channel Length")
mult = input(2.0, title="BB Stdev Multiplier")
DEAD_ZONE = nz(rma(tr(true), 100)) * 3.7
calc_macd(source, fastLength, slowLength) =>
    fastMA = ema(source, fastLength)
    slowMA = ema(source, slowLength)
    fastMA - slowMA
calc_BBUpper(source, length, mult) =>
    basis = sma(source, length)
    dev = mult * stdev(source, length)
    basis + dev
calc_BBLower(source, length, mult) =>
    basis = sma(source, length)
    dev = mult * stdev(source, length)
    basis - dev
t1 = (calc_macd(close, fastLength, slowLength) - 
   calc_macd(close[1], fastLength, slowLength)) * sensitivity
t2 = (calc_macd(close[2], fastLength, slowLength) - 
   calc_macd(close[3], fastLength, slowLength)) * sensitivity
e1 = calc_BBUpper(close, channelLength, mult) - 
   calc_BBLower(close, channelLength, mult)
trendUp = t1 >= 0 ? t1 : 0
trendDown = t1 < 0 ? -1 * t1 : 0

waelongcondition = trendUp and trendUp > DEAD_ZONE and trendUp > e1
waeshortcondition = trendDown and trendDown > DEAD_ZONE and trendDown > e1

///Long Entry///
longcondition = kclongcondition and vstoplongcondition and waelongcondition
if longcondition
    strategy.entry("Long", strategy.long)

///Long exit///
closeconditionlong = kccloselongcondition or vstoplongclosecondition
if closeconditionlong
    strategy.close("Long")

///Short Entry///
shortcondition = kcshortcondition and vstopshortcondition and waeshortcondition
if shortcondition
    strategy.entry("Short", strategy.short)

///Short exit///
closeconditionshort = kccloseshortcondition or vstopshortclosecondition
if closeconditionshort
    strategy.close("Short")

///Free Hong Kong, the revolution of our time///


Thêm nữa