
Стратегия определяет направление тренда в текущем временном периоде, рассчитывая комбинированные сигналы из нескольких технических показателей. В случае восходящего тренда устанавливается стоп-линия для отслеживания в более высоких точках; в случае понижающего тренда - стоп-линия для отслеживания в более низких точках. Стратегия может адаптироваться к различным сортам и различным временным рамкам, динамически регулируя стоп-линию для контроля риска.
Эта стратегия объединяет несколько показателей, таких как средняя линия, ATR, KD, скорость изменения и т. Д., чтобы определить направление общей тенденции в текущем временном периоде. В частности, она рассчитывает совокупные значения следующих нескольких подсигналов:
Каждый из вышеперечисленных подсигналов проходит гладкую обработку и устанавливает различные пороговые значения для принятия решения о покупке/продаже. Затем каждому подсигналу придается вес, чтобы рассчитать общий сигнал в текущем временном периоде. Если сигнал больше 0, он определяется как восходящий тренд, если сигнал меньше 0, он определяется как нисходящий тренд.
При оценке как восходящего тренда, стратегия устанавливает следящую стоп-линию вблизи предыдущих более высоких точек; при оценке как нисходящего тренда, стратегия устанавливает следящую стоп-линию вблизи предыдущих более низких точек. Таким образом, можно динамически регулировать стоп-линию в зависимости от фактического движения цены для достижения целей контроля риска.
Стратегия объединяет несколько показателей для определения направления текущих тенденций, что повышает ее точность. Кроме того, стратегия может адаптироваться к различным видам и временным рамкам, имея более высокую адаптивность.
Самое главное, что стратегия способна динамически корректировать свои стоп-линии, способна корректировать уровень управления рисками в зависимости от фактического развития событий, таким образом, покрывая системный риск, что является ее наибольшим преимуществом.
Эта стратегия определяет качество трендовых сигналов, которые напрямую влияют на установку стоп-линий, а ошибки могут привести к тому, что стоп-линия будет установлена слишком мягко или слишком строго. Кроме того, стоп-линия не может полностью избежать риска рыночных изменений.
Стратегия также требует баланса между уровнем прибыли и остановкой, если остановка слишком близка, это может привести к слишком частому остановке; если остановка слишком далеко, это не позволит эффективно контролировать риск. Это требует оптимизации параметров в зависимости от различных циклов для разных сортов.
Можно рассмотреть возможность внедрения алгоритмов машинного обучения, использующих модели, обученные историческим данным, для определения направления тенденций, что повысит точность определения.
Можно тестировать различные комбинации параметров, оптимизируя расстояние между стоп-линиями. Например, можно динамически корректировать параметры ATR-циклов, чтобы адаптироваться к изменениям волатильности рынка.
Также можно использовать энергетический индикатор для определения истинной тенденции, чтобы предотвратить ошибку сигнала, вызванную отклонением от величины.
Стратегия направлена на повышение эффективности сдерживания убытков и контроля за риском торговли путем интеграции нескольких технических показателей, чтобы определить направление текущей тенденции и динамически адаптировать отслеживание стоп-линий. Концепция стратегии продвинута и заслуживает дальнейшей оптимизации и проверки.
/*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")