关于obv指标内容导航:
1、obv指标
def OBV(self, data):
obv = [0]
for i in range(1, len(data)):
if data.iloc[i]['close'] > data.iloc[i - 1]['close']:
obv.append(obv[i - 1] + data.iloc[i]['volume'])
elif data.iloc[i]['close'] == data.iloc[i - 1]['close']:
obv.append(obv[i - 1])
else:
obv.append(obv[i - 1] - data.iloc[i]['volume'])
return obv
# 计算RSI指标
def RSI(self, data, n):
diff = data['close'].diff()
up = diff.copy()
up[up < 0] = 0
down = diff.copy()
down[down > 0] = 0
down = down.abs()
up_ave = up.rolling(window=n).mean()
down_ave = down.rolling(window=n).mean()
rs = up_ave / down_ave
rsi = 100 - (100 / (1 + rs))
return rsi
# 计算KDJ指标
def KDJ(self, data, n):
low_list = data['low'].rolling(window=n).min()
low_list.fillna(value=data['low'].expanding().min(), inplace=True)
high_list = data['high'].rolling(window=n).max()
high_list.fillna(value=data['high'].expanding().max(), inplace=True)
rsv = (data['close'] - low_list) / (high_list - low_list) * 100
k = rsv.ewm(com=2).mean()
d = k.ewm(com=2).mean()
j = 3 * k - 2 * d
return k, d, j
# 计算MACD指标
def MACD(self, data, n_fast, n_slow):
ewma12 = data['close'].ewm(span=n_fast).mean()
ewma26 = data['close'].ewm(span=n_slow).mean()
dif = ewma12 - ewma26
dea = dif.ewm(span=9).mean()
macd = 2 * (dif - dea)
return dif, dea, macd
# 计算BOLL指标
def BOLL(self, data, n):
mid = data['close'].rolling(window=n).mean()
std = data['close'].rolling(window=n).std()
up = mid + 2 * std
down = mid - 2 * std
return mid, up, down
# 计算WR指标
def WR(self, data, n):
low_list = data['low'].rolling(window=n).min()
low_list.fillna(value=data['low'].expanding().min(), inplace=True)
high_list = data['high'].rolling(window=n).max()
high_list.fillna(value=data['high'].expanding().max(), inplace=True)
wr = (high_list - data['close']) / (high_list - low_list) * 100
return wr
# 计算CCI指标
def CCI(self, data, n):
tp = (data['high'] + data['low'] + data['close']) / 3
cci = (tp - tp.rolling(window=n).mean()) / (0.015 * tp.rolling(window=n).std())
return cci
# 计算PSY指标
def PSY(self, data, n):
psy = data['close'].diff()
psy[psy > 0] = 1
psy[psy <= 0] = 0
psy = psy.rolling(window=n).sum() / n * 100
return psy
# 计算DMI指标
def DMI(self, data, n):
low_list = data['low'].rolling(window=n).min()
low_list.fillna(value=data['low'].expanding().min(), inplace=True)
high_list = data['high'].rolling(window=n).max()
high_list.fillna(value=data['high'].expanding().max(), inplace=True)
tr = high_list - low_list
tr_s = tr.shift(1)
tr_s.fillna(value=tr.expanding().min(), inplace=True)
tr_l = tr.rolling(window=n).max()
tr_l.fillna(value=tr.expanding().max(), inplace=True)
tr_s_l = tr_s.rolling(window=n).max()
tr_s_l.fillna(value=tr_s.expanding().max(), inplace=True)
dm_p = high_list - high_list.shift(1)
dm_p[dm_p < 0] = 0
dm_n = low_list.shift(1) - low_list
dm_n[dm_n < 0] = 0
di_p = dm_p.rolling(window=n).mean() / tr_l * 100
di_n = dm_n.rolling(window=n).mean() / tr_s_l * 100
di_d = di_p - di_n
di_adx = di_d.rolling(window=n).mean()
di_adxr = di_adx.rolling(window=n).mean()
return di_p, di_n, di_adx, di_adxr
# 计算BIAS指标
def BIAS(self, data, n):
ma = data['close'].rolling(window=n).mean()
bias = (data['close'] - ma) / ma * 100
return bias
# 计算VR指标
def VR(self, data, n):
tr = data['high'] - data['low']
tr_s = tr.shift(1)
tr_s.fillna(value=tr.expanding().min(), inplace=True)
tr_l = tr.rolling(window=n).max()
tr_l.fillna(value=tr.expanding().max(), inplace=True)
tr_s_l = tr_s.rolling(window=n).max()
tr_s_l.fillna(value=tr_s.expanding().max(), inplace=True)
vr = (tr / tr_l) / (tr_s / tr_s_l) * 100
return vr
# 计算ROC指标
def ROC(self, data, n):
roc = (data['close'] - data['close'].shift(n)) / data['close'].shift(n) * 100
return roc
# 计算MTM指标
def MTM(self, data, n):
mtm = data['close'].diff(n)
return mtm
# 计算CR指标
def CR(self, data, n):
mid = data['close'].rolling(window=n).mean()
std = data['close'].rolling(window=n).std()
up = mid + 2 * std
down = mid - 2 * std
cr = (up - data['close']) / (up - down) * 100
return cr
# 计算DMA指标
def DMA(self, data, n, m):
dif = data['close'].diff(m)
dif_ma = dif.rolling(window=n).mean()
dma = dif_ma - dif
return dma
# 计算
2、obv指标是什么意思
股价的变动离不开成交量的变动,而obv能量潮指标就是分析成交煤局乐电环围附挥信血量的重要指标之一,它可以将股市中的量价关系用数字化的方式直观的表现在投资者面前,是投资者研判股价走势的一大利器。ob盾种天盾货v指标最佳参数设置是什么?obv指数线是没有参数的,所以使用时无需进行参数设置,这一点是与大部分技术指标都不同的。不过obv指标同样可以选择不同的平均天数,通过不同的obv平均线来判断obv指数的未来变化。当股票市场的成交盘比较多,而且当日的收盘价又高于上一个交易日的收盘价时,obv指标就会呈现上升趋势。一般来说,当OBV持续走高,说明股市的价格出现上班跟院某涨。同样,当OBV持续走低时,说明价格下跌。当OBV既不上涨景春端即也不下跌,股价也多以横盘整理为主。较其他指标而言,能量潮指标obv是一种十分简单的指标,它的这一特性不仅仅体现在计算方式上,在投资者的使用过程中也是如此。但同样的,过于简单也给obv指标带来了相当大的局限性,通常要和其他指标结合起来分析判断。
3、obv指标参数设置多少为最佳
展开全部能量潮OBV指标也称累计能量线,于80年代初首先在美国市场上得到运用。指标设计很有辨证思想,它是将市场成交量按多空力量化分为两部分:当价格上涨时,多头能量占上风,当日成交量对价格的影响视为积极因素,并以正值累计;反之,当价格下跌时,空头能量占上风,当日成交量对价格的影响视为消极因素,并以负值累计;无涨跌时不计入。公式源码:OBV:SUM(IF(CLOSE>REF(CLOSE,1),VOL,IF(CLOSE OBV曲线由大大小小的锯齿状折线构成, OBV指标技法中最有价值的地方是对突破行情的辅助预测功能上。“先量后价,量在价先”,在当价格即将创新高或新低时的,如果OBV比价格领先或同时创出新高(低)的话,预示股价突破为有效,否则,股价将难以突破,或突破的有效性会大打折扣,并谨防虚假行情。所以将OBV用于技术形态或重要技术关口(如成交密集区,重要缺口,历史高点等)的突破分析时,其本质功能才能得到充分运用和展现。但在OBV的使用中,您可能已经注意到这样的现象:在一段完整的牛熊猫行情周期内,无论当前趋势是上涨还是下跌,从总体上看,OBV指标趋势老是不断上升,即或股价跌幅很大甚至已跌破历史低点,OBV回落幅度却很小!一些人对此大惑不解,将信将疑而不再敢使用。其实,这正是股价动能原理的真实体现,不断放大的成交量才能推动价格上涨,而下跌却无须成交量的配合,甚至可以象自由落体一样无量空跌。显然,弄清指标原理,是正确认识和使用指标的前提。 我们从OBV对成交量的分解原则,这个现象很容易得到解释。由于下跌的成交量通常总小于上涨的成交量,故而所有上涨的成交量之和,总是远大于下跌成交量之和!于是对应行情的上涨阶段,OBV指标线上行的幅度也总会是远大于下跌阶段,虽经函数SUM累计合并计算后,指标值也总是为正(但若上市初期便出现下跌的情形例外),这样造成了OBV线总体上处于不断上升的态势。 尽管OBV的下行幅度相对较小,但下跌趋势总存在。特别在熊市时期,OBV指标线随股价缓慢回落,持续时间还相当长。但在市场涨跌循环中,能量的消涨有其内在的规律性。由于年均线系统在当前我国证券市场具有很强的现时意义,我们不妨借鉴“1250战法”的理念,把它用于股票能量分析中来。将ABV增加一根均线设为M3,M3:EMA(ABV,120);由于溶入了长期均线,因ABV赋含了新的技术意义,而使得指标的实战技术功效得以增强。当调增ABV均线参数,使之接近半年和年线,之后会清楚看到: 当OBV随着股价的调整而小幅缓慢回落,但在触击到半年线或年线附近时,能量因接近周期性调整的极限而枯竭,成交量通常难以继续萎缩,此时往往诱发股价反弹,甚至就此孕育反转行情。尤其在中长期上升趋势中的阶段性调整时,这种现象更为明显。 但当出现放量下跌时,OBV可向下穿越均线,但若股价下跌幅度已大,往往是最后一跌,可等待能量重新会到均线之上后寻找机会;此时如是股价高位回落,是转势信号,预示下跌行情会较大。ABV:air bypass valve空气旁通阀 能量潮公式:OBV的公式VA:=IF(CLOSE>REF(CLOSE,1),VOL,-VOL); OBV:SUM(IF(CLOSE=REF(CLOSE,1),0,VA),0); MAOBV:MA(OBV,M);