Strategi Stop Loss Pengesanan Beradaptasi Berbilang Jangka Masa

Penulis:ChaoZhang, Tarikh: 2023-11-21 11:07:44
Tag:

img

Ringkasan

Strategi ini mengira isyarat komprehensif pelbagai penunjuk teknikal untuk menentukan arah trend dalam jangka masa semasa. Apabila dinilai sebagai trend menaik, garis stop loss penjejakan ditetapkan pada titik yang agak tinggi; apabila dinilai sebagai downtrend, garis stop loss penjejakan ditetapkan pada titik yang agak rendah. Strategi ini dapat menyesuaikan garis stop loss secara adaptif untuk mencapai kawalan risiko.

Prinsip

Strategi ini menggabungkan beberapa penunjuk seperti purata bergerak, ATR, KD, dan kadar varians untuk menentukan arah trend keseluruhan dalam jangka masa semasa.

  1. Isyarat arah purata bergerak
  2. Indikator KD isyarat overboughtoversold
  3. Isyarat perbezaan harga-volume
  4. Isyarat penembusan saluran
  5. Isyarat percubaan dan ralat gabungan pelbagai jangka masa
  6. Peratusan isyarat R
  7. Isyarat regresi purata bergerak
  8. Isyarat penembusan saluran ATR

Setiap sub-isyarat dihaluskan dan ambang yang berbeza ditetapkan untuk menilai beli / jual. Kemudian berat sub-isyarat untuk mengira isyarat keseluruhan dalam jangka masa semasa. Jika isyarat lebih besar daripada 0, ia dinilai sebagai uptrend. Jika isyarat kurang daripada 0, ia dinilai sebagai downtrend.

Apabila dinilai sebagai trend menaik, strategi menetapkan garis stop loss pengesanan berhampiran titik tinggi sebelumnya; apabila dinilai sebagai trend penurunan, ia menetapkan garis stop loss pengesanan berhampiran titik bawah sebelumnya. Ini dapat menyesuaikan tahap stop loss secara dinamik mengikut pergerakan harga sebenar untuk mencapai tujuan kawalan risiko.

Kelebihan

Strategi ini mengintegrasikan beberapa penunjuk untuk menilai arah trend semasa, yang meningkatkan ketepatan penilaian. Pada masa yang sama, strategi ini boleh disesuaikan dengan pelbagai jenis dan jangka masa dengan daya adaptasi yang kuat.

Yang paling penting, strategi ini boleh menyesuaikan garis stop loss secara dinamik dan menyesuaikan tahap kawalan risiko mengikut trend sebenar untuk lindung nilai risiko sistemik.

Risiko

Kualiti penghakiman isyarat trend secara langsung mempengaruhi penetapan garis stop loss. Jika penghakiman itu salah, ia boleh menyebabkan tahap stop loss ditetapkan terlalu longgar atau terlalu ketat. Di samping itu, garis stop loss tidak dapat sepenuhnya mengelakkan risiko mutasi pasaran.

Strategi ini juga perlu menyeimbangkan tahap keuntungan dan jarak stop loss. Jika jarak stop loss terlalu dekat, ia boleh menyebabkan kekerapan stop loss yang berlebihan; jika jarak stop loss terlalu jauh, ia tidak dapat mengawal risiko dengan berkesan. Ini memerlukan pengoptimuman parameter untuk pelbagai jenis dan kitaran.

Arahan pengoptimuman

Pertimbangkan untuk memperkenalkan algoritma pembelajaran mesin untuk melatih model untuk menilai arah trend menggunakan data sejarah untuk meningkatkan ketepatan penilaian.

Uji kombinasi parameter yang berbeza untuk mengoptimumkan jarak stop loss. Sebagai contoh, menyesuaikan parameter kitaran ATR secara dinamik untuk menyesuaikan diri dengan perubahan dalam turun naik pasaran.

Penunjuk tenaga jumlah juga boleh digabungkan untuk menentukan trend sebenar dan mencegah kesilapan isyarat yang disebabkan oleh perbezaan harga-volume.

Ringkasan

Strategi ini menilai hala tuju trend semasa dengan mengintegrasikan beberapa penunjuk teknikal, dan dengan itu menyesuaikan garis stop loss penjejakan secara dinamik. Ia bertujuan untuk meningkatkan keberkesanan stop loss dan mengawal risiko perdagangan. Idea strategi ini maju dan bernilai pengoptimuman dan pengesahan lanjut.


/*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")



Lebih lanjut