La stratégie détermine l’orientation de la tendance dans le cadre de la période actuelle en calculant des signaux combinés de plusieurs indicateurs techniques. La stratégie peut s’adapter à différentes variétés et à différentes périodes de temps, en ajustant dynamiquement la ligne de freinage pour contrôler le risque.
Cette stratégie combine plusieurs indicateurs, tels que la moyenne, l’ATR, le KD et le taux de variation, pour déterminer la direction de la tendance globale dans le cadre du temps actuel. Plus précisément, elle calcule les valeurs combinées des signaux suivants:
Chaque sous-signaux ci-dessus est traité en douceur et définit un seuil différent pour le jugement d’achat/vente. Chaque sous-signaux est ensuite pondéré pour calculer le signal global dans le cadre du temps actuel. Si le signal est supérieur à 0, il est jugé comme une tendance à la hausse et si le signal est inférieur à 0, il est jugé comme une tendance à la baisse.
Si la tendance est à la hausse, la stratégie définit une ligne de suivi de la perte près du point le plus élevé précédemment; si la tendance est à la baisse, la stratégie définit une ligne de suivi de la perte près du point le plus bas précédemment. Cela permet d’ajuster dynamiquement le point de perte en fonction de l’évolution réelle des prix et de réaliser le but de la gestion du risque.
La stratégie intègre plusieurs indicateurs pour juger de la direction de la tendance actuelle, ce qui améliore l’exactitude du jugement. De plus, la stratégie peut s’adapter à différentes variétés et périodes de temps, avec une plus grande adaptabilité.
Par-dessus tout, la capacité de la stratégie d’ajuster dynamiquement ses lignes de stop-loss et ses niveaux de contrôle du risque en fonction de la tendance réelle, ce qui permet de couvrir le risque systémique, est son plus grand avantage.
La qualité des signaux de tendance influe directement sur la définition de la ligne de stop. Une erreur de jugement peut entraîner une position de stop trop lâche ou trop stricte. De plus, la ligne de stop ne peut pas éviter complètement les variations de la tendance.
Cette stratégie nécessite également un équilibre entre le niveau de profit et la distance d’arrêt. Si la distance d’arrêt est trop proche, cela peut entraîner des arrêts trop fréquents; si la distance d’arrêt est trop longue, le risque ne peut pas être contrôlé efficacement. Cela nécessite une optimisation des paramètres en fonction des différentes variétés et des différentes cycles.
L’introduction d’algorithmes d’apprentissage automatique pour former des modèles à partir de données historiques permettant de déterminer la direction des tendances pourrait être envisagée pour améliorer l’exactitude de ces jugements.
Il est possible de tester différentes combinaisons de paramètres pour optimiser la distance entre les lignes de stop. Par exemple, ajuster dynamiquement les paramètres du cycle ATR pour s’adapter aux variations de la volatilité du marché.
Il est également possible de combiner les indicateurs de l’énergie du volume des transactions pour déterminer la tendance réelle et éviter les erreurs de signal causées par des écarts de prix.
Cette stratégie, qui permet d’évaluer la direction de la tendance actuelle en intégrant plusieurs indicateurs techniques et d’adapter dynamiquement le suivi de la ligne de stop-loss, vise à améliorer l’efficacité du stop-loss et à contrôler le risque de transaction. L’idée de la stratégie est avancée et mérite d’être encore optimisée et vérifiée.
/*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")