← К каталогу
Исходный код · ID 4015

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 и перейдите к оплате.

Стоимость полного кода
2 980,80₽ ≈ $36.43