def display_details(self): print("============== Stock List ===============") #print("Stock: " + str(datetime.now().strftime("%d-%b-%Y (%H:%M:%S.%f)"))) for stock_name in self.my_stock: stock = Stock(stock_name) t = Thread(stock.display()) self.threadPool.append(t) t.start() #print("Stock: " + str(datetime.now().strftime("%d-%b-%Y (%H:%M:%S.%f)"))) for t in self.threadPool: t.join()
def handler_data(cls): code1 = Stock.get_all_stock_outstanding() code2 = PlateStock.get_all_info() data = pd.merge(code1, code2, on=['stock_code']) data = data.sort_values(by=['hangye'], ascending=True) data = data.reset_index(drop=True) data['hangye_num'] = data.index return data
def start_exe(kline='kline_min30'): a=time.clock() data = Stock.get_all_stock() stocks = data pool = multiprocessing.Pool(processes=4) m = 10 li = [{'stocks':stocks[i:i + m],'kline':kline} for i in range(0, len(stocks), m)] result = pool.map(fun, li) spend=time.clock()-a BaseModel('kline_data_update_mark').insert_batch({'status':200,'kline':'ma_'+kline,'other':'speed '+str(spend),'date':dt.datetime.now()}) # if __name__ == '__main__': # start_exe(kline='kline_day')
def macd_exe(kline='kline_min30'): a = time.clock() stocks = Stock.get_all_stock() pool = multiprocessing.Pool(processes=4) m = 10 li = [{ 'stocks': stocks[i:i + m], 'kline': kline } for i in range(0, len(stocks), m)] result = pool.map(fun, li) BaseModel('kline_data_update_mark').insert_batch({ 'status': 200, 'kline': 'macd_' + kline, 'other': 'speed ' + str(time.clock() - a), 'date': dt.datetime.now() })
data = data[data.date <= dt.datetime(date2.year, date2.month, date2.day, 9, 55)] continue if 'A' in table_name: if abs(profitself) > 0.097: data = data[data.date <= dt.datetime(date2.year, date2.month, date2.day, 9, 55)] print(sc, str(profitself) + '_' + str(date)) continue try: visualization.draw_volume(data=data0, profits=profit, date=date1, code=sc, table_name=table_name, pixel=pixel, n=n, count=count) pass except Exception as e: print(e) pass data = data[data.date <= dt.datetime(date2.year, date2.month, date2.day,9,55)] end_time = date2 return 1 if __name__ == '__main__': stocks = Stock.get_index_stock_code_list() pool = multiprocessing.Pool(processes=3) m = 10 li = [stocks[i:i + m] for i in range(0, len(stocks), m)] print(li) result = pool.map(fun, li) # fun(['000001'])
'low': resell, 'high': reselh, 'close': resel, 'open': resel }) ModelData.insert_data(table_name=kline, data=dd) import datetime as dt start_date = dt.datetime(2016, 1, 1) end_date = dt.datetime(2018, 6, 20) data = pd.DataFrame( list( BaseModel('calendar').query( {'date': { '$gte': start_date, '$lte': end_date }}))) sampleNo = abs(data.num.iloc[0] - data.num.iloc[len(data) - 1]) + 1 index_profit = (Stochastic.get_random(sigma=0.03, sampleNo=sampleNo)) data2 = Stock.get_stock_code_list() stocks = data2.stock_code.tolist() for sc in stocks: Stochastic.get_k(stock_code=sc, kline="kline_day", date=data.date.tolist(), sampleNo=sampleNo, index_profit=index_profit)
else: if abs(profit) > 0.1 * interval: data = data[data.date < dt.datetime( date.year, date.month, date.day)] continue try: visualization.drow_boll_line(data=data0, profits=profit, date=date, code=sc, pixel=pixel, table_name=tabel_name) except Exception as e: pass data = data[ data.date < dt.datetime(date.year, date.month, date.day)] end_time = date return 1 if __name__ == '__main__': stocks = Stock.get_markets_stock('hk') # data = data[data.stock_code > '600333'] print(stocks) pool = multiprocessing.Pool(processes=1) m = 10 li = [stocks[i:i + m] for i in range(0, len(stocks), m)] result = pool.map(fun, li) # fun(stocks)
continue # print(sc, dt.datetime.now()) try: visualization.draw_macd_and_ma(data=data0, profits=profit, date=date, code=sc, table_name=table_name, pixel=pixel, length=length) pass except Exception as e: print(e) pass data = data[ data.date < dt.datetime(date.year, date.month, date.day)] end_time = date return 1 if __name__ == '__main__': stocks = Stock.get_markets_stock('usa') pool = multiprocessing.Pool(processes=1) m = 10 li = [stocks[i:i + m] for i in range(0, len(stocks), m)] result = pool.map(fun, li) # fun(['00700']) # fun(['000001'])
def get_stock_code(self): stocks = Stock.get_index_stock_code_list() return stocks
class model: #初始names names = [ 'ADX', 'ADX1', 'ADX_50_DOWN', 'ADX_50_UP', 'ADX_z', 'AR', 'AR_50_DOWN', 'AR_50_UP', 'AR_z', 'BOLL', 'BR', 'BR_AR_DOWN', 'BR_AR_UP', 'BR_z', 'CCI', 'CCI_-100_UP', 'CCI_100_DOWN', 'CCI_z', 'CR', 'CR_40_DOWN', 'CR_40_UP', 'CR_MA1_DOWN', 'CR_MA1_UP', 'CR_MA2_DOWN', 'CR_MA2_UP', 'CR_MA3_DOWN', 'CR_MA3_UP', 'CR_z', 'Close_dt_ma10', 'Close_dt_ma20', 'Close_dt_ma30', 'Close_dt_ma5', 'Close_dt_ma60', 'D', 'DMM', 'DMM1', 'DMP', 'DMP1', 'D_z', 'HD', 'J', 'J_down_cross_100', 'J_less_20', 'J_over_80', 'J_up_cross_0', 'J_z', 'K', 'LB', 'LB_z', 'LD', 'MA1', 'MA1_z', 'MA2', 'MA2_z', 'MA3', 'MA3_z', 'MDI', 'MDI_z', 'MTR', 'MTR_1', 'MTR_2', 'MTR_D1', 'MTR_D2', 'MTR_D3', 'New_H_10', 'New_H_10_10', 'New_H_10_20', 'New_H_10_5', 'New_H_20', 'New_H_20_10', 'New_H_20_20', 'New_H_20_5', 'New_H_30', 'New_H_30_10', 'New_H_30_20', 'New_H_30_5', 'New_H_5', 'New_H_5_10', 'New_H_5_20', 'New_H_5_5', 'New_H_60', 'New_H_60_10', 'New_H_60_20', 'New_H_60_5', 'New_Highest_10', 'New_Highest_20', 'New_Highest_30', 'New_Highest_5', 'New_Highest_60', 'New_Hl_10', 'New_Hl_20', 'New_Hl_30', 'New_Hl_5', 'New_Hl_60', 'New_L_10', 'New_L_10_10', 'New_L_10_20', 'New_L_10_5', 'New_L_20', 'New_L_20_10', 'New_L_20_20', 'New_L_20_5', 'New_L_30', 'New_L_30_10', 'New_L_30_20', 'New_L_30_5', 'New_L_5', 'New_L_5_10', 'New_L_5_20', 'New_L_5_5', 'New_L_60', 'New_L_60_10', 'New_L_60_20', 'New_L_60_5', 'New_Lh_10', 'New_Lh_20', 'New_Lh_30', 'New_Lh_5', 'New_Lh_60', 'New_Lowest_10', 'New_Lowest_20', 'New_Lowest_30', 'New_Lowest_5', 'New_Lowest_60', 'PDI', 'PDI_MDI_DOWN', 'PDI_MDI_UP', 'PDI_z', 'PSY', 'PSY_1', 'PSY_10_DOWN', 'PSY_90_UP', 'PSY_z', 'RSI1', 'RSI1_1', 'RSI1_2', 'RSI2', 'RSI2_1', 'RSI2_2', 'RSI3', 'RSI3_1', 'RSI3_2', 'TH', 'TH_1', 'TL', 'TL_1', 'TQ', 'TQ_1', 'TYP', 'TYP_mean', 'UB', 'UB_z', 'VR', 'VR_160_450', 'VR_40_70', 'VR_40_DOWN', 'VR_450_UP', 'VR_80_150', 'WR1', 'WR1_15_DOWN', 'WR1_20_UP', 'WR1_50_DOWN', 'WR1_50_UP', 'WR1_80_DOWN', 'WR1_85_UP', 'WR1_WR2_DOWN', 'WR1_WR2_UP', 'WR1_z', 'WR2', 'WR2_z', '_id', 'abs', 'amount', 'change_r', 'change_r_next', 'change_r_next16', 'change_r_next48', 'close', 'close_LB_DOWN', 'close_UB_UP', 'close_down_ma10', 'close_down_ma20', 'close_down_ma30', 'close_down_ma5', 'close_down_ma60', 'close_high', 'close_last_close', 'close_last_close_13', 'close_last_close_23', 'close_last_close_34', 'close_last_close_45', 'close_last_high', 'close_last_high_13', 'close_last_high_23', 'close_last_high_34', 'close_last_high_45', 'close_last_low', 'close_last_low_13', 'close_last_low_23', 'close_last_low_34', 'close_last_low_45', 'close_last_open', 'close_last_open_13', 'close_last_open_23', 'close_last_open_34', 'close_last_open_45', 'close_low', 'close_ma5', 'close_open', 'close_up_ma10', 'close_up_ma20', 'close_up_ma30', 'close_up_ma5', 'close_up_ma60', 'date', 'dea', 'dea_down_cross_0', 'dea_up_cross_0', 'dea_z', 'dif', 'dif_z', 'diff_down_cross_0', 'diff_down_cross_dea', 'diff_up_cross_0', 'diff_up_cross_dea', 'duotou_5_10_20', 'h_10_20', 'h_20_30', 'h_30_60', 'h_5_10', 'high', 'high_last_close', 'high_last_close_13', 'high_last_close_23', 'high_last_close_34', 'high_last_close_45', 'high_last_high', 'high_last_high_13', 'high_last_high_23', 'high_last_high_34', 'high_last_high_45', 'high_last_low', 'high_last_low_13', 'high_last_low_23', 'high_last_low_34', 'high_last_low_45', 'high_last_open', 'high_last_open_13', 'high_last_open_23', 'high_last_open_34', 'high_last_open_45', 'high_list', 'high_low', 'high_ma5', 'high_open', 'highest_10', 'highest_10_10', 'highest_10_20', 'highest_10_5', 'highest_20', 'highest_20_10', 'highest_20_20', 'highest_20_5', 'highest_30', 'highest_30_10', 'highest_30_20', 'highest_30_5', 'highest_5', 'highest_5_10', 'highest_5_20', 'highest_5_5', 'highest_60', 'highest_60_10', 'highest_60_20', 'highest_60_5', 'highestl_10', 'highestl_20', 'highestl_30', 'highestl_5', 'highestl_60', 'kdj_10_max', 'kdj_10_min', 'kdj_30_max', 'kdj_30_min', 'kdj_5_10_down', 'kdj_5_10_up', 'kdj_5_30_down', 'kdj_5_30_up', 'kdj_5_60_down', 'kdj_5_60_up', 'kdj_5_max', 'kdj_5_min', 'kdj_60_max', 'kdj_60_min', 'kongtou_5_10_20', 'lRSI_z', 'l_10_20', 'l_20_30', 'l_30_60', 'l_5_10', 'last10_high', 'last10_low', 'last20_high', 'last20_low', 'last2_Close_dt_ma10', 'last2_Close_dt_ma20', 'last2_Close_dt_ma30', 'last2_Close_dt_ma5', 'last2_Close_dt_ma60', 'last2_close', 'last2_close_high', 'last2_close_low', 'last2_close_open', 'last2_high', 'last2_high_low', 'last2_high_open', 'last2_low', 'last2_low_open', 'last2_open', 'last2_volume', 'last3_Close_dt_ma10', 'last3_Close_dt_ma20', 'last3_Close_dt_ma30', 'last3_Close_dt_ma5', 'last3_Close_dt_ma60', 'last3_close', 'last3_high', 'last3_low', 'last3_open', 'last3_volume', 'last4_Close_dt_ma10', 'last4_Close_dt_ma20', 'last4_Close_dt_ma30', 'last4_Close_dt_ma5', 'last4_Close_dt_ma60', 'last4_close', 'last4_high', 'last4_low', 'last4_open', 'last4_volume', 'last5_high', 'last5_low', 'last_Close_dt_ma10', 'last_Close_dt_ma20', 'last_Close_dt_ma30', 'last_Close_dt_ma5', 'last_Close_dt_ma60', 'last_close', 'last_close_high', 'last_close_low', 'last_close_ma5', 'last_close_open', 'last_high', 'last_high_low', 'last_high_ma5', 'last_high_open', 'last_low', 'last_low_open', 'last_ma10_gt_ma20', 'last_ma20_gt_ma30', 'last_ma30_gt_ma60', 'last_ma5_gt_ma10', 'last_open', 'last_open_ma5', 'last_volume', 'lastlow_ma5', 'lema', 'low', 'low_last_close', 'low_last_close_13', 'low_last_close_23', 'low_last_close_34', 'low_last_close_45', 'low_last_high', 'low_last_high_13', 'low_last_high_23', 'low_last_high_34', 'low_last_high_45', 'low_last_low', 'low_last_low_13', 'low_last_low_23', 'low_last_low_34', 'low_last_low_45', 'low_last_open', 'low_last_open_13', 'low_last_open_23', 'low_last_open_34', 'low_last_open_45', 'low_list', 'low_ma5', 'low_open', 'lowest_10', 'lowest_10_10', 'lowest_10_20', 'lowest_10_5', 'lowest_20', 'lowest_20_10', 'lowest_20_20', 'lowest_20_5', 'lowest_30', 'lowest_30_10', 'lowest_30_20', 'lowest_30_5', 'lowest_5', 'lowest_5_10', 'lowest_5_20', 'lowest_5_5', 'lowest_60', 'lowest_60_10', 'lowest_60_20', 'lowest_60_5', 'lowesth_10', 'lowesth_20', 'lowesth_30', 'lowesth_5', 'lowesth_60', 'm1', 'm2', 'm3', 'ma10', 'ma10_angle', 'ma10_angle2', 'ma10_angle3', 'ma10_angle4', 'ma10_gt_ma20', 'ma10_z', 'ma10_z2', 'ma10_z3', 'ma10_z4', 'ma20', 'ma20_angle', 'ma20_angle2', 'ma20_angle3', 'ma20_angle4', 'ma20_gt_ma30', 'ma20_z', 'ma20_z2', 'ma20_z3', 'ma20_z4', 'ma30', 'ma30_angle', 'ma30_angle2', 'ma30_angle3', 'ma30_angle4', 'ma30_gt_ma60', 'ma30_z', 'ma30_z2', 'ma30_z3', 'ma30_z4', 'ma5', 'ma5_angle', 'ma5_angle2', 'ma5_angle3', 'ma5_angle4', 'ma5_down_ma10', 'ma5_down_ma10_2', 'ma5_down_ma10_3', 'ma5_down_ma10_4', 'ma5_down_ma20', 'ma5_down_ma20_2', 'ma5_down_ma20_3', 'ma5_down_ma20_4', 'ma5_down_ma30', 'ma5_down_ma30_2', 'ma5_down_ma30_3', 'ma5_down_ma30_4', 'ma5_down_ma60', 'ma5_down_ma60_2', 'ma5_down_ma60_3', 'ma5_down_ma60_4', 'ma5_gt_ma10', 'ma5_up_ma10', 'ma5_up_ma10_2', 'ma5_up_ma10_3', 'ma5_up_ma10_4', 'ma5_up_ma20', 'ma5_up_ma20_2', 'ma5_up_ma20_3', 'ma5_up_ma20_4', 'ma5_up_ma30', 'ma5_up_ma30_2', 'ma5_up_ma30_3', 'ma5_up_ma30_4', 'ma5_up_ma60', 'ma5_up_ma60_2', 'ma5_up_ma60_3', 'ma5_up_ma60_4', 'ma5_z', 'ma5_z2', 'ma5_z3', 'ma5_z4', 'ma60', 'ma60_angle', 'ma60_angle2', 'ma60_angle3', 'ma60_angle4', 'ma60_z', 'ma60_z2', 'ma60_z3', 'ma60_z4', 'macd', 'macd_10_down_sum', 'macd_10_up_sum', 'macd_30_down_sum', 'macd_30_up_sum', 'macd_5_10_down', 'macd_5_10_up', 'macd_5_30_down', 'macd_5_30_up', 'macd_5_60_down', 'macd_5_60_up', 'macd_5_down_sum', 'macd_5_up_sum', 'macd_60_down_sum', 'macd_60_up_sum', 'macd_over_last_macd', 'macd_q', 'macd_z', 'market', 'max', 'max2', 'mid', 'number_close_down_mean', 'number_close_up_mean', 'open', 'open_last_close', 'open_last_close_13', 'open_last_close_23', 'open_last_close_34', 'open_last_close_45', 'open_last_high', 'open_last_high_13', 'open_last_high_23', 'open_last_high_34', 'open_last_high_45', 'open_last_low', 'open_last_low_13', 'open_last_low_23', 'open_last_low_34', 'open_last_low_45', 'open_last_open', 'open_last_open_13', 'open_last_open_23', 'open_last_open_34', 'open_last_open_45', 'open_ma5', 'p_close', 'p_close16', 'p_close48', 'rsv', 'sRSI_20_cross_lRSI', 'sRSI_80_cross_lRSI', 'sRSI_down_cross_20', 'sRSI_down_cross_50', 'sRSI_up_cross_50', 'sRSI_up_cross_80', 'sRSI_z', 'sema', 'std', 'std_std_z_DOWN', 'std_std_z_UP', 'std_z', 'stock_code', 'sum1', 'sum2', 'sum3', 'sum4', 'v_dt_ma10', 'v_dt_ma20', 'v_dt_ma30', 'v_dt_ma5', 'v_dt_ma60', 'v_ma10', 'v_ma20', 'v_ma30', 'v_ma5', 'v_ma60', 'volume', 'volume_r', 'vv_dt_ma10', 'vv_dt_ma20', 'vv_dt_ma30', 'vv_dt_ma5', 'vv_dt_ma60', 'vv_ma10', 'vv_ma20', 'vv_ma30', 'vv_ma5', 'vv_ma60' ] #select rank names names = [ 'New_H_20_5', 'New_L_10_5', 'ma10_angle2', 'low_last_open', 'ADX1', 'last_Close_dt_ma5', 'ma20_angle', 'high_last_high_23', 'CCI_z', 'kdj_30_min', 'MDI_z', 'highest_20_10', 'high_last_low_45', 'last_low_open', 'RSI1', 'low_last_high_13', 'high_last_open_13', 'ma30_angle2', 'kdj_30_max', 'AR', 'l_10_20', 'lema', 'low_last_close_23', 'kdj_60_min', 'PDI_z', 'high_last_low_34', 'MTR_D2', 'last3_open', 'New_L_10', 'low_last_close_13', 'RSI2', 'highestl_30', 'VR', 'low_last_low_34', 'D_z', 'last_close_high', 'ma5_z3', 'number_close_down_mean', 'New_L_20_20', 'close_last_high_13', 'v_ma5', 'New_Hl_20', 'kdj_10_max', 'New_H_30_20', 'New_H_60_10', 'last_high_ma5', 'New_Hl_60', 'New_H_30_10', 'MA2_z', 'PSY', 'New_Hl_5', 'New_L_20', 'CCI', 'kdj_5_30_up', 'highestl_5', 'Close_dt_ma5', 'ma5', 'New_H_30', 'last_close', 'high_last_open', 'ma30_z4', 'h_5_10', 'lastlow_ma5', 'close_last_low_45', 'New_H_20', 'New_L_30_10', 'low_last_low', 'close_last_low_23', 'ma10', 'New_L_20_10', 'open_last_high_34', 'ma30_z3', 'last5_low', 'ma20', 'p_close', 'New_Lh_5', 'low_last_high_45', 'open_last_low_45', 'low_last_close', 'lowesth_5', 'MA1', 'open_last_open_13', 'New_H_10_10', 'RSI1_1', 'dea_down_cross_0', 'open_last_high_23', 'last4_Close_dt_ma10', 'last3_volume', 'amount', 'm3', 'sum2', 'last_ma30_gt_ma60', 'ma5_z4', 'BR', 'ma60', 'New_L_10_10', 'high_last_close_34', 'New_H_60_5', 'close_last_open_34', 'New_L_30_5', 'abs', 'low_last_close_34', 'low_last_open_45', 'last_high_open', 'v_dt_ma20', 'macd_5_30_down', 'h_30_60', 'New_H_5_10', 'last3_low', 'kdj_5_60_up', 'high_last_high_45', 'New_L_5_20', 'last3_high', 'last4_volume', 'last_Close_dt_ma20', 'New_Lh_20', 'kdj_5_max', 'last_ma5_gt_ma10', 'close_last_close_45', 'TH_1', 'New_L_60_10', 'close_last_open_23', 'low_last_high_23', 'low_last_low_45', 'v_ma30', 'New_H_10', 'duotou_5_10_20', 'macd_5_60_down', 'New_H_20_20', 'ma20_z4', 'highestl_60', 'ma30_angle', 'high', 'std_std_z_UP', 'WR2', 'low_last_high', 'kdj_5_10_up', 'MA3', 'high_last_high_34', 'low_last_open_13', 'volume', 'close_last_close_13', 'last2_Close_dt_ma10', 'high_last_close_45', 'v_dt_ma5', 'New_L_5', 'MA1_z', 'last3_Close_dt_ma10', 'New_Lh_10', 'D', 'Close_dt_ma60', 'last2_high_low', 'open_last_high_13', 'open_last_high_45', 'New_H_30_5', 'New_H_5_5', 'MA3_z', 'open_last_close_34', 'ma20_z3', 'number_close_up_mean', 'ma10_z4', 'New_H_5', 'Close_dt_ma20', 'macd_5_10_down', 'PDI', 'New_Hl_30', 'close_last_high', 'high_last_open_45', 'CR_z', 'vv_dt_ma20', 'low_last_open_34', 'MTR_D3', 'close_last_low', 'New_L_60_5', 'lowesth_60', 'high_last_high', 'macd_5_down_sum', 'close_high', 'CR', 'open_last_low_23', 'New_H_60', 'J_z', 'DMP1', 'low_last_high_34', 'last10_low', 'high_list', 'change_r_next', 'open', 'New_H_60_20', 'New_L_60_20', 'MA2', 'kdj_60_max', 'last_close_ma5', 'last2_close_low', 'last_ma10_gt_ma20', 'kdj_5_60_down', 'last2_Close_dt_ma60', 'J', 'ma60_z4', 'WR2_z', 'New_L_5_10', 'PSY_1', 'close_last_open_13', 'sRSI_down_cross_50', 'v_dt_ma10', 'ma5_down_ma60_2', 'kdj_5_30_down', 'last2_low_open', 'macd_60_up_sum', 'std', 'highest_60', 'K', '_id', 'ma30', 'open_last_low_13', 'close_down_ma5', 'ma20_angle2', 'l_5_10', 'LD', 'h_10_20', 'std_z', 'DMM', 'vv_ma10', 'close_last_close', 'high_last_low_23', 'Close_dt_ma10', 'WR1', 'lRSI_z', 'last2_low', 'MDI', 'last20_low', 'ADX', 'New_L_30', 'high_last_close_23', 'diff_up_cross_dea', 'open_last_close_13', 'lowest_20_5', 'low_last_close_45', 'macd_q', 'm2', 'close_last_close_34', 'dea', 'last_Close_dt_ma60', 'BR_z', 'change_r', 'high_last_open_34', 'TL', 'last_low', 'New_L_20_5', 'last20_high', 'high_last_close_13', 'v_ma20', 'last2_close_open', 'ma60_z', 'ma10_angle', 'v_dt_ma30', 'macd_60_down_sum', 'open_last_close', 'open_last_open', 'ma60_angle', 'low_last_low_13', 'last_close_open', 'close_last_open_45', 'high_last_low_13', 'stock_code', 'l_30_60', 'high_last_close', 'v_ma10', 'RSI2_2', 'v_ma60', 'close_last_low_13', 'close_last_high_34', 'sema', 'last2_Close_dt_ma5', 'low_last_low_23', 'last3_Close_dt_ma20', 'open_last_low_34', 'New_Lh_60', 'vv_ma20', 'New_Hl_10', 'ma10_z3', 'high_last_high_13', 'open_last_close_45', 'low', 'New_H_10_5', 'last4_Close_dt_ma20', 'open_last_high', 'diff_down_cross_dea', 'ADX_z', 'WR1_z', 'last_high', 'highest_5_20', 'DMM1', 'PSY_z', 'New_L_5_5', 'close_down_ma60', 'macd_10_down_sum', 'vv_dt_ma60', 'open_last_low', 'highestl_20', 'New_H_10_20', 'open_last_open_23', 'close_last_low_34', 'last_open', 'kdj_5_10_down', 'highest_10_5', 'open_last_close_23', 'New_Lh_30', 'lowest_5_5', 'New_H_20_10', 'highest_10', 'New_L_10_20', 'close_last_open', 'last3_Close_dt_ma30', 'close_low', 'last_Close_dt_ma10', 'v_dt_ma60', 'vv_dt_ma10', 'last4_high', 'lowesth_30', 'RSI2_1', 'close_last_close_23', 'MTR_1', 'lowest_5_10', 'highest_30', 'RSI1_2', 'New_Highest_5', 'AR_z', 'ma60_z2', 'last5_high', 'close_last_high_45', 'last_volume', 'TQ', 'ma5_angle', 'high_last_low', 'sum4', 'highest_5_5', 'RSI3', 'last2_open', 'close_last_high_23', 'dea_up_cross_0', 'last4_Close_dt_ma60', 'close_up_ma5', 'lowest_60', 'New_L_60', 'lowest_10_5', 'open_ma5', 'sum3', 'volume_r', 'diff_up_cross_0', 'MTR_D1', 'highest_30_20', 'New_H_5_20', 'vv_dt_ma5', 'ma20_gt_ma30', 'vv_dt_ma30', 'Close_dt_ma30', 'last_Close_dt_ma30', 'DMP', 'sRSI_up_cross_80', 'lowesth_20', 'VR_80_150', 'ma60_angle3', 'last2_close', 'highest_20', 'ma5_z', 'm1', 'last2_volume', 'kdj_10_min', 'sum1', 'high_low', 'VR_160_450', 'last3_Close_dt_ma60', 'highest_5_10', 'h_20_30', 'lowest_30_5', 'last2_Close_dt_ma30', 'lowest_20_10', 'last2_Close_dt_ma20', 'lowest_30_20', 'high_open', 'ma30_angle4', 'last_open_ma5', 'highest_60_5', 'low_open', 'macd_z', 'ma60_angle4', 'last4_low', 'open_last_open_34', 'kdj_5_min', 'ma20_angle4', 'ma10_gt_ma20', 'TH', 'UB_z', 'lowest_5_20', 'lowest_10_10', 'RSI3_1', 'high_ma5', 'MTR_2', 'BOLL', 'TL_1', 'last4_close', 'high_last_open_23', 'highest_20_20', 'highest_30_5', 'macd_30_down_sum', 'LB', 'RSI3_2', 'New_L_30_20', 'last2_high_open', 'lowest_30', 'last_high_low', 'last3_close', 'last2_close_high', 'last_close_low', 'LB_z', 'last10_high', 'TYP', 'last4_Close_dt_ma5', 'highest_30_10', 'HD', 'ma20_angle3', 'MTR', 'sRSI_z', 'lowest_10', 'New_Highest_10', 'lowest_20', 'last3_Close_dt_ma5', 'highest_20_5', 'ma10_angle3', 'highest_10_10', 'highest_60_20', 'ma5_up_ma60_2', 'l_20_30', 'lowest_60_5', 'lowest_30_10', 'open_last_open_45', 'low_ma5', 'highest_60_10', 'macd_5_60_up', 'change_r_next16', 'ma30_angle3', 'last4_open', 'last4_Close_dt_ma30', 'ma5_z2', 'ma60_angle2', 'lowest_60_10', 'ma10_angle4', 'TYP_mean', 'macd_10_up_sum', 'ma10_z', 'ma30_z2', 'lowest_20_20', 'WR1_15_DOWN', 'mid', 'lowest_10_20', 'highestl_10', 'last_ma20_gt_ma30', 'kongtou_5_10_20', 'ma5_up_ma60_4', 'ma30_z', 'New_Highest_20', 'ma10_z2', 'ma60_z3', 'lowest_5', 'lowest_60_20', 'ma20_z2', 'highest_5', 'sRSI_up_cross_50', 'lowesth_10', 'ma30_gt_ma60', 'ma5_up_ma60_3', 'max2', 'ma20_z', 'New_Lowest_5', 'New_Highest_30', 'highest_10_20', 'macd_5_30_up', 'UB', 'low_last_open_23', 'sRSI_down_cross_20', 'last2_high', 'market', 'macd_30_up_sum', 'close_down_ma20', 'macd', 'max', 'macd_5_10_up', 'WR1_20_UP', 'low_list', 'New_Highest_60', 'close_up_ma20', 'ma5_up_ma20_4', 'WR1_85_UP', 'ma5_up_ma10', 'New_Lowest_10', 'CCI_100_DOWN', 'VR_40_70', 'sRSI_80_cross_lRSI', 'close_LB_DOWN', 'sRSI_20_cross_lRSI', 'ma5_down_ma60_4', 'close_open', 'WR1_80_DOWN', 'WR1_50_UP', 'ma5_down_ma60_3', 'macd_over_last_macd', 'J_down_cross_100', 'WR1_50_DOWN', 'J_over_80', 'CR_MA1_UP', 'ma5_down_ma10_2', 'ma5_angle4', 'close_UB_UP', 'close', 'ma5_down_ma10', 'ma5_up_ma60', 'CR_MA3_UP', 'CR_MA1_DOWN', 'ma5_angle2', 'ma5_up_ma30', 'dif', 'WR1_WR2_UP', 'BR_AR_UP', 'New_Lowest_20', 'New_Lowest_30', 'CCI_-100_UP', 'close_ma5', 'J_up_cross_0', 'ma5_down_ma20_2', 'close_up_ma30', 'date', 'ma5_down_ma30_4', 'close_down_ma30', 'PDI_MDI_UP', 'ma5_up_ma20', 'ma5_down_ma10_4', 'J_less_20', 'ma5_up_ma10_3', 'TQ_1', 'ADX_50_UP', 'dif_z', 'ma5_down_ma20_3', 'close_up_ma10', 'ma5_up_ma20_3', 'rsv', 'PDI_MDI_DOWN', 'ma5_down_ma20_4', 'ma5_up_ma10_4', 'ma5_angle3', 'ma5_up_ma10_2', 'ma5_up_ma30_2', 'ma5_up_ma20_2', 'VR_40_DOWN', 'VR_450_UP', 'dea_z', 'ma5_up_ma30_3', 'close_down_ma10', 'CR_40_UP', 'ma5_down_ma60', 'New_Lowest_60', 'AR_50_DOWN', 'ma5_down_ma10_3', 'CR_MA2_UP', 'p_close16', 'PSY_90_UP', 'ma5_gt_ma10', 'ma5_down_ma30_2', 'CR_MA3_DOWN', 'std_std_z_DOWN', 'PSY_10_DOWN', 'diff_down_cross_0', 'BR_AR_DOWN', 'ma5_down_ma30', 'ma5_down_ma20', 'AR_50_UP', 'ADX_50_DOWN', 'CR_40_DOWN', 'ma5_up_ma30_4', 'WR1_WR2_DOWN', 'CR_MA2_DOWN', 'p_close48', 'macd_5_up_sum', 'change_r_next48', 'close_up_ma60', 'ma5_down_ma30_3' ] # try No20. names = names[0:20] li = [ 600000, 600008, 600009, 600010, 600011, 600015, 600016, 600018, 600019, 600023, 600025, 600028, 600029, 600030, 600031, 600036, 600038, 600048, 600050, 600061, 600066, 600068, 600085, 600089, 600100, 600104, 600109, 600111, 600115, 600118, 600153, 600157, 600170, 600176, 600177, 600188, 600196, 600208, 600219, 600221, 600233, 600271, 600276, 600297, 600309, 600332, 600339, 600340, 600346, 600352, 600362, 600369, 600372, 600373, 600376, 600383, 600390, 600398, 600406, 600415, 600436, 600438, 600482, 600487, 600489, 600498, 600516, 600518, 600519, 600522, 600535, 600547, 600549, 600570, 600583, 600585, 600588, 600606, 600637, 600660, 600663, 600674, 600682, 600688, 600690, 600703, 600704, 600705, 600739, 600741, 600795, 600804, 600809, 600816, 600820, 600837, 600867, 600886, 600887, 600893, 600900, 600909, 600919, 600926, 600958, 600959, 600977, 600999, 601006, 601009, 601012, 601018, 601021, 601088, 601099, 601108, 601111, 601117, 601155, 601166, 601169, 601186, 601198, 601211, 601212, 601216, 601225, 601228, 601229, 601238, 601288, 601318, 601328, 601333, 601336, 601360, 601377, 601390, 601398, 601555, 601600, 601601, 601607, 601611, 601618, 601628, 601633, 601668, 601669, 601688, 601718, 601727, 601766, 601788, 601800, 601808, 601818, 601828, 601838, 601857, 601866, 601877, 601878, 601881, 601888, 601898, 601899, 601901, 601919, 601933, 601939, 601958, 601985, 601988, 601989, 601991, 601992, 601997, 601998, 603160, 603260, 603288, 603799, 603833, 603858, 603993, 1, 2, 60, 63, 69, 100, 157, 166, 333, 338, 402, 413, 415, 423, 425, 503, 538, 540, 559, 568, 623, 625, 627, 630, 651, 671, 709, 723, 725, 728, 768, 776, 783, 786, 792, 826, 839, 858, 876, 895, 898, 938, 959, 961, 963, 983, 1965, 1979, 2007, 2008, 2024, 2027, 2044, 2050, 2065, 2074, 2081, 2085, 2142, 2146, 2153, 2202, 2230, 2236, 2241, 2252, 2294, 2304, 2310, 2352, 2385, 2411, 2415, 2450, 2456, 2460, 2466, 2468, 2470, 2475, 2493, 2500, 2508, 2555, 2558, 2572, 2594, 2601, 2602, 2608, 2624, 2625, 2673, 2714, 2736, 2739, 2797, 2925, 300003, 300015, 300017, 300024, 300027, 300033, 300059, 300070, 300072, 300122, 300124, 300136, 300144, 300251, 300408, 300433 ] li = Stock.get_index_stock_code_list() # label='change_r_next16' label = 'change_r_next' def classify(self, x): return x // 50 def get_data(self, start_date, end_date): print(start_date) curror = BaseModel('features_index_day').query( sql=dict(stock_code={'$in': model.li}, date={ '$gte': start_date, '$lte': end_date })) if curror.count(): data = pd.DataFrame(list(curror)) data = data.loc[:, model.names + [model.label]] data = data.replace(to_replace=np.Infinity, value=np.NaN).dropna() # data['change_r_next16'] = data.change_r_next16.map(lambda x: 1 if x > 0 else 0) for cl in model.names: v = data[cl].iloc[0] # if type(v).__name__ !='bool': # data[cl] = data.sort_values(by=[cl], ascending=False).index # temp = data[cl].mean() # data[cl] = data[cl].map(lambda x:1 if x>len(data)//2 else 0) # pass y = data.loc[:, [model.label]] y['sort'] = y.sort_values(by=[model.label], ascending=False).index y = y.drop([model.label], axis=1) y['sort'] = y.sort.map(lambda x: self.classify(x)) # y['sort'] = y.sort.map(lambda x:1 if x>len(y)/2 else 0) X = data.drop([model.label], axis=1) # X = data.loc[:, model.names] # X_test = data_test.loc[:, model.names] # y_test = data_test.loc[:, ['change_r_next16']] return X, y else: return pd.DataFrame([]), pd.DataFrame([]) def get_data_for_selection(self, start_date, end_date): curror = BaseModel('novel_Feature').query( sql=dict(stock_code={'$in': model.li}, date={ '$gte': start_date, '$lte': end_date })) if curror.count(): data = pd.DataFrame(list(curror)) data = data.loc[:, model.names] data = data.replace(to_replace=np.Infinity, value=np.NaN).dropna() # data['change_r_next16'] = data.change_r_next16.map(lambda x: 1 if x > 0 else 0) for cl in model.names: v = data[cl].iloc[0] # tp=type(v) # if type(v).__name__ !='bool': # data[cl] = data.sort_values(by=[cl], ascending=False).index # # temp = data[cl].mean() # data[cl] = data[cl].map(lambda x:1 if x>len(data)//2 else 0) # pass y = data.loc[:, [model.label]] y['sort'] = y.sort_values(by=[model.label], ascending=False).index y = y.drop([model.label], axis=1) y['sort'] = y.sort.map(lambda x: 1 if x > len(y) / 2 else 0) X = data.drop([model.label, 'date', '_id'], axis=1) return X, y else: return [], [] def model_select(self, start_date, end_date): curror = BaseModel('calendar').query(sql=dict( date={ '$gte': start_date, '$lte': end_date })) date_list = list(curror) n = 0 x, y = list(), list() for i in range(len(date_list) - n): print(date_list[i]['date']) temp1, temp2 = self.get_data_for_selection( date_list[i]['date'], date_list[i + n]['date']) x.append(temp1) y.append(temp2) X = pd.concat(x) y = pd.concat(y) X = np.array(X) y = np.array(y) # Build a forest and compute the feature importances forest = ExtraTreesClassifier(criterion='entropy', n_estimators=250, random_state=0) forest.fit(X, y) importances = forest.feature_importances_ std = np.std( [tree.feature_importances_ for tree in forest.estimators_], axis=0) indices = np.argsort(importances)[::-1] # Print the feature ranking print("Feature ranking:") result = list() for f in range(X.shape[1]): print("%d. feature %d %s (%f)" % (f + 1, indices[f], model.names[indices[f]], importances[indices[f]])) result.append(model.names[indices[f]]) print(result) # Plot the feature importances of the forest plt.figure() plt.title("Feature importances") plt.bar(range(X.shape[1]), importances[indices], color="r", yerr=std[indices], align="center") plt.xticks(range(X.shape[1]), indices) plt.xlim([-1, X.shape[1]]) plt.show() def train(self, clf, X, y): print('x_t', len(X)) clf = clf.fit(X, y) # 此时完成训练 return clf def save(self, clf, train_model_name): joblib.dump(clf, train_model_name) def is_exist(self, train_model_name): return os.path.exists(train_model_name) def get(self, train_model_name): if self.is_exist(train_model_name): clf = joblib.load(train_model_name) else: clf = None return clf def exe(self, clf, start_date, end_date): # clf = self.get(train_model_name) X, y = self.get_data(start_date, end_date) if len(X): clf = self.train(clf, X, y) return clf # self.save(clf, train_model_name) # model().report(train_model_name, dt.datetime(2018, 1, 3), dt.datetime(2018, 1, 3)) def report(self, clf, start_date, end_date): curror = BaseModel('calendar').query(sql=dict( date={ '$gte': start_date, '$lte': end_date })) date_list = list(curror) n = 0 x, y = list(), list() for i in range(len(date_list) - n): print(date_list[i]['date']) temp1, temp2 = self.get_data(date_list[i]['date'], date_list[i + n]['date']) x.append(temp1) y.append(temp2) X_test, y_test = pd.concat(x), pd.concat(y) y_pred = clf.predict(X_test) # 预测 result = classification_report(y_test, y_pred) print(result) print(clf.score(X_test, y_test)) def visualization(self, clf): dot_data = tree.export_graphviz(clf, out_file=None) graph = pydotplus.graph_from_dot_data(dot_data) graph.write_png("tree.png") # 生成png文件
for sc in stocks: data = [] try: print('success', sc) data = (obj.get_data(stock=sc)) except Exception as e: print('fail', sc) pass finally: result.extend(data) BaseModel('outstanding').remove({}) BaseModel('outstanding').insert_batch(result) if __name__ == '__main__': stocks = Stock.get_all_stock() pool = multiprocessing.Pool(processes=3) m = 10 li = [stocks[i:i + m] for i in range(0, len(stocks), m)] result = pool.map(fun, li) # Outstanding().get_data(stock='000001') # start_date = dt.datetime.strptime("2018-05-05", "%Y-%m-%d") # import pandas as pd # ModelData(location='server_db',dbname='big-data').insert_data(table_name='userinfo',data=pd.DataFrame([{'name':'liuxiaoju','password':'******'}])) # ModelData.insert_data(table_name='userinfo',data=pd.DataFrame([{'name':'zjf','password':'******'}])) # data=['399001', '399106', '399005', '399101', '399006', '399102', '399303', '000001', '000300', '000905', '000016', '880578', '880579', '880577', '880574', '880575', '880572', '880573', '880570', '880571', '880400', '880368', '880503', '880502', '880501', '880507', '880506', '880505', '880504', '880489', '880482', '880483', '880486', '880361', '880484', '880485', '880409', '880477', '880476', '880474', '880473', '880472', '880471', '880374', '880375', '880372', '880373', '880626', '880627', '880624', '880625', '880622', '880623', '880620', '880621', '880628', '880629', '880394', '880392', '880393', '880390', '880391', '880398', '880399', '880530', '880653', '880652', '880651', '880650', '880657', '880656', '880655', '880654', '880929', '880659', '880658', '880928', '880431', '880430', '880921', '880228', '880211', '880210', '880219', '880990', '880991', '880992', '880661', '880448', '880446', '880447', '880444', '880445', '880442', '880443', '880440', '880441', '880533', '880439', '880438', '880536', '880537', '880534', '880535', '880925', '880432', '880927', '880926', '880437', '880920', '880923', '880922', '880213', '880212', '880668', '880669', '880217', '880216', '880215', '880214', '880662', '880663', '880660', '880218', '880666', '880667', '880664', '880665', '880327', '880326', '880325', '880324', '880321', '880320', '880329', '880328', '880569', '880568', '880564', '880567', '880566', '880560', '880563', '880468', '880318', '880319', '880312', '880313', '880310', '880311', '880491', '880490', '880493', '880492', '880494', '880497', '880402', '880403', '880369', '880401', '880406', '880407', '880363', '880362', '880408', '880360', '880367', '880366', '880364', '880635', '880634', '880637', '880636', '880631', '880630', '880633', '880632', '880639', '880638', '880387', '880229', '880381', '880380', '880383', '880382', '880222', '880223', '880220', '880221', '880226', '880227', '880224', '880225', '880478', '880462', '880541', '880540', '880424', '880425', '880426', '880420', '880421', '880930', '880548', '880594', '880595', '880596', '880597', '880459', '880591', '880989', '880988', '880455', '880986', '880985', '880984', '880983', '880599', '880453', '880452', '880909', '880855', '880202', '880203', '880918', '880919', '880523', '880522', '880525', '880524', '880527', '880526', '880910', '880911', '880912', '880913', '880915', '880916', '880917', '880679', '880678', '880671', '880670', '880673', '880672', '880675', '880674', '880677', '880676', '880588', '000001', '880350', '880351', '880355', '000300', '880558', '880559', '880550', '880551', '880552', '880553', '880554', '880556', '880557', '880954', '880950', '880951', '880952', '880953', '880308', '880305', '880307', '880306', '880301', '880303', '880302', '880411', '880410', '880413', '880412', '880414', '880419', '880418', '880600', '880601', '880602', '880603', '880604', '880605', '880606', '880607', '880608', '880609', '880231', '880230', '880232', '880592', '880593', '880987', '880454', '880456', '880598', '880982', '880981', '880590', '000905', '880583', '880582', '880581', '880580', '880587', '880586', '880585', '880584', '880460', '880461', '880589', '880463', '880464', '880465', '880466', '880467', '880907', '880906', '880905', '880904', '880903', '880902', '880901', '880862', '880908', '880519', '880515', '880516', '880513', '880521', '000016', '880520', '880613', '880340', '880345', '880344', '880347', '880346', '880348', '880612', '880529', '880528', '880644', '880645', '880646', '880647', '880640', '880641', '880642', '880643', '880648', '880649', '880949', '880948', '880943', '880942', '880941', '880940', '880947', '880946', '880945', '880944', '880338', '880339', '880330', '880335', '880336', '880337', '880423', '880547', '880546', '880545', '880544', '880542', '880938', '880939', '880936', '880937', '880531', '880935', '880932', '880933', '880422', '880931', '880204', '880205', '880206', '880207', '880201', '880619', '880618', '880617', '880616', '880615', '880614', '880208', '880209', '880610', '880680', '880681', '880682', '880683', '880684', '880685', '880549', '880993'] # # print(len(data)) # li=['880511', '880532', '880538', '880539', '880543', '880562', '880565', '880576', '880801', '880802', '880803', '880804', '880805', '880806', '880807', '880808', '880809', '880810', '880811', '880812', '880813', '880821', '880823', '880824', '880826', '880827', '880829', '880833', '880834', '880835', '880836', '880837', '880842', '880843', '880844', '880845', '880846', '880847', '880848', '880849', '880850', '880851', '880852', '880853', '880854', '880856', '880857', '880858', '880859', '880860', '880861', '880863', '880864', '880865', '880866', '880867', '880868', '880869', '880870', '880871', '880872', '880873', '880874', '880875', '880876', '880877', '880878', '880879', '880880', '880881', '880882', '880883', '880884', '880885', '880886', '880887', '880889', '880890', '880891', '880892', '880893', '880895', '880896', '880897', '880894']