""" 掘金 """ from __future__ import print_function, absolute_import import schedule # import gm.api as gmapi from code_attribute import big_money_num_manager, global_data_loader, gpcode_manager, gpcode_first_screen_manager from code_attribute.code_nature_analyse import LatestMaxVolumeManager, HighIncreaseCodeManager, CodeNatureRecordManager from db.redis_manager_delegate import RedisUtils from l2.l2_sell_manager import L2MarketSellManager from l2.l2_transaction_data_manager import HuaXinBuyOrderManager from ths import client_manager import constant from trade.deal_big_money_manager import DealOrderNoManager from trade.trade_manager import AccountAvailableMoneyManager, AutoCancelSellModeManager from utils import global_util, tool import threading import server from db import redis_manager_delegate as redis_manager from user import authority import decimal from third_data.history_k_data_util import HistoryKDatasUtils from trade import l2_trade_util, trade_manager from l2.cancel_buy_strategy import L2LimitUpSellStatisticUtil, LCancelBigNumComputer, DCancelBigNumComputer from log_module.log import logger_juejin_tick, logger_system from trade.trade_data_manager import CodeActualPriceProcessor, PlaceOrderCountManager from trade.trade_queue_manager import JueJinBuy1VolumnManager redisManager = redis_manager.RedisManager(0) __jueJinBuy1VolumnManager = JueJinBuy1VolumnManager() __actualPriceProcessor = CodeActualPriceProcessor() # 设置账户信息 def setAccountInfo(accountId, strategyId, token): redis = redisManager.getRedis() try: RedisUtils.set(redis, "juejin-account-id", accountId, auto_free=False) RedisUtils.set(redis, "juejin-strategy-id", strategyId, auto_free=False) RedisUtils.set(redis, "juejin-token", token, auto_free=False) finally: RedisUtils.realse(redis) def getAccountInfo(): redis = redisManager.getRedis() try: account_id = RedisUtils.get(redis, "juejin-account-id", auto_free=False) strategy_id = RedisUtils.get(redis, "juejin-strategy-id", auto_free=False) token = RedisUtils.get(redis, "juejin-token", auto_free=False) return account_id, strategy_id, token finally: RedisUtils.realse(redis) def init_data(): # 删除所有的涨停卖数据 L2LimitUpSellStatisticUtil().clear() # 重置所有的大单数据 big_money_num_manager.reset_all() # 清除水下捞数据 __actualPriceProcessor.clear_under_water_data() # 载入行业股票代码 global_data_loader.load_industry() # 载入代码自由流通市值 global_data_loader.load_zyltgb() # 载入量 global_data_loader.load_volumn() # 初始化载入 AccountAvailableMoneyManager() # 初始化载入 AutoCancelSellModeManager() # 9点25之前删除所有代码 if tool.trade_time_sub(tool.get_now_time_str(), "09:25:00") <= 0: # 删除L2监听代码 gpcode_manager.clear_listen_codes() # 删除首板代码 gpcode_manager.clear_first_codes() # 删除首板未筛选代码 gpcode_first_screen_manager.FirstNoScreenCodesManager().clear_first_no_screen_codes() # 删除禁止代码 l2_trade_util.init_forbidden_trade_codes() # 清空白名单 gpcode_manager.WhiteListCodeManager().clear() # 清空想要买 gpcode_manager.WantBuyCodesManager().clear() # 清空分数禁止代码 trade_manager.ForbiddenBuyCodeByScoreManager().clear() # 清空暂停交易代码 gpcode_manager.PauseBuyCodesManager().clear() # 清除L撤数据 LCancelBigNumComputer().clear() # 清除大单成交数据 DealOrderNoManager().clear() # 最近是否有最大量 LatestMaxVolumeManager().clear() # L2卖行情清除 L2MarketSellManager().clear() # 涨幅过高代码 HighIncreaseCodeManager().clear() # 股性清除 CodeNatureRecordManager().clear() # 下单次数清除 PlaceOrderCountManager().clear() # 每日初始化 def everyday_init(): # 交易時間不能做初始化 # if not tool.is_init_time() or True: # raise Exception("交易时间不能初始化") init_data() codes = gpcode_manager.get_gp_list() logger_system.info("每日初始化") # 今日实时涨停 global_data_loader.add_limit_up_codes([], True) # 主要获取收盘价 __get_latest_info(None) # 获取60天最大量与昨日量 global_util.today_volumn.clear() global_util.max60_volumn.clear() global_util.yesterday_volumn.clear() # 清除大单数据 global_util.big_money_num.clear() # 初始化大单数据 for code in codes: big_money_num_manager.add_num(code, 0) big_money_num_manager.expire(code) # 清除涨停时间 global_util.limit_up_time.clear() # 初始化同花顺主站 if constant.L2_SOURCE_TYPE == constant.L2_SOURCE_TYPE_THS: l2_clients = client_manager.getValidL2Clients() for client in l2_clients: try: server.repair_ths_main_site(client) except Exception as e: pass def __run_schedule(): while True: schedule.run_pending() def init(context): # gmapi.subscribe(symbols="SZSE.002529", frequency="1d", count=30) # 订阅浦发银行, bar频率为一天和一分钟 # 订阅订阅多个频率的数据,可多次调用subscribe # 获取需要监听的股票 init_data() logger_system.info("掘金初始化") schedule.every().day.at("09:15:00").do(everyday_init) t1 = threading.Thread(target=lambda: __run_schedule()) # 后台运行 t1.setDaemon(True) t1.start() # 多个时间点获取收盘价 gmapi.schedule(schedule_func=__get_latest_info, date_rule='1d', time_rule='09:28:00') # 初始化内容 clients = authority.get_l2_clients() for client in clients: for i in range(0, constant.L2_CODE_COUNT_PER_DEVICE): gpcode_manager.init_listen_code_by_pos(client, i) def __get_latest_info(context): # 初始化内容 clients = authority.get_l2_clients() for c in clients: for i in range(0, constant.L2_CODE_COUNT_PER_DEVICE): gpcode_manager.init_listen_code_by_pos(int(c), i) codes = gpcode_manager.get_gp_list() result = HistoryKDatasUtils.get_gp_latest_info(codes) for item in result: sec_level = item['sec_level'] symbol = item['symbol'] symbol = symbol.split(".")[1] pre_close = tool.to_price(decimal.Decimal(str(item['pre_close']))) if sec_level == 1: if symbol in codes: gpcode_manager.CodePrePriceManager.set_price_pre(symbol, pre_close) else: gpcode_manager.rm_gp(symbol) # 获取最新的信息 def __get_current_info(): data = gpcode_manager.get_gp_list() results = HistoryKDatasUtils.get_gp_current_info(data) logger_juejin_tick.debug("定时获取:{}", results) for result in results: price = result["price"] symbol = result['symbol'] # 保存最新价 symbol = symbol.split(".")[1] __prices_now = {} # 保存运行时数据 def save_running_data(): HuaXinBuyOrderManager().sync_dealing_data_to_db() if __name__ == '__main__': # init_data()+ init_data()