[关闭]
@Channelchan 2017-03-22T10:16:22.000000Z 字数 3738 阅读 21789

指数CTA

CTA Hedge


数据预处理

  1. from fxdayu_data.data import MongoHandler, StockData
  2. from fxdayu_data.analysis.statistic import count_advances, frame_map
  3. from datetime import datetime
  4. import pandas as pd
  5. import talib
  6. import numpy as np
  7. mh = MongoHandler(db='HS300')
  8. sd = StockData(db='HS300')
  9. sd.update_all()
  10. def mapper(frame):
  11. close = pd.DataFrame(frame['close'].dropna(), dtype=np.float64)
  12. frame['ma'] = talib.abstract.MA(close, timeperiod=50)
  13. return frame
  14. if __name__ == '__main__':
  15. candles = mh.read(mh.db.collection_names(), start=datetime(2007, 3, 1))
  16. candles = frame_map(candles, mapper)
  17. adv = count_advances(candles, start=50)
  18. mh.inplace(adv, 'Beta', 'HS_Index_Beta')
  1. Advance & Decline Percent (Participation)

  2. High & Low Percent (Leadership)

  3. MA50_up & MA50_down Percent (Trend)

计算数据

  1. from fxdayu_data.data import MongoHandler
  2. from datetime import datetime
  3. mh = MongoHandler(db='HS_Index_Beta')
  4. beta = mh.read('Beta')
  5. sh300 = mh.read('hs300.D', 'Global_index', start=datetime(2010, 03, 23))
  6. beta['U-D/T'] = (beta['up']-beta['down'])/len(beta)*100
  7. beta['H-L/T'] = (beta['high']-beta['low'])/len(beta)*100
  8. beta['ma_u-d/T'] = (beta['ma_up']-beta['ma_down'])/len(beta)*100
  9. mh.inplace(beta, 'Beta_Result', 'HS_Index_Beta')

处理显示

  1. import talib as ta
  2. import matplotlib.pyplot as plt
  3. beta_r = mh.read('Beta_Result', 'HS_Index_Beta')
  4. beta_r['slope_AD'] = ta.abstract.LINEARREG_SLOPE(beta_r, 100, price='U-D/T')
  5. beta_r['slope_HL'] = ta.abstract.LINEARREG_SLOPE(beta_r, 100, price='H-L/T')
  6. beta_r['SMA_S_AD'] = ta.abstract.MA(beta_r, 10, price='slope_AD')
  7. beta_r['LMA_S_AD'] = ta.abstract.MA(beta_r, 40, price='slope_AD')
  8. beta_r['SMA_S_HL'] = ta.abstract.MA(beta_r, 10, price='slope_HL')
  9. beta_r['LMA_S_HL'] = ta.abstract.MA(beta_r, 40, price='slope_HL')
  10. beta_r['MA_MA_UD'] = ta.abstract.MA(beta_r, 20, price='ma_u-d/T')
  11. fig,(ax, ax1, ax2, ax3) = plt.subplots(4, 1, sharex=True)
  12. ax.plot(sh300)
  13. ax1.plot(beta_r.LMA_S_AD)
  14. ax1.plot(beta_r.SMA_S_AD)
  15. ax2.plot(beta_r.LMA_S_HL)
  16. ax2.plot(beta_r.SMA_S_HL)
  17. ax3.plot(beta_r['ma_u-d/T'])
  18. ax3.plot(beta_r.MA_MA_UD)
  19. ax.legend(loc='upper left')
  20. ax1.legend(loc='upper left')
  21. ax2.legend(loc='upper left')
  22. ax3.legend(loc='upper left')
  23. plt.show()

1

4.Volume

  1. beta_r['hs300'] = hs300.close
  2. beta_r['LMA_V'] = abstract.EMA(sh300, 20, price='volume')
  3. beta_r['SMA_V'] = abstract.EMA(sh300, 40, price='volume')
  4. plt.subplot(2,1,1)
  5. plt.plot(beta_r.hs300)
  6. plt.subplot(2,1,2)
  7. plt.plot(beta_r.LMA_V)
  8. plt.plot(beta_r.SMA_V)
  9. plt.show()

2

5.用四条橘色线做Regression(AD/HL/MA/Volume)

  1. beta_r = beta_r.dropna()
  2. mlr = regression.linear_model.OLS(beta_r['hs300'], sm.add_constant(np.column_stack((beta_r['SMA_S_AD'],
  3. beta_r['SMA_S_HL'],
  4. beta_r['MA_MA_UD'],
  5. beta_r['SMA_V'],
  6. )))).fit()
  7. prediction = mlr.params[0] + mlr.params[1]*beta_r['SMA_S_AD'] + mlr.params[2]*beta_r['SMA_S_HL']+ \
  8. mlr.params[3]*beta_r['MA_MA_UD'] + mlr.params[4]*beta_r['SMA_V']
  9. prediction.name = 'Prediction'
  10. print(mlr.params)
  11. plt.subplot(2,1,1)
  12. beta_r['hs300'].plot()
  13. prediction.plot(color='y')
  14. plt.xlabel('Price')
  15. plt.legend()
  16. plt.subplot(2,1,2)
  17. bar = beta_r['hs300'] - prediction
  18. plt.bar(bar.index, bar)
  19. plt.hlines(500, bar.index[0], bar.index[-1], alpha=0.3)
  20. plt.hlines(-500, bar.index[0], bar.index[-1], alpha=0.3)
  21. plt.show()

3

6.A Pairs Percent

  1. import numpy as np
  2. import talib as ta
  3. from fxdayu_data.data import MongoHandler
  4. import pandas as pd
  5. import matplotlib.pyplot as plt
  6. mh = MongoHandler(db='Global_index')
  7. x = np.array(range(1,21,1))
  8. hs = mh.read('hs300.D')
  9. def calculate(s):
  10. mas = ta.abstract.MA(hs, s)
  11. mal = ta.abstract.MA(hs, 4*s)
  12. df = pd.DataFrame({'long': mal, 'short': mas}).dropna()
  13. df['direction'] = map(lambda s, l: 1 if s > l else 0, df['short'], df['long'])
  14. return df['direction']
  15. if __name__ == '__main__':
  16. df = pd.DataFrame({s: calculate(s) for s in x}).dropna()
  17. MA_sum =sum([s for key, s in df.iteritems()])*5
  18. plt.subplot(2,1,1)
  19. plt.plot(hs.close)
  20. plt.subplot(2,1,2)
  21. plt.plot(MA_sum, 'r')
  22. plt.hlines(60, MA_sum.index[0], MA_sum.index[-1])
  23. plt.hlines(40, MA_sum.index[0], MA_sum.index[-1])
  24. plt.show()

2

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注