| | |
| | | 用户验证 |
| | | """ |
| | | |
| | | import mysql_data |
| | | from db import mysql_data |
| | | |
| | | |
| | | # 新增用户 |
| | |
| | | """ |
| | | |
| | | # 大单管理 |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | |
| | | __redisManager = redis_manager.RedisManager(0) |
| | |
| | | import json |
| | | |
| | | import authority |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import ths_util |
| | | |
| | | __redisManager = redis_manager.RedisManager(0) |
| | |
| | | import time |
| | | |
| | | import gpcode_manager |
| | | import mysql_data |
| | | import redis_manager |
| | | from db import mysql_data, redis_manager |
| | | import tool |
| | | |
| | | _redisManager = redis_manager.RedisManager(0) |
| | |
| | | # max60 60天最大量 |
| | | # yesterday 昨天的量 |
| | | import global_util |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | from log import logger_day_volumn |
| | | |
| | |
| | | |
| | | import gpcode_manager |
| | | import l2_data_util |
| | | import l2.l2_data_util |
| | | import log |
| | | |
| | | |
| | |
| | | |
| | | # 数据预处理 |
| | | num_operate_map = {} |
| | | l2_data_util.load_num_operate_map(num_operate_map, code, datas) |
| | | l2.l2_data_util.load_num_operate_map(num_operate_map, code, datas) |
| | | num_dict = {} |
| | | for data in datas: |
| | | if data["val"]["num"] not in num_dict: |
| | |
| | | # 数据处理 |
| | | import json |
| | | import logging |
| | | import redis_manager |
| | | from db import redis_manager |
| | | from log import logger_l2_error |
| | | |
| | | __redisManager = redis_manager.RedisManager(0) |
| | |
| | | """ |
| | | 股票代码管理器 |
| | | """ |
| | | import code |
| | | import json |
| | | import random |
| | | import time |
| | | |
| | | import client_manager |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | import decimal |
| | | |
| | |
| | | |
| | | # 查询是否有重复的代码 |
| | | codes_set = set() |
| | | count = 0; |
| | | count = 0 |
| | | for code in codes: |
| | | count = count + 1 |
| | | codes_set.add(code[1]) |
| | |
| | | import multiprocessing |
| | | |
| | | import log |
| | | import mysql_data |
| | | import redis_manager |
| | | from db import mysql_data, redis_manager |
| | | import server |
| | | import settings |
| | | from juejin import JueJinManager |
| | |
| | | from ocr import ocr_server |
| | | |
| | | from server import * |
| | | import l2.l2_data_util |
| | | |
| | | # 读取server进程的消息 |
| | | from trade.trade_data_manager import CodeActualPriceProcessor |
| | |
| | | continue |
| | | l2_data_manager.clear_l2_data(code) |
| | | # 删除level2的数据 |
| | | if l2_data_manager.local_today_datas and code in l2_data_manager.local_today_datas: |
| | | l2_data_manager.local_today_datas.pop(code) |
| | | if l2_data_manager.local_latest_datas and code in l2_data_manager.local_latest_datas: |
| | | l2_data_manager.local_latest_datas.pop(code) |
| | | if l2.l2_data_util.local_today_datas and code in l2.l2_data_util.local_today_datas: |
| | | l2.l2_data_util.local_today_datas.pop(code) |
| | | if l2.l2_data_util.local_latest_datas and code in l2.l2_data_util.local_latest_datas: |
| | | l2.l2_data_util.local_latest_datas.pop(code) |
| | | |
| | | time.sleep(0.1) |
| | | |
| | |
| | | table_limit_up.show() |
| | | |
| | | # 获取数据 |
| | | time_str, datas = gpcode_manager.get_limit_up_list(); |
| | | time_str, datas = gpcode_manager.get_limit_up_list() |
| | | limit_up_datas_time.set(time_str) |
| | | # 删除所有的行 |
| | | # table_limit_up.model.deleteRows() |
| | |
| | | showwarning('警告', e) |
| | | |
| | | def export_l2_data(code): |
| | | if code not in l2_data_manager.local_today_datas: |
| | | l2_data_manager.load_l2_data(code) |
| | | datas = l2_data_manager.local_today_datas[code] |
| | | if code not in l2.l2_data_util.local_today_datas: |
| | | l2.l2_data_util.load_l2_data(code) |
| | | datas = l2.l2_data_util.local_today_datas[code] |
| | | try: |
| | | path = data_export_util.export_l2_data(code, datas) |
| | | showinfo("提示", "导出成功,路径为:" + path) |
| | |
| | | import server |
| | | import tool |
| | | |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import authority |
| | | import decimal |
| | | |
| | |
| | | import gpcode_manager |
| | | import l2_data_log |
| | | import l2_data_util |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | from trade import trade_data_manager, trade_queue_manager, l2_trade_factor |
| | | from l2 import l2_log |
| | | from l2.l2_data_manager import L2DataUtil, local_today_num_operate_map, local_today_datas |
| | | from l2.l2_data_util import L2DataUtil, local_today_num_operate_map, local_today_datas |
| | | from log import logger_buy_1_volumn |
| | | |
| | | |
| | |
| | | """ |
| | | import json |
| | | |
| | | |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | from log import logger_l2_trade_buy |
| | | |
| | |
| | | redis.setex(_key, expire, |
| | | json.dumps((buy_single_index, buy_exec_index, compute_index, nums, count, list(max_num_sets)))) |
| | | else: |
| | | _buy_single_index, _buy_exec_index, _compute_index, _nums, _count, _max_num_index = TradePointManager.get_buy_compute_start_data( |
| | | code) |
| | | _buy_single_index, _buy_exec_index, _compute_index, _nums, _count, _max_num_index = TradePointManager.get_buy_compute_start_data(code) |
| | | redis.setex(_key, expire, |
| | | json.dumps((_buy_single_index, buy_exec_index, compute_index, nums, count, list(max_num_sets)))) |
| | | |
| | |
| | | import l2_data_util |
| | | import l2_trade_test |
| | | import limit_up_time_manager |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import ths_industry_util |
| | | import tool |
| | | from trade import trade_data_manager, trade_manager, trade_queue_manager, l2_trade_factor, l2_trade_util |
| | |
| | | return |
| | | |
| | | # 按s批量化数据 |
| | | total_datas = local_today_datas[code] |
| | | total_datas = local_today_datas.get(code) |
| | | start_time = total_datas[0]["val"]["time"] |
| | | start_index = 0 |
| | | for i in range(0, len(total_datas)): |
| | |
| | | import gpcode_manager |
| | | import l2_data_log |
| | | import log |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | |
| | | _redisManager = redis_manager.RedisManager(1) |
| | |
| | | import json |
| | | |
| | | from trade import l2_trade_factor |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | from l2.l2_data_util import L2DataUtil |
| | | import l2_data_util |
| | |
| | | import json |
| | | |
| | | import constant |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | from l2 import l2_data_manager |
| | | import l2.l2_data_util |
| | | |
| | | |
| | |
| | | |
| | | # 保存成交索引 |
| | | def save_traded_index(self, code, buy1_price, buyQueueBig): |
| | | total_datas = l2_data_manager.local_today_datas.get(code) |
| | | today_num_operate_map = l2_data_manager.local_today_num_operate_map.get(code) |
| | | total_datas = l2.l2_data_util.local_today_datas.get(code) |
| | | today_num_operate_map = l2.l2_data_util.local_today_num_operate_map.get(code) |
| | | index = l2.l2_data_util.L2TradeQueueUtils.find_traded_progress_index(buy1_price, total_datas, |
| | | today_num_operate_map, buyQueueBig,self.__get_latest_not_limit_up_time(code)) |
| | | if index is not None: |
| | |
| | | import server |
| | | import tool |
| | | import time |
| | | import redis_manager |
| | | from db import redis_manager |
| | | from log import logger_code_operate |
| | | |
| | | __reset_code_dict = {} |
| | |
| | | import unittest |
| | | |
| | | import big_money_num_manager |
| | | import redis_manager |
| | | from db import redis_manager |
| | | from trade import trade_data_manager |
| | | from l2.l2_data_manager import TradePointManager |
| | | |
| | |
| | | """ |
| | | 涨停时间管理器 |
| | | """ |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | import global_util |
| | | import functools |
| | | |
| | | _redisManager = redis_manager.RedisManager(0) |
| | | |
| | |
| | | # 设置模块 |
| | | import redis_manager |
| | | from db import redis_manager |
| | | |
| | | __redis_manager = redis_manager.RedisManager(2) |
| | | |
| | |
| | | import pymongo |
| | | import requests |
| | | from selenium import webdriver |
| | | import scrapy |
| | | from scrapy import cmdline |
| | | from selenium.webdriver import ActionChains |
| | | from selenium.webdriver.common.by import By |
| | | import mysql_data |
| | | |
| | | |
| | | def save(dn_name, datas): |
| | |
| | | """ |
| | | |
| | | # 同花顺行业 |
| | | import datetime |
| | | import time |
| | | |
| | | import global_data_loader |
| | | import global_util |
| | | import mysql_data |
| | | from db import mysql_data |
| | | |
| | | # 获取行业映射 |
| | | import tool |
| | |
| | | import win32con |
| | | import win32gui |
| | | |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | from trade import trade_gui |
| | | |
| | |
| | | |
| | | |
| | | def __click(hwnd): |
| | | win32gui.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, 0, 0); |
| | | win32gui.SendMessage(hwnd, win32con.WM_LBUTTONUP, 0, 0); |
| | | win32gui.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, 0, 0) |
| | | win32gui.SendMessage(hwnd, win32con.WM_LBUTTONUP, 0, 0) |
| | | |
| | | |
| | | def __input_number(hwnd, num_str): |
| | |
| | | lp = 0 |
| | | if c == '.': |
| | | code = 110 |
| | | win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, code, 0); |
| | | win32gui.PostMessage(hwnd, win32con.WM_KEYUP, code, 0); |
| | | win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, code, 0) |
| | | win32gui.PostMessage(hwnd, win32con.WM_KEYUP, code, 0) |
| | | continue |
| | | elif c == '0': |
| | | code = 48 |
| | |
| | | code = 56 |
| | | elif c == '9': |
| | | code = 57 |
| | | win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, code, 0); |
| | | win32gui.PostMessage(hwnd, win32con.WM_KEYUP, code, 0); |
| | | win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, code, 0) |
| | | win32gui.PostMessage(hwnd, win32con.WM_KEYUP, code, 0) |
| | | |
| | | |
| | | def show_window(hwnd): |
| | |
| | | return True |
| | | |
| | | relative_timestamp = t.time() % (24 * 60 * 60) + 8 * 60 * 60 |
| | | start1 = 60 * 60 * 9 + 24 * 60; |
| | | end1 = 60 * 60 * 11 + 31 * 60; |
| | | start2 = 60 * 60 * 12 + 58 * 60; |
| | | end2 = 60 * 60 * 15 + 1 * 60; |
| | | start1 = 60 * 60 * 9 + 24 * 60 |
| | | end1 = 60 * 60 * 11 + 31 * 60 |
| | | start2 = 60 * 60 * 12 + 58 * 60 |
| | | end2 = 60 * 60 * 15 + 1 * 60 |
| | | if start1 < relative_timestamp < end1 or start2 < relative_timestamp < end2: |
| | | return True |
| | | else: |
| | |
| | | return True |
| | | |
| | | relative_timestamp = t.time() % (24 * 60 * 60) + 8 * 60 * 60 |
| | | start1 = 60 * 60 * 9 + 14 * 60; |
| | | end1 = 60 * 60 * 11 + 35 * 60; |
| | | start2 = 60 * 60 * 12 + 50 * 60; |
| | | end2 = 60 * 60 * 15 + 5 * 60; |
| | | start1 = 60 * 60 * 9 + 14 * 60 |
| | | end1 = 60 * 60 * 11 + 35 * 60 |
| | | start2 = 60 * 60 * 12 + 50 * 60 |
| | | end2 = 60 * 60 * 15 + 5 * 60 |
| | | if start1 < relative_timestamp < end1 or start2 < relative_timestamp < end2: |
| | | return True |
| | | else: |
| | |
| | | # 是否在禁止交易代码中 |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | |
| | | __redis_manager = redis_manager.RedisManager(2) |
| | |
| | | 交易数据股那里器 |
| | | 用于对交易临时数据(交易状态,代码状态等)进行管理 |
| | | """ |
| | | import datetime |
| | | import json |
| | | import time |
| | | |
| | |
| | | import constant |
| | | import global_util |
| | | import l2_data_util |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | from log import logger_trade |
| | | |
| | |
| | | |
| | | import constant |
| | | from trade import l2_trade_util |
| | | import redis_manager |
| | | from db import redis_manager |
| | | from log import * |
| | | from tool import async_call |
| | | |
| | |
| | | # 刷新窗口句柄 |
| | | def refresh_hwnds(self): |
| | | self.cancel_win = self.__instance.getCancelBuyWin() |
| | | self.buy_win_list = self.get_buy_wins(); |
| | | self.buy_win_list = self.get_buy_wins() |
| | | |
| | | # 打开交易环境 |
| | | def open_trade_env(self): |
| | |
| | | buffer = array.array('b', b'\x00\x00' * bufSize) |
| | | win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, bufSize, buffer) |
| | | text = win32gui.PyGetString(buffer.buffer_info()[0], bufSize - 1) |
| | | return text.replace("\x00", "").strip(); |
| | | return text.replace("\x00", "").strip() |
| | | |
| | | @classmethod |
| | | def get_buy_wins(cls): |
| | |
| | | def input_number(self, hwnd, num_str): |
| | | for i in range(10): |
| | | # win32gui.SendMessage(hwnd, 258, 8, 0); |
| | | win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, 8, 0); |
| | | win32gui.PostMessage(hwnd, win32con.WM_KEYUP, 8, 0); |
| | | win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, 8, 0) |
| | | win32gui.PostMessage(hwnd, win32con.WM_KEYUP, 8, 0) |
| | | # delete |
| | | for c in num_str: |
| | | code = -1 |
| | | lp = 0 |
| | | if c == '.': |
| | | code = 110 |
| | | win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, code, 0); |
| | | win32gui.PostMessage(hwnd, win32con.WM_KEYUP, code, 0); |
| | | win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, code, 0) |
| | | win32gui.PostMessage(hwnd, win32con.WM_KEYUP, code, 0) |
| | | continue |
| | | elif c == '0': |
| | | code = 48 |
| | |
| | | code = 56 |
| | | elif c == '9': |
| | | code = 57 |
| | | win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, code, 0); |
| | | win32gui.PostMessage(hwnd, win32con.WM_KEYUP, code, 0); |
| | | win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, code, 0) |
| | | win32gui.PostMessage(hwnd, win32con.WM_KEYUP, code, 0) |
| | | |
| | | def getLimitUpPrice(self, win): |
| | | hwnd = win32gui.GetDlgItem(win, 0x000006C8) |
| | |
| | | def closeTradeResultDialog(self, win): |
| | | sure = win32gui.GetDlgItem(win, 0x00000002) |
| | | # 点击sure |
| | | win32gui.SendMessage(sure, win32con.WM_LBUTTONDOWN, 0, 0); |
| | | win32gui.SendMessage(sure, win32con.WM_LBUTTONUP, 0, 0); |
| | | win32gui.SendMessage(sure, win32con.WM_LBUTTONDOWN, 0, 0) |
| | | win32gui.SendMessage(sure, win32con.WM_LBUTTONUP, 0, 0) |
| | | |
| | | def getTradeSuccessCode(self, win): |
| | | if win <= 0: |
| | |
| | | |
| | | # 买入 快捷键B |
| | | # 获取交易win |
| | | win32gui.PostMessage(win, win32con.WM_KEYDOWN, 66, 0); |
| | | win32gui.PostMessage(win, win32con.WM_KEYDOWN, 66, 0) |
| | | |
| | | logger_trade_gui.info("执行买入结束:code-{} 耗时:{}".format(code, int(round(time.time() * 1000)) - start)) |
| | | # 过时 |
| | |
| | | buffer = array.array('b', b'\x00\x00' * bufSize) |
| | | win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, bufSize, buffer) |
| | | text = win32gui.PyGetString(buffer.buffer_info()[0], bufSize - 1) |
| | | return text.replace("\x00", "").strip(); |
| | | return text.replace("\x00", "").strip() |
| | | |
| | | # 添加下单窗口 |
| | | @classmethod |
| | |
| | | # 交易管理器 |
| | | import time |
| | | |
| | | import mysql_data |
| | | from db import mysql_data, redis_manager |
| | | from trade import trade_data_manager, l2_trade_util |
| | | from trade.trade_gui import THSBuyWinManagerNew, THSGuiTrade |
| | | import time as t |
| | | from l2 import l2_data_manager |
| | | |
| | | from log import * |
| | | |
| | | import redis_manager |
| | | |
| | | __redis_manager = redis_manager.RedisManager(2) |
| | | |
| | |
| | | import json |
| | | |
| | | import gpcode_manager |
| | | import redis_manager |
| | | from db import redis_manager |
| | | import tool |
| | | from trade import trade_manager |
| | | |