def tagbondfund(start_date, end_date, codes): funddf = data.bond_value(start_date, end_date) funddf = funddf[codes] csibondindexdf = data.bond_index_value(start_date, end_date, const.csibondindex_code) ratebondindexdf = data.bond_index_value(start_date, end_date, const.ratebondindex_code) creditbondindexdf = data.bond_index_value(start_date, end_date, const.credictbondindex_code) convertiblebondindexdf = data.bond_index_value(start_date, end_date, const.convertiblebondindex_code) risefitness_result = risefitness(funddf, csibondindexdf, 0.5) declinefitness_result = declinefitness(funddf, csibondindexdf, 0.5) oscillationfitness_result = oscillationfitness(funddf, csibondindexdf, 0.5) ratebondprefer_result = ratebondprefer(funddf, ratebondindexdf,0.5) creditbondprefer_result = creditbondprefer(funddf, creditbondindexdf, 0.5) convertiblebondprefer_result= convertiblebondprefer(funddf, convertiblebondindexdf, 0.5) #print 'rise' risefitness_set = set() for k,v in risefitness_result: risefitness_set.add(k) #print k, v #print declinefitness_set = set() #print 'decline' for k,v in declinefitness_result: declinefitness_set.add(k) #print k, v #print #print 'oscillation' oscillationfitness_set = set() for k,v in oscillationfitness_result: oscillationfitness_set.add(k) #print k, v #print #print 'ratebondprefer' ratebondprefer_set = set() for k,v in ratebondprefer_result: ratebondprefer_set.add(k) #print 'ratebondprefer' creditbondprefer_set = set() for k,v in creditbondprefer_result: creditbondprefer_set.add(k) convertiblebondprefer_set = set() for k,v in convertiblebondprefer_result: convertiblebondprefer_set.add(k)
def bondfilter(start_date, end_date): funddf = data.bond_value(start_date, end_date) indexdf = data.bond_index_value(start_date, end_date, 'H11001.CSI') #按照规模过滤 #scale_data = sf.scalefilter(2.0 / 3) #按照基金创立时间过滤 setuptime_data = sf.fundsetuptimefilter(funddf.columns, start_date, data.bond_establish_data()) #按照jensen测度过滤 jensen_data = sf.jensenfilter(funddf, indexdf, rf, 0.5) #按照索提诺比率过滤 sortino_data = sf.sortinofilter(funddf, rf, 0.5) #按照ppw测度过滤 ppw_data = sf.ppwfilter(funddf, indexdf, rf, 0.5) #print ppw_data stability_data = sf.stabilityfilter(funddf, 2.0 / 3) #print stability_data ''' scale_set = set() for k, v in scale_data: scale_set.add(k) ''' setuptime_set = set(setuptime_data) jensen_set = set() for k, v in jensen_data: jensen_set.add(k) sortino_set = set() for k, v in sortino_data: sortino_set.add(k) ppw_set = set() for k, v in ppw_data: ppw_set.add(k) stability_set = set() for k, v in stability_data: stability_set.add(k) codes = [] for code in setuptime_set: if (code in jensen_set) and (code in sortino_set) and ( code in ppw_set) and (code in stability_set): codes.append(code) #按照业绩持续性过滤 #stability_data = sf.stabilityfilter(funddf[codes], 2.0 / 3) #print stability_data #codes = [] #for k, v in stability_data: # codes.append(k) return codes
def bondfundfilter(start_date, end_date): indicator = {} funddf = data.bond_value(start_date, end_date) indexdf = data.bond_index_value(start_date, end_date, 'H11001.CSI') #按照基金创立时间过滤 setuptime_data = fundsetuptimefilter(funddf.columns, start_date, data.bond_establish_data()) #print setuptime_data #按照jensen测度过滤 jensen_data = jensenfilter(funddf, indexdf, rf, 0.5) #jensen_data = sf.jensenfilter(funddf, indexdf, rf, 1.0) #按照索提诺比率过滤 sortino_data = sortinofilter(funddf, rf, 0.5) #sortino_data = sf.sortinofilter(funddf, rf, 1.0) #按照ppw测度过滤 ppw_data = ppwfilter(funddf, indexdf, rf, 0.5) #ppw_data = sf.ppwfilter(funddf, indexdf, rf, 1.0) #print ppw_data stability_data = stabilityfilter(funddf, 2.0 / 3) #stability_data = sf.stabilityfilter(funddf, 1.0) sharpe_data = fi.fund_sharp_annual(funddf) #print stability_data #print 'jensen' jensen_dict = {} for k,v in jensen_data: jensen_dict[k] = v #print k, v #print #print 'sortino' sortino_dict = {} for k,v in sortino_data: sortino_dict[k] = v #print k,v #print #print 'ppw' ppw_dict = {} for k,v in ppw_data: ppw_dict[k] = v #print k,v #print #print 'statbility' stability_dict = {} for k,v in stability_data: stability_dict[k] = v #print k,v sharpe_dict = {} for k,v in sharpe_data: sharpe_dict[k] = v setuptime_set = set(setuptime_data) jensen_set = set() for k, v in jensen_data: jensen_set.add(k) sortino_set = set() for k, v in sortino_data: sortino_set.add(k) ppw_set = set() for k, v in ppw_data: ppw_set.add(k) stability_set = set() for k, v in stability_data: stability_set.add(k) codes = [] for code in setuptime_set: if (code in jensen_set) and (code in sortino_set) and (code in ppw_set) and (code in stability_set): codes.append(code) for code in codes: ind = indicator.setdefault(code, {}) ind['sharpe'] = sharpe_dict[code] ind['jensen'] = jensen_dict[code] ind['sortino'] = sortino_dict[code] ind['ppw'] = ppw_dict[code] ind['stability'] = stability_dict[code] indicator_set = set() for code in setuptime_set: indicator_set.add(code) indicator_codes = [] indicator_datas = [] for code in indicator_set: indicator_codes.append(code) indicator_datas.append([sharpe_dict.setdefault(code, None), jensen_dict.setdefault(code, None), sortino_dict.setdefault(code, None), ppw_dict.setdefault(code, None), stability_dict.setdefault(code, None)]) indicator_df = pd.DataFrame(indicator_datas, index = indicator_codes, columns=['sharpe', 'jensen', 'sortino', 'ppw', 'stability']) indicator_df.to_csv('./tmp/bond_indicator_' + end_date + '.csv') f = open('./tmp/bondfilter_codes_' + end_date + '.csv','w') for code in codes: f.write(str(code) + '\n') f.flush() f.close() return codes, indicator
if __name__ == '__main__': start_date = '2007-01-05' end_date = '2016-04-22' bonddf = data.bonds() #print type(bonddf.values[0][0]) bonddfr = bonddf.pct_change().fillna(0.0) #print bonddf indexdf = data.bond_index_value(start_date, end_date, const.csibondindex_code) dates = indexdf.index tag = {} ratebond = '' creditbond = '' convertiblebond = '' for i in range(156, len(dates)): if (i - 156) % 13 == 0: start_date = dates[i - 52].strftime('%Y-%m-%d') allocation_start_date = dates[i - 13].strftime('%Y-%m-%d') end_date = dates[i].strftime('%Y-%m-%d')