Administrator
15 小时以前 ecfbb56f1ce77b2288d272fa1ed2a02623e92d5a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import json
import os
import queue
import time
 
import xlwt
 
from code_attribute import gpcode_manager
from l2.huaxin import l2_huaxin_util
from third_data import history_k_data_manager
from third_data.history_k_data_manager import HistoryKDataManager
from utils import tool
 
 
class Test:
    def print_log(self, arg):
        print(time.time(), f"arg:{arg}")
        time.sleep(2)
 
 
def parse_big_buy_order_count(path_, limit_up_price_dict=None, max_time=None):
    """
    统计某一天的涨停大单数量分布
    @param path_:
    @param limit_up_price_dict:
    @return:
    """
    with open(path_, mode='r', encoding='utf-8') as f:
        lines = f.readlines()
        code_big_order_count_dict = {}
        for line in lines:
            data = line[line.find(" - ") + 3:].strip()
            data = eval(data)
            if data[1] != 0:
                continue
            if data[2][2] < 1000000:
                continue
            if max_time and l2_huaxin_util.convert_time(data[2][3]) > max_time:
                continue
            # if data[0] not in limit_up_price_dict:
            #     continue
            # if abs(data[2][4] - limit_up_price_dict[data[0]]) >= 0.001:
            #     continue
            if data[0] not in code_big_order_count_dict:
                code_big_order_count_dict[data[0]] = [0, 0]
            code_big_order_count_dict[data[0]][0] += 1
            code_big_order_count_dict[data[0]][1] += data[2][2]
        return code_big_order_count_dict
 
 
def __load_limit_up_price():
    # 日期下代码的涨停价
    limit_up_price_date_code_dict = {}
    dir_path = r"D:\回测数据\K线数据"
    k_bars_files = os.listdir(dir_path)
    for k_bars_file in k_bars_files:
        code = k_bars_file.split("_")[1][:6]
        with open(f"{dir_path}\\{k_bars_file}", encoding='utf-8', mode='r') as f:
            lines = f.readlines()
            data = lines[0]
            datas = eval(data)
            # {"日期": 涨停价}
            date_limit_price = {
                d["bob"][:10]: gpcode_manager.get_limit_up_price_by_preprice(d["sec_id"], d["pre_close"]) for d in
                datas}
            for date in date_limit_price:
                if date not in limit_up_price_date_code_dict:
                    limit_up_price_date_code_dict[date] = {}
                limit_up_price_date_code_dict[date][code] = round(float(date_limit_price[date]), 2)
    return limit_up_price_date_code_dict
 
 
def export(fdatas, dates, file_name):
    wb = xlwt.Workbook(encoding="utf-8")
    ws = wb.add_sheet('sheet1')
    for i in range(len(dates)):
        ws.write(0, i + 1, dates[i])
    index = 0
    for code in fdatas:
        date_count_dict = fdatas[code]
        index += 1
        ws.write(index, 0, code)
        for i in range(len(dates)):
            d = date_count_dict.get(dates[i])
            average_big_money = d[1] // d[0] if d[0] > 0 else 0
            if d[0] > 0:
                ws.write(index, i + 1, f"{d[0]}/{round(average_big_money / 10000, 1)}万")
            else:
                ws.write(index, i + 1, f"")
    wb.save(file_name)
 
 
if __name__ == '__main__':
    def callback_function(res):
        print("回调数据:", res)
 
 
    def exec(call_back):
        call_back({"code": 0})
 
 
    exec(callback_function)
 
if __name__ == '__main__1':
    # 加载每一天的代码的涨停价
    limit_up_price_date_code_dict = __load_limit_up_price()
    print(limit_up_price_date_code_dict["2025-04-22"]["002719"])
    dir_path = r"D:\回测数据\大单数据"
    files = os.listdir(dir_path)
    dates = []
    big_order_count_date_code_dict = {}
    for file_name in files:
        path_ = f"{dir_path}\\{file_name}"
        date = file_name[-14:-4]
        dates.append(date)
        code_big_order_count_dict = parse_big_buy_order_count(path_, limit_up_price_date_code_dict[date])
        print(code_big_order_count_dict)
        big_order_count_date_code_dict[date] = code_big_order_count_dict
    # 转为:{代码:{"日期":大单数}}
    fdata = {}
    for date in big_order_count_date_code_dict:
        for code in big_order_count_date_code_dict[date]:
            if code not in fdata:
                fdata[code] = {}
            fdata[code][date] = big_order_count_date_code_dict[date][code]
 
    for code in fdata:
        for date in dates:
            if date not in fdata[code]:
                # 默认填充0
                fdata[code][date] = [0, 0]
    dates.sort(reverse=True)
    export(fdata, dates, "D:/test.xls")