使用Python统计股票高开后的走势

股票高开是指当日股票的开盘价高于昨日的收盘价,为什么会这样?莫不是机构背着咱们搞交易?

股票开盘价由集合竞价产生,我们知道股市开盘时间为9:30-11:30~13:00-15:00,但集合竞价时间在9:15-9:30,这意味着有一股神秘力量夜观天象,提前进行交易。

今天,咱们来做个小实验,统计一下,如果股票高开,该股票后市上涨的概率有多少。

1. 我们先下载了2022-2-7至2022-5-16的盘口数据,保存为csv文件,代码和文件如下。

import akshare as ak
import datetime

date = datetime.datetime.now().strftime("%Y%m%d")
stock_zh_a_spot_em_df = ak.stock_zh_a_spot_em()
stock_zh_a_spot_em_df.to_csv('E:\\股票盘口信息\\{}.csv'.format(date), encoding='utf_8_sig')

2. 由于csv文件每次储存的股票是乱序的,为了方便操作,我们需要把csv格式的数据转成json。

import os
import pandas as pd
import json


def csv2json(csv_path, json_path):
    json_dict = {}
    csv_data = pd.read_csv(csv_path, encoding='utf_8_sig')
    for i in range(0, csv_data.shape[0]-1):
        json_dict['{:0>6d}'.format(csv_data.loc[i]['代码'])] = {
            '名称': csv_data.loc[i]['名称'],
            '最新价': csv_data.loc[i]['最新价'],
            '涨跌幅': csv_data.loc[i]['涨跌幅'],
            '涨跌额': csv_data.loc[i]['涨跌额'],
            '成交量': csv_data.loc[i]['成交量'],
            '成交额': csv_data.loc[i]['成交额'],
            '振幅': csv_data.loc[i]['振幅'],
            '最高': csv_data.loc[i]['最高'],
            '最低': csv_data.loc[i]['最低'],
            '今开': csv_data.loc[i]['今开'],
            '昨收': csv_data.loc[i]['昨收'],
            '量比': csv_data.loc[i]['量比'],
            '换手率': csv_data.loc[i]['换手率'],
            '市盈率-动态': csv_data.loc[i]['市盈率-动态'],
            '市净率': csv_data.loc[i]['市净率']
        }
    json_data = json.dumps(json_dict)
    f = open(json_path, 'w')
    f.write(json_data)
    f.close()


file_list = os.listdir('E:\\股票盘口信息')
for file in file_list:
    code = file.split('.')[0]
    csv_path = 'E:\\股票盘口信息\\' + code + '.csv'
    json_path = 'E:\\股票盘口信息\\' + code + '.json'
    csv2json(csv_path, json_path)
    print(code)

 (数据保存路径格式)

3. 我们加载这三个月的盘口数据,设定阈值为2%,即开盘价比昨日收盘价高2%就算高开。同时,以高开后五天为期限,设定4档概率,上涨5%以上,上涨0-5%,下跌0-5%,下跌5%以下,分别进行统计,代码如下。

import os
import json


# bidding_list 所有时间段价格波动
# time_list 所有时间点
# td 阈值
def getTimes(bidding_list, time_list, td):
    list_len = len(bidding_list)
    res = []
    for i in range(list_len):
        if bidding_list[i] > td:
            res.append(time_list[i])
    return res


# 根据日期,获取后五天股价涨幅
def after5(time, price_list, time_list):
    rises = 0
    count = 6
    for i in range(len(time_list)):
        if time_list[i] == time:
            count = 5
        if count <= 5:
            rises += price_list[i]
            count -= 1
        if count == 0:
            break
    if count != 0:
        return -1
    return rises


if __name__ == '__main__':
    dayu5 = 0
    dayu0 = 0
    xiaoyu0 = 0
    xiaoyu5 = 0

    # 获取所有时间段的数据
    all_data = {}
    date_list = os.listdir('E:\\股票盘口信息')
    for date in date_list:
        if date.find('csv') != -1:
            continue
        with open('E:\\股票盘口信息\\' + date) as f:
            all_data[date] = json.load(f)

    # 遍历所有股票
    code_list = os.listdir('E:\\股票数据')
    for code in code_list:
        b_list = []
        t_list = []
        p_list = []
        date_list = os.listdir('E:\\股票盘口信息')
        for date in date_list:
            if date.find('csv') != -1:
                continue
            json_data = all_data[date]
            if code in json_data:
                b_list.append((json_data[code]['今开']-json_data[code]['昨收'])/json_data[code]['昨收']*100)
                t_list.append(date)
                p_list.append(json_data[code]['涨跌幅'])

        times = getTimes(b_list, t_list, 2)
        for time in times:
            res = after5(time, p_list, t_list)
            if res == -1:
                continue
            if res > 5:
                dayu5 += 1
            elif res > 0:
                dayu0 += 1
            elif res > -5:
                xiaoyu0 += 1
            else:
                xiaoyu5 += 1

        total = dayu5+dayu0+xiaoyu0+xiaoyu5
        if total == 0:
            continue

    print('股价涨5%:{}%,股价涨0%:{}%,股价跌0%:{}%,股价跌5%:{}%'.format(
        dayu5 / total * 100,
        dayu0 / total * 100,
        xiaoyu0 / total * 100,
        xiaoyu5 / total * 100))

(代码如有逻辑错误请尽快留言指出)

运行程序,我们得到了神奇的结果:

股价涨5%:38.07015011547344%

股价涨0%:22.10594688221709%

股价跌0%:20.30889145496536%

股价跌5%:19.51501154734411%

结果仿佛是在告诉我们:如果一个股票高开2%以上,咱们去追高,五天内有38%的概率再赚它5%以上,更有60%的概率不下跌。但是这个实验数据量太小,三个月的交易记录还说明不了本质问题。理论上来说,股票高开并不能决定后期走势,还得从其他层面来分析。

有兴趣的朋友可以下载近几年的数据来统计一下,下载历史数据的接口是 stock_zh_a_hist ,前一篇博客有用到《使用Python获取股票解禁数据并绘制股价曲线》,记得把统计结果留言,爱你哟~

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年5月18日
下一篇 2022年5月18日

相关推荐