MCPcopy Index your code
hub / github.com/QuantFans/quantdigger / RSI

Class RSI

quantdigger/kernel/indicators/common.py:76–123  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

74
75
76class RSI(IndicatorBase):
77 @create_attributes
78 def __init__(self, tracker, prices, n=14, name="RSI", fillcolor='b'):
79 super(RSI, self).__init__(tracker, name)
80 self.value = self._relative_strength(prices, n)
81 ## @todo 一种绘图风格
82 # 固定的y范围
83 self.stick_yrange([0, 100])
84
85 def _relative_strength(self, prices, n=14):
86 deltas = np.diff(prices)
87 seed = deltas[:n+1]
88 up = seed[seed>=0].sum()/n
89 down = -seed[seed<0].sum()/n
90 rs = up/down
91 rsi = np.zeros_like(prices)
92 rsi[:n] = 100. - 100./(1.+rs)
93
94 for i in range(n, len(prices)):
95 delta = deltas[i-1] # cause the diff is 1 shorter
96 if delta>0:
97 upval = delta
98 downval = 0.
99 else:
100 upval = 0.
101 downval = -delta
102
103 up = (up*(n-1) + upval)/n
104 down = (down*(n-1) + downval)/n
105
106 rs = up/down
107 rsi[i] = 100. - 100./(1.+rs)
108 return rsi
109
110 def plot(self, widget):
111 textsize = 9
112 widget.plot(self.value, color=self.fillcolor, lw=2)
113 widget.axhline(70, color=self.fillcolor, linestyle='-')
114 widget.axhline(30, color=self.fillcolor, linestyle='-')
115 widget.fill_between(self.value, 70, where=(self.value>=70),
116 facecolor=self.fillcolor, edgecolor=self.fillcolor)
117 widget.fill_between(self.value, 30, where=(self.value<=30),
118 facecolor=self.fillcolor, edgecolor=self.fillcolor)
119 widget.text(0.6, 0.9, '>70 = overbought', va='top', transform=widget.transAxes, fontsize=textsize, color = 'k')
120 widget.text(0.6, 0.1, '<30 = oversold', transform=widget.transAxes, fontsize=textsize, color = 'k')
121 widget.set_ylim(0, 100)
122 widget.set_yticks([30,70])
123 widget.text(0.025, 0.95, 'rsi (14)', va='top', transform=widget.transAxes, fontsize=textsize)
124
125
126class MACD(IndicatorBase):

Callers 1

mplot_demo.pyFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected