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