From 59fba698b03a51a8da5b56a919ebbf94d4784f74 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期五, 06 一月 2023 15:06:27 +0800 Subject: [PATCH] 买入策略修改 --- juejin.py | 97 ++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 76 insertions(+), 21 deletions(-) diff --git a/juejin.py b/juejin.py index 20379aa..3c4fe8f 100644 --- a/juejin.py +++ b/juejin.py @@ -13,12 +13,15 @@ import gm.api as gmapi import big_money_num_manager +import client_manager import code_volumn_manager -import data_process +import constant +import global_data_loader import global_util import gpcode_manager import threading +import l2_trade_util import server import tool @@ -28,12 +31,14 @@ import trade_gui from l2_code_operate import L2CodeOperate -from l2_data_manager import L2LimitUpMoneyStatisticUtil +import l2_data_manager_new from log import logger_juejin_tick, logger_system +from trade_data_manager import CodeActualPriceProcessor from trade_queue_manager import JueJinBuy1VolumnManager -redisManager = redis_manager.RedisManager() +redisManager = redis_manager.RedisManager(0) __jueJinBuy1VolumnManager = JueJinBuy1VolumnManager() +__actualPriceProcessor = CodeActualPriceProcessor() # 璁剧疆璐︽埛淇℃伅 @@ -53,21 +58,34 @@ def init_data(): + # 鍒犻櫎涔嬪墠鐨勫垎閽熺骇澶у崟鎾ゅ崟鏁版嵁 + l2_data_manager_new.SecondAverageBigNumComputer.clear_data() + l2_data_manager_new.AverageBigNumComputer.clear_data() + # 鍒犻櫎鎵�鏈夌殑娑ㄥ仠鍗栨暟鎹� + l2_data_manager_new.L2LimitUpSellStatisticUtil.clear() + # 閲嶇疆鎵�鏈夌殑澶у崟鏁版嵁 + big_money_num_manager.reset_all() + # 娓呴櫎姘翠笅鎹炴暟鎹� + __actualPriceProcessor.clear_under_water_data() # 杞藉叆琛屼笟鑲$エ浠g爜 - global_util.load_industry() + global_data_loader.load_industry() # 杞藉叆浠g爜鑷敱娴侀�氬競鍊� - global_util.load_zyltgb() + global_data_loader.load_zyltgb() # 杞藉叆閲� - global_util.load_volumn() + global_data_loader.load_volumn() # 姣忔棩鍒濆鍖� def everyday_init(): + # 浜ゆ槗鏅傞枔涓嶈兘鍋氬垵濮嬪寲 + if not tool.is_init_time(): + raise Exception("浜ゆ槗鏃堕棿涓嶈兘鍒濆鍖�") + codes = gpcode_manager.get_gp_list() logger_system.info("姣忔棩鍒濆鍖�") # 浠婃棩瀹炴椂娑ㄥ仠 - global_util.add_limit_up_codes([], True) + global_data_loader.add_limit_up_codes([], True) # 涓昏鑾峰彇鏀剁洏浠� get_latest_info(None) # 鑾峰彇60澶╂渶澶ч噺涓庢槰鏃ラ噺 @@ -87,9 +105,12 @@ global_util.limit_up_time.clear() init_data() # 鍒濆鍖栧悓鑺遍『涓荤珯 - l2_clients = data_process.getValidL2Clients() + l2_clients = client_manager.getValidL2Clients() for client in l2_clients: - server.repair_ths_main_site(client) + try: + server.repair_ths_main_site(client) + except Exception as e: + pass def __run_schedule(): @@ -187,7 +208,7 @@ start2 = 60 * 60 * 12 + 50 * 60 end2 = 60 * 60 * 15 + 5 * 60 # TODO 娴嬭瘯 - if (start1 < relative_timestamp < end1 or start2 < relative_timestamp < end2) or global_util.TEST: + if (start1 < relative_timestamp < end1 or start2 < relative_timestamp < end2) or constant.TEST: symbol = tick['symbol'] price = tick['price'] # print(symbol,price) @@ -197,14 +218,16 @@ # 淇濆瓨鏈�鏂颁环 symbol = symbol.split(".")[1] + JueJinManager.add_listen_code(symbol) time_ = tick["created_at"].strftime("%H:%M:%S") - data_=(symbol,time_,tick["quotes"][0]["bid_v"], tick["quotes"][0]["bid_p"]) + data_ = (symbol, time_, tick["quotes"][0]["bid_v"], tick["quotes"][0]["bid_p"]) logger_juejin_tick.info("涔�1閲� {},{},{},{}", data_[1], data_[0], data_[2], data_[3]) - need_sync = __jueJinBuy1VolumnManager.save(data_[0], data_[1], data_[2],data_[3]) - if need_sync: - # 鍚屾鏁版嵁 - L2LimitUpMoneyStatisticUtil.verify_num(data_[0], data_[2], data_[1]) + # 鏆傛椂涓嶉噰鐢� + # need_sync = __jueJinBuy1VolumnManager.save(data_[0], data_[1], data_[2], data_[3]) + # if need_sync: + # # 鍚屾鏁版嵁 + # L2LimitUpMoneyStatisticUtil.verify_num(data_[0], data_[2], data_[1]) # print(tick["created_at"],tick["quotes"][0]["bid_v"]) @@ -222,19 +245,23 @@ rate = round((price - pricePre) * 100 / pricePre, 1) if rate >= 7: logger_juejin_tick.info("{}-{}-{}", code, price, rate) - if not gpcode_manager.is_listen(code) and not gpcode_manager.is_operate( + if not gpcode_manager.is_listen_old(code) and not gpcode_manager.is_operate( code) and not gpcode_manager.is_listen_full(): L2CodeOperate.get_instance().add_operate(1, code, "鐜颁环鍙樺寲,rate-{} from-{}".format(rate, price_from)) # 杩涘叆鐩戞帶 elif rate < 5: # 绉婚櫎鐩戞帶 - if gpcode_manager.is_listen(code) and not gpcode_manager.is_operate(code): + if gpcode_manager.is_listen_old(code) and not gpcode_manager.is_operate(code): L2CodeOperate.get_instance().add_operate(0, code, "鐜颁环鍙樺寲,rate-{} from-{}".format(rate, price_from)) # 鑾峰彇鍒扮幇浠� def accpt_prices(prices): print("浠锋牸浠g爜鏁伴噺锛�", len(prices)) + __actualPriceProcessor.save_current_price_codes_count(len(prices)) + # 閲囬泦鐨勪唬鐮佹暟閲忎笉瀵� + if len(gpcode_manager.get_gp_list()) - len(prices) > 2: + return now_str = datetime.datetime.now().strftime("%H:%M:%S") now_strs = now_str.split(":") now_second = int(now_strs[0]) * 60 * 60 + int(now_strs[1]) * 60 + int(now_strs[2]) @@ -259,6 +286,19 @@ else: # 鏆傚瓨娑ㄥ箙涓鸿礋鐨勪唬鐮� _delete_list.append((rate, code)) + try: + __actualPriceProcessor.process_rate(code, rate, now_str) + except Exception as e: + logging.exception(e) + + try: + __actualPriceProcessor.save_current_price(code, price, + gpcode_manager.get_limit_up_price_by_preprice( + pricePre) == tool.to_price( + decimal.Decimal(d["price"]))) + except Exception as e: + logging.exception(e) + # 鎺掑簭 new_code_list = sorted(_code_list, key=lambda e: e.__getitem__(0), reverse=True) # 棰勫~鍏呬笅鍗曚唬鐮� @@ -273,7 +313,7 @@ logging.exception(e) pass - client_ids = data_process.getValidL2Clients() + client_ids = client_manager.getValidL2Clients() # 鏈�澶氬~鍏呯殑浠g爜鏁伴噺 max_count = len(client_ids) * 8 if max_count == 0: @@ -294,13 +334,17 @@ # 鍚庨潰鐨勪唬鐮佹暟閲� # 鍏堝垹闄ゅ簲璇ュ垹闄ょ殑浠g爜 for code in del_list: - if gpcode_manager.is_listen(code): + if gpcode_manager.is_listen_old(code): # 鍒ゆ柇鏄惁鍦ㄧ洃鍚噷闈� L2CodeOperate.get_instance().add_operate(0, code, "鐜颁环鍙樺寲") # 澧炲姞搴旇澧炲姞鐨勪唬鐮� for code in add_code_list: - if not gpcode_manager.is_listen(code): - L2CodeOperate.get_instance().add_operate(1, code, "鐜颁环鍙樺寲") + if not gpcode_manager.is_listen_old(code): + if not l2_trade_util.is_in_forbidden_trade_codes(code): + L2CodeOperate.get_instance().add_operate(1, code, "鐜颁环鍙樺寲") + else: + if l2_trade_util.is_in_forbidden_trade_codes(code): + L2CodeOperate.get_instance().add_operate(0, code, "鐜颁环鍙樺寲") print(add_code_list, del_list) @@ -382,6 +426,17 @@ def stop(self): gmapi.stop() + @classmethod + def add_listen_code(cls, code): + redis = redisManager.getRedis() + redis.setex("juejin_listen_code-{}".format(code), 20, "1") + + @classmethod + def get_listen_codes_lenth(cls): + redis = redisManager.getRedis() + keys = redis.keys("juejin_listen_code-*") + return len(keys) + def trade(code, volume): account_id, s_id, token = getAccountInfo() -- Gitblit v1.8.0