Chiến lược dừng lỗ theo dõi thích nghi nhiều khung thời gian

Tác giả:ChaoZhang, Ngày: 2023-11-21
Tags:

img

Tổng quan

Chiến lược này tính toán các tín hiệu toàn diện của nhiều chỉ số kỹ thuật để xác định hướng xu hướng trong khung thời gian hiện tại. Khi được đánh giá là xu hướng tăng, một đường dừng lỗ theo dõi được đặt ở một điểm tương đối cao; khi được đánh giá là xu hướng giảm, một đường dừng lỗ theo dõi được đặt ở một điểm tương đối thấp. Chiến lược có thể điều chỉnh tùy biến đường dừng lỗ để đạt được kiểm soát rủi ro.

Nguyên tắc

Chiến lược kết hợp nhiều chỉ số như trung bình động, ATR, KD và tỷ lệ biến dạng để xác định hướng xu hướng tổng thể trong khung thời gian hiện tại.

  1. Tín hiệu hướng trung bình động
  2. Chỉ số KD tín hiệu quá mua quá bán
  3. Tín hiệu chênh lệch giá-thăng lượng
  4. Tín hiệu đột phá kênh
  5. Dấu hiệu thử nghiệm và lỗi kết hợp nhiều khung thời gian
  6. % tín hiệu R
  7. Tín hiệu hồi quy trung bình động
  8. Tín hiệu đột phá kênh ATR

Mỗi tín hiệu phụ được làm mịn và các ngưỡng khác nhau được thiết lập để đánh giá mua / bán. Sau đó cân nhắc các tín hiệu phụ để tính tổng tín hiệu trong khung thời gian hiện tại. Nếu tín hiệu lớn hơn 0, nó được đánh giá là xu hướng tăng. Nếu tín hiệu nhỏ hơn 0, nó được đánh giá là xu hướng giảm.

Khi được đánh giá là xu hướng tăng, chiến lược thiết lập một đường dừng lỗ theo dõi gần điểm cao hơn trước đó; khi được đánh giá là xu hướng giảm, nó thiết lập một đường dừng lỗ theo dõi gần điểm thấp hơn trước đó. Điều này có thể điều chỉnh động mức dừng lỗ theo chuyển động giá thực tế để đạt được mục đích kiểm soát rủi ro.

Ưu điểm

Chiến lược tích hợp nhiều chỉ số để đánh giá hướng xu hướng hiện tại, cải thiện độ chính xác của phán đoán.

Quan trọng nhất, chiến lược có thể điều chỉnh động đường dừng lỗ và điều chỉnh mức kiểm soát rủi ro theo xu hướng thực tế để phòng ngừa rủi ro hệ thống.

Rủi ro

Chất lượng của đánh giá tín hiệu xu hướng ảnh hưởng trực tiếp đến việc thiết lập đường dừng lỗ. Nếu đánh giá sai, nó có thể khiến mức dừng lỗ được đặt quá lỏng lẻo hoặc quá nghiêm ngặt. Ngoài ra, đường dừng lỗ không thể tránh hoàn toàn nguy cơ biến đổi thị trường.

Chiến lược cũng cần cân bằng mức lợi nhuận và khoảng cách dừng lỗ. Nếu khoảng cách dừng lỗ quá gần, nó có thể gây ra tần suất dừng lỗ quá cao; nếu khoảng cách dừng lỗ quá xa, nó không thể kiểm soát rủi ro hiệu quả. Điều này đòi hỏi tối ưu hóa tham số cho các giống và chu kỳ khác nhau.

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

Xem xét việc giới thiệu các thuật toán học máy để đào tạo các mô hình để đánh giá các hướng xu hướng bằng cách sử dụng dữ liệu lịch sử để cải thiện độ chính xác đánh giá.

Kiểm tra các kết hợp tham số khác nhau để tối ưu hóa khoảng cách dừng lỗ. Ví dụ, điều chỉnh động các tham số chu kỳ ATR để thích nghi với những thay đổi trong biến động thị trường.

Các chỉ số năng lượng khối lượng cũng có thể được kết hợp để xác định xu hướng thực sự và ngăn chặn các lỗi tín hiệu do chênh lệch giá-đồng độ.

Tóm lại

Chiến lược đánh giá hướng xu hướng hiện tại bằng cách tích hợp nhiều chỉ số kỹ thuật, và theo đó điều chỉnh động đường dừng lỗ theo dõi. Nó nhằm mục đích cải thiện hiệu quả của việc dừng lỗ và kiểm soát rủi ro giao dịch. Ý tưởng chiến lược là tiên tiến và đáng được tối ưu hóa và xác minh thêm. Đây là một chiến lược kiểm soát rủi ro thích nghi nhiều khung thời gian có thể được tham chiếu.


/*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/
// © jigneshjc

//@version=5
strategy("Jigga - Survival Level", shorttitle='Jigga - Survival Level', overlay=true)

doBackTesting = input(true, 'Run Back Testing')

entryCondition = false
exitCondition = false


ab21 =  14,  gh41 = ab21
gh42 = ab21, ju51 = 14
ki61 = ju51
lkolkp = true ,ab22 = 58
cd31 = 5 , ab23 = 42
aa12 = 29, cd32 = 26
op71 = 5,  aa11 = 12
aa13 = 9, op72 = 2.0
movnwx = false


kahachale(byju, h, l) =>
    mika = ta.change(h)
    awer = -ta.change(l)
    uikmhDM = na(mika) ? na : mika > awer and mika > 0 ? mika : 0
    wrtdfcDM = na(awer) ? na : awer > mika and awer > 0 ? awer : 0
    bbct = ta.rma(ta.tr, byju)
    uikmh = fixnan(100 * ta.rma(uikmhDM, byju) / bbct)
    wrtdfc = fixnan(100 * ta.rma(wrtdfcDM, byju) / bbct)
    [uikmh, wrtdfc]

trial(gh42, gh41, h, l) =>
    [uikmh, wrtdfc] = kahachale(gh42, h, l)
    uuolop = uikmh + wrtdfc
    trial = 100 * ta.rma(math.abs(uikmh - wrtdfc) / (uuolop == 0 ? 1 : uuolop), gh41)
    trial

_pr(src, byjugth) =>
    max = ta.highest(byjugth)
    min = ta.lowest(byjugth)
    100 * (src - max) / (max - min)


kyukarna(khulmkhula, mikaarwala, nichewala, bandhwala, partiwala) =>

    sig = trial(gh42, gh41, mikaarwala, nichewala)
    trialIncreasing = sig > ta.ema(sig, 5) ? lkolkp : movnwx

    rolkmn = ta.ema(bandhwala, aa11)
    psolkmn = ta.ema(bandhwala, aa12)
    ujghd = rolkmn - psolkmn
    wrtycv = ta.ema(ujghd, aa13)
    kimnjg = ujghd - wrtycv


    mikalilo = ta.rma(math.max(ta.change(bandhwala), 0), ab21)
    awerlilo = ta.rma(-math.min(ta.change(bandhwala), 0), ab21)
    lilo = awerlilo == 0 ? 100 : mikalilo == 0 ? 0 : 100 - 100 / (1 + mikalilo / awerlilo)
    juylknlilo = ta.ema(lilo, 3)


    rjuylkn = ta.ema(bandhwala, cd31)
    psjuylkn = ta.ema(bandhwala, cd32)

    percentR = _pr(bandhwala, ju51)
    juylknpercentR = ta.ema(percentR, 3)


    ad = bandhwala == mikaarwala and bandhwala == nichewala or mikaarwala == nichewala ? 0 : (2 * bandhwala - nichewala - mikaarwala) / (mikaarwala - nichewala) * partiwala
    kiloValue = math.sum(ad, ki61) / math.sum(partiwala, ki61)



    liiopn = ta.atr(op71)
    mikaliiopn = (mikaarwala + nichewala) / 2 - op72 * liiopn
    mika1liiopn = nz(mikaliiopn[1], mikaliiopn)
    mikaliiopn := bandhwala[1] > mika1liiopn ? math.max(mikaliiopn, mika1liiopn) : mikaliiopn
    dnliiopn = (mikaarwala + nichewala) / 2 + op72 * liiopn
    dn1liiopn = nz(dnliiopn[1], dnliiopn)
    dnliiopn := bandhwala[1] < dn1liiopn ? math.min(dnliiopn, dn1liiopn) : dnliiopn
    omnerliiopn = 1
    omnerliiopn := nz(omnerliiopn[1], omnerliiopn)
    omnerliiopn := omnerliiopn == -1 and bandhwala > dn1liiopn ? 1 : omnerliiopn == 1 and bandhwala < mika1liiopn ? -1 : omnerliiopn

    fitur = ujghd > 0 ? ujghd > wrtycv ? 1 : 0 : ujghd > wrtycv ? 0 : -1
    mitur = kimnjg >= 0 ? kimnjg > kimnjg[1] ? 1 : 0 : kimnjg > kimnjg[1] ? 0 : -1
    ritur = juylknlilo > ab22 ? 1 : juylknlilo < ab23 ? -1 : 0
    circuits = rjuylkn > psjuylkn ? 1 : -1
    trialPoints = trialIncreasing ? close > ta.ema(close, 3) ? 1 : -1 : 0
    virar = juylknpercentR > -ab23 ? 1 : juylknpercentR < -ab22 ? -1 : 0
    chikar = kiloValue > 0.1 ? 1 : kiloValue < -0.1 ? -1 : 0
    sitar = omnerliiopn


    p = fitur + mitur + ritur + circuits + trialPoints + virar + chikar + sitar

    p

currentP = kyukarna(open, high, low, close, volume)
currentPNew = currentP >= 0 and currentP[1] <= 0 ? 0 : currentP <= 0 and currentP[1] >= 0 ? 0 : currentP
colorPNew = currentPNew == 0 ? color.black : currentPNew >= 0 ? color.green : color.red
//plot(currentPNew, color=colorPNew, title='CurrentTimeFrame')

LTN = 0.0
LTN := nz(LTN) ? 0.0 : (currentPNew[1] < 0 and currentPNew >= 0) ? high * 1.005 : (currentPNew[1] > 0 and currentPNew <= 0) ? low * 0.995 : LTN[1]

LClr = color.green
LClr :=  (currentPNew[1] < 0 and currentPNew >= 0) ? color.green : (currentPNew[1] > 0 and currentPNew <= 0) ? color.red : LClr[1]

plot(LTN,color=LClr,title="Level", style=plot.style_circles)


entryCondition:= high > LTN and LClr == color.green ? lkolkp : movnwx
exitCondition:= low < LTN and LClr == color.red ? lkolkp : movnwx

tradeRunning = movnwx
tradeRunning := nz(tradeRunning) ? movnwx :  (not tradeRunning[1]) and entryCondition ? lkolkp : tradeRunning[1] and exitCondition ? movnwx : tradeRunning[1]


plotshape(tradeRunning and (not tradeRunning[1]) and (not doBackTesting), style=shape.labelup, location=location.belowbar, color=color.new(#00FF00, 50), size=size.tiny, title='Buy wrtycv', text='➹', textcolor=color.new(color.black,0))
plotshape((not tradeRunning) and tradeRunning[1] and (not doBackTesting), style=shape.labeldown, location=location.abovebar, color=color.new(#FF0000, 50), size=size.tiny, title='Sell wrtycv', text='➷', textcolor=color.new(color.white, 0))


if  entryCondition  and doBackTesting
    strategy.entry(id="Buy",direction=strategy.long)

if exitCondition and doBackTesting
    strategy.close(id="Buy")



Thêm nữa