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

AF_StochZ_Overlay

af_stochz_overlay.pine
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

AF_StochZ_Overlay — индикатор для TradingView, отображаемый поверх цены (overlay). Он рассчитывает адаптивный стохастический индикатор с использованием коэффициента эффективности для динамической настройки периода, применяет к нему преобразование Фишера и нормализацию по Z-Score. Индикатор определяет развороты на основе совпадения пивотов стохастика и цены, а также обнаруживает регулярные и скрытые дивергенции.

Индикатор поддерживает дополнительные фильтры: фильтр тренда на основе EMA и подтверждение сигналов с помощью линий %K и %D. Все параметры настраиваются пользователем, включая длины, уровни, цвета сигналов и дивергенций.

Для оповещений реализованы шесть условий: бычий и медвежий сигналы, а также регулярная и скрытая бычья и медвежья дивергенция. Результаты отображаются в виде меток на графике с возможностью отрисовки линий дивергенций.

Настройки программы

НастройкаОписание
minLen Минимальная длина адаптивного периода стохастика.
maxLen Максимальная длина адаптивного периода стохастика. Если задана меньше минимальной, автоматически ограничивается до минимальной длины.
erLen Период расчёта коэффициента эффективности, используемого для адаптивной настройки длины стохастика.
smoothK Период сглаживания линии %K стохастика.
smoothD Период сглаживания сигнальной линии %D стохастика.
useKDFilter При активации сигнал BUY требует пересечение %K сверху %D, а сигнал SELL — пересечение %K снизу %D.
zLen Период расчёта среднего и стандартного отклонения для нормализации стохастика по Z-Score.
oscPivotBars Количество баров слева и справа для определения пивотов осциллятора. Чем больше значение, тем меньше, но более надёжных сигналов генерируется.
osLevel Порог перепроданности Z-Score для определения разворотных точек осциллятора.
obLevel Порог перекупленности Z-Score для определения разворотных точек осциллятора.
pricePivotL Количество баров слева для определения пивотов цены при подтверждении сигналов.
pricePivotR Количество баров справа для определения пивотов при подтверждении сигналов.
maxPriceLag Максимальное допустимое количество баров задержки между пивотом осциллятора и пивотом цены для подтверждения сигнала.
colLeadBull Цвет метки для бычьего сигнала (BUY) на графике.
colLeadBear Цвет метки для медвежьего сигнала (SELL) на графике.
useTrendFilter При активации бычьи сигналы генерируются только при цене выше EMA, а медвежьи — только при цене ниже EMA.
trendEmaLen Период экспоненциальной скользящей средней, используемой в фильтре тренда.
showRegularDiv Включает поиск и отображение регулярных дивергенций на графике.
showHiddenDiv Включает поиск и отображение скрытых дивергенций на графике.
showDivLines Включает отображение линий, соединяющих точки дивергенций на графике.
divLookbackMin Минимальное количество баров назад для поиска дивергенций.
divLookbackMax Максимальное количество баров назад для поиска дивергенций.
colRegBullDiv Цвет отображения регулярной бычьей дивергенции на графике.
colRegBearDiv Цвет отображения регулярной медвежьей дивергенции на графике.
colHidBullDiv Цвет отображения скрытой бычьей дивергенции на графике.
colHidBearDiv Цвет отображения скрытой медвежьей дивергенции на графике.
Получить полный код

Поиск по коду файла

indicator("AF_StochZ_Overlay", shorttitle="AF_StochZ_Overlay", overlay=true, max_labels_count=500)

int minLen          = input.int(8, "Min Length", minval=1, group="Adaptive Parameters")
int maxLen          = input.int(34, "Max Length", minval=1, group="Adaptive Parameters", tooltip="Max Length, Min Length'ten kucuk girilirse otomatik olarak Min Length'e clamp edilir.")
int erLen           = input.int(10, "ER Length", minval=1, group="Adaptive Parameters")

int smoothK         = input.int(3, "%K Smoothing", minval=1, group="Signal Settings")
int smoothD         = input.int(3, "%D Signal", minval=1, group="Signal Settings")
bool useKDFilter    = input.bool(false, "Require %K/%D Confirmation", group="Signal Settings", tooltip="Aktifse: BUY sinyali icin %K > %D, SELL sinyali icin %K < %D sarti da aranir.")
int zLen            = input.int(20, "Z-Score Length", minval=2, group="Statistical Settings")
int oscPivotBars    = input.int(1, "Oscillator Pivot Bars (L=R)", minval=1, maxval=5, group="Statistical Settings", tooltip="Number of left/right bars for oscillator pivot detection. As the value increases, it produces fewer but more reliable signals.")

float osLevel       = input.float(-1.0, "Oversold Level (Z-Score)", group="Level Thresholds")
float obLevel       = input.float(1.0, "Overbought Level (Z-Score)", group="Level Thresholds")

int pricePivotL     = input.int(3, "Price Pivot Left Bars", minval=1, group="Price Pivot Filter")
int pricePivotR     = input.int(2, "Price Pivot Right Bars", minval=1, group="Price Pivot Filter")
int maxPriceLag     = input.int(5, "Max Lag After Osc Pivot (Bars)", minval=1, maxval=10, group="Price Pivot Filter")

color colLeadBull   = input.color(color.green, "Buy Signal Color", group="Color Settings")
color colLeadBear   = input.color(color.red, "Sell Signal Color", group="Color Settings")

bool useTrendFilter = input.bool(false, "Use Trend Filter (EMA)", group="Trend Filter", tooltip="If active: BUY signals are generated only when price is above the EMA, SELL signals only when price is below the EMA. Default off (backward compatibility).")
int trendEmaLen     = input.int(200, "Trend EMA Length", minval=1, group="Trend Filter")

bool showRegularDiv = input.bool(true, "Show Regular Divergence", group="Divergence Settings")
bool showHiddenDiv  = input.bool(true, "Show Hidden Divergence", group="Divergence Settings")
bool showDivLines   = input.bool(false, "Show Divergence Lines", group="Divergence Settings")
int divLookbackMin  = input.int(5, "Divergence Min Lookback (Bars)", minval=1, group="Divergence Settings")
int divLookbackMax  = input.int(60, "Divergence Max Lookback (Bars)", minval=1, group="Divergence Settings")

color colRegBullDiv = input.color(color.green, "Reg. Bullish Div Color", group="Divergence Colors")
color colRegBearDiv = input.color(color.red, "Reg. Bearish Div Color", group="Divergence Colors")
color colHidBullDiv = input.color(color.teal, "Hid. Bullish Div Color", group="Divergence Colors")
color colHidBearDiv = input.color(color.orange, "Hid. Bearish Div Color", group="Divergence Colors")

int safeMaxLen      = math.max(maxLen, minLen)   // FIX: Min Length > Max Length durumunda cakismayi onler

float change        = math.abs(close - close[erLen])
float volatility    = ta.sma(math.abs(close - close[1]), erLen) * erLen
float er            = volatility != 0 ? change / volatility : 0.0
int adaptiveLen     = math.max(minLen, math.min(safeMaxLen, int(math.round(safeMaxLen - er * (safeMaxLen - minLen)))))

float highestHigh   = ta.highest(high, adaptiveLen)
float lowestLow     = ta.lowest(low, adaptiveLen)
float stochRng      = highestHigh - lowestLow
float rawStoch      = stochRng != 0 ? ((close - lowestLow) / stochRng) * 100 : 50.0
float stochK        = ta.sma(rawStoch, smoothK)
float stochD        = ta.sma(stochK, smoothD)   // FIX: input previously calculated but never used is now actually used

float stochScaled   = math.max(math.min((stochK - 50) / 50, 0.998), -0.998)
float fisherStoch   = 0.5 * math.log((1 + stochScaled) / (1 - stochScaled))

float meanZ         = ta.sma(fisherStoch, zLen)
float stdDevZ       = ta.stdev(fisherStoch, zLen)
float zStochK       = stdDevZ != 0 ? (fisherStoch - meanZ) / stdDevZ : 0.0

float trendEma      = ta.ema(close, trendEmaLen)
bool bullTrendOK    = not useTrendFilter or close > trendEma
bool bearTrendOK    = not useTrendFilter or close < trendEma

bool kdBullOK        = stochK > stochD
bool kdBearOK        = stochK < stochD

float oscPl = ta.pivotlow(zStochK, oscPivotBars, oscPivotBars)
float oscPh = ta.pivothigh(zStochK, oscPivotBars, oscPivotBars)

var int lastValidOscLowBar  = na
var int lastValidOscHighBar = na

if not na(oscPl) and oscPl < osLevel and barstate.isconfirmed
    lastValidOscLowBar := bar_index - oscPivotBars

if not na(oscPh) and oscPh > obLevel and barstate.isconfirmed
    lastValidOscHighBar := bar_index - oscPivotBars

float pricePl = ta.pivotlow(low, pricePivotL, pricePivotR)
float pricePh = ta.pivothigh(high, pricePivotL, pricePivotR)

var int lastFiredBullBar = na
var int lastFiredBearBar = na

bool leadBullSignal = false
bool leadBearSignal = false

int priceLowBar  = bar_index - pricePivotR
int priceHighBar = bar_index - pricePivotR

if not na(pricePl) and not na(lastValidOscLowBar) and barstate.isconfirmed and bu

Показано первые 50% кода (символов: 8474)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
847,40₽ ≈ $10.36