Soft
September 9

Индикатор  WilliamsR+Divergence

Подробное описание и принцип работы индикатора.

К стандартному индикатору добавлены сигналы точек входа в покупку-продажу и дивергенции с точками вероятных изменений цены.

Важно.

  1. Индикатор не является указанием к действию, тк это индикатор моментума и экстремумы не являются пределами цены и точками разворота. Аналог стохастика или RSI.
  2. Лучше использовать в паре с другим индикатором, типа MACD или любым, для подтверждения.
  3. Индикатор хорошо отрабатывает по тренду! Определять движение цены и тренда лучше или любым индикатором или просто EMA200. Против тренда движение может быть очень коротким и иногда нет смысла входить в позицию. Возможны ложные сигналы.

Пример, как отрабатывают сигналы дивергенций, в паре с MACD

Настройки можно использовать по-умолчанию. Но для своих таймфреймов можно подогнать период на графике истории. Период стандартный 14-35(в дефолте у Williams стоит 14, но я ставлю 34 или 21. Линии в пределах -80-90 и -10-20. Настройки определения Дивергенций стоят 5 периодов вправо и влево и максимальный 30. Можно поменять( уже в самом скрипте а не в настройках) на 5-10 и макс 20-100

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Only
//@version=5
indicator("Williams oscillator + divergence", shorttitle="W%R osc+divergence", overlay=false)

// Input settings
Length = input.int(34, title="W Length", minval=1)
obLevel = input.int(-20, title="OB Level", minval=-100, maxval=0)
osLevel = input.int(-80, title="OS Level", minval=-100, maxval=0)

hh = ta.highest(high, Length)
ll = ta.lowest(low, Length)
wr = -100 * (hh - close) / (hh - ll)

// Plot
plot(wr, title="W%R+", color=#ba68c8, linewidth=1)
hline(obLevel, "OB Level", color=#6b6b6b)
hline(osLevel, "OS Level", color=#6b6b6b)

// Generate Buy and Sell signals
buySignal = ta.crossover(wr, osLevel)
sellSignal = ta.crossunder(wr, obLevel)

// Plot Buy and Sell signals on the chart
plotshape(
     buySignal,
     style=shape.triangleup,
	 location=location.bottom,
     color=#02d437,
     title="Buy Signal")
plotshape(
     sellSignal,
     style=shape.triangledown,
	 location=location.top,
     color=#df0000,
     title="Sell Signal")

level_ob = obLevel
level_obwr = wr > level_ob ? wr : level_ob

level_os = osLevel
level_oswr = wr < level_os ? wr : level_os

p1 = plot(level_ob, display=display.none)
p2 = plot(level_obwr, display=display.none)

p3 = plot(level_os, display=display.none)
p4 = plot(level_oswr, display=display.none)

fill(p1, p2, color=#ff181841, title='OverBought')
fill(p3, p4, color=#00bd0641, title='OverSold')

//-------------------------------------------------
// Divergence
Right = 5
Left = 5
rangeUpper = 30
rangeLower = 5
bearColor = color.red
bullColor = color.green
textColor = color.white
noneColor = color.new(color.white, 100)

plFound = na(ta.pivotlow(wr, Left, Right)) ? false : true
phFound = na(ta.pivothigh(wr, Left, Right)) ? false : true
_inRange(cond) =>
	bars = ta.barssince(cond == true)
	rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Regular Bullish
// Higher Low

wrHL = wr[Right] > ta.valuewhen(plFound, wr[Right], 1) and _inRange(plFound[1])

// Price: Lower Low

priceLL = low[Right] < ta.valuewhen(plFound, low[Right], 1)
bullCondAlert = priceLL and wrHL and plFound
bullCond = bullCondAlert

plot(
     plFound ? wr[Right] : na,
     offset=-Right,
     title="Regular Bullish",
     linewidth=2,
     color=(bullCond ? bullColor : noneColor),
	 display = display.pane
     )

plotshape(
	 bullCond ? wr[Right] : na,
	 offset=-Right,
	 title="Regular Bullish Label",
	 text="D",
	 style=shape.triangleup,
	 size=size.tiny,
	 location=location.bottom,
     color=#02d437,
	 textcolor=#fbff0c
	 )

//------------------------------------------------------------------------------
// Regular Bearish
// Lower High

wrLH = wr[Right] < ta.valuewhen(phFound, wr[Right], 1) and _inRange(phFound[1])

// Price: Higher High

priceHH = high[Right] > ta.valuewhen(phFound, high[Right], 1)

bearCondAlert = priceHH and wrLH and phFound
bearCond = bearCondAlert

plot(
	 phFound ? wr[Right] : na,
	 offset=-Right,
	 title="Regular Bearish",
	 linewidth=2,
	 color=(bearCond ? bearColor : noneColor),
	 display = display.pane
	 )

plotshape(
	 bearCond ? wr[Right] : na,
	 offset=-Right,
	 title="Regular Bearish Label",
	 text="D",
	 style=shape.triangledown,
	 size=size.tiny,
	 location=location.top,
     color=#df0000,
	 textcolor=#fbff0c
	 )