# -*- coding: utf-8 -*- """服务器调试:两级状态桶在 000993 上的真实分布""" import sys import warnings sys.path.insert(0, '/opt/a_stock_timeline') warnings.filterwarnings('ignore') from src.fetcher.kline_fetcher import KlineFetcher from src.quant.model import per_stock_expected, _bucket, rsi_series import numpy as np import pandas as pd DB = '/opt/a_stock_timeline/data/a_stock.db' kf = KlineFetcher(DB) k = kf.load('000993', 'day', 150) print('bars:', len(k)) close = k['close'].reset_index(drop=True) ma20 = close.rolling(20).mean() rsi = rsi_series(close) for fine in (True, False): cur = _bucket(close.iloc[-1], ma20.iloc[-1], rsi.iloc[-1], fine) rets = [] horizon = 5 for t in range(30, len(close) - horizon): b = _bucket(close.iloc[t], ma20.iloc[t], rsi.iloc[t], fine) if b == cur: rets.append(close.iloc[t + horizon] / close.iloc[t] - 1) med = float(np.median(rets)) if rets else None print('fine={} 桶={} 样本={} 中位={}'.format(fine, cur, len(rets), med)) med, n, bucket = per_stock_expected(k) print('per_stock_expected:', med, n, bucket)