| | |
| | | except: |
| | | pass |
| | | |
| | | try: |
| | | if order_begin_pos: |
| | | fdata['mode'] = order_begin_pos.mode |
| | | else: |
| | | fdata['mode'] = -1 |
| | | except: |
| | | pass |
| | | |
| | | fdatas.append(fdata) |
| | | except Exception as e: |
| | | logger_debug.exception(e) |
| | |
| | | from third_data.history_k_data_util import JueJinApi |
| | | from trade import trade_manager, l2_trade_util, \ |
| | | trade_data_manager, trade_constant, radical_buy_strategy, radical_buy_data_manager |
| | | from trade.buy_money_count_setting import BuyMoneyAndCountSetting |
| | | from trade.buy_money_count_setting import BuyMoneyAndCountSetting, BuyMoneyUtil |
| | | |
| | | from trade.huaxin import huaxin_trade_api as trade_api, huaxin_trade_api, huaxin_trade_data_update, \ |
| | | huaxin_trade_record_manager, huaxin_sell_util |
| | |
| | | # 判断昨日是否涨停过 |
| | | async_log_util.info(logger_l2_radical_buy, f"涨停主动买:{code}-{transaction_datas[-1]}") |
| | | deal_codes = RadicalBuyDealCodesManager().get_deal_codes() |
| | | # 判断今日扫入的代码数量是否大于阈值 |
| | | radical_buy_setting = BuyMoneyAndCountSetting().get_radical_buy_setting() |
| | | MAX_COUNT = 4 if radical_buy_setting is None else radical_buy_setting[0] |
| | | if len(deal_codes) >= MAX_COUNT: |
| | |
| | | except Exception as e: |
| | | logger_debug.exception(e) |
| | | |
| | | # 判断当前时间段是否可以买入 |
| | | mode = OrderBeginPosInfo.MODE_RADICAL |
| | | can_buy, money, msg = BuyMoneyUtil.get_buy_data(tool.get_now_time_str(), mode, |
| | | DealAndDelegateWithBuyModeDataManager().get_deal_codes_info( |
| | | mode), |
| | | DealAndDelegateWithBuyModeDataManager().get_delegates_codes_info( |
| | | mode)) |
| | | if not can_buy: |
| | | async_log_util.info(logger_l2_radical_buy, f"当前时间段已不能扫入:{msg}") |
| | | return |
| | | |
| | | # -----根据成交比例判断是否可买------ |
| | | result_by_volume = radical_buy_strategy.limit_up_active_buy_deal(code, transaction_datas) |
| | | async_log_util.info(logger_l2_radical_buy, f"量买入结果判断:{code}, 结果:{result_by_volume} 板块:{buy_blocks}") |
| | |
| | | from l2.l2_transaction_data_manager import HuaXinSellOrderStatisticManager |
| | | from log_module import log, log_export, async_log_util |
| | | from trade.huaxin import huaxin_trade_api |
| | | from trade.radical_buy_data_manager import RedicalBuyDataManager |
| | | from utils import tool, init_data_util |
| | | from db import redis_manager_delegate as redis_manager |
| | | from l2 import l2_log, l2_data_manager, transaction_progress, l2_data_manager_new, l2_transaction_data_processor, \ |
| | | cancel_buy_strategy |
| | | from l2.transaction_progress import TradeBuyQueue |
| | | from third_data import kpl_util, kpl_data_manager, block_info |
| | | from third_data.code_plate_key_manager import LimitUpCodesPlateKeyManager, CodePlateKeyBuyManager |
| | | from third_data.code_plate_key_manager import LimitUpCodesPlateKeyManager, CodePlateKeyBuyManager, \ |
| | | RadicalBuyBlockManager |
| | | from third_data.kpl_data_manager import KPLDataManager |
| | | from trade import trade_data_manager, current_price_process_manager, l2_trade_util, trade_manager |
| | | import l2.l2_data_manager_new, l2.l2_data_manager, l2.l2_data_util, l2.cancel_buy_strategy |
| | |
| | | l2.l2_data_util.local_today_datas[code] = total_datas |
| | | l2.l2_data_util.load_num_operate_map(l2.l2_data_util.local_today_num_operate_map, code, total_datas, True) |
| | | |
| | | |
| | | |
| | | |
| | | # @unittest.skip("跳过此单元测试") |
| | | def test_block(self): |
| | | code = "001376" |
| | | # KPLCodeJXBlockManager().load_jx_blocks(code, 23.52,23.62, |
| | | # kpl_data_manager.KPLLimitUpDataRecordManager.get_current_reasons()) |
| | | # |
| | | block_info.init_code(code) |
| | | codes_str = "603778" |
| | | codes = codes_str.split(",") # ["002889", "300337", "001298", "002771"] |
| | | kpl_data_manager.KPLLimitUpDataRecordManager.load_total_datas() |
| | | latest_current_limit_up_records = kpl_data_manager.get_latest_current_limit_up_records() |
| | | kpl_data_manager.KPLLimitUpDataRecordManager.save_record(tool.get_now_date_str(), |
| | | kpl_data_manager.KPLDataManager.get_data( |
| | | kpl_util.KPLDataType.LIMIT_UP)) |
| | | limit_up_data = kpl_data_manager.KPLLimitUpDataRecordManager.record_code_dict.get(code) |
| | | if limit_up_data: |
| | | limit_up_time = tool.to_time_str(limit_up_data[2]) |
| | | CodePlateKeyBuyManager.update_can_buy_blocks(code, |
| | | kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas, |
| | | kpl_data_manager.KPLLimitUpDataRecordManager.total_datas, |
| | | latest_current_limit_up_records, |
| | | block_info.get_before_blocks_dict(), |
| | | kpl_data_manager.KPLLimitUpDataRecordManager.get_current_limit_up_reason_codes_dict()) |
| | | can_buy_result = CodePlateKeyBuyManager.can_buy(code) |
| | | print(can_buy_result) |
| | | if can_buy_result: |
| | | if can_buy_result[0]: |
| | | blocks = ",".join([f"{x[0]}-{x[1] + 1}({x[2]}&{x[3] - x[2]})" for x in can_buy_result[0]]) |
| | | print(blocks) |
| | | for code in codes: |
| | | # KPLCodeJXBlockManager().load_jx_blocks(code, 23.52,23.62, |
| | | # kpl_data_manager.KPLLimitUpDataRecordManager.get_current_reasons()) |
| | | # |
| | | block_info.init_code(code) |
| | | # latest_current_limit_up_records = kpl_data_manager.get_latest_current_limit_up_records() |
| | | |
| | | init_data_util.re_set_price_pre(code, True) |
| | | |
| | | limit_up_data = kpl_data_manager.KPLLimitUpDataRecordManager.record_code_dict.get(code) |
| | | if limit_up_data: |
| | | limit_up_time = tool.to_time_str(limit_up_data[2]) |
| | | RadicalBuyBlockManager.set_current_limit_up_datas( |
| | | kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas) |
| | | # CodePlateKeyBuyManager.update_can_buy_blocks(code, |
| | | # kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas, |
| | | # kpl_data_manager.KPLLimitUpDataRecordManager.total_datas, |
| | | # latest_current_limit_up_records, |
| | | # block_info.get_before_blocks_dict(), |
| | | # kpl_data_manager.KPLLimitUpDataRecordManager.get_current_limit_up_reason_codes_dict()) |
| | | # can_buy_result = CodePlateKeyBuyManager.can_buy(code) |
| | | # print(can_buy_result) |
| | | # if can_buy_result: |
| | | # if can_buy_result[0]: |
| | | # blocks = ",".join([f"{x[0]}-{x[1] + 1}({x[2]}&{x[3] - x[2]})" for x in can_buy_result[0]]) |
| | | # print(blocks) |
| | | |
| | | yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes() |
| | | if yesterday_codes is None: |
| | | yesterday_codes = set() |
| | | result = RadicalBuyBlockManager.is_radical_buy(code, yesterday_codes) |
| | | print(code, result) |
| | | if result[0]: |
| | | can_buy_result = RedicalBuyDataManager.can_buy(code) |
| | | if can_buy_result[0]: |
| | | print("可以买", code, result) |
| | | else: |
| | | print("不可以买", code, can_buy_result) |
| | | |
| | | # l2.l2_data_manager_new.L2TradeDataProcessor.can_buy_first(code, None) |
| | | |
| | |
| | | import base64 |
| | | |
| | | from code_attribute import global_data_loader |
| | | from settings.trade_setting import TradeBlockBuyModeManager |
| | | from third_data.history_k_data_util import HistoryKDatasUtils |
| | |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | print(1e7) |
| | | print( base64.b64decode("WwogICAgWwogICAgICAgICLkuK3lrZflpLQiLAogICAgICAgIDIKICAgIF0KXQ==").decode('utf-8')) |
| | |
| | | from third_data import kpl_data_manager, kpl_util |
| | | from third_data.code_plate_key_manager import CodesHisReasonAndBlocksManager |
| | | import copy |
| | | import time |
| | | |
| | | from db import redis_manager |
| | | from db.redis_manager_delegate import RedisUtils |
| | | from third_data import kpl_data_manager, kpl_util, kpl_api |
| | | from third_data.code_plate_key_manager import CodesHisReasonAndBlocksManager, KPLCodeJXBlockManager |
| | | from third_data.kpl_limit_up_data_manager import LatestLimitUpBlockManager, CodeLimitUpSequenceManager |
| | | from third_data.third_blocks_manager import BlockMapManager, CodeThirdBlocksManager, SOURCE_TYPE_KPL |
| | | from utils import tool |
| | | from utils.kpl_data_db_util import KPLLimitUpDataUtil |
| | | |
| | |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | code = "000546" |
| | | k3 = CodesHisReasonAndBlocksManager().get_history_blocks(code) |
| | | print(k3) |
| | | k3 = CodesHisReasonAndBlocksManager().get_history_blocks(code) |
| | | print(k3) |
| | | limit_up_timestamp = time.time() |
| | | current_before_codes_info = [("000333", time.time())] |
| | | if tool.trade_time_sub(tool.timestamp_format(limit_up_timestamp, '%H:%M:%S'), |
| | | tool.timestamp_format(current_before_codes_info[-1][1], '%H:%M:%S')) >= 10 * 60: |
| | | print("123123") |
| | | |
| | | # code = "603825" |
| | | # k3 = CodesHisReasonAndBlocksManager().get_history_blocks(code) |
| | | # print(k3) |
| | | # k3 = CodesHisReasonAndBlocksManager().get_history_blocks(code) |
| | | # print(k3) |
| | | # print(KPLLimitUpDataUtil.get_latest_block_infos(code="000561")) |
| | | # print(code_plate_key_manager.ForbiddenBlockManager().get_blocks()) |
| | | # code_plate_key_manager.ForbiddenBlockManager().add("测试2") |
| | |
| | | from third_data import history_k_data_manager |
| | | from third_data.history_k_data_manager import HistoryKDataManager |
| | | from third_data.history_k_data_util import JueJinApi |
| | | from utils import tool, init_data_util |
| | | |
| | | if __name__ == '__main__': |
| | | code = "603960" |
| | | day = tool.get_now_date_str() |
| | | datas = init_data_util.get_volumns_by_code(code, 150) |
| | | HistoryKDataManager().save_history_bars(code, day, datas, force=True) |
| | | print(HistoryKDataManager().get_history_bars(code, day)) |
| | | print(HistoryKDataManager().get_pre_close(code, day)) |
| | | history_k_data_manager.re_set_price_pres([code]) |
| | | # code = "603960" |
| | | # day = tool.get_now_date_str() |
| | | # datas = init_data_util.get_volumns_by_code(code, 150) |
| | | # HistoryKDataManager().save_history_bars(code, day, datas, force=True) |
| | | # print(HistoryKDataManager().get_history_bars(code, day)) |
| | | # print(HistoryKDataManager().get_pre_close(code, day)) |
| | | # history_k_data_manager.re_set_price_pres([code]) |
| | | # volumes_data = init_data_util.get_volumns_by_code("600211", 150) |
| | | # for volume in volumes_data: |
| | | # print(volume) |
| | | code = "000333" |
| | | now_day = "2024-10-10" |
| | | results = JueJinApi.get_history_instruments(JueJinApi.get_juejin_code_list_with_prefix([code]), |
| | | tool.date_sub(now_day, 30), tool.date_sub(now_day, 1)) |
| | | print(results) |
| | |
| | | async_log_util.info(logger_kpl_block_can_buy, |
| | | f"{code}:获取到精选板块-{blocks} 耗时:{int(time.time() - start_time)}s") |
| | | self.save_jx_blocks(code, blocks, current_limit_up_blocks) |
| | | # 跟随精选板块一起更新 |
| | | self.load_jx_blocks_radical(code) |
| | | else: |
| | | # 还没涨停的需要更新精选板块 更新精选板块 |
| | | if abs(float(buy_1_price) - float(limit_up_price)) >= 0.001: |
| | |
| | | async_log_util.info(logger_kpl_block_can_buy, |
| | | f"{code}:获取到精选板块(更新)-{blocks} 耗时:{int(time.time() - start_time)}s") |
| | | self.save_jx_blocks(code, blocks, current_limit_up_blocks) |
| | | # 跟随精选板块一起更新 |
| | | self.load_jx_blocks_radical(code) |
| | | elif price_rate > 0.03: |
| | | # 添加备用板块 |
| | | if not self.get_jx_blocks_cache(code, by=True): |
| | |
| | | self.save_jx_blocks(code, blocks, current_limit_up_blocks, by=True) |
| | | async_log_util.info(logger_kpl_block_can_buy, |
| | | f"{code}:获取到精选板块(备用)-{blocks} 耗时:{int(time.time() - start_time)}s") |
| | | # 跟随精选板块一起更新 |
| | | self.load_jx_blocks_radical(code) |
| | | |
| | | if price_rate > 0.03: |
| | | if not self.__code_blocks_for_radical_buy.get(code): |
| | |
| | | if blocks is None: |
| | | blocks = set() |
| | | # 将获取涨停原因与涨停推荐 |
| | | keys = TargetCodePlateKeyManager().get_plate_keys(code, contains_today=False) |
| | | keys = TargetCodePlateKeyManager().get_plate_keys(code, contains_today=True) |
| | | if keys and keys[0]: |
| | | blocks |= set(keys[0]) |
| | | return blocks |
| | |
| | | for block in blocks: |
| | | if block.endswith("概念"): |
| | | block = block[:-2] |
| | | # b = self.get_map_blocks_cache(block) |
| | | # if b: |
| | | # fbs |= b |
| | | b = self.get_map_blocks_cache(block) |
| | | if b: |
| | | fbs |= b |
| | | if block in invalid_blocks: |
| | | continue |
| | | fbs.add(block) |
| | |
| | | pass |
| | | |
| | | |
| | | if __name__ == '__main__': |
| | | def __add_invlaid_blocks(): |
| | | blocks_str = """ |
| | | 昨日连板 |
| | | 昨日连板_含一字 |
| | | 昨日涨停 |
| | | 昨日涨停_含一字 |
| | | """ |
| | | 昨日连板 |
| | | 昨日连板_含一字 |
| | | 昨日涨停 |
| | | 昨日涨停_含一字 |
| | | """ |
| | | blocks = set() |
| | | for x in blocks_str.split("\n"): |
| | | if x.strip(): |
| | | blocks.add(x.strip()) |
| | | |
| | | print(len(blocks)) |
| | | print(len(InvalidBlockManager().get_invalid_blocks())) |
| | | InvalidBlockManager().set_incalid_blocks(blocks) |
| | | |
| | | |
| | | if __name__ == '__main__': |
| | | pass |
| | | |
| | |
| | | if start_time_int < int(d[1].replace(":", "")) <= end_time_int: |
| | | codes.add(d[0]) |
| | | if len(codes) >= end_info[2]: |
| | | return True, constant.BUY_MONEY_PER_CODE, f"时间段:{start_time}-{end_info[0]} 已成交/委托数量({codes})超过{end_info[2]}个,按照默认金额委托" |
| | | return False, constant.BUY_MONEY_PER_CODE, f"时间段:{start_time}-{end_info[0]} 已成交/委托数量({codes})超过{end_info[2]}个,已经不能委托" |
| | | else: |
| | | return True, end_info[ |
| | | 1], f"时间段:{start_time}-{end_info[0]} 已成交/委托数量({codes})没有超过{end_info[2]}个,委托金额为:{end_info[1]}" |
| | |
| | | if GreenListCodeManager().is_in_cache(code): |
| | | MustBuyCodesManager().add_code(code) |
| | | |
| | | # 如果是扫入下单,下单之后就加红 |
| | | if order_begin_pos.mode == OrderBeginPosInfo.MODE_RADICAL: |
| | | MustBuyCodesManager().add_code(code) |
| | | |
| | | # 清除下单信号 |
| | | place_order_single_data_manager.L2TradeSingleDataManager.clear_data(code) |
| | | |