Strategi trailing stop adaptif berbilang masa


Tarikh penciptaan: 2023-11-21 11:07:44 Akhirnya diubah suai: 2023-11-21 11:07:44
Salin: 0 Bilangan klik: 638
1
fokus pada
1617
Pengikut

Strategi trailing stop adaptif berbilang masa

Gambaran keseluruhan

Strategi ini menilai arah trend dalam bingkai masa semasa dengan mengira isyarat komposit dari beberapa petunjuk teknikal. Apabila keputusan itu adalah kecenderungan ke atas, menetapkan garis berhenti yang dijejaki pada titik yang lebih tinggi; Apabila keputusan itu adalah kecenderungan menurun, menetapkan garis berhenti yang dijejaki pada titik yang lebih rendah.

Prinsip

Strategi ini menggabungkan pelbagai petunjuk seperti garis purata, ATR, KD, dan kadar perubahan untuk menentukan arah trend keseluruhan dalam bingkai masa semasa. Secara khusus, ia mengira nilai gabungan beberapa isyarat sub berikut:

  1. Isyarat arah linear
  2. Indeks KD memberi isyarat jual beli
  3. Harga jauh daripada isyarat
  4. Isyarat penembusan saluran
  5. Isyarat percubaan dan kesilapan komprehensif pelbagai bingkai masa
  6. Peratusan R isyarat
  7. Isyarat Kembali pada Garis Persamaan
  8. Isyarat penembusan saluran ATR

Setiap isyarat anak di atas telah dihaluskan, dan menetapkan penilaian harga yang berbeza untuk membeli / menjual. Isyarat anak kemudian diberi berat untuk setiap isyarat anak, untuk mengira isyarat keseluruhan dalam bingkai masa semasa.

Apabila diadili sebagai trend menaik, strategi akan menetapkan garis hentian pengesanan berhampiran dengan titik yang lebih tinggi sebelum ini; Apabila diadili sebagai trend menurun, strategi akan menetapkan garis hentian pengesanan berhampiran dengan titik yang lebih rendah sebelum ini. Ini dapat menyesuaikan posisi hentian secara dinamik berdasarkan pergerakan harga sebenar, untuk mencapai tujuan kawalan risiko.

Kelebihan

Strategi ini mengintegrasikan pelbagai petunjuk untuk menilai arah trend semasa, meningkatkan ketepatan penghakiman. Selain itu, strategi ini dapat menyesuaikan diri dengan pelbagai jenis dan jangka masa, dengan kebolehpasaran yang kuat.

Yang paling penting, strategi ini dapat menyesuaikan garis stop loss secara dinamik, dapat menyesuaikan tahap kawalan risiko mengikut pergerakan sebenar, dan dengan itu melindungi risiko sistematik, yang merupakan kelebihan terbesarnya.

Risiko

Strategi ini menilai kualiti isyarat trend secara langsung mempengaruhi penyetempatan garis stop loss, dan jika penilaian dibuat dengan salah, ia boleh menyebabkan kedudukan stop loss ditetapkan terlalu longgar atau terlalu ketat. Di samping itu, garis stop loss tidak dapat sepenuhnya mengelakkan risiko perubahan harga.

Strategi ini juga memerlukan keseimbangan antara tahap keuntungan dan jarak hentian, jika jarak hentian terlalu dekat, ia boleh menyebabkan hentian terlalu kerap; jika jarak hentian terlalu jauh, ia tidak dapat mengawal risiko dengan berkesan. Ini memerlukan pengoptimuman parameter mengikut kitaran yang berbeza untuk pelbagai jenis.

Arah pengoptimuman

Anda boleh mempertimbangkan untuk memperkenalkan algoritma pembelajaran mesin untuk model yang menggunakan latihan data sejarah untuk menentukan arah trend, dan dengan itu meningkatkan ketepatan penghakiman.

Kombinasi parameter yang berbeza boleh diuji untuk mengoptimumkan jarak garis henti. Sebagai contoh, parameter kitaran ATR boleh disesuaikan secara dinamik untuk menyesuaikan diri dengan perubahan kadar turun naik pasaran.

Ia juga boleh digabungkan dengan indikator tenaga kuantiti perdagangan untuk menentukan trend sebenar dan mengelakkan kesilapan isyarat yang disebabkan oleh harga kuantiti yang menyimpang.

ringkaskan

Strategi ini menilai arah trend semasa dengan mengintegrasikan beberapa petunjuk teknikal, dan dengan itu menyesuaikan secara dinamik untuk menjejaki garis stop loss, bertujuan untuk meningkatkan keberkesanan penghentian kerugian, mengawal risiko perdagangan. Konsep strategi ini maju, layak untuk dioptimumkan dan disahkan lebih lanjut, dan merupakan strategi kawalan risiko adaptasi jangka masa yang boleh dirujuk.

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