NexusFi: Find Your Edge


Home Menu

 





Divergence Indicator


Discussion in ThinkOrSwim

Updated
    1. trending_up 2,467 views
    2. thumb_up 1 thanks given
    3. group 2 followers
    1. forum 3 posts
    2. attach_file 2 attachments




 
Search this Thread

Divergence Indicator

  #1 (permalink)
ChrisW07
West palm beach Florida/ Palm Beach
 
Posts: 3 since Mar 2021
Thanks Given: 1
Thanks Received: 0

Could really use some help on converting an Indicator from Trading View to Think or swim.
The indicator uses many other indicators ( Stoch, Mac D, RSI, Momentum...) to identify divergences and plots them on the chart.
I like this indicator as it makes finding shorts/longs easier when browsing through the watchlist and gives nice entry points.


The code is and screenshots are attached.

study("Divergence for many indicator v3", overlay=true, max_bars_back = 4000)
lb = input(5, title="Left Bars", minval=1)
rb = input(5, title="Right Bars", minval=1)
showhidden = input(false, title = "Show Hidden Divergences")
chcut = input(false, title = "Check Cut-Through in indicators !")
shownum = input(true, title="Show Divergence Number")
showindis = input(false, title="Show Indicator Names")
showpivot = input(false, title="Show Pivot Points")
chwidth = input(true, title = "Change Width by Number of Divergence")
showlimit = input(1, title="Minimum Number of Divergence", minval = 1, maxval = 11)
calcmacd = input(true, title="MACD")
calcmacda = input(true, title="MACD Histogram")
calcrsi = input(true, title="RSI")
calcstoc = input(true, title="Stochastic")
calccci = input(true, title="CCI")
calcmom = input(true, title="Momentum")
calcobv = input(true, title="OBV")
calcdi = input(true, title="Diosc")
calcvwmacd = input(true, title="VWmacd")
calccmf = input(true, title="Chaikin Money Flow")
calcmfi = input(true, title="Money Flow Index")

// RSI
rsi = rsi(close, 14)
// MACD
[macd, signal, deltamacd] = macd(close, 12, 26, 9)
// Momentum
moment = mom(close, 10)
// CCI
cci = cci(close, 10)
// OBV

Obv = obv // cum(change(close) > 0 ? volume : change(close) < 0 ? -volume : 0 * volume)
// Stoch
stk = sma(stoch(close, high, low, 14), 3)
// DIOSC
DI = change(high) - (-change(low))
trur = rma(tr, 14)
diosc = fixnan(100 * rma(DI, 14) / trur)
// volume weighted macd
maFast = vwma(close, 12)
maSlow = vwma(close, 26)
vwmacd = maFast - maSlow
// Chaikin money flow
Cmfm = ((close-low) - (high-close)) / (high - low)
Cmfv = Cmfm * volume
cmf = sma(Cmfv, 21) / sma(volume,21)
// Moneyt Flow Index
Mfi = mfi(close, 14)

float top = na
float bot = na
top := pivothigh(lb, rb)
bot := pivotlow(lb, rb)

plotshape(top and showpivot, text="[PH]", style=shape.labeldown, color=color.white, textcolor=color.black, location=location.abovebar, transp=0, offset = -rb)
plotshape(bot and showpivot, text="[PL]", style=shape.labeldown, color=color.white, textcolor=color.black, location=location.belowbar, transp=0, offset = -rb)

topc = 0, botc = 0
topc := top ? lb : nz(topc[1]) + 1
botc := bot ? lb : nz(botc[1]) + 1

// Negative Divergence or Hidden Positive Divergence
newtop = pivothigh(lb, 0) // check only left side
emptyh = true
if not na(newtop) and ((newtop > high[topc] and not showhidden) or (newtop < high[topc] and showhidden)) // there must not close price higher than the line between last PH and current high
diff = (newtop - high[topc]) / topc
hline = newtop - diff // virtual line to check there is no close price higher than it
for x = 1 to topc -1
if close[x] > hline
emptyh := false
break
hline := hline - diff
else
emptyh := false

// check cut-through in indicators
nocut1(indi, len)=>
_ret = true
diff = (indi - nz(indi[len])) / len
ln = indi - diff
for x = 1 to len -1
if nz(indi[x]) > ln
_ret := false
break
ln := ln - diff
_ret

rsiok = nocut1(rsi, topc)
macdok = nocut1(macd, topc)
deltamacdok = nocut1(deltamacd, topc)
momentok = nocut1(moment, topc)
cciok = nocut1(cci, topc)
obvok = nocut1(obv, topc)
stkok = nocut1(stk, topc)
dioscok = nocut1(diosc, topc)
vwmacdok = nocut1(vwmacd, topc)
cmfok = nocut1(cmf, topc)
mfiok = nocut1(Mfi, topc)

negdivergence = 0
negdivtxt = ""
if emptyh and not na(newtop) and not showhidden
if calcrsi and rsi[topc] > rsi and (not chcut or rsiok)
negdivergence := negdivergence + 1
negdivtxt := "RSI\n"
if calcmacd and macd[topc] > macd and (not chcut or macdok)
negdivergence := negdivergence + 1
negdivtxt := negdivtxt + "MACD\n"
if calcmacda and deltamacd[topc] > deltamacd and (not chcut or deltamacdok)
negdivergence := negdivergence + 1
negdivtxt := negdivtxt + "MACD Hist\n"
if calcmom and moment[topc] > moment and (not chcut or momentok)
negdivergence := negdivergence + 1
negdivtxt := negdivtxt + "Momentum\n"
if calccci and cci[topc] > cci and (not chcut or cciok)
negdivergence := negdivergence + 1
negdivtxt := negdivtxt + "CCI\n"
if calcobv and Obv[topc] > Obv and (not chcut or obvok)
negdivergence := negdivergence + 1
negdivtxt := negdivtxt + "OBV\n"
if calcstoc and stk[topc] > stk and (not chcut or stkok)
negdivergence := negdivergence + 1
negdivtxt := negdivtxt + "Stoch\n"
if calcdi and diosc[topc] > diosc and (not chcut or dioscok)
negdivergence := negdivergence + 1
negdivtxt := negdivtxt + "Diosc\n"
if calcvwmacd and vwmacd[topc] > vwmacd and (not chcut or vwmacdok)
negdivergence := negdivergence + 1
negdivtxt := negdivtxt + "VWMacd\n"
if calccmf and cmf[topc] > cmf and (not chcut or cmfok)
negdivergence := negdivergence + 1
negdivtxt := negdivtxt + "CMF\n"
if calcmfi and Mfi[topc] > Mfi and (not chcut or mfiok)
negdivergence := negdivergence + 1
negdivtxt := negdivtxt + "MFI\n"

// Hidden divergence
hposdivergence = 0
hposdivtxt = ""
if emptyh and not na(newtop) and showhidden
if calcrsi and rsi[topc] < rsi and (not chcut or rsiok)
hposdivergence := hposdivergence + 1
hposdivtxt := "RSI\n"
if calcmacd and macd[topc] < macd and (not chcut or macdok)
hposdivergence := hposdivergence + 1
hposdivtxt := hposdivtxt + "MACD\n"
if calcmacda and deltamacd[topc] < deltamacd and (not chcut or deltamacdok)
hposdivergence := hposdivergence + 1
hposdivtxt := hposdivtxt + "MACD Hist\n"
if calcmom and moment[topc] < moment and (not chcut or momentok)
hposdivergence := hposdivergence + 1
hposdivtxt := hposdivtxt + "Momentum\n"
if calccci and cci[topc] < cci and (not chcut or cciok)
hposdivergence := hposdivergence + 1
hposdivtxt := hposdivtxt + "CCI\n"
if calcobv and Obv[topc] < Obv and (not chcut or obvok)
hposdivergence := hposdivergence + 1
hposdivtxt := hposdivtxt + "OBV\n"
if calcstoc and stk[topc] < stk and (not chcut or stkok)
hposdivergence := hposdivergence + 1
hposdivtxt := hposdivtxt + "Stoch\n"
if calcdi and diosc[topc] < diosc and (not chcut or dioscok)
hposdivergence := hposdivergence + 1
hposdivtxt := hposdivtxt + "Diosc\n"
if calcvwmacd and vwmacd[topc] < vwmacd and (not chcut or vwmacdok)
hposdivergence := hposdivergence + 1
hposdivtxt := hposdivtxt + "VWMacd\n"
if calccmf and cmf[topc] < cmf and (not chcut or cmfok)
hposdivergence := hposdivergence + 1
hposdivtxt := hposdivtxt + "CMF\n"
if calcmfi and Mfi[topc] < Mfi and (not chcut or mfiok)
hposdivergence := hposdivergence + 1
hposdivtxt := hposdivtxt + "MFI\n"

newareah = false
newareah := top ? false : nz(newareah[1], false)
if negdivergence >= showlimit or hposdivergence >= showlimit
var line divlh = na
var label labh = na
if newareah // we remove old line until It reaches new pivot point (like animation
line.delete(divlh)
label.delete(labh)
newwd = not showhidden ?
(not chwidth ? 2 :
negdivergence <= 2 ? 2 :
negdivergence <= 5 ? 3 :
negdivergence <= 8 ? 4 : 5) :
(not chwidth ? 2 :
hposdivergence <= 2 ? 2 :
hposdivergence <= 5 ? 3 :
hposdivergence <= 8 ? 4 : 5)

divlh := line.new(bar_index - topc, high[topc], bar_index, high, color = color.red, width = newwd)
if shownum or showindis
txt = showindis ? showhidden ? hposdivtxt : negdivtxt : ""
txt := txt + (shownum ? showhidden ? tostring(hposdivergence) : tostring(negdivergence) : "")
labh := label.new(bar_index, na, text=txt, color= showhidden ? color.lime : color.red, textcolor = showhidden ? color.black : color.white, style= showhidden ? label.style_labelup : label.style_labeldown, yloc=yloc.abovebar)
newareah := true

// Positive or Hidden Negative Divergence
newbot = pivotlow(lb, 0) // check only left side
emptyl = true
if not na(newbot) and ((newbot < low[botc] and not showhidden) or (newbot > low[botc] and showhidden)) // there must not close price lower than the line between last PL and current low
diff = (newbot - low[botc]) / botc
lline = newbot - diff // virtual line to check there is no close price lower than it
for x = 1 to botc -1
if close[x] < lline
emptyl := false
break
lline := lline - diff
else
emptyl := false

// check cut-through in indicators
nocut2(indi, len)=>
_ret = true
diff = (indi - nz(indi[len])) / len
ln = indi - diff
for x = 1 to len -1
if nz(indi[x]) < ln
_ret := false
break
ln := ln - diff
_ret

rsiok := nocut2(rsi, botc)
macdok := nocut2(macd, botc)
deltamacdok := nocut2(deltamacd, botc)
momentok := nocut2(moment, botc)
cciok := nocut2(cci, botc)
obvok := nocut2(obv, botc)
stkok := nocut2(stk, botc)
dioscok := nocut2(diosc, botc)
vwmacdok := nocut2(vwmacd, botc)
cmfok := nocut2(cmf, botc)
mfiok := nocut2(Mfi, botc)

posdivergence = 0
posdivtxt = ""
if emptyl and not na(newbot) and not showhidden
if calcrsi and rsi[botc] < rsi and (not chcut or rsiok)
posdivergence := 1
posdivtxt := "RSI\n"
if calcmacd and macd[botc] < macd and (not chcut or macdok)
posdivergence := posdivergence + 1
posdivtxt := posdivtxt + "MACD\n"
if calcmacda and deltamacd[botc] < deltamacd and (not chcut or deltamacdok)
posdivergence := posdivergence + 1
posdivtxt := posdivtxt + "MACD Hist\n"
if calcmom and moment[botc] < moment and (not chcut or momentok)
posdivergence := posdivergence + 1
posdivtxt := posdivtxt + "Momentum\n"
if calccci and cci[botc] < cci and (not chcut or cciok)
posdivergence := posdivergence + 1
posdivtxt := posdivtxt + "CCI\n"
if calcobv and Obv[botc] < Obv and (not chcut or obvok)
posdivergence := posdivergence + 1
posdivtxt := posdivtxt + "OBV\n"
if calcstoc and stk[botc] < stk and (not chcut or stkok)
posdivergence := posdivergence + 1
posdivtxt := posdivtxt + "Stoch\n"
if calcdi and diosc[botc] < diosc and (not chcut or dioscok)
posdivergence := posdivergence + 1
posdivtxt := posdivtxt + "Diosc\n"
if calcvwmacd and vwmacd[botc] < vwmacd and (not chcut or vwmacdok)
posdivergence := posdivergence + 1
posdivtxt := posdivtxt + "VWMacd\n"
if calccmf and cmf[botc] < cmf and (not chcut or cmfok)
posdivergence := posdivergence + 1
posdivtxt := posdivtxt + "CMF\n"
if calcmfi and Mfi[botc] < Mfi and (not chcut or mfiok)
posdivergence := posdivergence + 1
posdivtxt := posdivtxt + "MFI\n"

// Hidden Divergences
hnegdivergence = 0
hnegdivtxt = ""
if emptyl and not na(newbot) and showhidden
if calcrsi and rsi[botc] > rsi and (not chcut or rsiok)
hnegdivergence := 1
hnegdivtxt := "RSI\n"
if calcmacd and macd[botc] > macd and (not chcut or macdok)
hnegdivergence := hnegdivergence + 1
hnegdivtxt := hnegdivtxt + "MACD\n"
if calcmacda and deltamacd[botc] < deltamacd and (not chcut or deltamacdok)
hnegdivergence := hnegdivergence + 1
hnegdivtxt := hnegdivtxt + "MACD Hist\n"
if calcmom and moment[botc] > moment and (not chcut or momentok)
hnegdivergence := hnegdivergence + 1
hnegdivtxt := hnegdivtxt + "Momentum\n"
if calccci and cci[botc] > cci and (not chcut or cciok)
hnegdivergence := hnegdivergence + 1
hnegdivtxt := hnegdivtxt + "CCI\n"
if calcobv and Obv[botc] > Obv and (not chcut or obvok)
hnegdivergence := hnegdivergence + 1
hnegdivtxt := hnegdivtxt + "OBV\n"
if calcstoc and stk[botc] > stk and (not chcut or stkok)
hnegdivergence := hnegdivergence + 1
hnegdivtxt := hnegdivtxt + "Stoch\n"
if calcdi and diosc[botc] > diosc and (not chcut or dioscok)
hnegdivergence := hnegdivergence + 1
hnegdivtxt := hnegdivtxt + "Diosc\n"
if calcvwmacd and vwmacd[botc] > vwmacd and (not chcut or vwmacdok)
hnegdivergence := hnegdivergence + 1
hnegdivtxt := hnegdivtxt + "VWMacd\n"
if calccmf and cmf[botc] > cmf and (not chcut or cmfok)
hnegdivergence := hnegdivergence + 1
hnegdivtxt := hnegdivtxt + "CMF\n"
if calcmfi and Mfi[botc] > Mfi and (not chcut or mfiok)
hnegdivergence := hnegdivergence + 1
hnegdivtxt := hnegdivtxt + "MFI\n"

newareal = false
newareal := bot ? false : nz(newareal[1], false)
if posdivergence >= showlimit or hnegdivergence >= showlimit
var line divl = na
var label lab = na
if newareal // we remove old line until It reaches new pivot point (like animation
line.delete(divl)
label.delete(lab)
newwd = not showhidden ?
(not chwidth ? 2 :
posdivergence <= 2 ? 2 :
posdivergence <= 5 ? 3 :
posdivergence <= 8 ? 4 : 5) :
(not chwidth ? 2 :
hnegdivergence <= 2 ? 2 :
hnegdivergence <= 5 ? 3 :
hnegdivergence <= 8 ? 4 : 5)

divl := line.new(bar_index - botc, low[botc], bar_index, low, color = color.lime, width = newwd)
if shownum or showindis
txt = showindis ? showhidden ? hnegdivtxt : posdivtxt : ""
txt := txt + (shownum ? showhidden ? tostring(hnegdivergence) : tostring(posdivergence) : "")
lab := label.new(bar_index, na, text=txt, color= showhidden ? color.olive : color.lime, textcolor = showhidden ? color.white : color.black, style = showhidden ? label.style_labeldown : label.style_labelup, yloc=yloc.belowbar)
newareal := true

alertcondition(posdivergence >= showlimit and not showhidden, title='Positive Divergence', message='Positive Divergence')
alertcondition(negdivergence >= showlimit and not showhidden, title='Negative Divergence', message='Negative Divergence')
alertcondition(hposdivergence >= showlimit and showhidden, title='Positive Hidden Divergence', message='Positive Hidden Divergence')
alertcondition(hnegdivergence >= showlimit and showhidden, title='Negative Hidden Divergence', message='Negative Hidden Divergence')

Attached Thumbnails
Click image for larger version

Name:	Divergence 1.PNG
Views:	204
Size:	23.0 KB
ID:	310428   Click image for larger version

Name:	Divergence 2.PNG
Views:	257
Size:	53.2 KB
ID:	310429  
Reply With Quote

Can you help answer these questions
from other members on NexusFi?
The space time continuum and the dynamics of a financial …
Emini and Emicro Index
Deepmoney LLM
Elite Quantitative GenAI/LLM
Better Renko Gaps
The Elite Circle
ZombieSqueeze
Platforms and Indicators
NexusFi Journal Challenge - April 2024
Feedback and Announcements
 
Best Threads (Most Thanked)
in the last 7 days on NexusFi
Get funded firms 2023/2024 - Any recommendations or word …
61 thanks
Funded Trader platforms
39 thanks
NexusFi site changelog and issues/problem reporting
26 thanks
GFIs1 1 DAX trade per day journal
18 thanks
The Program
18 thanks
  #2 (permalink)
ChrisW07
West palm beach Florida/ Palm Beach
 
Posts: 3 since Mar 2021
Thanks Given: 1
Thanks Received: 0

I am willing to pay anyone willing to help on this.

Reply With Quote
  #3 (permalink)
 Tradarr 
Atlanta Ga. USA
 
Experience: Intermediate
Platform: NT8,ThinkorSwim,
Trading: Grains
Posts: 336 since Mar 2017
Thanks Given: 85
Thanks Received: 87



ChrisW07 View Post
I am willing to pay anyone willing to help on this.

If you're using TOS, then just write Dvg scans using LRS (linear regression slope).
Ex. LRS Close < 0 and LRS MACD > 0 and MACD value < 0. that would be positive dvg. Writing dvg alerts using TOS scan tab is very easy and works for most indies using filters of 0 or 50 for indie values.

Sent using the NexusFi mobile app

Reply With Quote
Thanked by:
  #4 (permalink)
ChrisW07
West palm beach Florida/ Palm Beach
 
Posts: 3 since Mar 2021
Thanks Given: 1
Thanks Received: 0

Thank you for the information and I will work on that. I am very uneducated on complex scans and getting familiar with TOS over Trading view. I have not made a deff decision to switch from TV to TOS but would like to give TOS a chance. I also am very uneducated on coding and wasn't sure if it is as easy as reading a book in English and rewriting it in Spanish. If you or anyone else could recode this indicator so I could use it in TOS, I would greatly appreciate it and again would pay for your time.

Reply With Quote




Last Updated on March 10, 2021


© 2024 NexusFi™, s.a., All Rights Reserved.
Av Ricardo J. Alfaro, Century Tower, Panama City, Panama, Ph: +507 833-9432 (Panama and Intl), +1 888-312-3001 (USA and Canada)
All information is for educational use only and is not investment advice. There is a substantial risk of loss in trading commodity futures, stocks, options and foreign exchange products. Past performance is not indicative of future results.
About Us - Contact Us - Site Rules, Acceptable Use, and Terms and Conditions - Privacy Policy - Downloads - Top
no new posts