forked from ricardosantos79/pinescript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path[RS][UCS]Murrey's Math Oscillator Modification.pinescript
114 lines (103 loc) · 4.47 KB
/
[RS][UCS]Murrey's Math Oscillator Modification.pinescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Created & Developed by Ucsgears, based on Murrey Math Line Principle
// Version 2 - March, 12 - 2015
// Modification - sometime around 2016~ RicardoSantos
// V4 update - 2020-06-03 RicardoSantos
// multiple methods - 2020-06-13 RicardoSantos
//@version=4
study(title="[RS][UCS]Murrey's Math Oscillator Modification", shorttitle="[RS][UCS]MMLO", overlay=false, precision = 2)
// Inputs
string m_donchian = 'donchian channel'
string m_cumdev = 'cumulative deviation'
string m_decenv = 'decay envelope'
string method = input(defval=m_donchian, options=[m_donchian, m_cumdev, m_decenv])
int length = input(defval=4, minval = 1, title = "Look back Length")
float mult = input(0.125)
bool lines = input(defval=true, title="Show Murrey Math Fractals")
bool bc = input(defval=true, title="Show Bar Colors Based On Oscillator")
//-----------------------------------------------------
f_mo(_method, _length, _multiplier)=>
float _oscillator = 0.0
float _lvl_range = _multiplier
if _method == m_cumdev
float _cumdev = cum(stdev(close, 4)) / (bar_index + 1)
float _mdev = _cumdev * _length
//--
var float _oscdev = hlc3
float _previous = nz(_oscdev[1], hlc3)
if open - _mdev > _previous
_oscdev := _previous + _cumdev
else if open + _cumdev * _length < _previous
_oscdev := _previous - _cumdev
else
_oscdev := _previous
_oscillator := (close - _oscdev) / (_cumdev * (_length * 10))
else if _method == m_donchian
float _hi = highest(high, _length)
float _lo = lowest(low, _length)
float _range = _hi - _lo
float _lvl_range = _range * _multiplier
float _midline = avg(_hi, _lo)//_lo + _lvl_range * 4
_oscillator := (close - _midline) / (_range / 2)
else if _method == m_decenv
var float _hi = high
var float _lo = low
if high > _hi
_hi := high
else
_hi := max(avg(nz(_hi) * (1.0 - _multiplier), high * (1.0 + _multiplier)), high)
if low < _lo
_lo := low
else
_lo := min(avg(nz(_lo) * (1.0 - _multiplier), low * (1.0 + _multiplier)), low)
float _range = _hi - _lo
float _lvl_range = _range * _multiplier
float _midline = avg(_hi, _lo)//_lo + _lvl_range * 4
float _c = ema(close, _length)
_oscillator := 0 - (_c - _midline) / (_range / 2)
else
_oscillator := na
//--
color _col = na
if _oscillator > 0
if _oscillator < _multiplier * 2
_col := #ADFF2F
else if _oscillator < _multiplier * 4
_col := #ADFF2F
else if _oscillator < _multiplier * 6
_col := #ADFF2F
else if _oscillator < _multiplier * 8
_col := #008000
else
_col := color.blue
else if _oscillator < 0
if _oscillator > -_multiplier * 2
_col := #CD5C5C
else if _oscillator > -_multiplier * 4
_col := #FA8072
else if _oscillator > -_multiplier * 6
_col := #FFA07A
else if _oscillator > -_multiplier * 8
_col := #FF0000
else
_col := color.navy
else
_col := color.yellow
//--
[_oscillator, _col]
//-----------------------------------------------------
[oscillator, colordef] = f_mo(method, length, mult)
plot(series=oscillator, color=colordef, title="Murrey Math Oscillator", style=plot.style_columns, transp = 60)
plot(0, title="Zero Line", color=color.gray, linewidth=4)
plot(lines == 1 ? mult*2 : na, title = "First Positive Quadrant", color=color.gray, linewidth = 1)
plot(lines == 1 ? mult*4 : na, title = "Second Positive Quadrant", color=color.gray, linewidth = 1)
p3 = plot(lines == 1 ? mult*6 : na, title = "Third Positive Quadrant", color=color.gray, linewidth = 2)
p4 = plot(lines == 1 ? mult*8 : na, title = "Fourth Positive Quadrant", color=color.gray, linewidth = 1)
plot(lines == 1 ? -mult*2 : na, title = "First Negative Quadrant", color=color.gray, linewidth = 1)
plot(lines == 1 ? -mult*4 : na, title = "Second Negative Quadrant", color=color.gray, linewidth = 1)
p2 = plot(lines == 1 ? -mult*6 : na, title = "Third Negative Quadrant", color=color.gray, linewidth = 2)
p1 = plot(lines == 1 ? -mult*8 : na, title = "Fourth Negative Quadrant", color=color.gray, linewidth = 1)
fill (p1,p2, color = color.orange)
fill (p3,p4, color = color.lime)
// Bar Color Oversold and Overbought
bcolor = bc == 1 ? colordef : na
barcolor(bcolor)