import numpy as np
import talib
def get_norm_macd(closes):
sma_len = 12
lma_len = 21
tsp = 9
norm_len = 50
sh_arr = talib.EMA(closes, sma_len)
lon_arr = talib.EMA(closes, lma_len)
ratio = np.minimum(sh_arr, lon_arr ) / np.maximum(sh_arr, lon_arr)
Mac = np.zeros(len(closes))
Mac[sh_arr > lon_arr] = 1 - ratio[sh_arr > lon_arr]
Mac[sh_arr <= lon_arr] = ratio[sh_arr <= lon_arr] -1
Mac_list = [[np.min(Mac[max(i-norm_len, 0):i+1]),np.max(Mac[max(i-norm_len, 0):i+1])] for i in range(50)] #0:49
Mac_list.extend([[np.min(Mac[i-norm_len:i]),np.max(Mac[i-norm_len:i])] for i in range(51,len(Mac)+1)]) #1:50,949:999, 50:999
# Mac_list = [[np.min(Mac[max(i-norm_len, 0):i+1]),np.max(Mac[max(i-norm_len, 0):i+1])] for i in range(len(Mac))]
Mac_arr_min_max = np.array(Mac_list,dtype=np.float32)
Mac_arr_min = Mac_arr_min_max[:,0]
Mac_arr_max = Mac_arr_min_max[:,1]
MacNorm = ((Mac - Mac_arr_min) / (Mac_arr_max - Mac_arr_min + 0.000001) * 2 ) - 1
MacNorm2 = Mac if norm_len < 2 else MacNorm
Trigger = talib.WMA(MacNorm2, tsp)
Hist = (MacNorm2 - Trigger)
Hist2 = Hist.copy()
Hist2[Hist>1] = 1
Hist2[Hist<-1] = -1
# print(MacNorm2.shape, Trigger.shape, Hist2.shape)
return Hist2
python Norm MACD
于 2024-02-08 10:31:00 首次发布