Chiến lược kiểm tra ngược động đa khung thời gian


Ngày tạo: 2023-11-21 17:07:17 sửa đổi lần cuối: 2023-11-21 17:07:17
sao chép: 1 Số nhấp chuột: 698
1
tập trung vào
1617
Người theo dõi

Chiến lược kiểm tra ngược động đa khung thời gian

Tổng quan

Chiến lược này sử dụng cơ chế lùi động nhiều khung thời gian để đánh giá xu hướng giá bằng cách so sánh giá cao nhất và giá thấp nhất trong các khoảng thời gian khác nhau, để đạt được mức độ rủi ro thấp.

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

Chiến lược này lấy giá cao nhất và giá thấp nhất trong các khoảng thời gian khác nhau bằng cách gọi hàm tùy chỉnh f_get_htfHighLow. Cụ thể, dựa trên độ phân giải của khoảng thời gian, nhân số của khoảng thời gian HTFMultiplier, tham số quay ngược lookahead và khoảng cách, và tính toán offset, gọi hàm security để lấy giá cao nhất và giá thấp nhất trong các khoảng thời gian khác nhau.

Ví dụ, khi offset là 0, nhận được giá cao nhất và giá thấp nhất của dòng K hiện tại; khi offset là 1, nhận được giá cao nhất và giá thấp nhất của dòng K trước đó. Bằng cách so sánh sự thay đổi giá giữa hai dòng K, đánh giá hướng xu hướng.

Nếu giá cao nhất tăng và giá thấp nhất tăng, thì được đánh giá là xu hướng lạc quan; Nếu giá cao nhất giảm và giá thấp nhất giảm, thì được đánh giá là xu hướng giảm.

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

  1. Sử dụng phân tích nhiều khung thời gian để tăng độ chính xác của phán đoán
  2. Sử dụng cơ chế quay ngược động, tránh repainting
  3. Tính linh hoạt trong việc thiết lập các tổ hợp tham số khác nhau để thích ứng với sự thay đổi của thị trường
  4. Chỉ mở đầu tư khi có xu hướng rõ ràng, kiểm soát rủi ro hiệu quả

Rủi ro chiến lược

  1. Có thể có nguy cơ sai lầm khi đánh giá nhiều khung thời gian
  2. Thiết lập tham số hồi quy không đúng có thể dẫn đến repainting
  3. Tần suất giao dịch có thể quá cao, làm tăng chi phí giao dịch và rủi ro trượt

Giải pháp:

  1. Tối ưu hóa các tham số chu kỳ thời gian để tăng độ chính xác phán đoán
  2. Kiểm tra nghiêm ngặt các tham số hồi quy, tránh repainting
  3. Điều chỉnh điều kiện mở vị trí thích hợp, kiểm soát tần suất giao dịch

Hướng tối ưu hóa chiến lược

  1. Thêm mô-đun học máy, sử dụng AI để đánh giá xu hướng
  2. Động lực điều chỉnh vị trí kết hợp với biến động giá cổ phiếu
  3. Tham gia hệ thống ngăn chặn thiệt hại để kiểm soát rủi ro tổn thất

Tóm tắt

Chiến lược này có ý tưởng tổng thể rõ ràng, sử dụng nhiều khung thời gian động lùi để đánh giá xu hướng giá cổ phiếu, giảm thiểu tối đa lỗi đánh giá nhân tạo, là một chiến lược giao dịch theo quy trình điển hình. Bằng cách tối ưu hóa tham số và mở rộng chức năng, có thể tăng cường thêm sự ổn định và lợi nhuận của chiến lược, đáng để nghiên cứu và theo dõi.

Mã nguồn chiến lược
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("HTF High/Low Repaint Strategy", overlay=true, initial_capital = 20000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "End Time", type = input.time)
inDateRange = true

resolution = input("3M", type=input.resolution)
HTFMultiplier = input(22, minval=1, step=1)
offset = input(0, minval=0, step=1)
lookahead = input(true)
gaps = false

f_secureSecurity_on_on(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on, gaps=barmerge.gaps_on)
f_secureSecurity_on_off(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on, gaps=barmerge.gaps_off)
f_secureSecurity_off_on(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_off, gaps=barmerge.gaps_on)
f_secureSecurity_off_off(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_off, gaps=barmerge.gaps_off)

f_multiple_resolution(HTFMultiplier) => 
    target_Res_In_Min = timeframe.multiplier * HTFMultiplier * (
      timeframe.isseconds   ? 1. / 60. :
      timeframe.isminutes   ? 1. :
      timeframe.isdaily     ? 1440. :
      timeframe.isweekly    ? 7. * 24. * 60. :
      timeframe.ismonthly   ? 30.417 * 24. * 60. : na)

    target_Res_In_Min     <= 0.0417       ? "1S"  :
      target_Res_In_Min   <= 0.167        ? "5S"  :
      target_Res_In_Min   <= 0.376        ? "15S" :
      target_Res_In_Min   <= 0.751        ? "30S" :
      target_Res_In_Min   <= 1440         ? tostring(round(target_Res_In_Min)) :
      tostring(round(min(target_Res_In_Min / 1440, 365))) + "D"

f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset)=>
    derivedResolution = resolution == ""?f_multiple_resolution(HTFMultiplier):resolution
    nhigh_on_on = f_secureSecurity_on_on(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_on_on = f_secureSecurity_on_on(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh_on_off = f_secureSecurity_on_off(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_on_off = f_secureSecurity_on_off(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh_off_on = f_secureSecurity_off_on(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_off_on = f_secureSecurity_off_on(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh_off_off = f_secureSecurity_off_off(syminfo.tickerid, derivedResolution, high, offset) 
    nlow_off_off = f_secureSecurity_off_off(syminfo.tickerid, derivedResolution, low, offset)
    
    nhigh = lookahead and gaps ? nhigh_on_on :
             lookahead and not gaps ? nhigh_on_off :
             not lookahead and gaps ? nhigh_off_on :
             not lookahead and not gaps ? nhigh_off_off : na
    nlow = lookahead and gaps ? nlow_on_on :
             lookahead and not gaps ? nlow_on_off :
             not lookahead and gaps ? nlow_off_on :
             not lookahead and not gaps ? nlow_off_off : na
    [nhigh, nlow]
    
[nhigh, nlow] = f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset)
[nhighlast, nlowlast] = f_get_htfHighLow(resolution, HTFMultiplier, lookahead, gaps, offset+1)
plot(nhigh , title="HTF High",style=plot.style_circles, color=color.green, linewidth=1) 
plot(nlow , title="HTF Low",style=plot.style_circles, color=color.red, linewidth=1)

buyCondition = nhigh > nhighlast and nlow > nlowlast
sellCondition = nhigh < nhighlast and nlow < nlowlast

strategy.entry("Buy", strategy.long, when= buyCondition and inDateRange, oca_name="oca_buy")
strategy.entry("Sell", strategy.short, when= sellCondition and inDateRange, oca_name="oca_sell")