Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
67 views35 pages

RSI Table

This document contains the source code for an indicator and trading strategy in Pine Script. It includes inputs for settings like entry buffers, trade management, moving averages, and a profit/loss table. Variables and functions are defined for calculating standard deviation levels on a chart, identifying entry and exit signals, and positioning the profit/loss table on the chart. Plotted lines and labels will display the standard deviation levels and signals from the trading strategy.

Uploaded by

garbage Dump
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
67 views35 pages

RSI Table

This document contains the source code for an indicator and trading strategy in Pine Script. It includes inputs for settings like entry buffers, trade management, moving averages, and a profit/loss table. Variables and functions are defined for calculating standard deviation levels on a chart, identifying entry and exit signals, and positioning the profit/loss table on the chart. Plotted lines and labels will display the standard deviation levels and signals from the trading strategy.

Uploaded by

garbage Dump
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 35

// This source code is subject to the terms of the Mozilla Public License 2.

0 at
https://mozilla.org/MPL/2.0/

// © Jib1979

//@version=5

indicator("Binocular", overlay=true, max_bars_back = 5000)

//Binocular

//Settlement

// === INPUTS

useDaily = input(true, title='Use Daily Data to Calculate HV (default), otherwise chart TF')

LookBack = input.int(21, minval=1)

annual = input.int(252, minval=1)

DaystoExpire_ = input.int(defval=0, minval=0, title='Calender Days to Expiry (0=Auto, default)')

src_111 = input(close, title='Settlement Source (close=default)')

sLength_ = input.int(1, minval=1, title='Settlement Volume Weighted Average Length (1=Use end of
day)')

//

showset = input(title="Settlement", defval=true, group='Settlement')

stddev1 = input(true, title='Display 1x Standard Deviation Levels', group='Settlement')

stddev2 = input(false, title='Display 2x Standard Deviation Levels',group='Settlement')

stddev3 = input(false, title='Display 3x Standard Deviation Levels',group='Settlement')

pivotNow = input(false, title='Display Only Todays Deviation Levels',group='Settlement')

showstd1 = input(title="Dev1 Labels", defval=true, group='Settlement')

showstd2 = input(title="Dev2 Labels", defval=false,group='Settlement')

showstd3 = input(title="Dev3 Labels", defval=false, group='Settlement')

//

// === /INPUTs

dodgerblue = #1E90FF
//

// Test for new Daily Session or start of new month for Daily.

sLength = timeframe.isintraday ? sLength_ : 1

nstart = request.security(syminfo.tickerid, 'D', bar_index, barmerge.gaps_off,


barmerge.lookahead_on)

start1 = request.security(syminfo.tickerid, 'D', time, barmerge.gaps_off, barmerge.lookahead_on)

first = request.security(syminfo.tickerid, 'D', ta.valuewhen(barstate.islast, time, 0),


barmerge.gaps_off, barmerge.lookahead_on)

nohist = nstart <= math.max(sLength, LookBack) + 1

change_1 = ta.change(start1)

newDay = nohist ? false : timeframe.isintraday ? change_1 : dayofmonth(time) <


dayofmonth(time[1])

// Calculate Annualised Volatility

hv = 0.0

stdev_1 = ta.stdev(math.log(src_111 / src_111[1]), LookBack)

security_1 = request.security(syminfo.tickerid, 'D', stdev_1 * math.sqrt(annual), barmerge.gaps_off,


barmerge.lookahead_on)

stdev_2 = ta.stdev(math.log(src_111 / src_111[1]), LookBack)

hv_ = useDaily ? security_1 : stdev_2 * math.sqrt(annual)

hv := newDay ? hv_ : nz(hv[1], hv_)

hinow = high

hinow := newDay ? high : high > hinow[1] ? high : hinow[1]

lonow = low

lonow := newDay ? low : low < lonow[1] ? low : lonow[1]

prevhi = ta.valuewhen(newDay, hinow[1], 0)

prevlo = ta.valuewhen(newDay, lonow[1], 0)


// get the Daily Settlement

valuewhen_1 = ta.valuewhen(start1[1] <= time, src_111, 0)

vwma_1 = ta.vwma(src_111[1], sLength)

settlement = sLength == 1 ? valuewhen_1 : vwma_1

settlement := newDay ? settlement : nz(settlement[1], open[1])

firstDay = dayofmonth(start1) == dayofmonth(first) and month(start1) == month(first) and


year(start1) == year(first)

stdhv = 0.0

DaystoExpire = DaystoExpire_ == 0 ? timeframe.isintraday ? useDaily ? 1 : math.min(annual, 1440 /


timeframe.multiplier) : LookBack : DaystoExpire_

stdhv := newDay ? settlement * hv * math.sqrt(DaystoExpire / annual) : nz(stdhv[1])

// calculate StdDev lines ratios.

stdhv05 = stdhv * 0.5

stdhv07 = stdhv * 0.7

stdhv1 = stdhv

Stdhv05u = settlement + stdhv05

Stdhv05d = settlement - stdhv05

Stdhv07u = settlement + stdhv07

Stdhv07d = settlement - stdhv07

Stdhv1u = settlement + stdhv1

Stdhv1d = settlement - stdhv1

// Plot the StdDev Levels for all Days.

SettleM = plot(not nohist and showset and (not pivotNow or firstDay) and not newDay ? settlement :
na, color=color.new(#ec186d, 0), title='Settlement', linewidth=2, style=plot.style_linebr)
stdhv05u = plot(not nohist and stddev1 and (not pivotNow or firstDay) and not newDay ? settlement
+ stdhv05 : na, color=color.new(color.orange, 20), title='+0.5 SD', linewidth=1,
style=plot.style_linebr)

stdhv05d = plot(not nohist and stddev1 and (not pivotNow or firstDay) and not newDay ? settlement
- stdhv05 : na, color=color.new(color.orange, 20), title='-0.5 SD', linewidth=1, style=plot.style_linebr)

stdhv07u = plot(not nohist and stddev1 and (not pivotNow or firstDay) and not newDay ? settlement
+ stdhv07 : na, color=color.new(color.red, 20), title='+0.7 SD', linewidth=1, style=plot.style_linebr)

stdhv07d = plot(not nohist and stddev1 and (not pivotNow or firstDay) and not newDay ? settlement
- stdhv07 : na, color=color.new(color.red, 20), title='-0.7 SD', linewidth=1, style=plot.style_linebr)

stdhv1u = plot(not nohist and stddev1 and (not pivotNow or firstDay) and not newDay ? settlement
+ stdhv1 : na, color=color.new(color.lime, 20), title='+1 SD', linewidth=3, style=plot.style_linebr)

stdhv1d = plot(not nohist and stddev1 and (not pivotNow or firstDay) and not newDay ? settlement -
stdhv1 : na, color=color.new(color.lime, 20), title='-1 SD', linewidth=3, style=plot.style_linebr)

//Show Settlement

if showset

settlement = label.new(start1, settlement, text='Settlement', xloc=xloc.bar_time,


textcolor=color.new(#ec186d,0), style=label.style_none)

label.delete(settlement[1])

if stddev1

if Stdhv05u

Stdhv05u = label.new(start1, Stdhv05u, text='+0.5', xloc=xloc.bar_time,


textcolor=color.new(color.orange,0), style=label.style_none)

label.delete(Stdhv05u[1])

if Stdhv05d

Stdhv05d = label.new(start1, Stdhv05d, text='-0.5', xloc=xloc.bar_time,


textcolor=color.new(color.orange,0), style=label.style_none)

label.delete(Stdhv05d[1])

if Stdhv07u

Stdhv07u = label.new(start1, Stdhv07u, text='+0.7', xloc=xloc.bar_time,


textcolor=color.new(color.red,0), style=label.style_none)

label.delete(Stdhv07u[1])

if Stdhv07d
Stdhv07d = label.new(start1, Stdhv07d, text='-0.7', xloc=xloc.bar_time,
textcolor=color.new(color.red,0), style=label.style_none)

label.delete(Stdhv07d[1])

if Stdhv1u

Stdhv1u = label.new(start1, Stdhv1u, text='+1.0', xloc=xloc.bar_time,


textcolor=color.new(color.lime,10), style=label.style_none)

label.delete(Stdhv1u[1])

if Stdhv1d

Stdhv1d = label.new(start1, Stdhv1d, text='-1.0', xloc=xloc.bar_time,


textcolor=color.new(color.lime,10), style=label.style_none)

label.delete(Stdhv1d[1])

//

//

//Buy Sell

// ======================================================================

// INPUTS

// ======================================================================

tgrp = "???????????????? TRADE SETUP ????????????????"

bfr = input.float(0.02,title = "Entry Buffer",inline = "1",group = tgrp)

tm = input.session("Last Trade", title = "", options = ["Last Trade","All Trade"],inline = "1",group =


tgrp)

eb = input.bool(true,title = "Entry",inline = "2",group = tgrp)

tb1 = input.bool(true,title = "Target 1",inline = "2",group = tgrp)

tb2 = input.bool(true,title = "Target 2",inline = "2",group = tgrp)

tb3 = input.bool(true,title = "Target 3",inline = "2",group = tgrp)

slb = input.bool(true,title = "Stop Loss",inline = "2",group = tgrp)


// ============================== VWAP ==================================

gr1 = "???????????????? VWAP ????????????????"

vwapd = input.bool(true,"",inline="1",group=gr1)

vwapw = input.bool(false,"",inline="1",group=gr1)

vwapm = input.bool(false,"",inline="1",group=gr1)

src = input.source(hlc3,title="Source",inline="1",group=gr1)

dvc = ta.vwap(close) > close ? color.new(color.fuchsia,0) : color.new(color.blue,0)

wvc = color.new(#44f513,0)

mvc = color.new(color.yellow,0)

// =============================== MA ===================================

gr2 = "???????????????? MA ????????????????"

mab1 = input.bool(false,"",inline="1",group=gr2)

mat1 = input.string(title = "", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA",
"VWMA"],inline="1", group=gr2)

mas1 = input.source(hlc3,title="",inline="1",group=gr2)

mal1 = input.int(21,title="",inline="1",group=gr2)

c1 = color.new(color.lime,0)

mab2 = input.bool(false,"",inline="2",group=gr2)

mat2 = input.string(title = "", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA",
"VWMA"],inline="2", group=gr2)

mas2 = input.source(hlc3,title="",inline="2",group=gr2)

mal2 = input.int(44,title="",inline="2",group=gr2)

c2 = color.new(color.red,0)

mab3 = input.bool(false,"",inline="3",group=gr2)

mat3 = input.string(title = "", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA",
"VWMA"],inline="3", group=gr2)

mas3 = input.source(hlc3,title="",inline="3",group=gr2)

mal3 = input.int(100,title="",inline="3",group=gr2)

c3 = color.new(color.blue,0)
// ============================= TABLE ==================================

tab = "???????????????? TABLE ????????????????"

plt = input.bool(true,title="P/L Table",inline="1",group=tab)

TablePos = input.string(title="Table Location", defval="Bottom Right", options=["Top Right", "Middle


Right", "Bottom Right",

"Top Center", "Middle Center", "Bottom Center", "Top Left", "Middle Left", "Bottom Left"],
inline="1", group=tab)

size = input.string(title="Table Size", defval="Auto", options=["Auto", "Huge", "Large", "Normal",


"Small", "Tiny"], inline="1", group=tab)

tbgc = color.new(color.black,0)

brc = color.new(color.white,0)

tw = input.int(2,"",inline="1",group=tab)

// =============== EXPORT FUNCTION


==================================================================================
=======

tablelocation(string TablePos,string size) =>

_TablePos= TablePos== "Top Right" ? position.top_right:

TablePos== "Middle Right" ? position.middle_right:

TablePos== "Bottom Right" ? position.bottom_right:

TablePos== "Top Center" ? position.top_center:

TablePos== "Middle Center"? position.middle_center:

TablePos== "Bottom Center"? position.bottom_center:

TablePos== "Top Left" ? position.top_left:

TablePos== "Middle Left" ? position.middle_left:position.bottom_left


_size= size == "Auto" ? size.auto: size == "Huge" ? size.huge:

size == "Large"? size.large: size == "Normal"? size.normal:

size == "Small"? size.small: size.tiny

[_TablePos,_size]

DefineLabel(bool but,int pos,int index,float Price,color color_,string text_)=>

var label _offsetLabel=na

line li = na

label msg = na

if barstate.islast and index > 0 and pos != 0 and but

li := line.new(index, Price, bar_index+5, Price, extend=extend.right,color=color_)

_offsetLabel := label.new(bar_index + 10, Price,text = text_+" : "+


str.tostring(int(math.round(Price,2))),color=color_,textcolor=color_,style=label.style_none)

label.delete(_offsetLabel[1])

line.delete(li[1])

entry(bool plt,table testTable,string _size,int bs,int pos,int index,float Price,float sl) =>

label le = na

line li = na

if barstate.islast and pos == 0

if bs == 1

txt = "BUY ABOVE : " + str.tostring(int(math.round(Price,2)))

li := line.new(index, Price, bar_index+5, Price,


extend=extend.right,color=color.new(color.lime,0),style=line.style_dashed)

le := label.new(bar_index + 10, Price, text= txt,


style=label.style_none,textcolor=color.new(color.lime,0),textalign=text.align_left)

if bs == -1

txt = "SELL BELLOW : " + str.tostring(int(math.round(Price,2)))

li := line.new(index, Price, bar_index+5, Price,


extend=extend.right,color=color.new(color.red,0),style=line.style_dashed)
le := label.new(bar_index + 10, Price, text= txt,
style=label.style_none,textcolor=color.new(color.red,0),textalign=text.align_left)

label.delete(le[1])

line.delete(li[1])

pl = 0.0

pl := pos == 1 ? math.max((high - Price),nz(pl[1])) : pos == -1 ? math.max((Price - low),nz(pl[1])) : 0

plp = math.round(math.abs(pl*100/Price),2)

htc = color.new(color.white,0)

btc = color.new(color.white,0)

bg = bs == 1 ? color.new(#025d06,0) : color.new(#b60000,0)

if barstate.islast and plt

table.cell(table_id = testTable, column = 0, row = 0, text =


"Entry",text_color=htc,text_size=_size)

table.cell(table_id = testTable, column = 1, row = 0, text = "SL",text_color=htc,text_size=_size)

table.cell(table_id = testTable, column = 0, row = 1, text = str.tostring(int(math.round(Price,2))),


bgcolor = bg,text_color=btc,text_size=_size)

table.cell(table_id = testTable, column = 1, row = 1, text = str.tostring(int(math.round(sl,2))),


bgcolor = bg,text_color=btc,text_size=_size)

//

//

//EMA

showema = input(title='Show EMA', defval=true)

len1 = input.int(30, minval=1, title='MA1')

len2 = input.int(35, minval=1, title='MA2')

len3 = input.int(40, minval=1, title='MA3')

len4 = input.int(45, minval=1, title='MA4')

len5 = input.int(50, minval=1, title='MA5')

len6 = input.int(60, minval=1, title='MA6')


ma1 = ta.ema(close, len1)

ma2 = ta.ema(close, len2)

ma3 = ta.ema(close, len3)

ma4 = ta.ema(close, len4)

ma5 = ta.ema(close, len5)

ma6 = ta.ema(close, len6)

plot(showema ? ma1 : na, title='MA1', color=close > ma1 ? color.new(color.green, 0) :


color.new(color.red,0))

plot(showema ? ma2 : na, title='MA2', color=close > ma2 ? color.new(color.green,0) :


color.new(color.red, 0))

plot(showema ? ma3 : na, title='MA3', color=close > ma3 ? color.new(color.green,0) :


color.new(color.red, 0))

plot(showema ? ma4 : na, title='MA4', color=close > ma4 ? color.new(color.green, 0) :


color.new(color.red,0))

plot(showema ? ma5 : na, title='MA5', color=close > ma5 ? color.new(#44f513, 0) :


color.new(#ff0000,0), linewidth=3, style=plot.style_line)

plot(showema ? ma6 : na, title='MA6', color=close > ma6 ? color.new(color.green, 0) :


color.new(color.red,0))

longCond = bool(na)

shortCond = bool(na)

longCond := ma1 > ma6 and ma2 > ma6 and ma3 > ma6 and ma4 > ma6 and ma5 > ma6

shortCond := ma1 < ma6 and ma2 < ma6 and ma3 < ma6 and ma4 < ma6 and ma5 < ma6

CondIni = 0

CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]

longCondition = longCond and CondIni[1] == -1

shortCondition = shortCond and CondIni[1] == 1

//

//Price Volume Trend


signalType = input.string(title='Signal Smoothing Type', defval='SMA', options=['EMA', 'SMA'])

signalLength = input(title='Signal Smoothing Length', defval=21)

src420 = input(title='Source', defval=close)

highlightCrossovers = input(title='Highlight Crossovers ?', defval=false)

applyFilling = input(title='Apply Ribbon Filling ?', defval=true)

signal_1 = signalType == 'EMA' ? ta.ema(ta.pvt, signalLength) : ta.sma(ta.pvt, signalLength)

//

calculation(float bfr) =>

time_limit = timestamp(2222, 1, 31, 23, 00)

display = timenow < time_limit

rsi1 = ta.rsi(close,25)

rsi2 = ta.rsi(close,55)

length = 10

mult = 2.2

useClose = true

atr = mult * ta.atr(length)

longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr

longStopPrev = nz(longStop[1], longStop)

longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop

shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr

shortStopPrev = nz(shortStop[1], shortStop)

shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop

var int dir = 1


dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir

BUY = dir == 1 and ta.pvt > signal_1 and rsi1 > rsi2

SELL = dir == -1 and ta.pvt < signal_1 and rsi1 < rsi2

var bool buy=false

var bool sell = false

var bool buy1=false

var bool sell1 = false

var float HighVal=na

var float LowVal = na

var float Stoploss=na

var float Target1 = na

var float Target2 = na

var float Target3 = na

var float Target4 = na

var index = 0

var pos = 0

var bs = 0

var en = 0.0

if display

if BUY and BUY[1]==false and buy==false

bs := 1

label.new(bar_index,close,text='',size=size.normal,color=color.new(color.green,100),yloc=yloc.below
bar,style=label.style_label_up,textcolor=color.new(color.white,100))

pos := 0

index := bar_index

buy:=true

sell:=false
sell1:=false

en := high*(1+bfr/100)

HighVal:=high*(1+bfr/100)

Stoploss:=math.min(low[1],low)

diff = (high-low[1])*2

Target1:=high+diff

Target2:=Target1+diff

Target3:=Target2+diff

Target4:=Target3+diff

if SELL and SELL[1]==false and sell==false

bs := -1

label.new(bar_index,close,text='',size=size.normal,color=color.new(color.red,100),yloc=yloc.aboveba
r,style=label.style_label_down,textcolor=color.new(color.white,100))

pos := 0

index := bar_index

sell:=true

buy:=false

buy1:=false

en := low*(1-bfr/100)

LowVal:=low*(1-bfr/100)

Stoploss:=math.max(high[1],high)

diff = (high[1]-low)*2

Target1:=low-diff

Target2:=Target1-diff

Target3:=Target2-diff

Target4:=Target3-diff

if buy and high>HighVal and buy1==false


label.new(bar_index,close,text='',size=size.tiny,color=color.new(color.green,100),yloc=yloc.belowbar
,style=label.style_triangleup,textcolor=color.new(color.white,0))

pos := 1

buy1:=true

sell1:=false

if sell and low<LowVal and sell1==false

label.new(bar_index,close,text='',size=size.tiny,color=color.new(color.red,100),yloc=yloc.abovebar,st
yle=label.style_triangledown,textcolor=color.new(color.white,0))

pos := -1

buy1:=false

sell1:=true

[bs,pos,index,en,Stoploss,Target1,Target2,Target3]

// ============== VWAP + MA Calculation


==================================================================================
=

vwapc(float src,string tf1,string tf2,string tf3) =>

time_limit = timestamp(2222, 1, 31, 23, 00)

display = timenow < time_limit

v1 = display ? ta.vwap(src, timeframe.change(tf1)) : na

v2 = display ? ta.vwap(src, timeframe.change(tf2)) : na

v3 = display ? ta.vwap(src, timeframe.change(tf3)) : na

[v1,v2,v3]
ma(float source,simple int length,string type) =>

time_limit = timestamp(2222, 1, 31, 23, 00)

display = timenow < time_limit

if display

switch type

"SMA" => ta.sma(source, length)

"EMA" => ta.ema(source, length)

"SMMA (RMA)" => ta.rma(source, length)

"WMA" => ta.wma(source, length)

"VWMA" => ta.vwma(source, length)

else

na

// ============== IMPORT FUNCTIONS


==================================================================================
==

[bs,pos,index,e,sl,t1,t2,t3] = calculation(bfr)

plot(tm == "All Trade" and eb and pos != 0 ? e : na, title = "Entry", color=color.new(#019a66,0), style
= plot.style_linebr)

plot(tm == "All Trade" and tb1 and pos != 0 ? t1 : na, title = "TG 1",color=color.new(color.lime,0),
style = plot.style_linebr)

plot(tm == "All Trade" and tb2 and pos != 0 ? t2 : na, title = "TG 2",color=color.new(color.lime,0),
style = plot.style_linebr)

plot(tm == "All Trade" and tb3 and pos != 0 ? t3 : na, title = "TG 3",color=color.new(color.lime,0),
style = plot.style_linebr)

plot(tm == "All Trade" and slb and pos != 0 ? sl : na, title = "SL",color=color.new(color.red,0), style =
plot.style_linebr)

DefineLabel(eb,pos,index,e,color.new(#019a66,0),'EN')

DefineLabel(slb,pos,index,sl,color.new(color.red,0),'SL')

DefineLabel(tb1,pos,index,t1,color.new(color.green,0),'TG1')
DefineLabel(tb2,pos,index,t2,color.new(color.green,0),'TG2')

DefineLabel(tb3,pos,index,t3,color.new(color.green,0),'TG3')

[_TablePos,_size] = tablelocation(TablePos,size)

var testTable = table.new(_TablePos, 3, 2, bgcolor = tbgc, frame_color = brc, frame_width = tw,


border_color = brc, border_width = tw)

entry(plt,testTable,_size,bs,pos,index,e,sl)

//
==================================================================================
======================================

[v1,v2,v3] = vwapc(src,"D","W","M")

plot(vwapd?v1:na, title = "Daily VWAP", color=dvc, linewidth=2)

plot(vwapw?v2:na, title = "Weekly VWAP", color=wvc, linewidth=2)

plot(vwapm?v3:na, title = "Monthly VWAP", color=mvc, linewidth=2)

plot(mab1 ? ma(mas1,mal1,mat1) : na, title = "MA 1", color=c1)

plot(mab2 ? ma(mas2,mal2,mat2) : na, title = "MA 2", color=c2)

plot(mab3 ? ma(mas3,mal3,mat3) : na, title = "MA 3", color=c3)

//
==================================================================================
======================================

signal() =>

rsi1 = ta.rsi(close,25)

rsi2 = ta.rsi(close,55)
length = 10

mult = 2.2

useClose = true

atr = mult * ta.atr(length)

longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr

longStopPrev = nz(longStop[1], longStop)

longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop

shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr

shortStopPrev = nz(shortStop[1], shortStop)

shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop

var int dir = 1

dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir

BUY = dir == 1 and ta.pvt > signal_1

SELL = dir == -1 and ta.pvt < signal_1

[BUY,SELL]

mtf_t = input.bool(true,title="P/L Table",inline="1", group = "MTF SIGNAL")

mtf_p = input.string(title="Table Location", defval="Top Right", options=["Top Right", "Middle


Right", "Bottom Right",

"Top Center", "Middle Center", "Bottom Center", "Top Left", "Middle Left", "Bottom Left"],
inline="1", group = "MTF SIGNAL")

mtf_s = input.string(title="Table Size", defval="Auto", options=["Auto", "Huge", "Large", "Normal",


"Small", "Tiny"], inline="1", group = "MTF SIGNAL")
tf_1 = input.timeframe('3', title = "Time Frame", inline = "1", group = "MTF SIGNAL")

tf_2 = input.timeframe('5', title = "Time Frame", inline = "1", group = "MTF SIGNAL")

tf_3 = input.timeframe('15', title = "Time Frame", inline = "1", group = "MTF SIGNAL")

tf_4 = input.timeframe('30', title = "Time Frame", inline = "1", group = "MTF SIGNAL")

[_mtf_p,_mtf_s] = tablelocation(mtf_p,mtf_s)

var mtf_Table = table.new(_mtf_p, 2, 20, border_color = color.new(color.white,0), border_width = 1)

plotrow1(n, tf) =>

[buy,sell] = request.security_lower_tf(syminfo.tickerid, tf, signal())

b = array.get(buy,array.size(buy)-1)

s = array.get(sell,array.size(sell)-1)

table.cell(table_id = mtf_Table, column = 0, row = n, text = str.tostring(tf), text_color =


color.new(color.white,0), text_size = _mtf_s, bgcolor = b ? color.new(color.lime,0) : s ?
color.new(color.red,0) : color.new(color.gray,0))

plotrow(n, tf) =>

[b,s] = request.security(syminfo.tickerid, tf, signal())

table.cell(table_id = mtf_Table, column = 0, row = n, text = str.tostring(tf), text_color =


color.new(color.white,0), text_size = _mtf_s, bgcolor = b ? color.new(color.lime,0) : s ?
color.new(color.red,0) : color.new(color.gray,0))

if barstate.islast and mtf_t

table.cell(table_id = mtf_Table, column = 0, row = 0, text = str.tostring(syminfo.ticker), text_color =


color.new(color.white,0), text_size = _mtf_s, bgcolor = color.new(#60040c,0))

plotrow1(1, tf_1),plotrow(2, tf_2),plotrow(3, tf_3),plotrow(4, tf_4)

//
//Supertrend

showst = input(title='Supertrend', defval=false)

Mult_11 = input.float(2.2, minval=0, maxval=10)

Period_11 = input.int(10, minval=1, maxval=100)

[Trailings, Trend] = ta.supertrend(Mult_11, Period_11)

linecolor = Trend == 1 ? color.red : color.lime

plot(showst ? Trailings : na, color=linecolor, linewidth=1, title='SuperTrend')

//

//EMA200

showema200 = input(title='EMA 200', defval=true)

len200 = input.int(200, minval=1, title='MA6')

ma200 = ta.ema(close, len200)

plot(showema200 ? ma200 : na, title='EMA200', color=close > ma200 ? color.new(#AAFF00, 0) :


color.new(#EE4B2B,0), linewidth=2)

//

//one day moving average

showema_ = input(title='Daily EMA', defval=true)

showemalb = input(title="Daily EMA Labels", defval=true)

Ema_Len = input(50)
Ema_Len2 = input(200)

EMA50 = request.security(syminfo.tickerid, "D", ta.ema(close[1],Ema_Len), barmerge.gaps_off,


barmerge.lookahead_on)

EMA200 = request.security(syminfo.tickerid, "D", ta.ema(close[1],Ema_Len2), barmerge.gaps_off,


barmerge.lookahead_on)

EMA200_15 = request.security(syminfo.tickerid, "15", ta.ema(close[1],Ema_Len2),


barmerge.gaps_off, barmerge.lookahead_on)

plot(showema_ ? EMA50 : na, title='Daily EMA50', color=color.new(#ff8103,0),style=plot.style_line,


linewidth=2)

plot(showema_ ? EMA200 : na, title='Daily EMA200',


color=color.new(#ff8103,0),style=plot.style_line, linewidth=2)

plot(showema_ ? EMA200_15 : na, title='15Min EMA200',


color=color.new(#ff8103,0),style=plot.style_line, linewidth=2)

if showemalb

var EMA50Label = label.new(x = bar_index, y = EMA50, style = label.style_label_left, color =


color.new(color.blue,0), textcolor = color.white, text = "Daily 50")

label.set_xy(EMA50Label, x = bar_index, y = EMA50)

var EMA200_15Label = label.new(x = bar_index, y = EMA200_15, style = label.style_label_left,


color = color.new(color.blue,0), textcolor = color.white, text = "15Min 200")

label.set_xy(EMA200_15Label, x = bar_index, y = EMA200_15)

var EMA200Label = label.new(x = bar_index, y = EMA200, style = label.style_label_left, color =


color.new(color.blue,0), textcolor = color.white, text = "Daily 200")

label.set_xy(EMA200Label, x = bar_index, y = EMA200)

//

//BarColor

n1 = input(10, 'Channel Length')

n2 = input(21, 'Average Length')

ap = hlc3

esa = ta.ema(ap, n1)


d1 = ta.ema(math.abs(ap - esa), n1)

ci = (ap - esa) / (0.015 * d1)

tci = ta.ema(ci, n2)

wt1 = tci

wt2 = ta.sma(wt1, 4)

plot(0, color=color.new(color.gray, 0))

barcolor(ta.cross(wt1, wt2) ? wt2 - wt1 > 0 ? color.new(color.aqua,0) : color.new(#00FF00, 0) : na)

//

//RSI Table

//TABLE INPUTS

PosTable = input.string(title="Position", defval="Bottom Right", options=["Top Right", "Middle


Right", "Bottom Right", "Top Center", "Middle Center", "Bottom Center", "Top Left", "Middle Left",
"Bottom Left"], group="Position & Size", inline="01")

SizTable = input.string(title="Size", defval="Small", options=["Auto", "Huge", "Large", "Normal",


"Small", "Tiny"], group="Position & Size", inline="01")

Pos1Table=PosTable == "Bottom Left" ? position.top_right : PosTable == "Middle Right" ?


position.middle_right : PosTable == "Bottom Right" ? position.bottom_right : PosTable == "Top
Center" ? position.top_center : PosTable == "Middle Center" ? position.middle_center : PosTable ==
"Bottom Center" ? position.bottom_center : PosTable == "Top Left" ? position.top_left : PosTable ==
"Middle Left" ? position.middle_left : position.bottom_left

Siz1Table = SizTable == "Auto" ? size.auto : SizTable == "Huge" ? size.huge : SizTable == "Large" ?


size.large : SizTable == "Normal" ? size.normal : SizTable == "Small" ? size.small : size.tiny

RSITable = table.new(Pos1Table, 7, 2, bgcolor=#000000, frame_color=#4F4F4F, frame_width=4,


border_color=#696969, border_width=1)

//RSI INPUTS

len = input.int(14, minval=1, title="Length ? ?", inline="001", group="rsi inputs")

src_101 = input.source(close, "Source ? ?", inline="002", group="rsi inputs")


//VALUE OVERSOLD AND OVERBOUGHT RSI

limitH = input.int(50, "O.B", 0, 100, inline="001", group="rsi inputs")

limitL = input.int(50, "O.S", 0, 100, inline="002", group="rsi inputs")

//SELECTION OF TIMEFRAMES IN THE TABLES#

rsitf1 = input.timeframe("1", "TF 1", inline="1", group="select timeframe")

rsitf2 = input.timeframe("5", "TF 2", inline="3", group="select timeframe")

rsitf3 = input.timeframe("15", "TF 3", inline="5", group="select timeframe")

rsitf4 = input.timeframe("60", "TF 4", inline="1", group="select timeframe")

rsitf5 = input.timeframe("240","TF 5", inline="3", group="select timeframe")

rsitf6 = input.timeframe("1D", "TF 6", inline="5", group="select timeframe")

RSITF1 = request.security(syminfo.tickerid, rsitf1, ta.rsi(close, len))

RSITF5 = request.security(syminfo.tickerid, rsitf2, ta.rsi(close, len))

RSITF15 = request.security(syminfo.tickerid, rsitf3, ta.rsi(close, len))

RSITF60 = request.security(syminfo.tickerid, rsitf4, ta.rsi(close, len))

RSITF4H = request.security(syminfo.tickerid, rsitf5, ta.rsi(close, len))

RSITF1D = request.security(syminfo.tickerid, rsitf6, ta.rsi(close, len))

//PLOT RSI VALUES ABOUT THE CELLS

tfTxt(x)=>

//adds abbreviation next to timeframe value

out = x

if not str.contains(x, "S") and not str.contains(x, "M") and

not str.contains(x, "W") and not str.contains(x, "D")

if str.tonumber(x)%60 == 0

out := str.tostring(str.tonumber(x)/60)+"H"

else

out := x + "m"

out
f_fillCellText(_table, _column, _row, _value, _timeframe) =>

//Default colors in table

cell_color = #000000

cell_txt = #00000000

//function to change cell and text colors based on O.B/O.S values

if _value <= limitL

cell_color := #8B0000

cell_txt := #FF8C00

else if _value >= limitH

cell_color := #006400

cell_txt := #00FF00

else

cell_color := #1C1C1C

cell_txt := #DCDCDC

//

_cellText = str.tostring(_value, '#.##') + '\n' + _timeframe

table.cell(RSITable, _column, _row, _cellText, bgcolor=color.new(cell_color, 40),


text_color=cell_txt, text_size = Siz1Table)

table.cell(RSITable, 0, 0, "Time", text_color=#FFD700, bgcolor=#000000, text_size=size.small)

table.cell(RSITable, 0, 1, "RSI ("+str.tostring(len)+")", text_color=#FFD700, bgcolor=#000000,


text_size=Siz1Table)

table.cell(RSITable, 1, 0, tfTxt(rsitf1), text_color=#FFFFFF, text_size =Siz1Table)

table.cell(RSITable, 2, 0, tfTxt(rsitf2), text_color=#FFFFFF, text_size =Siz1Table)

table.cell(RSITable, 3, 0, tfTxt(rsitf3), text_color=#FFFFFF, text_size =Siz1Table)

table.cell(RSITable, 4, 0, tfTxt(rsitf4), text_color=#FFFFFF, text_size =Siz1Table)


table.cell(RSITable, 5, 0, tfTxt(rsitf5), text_color=#FFFFFF, text_size =Siz1Table)

table.cell(RSITable, 6, 0, tfTxt(rsitf6), text_color=#FFFFFF, text_size =Siz1Table)

if barstate.islast

f_fillCellText(RSITable, 1, 1, RSITF1, "")

f_fillCellText(RSITable, 2, 1, RSITF5, "")

f_fillCellText(RSITable, 3, 1, RSITF15, "")

f_fillCellText(RSITable, 4, 1, RSITF60, "")

f_fillCellText(RSITable, 5, 1, RSITF4H, "")

f_fillCellText(RSITable, 6, 1, RSITF1D, "")

//

//Demand and Supply

//SETTINGS

//

// INDICATOR SETTINGS

swing_length = input.int(10, title = 'Swing High/Low Length', group = 'Settings', minval = 1, maxval =
50)

history_of_demand_to_keep = input.int(20, title = 'History To Keep', minval = 5, maxval = 50)

box_width = input.float(2.5, title = 'Supply/Demand Box Width', group = 'Settings', minval = 1,


maxval = 10, step = 0.5)

// INDICATOR VISUAL SETTINGS

show_zigzag = input.bool(false, title = 'Show Zig Zag', group = 'Visual Settings', inline = '1')

show_price_action_labels = input.bool(false, title = 'Show Price Action Labels', group = 'Visual


Settings', inline = '2')

supply_color = input.color(color.new(#741313, 0), title = 'Supply', group = 'Visual Settings', inline =


'3')

supply_outline_color = input.color(color.new(color.white,75), title = 'Outline', group = 'Visual


Settings', inline = '3')
demand_color = input.color(color.new(#0e462b, 0), title = 'Demand', group = 'Visual Settings', inline
= '4')

demand_outline_color = input.color(color.new(color.white,75), title = 'Outline', group = 'Visual


Settings', inline = '4')

bos_label_color = input.color(color.white, title = 'BOS Label', group = 'Visual Settings', inline = '5')

poi_label_color = input.color(color.white, title = 'POI Label', group = 'Visual Settings', inline = '7')

swing_type_color = input.color(color.black, title = 'Price Action Label', group = 'Visual Settings', inline
= '8')

zigzag_color = input.color(color.new(#000000,0), title = 'Zig Zag', group = 'Visual Settings', inline = '9')

//

//END SETTINGS

//

//

//FUNCTIONS

//

// FUNCTION TO ADD NEW AND REMOVE LAST IN ARRAY

f_array_add_pop(array, new_value_to_add) =>

array.unshift(array, new_value_to_add)

array.pop(array)

// FUNCTION SWING H & L LABELS

f_sh_sl_labels(array, swing_type) =>

var string label_text = na

if swing_type == 1

if array.get(array, 0) >= array.get(array, 1)


label_text := 'HH'

else

label_text := 'LH'

label.new(bar_index - swing_length, array.get(array,0), text = label_text,


style=label.style_label_down, textcolor = swing_type_color, color = color.new(swing_type_color,
100), size = size.tiny)

else if swing_type == -1

if array.get(array, 0) >= array.get(array, 1)

label_text := 'HL'

else

label_text := 'LL'

label.new(bar_index - swing_length, array.get(array,0), text = label_text,


style=label.style_label_up, textcolor = swing_type_color, color = color.new(swing_type_color, 100),
size = size.tiny)

// FUNCTION MAKE SURE SUPPLY ISNT OVERLAPPING

f_check_overlapping(new_poi, box_array, atr) =>

atr_threshold = atr * 2

okay_to_draw = true

for i = 0 to array.size(box_array) - 1

top = box.get_top(array.get(box_array, i))

bottom = box.get_bottom(array.get(box_array, i))

poi = (top + bottom) / 2

upper_boundary = poi + atr_threshold

lower_boundary = poi - atr_threshold

if new_poi >= lower_boundary and new_poi <= upper_boundary

okay_to_draw := false
break

else

okay_to_draw := true

okay_to_draw

// FUNCTION TO DRAW SUPPLY OR DEMAND ZONE

f_supply_demand(value_array, bn_array, box_array, label_array, box_type, atr) =>

atr_buffer = atr * (box_width / 10)

box_left = array.get(bn_array, 0)

box_right = bar_index

var float box_top = 0.00

var float box_bottom = 0.00

var float poi = 0.00

if box_type == 1

box_top := array.get(value_array, 0)

box_bottom := box_top - atr_buffer

poi := (box_top + box_bottom) / 2

else if box_type == -1

box_bottom := array.get(value_array, 0)

box_top := box_bottom + atr_buffer

poi := (box_top + box_bottom) / 2

okay_to_draw = f_check_overlapping(poi, box_array, atr)

// okay_to_draw = true

//delete oldest box, and then create a new box and add it to the array
if box_type == 1 and okay_to_draw

box.delete( array.get(box_array, array.size(box_array) - 1) )

f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom =


box_bottom, border_color = supply_outline_color,

bgcolor = supply_color, extend = extend.right, text = 'SUPPLY', text_halign = text.align_center,


text_valign = text.align_center, text_color = poi_label_color, text_size = size.small, xloc =
xloc.bar_index))

box.delete( array.get(label_array, array.size(label_array) - 1) )

f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom =


poi, border_color = color.new(poi_label_color,90),

bgcolor = color.new(poi_label_color,90), extend = extend.right, text = 'POI', text_halign =


text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small,
xloc = xloc.bar_index))

else if box_type == -1 and okay_to_draw

box.delete( array.get(box_array, array.size(box_array) - 1) )

f_array_add_pop(box_array, box.new( left = box_left, top = box_top, right = box_right, bottom =


box_bottom, border_color = demand_outline_color,

bgcolor = demand_color, extend = extend.right, text = 'DEMAND', text_halign =


text.align_center, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small,
xloc = xloc.bar_index))

box.delete( array.get(label_array, array.size(label_array) - 1) )

f_array_add_pop(label_array, box.new( left = box_left, top = poi, right = box_right, bottom =


poi, border_color = color.new(poi_label_color,90),

bgcolor = color.new(poi_label_color,90), extend = extend.right, text = 'POI', text_halign =


text.align_left, text_valign = text.align_center, text_color = poi_label_color, text_size = size.small,
xloc = xloc.bar_index))

// FUNCTION TO CHANGE SUPPLY/DEMAND TO A BOS IF BROKEN

f_sd_to_bos(box_array, bos_array, label_array, zone_type) =>

if zone_type == 1
for i = 0 to array.size(box_array) - 1

level_to_break = box.get_top(array.get(box_array,i))

// if ta.crossover(close, level_to_break)

if close >= level_to_break

copied_box = box.copy(array.get(box_array,i))

f_array_add_pop(bos_array, copied_box)

mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2

box.set_top(array.get(bos_array,0), mid)

box.set_bottom(array.get(bos_array,0), mid)

box.set_extend( array.get(bos_array,0), extend.none)

box.set_right( array.get(bos_array,0), bar_index)

box.set_text( array.get(bos_array,0), 'BOS' )

box.set_text_color( array.get(bos_array,0), bos_label_color)

box.set_text_size( array.get(bos_array,0), size.small)

box.set_text_halign( array.get(bos_array,0), text.align_center)

box.set_text_valign( array.get(bos_array,0), text.align_center)

box.delete(array.get(box_array, i))

box.delete(array.get(label_array, i))

if zone_type == -1

for i = 0 to array.size(box_array) - 1

level_to_break = box.get_bottom(array.get(box_array,i))

// if ta.crossunder(close, level_to_break)

if close <= level_to_break

copied_box = box.copy(array.get(box_array,i))

f_array_add_pop(bos_array, copied_box)

mid = (box.get_top(array.get(box_array,i)) + box.get_bottom(array.get(box_array,i))) / 2

box.set_top(array.get(bos_array,0), mid)

box.set_bottom(array.get(bos_array,0), mid)

box.set_extend( array.get(bos_array,0), extend.none)


box.set_right( array.get(bos_array,0), bar_index)

box.set_text( array.get(bos_array,0), 'BOS' )

box.set_text_color( array.get(bos_array,0), bos_label_color)

box.set_text_size( array.get(bos_array,0), size.small)

box.set_text_halign( array.get(bos_array,0), text.align_center)

box.set_text_valign( array.get(bos_array,0), text.align_center)

box.delete(array.get(box_array, i))

box.delete(array.get(label_array, i))

// FUNCTION MANAGE CURRENT BOXES BY CHANGING ENDPOINT

f_extend_box_endpoint(box_array) =>

for i = 0 to array.size(box_array) - 1

box.set_right(array.get(box_array, i), bar_index + 100)

//

//END FUNCTIONS

//

//

//CALCULATIONS

//

// CALCULATE ATR

atr = ta.atr(50)

// CALCULATE SWING HIGHS & SWING LOWS


swing_high = ta.pivothigh(high, swing_length, swing_length)

swing_low = ta.pivotlow(low, swing_length, swing_length)

// ARRAYS FOR SWING H/L & BN

var swing_high_values = array.new_float(5,0.00)

var swing_low_values = array.new_float(5,0.00)

var swing_high_bns = array.new_int(5,0)

var swing_low_bns = array.new_int(5,0)

// ARRAYS FOR SUPPLY / DEMAND

var current_supply_box = array.new_box(history_of_demand_to_keep, na)

var current_demand_box = array.new_box(history_of_demand_to_keep, na)

// ARRAYS FOR SUPPLY / DEMAND POI LABELS

var current_supply_poi = array.new_box(history_of_demand_to_keep, na)

var current_demand_poi = array.new_box(history_of_demand_to_keep, na)

// ARRAYS FOR BOS

var supply_bos = array.new_box(5, na)

var demand_bos = array.new_box(5, na)

//

//END CALCULATIONS

//

// NEW SWING HIGH

if not na(swing_high)

//MANAGE SWING HIGH VALUES

f_array_add_pop(swing_high_values, swing_high)

f_array_add_pop(swing_high_bns, bar_index[swing_length])
if show_price_action_labels

f_sh_sl_labels(swing_high_values, 1)

f_supply_demand(swing_high_values, swing_high_bns, current_supply_box, current_supply_poi,


1, atr)

// NEW SWING LOW

else if not na(swing_low)

//MANAGE SWING LOW VALUES

f_array_add_pop(swing_low_values, swing_low)

f_array_add_pop(swing_low_bns, bar_index[swing_length])

if show_price_action_labels

f_sh_sl_labels(swing_low_values, -1)

f_supply_demand(swing_low_values, swing_low_bns, current_demand_box,


current_demand_poi, -1, atr)

f_sd_to_bos(current_supply_box, supply_bos, current_supply_poi, 1)

f_sd_to_bos(current_demand_box, demand_bos, current_demand_poi, -1)

f_extend_box_endpoint(current_supply_box)

f_extend_box_endpoint(current_demand_box)

//ZIG ZAG

h = ta.highest(high, swing_length * 2 + 1)

l = ta.lowest(low, swing_length * 2 + 1)

f_isMin(len) =>

l == low[len]

f_isMax(len) =>

h == high[len]
var dirUp = false

var lastLow = high * 100

var lastHigh = 0.0

var timeLow = bar_index

var timeHigh = bar_index

var line li = na

f_drawLine() =>

_li_color = show_zigzag ? zigzag_color : color.new(#ffffff,100)

line.new(timeHigh - swing_length, lastHigh, timeLow - swing_length, lastLow, xloc.bar_index,


color=_li_color, width=2)

if dirUp

if f_isMin(swing_length) and low[swing_length] < lastLow

lastLow := low[swing_length]

timeLow := bar_index

line.delete(li)

li := f_drawLine()

li

if f_isMax(swing_length) and high[swing_length] > lastLow

lastHigh := high[swing_length]

timeHigh := bar_index

dirUp := false

li := f_drawLine()

li

if not dirUp

if f_isMax(swing_length) and high[swing_length] > lastHigh

lastHigh := high[swing_length]
timeHigh := bar_index

line.delete(li)

li := f_drawLine()

li

if f_isMin(swing_length) and low[swing_length] < lastHigh

lastLow := low[swing_length]

timeLow := bar_index

dirUp := true

li := f_drawLine()

if f_isMax(swing_length) and high[swing_length] > lastLow

lastHigh := high[swing_length]

timeHigh := bar_index

dirUp := false

li := f_drawLine()

li

// if barstate.islast

// label.new(x = bar_index + 10, y = close[1], text = str.tostring( array.size(current_supply_poi) ))

// label.new(x = bar_index + 20, y = close[1], text =


str.tostring( box.get_bottom( array.get(current_supply_box, 0))))

// label.new(x = bar_index + 30, y = close[1], text =


str.tostring( box.get_bottom( array.get(current_supply_box, 1))))

// label.new(x = bar_index + 40, y = close[1], text =


str.tostring( box.get_bottom( array.get(current_supply_box, 2))))

// label.new(x = bar_index + 50, y = close[1], text =


str.tostring( box.get_bottom( array.get(current_supply_box, 3))))

// label.new(x = bar_index + 60, y = close[1], text =


str.tostring( box.get_bottom( array.get(current_supply_box, 4))))

//

//Trend Bar

ShowTrendIndi = input(true, title='Show Trend Indicator')

PACLen = input.int(50, minval=2, title='EMA ')

src_YGS = input(close, title='Source for Wave centre EMA')


// --- CONSTANTS ---

DodgerBlue = #1E90FF

// === /INPUTS ===

// Constants colours that include fully non-transparent option.

lime100 = #00FF00FF

blue100 = #0000FFFF

aqua100 = #00FFFFFF

darkred100 = #8B0000FF

// === SERIES SETUP ===

// Price action channel (Wave)

pacLo = ta.ema(low, PACLen)

pacHi = ta.ema(high, PACLen)

// === PLOTTING ===

// Show trend direction indication on the bottom

wcolor = high > pacHi and low > pacHi ? color.lime : low < pacLo and high < pacLo ? color.red :
color.gray

plotshape(ShowTrendIndi ? src_YGS : na, color=wcolor, location=location.bottom,


style=shape.square, size=size.normal, title='Trend Direction', transp=20)

////

You might also like