Chiến lược giao dịch định lượng khung thời gian đa dạng mô phỏng chênh lệch giá tam giác


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

Chiến lược giao dịch định lượng khung thời gian đa dạng mô phỏng chênh lệch giá tam giác

Tổng quan

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

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

Ba chỉ số kỹ thuật được sử dụng trong chiến lược này là Kelt channel (KC), volatility stop (Vstop) và William Gathering Gathering indicator (WAE). Các kênh của Kelt được sử dụng để xác định liệu giá có nằm ngoài phạm vi của kênh và do đó phát ra tín hiệu giao dịch.

  1. Khi giá cao hơn đường đi của Celtic, nó được coi là tín hiệu đi lên. Khi giá thấp hơn đường đi của Celtic, nó được coi là tín hiệu đi xuống.

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

  3. Chỉ số William xác định giá đang trong xu hướng tăng mạnh hay giảm mạnh bằng cách tính toán chiều rộng của đường băng thông MACD và Brin.

Bằng cách kết hợp ba chỉ số này, các tín hiệu trong các chu kỳ thời gian khác nhau có thể xác nhận lẫn nhau. Điều này làm giảm khả năng sai lầm, xây dựng một logic chiến lược tối ưu hóa ổn định.

Phân tích lợi thế

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

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

Phân tích rủi ro

Rủi ro chính của chiến lược này là thiết lập tham số không đúng có thể dẫn đến quá phù hợp. Ba chỉ số có tổng cộng 8 tham số, thiết lập không đúng có thể ảnh hưởng xấu đế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 hợp lý, nếu không tín hiệu có thể bù đắp lẫn nhau, dẫn đến vô hiệu.

Để giảm thiểu những rủi ro này, quá trình thiết lập tham số cần phải xem xét đầy đủ sự thích nghi của các môi trường thị trường khác nhau, điều chỉnh theo sự kết hợp tham số tối ưu thông qua phân tích phản hồi. Ngoài ra, mối quan hệ trọng lượng giữa các chỉ số nên được điều chỉnh thích hợp, đảm bảo tín hiệu giao dịch có thể được kích hoạt hiệu quả.

Hướng 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 chiến lược dừng lỗ. Cụ thể, có thể bắt đầu từ một số khía cạnh sau:

  1. Lựa chọn các tham số chỉ số một cách hợp lý hơn, tối ưu hóa các tham số. Các thuật toán có thể tìm kiếm các tham số tối ưu nhất theo mục tiêu tối đa hóa lợi nhuận, giảm thiểu rủi ro.

  2. Cải thiện chiến lược dừng lỗ, giảm thêm lỗ không cần thiết, nâng cao tỷ lệ chiến thắng với giả định đảm bảo dừng lỗ. Ví dụ: kết hợp nhiều chỉ số hơn với tín hiệu dừng lỗ, hoặc thiết lập điều chỉnh dần dần vị trí dừng lỗ.

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

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

Tóm tắt

Chiến lược này xây dựng một hệ thống đánh giá trên khung thời gian thông qua việc sử dụng kết hợp của kênh Celtic, dừng biến động và chỉ số William. Kết hợp nhiều chỉ số giúp tăng độ chính xác tín hiệu giao dịch và dừng động kiểm soát rủi ro. Tuy nhiên, vẫn còn chỗ để cải thiện về thiết lập và tối ưu hóa các tham số.

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