Adaptive Ichimoku Nexus [WillyAlgoTrader]
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «adaptive ichimoku nexus (1).pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Adaptive Ichimoku Nexus — это индикатор для TradingView, написанный на Pine Script v6. Он отображает на графике линии Ишимоку (Tenkan-Sen, Kijun-Sen, Chikou Span), облако Kumo и дополнительные визуальные элементы. Индикатор поддерживает два режима расчёта: классический с фиксированными периодами и адаптивный, в котором периоды линий масштабируются в зависимости от волатильности рынка.
Настройки программы
| Настройка | Описание |
|---|---|
| modeInput | Режим расчёта: классический с фиксированными периодами или адаптивный с масштабированием периодов по волатильности. |
| conversionBaseInput | Период расчёта линии Tenkan-Sen. В адаптивном режиме масштабируется в пределах ±40%. |
| baseBaseInput | Период расчёта линии Kijun-Sen. В адаптивном режиме масштабируется в зависимости от волатильности. |
| spanBBaseInput | Период расчёта линии Senkou Span B. Большее значение даёт более толстое облако. |
| displacementInput | Смещение облака и линии Chikou Span в барах. |
| sourceInput | Источник цены для расчётов. |
| adaptLenInput | Окно измерения ATR для адаптивного масштабирования периодов. Большее значение даёт более плавную адаптацию. |
| adaptStrengthInput | Диапазон растяжения периодов в адаптивном режиме. Значение 0.1 соответствует ±10%, значение 0.8 — ±80%. |
| minScoreInput | Минимальный балл (от 0 до 100) для формирования сигнала пересечения Tenkan и Kijun. |
| kumoFilterInput | Подавлять сигналы в зонах очень тонкого облака Kumo. |
| volFilterInput | Требовать объём выше среднего для формирования сигнала. Автоматически отключается на форекс. |
| chikouFilterInput | Требовать подтверждения направления линии Chikou Span для формирования сигнала. |
| showTPSLInput | Отображать уровни стоп-лосса и тейк-профита после сигналов. |
| slModeInput | Метод расчёта стоп-лосса: от края облака, от линии Kijun или фиксированный множитель ATR. |
| slAtrMultInput | Множитель ATR, добавляемый как буфер за уровнем стоп-лосса. |
| tp1MultInput | Первый тейк-профит как множитель риска. Значение 1.5 соответствует 1.5-кратному расстоянию до стоп-лосса. |
| tp2MultInput | Второй тейк-профит как множитель риска. |
| tp3MultInput | Третий тейк-профит как множитель риска. |
| showBreakoutInput | Показывать сигналы пробоя облака Kumo. |
| breakVolMultInput | Множитель объёма относительно скользящей средней для подтверждения пробоя облака. |
| breakRetestInput | Показывать сигналы повторного теста края облака после пробоя. |
| showMTFInput | Отображать панель мультитаймфреймового анализа Ишимоку. |
| mtfTF1Input | Первый таймфрейм для мультитаймфреймового анализа. |
| mtfTF2Input | Второй таймфрейм для мультитаймфреймового анализа. |
| mtfTF3Input | Третий таймфрейм для мультитаймфреймового анализа. |
| themeInput | Цветовая тема графика: автоопределение, тёмная или светлая. |
| showCloudInput | Отображать заливку облака Kumo. |
| showTKInput | Отображать линии Tenkan-Sen и Kijun-Sen. |
| showChikouInput | Отображать линию Chikou Span (запаздывающую линию). |
| showSignalsInput | Отображать метки Long/Short на сигналах пересечения Tenkan и Kijun. |
| showScoreInput | Включать процент совпадений в метки сигналов. |
| showBreakLabelsInput | Отображать метки на сигналах пробоя облака Kumo. |
| showTPSLLabelsInput | Отображать ценовые метки рядом с линиями TP/SL. |
| showZonesInput | Выделять плоскую линию Kijun-Sen как уровень поддержки/сопротивления. |
| showBgInput | Окрашивать фон графика в зависимости от направления тренда. |
| signalSizeInput | Размер меток сигналов Long/Short на графике. |
| showWatermarkInput | Отображать водяной знак автора на графике. |
| showDashInput | Отображать информационную панель. |
| dashPosStr | Расположение информационной панели на графике. |
| dashFontInput | Размер текста информационной панели. |
| webhookInput | Отправлять оповещения в формате JSON для интеграции с вебхуками. |
| bullColorInput | Цвет бычьих сигналов и линий тейк-профита. |
| bearColorInput | Цвет медвежьих сигналов и линии стоп-лосса. |
| tenkanColorInput | Цвет линии Tenkan-Sen (линии конверсии). |
| kijunColorInput | Цвет линии Kijun-Sen (базовой линии). |
| chikouColorInput | Цвет линии Chikou Span (запаздывающей линии). |
| breakoutColorInput | Цвет сигналов пробоя облака Kumo. |
Поиск по коду файла
indicator(
title = "Adaptive Ichimoku Nexus [WillyAlgoTrader]",
shorttitle = "IchiNexus",
overlay = true,
max_labels_count = 500,
max_lines_count = 500,
max_boxes_count = 200,
max_bars_back = 5000)
GRP_MAIN = "⚙️ Main Settings"
GRP_ADAPT = "🔄 Adaptive Engine"
GRP_VISUAL = "🎨 Visual Settings"
GRP_FILTER = "🔍 Filters"
GRP_TPSL = "🎯 Smart TP/SL"
GRP_KUMO = "💥 Kumo Breakout"
GRP_MTF = "🔄 Multi-Timeframe"
GRP_DASH = "📊 Dashboard"
GRP_ALERT = "🔔 Alerts"
GRP_COLORS = "🎨 Colors"
INDICATOR_VERSION = "v2.0.1"
modeInput = input.string("Adaptive", "Calculation Mode", options = ["Classic", "Adaptive"], group = GRP_MAIN, tooltip = "Classic: fixed Ichimoku periods.\nAdaptive: periods scale with market volatility.\nAdaptive reacts faster in volatile markets, slower in quiet ones.")
conversionBaseInput = input.int(9, "Conversion Period", minval = 3, maxval = 50, group = GRP_MAIN, tooltip = "Tenkan-Sen lookback. In Adaptive mode scales ±40%.\nLower = faster, noisier. Default: 9")
baseBaseInput = input.int(26, "Base Period", minval = 10, maxval = 100, group = GRP_MAIN, tooltip = "Kijun-Sen lookback. Adaptive scales with volatility.\nDefault: 26")
spanBBaseInput = input.int(52, "Span B Period", minval = 20, maxval = 200, group = GRP_MAIN, tooltip = "Senkou Span B lookback. Longer = thicker cloud.\nDefault: 52")
displacementInput = input.int(26, "Displacement", minval = 1, maxval = 100, group = GRP_MAIN, tooltip = "Cloud/Chikou displacement in bars.\nDefault: 26")
sourceInput = input.source(close, "Source", group = GRP_MAIN, tooltip = "Price source for calculations.\nDefault: close")
adaptLenInput = input.int(50, "Volatility Lookback", minval = 10, maxval = 200, group = GRP_ADAPT, tooltip = "ATR measurement window for adaptive scaling.\nHigher = smoother adaptation. Default: 50")
adaptStrengthInput = input.float(0.4, "Adapt Strength", minval = 0.1, maxval = 0.8, step = 0.05, group = GRP_ADAPT, tooltip = "Period stretch range (0.1=±10%, 0.8=±80%).\nDefault: 0.4")
minScoreInput = input.int(50, "Min Confluence Score", minval = 0, maxval = 100, step = 5, group = GRP_FILTER, tooltip = "Minimum score (0–100) to trigger TK cross signal.\nHigher = fewer, better signals. Default: 50")
kumoFilterInput = input.bool(true, "Kumo Thickness Filter", group = GRP_FILTER, tooltip = "Suppress signals in very thin Kumo zones.")
volFilterInput = input.bool(true, "Volume Filter", group = GRP_FILTER, tooltip = "Require above-average volume. Auto-disabled on forex.")
chikouFilterInput = input.bool(true, "Chikou Confirmation", group = GRP_FILTER, tooltip = "Require Chikou Span trend alignment.")
showTPSLInput = input.bool(true, "Show TP/SL Lines", group = GRP_TPSL, tooltip = "Display stop-loss and take-profit levels after signals.")
slModeInput = input.string("Kumo Edge", "SL Mode", options = ["Kumo Edge", "Kijun", "ATR"], group = GRP_TPSL, tooltip = "Stop-loss calculation method:\n• Kumo Edge: nearest cloud boundary + ATR buffer\n• Kijun: Kijun-Sen level + ATR buffer\n• ATR: fixed ATR multiple from entry")
slAtrMultInput = input.float(0.5, "SL ATR Buffer", minval = 0.1, maxval = 3.0, step = 0.1, group = GRP_TPSL, tooltip = "ATR multiplier added as buffer beyond SL level.\nDefault: 0.5")
tp1MultInput = input.float(1.5, "TP1 R:R", minval = 0.5, maxval = 5.0, step = 0.1, group = GRP_TPSL, tooltip = "Take-profit 1 as risk multiple.\n1.5 = 1.5x the SL distance. Default: 1.5")
tp2MultInput = input.float(2.5, "TP2 R:R", minval = 1.0, maxval = 8.0, step = 0.1, group = GRP_TPSL, tooltip = "Take-profit 2 as risk multiple.\nDefault: 2.5")
tp3MultInput = input.float(4.0, "TP3 R:R", minval = 1.5, maxval = 12.0, step = 0.1, group = GRP_TPSL, tooltip = "Take-profit 3 as risk multiple.\nDefault: 4.0")
showBreakoutInput = input.bool(true, "Show Kumo Breakouts", group = GRP_KUMO, tooltip = "Show signals when price breaks through the cloud.")
breakVolMultInput = input.float(1.3, "Breakout Vol Mult", minval = 1.0, maxval = 3.0, step = 0.1, group = GRP_KUMO, tooltip = "Volume must exceed SMA * this multiplier for breakout.\nDefault: 1.3")
breakRetestInput = input.bool(true, "Show Retest Signals", group = GRP_KUMO, tooltip = "Show when price retests Kumo edge after breakout.")
showMTFInput = input.bool(true, "Show MTF Panel", group = GRP_MTF, tooltip = "Display multi-timeframe Ichimoku alignment panel.")
mtfTF1Input = input.timeframe("15", "TF 1", group = GRP_MTF, tooltip = "First timeframe for MTF analysis.")
mtfTF2Input = input.timeframe("60", "TF 2", group = GRP_MTF, tooltip = "Second timeframe for MTF analysis.")
mtfTF3Input = input.timeframe("240", "TF 3", group = GRP_MTF, tooltip = "Third timeframe for MTF analysis.")
themeInput = input.string("Auto", "Theme", options = ["Auto", "Dark", "Light"], group = GRP_VISUAL, tooltip = "Chart color theme. Auto detects from background.")
showCloudInput = input.bool(true, "Show Cloud", group = GRP_VISUAL, tooltip = "Display the Kumo cloud fill.")
showTKInput = input.bool(true, "Show TK Lines", group = GRP_VISUAL, tooltip = "Display Tenkan-Sen and Kijun-Sen.")
showChikouInput = input.bool(true, "Show Chikou Span", group = GRP_VISUAL, tooltip = "Display the Chikou (lagging) span.")
showSignalsInput = input.bool(true, "Show TK Signal Labels", group = GRP_VISUAL, tooltip = "Display Long/Short labels on TK cross signals.")
showScoreInput = input.bool(true, "Show Score on Signals", group = GRP_VISUAL, tooltip = "Include confluence score % in signal labels.")
showBreakLabelsInput = input.bool(true, "Show Breakout Labels", group = GRP_VISUAL, tooltip = "Display labels on Kumo breakout signals.")
showTPSLLabelsInput = input.bool(true, "Show TP/SL Labels", group = GRP_VISUAL, tooltip = "Display price labels next to TP/SL lines.")
showZonesInput = input.bool(true, "Show S/R Zones", group = GRP_VISUAL, tooltip = "Highlight flat Kijun-Sen as S/R.")
showBgInput = input.bool(false, "Show Trend Background", group = GRP_VISUAL, tooltip = "Tint background by trend direction.")
signalSizeInput = input.string("Small", "Signal Label Size", options = ["Tiny", "Small", "Normal", "Large"], group = GRP_VISUAL, tooltip = "Size of Long/Short signal labels on chart.\nDefault: Small")
showWatermarkInput = input.bool(true, "Show Watermark", group = GRP_VISUAL, tooltip = "Display 'WillyAlgoTrader - by Willy' watermark.")
showDashInput = input.bool(true, "Show Dashboard", group = GRP_DASH, tooltip = "Display info dashboard.")
dashPosStr = input.string("Top Right", "Position", options = ["Top Left", "Top Right", "Bottom Left", "Bottom Right"], group = GRP_DASH, tooltip = "Dashboard position on chart.")
dashFontInput = input.string("Small", "Font Size", options = ["Tiny", "Small", "Normal"], group = GRP_DASH, tooltip = "Dashboard text size.\nDefault: Small")
webhookInput = input.bool(false, "Webhook JSON Format", group = GRP_ALERT, tooltip = "Send alerts in JSON for webhook integrations.")
bullColorInput = input.color(#00E676, "Bull", inline = "sig", group = GRP_COLORS, tooltip = "Bullish signals and TP lines color.")
bearColorInput = input.color(#FF5252, "Bear", inline = "sig", group = GRP_COLORS, tooltip = "Bearish signals and SL line color.")
tenkanColorInput = input.color(#2962FF, "Tenkan", inline = "lines", group = GRP_COLORS, tooltip = "Tenkan-Sen (conversion) line color.")
kijunColorInput = input.color(#E91E63, "Kijun", inline = "lines", group = GRP_COLORS, tooltip = "Kijun-Sen (base) line color.")
chikouColorInput = input.color(#FF9800, "Chikou", inline = "extra", group = GRP_COLORS, tooltip = "Chikou (lagging) span color.")
breakoutColorInput = input.color(#00BCD4, "Breakout", inline = "extra", group = GRP_COLORS, tooltip = "Kumo breakout signal color.")
isDark = switch themeInput
"Dark" => true
"Light" => false
=> color.r(chart.bg_color) < 128
TEXT_COLOR = isDark ? #E0E0E0 : #1A1A1A
TEXT_MUTED = isDark ? color.new(#9E9E9E, 0) : color.new(#757575, 0)
TABLE_BG = isDark ? color.new(#131722, 5) : color.new(#FFFFFF, 5)
TABLE_BORDER = isDark ? color.new(#2A2E39, 0) : color.new(#D0D0D0, 0)
TABLE_ROW_ALT = isDark ? color.new(#1C2030, 0) : color.new(#F0F4F8, 0)
HEADER_BG = color.new(#2962FF, 0)
HEADER_TEXT = #FFFFFF
LABEL_TEXT = #FFFFFF
WM_COLOR = isDark ? color.new(#FFFFFF, 80) : color.new(#000000, 80)
NEUTRAL_COLOR = isDark ? color.new(#FFAB00, 0) : color.new(#E65100, 0)
CLOUD_BULL = color.new(bullColorInput, 88)
CLOUD_BEAR = color.new(bearColorInput, 88)
signalSize = switch signalSizeInput
"Tiny" => size.tiny
"Small" => size.small
"Normal" => size.normal
"Large" => size.large
=> size.small
dashFontSize = switch dashFontInput
"Tiny" => size.tiny
"Small" => size.small
"Normal" => size.normal
=> size.small
safeDiv(float num, float den, float fallback = 0.0) =>
den != 0 and not na(num) and not na(den) ? num / den : fallback
adaptiveDonchian(int basePeriod, float volRatio, float strength) =>
int minP = math.max(math.round(basePeriod * (1.0 - strength)), 3)
int maxP = math.round(basePeriod * (1.0 + strength))
int adaptedLen = math.round(basePeriod * (1.0 + strength * (1.0 - 2.0 * volRatio)))
int safePeriod = math.max(math.min(adaptedLen, maxP), minP)
float hi = ta.highest(high, safePeriod)
float lo = ta.lowest(low, safePeriod)
math.avg(nz(hi, high), nz(lo, low))
classicDonchian(int len) =>
float hi = ta.highest(high, len)
float lo = ta.lowest(low, len)
math.avg(nz(hi, high), nz(lo, low))
int WARMUP_BARS = math.max(spanBBaseInput + displacementInput, 80)
bool isWarmedUp = bar_index >= WARMUP_BARS
float atrBase = nz(ta.atr(14), 0.0)
float atrHigh = nz(ta.highest(atrBase, adaptLenInput), atrBase)
float atrLow = nz(ta.lowest(atrBase, adaptLenInput), 0.0)
float volRange = atrHigh - atrLow
float volRatio = volRange > 0 ? math.min(math.max(safeDiv(atrBase - atrLow, volRange, 0.5), 0.0), 1.0) : 0.5
bool isAdaptive = modeInput == "Adaptive"
float tenkanSen = isAdaptive ? adaptiveDonchian(conversionBaseInput, volRatio, adaptStrengthInput) : classicDonchian(conversionBaseInput)
float kijunSen = isAdaptive ? adaptiveDonchian(baseBaseInput, volRatio, adaptStrengthInput) : classicDonchian(baseBaseInput)
float senkouA = math.avg(tenkanSen, kijunSen)
float senkouB = isAdaptive ? adaptiveDonchian(spanBBaseInput, volRatio, adaptStrengthInput) : classicDonchian(spanBBaseInput)
float chikouSpan = sourceInput
tenkanSen := nz(tenkanSen, close)
kijunSen := nz(kijunSen, close)
senkouA := nz(senkouA, close)
senkouB := nz(senkouB, close)
int dOff = displacementInput - 1
float kumoSpanACurr = nz(senkouA[dOff], senkouA)
float kumoSpanBCurr = nz(senkouB[dOff], senkouB)
float kumoTop = math.max(kumoSpanACurr, kumoSpanBCurr)
float kumoBot = math.min(kumoSpanACurr, kumoSpanBCurr)
float kumoThickness = kumoTop - kumoBot
float kumoThickAvg = nz(ta.sma(kumoThickness, 50), kumoThickness)
bool isThinKumo = kumoThickness < kumoThickAvg * 0.3
bool priceAboveCloud = close > kumoTop
bool priceBelowCloud = close < kumoBot
bool priceInCloud = not priceAboveCloud and not priceBelowCloud
bool tkBullish = tenkanSen > kijunSen
bool tkBearish = tenkanSen < kijunSen
bool tkCrossUp = ta.crossover(tenkanSen, kijunSen)
bool tkCrossDown = ta.crossunder(tenkanSen, kijunSen)
float priceAtChikou = nz(sourceInput[displacementInput], close)
bool chikouBull = chikouSpan > priceAtChikou
bool chikouBear = chikouSpan < priceAtChikou
bool kijunFlat = kijunSen == nz(kijunSen[1], kijunSen) and kijunSen == nz(kijunSen[2], kijunSen) and kijunSen == nz(kijunSen[3], kijunSen)
bool kijunFlatPrev = kijunFlat[1] == true
bool kijunWasFlat = kijunFlatPrev and not kijunFlat
bool hasVolume = nz(volume, 0) > 0
float volSma = hasVolume ? nz(ta.sma(volume, 20), 0.0) : 0.0
bool volConfirm = hasVolume ? volume > volSma * 1.2 : true
bool volStrong = hasVolume ? volume > volSma * breakVolMultInput : true
float tkSpread = tenkanSen - kijunSen
float tkSpreadNorm = atrBase > 0 ? tkSpread / atrBase : 0.0
float tkSpreadPrev = nz(tkSpreadNorm[3], tkSpreadNorm)
float tkAcceleration = tkSpreadNorm - tkSpreadPrev
float cloudSlope = (senkouA - nz(senkouA[5], senkouA)) - (senkouB - nz(senkouB[5], senkouB))
float cloudSlopeNorm = atrBase > 0 ? cloudSlope / atrBase : 0.0
float rawMomentum = (tkSpreadNorm * 40.0) + (tkAcceleration * 100.0) + (cloudSlopeNorm * 30.0)
float momentumPulse = math.max(math.min(rawMomentum, 100.0), -100.0)
float momentumSmooth = nz(ta.ema(momentumPulse, 5), 0.0)
bool momentumRising = momentumSmooth > nz(momentumSmooth[1], 0.0) and momentumSmooth > 0
bool momentumFading = momentumSmooth < nz(momentumSmooth[1], 0.0) and momentumSmooth > 0
bool momentumBearAccel = momentumSmooth < nz(momentumSmooth[1], 0.0) and momentumSmooth < 0
bool momentumBearFading = momentumSmooth > nz(momentumSmooth[1], 0.0) and momentumSmooth < 0
confluenceScore(bool isBull) =>
float score = 0.0
score += isBull ? (priceAboveCloud ? 20.0 : priceInCloud ? 8.0 : 0.0) : (priceBelowCloud ? 20.0 : priceInCloud ? 8.0 : 0.0)
score += isBull ? (tkBullish ? 15.0 : 0.0) : (tkBearish ? 15.0 : 0.0)
score += isBull ? (chikouBull ? 15.0 : 0.0) : (chikouBear ? 15.0 : 0.0)
float spanAslope = senkouA - nz(senkouA[3], senkouA)
float spanBslope = senkouB - nz(senkouB[3], senkouB)
bool futureCloudBull = spanAslope > spanBslope
score += isBull ? (futureCloudBull ? 10.0 : 0.0) : (not futureCloudBull ? 10.0 : 0.0)
score += not isThinKumo ? 8.0 : 2.0
score += volConfirm ? 10.0 : 0.0
score += isBull ? (momentumSmooth > 20 ? 12.0 : momentumSmooth > 0 ? 6.0 : 0.0) : (momentumSmooth < -20 ? 12.0 : momentumSmooth < 0 ? 6.0 : 0.0)
score += isBull ? (momentumRising ? 10.0 : 0.0) : (momentumBearAccel ? 10.0 : 0.0)
math.min(score, 100.0)
float bullScore = confluenceScore(true)
float bearScore = confluenceScore(false)
bool passKumo = kumoFilterInput ? not isThinKumo : true
bool passVol = volFilterInput ? volConfirm : true
bool passChikou = chikouFilterInput ? chikouBull : true
bool passChikouSell = chikouFilterInput ? chikouBear : true
bool passScoreBuy = bullScore >= minScoreInput
bool passScoreSell = bearScore >= minScoreInput
bool buyCondition = tkCrossUp and passKumo and passVol and passChikou and passScoreBuy
bool sellCondition = tkCrossDown and passKumo and passVol and passChikouSell and passScoreSell
bool confirmedBuy = buyCondition and barstate.isconfirmed and isWarmedUp
bool confirmedSell = sellCondition and barstate.isconfirmed and isWarmedUp
string buyGrade = bullScore >= 80 ? "Strong" : bullScore >= 50 ? "Standard" : "Weak"
string sellGrade = bearScore >= 80 ? "Strong" : bearScore >= 50 ? "Standard" : "Weak"
float prevKumoTop = nz(kumoTop[1], kumoTop)
float prevKumoBot = nz(kumoBot[1], kumoBot)
bool wasBelowOrIn = nz(close[1], close) <= prevKumoTop
bool wasAboveOrIn = nz(close[1], close) >= prevKumoBot
bool kumoBreakUp = close > kumoTop and wasBelowOrIn and barstate.isconfirmed and isWarmedUp and volStrong
bool kumoBreakDown = close < kumoBot and wasAboveOrIn and barstate.isconfirmed and isWarmedUp and volStrong
var int lastBreakUpBar = 0
var int lastBreakDownBar = 0
if kumoBreakUp
lastBreakUpBar := bar_index
if kumoBreakDown
lastBreakDownBar := bar_index
bool retestBull = breakRetestInput and (bar_index - lastBreakUpBar > 1) and (bar_index - lastBreakUpBar <= 10) and low <= kumoTop and close > kumoTop and barstate.isconfirmed and isWarmedUp
bool retestBear = breakRetestInput and (bar_index - lastBreakDownBar > 1) and (bar_index - lastBreakDownBar <= 10) and high >= kumoBot and close < kumoBot and barstate.isconfirmed and isWarmedUp
var float activeSL = na
var float activeTP1 = na
var float activeTP2 = na
var float activeTP3 = na
var float activeEntryPrice = na
var int activeDir = 0
var bool tp1Hit = false
var bool tp2Hit = false
var bool tp3Hit = false
var bool slHit = false
calcSL(bool isLong, float entry) =>
float slLevel = 0.0
float atrBuf = atrBase * slAtrMultInput
if slModeInput == "Kumo Edge"
slLevel := isLong ? kumoBot - atrBuf : kumoTop + atrBuf
else if slModeInput == "Kijun"
slLevel := isLong ? kijunSen - atrBuf : kijunSen + atrBuf
else
slLevel := isLong ? entry - atrBase * 2.0 : entry + atrBase * 2.0
slLevel
bool anyBuy = confirmedBuy or (showBreakoutInput and kumoBreakUp) or (showBreakoutInput and retestBull)
bool anySell = confirmedSell or (showBreakoutInput and kumoBreakDown) or (showBreakoutInput and retestBear)
if anyBuy and showTPSLInput
activeEntryPrice := close
activeSL := calcSL(true, close)
float riskDist = math.max(math.abs(close - activeSL), atrBase * 0.5)
activeTP1 := close + riskDist * tp1MultInput
activeTP2 := close + riskDist * tp2MultInput
activeTP3 := close + riskDist * tp3MultInput
activeDir := 1
tp1Hit := false
tp2Hit := false
tp3Hit := false
slHit := false
if anySell and showTPSLInput
activeEntryPrice := close
activeSL := calcSL(false, close)
float riskDist = math.max(math.abs(activeSL - close), atrBase * 0.5)
activeTP1 := close - riskDist * tp1MultInput
activeTP2 := close - riskDist * tp2MultInput
activeTP3 := close - riskDist * tp3MultInput
activeDir := -1
tp1Hit := false
tp2Hit := false
tp3Hit := false
slHit := false
if activeDir == 1 and not slHit and not na(activeSL)
if not na(activeTP1) and high >= activeTP1 and not tp1Hit
tp1Hit := true
if not na(activeTP2) and high >= activeTP2 and not tp2Hit
tp2Hit := true
if not na(activeTP3) and high >= activeTP3 and not tp3Hit
tp3Hit := true
activeDir := 0
if low <= activeSL
slHit := true
activeDir := 0
if activeDir == -1 and not slHit and not na(activeSL)
if not na(activeTP1) and low <= activeTP1 and not tp1Hit
tp1Hit := true
if not na(activeTP2) and low <= activeTP2 and not tp2Hit
tp2Hit := true
if not na(activeTP3) aПоказано первые 50% кода (символов: 29808)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.