@Channelchan
2017-03-22T19:16:16.000000Z
字数 3761
阅读 21240
未分类
import numpy as np
import talib as ta
from fxdayu_data.data import MongoHandler, StockData
import pandas as pd
import matplotlib.pyplot as plt
mh = MongoHandler(db='Global_index')
hs300 = mh.read('hs300.D')
x = np.array(range(10, 81, 10))
def Second_Breakout(s):
high = ta.MAX(hs300.high.values, s)
low = ta.MIN(hs300.low.values, s)
return {s: high, -s: low}
def day_range(data):
low = 0
high = 0
is_high = 1
is_low = 1
for i in x:
if is_low:
if data['low'] <= data[-i]:
low = -i
else:
is_low = 0
if is_high == 0:
return low
if is_high:
if data['high'] >= data[i]:
high = i
else:
is_high = 0
if is_low == 0:
return high
if is_high:
return high
elif is_low:
return low
if __name__ == '__main__':
dct = {'high': hs300.high, 'low': hs300.low}
for i in x:
dct.update(Second_Breakout(i))
df = pd.DataFrame(dct).dropna()
BreakDay = []
for row in df.iterrows():
BreakDay.append(day_range(row[1]))
df['BreakDay'] = BreakDay
fig,(ax,ax1) = plt.subplots(2,1, sharex=True)
ax.plot(hs300.close)
ax1.bar(df.index, df.BreakDay)
plt.show()
macd = ta.abstract.MACD(hs)
macd = macd.dropna()
macd['sma_hist'] = ta.abstract.MA(macd, 40, price='macdhist').dropna()
macd['lma_hist'] = ta.abstract.MA(macd, 60, price='macdhist').dropna()
hist = macd.iterrows()
t0,d0 = next(hist)
x_b = []
y_b = []
x_s = []
y_s = []
pos = 0
for t1,d1 in hist:
if pos == 0 and d1.sma_hist > d1.lma_hist and d0.sma_hist < d0.lma_hist:
x_b.append(t1)
y_b.append(d1.sma_hist)
pos = 1
elif pos == 1 and d1.sma_hist < d1.lma_hist and d0.sma_hist > d0.lma_hist:
x_s.append(t1)
y_s.append(d1.sma_hist)
pos = 0
t0, d0 = t1, d1
import matplotlib as mpl
mpl.rc('xtick', labelsize=8)
fig,(ax, ax1) = plt.subplots(2,1,sharex=True)
ax.plot(hs['close'])
ax1.plot(macd.sma_hist, 'y')
ax1.plot(macd.lma_hist, 'b')
ax1.scatter(x_b, y_b, c='r', marker='^', linewidths=3)
ax1.scatter(x_s, y_s, c='g', marker='v', linewidths=3)
plt.show()
3. Divergence Index(Divergence)
长期动能上涨,短期动能下跌。
import talib as ta
from fxdayu_data.data import MongoHandler
import matplotlib.pyplot as plt
mh = MongoHandler(db='Global_index')
hs300 = mh.read('hs300.D')
hs300['mom10'] = ta.abstract.MOM(hs300, 10, price='close')
hs300['mom40'] = ta.abstract.MOM(hs300, 40, price='close')
hs300['price_change'] = hs300.close.diff()
hs300['Var40'] = ta.abstract.VAR(hs300, 40, price='price_change')
hs300 = hs300.dropna()
Div_index = hs300.mom10*hs300.mom40/hs300.Var40
plt.subplot(3,1,1)
plt.plot(hs300.close)
plt.subplot(3,1,2)
plt.plot(Div_index)
plt.hlines(-10, hs300.index[0], hs300.index[-1], linestyles='dashed', alpha=0.5)
plt.subplot(3,1,3)
plt.plot(hs300.mom40)
plt.hlines(0, hs300.index[0], hs300.index[-1], linestyles='dashed', alpha=0.5)
plt.show()
import talib as ta
from fxdayu_data.data import MongoHandler
import matplotlib.pyplot as plt
import pandas as pd
mh = MongoHandler(db='Global_index')
hs300 = mh.read('hs300.D')
A = 25
hs300['MA50'] = ta.abstract.MA(hs300,50)
hs300['price_change'] = hs300.close.diff()
hs300['NEI'] = A * (hs300.close-hs300.MA50)/ta.abstract.STDDEV(hs300, 50, price='price_change')
hs300 = hs300.dropna()
def rank(df, price='NEI', gap=50, rank1=10, rank2=40):
s = df[price]
rank1 -= 1
rank2 -= 1
def resort(index):
series = s.iloc[index-gap:index]
value = sorted(series.values)
return series.index[-1], value[rank1], value[rank2]
df[['lowerband', 'upperband']] = pd.DataFrame(map(resort, range(gap, len(s)+1))).set_index(0)
return df
hs300 = rank(hs300)
middleband = ta.abstract.MA(hs300, timeperiod=50)
upperband = middleband + hs300['upperband']
lowerband = middleband + hs300['lowerband']
data_B = pd.concat([middleband, upperband , lowerband], axis=1)
data_B.columns = ['middleband', 'upperband', 'lowerband']
print(data_B)
plt.plot(hs300['close'])
plt.plot(data_B['upperband'], 'g')
plt.plot(data_B['lowerband'], 'r')
plt.show()