def query_from_mysql(self, code=None): df = None if (code == None): df = pm.query(DbCreator.share_base) else: df = pm.query(DbCreator.share_data_day, where='code=\'' + code + '\'') df = df[df[Config.timeToMarket] != '0000-00-00'] df = df.sort_values(by=[Config.code]) df.index = np.arange(0, df.shape[0], 1) return df
def _process(self, df, start): code = df.loc[0, Config.code] basic_df = pm.query(DbCreator.share_base, where=' code="%s"' % (code)) print(basic_df.loc[0, Config.totals]) df[Config.totals] = df[Config.close] * basic_df.loc[0, Config.totals] return df[[Config.id, Config.totals]]
def query_test_data(self, code, tb_name=DbCreator.share_data_day): import numpy as np df = pm.query(tb_name, where=' code="%s"' % (code)) df.sort_values(by=[Config.db_date], inplace=True) # 按列进行排序 df.index = np.arange(0, df.shape[0], 1) # 保证索引排序 df[Config.db_date] = df[Config.db_date].astype(np.str) # 日期更改 return df
def kpi_month(code): import numpy as np df = pm.query(DbCreator.share_data_month, where='code=\'' + code + '\' and trade_date>=\'2015-01\'') logger.info('start to month reverse kpi:' + code + ' size:' + str(df.shape[0])) if (df.shape[0] == 0): logger.info('no data to kpi:') return df.sort_values(by=[Config.db_date], inplace=True) # 按列进行排序 df.index = np.arange(0, df.shape[0], 1) # 保证索引排序 df[Config.db_date] = df[Config.db_date].astype(np.str) # 日期更改 mk = MonthReverse() succ = mk.run(code, df, start=0, to_mysql=True) logger.info('end to month kpi:' + code) return succ
def kpi_s(code, start_date, pm, dict): df = pm.query(DbCreator.share_data_day, where='code=\'' + code + '\' and trade_date>=\'2011-01-01\'') logger.info('start to kpi:' + code + ' size:' + str(df.shape[0])) if (df.shape[0] == 0): logger.info('no data to kpi:') return #流水线 succ = Pipeline.execute(PreProcess(), [ TotalMarket(), CreateRecord(), DeviationsRatio(), FluctionRatio(), IncrementRatio(), Ma(), TurnRatio(), PeRank() ], code, df, start_date) logger.info('end to kpi:' + code) dict[code] = succ
def kpi_m(start_date, pm): # 计算跨多只s的指标 mdf = pm.query(DbCreator.share_data_day, where='trade_date=\'' + start_date + '\'') mdf = mdf[[ Config.id, Config.incOfOneYear, Config.incOfHalfYear, Config.incOf50d ]] mdf = mdf.dropna() rps = Rps() return rps.run(mdf, start_date, True)
def query_month_data_and_count_reverse(self, code, dt, close): dt = DateUtil.getLastMonthForShort(dt[0:7]) mdf = self.month_data.get('' + code + '_' + dt) if (mdf is None): mdf = pm.query(DbCreator.share_data_month, where=' code="%s" and trade_date="%s"' % (code, dt)) self.month_data[code + '_' + dt] = mdf if (not mdf.empty): ha = mdf.loc[0, 'ha'] hb = mdf.loc[0, 'hb'] if (ha != 0 or hb != 0): #print(ha,hb,ha*12+hb,close) if (FactorUtil.is_reverse(ha, hb, close) == 1): return 1 la = mdf.loc[0, 'la'] lb = mdf.loc[0, 'lb'] if (la != 0 or lb != 0): if (FactorUtil.is_reverse(ha, hb, close, direct='l') == 1): return 2 return 0
def __query(self, dt, type): df = pm.query(DbCreator.share_data_finance, where=' fin_date=\'' + dt + '\' and fin_type=\'' + str(type) + '\' order by fin_date') return df
for i in range(start, df.shape[0], 1): df.loc[i, Config.incOf50d] = self.__add_increment__(i, INC_50, df) df.loc[i, Config.incOfHalfYear] = self.__add_increment__( i, INC_120, df) df.loc[i, Config.incOfOneYear] = self.__add_increment__( i, INC_250, df) df.loc[i, Config.incOf2d] = self.__add_increment__(i, 2, df) return df[[ Config.id, Config.incOfOneYear, Config.incOfHalfYear, Config.incOf50d, Config.incOf2d ]] def __add_increment__(self, i, freq, df): freq = freq - 1 if (i >= freq): return ( (df.loc[i, Config.close] - df.loc[i - freq, Config.close]) / df.loc[i - freq, Config.close]) * 100 else: return self._default_value #main if (__name__ == '__main__'): df = pm.query(DbCreator.share_data_day, where='code="000001" and trade_date>="2018-10-01"') ir = IncrementRatio() ir.run('000001', df, to_mysql=False) print(df[[Config.db_date, Config.incOf2d]])
from k.algorithm.Base import Base from k.Config import Config import numpy as np import pandas as pd from k.util.PandasToMysql import pm from k.util.DbCreator import DbCreator class TotalMarket(Base): def _process(self, df, start): code = df.loc[0, Config.code] basic_df = pm.query(DbCreator.share_base, where=' code="%s"' % (code)) print(basic_df.loc[0, Config.totals]) df[Config.totals] = df[Config.close] * basic_df.loc[0, Config.totals] return df[[Config.id, Config.totals]] #main if (__name__ == '__main__'): df = pm.query(DbCreator.share_data_day, where='code=\'000860\' and trade_date>=\'2018-10-10\'') print(df[[Config.id, Config.db_date, Config.totals, Config.close]]) tm = TotalMarket() tm.run('000860', df) print(df[[Config.id, Config.totals, Config.close]])