https://github.com/mpquant/python-financial-technical-indicators-pandas
Technical Indicators implemented in Python only using Numpy-Pandas as Magic - Very Very Fast! Very tiny! Stock Market Financial Technical Analysis Python library . Quant Trading automation or cryptocoin exchange
https://github.com/mpquant/python-financial-technical-indicators-pandas
atr bbi bool cci dma dmi ema emv expma kdj macd python rsi sma trix
Last synced: 25 days ago
JSON representation
Technical Indicators implemented in Python only using Numpy-Pandas as Magic - Very Very Fast! Very tiny! Stock Market Financial Technical Analysis Python library . Quant Trading automation or cryptocoin exchange
- Host: GitHub
- URL: https://github.com/mpquant/python-financial-technical-indicators-pandas
- Owner: mpquant
- Created: 2021-09-04T11:35:23.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2021-10-30T03:53:49.000Z (over 3 years ago)
- Last Synced: 2025-04-02T04:47:13.361Z (2 months ago)
- Topics: atr, bbi, bool, cci, dma, dmi, ema, emv, expma, kdj, macd, python, rsi, sma, trix
- Language: Python
- Homepage:
- Size: 141 KB
- Stars: 70
- Watchers: 2
- Forks: 21
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# MyTT
Technical Indicators implemented in Python only using Numpy-Pandas as Magic - Very Very Fast! to Stock Market Financial Technical Analysis Python library
[MyTT.py](https://github.com/mpquant/Python-Financial-Technical-Indicators-Pandas/blob/main/MyTT.py)# Features
* Innovative application of core tools function,so to writing indicator becomes easy and interesting!
* Calculate technical indicators (Most of the indicators supported)
* Produce graphs for any technical indicator
* MyTT is very very fast! pure numpy and pandas implemented, not need install Ta-lib (talib)
* MyTT is very simple,only use numpy and pandas even not "for in " in the code
* Trading automation Quant Trade, Stock Market, Futures market or cryptocoin exchange like BTC
* Chinese version MyTT Url: https://github.com/mpquant/MyTT```python
# ----- 0 level:core tools function ---------
def MA(S,N):
return pd.Series(S).rolling(N).mean().valuesdef DIFF(S, N=1):
return pd.Series(S).diff(N)
def STD(S,N):
return pd.Series(S).rolling(N).std(ddof=0).valuesdef EMA(S,N): # alpha=2/(span+1)
return pd.Series(S).ewm(span=N, adjust=False).mean().valuesdef SMA(S, N, M=1): # alpha=1/(1+com)
return pd.Series(S).ewm(com=N-M, adjust=True).mean().valuesdef AVEDEV(S,N):
return pd.Series(S).rolling(N).apply(lambda x: (np.abs(x - x.mean())).mean()).valuesdef IF(S_BOOL,S_TRUE,S_FALSE):
return np.where(S_BOOL, S_TRUE, S_FALSE)def SUM(S, N):
return pd.Series(S).rolling(N).sum().values if N>0 else pd.Series(S).cumsum()def HHV(S,N):
return pd.Series(S).rolling(N).max().valuesdef LLV(S,N):
return pd.Series(S).rolling(N).min().values
``````python
#----- 1 level: Logic and Statistical function (only use 0 level function to implemented) -----
def COUNT(S_BOOL, N): # COUNT(CLOSE>O, N):
return SUM(S_BOOL,N)def EVERY(S_BOOL, N): # EVERY(CLOSE>O, 5)
R=SUM(S_BOOL, N)
return IF(R==N, True, False)
def LAST(S_BOOL, A, B):
if AOPEN,5,3)
return S_BOOL[-A:-B].sum()==(A-B)def EXIST(S_BOOL, N=5): # EXIST(CLOSE>3010, N=5)
R=SUM(S_BOOL,N)
return IF(R>0, True ,False)def BARSLAST(S_BOOL):
M=np.argwhere(S_BOOL); # BARSLAST(CLOSE/REF(CLOSE)>=1.1)
return len(S_BOOL)-int(M[-1])-1 if M.size>0 else -1def FORCAST(S,N):
K,Y=SLOPE(S,N,RS=True)
return Y[-1]+K
def CROSS(S1,S2): # GoldCross CROSS(MA(C,5),MA(C,10))
CROSS_BOOL=IF(S1>S2, True ,False) # DieCross CROSS(MA(C,10),MA(C,5))
return (COUNT(CROSS_BOOL>0,2)==1)*CROSS_BOOL```
```python
# ------ Technical Indicators ( 2 level only use 0,1 level functions to implemented) --------------
def MACD(CLOSE,SHORT=12,LONG=26,M=9):
DIF = EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA = EMA(DIF,M); MACD=(DIF-DEA)*2
return DIF,DEA,MACDdef KDJ(CLOSE,HIGH,LOW, N=9,M1=3,M2=3):
RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
K = EMA(RSV, (M1*2-1)); D = EMA(K,(M2*2-1)); J=K*3-D*2
return K, D, Jdef RSI(CLOSE, N=24):
DIF = CLOSE-REF(CLOSE,1)
return (SMA(MAX(DIF,0), N) / SMA(ABS(DIF), N) * 100)def WR(CLOSE, HIGH, LOW, N=10, N1=6):
WR = (HHV(HIGH, N) - CLOSE) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
WR1 = (HHV(HIGH, N1) - CLOSE) / (HHV(HIGH, N1) - LLV(LOW, N1)) * 100
return WR, WR1def BIAS(CLOSE,L1=6, L2=12, L3=24):
BIAS1 = (CLOSE - MA(CLOSE, L1)) / MA(CLOSE, L1) * 100
BIAS2 = (CLOSE - MA(CLOSE, L2)) / MA(CLOSE, L2) * 100
BIAS3 = (CLOSE - MA(CLOSE, L3)) / MA(CLOSE, L3) * 100
return BIAS1, BIAS2, BIAS3def BOLL(CLOSE,N=20, P=2):
MID = MA(CLOSE, N);
UPPER = MID + STD(CLOSE, N) * P
LOWER = MID - STD(CLOSE, N) * P
return UPPER, MID, LOWERdef PSY(CLOSE,N=12, M=6):
PSY=COUNT(CLOSE>REF(CLOSE,1),N)/N*100
PSYMA=MA(PSY,M)
return PSY,PSYMAdef CCI(CLOSE,HIGH,LOW,N=14):
TP=(HIGH+LOW+CLOSE)/3
return (TP-MA(TP,N))/(0.015*AVEDEV(TP,N))
def ATR(CLOSE,HIGH,LOW, N=20):
TR = MAX(MAX((HIGH - LOW), ABS(REF(CLOSE, 1) - HIGH)), ABS(REF(CLOSE, 1) - LOW))
return MA(TR, N)def BBI(CLOSE,M1=3,M2=6,M3=12,M4=20):
return (MA(CLOSE,M1)+MA(CLOSE,M2)+MA(CLOSE,M3)+MA(CLOSE,M4))/4def DMI(CLOSE,HIGH,LOW,M1=14,M2=6):
TR = SUM(MAX(MAX(HIGH - LOW, ABS(HIGH - REF(CLOSE, 1))), ABS(LOW - REF(CLOSE, 1))), M1)
HD = HIGH - REF(HIGH, 1); LD = REF(LOW, 1) - LOW
DMP = SUM(IF((HD > 0) & (HD > LD), HD, 0), M1)
DMM = SUM(IF((LD > 0) & (LD > HD), LD, 0), M1)
PDI = DMP * 100 / TR; MDI = DMM * 100 / TR
ADX = MA(ABS(MDI - PDI) / (PDI + MDI) * 100, M2)
ADXR = (ADX + REF(ADX, M2)) / 2
return PDI, MDI, ADX, ADXR
def TRIX(CLOSE,M1=12, M2=20):
TR = EMA(EMA(EMA(CLOSE, M1), M1), M1)
TRIX = (TR - REF(TR, 1)) / REF(TR, 1) * 100
TRMA = MA(TRIX, M2)
return TRIX, TRMAdef VR(CLOSE,VOL,M1=26):
LC = REF(CLOSE, 1)
return SUM(IF(CLOSE > LC, VOL, 0), M1) / SUM(IF(CLOSE <= LC, VOL, 0), M1) * 100def EMV(HIGH,LOW,VOL,N=14,M=9):
VOLUME=MA(VOL,N)/VOL; MID=100*(HIGH+LOW-REF(HIGH+LOW,1))/(HIGH+LOW)
EMV=MA(MID*VOLUME*(HIGH-LOW)/MA(HIGH-LOW,N),N); MAEMV=MA(EMV,M)
return EMV,MAEMVdef DMA(CLOSE,N1=10,N2=50,M=10):
DIF=MA(CLOSE,N1)-MA(CLOSE,N2); DIFMA=MA(DIF,M)
return DIF,DIFMAdef MTM(CLOSE,N=12,M=6):
MTM=CLOSE-REF(CLOSE,N); MTMMA=MA(MTM,M)
return MTM,MTMMA
def EXPMA(CLOSE,N1=12,N2=50):
return EMA(CLOSE,N1),EMA(CLOSE,N2);def OBV(CLOSE,VOL):
return SUM(IF(CLOSE>REF(CLOSE,1),VOL,IF(CLOSE ma10? ',EVERY(CLOSE>MA10,5) )```
### BOLL and graphs
```python
up,mid,lower=BOLL(CLOSE)plt.figure(figsize=(15,8))
plt.plot(CLOSE,label='shanghai');
plt.plot(up,label='up');
plt.plot(mid,label='mid');
plt.plot(lower,label='lower');```
![]()
### python lib need to install
* pandas numpy
----------------------------------------------------