| | |
| | | from l2.l2_data_manager import OrderBeginPosInfo |
| | | from l2.l2_transaction_data_manager import HuaXinBuyOrderManager, HuaXinSellOrderStatisticManager, BigOrderDealManager |
| | | from log_module import async_log_util |
| | | from third_data.code_plate_key_manager import CodePlateKeyBuyManager |
| | | from third_data import code_plate_key_manager |
| | | |
| | | from utils import tool |
| | | from l2.transaction_progress import TradeBuyQueue |
| | |
| | | half_must_buy = False |
| | | if not must_buy: |
| | | try: |
| | | can_buy_result = CodePlateKeyBuyManager.can_buy(code) |
| | | can_buy_result =code_plate_key_manager.CodePlateKeyBuyManager.can_buy(code) |
| | | if can_buy_result and can_buy_result[0]: |
| | | if can_buy_result[0][1] <= 1 and can_buy_result[0][2] >= 3: |
| | | # 炸板率>60%以上就不加半红 |
| | |
| | | from third_data.history_k_data_util import HistoryKDatasUtils |
| | | from ths import l2_code_operate |
| | | from trade import trade_data_manager, l2_trade_util |
| | | from trade.trade_manager import MarketSituationManager |
| | | from settings.trade_setting import MarketSituationManager |
| | | from utils import global_util, tool, init_data_util, buy_condition_util |
| | | |
| | | __CodesPlateKeysManager = CodesHisReasonAndBlocksManager() |
| | |
| | | local_today_canceled_buyno_map |
| | | from log_module.log import logger_buy_1_volumn, logger_l2_error |
| | | from utils.tool import CodeDataCacheUtil |
| | | from settings import trade_setting |
| | | |
| | | |
| | | def set_real_place_position(code, index, buy_single_index=None, is_default=True): |
| | |
| | | canceled_indexes.add(cancel_data["index"]) |
| | | cancel_rate = round(len(canceled_indexes) / len(watch_indexes), 2) |
| | | threshhold_rate = constant.G_CANCEL_RATE |
| | | situation = trade_manager.MarketSituationManager().get_situation_cache() |
| | | if situation == trade_manager.MarketSituationManager.SITUATION_GOOD: |
| | | situation = trade_setting.MarketSituationManager().get_situation_cache() |
| | | if situation == trade_setting.MarketSituationManager.SITUATION_GOOD: |
| | | threshhold_rate = constant.G_CANCEL_RATE_FOR_GOOD_MARKET |
| | | if cancel_rate > threshhold_rate: |
| | | canceled_indexes_list = list(canceled_indexes) |
| | |
| | | canceled_indexes.add(cancel_data["index"]) |
| | | cancel_rate = round(len(canceled_indexes) / len(watch_indexes_by), 2) |
| | | threshhold_rate = constant.G_CANCEL_RATE |
| | | situation = trade_manager.MarketSituationManager().get_situation_cache() |
| | | if situation == trade_manager.MarketSituationManager.SITUATION_GOOD: |
| | | situation = trade_setting.MarketSituationManager().get_situation_cache() |
| | | if situation == trade_setting.MarketSituationManager.SITUATION_GOOD: |
| | | threshhold_rate = constant.G_CANCEL_RATE_FOR_GOOD_MARKET |
| | | if cancel_rate > threshhold_rate: |
| | | canceled_indexes_list = list(canceled_indexes) |
| | |
| | | canceled_indexes.add(cancel_data["index"]) |
| | | cancel_rate = round(len(canceled_indexes) / len(watch_indexes), 2) |
| | | threshhold_rate = constant.G_CANCEL_RATE |
| | | situation = trade_manager.MarketSituationManager().get_situation_cache() |
| | | if situation == trade_manager.MarketSituationManager.SITUATION_GOOD: |
| | | situation = trade_setting.MarketSituationManager().get_situation_cache() |
| | | if situation == trade_setting.MarketSituationManager.SITUATION_GOOD: |
| | | threshhold_rate = constant.G_CANCEL_RATE_FOR_GOOD_MARKET |
| | | if gpcode_manager.MustBuyCodesManager().is_in_cache(code): |
| | | threshhold_rate = constant.G_CANCEL_RATE_WITH_MUST_BUY |
| | |
| | | from db import redis_manager_delegate as redis_manager |
| | | from third_data.code_plate_key_manager import CodePlateKeyBuyManager, KPLCodeJXBlockManager |
| | | from trade import trade_manager, trade_queue_manager, l2_trade_factor, l2_trade_util, \ |
| | | trade_result_manager, current_price_process_manager, trade_data_manager, trade_huaxin, trade_record_log_util |
| | | trade_result_manager, current_price_process_manager, trade_data_manager, trade_huaxin, trade_record_log_util, \ |
| | | trade_constant |
| | | from l2 import l2_data_manager, l2_log, l2_data_source_util, code_price_manager, \ |
| | | transaction_progress, cancel_buy_strategy, place_order_single_data_manager |
| | | from l2.cancel_buy_strategy import DCancelBigNumComputer, \ |
| | |
| | | |
| | | from trade.trade_data_manager import CodeActualPriceProcessor, PlaceOrderCountManager |
| | | |
| | | from trade.trade_manager import TradeTargetCodeModeManager, AccountAvailableMoneyManager, MarketSituationManager |
| | | from trade.trade_manager import TradeTargetCodeModeManager, AccountAvailableMoneyManager |
| | | |
| | | from settings.trade_setting import MarketSituationManager |
| | | |
| | | import concurrent.futures |
| | | |
| | |
| | | state = cls.__CodesTradeStateManager.get_trade_state_cache(code) |
| | | start_index = len(total_datas) - len(add_datas) |
| | | end_index = len(total_datas) - 1 |
| | | if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or state == trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | if state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or state == trade_constant.TRADE_STATE_BUY_SUCCESS: |
| | | # 已挂单 |
| | | cls.__process_order(code, start_index, end_index, capture_timestamp, is_first_code) |
| | | else: |
| | |
| | | with cls.__buy_lock_dict[code]: |
| | | # 判断是否可以下单,不处于可下单状态需要返回 |
| | | state = cls.__CodesTradeStateManager.get_trade_state_cache(code) |
| | | if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or state == trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | if state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or state == trade_constant.TRADE_STATE_BUY_SUCCESS: |
| | | # 不处于可下单状态 |
| | | return False |
| | | __start_time = tool.get_now_timestamp() |
| | |
| | | @classmethod |
| | | def __get_threshmoney(cls, code): |
| | | m, msg = cls.__l2PlaceOrderParamsManagerDict[code].get_m_val() |
| | | if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) == trade_manager.TRADE_STATE_NOT_TRADE: |
| | | if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) == trade_constant.TRADE_STATE_NOT_TRADE: |
| | | # 首次下单m值扩大1.5倍 |
| | | m = int(m * 1.5) |
| | | return m, msg |
| | |
| | | import l2.l2_data_manager_new |
| | | from third_data import kpl_data_manager, kpl_api |
| | | from third_data.kpl_data_manager import KPLLimitUpDataRecordManager |
| | | from trade import l2_trade_factor, trade_manager, l2_trade_util, trade_record_log_util |
| | | from trade import l2_trade_factor, trade_manager, l2_trade_util, trade_record_log_util, trade_constant |
| | | from trade.l2_trade_factor import L2TradeFactorUtil |
| | | |
| | | base_output_content = {} |
| | |
| | | data['val']['price']) * 100 / 10000, 1)} |
| | | params["trade_data"]["trade_state"] = {} |
| | | trade_state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code) |
| | | if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED: |
| | | if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED: |
| | | params["trade_data"]["trade_state"]["order"] = True |
| | | params["trade_data"]["trade_state"]["desc"] = "已下单" |
| | | else: |
| | | params["trade_data"]["trade_state"]["order"] = False |
| | | if trade_state == trade_manager.TRADE_STATE_NOT_TRADE: |
| | | if trade_state == trade_constant.TRADE_STATE_NOT_TRADE: |
| | | params["trade_data"]["trade_state"]["desc"] = "未交易" |
| | | elif trade_state == trade_manager.TRADE_STATE_BUY_CANCEL_ING: |
| | | elif trade_state == trade_constant.TRADE_STATE_BUY_CANCEL_ING: |
| | | params["trade_data"]["trade_state"]["desc"] = "撤单中" |
| | | elif trade_state == trade_manager.TRADE_STATE_BUY_CANCEL_SUCCESS: |
| | | elif trade_state == trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS: |
| | | params["trade_data"]["trade_state"]["desc"] = "撤单成功" |
| | | elif trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | elif trade_state == trade_constant.TRADE_STATE_BUY_SUCCESS: |
| | | params["trade_data"]["trade_state"]["desc"] = "已成交" |
| | | |
| | | # log.logger_debug.info(f"下单信息耗时:{time.time() - __start_time}") |
| | | __start_time = time.time() |
| | | |
| | | # H撤监听范围 |
| | | if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED or trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED or trade_state == trade_constant.TRADE_STATE_BUY_SUCCESS: |
| | | hcancel_datas_dict, cancel_indexes_set = HourCancelBigNumComputer().get_watch_index_dict(code) |
| | | # 根据日志读取实时的计算数据 |
| | | h_cancel_latest_compute_info = log_export.get_h_cancel_compute_info(code) |
| | |
| | | from third_data.kpl_data_manager import KPLCodeLimitUpReasonManager |
| | | from ths import l2_listen_pos_health_manager, l2_code_operate, client_manager |
| | | from trade import trade_data_manager, trade_manager, l2_trade_util, \ |
| | | current_price_process_manager, trade_juejin |
| | | current_price_process_manager, trade_juejin, trade_constant |
| | | from code_attribute.code_data_util import ZYLTGBUtil |
| | | import l2.transaction_progress |
| | | |
| | |
| | | code = item["code"] |
| | | trade_state = trade_manager.CodesTradeStateManager().get_trade_state(code) |
| | | # 设置下单状态的代码为已委托 |
| | | if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER: |
| | | if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER: |
| | | origin_apply_time = apply_time |
| | | apply_time = apply_time[0:6] |
| | | apply_time = "{}:{}:{}".format(apply_time[0:2], apply_time[2:4], |
| | |
| | | code = data["data"]["code"] |
| | | if code: |
| | | state = trade_manager.CodesTradeStateManager().get_trade_state(code) |
| | | if state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_CANCEL_ING: |
| | | if state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_CANCEL_ING: |
| | | try: |
| | | l2_data_manager_new.L2TradeDataProcessor.cancel_buy(code, "手动撤销") |
| | | return_str = json.dumps({"code": 0}) |
| | |
| | | codes = data["data"]["codes"] |
| | | code = codes[0] |
| | | state = trade_manager.CodesTradeStateManager().get_trade_state(code) |
| | | if state != trade_manager.TRADE_STATE_BUY_CANCEL_SUCCESS and state != trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | if state != trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS and state != trade_constant.TRADE_STATE_BUY_SUCCESS: |
| | | return_str = json.dumps({"code": 0, "msg": "可以取消"}) |
| | | else: |
| | | return_str = json.dumps({"code": 1, "msg": "不可以取消"}) |
New file |
| | |
| | | |
| | | # 市场行情等级管理 |
| | | from db import redis_manager_delegate as redis_manager |
| | | from db.redis_manager_delegate import RedisUtils |
| | | from utils import tool |
| | | |
| | | |
| | | class MarketSituationManager: |
| | | # 差 |
| | | SITUATION_BAD = 0 |
| | | # 一般 |
| | | SITUATION_COMMON = 1 |
| | | # 好 |
| | | SITUATION_GOOD = 2 |
| | | |
| | | __db = 2 |
| | | redisManager = redis_manager.RedisManager(2) |
| | | __situation_cache = SITUATION_BAD |
| | | __instance = None |
| | | |
| | | def __new__(cls, *args, **kwargs): |
| | | if not cls.__instance: |
| | | cls.__instance = super(MarketSituationManager, cls).__new__(cls, *args, **kwargs) |
| | | # 初始化设置 |
| | | # 获取交易窗口的锁 |
| | | cls.__instance.__situation_cache = cls.get_situation() |
| | | return cls.__instance |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.redisManager.getRedis() |
| | | |
| | | def set_situation(self, situation): |
| | | if situation not in [self.SITUATION_BAD, self.SITUATION_COMMON, self.SITUATION_GOOD]: |
| | | raise Exception("situation参数值错误") |
| | | self.__situation_cache = situation |
| | | RedisUtils.setex_async(self.__db, "market_situation", tool.get_expire(), situation) |
| | | |
| | | # 是否可以下单 |
| | | @classmethod |
| | | def get_situation(cls): |
| | | # 默认设置为可交易 |
| | | val = RedisUtils.get(cls.__get_redis(), "market_situation") |
| | | if val is None: |
| | | return cls.SITUATION_BAD |
| | | return int(val) |
| | | |
| | | def get_situation_cache(self): |
| | | return self.__situation_cache |
| | | |
| | |
| | | from code_attribute import code_nature_analyse |
| | | from db.redis_manager_delegate import RedisUtils |
| | | from third_data import kpl_block_util, kpl_api, kpl_util |
| | | from trade.trade_manager import MarketSituationManager |
| | | from settings.trade_setting import MarketSituationManager |
| | | from utils import global_util, tool, buy_condition_util |
| | | from log_module import log, async_log_util |
| | | from db import redis_manager_delegate as redis_manager |
| | | |
| | | from log_module.log import logger_kpl_block_can_buy |
| | | from third_data.kpl_util import KPLPlatManager |
| | | from trade import trade_manager, l2_trade_util |
| | | from trade import trade_manager, l2_trade_util, trade_constant |
| | | |
| | | |
| | | # 代码精选板块管理 |
| | |
| | | except Exception as e: |
| | | logger_kpl_block_can_buy.error(f"{code} 获取板块出错") |
| | | logger_kpl_block_can_buy.exception(e) |
| | | |
| | | |
| | | # 禁止下单的板块 |
| | | class ForbiddenBlockManager: |
| | | __db = 3 |
| | | __redisManager = redis_manager.RedisManager(3) |
| | | __instance = None |
| | | __forbidden_blocks = set() |
| | | |
| | | def __new__(cls, *args, **kwargs): |
| | | if not cls.__instance: |
| | | cls.__instance = super(ForbiddenBlockManager, cls).__new__(cls, *args, **kwargs) |
| | | cls.__load_data() |
| | | return cls.__instance |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.__redisManager.getRedis() |
| | | |
| | | # 加载数据 |
| | | @classmethod |
| | | def __load_data(cls): |
| | | blocks = cls.__get_redis().smembers("forbidden_blocks") |
| | | if blocks: |
| | | for b in blocks: |
| | | cls.__forbidden_blocks.add(b) |
| | | |
| | | def add(self, block): |
| | | self.__forbidden_blocks.add(block) |
| | | RedisUtils.sadd_async(self.__db, "forbidden_blocks", block) |
| | | RedisUtils.expire_async(self.__db, "forbidden_blocks", tool.get_expire()) |
| | | |
| | | def remove(self, block): |
| | | if block in self.__forbidden_blocks: |
| | | self.__forbidden_blocks.remove(block) |
| | | RedisUtils.srem_async(self.__db, "forbidden_blocks", block) |
| | | |
| | | def get_blocks(self): |
| | | return copy.deepcopy(self.__forbidden_blocks) |
| | | |
| | | def is_in(self, block): |
| | | return block in self.__forbidden_blocks |
| | | |
| | | |
| | | # 开盘啦禁止交易板块管理 |
| | |
| | | # 根据身位移除代码 |
| | | # return |
| | | # 下过单的代码不移除 |
| | | if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) != trade_manager.TRADE_STATE_NOT_TRADE: |
| | | if trade_manager.CodesTradeStateManager().get_trade_state_cache(code) != trade_constant.TRADE_STATE_NOT_TRADE: |
| | | # 只要下过单的就不移除 |
| | | return |
| | | l2_trade_util.forbidden_trade(code, msg=msg) |
| | |
| | | if not blocks_compute_results: |
| | | return False, True, f"没有找到板块", [], keys, [] |
| | | codes_delegate = set(cls.__CodesTradeStateManager.get_codes_by_trade_states_cache( |
| | | {trade_manager.TRADE_STATE_BUY_DELEGATED, trade_manager.TRADE_STATE_BUY_PLACE_ORDER})) |
| | | {trade_constant.TRADE_STATE_BUY_DELEGATED, trade_constant.TRADE_STATE_BUY_PLACE_ORDER})) |
| | | codes_success = set(cls.__CodesTradeStateManager.get_codes_by_trade_states_cache( |
| | | {trade_manager.TRADE_STATE_BUY_SUCCESS})) |
| | | {trade_constant.TRADE_STATE_BUY_SUCCESS})) |
| | | codes = codes_delegate | codes_success |
| | | # 统计成交代码的板块 |
| | | trade_codes_blocks_dict = {} |
| | |
| | | from urllib.parse import parse_qs |
| | | from output import code_info_output, limit_up_data_filter, output_util, kp_client_msg_manager |
| | | |
| | | from trade import bidding_money_manager, trade_manager, l2_trade_util, trade_record_log_util |
| | | from trade import bidding_money_manager, trade_manager, l2_trade_util, trade_record_log_util, trade_constant |
| | | import concurrent.futures |
| | | |
| | | # 禁用http.server的日志输出 |
| | |
| | | code_info[4] = 1 if code_info[0] in want_codes else 0 |
| | | # 获取代码状态 |
| | | if trade_manager.CodesTradeStateManager().get_trade_state_cache( |
| | | code_info[0]) != trade_manager.TRADE_STATE_NOT_TRADE: |
| | | code_info[0]) != trade_constant.TRADE_STATE_NOT_TRADE: |
| | | code_info[5] = 1 |
| | | |
| | | response_data = json.dumps({"code": 0, "data": codes_info}) |
| | |
| | | total_datas = l2_data_util.local_today_datas.get(code) |
| | | |
| | | trade_state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code) |
| | | if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED or trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED or trade_state == trade_constant.TRADE_STATE_BUY_SUCCESS: |
| | | hcancel_datas_dict, cancel_indexes_set = HourCancelBigNumComputer().get_watch_index_dict(code) |
| | | # 根据日志读取实时的计算数据 |
| | | h_cancel_latest_compute_info = log_export.get_h_cancel_compute_info(code) |
| | |
| | | try: |
| | | # 判断是否下单 |
| | | trade_state = trade_manager.CodesTradeStateManager().get_trade_state(code) |
| | | if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED: |
| | | if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED: |
| | | # 委托中的订单,判断是否需要撤单 |
| | | if not gpcode_manager.WantBuyCodesManager().is_in_cache(code): |
| | | yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes() |
| | |
| | | from code_attribute import gpcode_manager |
| | | from utils import tool, import_util |
| | | from ths.l2_code_operate import L2CodeOperate |
| | | from trade import trade_manager, l2_trade_util |
| | | from trade import trade_manager, l2_trade_util, trade_constant |
| | | from trade.trade_data_manager import CodeActualPriceProcessor |
| | | |
| | | trade_gui = import_util.import_lib("trade.trade_gui") |
| | |
| | | item[1]) or item[0] < 0: |
| | | # 在(黑名单)/(涨幅小于)的数据 |
| | | if trade_manager.CodesTradeStateManager().get_trade_state_cache( |
| | | item[1]) != trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | item[1]) != trade_constant.TRADE_STATE_BUY_SUCCESS: |
| | | # 没成交才会加入删除 |
| | | _delete_list.append(item) |
| | | |
| | |
| | | from third_data.history_k_data_util import HistoryKDatasUtils, JueJinApi |
| | | from third_data.kpl_data_manager import KPLDataManager, KPLLimitUpDataRecordManager |
| | | from third_data.kpl_util import KPLDataType |
| | | from trade import trade_manager, trade_huaxin, l2_trade_util |
| | | from trade import trade_manager, trade_huaxin, l2_trade_util, trade_constant |
| | | |
| | | from trade.huaxin import huaxin_trade_api, huaxin_trade_record_manager, \ |
| | | huaxin_trade_data_update |
| | |
| | | |
| | | elif code: |
| | | state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code) |
| | | if state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_CANCEL_ING: |
| | | if state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_CANCEL_ING: |
| | | try: |
| | | l2_data_manager_new.L2TradeDataProcessor.cancel_buy(code, "手动撤销") |
| | | return_str = json.dumps({"code": 0}) |
| | |
| | | from third_data.kpl_data_manager import KPLDataManager |
| | | from third_data.kpl_util import KPLDataType |
| | | from trade import trade_manager, l2_trade_util, \ |
| | | trade_data_manager |
| | | trade_data_manager, trade_constant |
| | | import l2_data_util as l2_data_util_old |
| | | |
| | | from trade.huaxin import huaxin_trade_api as trade_api, huaxin_trade_api, huaxin_trade_data_update, \ |
| | |
| | | from trade.huaxin.huaxin_trade_record_manager import PositionManager, DealRecordManager, DelegateRecordManager |
| | | from trade.sell import sell_manager |
| | | from trade.sell.sell_rule_manager import TradeRuleManager, SellRule |
| | | from trade.trade_manager import TradeTargetCodeModeManager, MarketSituationManager, AutoCancelSellModeManager, \ |
| | | from trade.trade_manager import TradeTargetCodeModeManager, AutoCancelSellModeManager, \ |
| | | CodesTradeStateManager |
| | | from settings.trade_setting import MarketSituationManager |
| | | from utils import socket_util, data_export_util, middle_api_protocol, tool, huaxin_util, output_util, global_util |
| | | |
| | | trade_data_request_queue = queue.Queue() |
| | |
| | | try: |
| | | # 判断是否下单 |
| | | state = CodesTradeStateManager().get_trade_state_cache(code) |
| | | if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or state == trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | if state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or state == trade_constant.TRADE_STATE_BUY_SUCCESS: |
| | | # 已经下单了 |
| | | return |
| | | |
| | |
| | | |
| | | from code_attribute import big_money_num_manager, limit_up_time_manager, global_data_loader, gpcode_manager |
| | | import constant |
| | | from trade import trade_manager, deal_big_money_manager |
| | | from trade import trade_manager, deal_big_money_manager, trade_constant |
| | | from utils import global_util, tool |
| | | |
| | | |
| | |
| | | # 是否是初次下单 |
| | | @classmethod |
| | | def is_first_place_order(cls, code): |
| | | return trade_manager.CodesTradeStateManager().get_trade_state_cache(code) == trade_manager.TRADE_STATE_NOT_TRADE |
| | | return trade_manager.CodesTradeStateManager().get_trade_state_cache(code) == trade_constant.TRADE_STATE_NOT_TRADE |
| | | |
| | | # 设置分数 |
| | | def set_score(self, score): |
New file |
| | |
| | | # 未交易 |
| | | TRADE_STATE_NOT_TRADE = 0 |
| | | # 下单 |
| | | TRADE_STATE_BUY_PLACE_ORDER = 10 |
| | | # 已委托买 |
| | | TRADE_STATE_BUY_DELEGATED = 11 |
| | | # 委托取消进行中 |
| | | TRADE_STATE_BUY_CANCEL_ING = 13 |
| | | # 撤销成功 |
| | | TRADE_STATE_BUY_CANCEL_SUCCESS = 14 |
| | | # 买成功 |
| | | TRADE_STATE_BUY_SUCCESS = 12 |
| | |
| | | from db.redis_manager_delegate import RedisUtils |
| | | from log_module import async_log_util |
| | | from output import kp_client_msg_manager |
| | | from trade import trade_data_manager, l2_trade_util, trade_juejin, trade_huaxin |
| | | from trade import trade_data_manager, l2_trade_util, trade_juejin, trade_huaxin, trade_constant |
| | | |
| | | import time as t |
| | | from l2 import l2_data_manager, l2_data_log |
| | |
| | | __db = 2 |
| | | __redis_manager = redis_manager.RedisManager(2) |
| | | |
| | | # 未交易 |
| | | TRADE_STATE_NOT_TRADE = 0 |
| | | # 下单 |
| | | TRADE_STATE_BUY_PLACE_ORDER = 10 |
| | | # 已委托买 |
| | | TRADE_STATE_BUY_DELEGATED = 11 |
| | | # 委托取消进行中 |
| | | TRADE_STATE_BUY_CANCEL_ING = 13 |
| | | # 撤销成功 |
| | | TRADE_STATE_BUY_CANCEL_SUCCESS = 14 |
| | | # 买成功 |
| | | TRADE_STATE_BUY_SUCCESS = 12 |
| | | |
| | | guiTrade = None # trade_gui.THSGuiTrade() if trade_gui is not None else None |
| | | |
| | | latest_trade_delegate_data = [] |
| | | |
| | | |
| | | # 关闭购买入口 |
| | | # 开启购买入口 |
| | |
| | | return self.__auto_cancel_sell_mode |
| | | |
| | | |
| | | # 市场行情等级管理 |
| | | class MarketSituationManager: |
| | | # 差 |
| | | SITUATION_BAD = 0 |
| | | # 一般 |
| | | SITUATION_COMMON = 1 |
| | | # 好 |
| | | SITUATION_GOOD = 2 |
| | | |
| | | __db = 2 |
| | | redisManager = redis_manager.RedisManager(2) |
| | | __situation_cache = SITUATION_BAD |
| | | __instance = None |
| | | |
| | | def __new__(cls, *args, **kwargs): |
| | | if not cls.__instance: |
| | | cls.__instance = super(MarketSituationManager, cls).__new__(cls, *args, **kwargs) |
| | | # 初始化设置 |
| | | # 获取交易窗口的锁 |
| | | cls.__instance.__situation_cache = cls.get_situation() |
| | | return cls.__instance |
| | | |
| | | @classmethod |
| | | def __get_redis(cls): |
| | | return cls.redisManager.getRedis() |
| | | |
| | | def set_situation(self, situation): |
| | | if situation not in [self.SITUATION_BAD, self.SITUATION_COMMON, self.SITUATION_GOOD]: |
| | | raise Exception("situation参数值错误") |
| | | self.__situation_cache = situation |
| | | RedisUtils.setex_async(self.__db, "market_situation", tool.get_expire(), situation) |
| | | |
| | | # 是否可以下单 |
| | | @classmethod |
| | | def get_situation(cls): |
| | | # 默认设置为可交易 |
| | | val = RedisUtils.get(cls.__get_redis(), "market_situation") |
| | | if val is None: |
| | | return cls.SITUATION_BAD |
| | | return int(val) |
| | | |
| | | def get_situation_cache(self): |
| | | return self.__situation_cache |
| | | |
| | | |
| | | # 根据分数禁止买的票管理 |
| | | class ForbiddenBuyCodeByScoreManager: |
| | | __instance = None |
| | |
| | | def get_trade_state(self, code): |
| | | state = RedisUtils.get(self.__get_redis(), "trade-state-{}".format(code)) |
| | | if state is None: |
| | | return TRADE_STATE_NOT_TRADE |
| | | return trade_constant.TRADE_STATE_NOT_TRADE |
| | | return int(state) |
| | | |
| | | def get_trade_state_cache(self, code): |
| | | cache_result = tool.CodeDataCacheUtil.get_cache(self.__trade_state_cache, code) |
| | | if cache_result[0]: |
| | | return cache_result[1] |
| | | return TRADE_STATE_NOT_TRADE |
| | | return trade_constant.TRADE_STATE_NOT_TRADE |
| | | |
| | | def get_trade_state_dict(self): |
| | | return copy.deepcopy(self.__trade_state_cache) |
| | |
| | | |
| | | def is_state_right(code): |
| | | trade_state = __CodesTradeStateManager.get_trade_state_cache(code) |
| | | if trade_state != TRADE_STATE_NOT_TRADE and trade_state != TRADE_STATE_BUY_CANCEL_SUCCESS and trade_state != TRADE_STATE_BUY_CANCEL_ING: |
| | | if trade_state != trade_constant.TRADE_STATE_NOT_TRADE and trade_state != trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS and trade_state != trade_constant.TRADE_STATE_BUY_CANCEL_ING: |
| | | return Exception("代码处于不可交易状态"), trade_state |
| | | return None, trade_state |
| | | |
| | |
| | | raise ex |
| | | finally: |
| | | async_log_util.info(logger_trade, "{} trade.manager.start_buy 判断是否可买".format(code)) |
| | | __CodesTradeStateManager.set_trade_state(code, TRADE_STATE_BUY_PLACE_ORDER) |
| | | __CodesTradeStateManager.set_trade_state(code, trade_constant.TRADE_STATE_BUY_PLACE_ORDER) |
| | | # 状态改变过后必须要有本地下单编号 |
| | | __buy(code, price, trade_state, capture_timestamp, last_data, last_data_index, mode, exec_index=exec_index) |
| | | finally: |
| | |
| | | async_log_util.info(logger_trade, "{} trade_manager.start_cancel_buy 开始".format(code)) |
| | | trade_state = __CodesTradeStateManager.get_trade_state_cache(code) |
| | | try: |
| | | if trade_state == TRADE_STATE_BUY_SUCCESS: |
| | | if trade_state == trade_constant.TRADE_STATE_BUY_SUCCESS: |
| | | return None |
| | | if not force: |
| | | if trade_state != TRADE_STATE_BUY_PLACE_ORDER and trade_state != TRADE_STATE_BUY_DELEGATED: |
| | | if trade_state != trade_constant.TRADE_STATE_BUY_PLACE_ORDER and trade_state != trade_constant.TRADE_STATE_BUY_DELEGATED: |
| | | return None |
| | | __CodesTradeStateManager.set_trade_state(code, TRADE_STATE_BUY_CANCEL_ING) |
| | | __CodesTradeStateManager.set_trade_state(code, trade_constant.TRADE_STATE_BUY_CANCEL_ING) |
| | | if constant.API_TRADE_ENABLE: |
| | | if constant.TRADE_WAY == constant.TRADE_WAY_JUEJIN: |
| | | trade_juejin.cancel_order(code) |
| | |
| | | for i in range(0, 5): |
| | | # 如果时 |
| | | trade_state = CodesTradeStateManager().get_trade_state_cache(code) |
| | | if trade_state != TRADE_STATE_BUY_CANCEL_ING and trade_state != TRADE_STATE_BUY_CANCEL_SUCCESS: |
| | | if trade_state != trade_constant.TRADE_STATE_BUY_CANCEL_ING and trade_state != trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS: |
| | | return |
| | | try: |
| | | logger_trade.info("{}:开始再次撤单", code) |
| | |
| | | if code is not None and int(data["type"]) == 0: |
| | | l2_trade_util.forbidden_trade(code, msg="交易成功", force=True) |
| | | state = CodesTradeStateManager().get_trade_state_cache(code) |
| | | if state != TRADE_STATE_BUY_SUCCESS: |
| | | CodesTradeStateManager().set_trade_state(code, TRADE_STATE_BUY_SUCCESS) |
| | | if state != trade_constant.TRADE_STATE_BUY_SUCCESS: |
| | | CodesTradeStateManager().set_trade_state(code, trade_constant.TRADE_STATE_BUY_SUCCESS) |
| | | # 删除买撤记录的临时信息 |
| | | kp_client_msg_manager.add_msg(code, "买入成交") |
| | | l2_data_manager.TradePointManager().delete_buy_point(code) |
| | |
| | | codes.append(code) |
| | | trade_state = CodesTradeStateManager().get_trade_state_cache(code) |
| | | # 设置下单状态的代码为已委托 |
| | | if trade_state == TRADE_STATE_BUY_PLACE_ORDER: |
| | | CodesTradeStateManager().set_trade_state(code, TRADE_STATE_BUY_DELEGATED) |
| | | if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER: |
| | | CodesTradeStateManager().set_trade_state(code, trade_constant.TRADE_STATE_BUY_DELEGATED) |
| | | if constant.TRADE_WAY == constant.TRADE_WAY_JUEJIN: |
| | | ing_codes = CodesTradeStateManager().get_codes_by_trade_state(TRADE_STATE_BUY_CANCEL_ING) |
| | | ing_codes = CodesTradeStateManager().get_codes_by_trade_state(trade_constant.TRADE_STATE_BUY_CANCEL_ING) |
| | | if ing_codes is not None: |
| | | for code in ing_codes: |
| | | if code in codes: |
| | | # 强制重新取消 |
| | | start_cancel_buy(code, True) |
| | | else: |
| | | CodesTradeStateManager().set_trade_state(code, TRADE_STATE_BUY_CANCEL_SUCCESS) |
| | | CodesTradeStateManager().set_trade_state(code, trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS) |
| | | l2_data_manager.remove_from_l2_fixed_codes(code) |
| | | |
| | | |
| | |
| | | from db import redis_manager_delegate as redis_manager |
| | | from db.redis_manager_delegate import RedisUtils |
| | | from utils import tool |
| | | from trade import trade_manager |
| | | from trade import trade_manager, trade_constant |
| | | |
| | | |
| | | class THSBuy1VolumnManager: |
| | |
| | | |
| | | # 如果当前已挂单 |
| | | state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code) |
| | | if state == trade_manager.TRADE_STATE_BUY_DELEGATED or state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER: |
| | | if state == trade_constant.TRADE_STATE_BUY_DELEGATED or state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER: |
| | | # 判断本次与上一次的封单额是否小于5000w |
| | | limit_up_price = gpcode_manager.get_limit_up_price(code) |
| | | threshold_num = 50000000 // (limit_up_price * 100) |
| | |
| | | """ |
| | | # 获取自由流通市值限制 |
| | | # 返回:(最大买入,最优自由流通最小,最优自由流通最大) |
| | | from trade.trade_manager import MarketSituationManager |
| | | from settings.trade_setting import MarketSituationManager |
| | | |
| | | |
| | | # 获取自由流通市值的阈值范围 |