def test_mail_notify_sender(self):
     df_predict = k_data_predict_log_dao.get_predict_log_list(
         get_current_date())
     html = mail_content_render('mail_predict_daily_report_template.html',
                                {'df_predict': df_predict})
     mail_notify_sender(default_config.MAIL_TO, 'Predict Daily Report',
                        html)
Exemple #2
0
    def get_multiple_k_data(self, code_list=None, start=None, end=None):

        if start is None:
            start = get_next_date(-720)

        if end is None:
            end = get_current_date()

        sql = None
        if code_list is None:
            sql = ('''select  *
                     from k_data  
                     where  time_key BETWEEN %(start)s and %(end)s order by time_key asc ''')
            codes_list = None
        else:

            sql = ('''select  *
                     from k_data  
                     where code in %(code_list)s and time_key BETWEEN %(start)s and %(end)s order by time_key asc ''')

            codes_list = [fill_market(code) for code in code_list]

        data = pd.read_sql(sql=sql, params={"code_list": codes_list, "start": start, "end": end}
                           , con=dataSource.mysql_quant_conn)

        return data
    def test_mail_content_render(self):
        df_predict = k_data_predict_log_dao.get_predict_log_list(
            get_current_date())

        html = mail_content_render('mail_predict_daily_report_template.html',
                                   {'df_predict': df_predict})

        print(html)
Exemple #4
0
    def test_get_last_macd_cross_point(self):
        df = k_data_dao.get_k_data(code="601668",
                                   start=get_next_date(-120),
                                   end=get_current_date())
        df = df.join(cal_macd(df))
        item = k_data_dao.get_last_macd_cross_point(df, window_size=8)

        print(item)
    def test_get_data(self):
        state, data = self.futu_quote_ctx.get_history_kline(
            fill_market('600196'),
            ktype='K_WEEK',
            autype='qfq',
            start='2018-08-01',
            end=get_current_date())

        print(data)
    def insert(self, code, name, best_estimator, train_score, test_score, desc=None):
        sql = text('replace into k_data_model_log (date, code, name, best_estimator, train_score, test_score, `desc`) '
                   'VALUES(:date,:code,:name,:best_estimator,:train_score,:test_score,:desc)')

        result = dataSource.mysql_quant_conn.execute(sql, date=datetime_utils.get_current_date(),
                                                     code=code, name=name, best_estimator=best_estimator
                                                     , train_score=train_score, test_score=test_score, desc=desc)

        return result
    def exists(self, code):
        # 绑定引擎
        # 连接数据表
        table = Table('k_data_model_log', dataSource.mysql_quant_metadata, autoload=True)
        s = select([table.c.code, table.c.date]) \
            .where(and_(table.c.date == datetime_utils.get_current_date(), table.c.code == code))

        result = dataSource.mysql_quant_conn.execute(s)
        logger.debug("row count:%s" % result.rowcount)
        return result.rowcount > 0
    def test_training(self):
        code = '600276'

        data, features = k_data_dao.get_k_data_with_features(
            code, '2015-01-01', datetime_utils.get_current_date())

        pac = PCAModel('k_data')
        pac.training_model(code=code, data=data, features=features)

        model = SequantialNeuralClassifier()
        model.training_model(code, data, features)
Exemple #9
0
def cal_stock_pool():
    df_poll = stock_pool_dao.get_list()
    code_list = list(df_poll['code'].values)
    w_data_list = k_data_weekly_dao.get_multiple_k_data(code_list,
                                                        start='2013-01-01',
                                                        end=get_current_date())
    k_data_list = k_data_dao.get_multiple_k_data(code_list=code_list,
                                                 start=get_next_date(-720),
                                                 end=get_current_date())

    # k_data_list = k_data_list.set_index('code', inplace=True)

    # k_data_list = k_data_dao.get_market_snapshot(code_list=code_list, futu_quote_ctx=futu_quote_ctx)
    matched = []
    for code in code_list:
        rs = cal_single_stock(code, k_data_list, w_data_list)
        if rs is True:
            matched.append(code)

    print("matched:%s" % matched)
Exemple #10
0
def collect_single_daily(code, futu_quote_ctx, start=None, end=None):
    table_name = 'k_data'

    if start is None:
        start = get_current_date()

    if end is None:
        end = get_current_date()

    try:
        state, data = futu_quote_ctx.get_history_kline(fill_market(code),
                                                       ktype='K_DAY',
                                                       autype='qfq',
                                                       start=start,
                                                       end=end)
        data = data.tail(1)
        data.to_sql(table_name,
                    dataSource.mysql_quant_engine,
                    if_exists='append',
                    index=False)
    except Exception as e:
        logger.error(e)
    def get_k_data(self, code, start, end):

        if start is None:
            start = '2013-01-01'

        if end is None:
            end = get_current_date()

        sql = ('''select  *
                 from k_data_weekly  
                 where code=%(code)s and time_key BETWEEN %(start)s and %(end)s order by time_key asc ''')

        data = pd.read_sql(sql=sql, params={"code": fill_market(code), "start": start, "end": end}
                           , con=dataSource.mysql_quant_conn)

        return data
Exemple #12
0
    def get_k_data(self, code, start=None, end=None):

        if start is None:
            start = get_next_date(-720)

        if end is None:
            end = get_current_date()

        sql = ('''select  time_key, code, open, close  as close, high, low, change_rate, last_close, turnover, turnover_rate, volume, pe_ratio
                 from k_data  
                 where code=%(code)s and time_key BETWEEN %(start)s and %(end)s order by time_key asc ''')

        data = pd.read_sql(sql=sql, params={"code": fill_market(code), "start": start, "end": end}
                           , con=dataSource.mysql_quant_conn)

        return data
Exemple #13
0
    def init_pool(self):

        self.truncate()

        stocks = stock_dao.query_all()

        k_data_list = k_data_dao.get_multiple_k_data(start=get_next_date(-720), end=get_current_date())
        df = pd.DataFrame(columns=['code', 'name'])

        for stock in stocks:
            try:

                k_data = k_data_list.loc[k_data_list['code'] == fill_market(stock.code)]
                k_data = k_data.join(cal_macd(k_data))
                k_data['turnover7'] = cal_mavol7(k_data, column='turnover')

                k_turnover7 = k_data['turnover7'].values[-1]


                if len(k_data['code'].values) == 0:
                    continue

                stock_basic = stock_basic_dao.get_by_code(stock.code)
                eps_value = stock_basic['eps'].values[0]
                profits_yoy_value = stock_basic['profits_yoy'].values[0]

                if eps_value < 0:
                    continue

                if profits_yoy_value < 0:
                    continue

                if k_turnover7 < 65000000:
                    continue

                dict = {"code": stock.code, "name": stock.name}
                df = df.append(dict, ignore_index=True)
                logger.debug("append code:%s" % stock.code)
            except Exception as e:
                logger.debug("code:%s, error:%s" % (stock.code, traceback.format_exc()))

        df.to_sql('stock_pool', dataSource.mysql_quant_engine, if_exists='append', index=False)
        '''
Exemple #14
0
def cal_bk_vol():
    bk_vol_frame = pd.DataFrame(columns=['bkcode', 'bk_name', 'total_mavol_3'])

    filter_list = [
        'BK0743', 'BK0804', 'BK0568', 'BK0707', 'BK0701', 'BK0611', 'BK0705',
        'BK0612', 'BK0500'
    ]
    org_bk_code_list = list(stock_industry_dao.get_bkcode_list().values)

    bk_code_list = [c for c in org_bk_code_list if c not in filter_list]

    for bk in bk_code_list:
        bk_stocks = stock_industry_dao.get_by_bkcode(bk[0])
        bk_vol3 = 0
        try:
            bk_name = bk_stocks['bk_name'][0]
        except:
            bk_name = 'N/A'

        for code in bk_stocks['code'].values:

            stock_df = k_data_dao.get_k_data(code=code,
                                             start=get_next_date(-30),
                                             end=get_current_date())

            if len(stock_df) == 0:
                continue

            stock_df['mavol3'] = cal_mavol3(stock_df)
            try:
                bk_vol3 += stock_df['mavol3'].values[-1:][0]
            except Exception as e:
                logger.debug("code:%s, error:%s" % (code, repr(e)))
        bk_vol_frame.loc[bk_vol_frame.shape[0] + 1] = {
            'bkcode': bk,
            'bk_name': bk_name,
            'total_mavol_3': bk_vol3
        }

    bk_vol_frame = bk_vol_frame.sort_values('total_mavol_3', ascending=False)

    bk_vol_frame.to_csv('bk_csv.csv', encoding='utf_8_sig')
Exemple #15
0
    def insert(self, code, logistic_regression, random_forest_classifier,
               support_vector_classifier, xgb_classifier, sequantial_neural):
        sql = text(
            'replace into k_data_predict_log (date, code, '
            'logistic_regression, '
            'random_forest_classifier, '
            'support_vector_classifier, '
            'xgb_classifier, '
            'sequantial_neural) '
            'values(:date,:code,:logistic_regression,:random_forest_classifier,:support_vector_classifier,:xgb_classifier,:sequantial_neural)'
        )

        result = dataSource.mysql_quant_conn.execute(
            sql,
            date=datetime_utils.get_current_date(),
            code=code,
            logistic_regression=logistic_regression,
            random_forest_classifier=random_forest_classifier,
            support_vector_classifier=support_vector_classifier,
            xgb_classifier=xgb_classifier,
            sequantial_neural=sequantial_neural)

        return result
Exemple #16
0
 def test_collect_single(self):
     collect_single(code='601899',
                    futu_quote_ctx=self.futu_quote_ctx,
                    start='2013-01-01',
                    end=get_current_date())
Exemple #17
0
        # 死叉
        # if pre_k > pre_d and ((k_value <= d_value) or (abs(k_value - d_value) <= 10)):
        #
        #     shares = self.context.portfolio.positions[code].shares
        #     # 清仓
        #     if shares > 0:
        #         self.sell_value(code, shares)


if __name__ == '__main__':
    context = Context(start='2018-07-01', end='2018-07-14', base_capital=50000)

    kdj = KDJStrategy()
    kdj.init(context)

    context.current_date = get_current_date()
    kdj.handle_data()

    logger.debug("base_capital:%s" % context.base_capital)
    logger.debug("blance:%s" % context.blance)

    # context.current_date = convert_to_datetime('2018-07-04')
    # kdj.handle_data()

    # logger.debug(context.order_book[1])
    logger.debug("blance:%s" % context.blance)
    logger.debug("base_capital:%s" % context.base_capital)

    kdj.futu_quote_ctx.close()
Exemple #18
0
                df_stock_industry = stock_industry_dao.get_by_code(code[3:])
                name = df_stock_industry['name'].values[0]

                if name.find('ST') > -1:
                    continue

                bk_code = df_stock_industry['bk_code'].values[0]
                bk_name = df_stock_industry['bk_name'].values[0]

                data = data.append(
                    {
                        'bk_code': bk_code,
                        'bk_name': bk_name,
                        'code': code[3:],
                        'name': name,
                        'date': get_current_date(),
                        'label': label,
                        'k': k,
                        'd': d
                    },
                    ignore_index=True)
        except Exception as e:
            logger.debug("code:%s, error:%s" % (code, repr(e)))

    data.to_sql('k_data_strategy_kdj_log',
                dataSource.mysql_quant_engine,
                if_exists='append',
                index=False)
    '''
    label = cal_single_stock('600006')