
Chiến lược này đánh giá hướng xu hướng trong khung thời gian hiện tại bằng cách tính toán các tín hiệu tổng hợp của nhiều chỉ số kỹ thuật. Khi đánh giá xu hướng tăng, hãy đặt đường dừng theo dõi ở điểm cao hơn; Khi đánh giá xu hướng giảm, hãy đặt đường dừng theo dõi ở điểm thấp hơn. Chiến lược có thể thích ứng với các giống khác nhau và các khung thời gian khác nhau, bằng cách điều chỉnh động đường dừng, để kiểm soát rủi ro.
Chiến lược này kết hợp nhiều chỉ số như đường trung bình, ATR, KD, và tỷ lệ biến đổi để xác định hướng xu hướng tổng thể trong khung thời gian hiện tại. Cụ thể, nó tính toán các giá trị tổng hợp của một số tín hiệu con sau:
Mỗi tín hiệu con trên được xử lý trơn tru và đặt các ngưỡng khác nhau để đánh giá mua / bán. Mỗi tín hiệu con sau đó được cân nhắc để tính tổng số tín hiệu trong khung thời gian hiện tại. Nếu tín hiệu lớn hơn 0, thì được đánh giá là xu hướng tăng, nếu tín hiệu nhỏ hơn 0, thì được đánh giá là xu hướng giảm.
Khi đánh giá là xu hướng tăng, chiến lược sẽ thiết lập đường dừng theo dõi gần điểm cao hơn trước đó; khi đánh giá là xu hướng giảm, chiến lược sẽ thiết lập đường dừng theo dõi gần điểm thấp hơn trước đó. Như vậy, có thể điều chỉnh động vị trí dừng lỗ theo phong trào giá thực tế, để đạt được mục đích kiểm soát rủi ro.
Chiến lược này tích hợp nhiều chỉ số để đánh giá xu hướng hiện tại, tăng độ chính xác của phán đoán. Đồng thời, chiến lược có thể thích ứng với các giống và khung thời gian khác nhau, có khả năng thích ứng mạnh mẽ hơn.
Điều quan trọng nhất là chiến lược này có thể điều chỉnh động các đường dừng lỗ, có thể điều chỉnh mức độ kiểm soát rủi ro theo xu hướng thực tế, do đó bảo hiểm rủi ro hệ thống, đây là ưu điểm lớn nhất của nó.
Chiến lược này đánh giá chất lượng của tín hiệu xu hướng trực tiếp ảnh hưởng đến việc thiết lập đường dừng, và nếu đánh giá sai, có thể dẫn đến việc thiết lập vị trí dừng quá thoải mái hoặc quá nghiêm ngặt. Ngoài ra, đường dừng không thể hoàn toàn tránh được rủi ro biến động của thị trường.
Chiến lược này cũng cần cân bằng mức lợi nhuận và khoảng cách dừng lỗ, nếu dừng lỗ quá gần, có thể dẫn đến dừng lỗ quá thường xuyên; nếu dừng lỗ quá xa, rủi ro không thể được kiểm soát hiệu quả. Điều này cần tối ưu hóa tham số theo chu kỳ khác nhau của các giống khác nhau.
Có thể xem xét việc giới thiệu các thuật toán học máy để sử dụng các mô hình được đào tạo bằng dữ liệu lịch sử để đánh giá xu hướng, do đó cải thiện độ chính xác của phán đoán.
Có thể thử nghiệm các kết hợp tham số khác nhau để tối ưu hóa khoảng cách giữa các đường dừng. Ví dụ: điều chỉnh động tham số chu kỳ ATR để phù hợp với sự thay đổi của biến động thị trường.
Nó cũng có thể kết hợp với chỉ số năng lượng khối lượng giao dịch để xác định xu hướng thực sự, ngăn chặn các sai sót tín hiệu do giá cả lệch.
Chiến lược này nhằm mục đích nâng cao hiệu quả của việc ngăn chặn thiệt hại và kiểm soát rủi ro giao dịch bằng cách kết hợp nhiều chỉ số kỹ thuật để đánh giá xu hướng hiện tại và theo đó điều chỉnh động theo dõi đường dừng lỗ. Ý tưởng của chiến lược này tiên tiến, đáng để tối ưu hóa và xác minh hơn nữa, là một khung thời gian đa dạng có thể được tham khảo để điều chỉnh chiến lược kiểm soát rủi ro.
/*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")