import pandas as pd import numpy as np # Pivot Points, Supports and Resistances def PPSR(df): PP = pd.Series((df['High'] + df['Low'] + df['Close']) / 3) R1 = pd.Series(2 * PP - df['Low']) S1 = pd.Series(2 * PP - df['High']) R2 = pd.Series(PP + df['High'] - df['Low']) S2 = pd.Series(PP - df['High'] + df['Low']) R3 = pd.Series(df['High'] + 2 * (PP - df['Low'])) S3 = pd.Series(df['Low'] - 2 * (df['High'] - PP)) psr = {'PP':PP, 'R1':R1, 'S1':S1, 'R2':R2, 'S2':S2, 'R3':R3, 'S3':S3} PSR = pd.DataFrame(psr) df = df.join(PSR) return df # Stochastic oscillator %K def STOK(df): SOk = pd.Series((df['Close'] - df['Low']) / (df['High'] - df['Low']), name = 'SO%k') df = df.join(SOk) return df # Stochastic Oscillator, EMA smoothing, nS = slowing (1 if no slowing) def STO(df, nK, nD, nS=1): SOk = pd.Series((df['Close'] - df['Low'].rolling(nK).min()) / (df['High'].rolling(nK).max() - df['Low'].rolling(nK).min()), name = 'SO%k'+str(nK)) SOd = pd.Series(SOk.ewm(ignore_na=False, span=nD, min_periods=nD-1, adjust=True).mean(), name = 'SO%d'+str(nD)) SOk = SOk.ewm(ignore_na=False, span=nS, min_periods=nS-1, adjust=True).mean() SOd = SOd.ewm(ignore_na=False, span=nS, min_periods=nS-1, adjust=True).mean() df = df.join(SOk) df = df.join(SOd) return df # Stochastic Oscillator, SMA smoothing, nS = slowing (1 if no slowing) def STO(df, nK, nD, nS=1): SOk = pd.Series((df['Close'] - df['Low'].rolling(nK).min()) / (df['High'].rolling(nK).max() - df['Low'].rolling(nK).min()), name = 'SO%k'+str(nK)) SOd = pd.Series(SOk.rolling(window=nD, center=False).mean(), name = 'SO%d'+str(nD)) SOk = SOk.rolling(window=nS, center=False).mean() SOd = SOd.rolling(window=nS, center=False).mean() df = df.join(SOk) df = df.join(SOd) return df # Mass Index def MassI(df): Range = df['High'] - df['Low'] EX1 = pd.ewma(Range, span = 9, min_periods = 8) EX2 = pd.ewma(EX1, span = 9, min_periods = 8) Mass = EX1 / EX2 MassI = pd.Series(pd.rolling_sum(Mass, 25), name = 'Mass Index') df = df.join(MassI) return df # Vortex Indicator: http://www.vortexindicator.com/VFX_VORTEX.PDF def Vortex(df, n): i = 0 TR = [0] while i < df.index[-1]: Range = max(df.get_value(i + 1, 'High'), df.get_value(i, 'Close')) - min(df.get_value(i + 1, 'Low'), df.get_value(i, 'Close')) TR.append(Range) i = i + 1 i = 0 VM = [0] while i < df.index[-1]: Range = abs(df.get_value(i + 1, 'High') - df.get_value(i, 'Low')) - abs(df.get_value(i + 1, 'Low') - df.get_value(i, 'High')) VM.append(Range) i = i + 1 VI = pd.Series(pd.rolling_sum(pd.Series(VM), n) / pd.rolling_sum(pd.Series(TR), n), name = 'Vortex_' + str(n)) df = df.join(VI) return df # KST Oscillator def KST(df, r1, r2, r3, r4, n1, n2, n3, n4): M = df['Close'].diff(r1 - 1) N = df['Close'].shift(r1 - 1) ROC1 = M / N M = df['Close'].diff(r2 - 1) N = df['Close'].shift(r2 - 1) ROC2 = M / N M = df['Close'].diff(r3 - 1) N = df['Close'].shift(r3 - 1) ROC3 = M / N M = df['Close'].diff(r4 - 1) N = df['Close'].shift(r4 - 1) ROC4 = M / N KST = pd.Series(pd.rolling_sum(ROC1, n1) + pd.rolling_sum(ROC2, n2) * 2 + pd.rolling_sum(ROC3, n3) * 3 + pd.rolling_sum(ROC4, n4) * 4, name = 'KST_' + str(r1) + '_' + str(r2) + '_' + str(r3) + '_' + str(r4) + '_' + str(n1) + '_' + str(n2) + '_' + str(n3) + '_' + str(n4)) df = df.join(KST) return df # True Strength Index def TSI(df, r, s): M = pd.Series(df['Close'].diff(1)) aM = abs(M) EMA1 = pd.Series(pd.ewma(M, span = r, min_periods = r - 1)) aEMA1 = pd.Series(pd.ewma(aM, span = r, min_periods = r - 1)) EMA2 = pd.Series(pd.ewma(EMA1, span = s, min_periods = s - 1)) aEMA2 = pd.Series(pd.ewma(aEMA1, span = s, min_periods = s - 1)) TSI = pd.Series(EMA2 / aEMA2, name = 'TSI_' + str(r) + '_' + str(s)) df = df.join(TSI) return df # Accumulation/Distribution def ACCDIST(df, n): ad = (2 * df['Close'] - df['High'] - df['Low']) / (df['High'] - df['Low']) * df['Volume'] M = ad.diff(n - 1) N = ad.shift(n - 1) ROC = M / N AD = pd.Series(ROC, name = 'Acc/Dist_ROC_' + str(n)) df = df.join(AD) return df # Force Index def FORCE(df, n): F = pd.Series(df['Close'].diff(n) * df['Volume'].diff(n), name = 'Force_' + str(n)) df = df.join(F) return df # Ease of Movement def EOM(df, n): EoM = (df['High'].diff(1) + df['Low'].diff(1)) * (df['High'] - df['Low']) / (2 * df['Volume']) Eom_ma = pd.Series(pd.rolling_mean(EoM, n), name = 'EoM_' + str(n)) df = df.join(Eom_ma) return df # Coppock Curve def COPP(df, n): M = df['Close'].diff(int(n * 11 / 10) - 1) N = df['Close'].shift(int(n * 11 / 10) - 1) ROC1 = M / N M = df['Close'].diff(int(n * 14 / 10) - 1) N = df['Close'].shift(int(n * 14 / 10) - 1) ROC2 = M / N Copp = pd.Series(pd.ewma(ROC1 + ROC2, span = n, min_periods = n), name = 'Copp_' + str(n)) df = df.join(Copp) return df # Keltner Channel def KELCH(df, n): KelChM = pd.Series(pd.rolling_mean((df['High'] + df['Low'] + df['Close']) / 3, n), name = 'KelChM_' + str(n)) KelChU = pd.Series(pd.rolling_mean((4 * df['High'] - 2 * df['Low'] + df['Close']) / 3, n), name = 'KelChU_' + str(n)) KelChD = pd.Series(pd.rolling_mean((-2 * df['High'] + 4 * df['Low'] + df['Close']) / 3, n), name = 'KelChD_' + str(n)) df = df.join(KelChM) df = df.join(KelChU) df = df.join(KelChD) return df # Donchian Channel def DONCH(low, high, timeperiod: int = 20): if len(high) != len(low): return [], [] dc_low = [] dc_high = [] for i in range(0, len(high)): if i < timeperiod - 1: dc_low.append(np.nan) dc_high.append(np.nan) else: min_list = low.ix[i - (timeperiod - 1): i] max_list = high.ix[i - (timeperiod - 1): i] if len(min_list) == 0 or len(max_list) == 0: dc_low.append(np.nan) dc_high.append(np.nan) else: dc_min = min(min_list) dc_max = max(max_list) dc_low.append(dc_min) dc_high.append(dc_max) return dc_low, dc_high
以上所述就是小编给大家介绍的《python3 一些 talib 没有的 indicators》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTML5权威指南
[美] Adam Freeman / 谢廷晟、牛化成、刘美英 / 人民邮电出版社 / 2014-1 / 129.00元
《HTML5 权威指南》是系统学习网页设计的权威参考图书。本书分为五部分:第一部分介绍学习本书的预备知识和HTML、CSS 和JavaScript 的最新进展;第二部分讨论HTML 元素,并详细说明了HTML5中新增和修改的元素;第三部分阐述CSS,涵盖了所有控制内容样式的CSS 选择器和属性,并辅以大量代码示例和图示;第四部分介绍DOM,剖析如何用JavaScript 操纵HTML 内容;第五部......一起来看看 《HTML5权威指南》 这本书的介绍吧!