TA-Lib

  • 1  talib指标一览
  • 2  准备数据
  • 3  指标说明
    • 3.1  overlap studies (交叉分析)
      • 3.1.1  基础平均函数
        • 3.1.1.1  MA(移动平均线)
        • 3.1.1.2  参数 MA_Type
      • 3.1.2  简单移动平均
        • 3.1.2.1  SMA
        • 3.1.2.2  MAVP
        • 3.1.2.3  TRIMA
      • 3.1.3  指数移动平均
        • 3.1.3.1  EMA
        • 3.1.3.2  DEMA
        • 3.1.3.3  TEMA
        • 3.1.3.4  T3
      • 3.1.4  加权移动平均
        • 3.1.4.1  WMA
        • 3.1.4.2  HT_TRENDLINE
      • 3.1.5  自适应移动平均
        • 3.1.5.1  MAMA
        • 3.1.5.2  KAMA
      • 3.1.6  中间价格
        • 3.1.6.1  MIDPRICE
        • 3.1.6.2  MIDPOINT
      • 3.1.7  方向判断
        • 3.1.7.1  BBANDS
        • 3.1.7.2  SAR
        • 3.1.7.3  SAREXT
        • 3.1.7.4  ADX

talib指标一览¶

In [231]:
%run talibdata.py
print(talib.get_functions())
print('-'*150)
print(talib.get_function_groups())
['HT_DCPERIOD', 'HT_DCPHASE', 'HT_PHASOR', 'HT_SINE', 'HT_TRENDMODE', 'ADD', 'DIV', 'MAX', 'MAXINDEX', 'MIN', 'MININDEX', 'MINMAX', 'MINMAXINDEX', 'MULT', 'SUB', 'SUM', 'ACOS', 'ASIN', 'ATAN', 'CEIL', 'COS', 'COSH', 'EXP', 'FLOOR', 'LN', 'LOG10', 'SIN', 'SINH', 'SQRT', 'TAN', 'TANH', 'ADX', 'ADXR', 'APO', 'AROON', 'AROONOSC', 'BOP', 'CCI', 'CMO', 'DX', 'MACD', 'MACDEXT', 'MACDFIX', 'MFI', 'MINUS_DI', 'MINUS_DM', 'MOM', 'PLUS_DI', 'PLUS_DM', 'PPO', 'ROC', 'ROCP', 'ROCR', 'ROCR100', 'RSI', 'STOCH', 'STOCHF', 'STOCHRSI', 'TRIX', 'ULTOSC', 'WILLR', 'BBANDS', 'DEMA', 'EMA', 'HT_TRENDLINE', 'KAMA', 'MA', 'MAMA', 'MAVP', 'MIDPOINT', 'MIDPRICE', 'SAR', 'SAREXT', 'SMA', 'T3', 'TEMA', 'TRIMA', 'WMA', 'CDL2CROWS', 'CDL3BLACKCROWS', 'CDL3INSIDE', 'CDL3LINESTRIKE', 'CDL3OUTSIDE', 'CDL3STARSINSOUTH', 'CDL3WHITESOLDIERS', 'CDLABANDONEDBABY', 'CDLADVANCEBLOCK', 'CDLBELTHOLD', 'CDLBREAKAWAY', 'CDLCLOSINGMARUBOZU', 'CDLCONCEALBABYSWALL', 'CDLCOUNTERATTACK', 'CDLDARKCLOUDCOVER', 'CDLDOJI', 'CDLDOJISTAR', 'CDLDRAGONFLYDOJI', 'CDLENGULFING', 'CDLEVENINGDOJISTAR', 'CDLEVENINGSTAR', 'CDLGAPSIDESIDEWHITE', 'CDLGRAVESTONEDOJI', 'CDLHAMMER', 'CDLHANGINGMAN', 'CDLHARAMI', 'CDLHARAMICROSS', 'CDLHIGHWAVE', 'CDLHIKKAKE', 'CDLHIKKAKEMOD', 'CDLHOMINGPIGEON', 'CDLIDENTICAL3CROWS', 'CDLINNECK', 'CDLINVERTEDHAMMER', 'CDLKICKING', 'CDLKICKINGBYLENGTH', 'CDLLADDERBOTTOM', 'CDLLONGLEGGEDDOJI', 'CDLLONGLINE', 'CDLMARUBOZU', 'CDLMATCHINGLOW', 'CDLMATHOLD', 'CDLMORNINGDOJISTAR', 'CDLMORNINGSTAR', 'CDLONNECK', 'CDLPIERCING', 'CDLRICKSHAWMAN', 'CDLRISEFALL3METHODS', 'CDLSEPARATINGLINES', 'CDLSHOOTINGSTAR', 'CDLSHORTLINE', 'CDLSPINNINGTOP', 'CDLSTALLEDPATTERN', 'CDLSTICKSANDWICH', 'CDLTAKURI', 'CDLTASUKIGAP', 'CDLTHRUSTING', 'CDLTRISTAR', 'CDLUNIQUE3RIVER', 'CDLUPSIDEGAP2CROWS', 'CDLXSIDEGAP3METHODS', 'AVGPRICE', 'MEDPRICE', 'TYPPRICE', 'WCLPRICE', 'BETA', 'CORREL', 'LINEARREG', 'LINEARREG_ANGLE', 'LINEARREG_INTERCEPT', 'LINEARREG_SLOPE', 'STDDEV', 'TSF', 'VAR', 'ATR', 'NATR', 'TRANGE', 'AD', 'ADOSC', 'OBV']
------------------------------------------------------------------------------------------------------------------------------------------------------
{'Cycle Indicators': ['HT_DCPERIOD', 'HT_DCPHASE', 'HT_PHASOR', 'HT_SINE', 'HT_TRENDMODE'], 'Math Operators': ['ADD', 'DIV', 'MAX', 'MAXINDEX', 'MIN', 'MININDEX', 'MINMAX', 'MINMAXINDEX', 'MULT', 'SUB', 'SUM'], 'Math Transform': ['ACOS', 'ASIN', 'ATAN', 'CEIL', 'COS', 'COSH', 'EXP', 'FLOOR', 'LN', 'LOG10', 'SIN', 'SINH', 'SQRT', 'TAN', 'TANH'], 'Momentum Indicators': ['ADX', 'ADXR', 'APO', 'AROON', 'AROONOSC', 'BOP', 'CCI', 'CMO', 'DX', 'MACD', 'MACDEXT', 'MACDFIX', 'MFI', 'MINUS_DI', 'MINUS_DM', 'MOM', 'PLUS_DI', 'PLUS_DM', 'PPO', 'ROC', 'ROCP', 'ROCR', 'ROCR100', 'RSI', 'STOCH', 'STOCHF', 'STOCHRSI', 'TRIX', 'ULTOSC', 'WILLR'], 'Overlap Studies': ['BBANDS', 'DEMA', 'EMA', 'HT_TRENDLINE', 'KAMA', 'MA', 'MAMA', 'MAVP', 'MIDPOINT', 'MIDPRICE', 'SAR', 'SAREXT', 'SMA', 'T3', 'TEMA', 'TRIMA', 'WMA'], 'Pattern Recognition': ['CDL2CROWS', 'CDL3BLACKCROWS', 'CDL3INSIDE', 'CDL3LINESTRIKE', 'CDL3OUTSIDE', 'CDL3STARSINSOUTH', 'CDL3WHITESOLDIERS', 'CDLABANDONEDBABY', 'CDLADVANCEBLOCK', 'CDLBELTHOLD', 'CDLBREAKAWAY', 'CDLCLOSINGMARUBOZU', 'CDLCONCEALBABYSWALL', 'CDLCOUNTERATTACK', 'CDLDARKCLOUDCOVER', 'CDLDOJI', 'CDLDOJISTAR', 'CDLDRAGONFLYDOJI', 'CDLENGULFING', 'CDLEVENINGDOJISTAR', 'CDLEVENINGSTAR', 'CDLGAPSIDESIDEWHITE', 'CDLGRAVESTONEDOJI', 'CDLHAMMER', 'CDLHANGINGMAN', 'CDLHARAMI', 'CDLHARAMICROSS', 'CDLHIGHWAVE', 'CDLHIKKAKE', 'CDLHIKKAKEMOD', 'CDLHOMINGPIGEON', 'CDLIDENTICAL3CROWS', 'CDLINNECK', 'CDLINVERTEDHAMMER', 'CDLKICKING', 'CDLKICKINGBYLENGTH', 'CDLLADDERBOTTOM', 'CDLLONGLEGGEDDOJI', 'CDLLONGLINE', 'CDLMARUBOZU', 'CDLMATCHINGLOW', 'CDLMATHOLD', 'CDLMORNINGDOJISTAR', 'CDLMORNINGSTAR', 'CDLONNECK', 'CDLPIERCING', 'CDLRICKSHAWMAN', 'CDLRISEFALL3METHODS', 'CDLSEPARATINGLINES', 'CDLSHOOTINGSTAR', 'CDLSHORTLINE', 'CDLSPINNINGTOP', 'CDLSTALLEDPATTERN', 'CDLSTICKSANDWICH', 'CDLTAKURI', 'CDLTASUKIGAP', 'CDLTHRUSTING', 'CDLTRISTAR', 'CDLUNIQUE3RIVER', 'CDLUPSIDEGAP2CROWS', 'CDLXSIDEGAP3METHODS'], 'Price Transform': ['AVGPRICE', 'MEDPRICE', 'TYPPRICE', 'WCLPRICE'], 'Statistic Functions': ['BETA', 'CORREL', 'LINEARREG', 'LINEARREG_ANGLE', 'LINEARREG_INTERCEPT', 'LINEARREG_SLOPE', 'STDDEV', 'TSF', 'VAR'], 'Volatility Indicators': ['ATR', 'NATR', 'TRANGE'], 'Volume Indicators': ['AD', 'ADOSC', 'OBV']}

准备数据¶

In [232]:
df = mydata()
#print(pd.concat([df.head(), df.tail()]))
df = df[['date','close']]
df.set_index('date', inplace=True)
close = df.close
pd.concat([df.head(), df.tail()])
Out[232]:
close
date
2020-01-02 6.94
2020-01-03 6.94
2020-01-06 6.95
2020-01-07 6.98
2020-01-08 6.89
2023-09-22 7.37
2023-09-25 7.30
2023-09-26 7.26
2023-09-27 7.30
2023-09-28 7.33

指标说明¶

overlap studies (交叉分析)¶

  • 这种类型的指标使用移动平均线、布林带等技术分析工具,通过计算不同时间段内价格的平均值和标准差等统计量,来判断价格趋势、支撑/阻力位等。
In [233]:
talib.get_function_groups()['Overlap Studies']
Out[233]:
['BBANDS',
 'DEMA',
 'EMA',
 'HT_TRENDLINE',
 'KAMA',
 'MA',
 'MAMA',
 'MAVP',
 'MIDPOINT',
 'MIDPRICE',
 'SAR',
 'SAREXT',
 'SMA',
 'T3',
 'TEMA',
 'TRIMA',
 'WMA']

基础平均函数¶

MA(移动平均线)¶

  • Moving average
  • MA(close, timeperiod = 30, matype=0)
  • MA 是一种基本的技术分析指标,它通过计算一段时间内的价格平均值来平滑价格的波动。
  • MA 可以用于识别价格的趋势和支撑/阻力位。

参数 MA_Type¶

  • from talib import MA_Type
  • 根据参数 MA_Type 决定不同加权方式
  • 使用不一样的加权方式对数据进行处理
  • MA_Type:(Default=SMA)
    • 0 = SMA,
    • 1 = EMA,
    • 2 = WMA,
    • 3 = DEMA,
    • 4 = TEMA,
    • 5 = TRIMA,
    • 6 = KAMA,
    • 7 = MAMA,
    • 8 = T3
In [234]:
abstract.MA
Out[234]:
{'name': 'MA', 'group': 'Overlap Studies', 'display_name': 'Moving average', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 5), ('matype', 0)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [235]:
df_c= df.copy()
df_c['ma30'] = MA(close, timeperiod=30, matype=0)
print(pd.concat([df_c.head(), df_c.tail()]))
df_c.plot(figsize=(16,8),title='Moving average', xlabel='date', ylabel='close')
            close  ma30
date                   
2020-01-02   6.94   NaN
2020-01-03   6.94   NaN
2020-01-06   6.95   NaN
2020-01-07   6.98   NaN
2020-01-08   6.89   NaN
2023-09-22   7.37  7.51
2023-09-25   7.30  7.49
2023-09-26   7.26  7.47
2023-09-27   7.30  7.45
2023-09-28   7.33  7.44
Out[235]:
<AxesSubplot:title={'center':'Moving average'}, xlabel='date', ylabel='close'>

简单移动平均¶

SMA¶

  • Simple Moving Average
  • SMA(close, timeperiod=30)
  • SMA 是一种基本的移动平均线,它通过计算一段时间内的价格平均值来平滑价格的波动。
    • 移动平均线用于平滑数组中的数据,可以帮助消除噪音和识别趋势。
    • 简单移动平均线是移动平均线的最简单形式,每个输出值都是前 n 个值的平均值。
    • 在简单移动平均线中,时间段内的每个值都具有相同的权重,时间段外的值不包括在平均值中。
    • 这使得它对最近的数据变化的响应速度变慢,这对于过滤掉这些变化很有用。
  • SMA 可以用于识别价格的趋势和支撑/阻力位。
  • talib.SMA(a,b)
    • a:要计算平均数的序列
    • b:计算平均线的周期
      • 默认计算 30 天的移动平均数
  • 将每日得到的平均值连成一线并随时间移动
  • 以5天移动平均线为例,公式如下:
    • $SMA = \frac{c_1+c_2+c_3+c_4+c_5}{5}$
  • 一般公式:
    • $SMA = \frac{c_1+c_2+c_3+...+c_n}{n}$
    • $C_n$: 第 n 日收盘价
    • $n$: 移动平均数周期
In [236]:
abstract.SMA
Out[236]:
{'name': 'SMA', 'group': 'Overlap Studies', 'display_name': 'Simple Moving Average', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 30)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [237]:
df_c= df.copy()
df_c['sma30'] = SMA(close, timeperiod=30)
print(pd.concat([df_c.head(), df_c.tail()]))
df_c.plot(figsize=(16,8),title='Simple Moving Average', xlabel='date', ylabel='close')
            close  sma30
date                    
2020-01-02   6.94    NaN
2020-01-03   6.94    NaN
2020-01-06   6.95    NaN
2020-01-07   6.98    NaN
2020-01-08   6.89    NaN
2023-09-22   7.37   7.51
2023-09-25   7.30   7.49
2023-09-26   7.26   7.47
2023-09-27   7.30   7.45
2023-09-28   7.33   7.44
Out[237]:
<AxesSubplot:title={'center':'Simple Moving Average'}, xlabel='date', ylabel='close'>

MAVP¶

  • Moving average with variable period 可变周期移动平均
  • MAVP(close, periods, minperiod=2, maxperiod=30, matype=0)
  • MAVP 是一 种具有可变周期的移动平均线,它可以通过调整自身的周期来适应市场的变化。
  • MAVP 可以在不同市场状况下自适应地调整自身的周期, 因此在长期交易中比较常用。
  • MAVP指标是根据市场波动灵活调整的移动平均线,以帮助我们追踪价格走势。
    • 当市场波动大时,它会缩短移动平均线的周期,使跟踪更加紧密;
    • 当市场波动小时,它会增加移动平均线的周期,扩大跟踪范围。
  • MAVP指标不仅可以帮助我们分析市场趋势,还能为我们提供买入和卖出的信号
    • 当价格上穿MAVP指标时,这是一个绝佳的买入时机
    • 相反,当价格下穿MAVP指标时,这是一个卖出的良机
  • 用法
    • 输入一个价格数组和一个长度相同的periods数组。
    • 输出价格数组是在该点使用指定期间的移动平均值。
  • 源码
    while (t <= endIdx):
      if period[t] < minperiod:
          period_temp = minperiod
      elif period[t] > maxperiod:
          period_temp = maxperiod
      else:
          period_temp = period[t]
      MAVP[t] = SMA(CLOSE[t - period_temp : t], period_temp)
      t += 1
In [238]:
# 与SMA对照
# 将periods设定为固定值30,则效果应与SMA(close,30)完全相同
periods = [30 for i in range(len(df_c))]
periods = np.array(periods, dtype=float)
df_c['mavp'] = MAVP(df_c.close, periods, minperiod=2, maxperiod=30, matype=0)
pd.concat([df_c.head(), df_c.tail()])
Out[238]:
close sma30 mavp
date
2020-01-02 6.94 NaN NaN
2020-01-03 6.94 NaN NaN
2020-01-06 6.95 NaN NaN
2020-01-07 6.98 NaN NaN
2020-01-08 6.89 NaN NaN
2023-09-22 7.37 7.51 7.51
2023-09-25 7.30 7.49 7.49
2023-09-26 7.26 7.47 7.47
2023-09-27 7.30 7.45 7.45
2023-09-28 7.33 7.44 7.44
In [239]:
df_c.plot(figsize=(16,8),title='Moving average with variable period', xlabel='date', ylabel='close')
Out[239]:
<AxesSubplot:title={'center':'Moving average with variable period'}, xlabel='date', ylabel='close'>
In [240]:
# 准备特定数据,加入一列:换手率
df_mavp = mydata()
#print(pd.concat([df_mavp.head(), df_mavp.tail()]))
df_mavp = df_mavp[['date','close', 'hsl']]
df_mavp['hsl_cof'] = df_mavp['hsl'].apply(lambda x: float(10/x))
df_mavp['hsl'] = df_mavp['hsl'].apply(lambda x: float(100*x))
df_mavp.set_index('date', inplace=True)
close = df_mavp.close
pd.concat([df_mavp.head(), df_mavp.tail()])
Out[240]:
close hsl hsl_cof
date
2020-01-02 6.94 44.00 22.73
2020-01-03 6.94 32.00 31.25
2020-01-06 6.95 46.00 21.74
2020-01-07 6.98 36.00 27.78
2020-01-08 6.89 38.00 26.32
2023-09-22 7.37 32.00 31.25
2023-09-25 7.30 22.00 45.45
2023-09-26 7.26 17.00 58.82
2023-09-27 7.30 18.00 55.56
2023-09-28 7.33 23.00 43.48
In [241]:
# 按照换手率的值配置 periods的值,以消除成交量的影响
# mavp_b:成交量大,则SMA的周期长
# mavp_b:成交量小,则SMA的周期短
# 效果是使曲线更为平滑
# mavp(换手率倒数):成交量大,则SMA的周期短
# mavp(换手率倒数):成交量小,则SMA的周期长
# 效果是使曲线更为拟合
#per = np.array(df_mavp['hsl'], dtype=float)
per = df_mavp['hsl'].values
df_mavp['mavp_b'] = MAVP(df_mavp.close, per, minperiod=2, maxperiod=90, matype=0)
periods = np.array(df_mavp['hsl_cof'], dtype=float)
df_mavp['mavp'] = MAVP(df_mavp.close, periods, minperiod=2, maxperiod=90, matype=0)
df_mavp = df_mavp[['close','mavp_b','mavp']]
pd.concat([df_mavp.head(2), df_mavp.tail(8)])
Out[241]:
close mavp_b mavp
date
2020-01-02 6.94 NaN NaN
2020-01-03 6.94 NaN NaN
2023-09-19 7.40 7.43 7.84
2023-09-20 7.38 7.42 7.86
2023-09-21 7.29 7.45 7.69
2023-09-22 7.37 7.54 7.52
2023-09-25 7.30 7.42 7.68
2023-09-26 7.26 7.40 7.72
2023-09-27 7.30 7.40 7.68
2023-09-28 7.33 7.40 7.62
In [242]:
df_mavp.plot(figsize=(16,8),title='Moving average with variable period', xlabel='date', ylabel='close')
Out[242]:
<AxesSubplot:title={'center':'Moving average with variable period'}, xlabel='date', ylabel='close'>

TRIMA¶

  • Triangular Moving Average
  • TRIMA(close, timeperiod=30)
  • TRIMA 是一种计算一段时间内价格的加权平均值的指标,它的加权方式呈三角形。
    • 三角移动平均线是加权移动平均线的一种形式,其中权重以三角形模式分配。
    • 例如
      • 7 个周期的三角移动平均线的权重为 1, 2, 3, 4, 3, 2, 1
      • 这为时间序列的中间提供了更多的权重,而对最旧和最新的数据给予了更少的权重。
  • TRIMA 可以用于识别价格的趋势和支撑/阻力位。
图形示例¶
  • 灰色部分显示为三角形
  • SMA(SMA(CLOSE, timeperiod=ceil(n/2)), timeperiod=floor(n/2)+1)
  • 代码实现
    from math import ceil, floor
    TRIMA = (close.rolling(ceil(n/2)).mean().rolling(floor(n/2) + 1).mean()
In [243]:
from IPython import display
from base64 import b64decode
# http://www.mf2.cn/img2base64/
In [244]:
im = '/9j/4AAQSkZJRgABAQEAeAB4AAD/4RDgRXhpZgAATU0AKgAAAAgABAE7AAIAAAAHAAAISodpAAQAAAABAAAIUpydAAEAAAAOAAAQyuocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEphc3BlcgAAAAWQAwACAAAAFAAAEKCQBAACAAAAFAAAELSSkQACAAAAAzg3AACSkgACAAAAAzg3AADqHAAHAAAIDAAACJQAAAAAHOoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyMDIzOjA5OjMwIDE4OjMxOjQ0ADIwMjM6MDk6MzAgMTg6MzE6NDQAAABKAGEAcwBwAGUAcgAAAP/hCxlodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIi8+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPjx4bXA6Q3JlYXRlRGF0ZT4yMDIzLTA5LTMwVDE4OjMxOjQ0Ljg2NTwveG1wOkNyZWF0ZURhdGU+PC9yZGY6RGVzY3JpcHRpb24+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPjxkYzpjcmVhdG9yPjxyZGY6U2VxIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpsaT5KYXNwZXI8L3JkZjpsaT48L3JkZjpTZXE+DQoJCQk8L2RjOmNyZWF0b3I+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSd3Jz8+/9sAQwAHBQUGBQQHBgUG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'
display.HTML(f'<img src="data:image/jpg;base64,{ im }" />')
Out[244]:
In [245]:
abstract.TRIMA
Out[245]:
{'name': 'TRIMA', 'group': 'Overlap Studies', 'display_name': 'Triangular Moving Average', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 30)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [246]:
#df_c= df.tail(16)
# print(df_c)
df_c=df.copy()
df_c=df_c.tail(300)
close=df_c.close
# 三种计算结果完全吻合
df_c['tr_sma7'] = SMA(SMA(close, timeperiod=ceil(7/2)),timeperiod=floor(7/2+1))
df_c['rolling_7'] = close.rolling(ceil(7/2)).mean().rolling(floor(7/2)+1).mean()
df_c['trima7'] = TRIMA(close, timeperiod=7)
print(pd.concat([df_c.head(2), df_c.tail(18)]))
df_c.plot(figsize=(16,8),title='Simple Moving Average', xlabel='date', ylabel='close')
            close  tr_sma7  rolling_7  trima7
date                                         
2022-07-12   8.69      NaN        NaN     NaN
2022-07-13   8.71      NaN        NaN     NaN
2023-09-05   7.46     7.42       7.42    7.42
2023-09-06   7.52     7.42       7.42    7.42
2023-09-07   7.41     7.44       7.44    7.44
2023-09-08   7.33     7.45       7.45    7.45
2023-09-11   7.45     7.45       7.45    7.45
2023-09-12   7.47     7.44       7.44    7.44
2023-09-13   7.42     7.42       7.42    7.42
2023-09-14   7.43     7.43       7.43    7.43
2023-09-15   7.44     7.43       7.43    7.43
2023-09-18   7.43     7.43       7.43    7.43
2023-09-19   7.40     7.43       7.43    7.43
2023-09-20   7.38     7.43       7.43    7.43
2023-09-21   7.29     7.41       7.41    7.41
2023-09-22   7.37     7.39       7.39    7.39
2023-09-25   7.30     7.37       7.37    7.37
2023-09-26   7.26     7.34       7.34    7.34
2023-09-27   7.30     7.33       7.33    7.33
2023-09-28   7.33     7.31       7.31    7.31
Out[246]:
<AxesSubplot:title={'center':'Simple Moving Average'}, xlabel='date', ylabel='close'>

指数移动平均¶

EMA¶

  • Exponential Moving Average 指数移动平均线
  • EMA(close, timeperiod=30)
  • EMA =(当日或当期收盘价 - 上一日或上期EMA)/ N + 上一日或上期EMA
    • 其中
      • 首次上期EMA值为上一期收盘价
      • N为天数
    • $EMA_{t} =K×CLOSE_{t} +(1−K)×EMA_{t-1}$
      • 其中平滑系数默认为K = 2 / ( t + 1 )
  • EMA 是一种趋向类指标,一种平滑的(指数)移动平均线,它对每个价格点的权值进行指数级别的衰减,以更好地捕捉价格的趋势。
  • EMA 可以更快地反应价格趋势的变化,因此在短期交易中比较常用。
    • 当要比较数值与均价的关系时,用 MA 就可以了
    • 而要比较均价的趋势快慢时,用 EMA 更稳定
    • 有时,在均价值不重要时,也用 EMA 来平滑和美观曲线
  • 以指数式递减加权的移动平均
  • 各数值的加权影响力随时间而指数式递减,越近期的数据加权影响力越重,但较旧的数据也给予一定的加权值
  • EMA指标由于其计算公式中着重考虑了价格当天(当期)行情的权重,因此在使用中可克服MACD其他指标信号对于价格走势的滞后性
  • 同时也在一定程度中消除了DMA指标在某些时候对于价格走势所产生的信号提前性,是一个非常有效的分析指标

  • EMA 特点

    • 由于后期的k线价格在计算均价时,比重更大
    • 所以相同参数EMA比MA更加激进,产生的变盘信号、交易信号都更加激进
  • 指数移动平均线是技术分析的主要内容,用于无数技术指标。

  • 在简单移动平均线中,时间段内的每个值都具有相同的权重,时间段外的值不包括在平均值中。
  • 但是,指数移动平均线是一种累积计算,包括所有数据。
  • 过去的值对平均值的贡献越来越小,而最近的值有更大的贡献。
  • 这种方法允许移动平均线对数据的变化更敏感。
In [247]:
abstract.EMA
Out[247]:
{'name': 'EMA', 'group': 'Overlap Studies', 'display_name': 'Exponential Moving Average', 'function_flags': ['Output scale same as input', 'Function has an unstable period'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 30)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [248]:
df_c=df.copy()
df_c=df_c.tail(300)
close=df_c.close
df_c['sma30'] = SMA(close, timeperiod =30)
df_c['ema30'] = EMA(close, timeperiod=30)
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='Exponential Moving Average', xlabel='date', ylabel='close')
            close  sma30  ema30
date                           
2022-07-12   8.69    NaN    NaN
2022-07-13   8.71    NaN    NaN
2023-09-19   7.40   7.58   7.58
2023-09-20   7.38   7.55   7.56
2023-09-21   7.29   7.53   7.55
2023-09-22   7.37   7.51   7.53
2023-09-25   7.30   7.49   7.52
2023-09-26   7.26   7.47   7.50
2023-09-27   7.30   7.45   7.49
2023-09-28   7.33   7.44   7.48
Out[248]:
<AxesSubplot:title={'center':'Exponential Moving Average'}, xlabel='date', ylabel='close'>

DEMA¶

  • Double Exponential Moving Average 双指数移动平均
  • DEMA(close, timeperiod=30)
  • DEMA=2×EMA(CLOSE)−EMA(EMA(CLOSE))
  • DEMA 是一种平滑的(指数)移动平均线,它通过对价格的平均值计算两次来消除价格波动的噪音。
  • DEMA可以更快地反应价格趋势的变化,因此在短期交易中比较常用。
  • DEMA 是一个平滑指标,其滞后小于直线指数移动平均线。
  • DEMA 是双指数移动平均线的首字母缩写,但计算比移动平均线的移动平均线更复杂。
In [249]:
abstract.DEMA
Out[249]:
{'name': 'DEMA', 'group': 'Overlap Studies', 'display_name': 'Double Exponential Moving Average', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 30)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [250]:
df_c=df.copy()
df_c=df_c.tail(300)
close=df_c.close
# 最后2种计算结果完全吻合
df_c['ema30'] = EMA(close, timeperiod=30)
df_c['dema30b'] = 2*EMA(close, timeperiod =30) - EMA(EMA(close,30),30)
df_c['dema30'] = DEMA(close, timeperiod =30)
#df_c['diff'] = 30*(df_c['dema30']-df_c['ema30'] )
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='Double Exponential Moving Average', xlabel='date', ylabel='close')
            close  ema30  dema30b  dema30
date                                     
2022-07-12   8.69    NaN      NaN     NaN
2022-07-13   8.71    NaN      NaN     NaN
2023-09-19   7.40   7.58     7.35    7.35
2023-09-20   7.38   7.56     7.34    7.34
2023-09-21   7.29   7.55     7.32    7.32
2023-09-22   7.37   7.53     7.31    7.31
2023-09-25   7.30   7.52     7.30    7.30
2023-09-26   7.26   7.50     7.28    7.28
2023-09-27   7.30   7.49     7.27    7.27
2023-09-28   7.33   7.48     7.26    7.26
Out[250]:
<AxesSubplot:title={'center':'Double Exponential Moving Average'}, xlabel='date', ylabel='close'>

TEMA¶

  • Triple Exponential Moving Average 三重指数移动平均线
  • TEMA(close, timeperiod=30)
  • TEMA=3×EMA(CLOSE)−3×EMA(EMA(CLOSE)) + EMA(EMA(EMA(CLOSE)))
  • TEMA 是 一种三重指数移动平均线,它通过对价格进行三次平滑来消除价格波动的噪音。
  • TEMA 可以更快地反应价格趋势的变化,因此在短期交易中比较常用。
  • TEMA 是一个平滑指标,其滞后小于EMA。(曲线更陡峭,更快速地逼近曲线)
In [251]:
abstract.TEMA
Out[251]:
{'name': 'TEMA', 'group': 'Overlap Studies', 'display_name': 'Triple Exponential Moving Average', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 30)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [252]:
df_c=df.copy()
df_c=df_c.tail(200)
close=df_c.close
# 最后2种计算结果完全吻合
df_c['ema30'] = EMA(close, timeperiod=30)
df_c['dema30'] = DEMA(close, timeperiod =30)
df_c['tema30b'] = 3*EMA(close, timeperiod =30) - 3*EMA(EMA(close,30),30) + EMA(EMA(EMA(close,30),30) ,30)
df_c['tema30'] = TEMA(close, timeperiod =30)
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='Triple Exponential Moving Average', xlabel='date', ylabel='close')
            close  ema30  dema30  tema30b  tema30
date                                             
2022-12-07   8.19    NaN     NaN      NaN     NaN
2022-12-08   8.19    NaN     NaN      NaN     NaN
2023-09-19   7.40   7.58    7.35     7.33    7.33
2023-09-20   7.38   7.56    7.34     7.32    7.32
2023-09-21   7.29   7.55    7.32     7.30    7.30
2023-09-22   7.37   7.53    7.31     7.30    7.30
2023-09-25   7.30   7.52    7.30     7.29    7.29
2023-09-26   7.26   7.50    7.28     7.27    7.27
2023-09-27   7.30   7.49    7.27     7.26    7.26
2023-09-28   7.33   7.48    7.26     7.26    7.26
Out[252]:
<AxesSubplot:title={'center':'Triple Exponential Moving Average'}, xlabel='date', ylabel='close'>

T3¶

  • Triple Exponential Moving Average 三重双指数移动平均线
  • T3(close, timeperiod=30, vfactor=0.7)
  • T3 是一种三重指数移动平均线,它通过对价格进行三次平滑来消除价格波动的噪音。它是在双重指数移动平均线(Double Exponential Moving Average , DEMA)基础上进一步发展而来的。T3指标目的是通过消除双重指数移动平均线延迟的问题来提高移动平均线的响应能力。T3 可以更快地反应价格趋势的变化,因此在短期交易中比较常用。
  • T3 通常使用 0.7 的 vfactor。
  • T3 通过三次调用 GD 对数据序列进行三次平滑处理。
    • GD( dataseries) = EMA(dataseries) ×(1+ vfactor )− EMA(EMA(dataseries)) × vfactor
    • T3 = GD(GD(GD( dataseries )))
  • 计算原理
    • $EMA_{t} (CLOSE)=K×CLOSE_{t} +(1−K)×EMA_{t-1}$
      • 其中 $K = \frac{2}{( t + 1 )}$
    • $DEMA_{t}(CLOSE) = 2×EMA_{t}(CLOSE)−EMA_{t}(EMA_{t}(CLOSE))$
    • $T3$ 采用 $DEMA$ 计算并添加一个介于 $0$ 和 $1$ 之间的 $vfactor$。
      • 所得函数称为 $GD$,或广义 $DEMA$。
      • $vfactor$ 为 1 的 $GD$ 与 $DEMA$ 相同。
      • $vfactor$ 为 0 的 $GD$ 与 $EMA$ 相同
    • 具体计算过程
      #设定指数平滑系数K
      k = 2 / (timeperiod + 1)
      #初始化e1, e2, e3, e4, e5, e6
      e1[0] = mean(EMA(CLOSE[startIdx - 6 * timeperiod : startIdx]))
      e2[0] = mean(EMA(e1[startIdx - 5 * timeperiod : startIdx], k))
      e3[0] = mean(EMA(e2[startIdx - 4 * timeperiod : startIdx], k))
      e4[0] = mean(EMA(e3[startIdx - 3 * timeperiod : startIdx], k))
      e5[0] = mean(EMA(e4[startIdx - 2 * timeperiod : startIdx], k))
      e6[0] = mean(EMA(e5[startIdx - timeperiod : startIdx], k))
      # 计算系数
      # (a - b)^2 = a^3 - 3*a^2*b + 3*a*b^2 - b^3
      a = vfactor + 1
      b = vfactor
      c1 = -b * b * b
      c2 = 3 * a * b * b
      c3 = -3 * a * a * b
      c4 = a * a * a
      # c1 + c2 + c3 + c4 = 1
      #计算因子
      t = startIdx
      while (t <= endIdx):
      t += 1
      e1[t] = k * close[t] + (1 - k) * e1[t - 1]
      e2[t] = k * e1[t] + (1 - k) * e2[t - 1]
      e3[t] = k * e2[t] + (1 - k) * e3[t - 1]
      e4[t] = k * e3[t] + (1 - k) * e4[t - 1]
      e5[t] = k * e4[t] + (1 - k) * e5[t - 1]
      e6[t] = k * e5[t] + (1 - k) * e6[t - 1]
      T3[t] = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3
In [253]:
abstract.T3
Out[253]:
{'name': 'T3', 'group': 'Overlap Studies', 'display_name': 'Triple Exponential Moving Average (T3)', 'function_flags': ['Output scale same as input', 'Function has an unstable period'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 5), ('vfactor', 0.7)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [254]:
df_c=df.copy()
df_c=df_c.tail(300)
close=df_c.close
# vfactor: va 系数,当va=0时,T3就是三重EMA;va=1时,就是三重DEMA
df_c['3ema30'] = EMA(EMA(EMA(close, timeperiod =30), timeperiod =30), timeperiod =30)
df_c['t3_30_0'] = T3(close, timeperiod =30, vfactor=0.0)
df_c['3dema30'] = DEMA(DEMA(DEMA(close, timeperiod =30), timeperiod =30), timeperiod =30)
df_c['t3_30_1'] = T3(close, timeperiod =30, vfactor=1.0)
df_c['tema30'] = TEMA(close, timeperiod =30)
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='Triple D Exponential Moving Average', xlabel='date', ylabel='close')
            close  3ema30  t3_30_0  3dema30  t3_30_1  tema30
date                                                        
2022-07-12   8.69     NaN      NaN      NaN      NaN     NaN
2022-07-13   8.71     NaN      NaN      NaN      NaN     NaN
2023-09-19   7.40    8.01     8.01     7.38     7.38    7.33
2023-09-20   7.38    7.99     7.99     7.36     7.36    7.32
2023-09-21   7.29    7.98     7.98     7.34     7.34    7.30
2023-09-22   7.37    7.96     7.96     7.32     7.32    7.30
2023-09-25   7.30    7.95     7.95     7.30     7.30    7.29
2023-09-26   7.26    7.93     7.93     7.28     7.28    7.27
2023-09-27   7.30    7.92     7.92     7.26     7.26    7.26
2023-09-28   7.33    7.90     7.90     7.24     7.24    7.26
Out[254]:
<AxesSubplot:title={'center':'Triple D Exponential Moving Average'}, xlabel='date', ylabel='close'>

加权移动平均¶

WMA¶

  • Weighted Moving Average 加权移动平均线
  • WMA(close, timeperiod=30)
  • WMA 是一种加权移动平均线,它对每个价格点进行加权计算,以更好地捕捉价格的趋势。
  • WMA 可以用于识别价格的趋势和支撑/阻力位。
  • 加权移动平均线计算系列中每个值的权重。
  • 较新的值被分配更大的权重。
  • 加权移动平均线类似于简单移动平均线,因为它不是累积的,也就是说,它只包括时间段内的值(与指数移动平均线不同)。
  • 加权移动平均线类似于指数移动平均线,因为最近的数据对平均线的贡献更大。
  • 计算平均值时将个别数据乘以不同数值,在技术分析中,n日WMA的最近期一个数值乘以n、次近的乘以n-1,如此类推,一直到0
  • 线性加权移动平均线
    • $WMA = \frac{X_{1}*1+X_{2}*2+X_{3}*3+...+X_{n}*n}{1+2+3+...+n}$
In [255]:
abstract.WMA
Out[255]:
{'name': 'WMA', 'group': 'Overlap Studies', 'display_name': 'Weighted Moving Average', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 30)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
  • 假设$X1,X2,X3,X4,X5$为:$3、4、5、6、7$
  • $WMA(c,5)= \frac{1}{(1+2+3+4+5)}*X1 + \frac{2}{(1+2+3+4+5)}*X2 + \frac{3}{(1+2+3+4+5)}*X3 + \frac{4}{(1+2+3+4+5)}*X4 + \frac{5}{(1+2+3+4+5)}*X5 = \frac{(1*X1 + 2*X2 + 3*X3 + 4*X4 + 5*X5)}{(1+2+3+4+5)} = 5.66666667$
  • $MA(c,5) = $$\frac{(3+4+5+6+7)}{5}=5$
In [256]:
WMA(np.array([3,4,5,6,7,8], dtype=float), timeperiod=5)
Out[256]:
array([       nan,        nan,        nan,        nan, 5.66666667,
       6.66666667])
In [257]:
MA(np.array([3,4,5,6,7], dtype=float), timeperiod=5, matype=0)
Out[257]:
array([nan, nan, nan, nan,  5.])
In [258]:
df_c=df.copy()
df_c=df_c.tail(300)
close=df_c.close
df_c['ma30'] = MA(close, timeperiod =30, matype=0)
df_c['wma30'] = WMA(close, timeperiod =30)
df_c['ema30'] = EMA(close, timeperiod =30)
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='Weighted Moving Average', xlabel='date', ylabel='close')
            close  ma30  wma30  ema30
date                                 
2022-07-12   8.69   NaN    NaN    NaN
2022-07-13   8.71   NaN    NaN    NaN
2023-09-19   7.40  7.58   7.48   7.58
2023-09-20   7.38  7.55   7.46   7.56
2023-09-21   7.29  7.53   7.45   7.55
2023-09-22   7.37  7.51   7.44   7.53
2023-09-25   7.30  7.49   7.42   7.52
2023-09-26   7.26  7.47   7.41   7.50
2023-09-27   7.30  7.45   7.40   7.49
2023-09-28   7.33  7.44   7.39   7.48
Out[258]:
<AxesSubplot:title={'center':'Weighted Moving Average'}, xlabel='date', ylabel='close'>

HT_TRENDLINE¶

  • Hilbert Transform - Instantaneous Trendline 希尔伯特顺时变换
  • HT_TRENDLINE(close)
  • HT_TRENDLINE是一种基于Hilbert变换的指标,能够准确检测股票价格的瞬时周期和频率,为估计瞬时趋势提供依据。
    • 当瞬时周期变短时(趋势线下降),意味着趋势将进一步下跌;
    • 相反,趋势线上升则暗示着趋势可能发生反转。
    • 在数学和信号处理中,希尔伯特变换(Hilbert transform)是一个对函数u(t)产生定义域相同的函数H(u)(t)的线性算子。
    • 希尔伯特变换物理意义:把信号所有频率分量相位推迟90度。
      • 比如,cos(wt)经希尔伯特变换后为sin(wt)
  • HT_TRENDLINE(close)
  • 它可以为价格数据生成一个平滑的曲线,以便更好地显示价格的趋势和周期性。
  • 公式
    • $\frac{ 4xMA(n) + 3x MA_{-1} (n) + 2 x MA_{-2} (n) + 1 x MA_{-3}^{2} (n) }{4+3+2+1}$
  • 源码
    while today <= endIdx:
      tempReal = mean(close[-n:])
      iTrend1, iTrend2, iTrend3   = tempReal, iTrend1, iTrend2
      tempReal2 = (4.0*tempReal + 3.0*iTrend1 + 2.0*iTrend2 + iTrend3) / 10.0
      HT_TRENDLINE[today] = tempReal2;
      today += 1;
     }
In [259]:
abstract.HT_TRENDLINE
Out[259]:
{'name': 'HT_TRENDLINE', 'group': 'Overlap Studies', 'display_name': 'Hilbert Transform - Instantaneous Trendline', 'function_flags': ['Output scale same as input', 'Function has an unstable period'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict(), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [260]:
df_c=df.copy()
df_c=df_c.tail(300)
close=df_c.close
df_c['ht_trending'] = HT_TRENDLINE(close)
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='HT_TRENDLINE', xlabel='date', ylabel='close')
            close  ht_trending
date                          
2022-07-12   8.69          NaN
2022-07-13   8.71          NaN
2023-09-19   7.40         7.67
2023-09-20   7.38         7.63
2023-09-21   7.29         7.59
2023-09-22   7.37         7.55
2023-09-25   7.30         7.51
2023-09-26   7.26         7.48
2023-09-27   7.30         7.45
2023-09-28   7.33         7.42
Out[260]:
<AxesSubplot:title={'center':'HT_TRENDLINE'}, xlabel='date', ylabel='close'>

自适应移动平均¶

MAMA¶

  • MESA Adaptive Moving Average MESA自适应移动平均线
  • mama, fama = MAMA(close, timeperiod=30)
  • MAMA 是一种自适应的移动平均线,它可以根据市场的波动性和周期性来调整自身的周期,以更好地捕捉价格的趋势。
  • MAMA 可以在不同市场状况下自适应地调整自身的周期,因此在长期交易中比较常用。
  • 原理
    • 希尔伯特变换得到系数 $alpha$,再计算 $delta_{alpha}$,
    • 使用 $fastlimit$ 和 $slowlimit$ 对 $delta$ 进行约束调整。
    • $mama$ 相当于以 $delta$ 作为系数对 $close$ 指数移动平均
    • $fama$ 相当于以 $delta^{2}$ 作为系数对 $mama$ 的指数移动平均
  • 源码
    while(t <= endIdx):
      a[t] = HT()# 由希尔伯特变换计算出alpha
      d = a[t - 1] - a[t]
      # 用slowlimit和fastlimit对delta调整约束
      d = fastlimit if d <= 1.0 else (slowlimit if d < slowlimit else faselimit / d)
      # mama相当于以delta作为系数对close指数移动平均
      mama[t] = (d * close[t])+((1 - d) * mama[t - 1]); 
      # fama相当于以delta^2作为系数对mama的指数移动平均
      fama[t] = (d**2 * mama[t]) + ((1-d**2) * fama[t - 1]);
In [261]:
abstract.MAMA
Out[261]:
{'name': 'MAMA', 'group': 'Overlap Studies', 'display_name': 'MESA Adaptive Moving Average', 'function_flags': ['Output scale same as input', 'Function has an unstable period'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('fastlimit', 0.5), ('slowlimit', 0.05)]), 'output_flags': OrderedDict([('mama', ['Line']), ('fama', ['Dashed Line'])]), 'output_names': ['mama', 'fama']}
In [262]:
df_c=df.copy()
df_c=df_c.tail(300)
close=df_c.close
mama, fama = MAMA(close, timeperiod=30)
df_c['mama'] = mama
df_c['fama'] = fama
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='MESA Adaptive Moving Average', xlabel='date', ylabel='close')
            close  mama  fama
date                         
2022-07-12   8.69   NaN   NaN
2022-07-13   8.71   NaN   NaN
2023-09-19   7.40  7.42  7.51
2023-09-20   7.38  7.42  7.51
2023-09-21   7.29  7.41  7.50
2023-09-22   7.37  7.41  7.50
2023-09-25   7.30  7.36  7.47
2023-09-26   7.26  7.35  7.46
2023-09-27   7.30  7.34  7.46
2023-09-28   7.33  7.34  7.45
Out[262]:
<AxesSubplot:title={'center':'MESA Adaptive Moving Average'}, xlabel='date', ylabel='close'>

KAMA¶

  • Kaufman Adaptive Moving Average 考夫曼自适应移动平均线
  • KAMA(close, timeperiod=30)
  • KAMA 是一种自适应的移动平均线,它可以根据市场的波动性来调整自身的周期,以更好地捕捉价格的趋势。
  • KAMA 可以在不同市场状况下自适应地调整自身的周期,因此在长期交易中比较常用。
  • 源码 ``` _af = 2 / (2 + 1) _as = 2 / (30 + 1) KAMA = np.array([np.nan] len(X)) for i in range(d, len(X)): period_roc = X[i] - X[i - d] sum_roc = sum(abs(np.diff(X[i - d: i + 1]))) _er = 1.0 if ((period_roc >= sum_roc) or (sum_roc == 0)) else abs(period_roc / sum_roc) _at = (_er (_af - _as) + _as) * 2 KAMA[i] = _at X[i] + (1 - _at) * (KAMA[i - 1] if i != d else close[i - 1])

```

In [263]:
abstract.KAMA
Out[263]:
{'name': 'KAMA', 'group': 'Overlap Studies', 'display_name': 'Kaufman Adaptive Moving Average', 'function_flags': ['Output scale same as input', 'Function has an unstable period'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 30)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [264]:
df_c=df.copy()
df_c=df_c.tail(300)
close=df_c.close
df_c['kama'] = KAMA(close, timeperiod=30)
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='Kaufman Adaptive Moving Average', xlabel='date', ylabel='close')
            close  kama
date                   
2022-07-12   8.69   NaN
2022-07-13   8.71   NaN
2023-09-19   7.40  7.65
2023-09-20   7.38  7.63
2023-09-21   7.29  7.60
2023-09-22   7.37  7.59
2023-09-25   7.30  7.58
2023-09-26   7.26  7.56
2023-09-27   7.30  7.55
2023-09-28   7.33  7.54
Out[264]:
<AxesSubplot:title={'center':'Kaufman Adaptive Moving Average'}, xlabel='date', ylabel='close'>

中间价格¶

MIDPRICE¶

  • Midpoint Price over period
  • MIDPRICE(high, low, timeperiod=14)
  • MIDPRICE 是一种计算一段时间内价格的中间值的指标,同时也考虑了价格的波动范围。
  • MIDPRICE 可以用于识别价格的趋势和支撑/阻力位。
    while(t <= endIdx):
      lowest = min(LOW[t - timeperiod : t])
      highest = max(HIGH[t - timeperiod : t])
      MIDPRICE[t] = (lowest + highest) / 2
      t += 1
In [265]:
abstract.MIDPRICE
Out[265]:
{'name': 'MIDPRICE', 'group': 'Overlap Studies', 'display_name': 'Midpoint Price over period', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('prices', ['high', 'low'])]), 'parameters': OrderedDict([('timeperiod', 14)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [266]:
df = mydata()
df = df[['date','close', 'high','low']]
df.set_index('date', inplace=True)
df_c=df.copy()
df_c=df_c.tail(200)
high = df_c.high
low = df_c.low
df_c['midprice'] = MIDPRICE(high, low, timeperiod=14)
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='MIDPRICE', xlabel='date', ylabel='close')
            close  high  low  midprice
date                                  
2022-12-07   8.19  8.30 8.14       NaN
2022-12-08   8.19  8.22 8.12       NaN
2023-09-19   7.40  7.43 7.39      7.43
2023-09-20   7.38  7.42 7.38      7.43
2023-09-21   7.29  7.40 7.28      7.42
2023-09-22   7.37  7.37 7.20      7.38
2023-09-25   7.30  7.38 7.28      7.38
2023-09-26   7.26  7.30 7.24      7.36
2023-09-27   7.30  7.33 7.26      7.36
2023-09-28   7.33  7.37 7.31      7.36
Out[266]:
<AxesSubplot:title={'center':'MIDPRICE'}, xlabel='date', ylabel='close'>

MIDPOINT¶

  • MidPoint over period
  • MIDPOINT(close, timeperiod=14)
  • MIDPOINT 是一种计算一段时间内价格的中间值的指标。
  • 它可以用于识别价格的趋势和支撑/ 阻力位。
    while(t <= endIdx):
      lowest = min(CLOSE[t - timeperiod : t])
      highest = max(CLOSE[t - timeperiod : t])
      MIDPOINT[t] = (lowest + highest) / 2
      t += 1
In [267]:
abstract.MIDPOINT
Out[267]:
{'name': 'MIDPOINT', 'group': 'Overlap Studies', 'display_name': 'MidPoint over period', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 14)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [268]:
df = mydata()
df = df[['date','close']]
df.set_index('date', inplace=True)
df_c=df.copy()
df_c=df_c.tail(300)
close = df_c.close
df_c['midpoint'] = MIDPOINT(close, timeperiod=14)
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='MIDPOINT', xlabel='date', ylabel='close')
            close  midpoint
date                       
2022-07-12   8.69       NaN
2022-07-13   8.71       NaN
2023-09-19   7.40      7.42
2023-09-20   7.38      7.42
2023-09-21   7.29      7.40
2023-09-22   7.37      7.40
2023-09-25   7.30      7.40
2023-09-26   7.26      7.37
2023-09-27   7.30      7.37
2023-09-28   7.33      7.37
Out[268]:
<AxesSubplot:title={'center':'MIDPOINT'}, xlabel='date', ylabel='close'>
In [269]:
df = mydata()
df_c=df.copy()
df_c=df_c.tail(200)
close = df_c.close
high = df_c.high
low = df_c.low
df_c = df_c[['date','close']]
df_c.set_index('date', inplace=True)
df_c['midprice'] = MIDPRICE(high, low, timeperiod=14)
df_c['midpoint'] = MIDPOINT(close, timeperiod=14)
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='MIDPRICE & MIDPOINT', xlabel='date', ylabel='close')
            close  midprice  midpoint
date                                 
2022-12-07   8.19       NaN       NaN
2022-12-08   8.19       NaN       NaN
2023-09-19   7.40      7.43      7.42
2023-09-20   7.38      7.43      7.42
2023-09-21   7.29      7.42      7.40
2023-09-22   7.37      7.38      7.40
2023-09-25   7.30      7.38      7.40
2023-09-26   7.26      7.36      7.37
2023-09-27   7.30      7.36      7.37
2023-09-28   7.33      7.36      7.37
Out[269]:
<AxesSubplot:title={'center':'MIDPRICE & MIDPOINT'}, xlabel='date', ylabel='close'>

方向判断¶

BBANDS¶

  • Bollinger Bands 布林带
  • H_line,M_line,L_line=ta.BBANDS(df.close, timeperiod=24, nbdevup=2, nbdevdn=2, matype=1)
    • M_line(n)中轨:SMA(CLOSE, n)
    • H_line(n)上轨:MIDDLE+2×STD(CLOSE, n)
    • L_line(n)下轨:MIDDLE−2×STD(CLOSE, n)
  • Bollinger Bands 是一种基于价格统计的指标,由三条线组成,即中线和上下两条线。
  • 中线是一段时间内的简单移动平均线,上下两条线分别是中线加减一个标准差倍数。
  • 它可以用来展示价格波动的区间,以及价格在这个区间内的相对位置。
  • 布林带(Bollinger Bands)由约翰·布林先生创造
  • 利用统计原理,求出股价的标准差及其信赖区间,从而确定股价的波动范围及未来走势,利用波带显示股价的安全高低价位(其上下限范围不固定,随股价的滚动而变化)
  • 布林指标属于路径指标,股价波动在上限和下限的区间之内,这条带状区的宽窄,随着股价波动幅度的大小而变化,股价涨跌幅度加大时,带状区变宽,涨跌幅度狭小盘整时,带状区则变窄
    • 中轨线 = N日的移动平均线
    • 上轨线 = 中轨线 + K倍的标准差
    • 下轨线 =中轨线 - K倍的标准差(K为参数,一般默认为2)
    • 股价高于这个波动区间,即突破阻力线,说明股价虚高,卖出信号
    • 股价低于这个波动区间,即跌破支撑线,说明股价虚低,买入信号
In [270]:
abstract.BBANDS
Out[270]:
{'name': 'BBANDS', 'group': 'Overlap Studies', 'display_name': 'Bollinger Bands', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('price', 'close')]), 'parameters': OrderedDict([('timeperiod', 5), ('nbdevup', 2), ('nbdevdn', 2), ('matype', 0)]), 'output_flags': OrderedDict([('upperband', ['Values represent an upper limit']), ('middleband', ['Line']), ('lowerband', ['Values represent a lower limit'])]), 'output_names': ['upperband', 'middleband', 'lowerband']}
In [271]:
df = mydata()
df = df[['date','close']]
df.set_index('date', inplace=True)
df_c=df.copy()
df_c=df_c.tail(200)
close = df_c.close
H_line,M_line,L_line=ta.BBANDS(close, timeperiod=24, nbdevup=2, nbdevdn=2, matype=1)
df_c['H_line']=H_line
df_c['M_line']=M_line
df_c['L_line']=L_line
df_c.plot(figsize=(16,8),title='Bollinger Bands', xlabel='date', ylabel='close')
Out[271]:
<AxesSubplot:title={'center':'Bollinger Bands'}, xlabel='date', ylabel='close'>

SAR¶

  • Parabolic SAR 抛物线指标
  • SAR(high, low, acceleration=0, maximum=0)
  • SAR 是一种基于趋势反转的指标, 它用于识别价格的趋势,并在趋势反转时发出信号。
  • SAR 会随着价格的变化而变化,并在价格反转时发出信号。
  • 抛物线转向指标计算追踪止损。 只需在价格穿过 SAR 时退出。 SAR 假设您始终在市场中,并在您关闭多头头寸并打开空头头寸时计算止损和反转点,反之亦然。
In [272]:
abstract.SAR
Out[272]:
{'name': 'SAR', 'group': 'Overlap Studies', 'display_name': 'Parabolic SAR', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('prices', ['high', 'low'])]), 'parameters': OrderedDict([('acceleration', 0.02), ('maximum', 0.2)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [273]:
df = mydata()
df = df[['date','close', 'high','low']]
df.set_index('date', inplace=True)
df_c=df.copy()
df_c=df_c.tail(200)
high = df_c.high
low = df_c.low
df_c = df_c[['close']]
df_c['sar'] = SAR(high, low, acceleration=0.2, maximum=0.02) 
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='Parabolic SAR', xlabel='date', ylabel='close')
            close  sar
date                  
2022-12-07   8.19  NaN
2022-12-08   8.19 8.30
2023-09-19   7.40 7.98
2023-09-20   7.38 7.96
2023-09-21   7.29 7.95
2023-09-22   7.37 7.94
2023-09-25   7.30 7.92
2023-09-26   7.26 7.91
2023-09-27   7.30 7.89
2023-09-28   7.33 7.88
Out[273]:
<AxesSubplot:title={'center':'Parabolic SAR'}, xlabel='date', ylabel='close'>

SAREXT¶

  • Parabolic SAR - Extended 抛物线指标拓展
  • SAREXT(high, low, startvalue=0, offsetonreverse=0, accelerationinitlong=0, accelerationlong=0, accelerationmaxlong=0, accelerationinitshort=0, accelerationshort=0, accelerationmaxshort=0)
  • SAREXT 是一种扩展了的Parabolic SAR指标,它考虑了价格的波动范围和波动周期。
  • SAREXT 可以更好地捕捉价格的趋势,并在趋势反转时发出信号。
  • 逻辑SAR基本相似,只是加入了转向偏移量,并对不同方向的加速因子设置了不同参数和初始的方向。
In [274]:
abstract.SAREXT
Out[274]:
{'name': 'SAREXT', 'group': 'Overlap Studies', 'display_name': 'Parabolic SAR - Extended', 'function_flags': ['Output scale same as input'], 'input_names': OrderedDict([('prices', ['high', 'low'])]), 'parameters': OrderedDict([('startvalue', 0), ('offsetonreverse', 0), ('accelerationinitlong', 0.02), ('accelerationlong', 0.02), ('accelerationmaxlong', 0.2), ('accelerationinitshort', 0.02), ('accelerationshort', 0.02), ('accelerationmaxshort', 0.2)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [275]:
df = mydata()
df = df[['date','close', 'high','low']]
df.set_index('date', inplace=True)
df_c=df.copy()
df_c=df_c.tail(200)
high = df_c.high
low = df_c.low
df_c = df_c[['close']]
df_c['sar'] = SAR(
    high
    , low
    , startvalue=0
    , offsetonreverse=0.5
    , accelerationinitlong=0.5
    , accelerationlong=0.2
    , accelerationmaxlong=0.02
    , accelerationinitshort=0.5
    , accelerationshort=0.2
    , accelerationmaxshort=0.02
) 
print(pd.concat([df_c.head(2), df_c.tail(8)]))
df_c.plot(figsize=(16,8),title='Parabolic SAR - Extended', xlabel='date', ylabel='close')
            close  sar
date                  
2022-12-07   8.19  NaN
2022-12-08   8.19 8.30
2023-09-19   7.40 7.30
2023-09-20   7.38 7.31
2023-09-21   7.29 7.52
2023-09-22   7.37 7.52
2023-09-25   7.30 7.50
2023-09-26   7.26 7.49
2023-09-27   7.30 7.48
2023-09-28   7.33 7.47
Out[275]:
<AxesSubplot:title={'center':'Parabolic SAR - Extended'}, xlabel='date', ylabel='close'>

ADX¶

  • Average Directional Movement Index 平均趋向指数
  • ADX(high, low, close, timeperiod=14)
  • ADX 是一种趋势指标,用于判断价格的趋势强度。
  • ADX 通过计算方向性指数(DI)之间的差异和平均幅度来计算趋势强度。
  • ADX 的数值通常在0到100之间,数值越高表示趋势越强。
In [276]:
abstract.ADX
Out[276]:
{'name': 'ADX', 'group': 'Momentum Indicators', 'display_name': 'Average Directional Movement Index', 'function_flags': ['Function has an unstable period'], 'input_names': OrderedDict([('prices', ['high', 'low', 'close'])]), 'parameters': OrderedDict([('timeperiod', 14)]), 'output_flags': OrderedDict([('real', ['Line'])]), 'output_names': ['real']}
In [278]:
df = mydata()
df = df[['date','close', 'high','low']]
df.set_index('date', inplace=True)
df_c=df.copy()
df_c=df_c.tail(200)
high = df_c.high
low = df_c.low
df_c = df_c[['close']]
df_c['adx'] = ADX(high, low, close, timeperiod=30)
print(pd.concat([df_c.head(2), df_c.tail(8)]))
normalize = lambda x: (x - x.min()) / (x.max() - x.min())
df_c[['clo_norm']] = df_c[['close']].apply(normalize)
df_c[['adx_norm']] = df_c[['adx']].apply(normalize)
df_c = df_c[['clo_norm', 'adx_norm']]
df_c.plot(figsize=(16,8),title='Average Directional Movement Index', xlabel='date', ylabel='close')
            close   adx
date                   
2022-12-07   8.19   NaN
2022-12-08   8.19   NaN
2023-09-19   7.40 14.61
2023-09-20   7.38 14.60
2023-09-21   7.29 14.74
2023-09-22   7.37 14.99
2023-09-25   7.30 15.21
2023-09-26   7.26 15.48
2023-09-27   7.30 15.68
2023-09-28   7.33 15.77
Out[278]:
<AxesSubplot:title={'center':'Average Directional Movement Index'}, xlabel='date', ylabel='close'>