Пример #1
0
def apply_guess(tmp):
    date = tmp["date"]
    code = tmp["code"]
    date_end = datetime.datetime.strptime(date, "%Y%m%d")
    date_start = (date_end + datetime.timedelta(days=-50)).strftime("%Y-%m-%d")
    date_end = date_end.strftime("%Y-%m-%d")
    print(code, date_start, date_end)

    # open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20, turnover
    # 使用缓存方法。加快计算速度。
    stock = common.get_hist_data_cache(code, date_start, date_end)

    stock = pd.DataFrame({"close": stock["close"]}, index=stock.index.values)
    stock = stock.sort_index(0)  # 将数据按照日期排序下。

    # print(stock.head(10))
    arr = pd.Series(stock["close"].values)
    # print(df_arr)
    wave_mean = arr.mean()
    # 计算股票的波峰值。
    wave_crest = heapq.nlargest(5, enumerate(arr), key=lambda x: x[1])
    wave_crest_mean = pd.DataFrame(wave_crest).mean()

    # 输出元祖第一个元素是index,第二元素是比较的数值 计算数据的波谷值
    wave_base = heapq.nsmallest(5, enumerate(arr), key=lambda x: x[1])
    wave_base_mean = pd.DataFrame(wave_base).mean()
    # 输出数据
    # print("##############")
    tmp = {"code": code, "wave_mean": wave_mean,
           "wave_crest": wave_crest_mean[1], "wave_base": wave_base_mean[1]}
    # print(tmp)
    #     code      date wave_base wave_crest wave_mean 顺序必须一致。返回的是行数据,然后填充。
    return list([code, date, wave_base_mean[1], wave_crest_mean[1], wave_mean])
def apply_merge_sell(tmp):
    date = tmp["date"]
    code = tmp["code"]
    date_end = datetime.datetime.strptime(date, "%Y%m%d")
    date_start = (date_end +
                  datetime.timedelta(days=-300)).strftime("%Y-%m-%d")
    date_end = date_end.strftime("%Y-%m-%d")
    print(code, date_start, date_end)

    # open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20, turnover
    # 使用缓存方法。加快计算速度。
    stock = common.get_hist_data_cache(code, date_start, date_end)
    # 增加空判断,如果是空返回 0 数据。
    if stock is None:
        return list([1, code, date, 0, 0, 0, 0])
    print("########")
    # J大于100时为超买,小于10时为超卖。
    # 强弱指标保持高于50表示为强势市场,反之低于50表示为弱势市场。
    # 1、当CCI指标从下向上突破﹢100线而进入非常态区间时,表明股价脱离常态而进入异常波动阶段,
    # 2、当CCI指标从上向下突破﹣100线而进入另一个非常态区间时,表明股价的盘整阶段已经结束,
    stockStat = stockstats.StockDataFrame.retype(stock)
    kdjj = int(stockStat["kdjj"].tail(1).values[0])
    rsi_6 = int(stockStat["rsi_6"].tail(1).values[0])
    cci = int(stockStat["cci"].tail(1).values[0])
    print("kdjj:", kdjj, "rsi_6:", rsi_6, "cci:", cci)
    # and kdjj > 80 and rsi_6 > 55  and cci > 100 判断卖出时刻。也就是买入时刻的反面。发现有波动就卖了。
    # if kdjj <= 10 and rsi_6 <= 50 and cci <= 100: old
    if kdjj <= 80 or rsi_6 <= 55 or cci <= 100:
        return list([0, code, date, 1, cci, kdjj, rsi_6])
    else:
        return list([1, code, date, 0, cci, kdjj, rsi_6])
Пример #3
0
    def get(self):
        code = self.get_argument("code", default=None, strip=False)
        logging.info(code)
        # self.uri_ = ("self.request.url:", self.request.uri)
        # print self.uri_
        comp_list = []

        try:
            date_now = datetime.datetime.now()
            date_end = date_now.strftime("%Y-%m-%d")
            date_start = (date_now +
                          datetime.timedelta(days=-300)).strftime("%Y-%m-%d")
            print(code, date_start, date_end)

            # open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20, turnover
            # 使用缓存方法。加快计算速度。
            stock = common.get_hist_data_cache(code, date_start, date_end)
            logging.info(stock.head(1))

            # print(stock) [186 rows x 14 columns]
            # 初始化统计类
            # stockStat = stockstats.StockDataFrame.retype(pd.read_csv("002032.csv"))
            stockStat = stockstats.StockDataFrame.retype(stock)
            batch_add(comp_list, stockStat)

        except Exception as e:
            logging.info("error :", e)
        logging.info(
            "#################### GetStockHtmlHandlerEnd ####################")

        self.render("stock_indicators.html",
                    comp_list=comp_list,
                    leftMenu=webBase.GetLeftMenu(self.request.uri))
Пример #4
0
def apply_guess(tmp):
    date = tmp["date"]
    code = tmp["code"]
    date_end = datetime.datetime.strptime(date, "%Y%m%d")
    date_start = (date_end +
                  datetime.timedelta(days=-300)).strftime("%Y-%m-%d")
    date_end = date_end.strftime("%Y-%m-%d")
    print(code, date_start, date_end)
    # open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20, turnover
    # 使用缓存方法。加快计算速度。
    stock = common.get_hist_data_cache(code, date_start, date_end)
    # 增加空判断,如果是空返回 0 数据。
    if stock is None:
        return pd.Series([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, code, date, 0.0, 0.0],
                         index=[
                             '10d', '20d', '5-10d', '5-20d', '5d', '60d',
                             'code', 'date', 'mov_vol', 'return'
                         ])

    stock = pd.DataFrame({"close": stock["close"]}, index=stock.index.values)
    stock = stock.sort_index(0)  # 将数据按照日期排序下。
    # print(stock.head(10))
    # 5周期、10周期、20周期和60周期
    # 周线、半月线、月线和季度线
    stock["5d"] = stock["close"].rolling(window=5).mean()  # 周线
    stock["10d"] = stock["close"].rolling(window=10).mean()  # 半月线
    stock["20d"] = stock["close"].rolling(window=20).mean()  # 月线
    stock["60d"] = stock["close"].rolling(window=60).mean()  # 季度线
    # 计算日期差。
    stock["5-10d"] = (stock["5d"] -
                      stock["10d"]) * 100 / stock["10d"]  # 周-半月线差
    stock["5-20d"] = (stock["5d"] - stock["20d"]) * 100 / stock["20d"]  # 周-月线差
    # 计算股票的收益价格
    stock["return"] = np.log(stock["close"] / stock["close"].shift(1))

    # print(stock["return"])
    # 计算股票的【收益率的移动历史标准差】
    mov_day = int(len(stock) / 20)
    # print("mov_day:", mov_day, len(stock))
    stock["mov_vol"] = stock["return"].rolling(
        window=mov_day).std() * math.sqrt(mov_day)
    # print(stock["mov_vol"].tail())
    # print(stock["return"].tail())
    # print("stock[10d].tail(1)", stock["10d"].tail(1).values[0])
    # 10d    20d  5-10d  5-20d     5d    60d    code      date  mov_vol  return
    tmp = pd.Series([
        stock["10d"].tail(1).values[0], stock["20d"].tail(1).values[0],
        stock["5-10d"].tail(1).values[0], stock["5-20d"].tail(1).values[0],
        stock["5d"].tail(1).values[0], stock["60d"].tail(1).values[0], code,
        date, stock["mov_vol"].tail(1).values[0],
        stock["return"].tail(1).values[0]
    ],
                    index=[
                        '10d', '20d', '5-10d', '5-20d', '5d', '60d', 'code',
                        'date', 'mov_vol', 'return'
                    ])
    # print(tmp)
    return tmp
Пример #5
0
def apply_guess(tmp, stock_column):
    # print("apply_guess columns args:", stock_column)
    # print("apply_guess data :", type(tmp))
    date = tmp["date"]
    code = tmp["code"]
    date_end = datetime.datetime.strptime(date, "%Y%m%d")
    date_start = (date_end +
                  datetime.timedelta(days=-300)).strftime("%Y-%m-%d")
    date_end = date_end.strftime("%Y-%m-%d")
    # print(code, date_start, date_end)
    # open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20, turnover
    # 使用缓存方法。加快计算速度。
    stock = common.get_hist_data_cache(code, date_start, date_end)
    # 设置返回数组。
    stock_data_list = []
    # 增加空判断,如果是空返回 0 数据。
    if stock is None:
        for col in stock_column:
            if col == 'date':
                stock_data_list.append(date)
            elif col == 'code':
                stock_data_list.append(code)
            else:
                stock_data_list.append(0)
        return list(stock_data_list)

    # print(stock.head())
    # open  high  close   low     volume
    # stock = pd.DataFrame({"close": stock["close"]}, index=stock.index.values)
    stock = stock.sort_index(0)  # 将数据按照日期排序下。

    stock["date"] = stock.index.values  # 增加日期列。
    stock = stock.sort_index(0)  # 将数据按照日期排序下。
    # print(stock) [186 rows x 14 columns]
    # 初始化统计类
    # stockStat = stockstats.StockDataFrame.retype(pd.read_csv('002032.csv'))
    stockStat = stockstats.StockDataFrame.retype(stock)

    print("########################## print result ##########################")
    for col in stock_column:
        if col == 'date':
            stock_data_list.append(date)
        elif col == 'code':
            stock_data_list.append(code)
        else:
            # 将数据的最后一个返回。
            tmp_val = stockStat[col].tail(1).values[0]
            if np.isinf(tmp_val):  # 解决值中存在INF问题。
                tmp_val = 0
            if np.isnan(tmp_val):  # 解决值中存在NaN问题。
                tmp_val = 0
            # print("col name : ", col, tmp_val)
            stock_data_list.append(tmp_val)

    # print(stock_data_list)
    return list(stock_data_list)
Пример #6
0
def apply_sklearn(data):
    # 要操作的数据库表名称。
    print("########stat_index_all########:", len(data))
    date = data["date"]
    code = data["code"]
    print(date, code)
    date_end = datetime.datetime.strptime(date, "%Y%m%d")
    date_start = (date_end +
                  datetime.timedelta(days=-300)).strftime("%Y-%m-%d")
    date_end = date_end.strftime("%Y-%m-%d")
    print(code, date_start, date_end)

    # open high close low volume price_change p_change ma5 ma10 ma20 v_ma5 v_ma10 v_ma20 turnover
    stock_X = common.get_hist_data_cache(code, date_start, date_end)
    # 增加空判断,如果是空返回 0 数据。
    if stock_X is None:
        return list([code, date, 0.0, 0.0])

    stock_X = stock_X.sort_index(0)  # 将数据按照日期排序下。
    stock_y = pd.Series(stock_X["close"].values)  # 标签

    stock_X_next = stock_X.iloc[len(stock_X) - 1]
    print("########################### stock_X_next date:", stock_X_next)
    # 使用今天的交易价格,13 个指标预测明天的价格。偏移股票数据,今天的数据,目标是明天的价格。
    stock_X = stock_X.drop(stock_X.index[len(stock_X) - 1])  # 删除最后一条数据
    stock_y = stock_y.drop(stock_y.index[0])  # 删除第一条数据
    # print("########################### stock_X date:", stock_X)

    # 删除掉close 也就是收盘价格。
    del stock_X["close"]
    del stock_X_next["close"]

    model = linear_model.LinearRegression()
    # model = KNeighborsClassifier()

    model.fit(stock_X.values, stock_y)
    # print("############## test & target #############")
    # print("############## coef_ & intercept_ #############")
    # print(model.coef_)  # 系数
    # print(model.intercept_)  # 截断
    next_close = model.predict([stock_X_next.values])
    if len(next_close) == 1:
        next_close = next_close[0]
    sklearn_score = model.score(stock_X.values, stock_y)
    print("score:", sklearn_score)  # 评分
    return list([code, date, next_close, sklearn_score * 100])
Пример #7
0
def apply_merge(tmp):
    date = tmp["date"]
    code = tmp["code"]
    date_end = datetime.datetime.strptime(date, "%Y%m%d")
    date_start = (date_end + datetime.timedelta(days=-300)).strftime("%Y-%m-%d")
    date_end = date_end.strftime("%Y-%m-%d")
    print(code, date_start, date_end)

    # open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20, turnover
    # 使用缓存方法。加快计算速度。
    stock = common.get_hist_data_cache(code, date_start, date_end)
    print("########")
    # print(stock.tail(1))
    close = stock.tail(1)["close"].values[0]
    print("close:  ", close)
    print("########")
    return list([code, date, close])
Пример #8
0
def apply_guess(tmp):
    date = tmp["date"]
    code = tmp["code"]
    date_end = datetime.datetime.strptime(date, "%Y%m%d")
    date_start = (date_end + datetime.timedelta(days=-200)).strftime("%Y-%m-%d")
    date_end = date_end.strftime("%Y-%m-%d")
    print(code, date_start, date_end)
    # open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20, turnover
    # 使用缓存方法。加快计算速度。
    stock = common.get_hist_data_cache(code, date_start, date_end)

    stock = pd.DataFrame({"close": stock["close"]}, index=stock.index.values)
    stock = stock.sort_index(0)  # 将数据按照日期排序下。

    # print(stock.head(10))

    stock["date"] = stock.index.values  # 增加日期列。
    stock = stock.sort_index(0)  # 将数据按照日期排序下。
    # print(stock) [186 rows x 14 columns]
    # 初始化统计类
    # stockStat = stockstats.StockDataFrame.retype(pd.read_csv('002032.csv'))
    stockStat = stockstats.StockDataFrame.retype(stock)
Пример #9
0
def apply_merge(tmp):
    date = tmp["date"]
    code = tmp["code"]
    date_end = datetime.datetime.strptime(date, "%Y%m%d")
    date_start = (date_end +
                  datetime.timedelta(days=-300)).strftime("%Y-%m-%d")
    date_end = date_end.strftime("%Y-%m-%d")
    print(code, date_start, date_end)

    # open, high, close, low, volume, price_change, p_change, ma5, ma10, ma20, v_ma5, v_ma10, v_ma20, turnover
    # 使用缓存方法。加快计算速度。
    stock = common.get_hist_data_cache(code, date_start, date_end)
    # 增加空判断,如果是空返回 0 数据。
    if stock is None:
        return list([code, date, 0, 0, 0])

    stock = pd.DataFrame({"close": stock["close"]}, index=stock.index.values)
    stock = stock.sort_index(0)  # 将数据按照日期排序下。

    # print(stock.head(10))
    arr = pd.Series(stock["close"].values)
    # print(df_arr)
    wave_mean = arr.mean()
    max_point = 3  # 获得最高的几个采样点。
    # 计算股票的波峰值。
    wave_crest = heapq.nlargest(max_point, enumerate(arr), key=lambda x: x[1])
    wave_crest_mean = pd.DataFrame(wave_crest).mean()

    # 输出元祖第一个元素是index,第二元素是比较的数值 计算数据的波谷值
    wave_base = heapq.nsmallest(max_point, enumerate(arr), key=lambda x: x[1])
    wave_base_mean = pd.DataFrame(wave_base).mean()
    # 输出数据
    print("##############", len(stock))
    if len(stock) > 180:
        #     code      date wave_base wave_crest wave_mean 顺序必须一致。返回的是行数据,然后填充。
        return list(
            [code, date, wave_base_mean[1], wave_crest_mean[1], wave_mean])
    else:
        return list([code, date, 0, 0, 0])