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.
Strategi ini menggabungkan beberapa penunjuk seperti purata bergerak, ATR, KD, dan kadar varians untuk menentukan arah trend keseluruhan dalam jangka masa semasa.
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.
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.
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.
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.
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")