From 70b51a2636858fb8cfbf39d3764d88d07286d8ad Mon Sep 17 00:00:00 2001 From: admin <admin@example.com> Date: 星期二, 08 四月 2025 11:27:42 +0800 Subject: [PATCH] 增加并行数量 --- strategy/order_methods.py | 56 +++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 43 insertions(+), 13 deletions(-) diff --git a/strategy/order_methods.py b/strategy/order_methods.py index 318398e..421c777 100644 --- a/strategy/order_methods.py +++ b/strategy/order_methods.py @@ -7,32 +7,43 @@ from strategy import data_cache, account_management import data_server -from log_module.log import logger_debug - +from log_module.log import logger_debug, logger_common +from strategy.trade_setting import TradeSetting from trade import huaxin_trade_api, huaxin_trade_data_update, middle_api_protocol from utils import huaxin_util, tool # 寮曞叆鏃ュ織妯″潡 -from strategy.logging_config import get_logger # 鑾峰彇logger瀹炰緥 -logger = get_logger() +logger = logger_common # 涓嬪崟涔板叆鍑芥暟锛堟寜閲戦锛屼互闄愪环涔帮級銆愭寜閲戦涔� 鍩虹鐗堛�� def buy_order_by_value(symbol, buy_order_value, sec_name, current_price): + # 鑷姩涔� 寮�鍏崇洃鍚柟娉� + if not TradeSetting().get_auto_buy(): + # 鏆傚仠鑷姩涔� + logger.info(f"鍦ㄤ氦鏄撴柟娉曞嚱鏁板 鍏抽棴浜� 鑷姩涔�") + return + if current_price < 3 or current_price > 30: + # 褰撳墠鍗曚环瓒呭嚭棰勮闄愬埗 + logger.info(f"褰撳墠鏍囩殑涓偂{sec_name}鍗曚环瓒呭嚭棰勮闄愬埗锛侀璁惧��3 < current_price < 30,褰撳墠鏈�鏂颁环{current_price}") + return price = round(float(current_price), 2) volume = (int(buy_order_value / price) // 100) * 100 if volume < 100: volume = 100 # 璋冪敤绗煎瓙浠疯绠楀伐鍏疯绠椾笅鍗曚环鏍� - order_price = tool.get_buy_max_price(current_price) + order_price = round(tool.get_buy_max_price(current_price), 2) buy_order = huaxin_trade_api.order(1, symbol[-6:], volume, order_price, blocking=True) + logger.info(f"current_price===={current_price} order_price===={order_price}") logger.info(f"buy_order===={buy_order}") orderStatusMsg = buy_order['data'].get('orderStatusMsg', None) statusMsg = buy_order['data'].get('statusMsg', None) + logger.info(f"orderStatusMsg==={orderStatusMsg}") + logger.info(f"statusMsg==={statusMsg}") # orderStatusMsg 涓嶅湪buy_order鐨勪笅鍗曞洖璋冧腑锛岄偅涔堟墠璁や负涓嬪崟鎴愬姛 - if orderStatusMsg is not None or (statusMsg is not None and statusMsg != ''): + if statusMsg is not None and statusMsg == '': logger.info(f"涔扮エ 涓嬪崟鎴愬姛锛氥�恵sec_name}銆�") # 姣忎竴娆℃垚鍔熶笅鍗曞悗瑕佹洿鏂颁竴涓� 缂撳瓨 鐨勬寔浠撴暟鎹� account_management.position_management() @@ -40,12 +51,22 @@ # 璋冪敤璧勯噾鏌ヨ鍑芥暟 鏌ョ湅璧勯噾鍙樺寲 account_management.finance_management() logger.info(f"鏇存柊鐨勮祫閲戞暟鎹甦ata_cache.account_finance_dict=={data_cache.account_finance_dict}") - # 涔扮エ鍚庢坊鍔� 鎸佷粨浠g爜闆嗗悎 - data_cache.position_symbols_set.add(symbol) - # 涔扮エ鍚庢坊鍔� 浠婃棩鏂板鎸佷粨浠g爜闆嗗悎 - data_cache.addition_position_symbols_set.add(symbol) - logger.info(f"褰撳墠鎸佷粨鏁伴噺:::{len(data_cache.position_symbols_set)}") - logger.info(f"浠婃棩鏂板鎸佷粨鏁伴噺:::{len(data_cache.addition_position_symbols_set)}") + if symbol[-6:] in data_cache.account_positions_dict: + logger.info(f"璇ヨ偂宸茬粡鎸佷粨==銆媨sec_name}") + pass + + # todo 褰撳墠涓烘祴璇曢樁娈电殑鍐椾綑鎵撳嵃 + # 妫�娴嬫寔浠撲俊鎭腑鏈夋棤涓嬪崟涓偂涓旀湁璇ヤ釜鑲$殑褰撳墠鎸佷粨锛屽彧鏈夊綋鍓嶆寔浠撴暟閲忎笉涓�0鏃讹紝鎵嶈涓轰氦鏄撴垚鍔� + for i in data_cache.account_positions_dict: + # print(i) + if i['securityID'] == symbol[-6:]: + # print(i['currentPosition']) + if i['currentPosition'] == 0: + logger.info(f"銆恵i['securityName']}銆戜氦鏄撳け璐") + else: + # 涔扮エ鍚庢坊鍔� 鎸佷粨浠g爜闆嗗悎 + data_cache.position_symbols_set.add(symbol) + logger.info(f"銆恵i['securityName']}銆戜氦鏄撴垚鍔燂紒") # 涓嬪崟涔板叆鍑芥暟锛堟寜鍙敤璧勯噾鐨勪竴瀹氭瘮渚嬶紝鍦ㄦ定鍋滀环涔帮級銆愭寜閲戦涔� 楂樼骇鐗堛�� @@ -75,15 +96,23 @@ # 涓嬪崟鍗栧嚭鍑芥暟锛堟寜鎸佷粨鏁伴噺锛屽湪闄愪环鍗栵級銆愭寜閲忓崠 鍩虹鐗堛�� def sell_order_by_volume(symbol, volume, sec_name, current_price): + # 鑷姩鍗栧紑鍏崇洃鍚柟娉� + if not TradeSetting().get_auto_sell(): + # 鏆傚仠鑷姩鍗� + logger.info(f"鍦ㄤ氦鏄撴柟娉曞嚱鏁板 鍏抽棴浜� 鑷姩鍗�") + return # price = round(float(price), 2) # 璋冪敤绗煎瓙浠疯绠楀伐鍏疯绠椾笅鍗曚环鏍� order_price = tool.get_buy_min_price(current_price) sell_order = huaxin_trade_api.order(2, symbol[-6:], volume, order_price, blocking=True) + logger.info(f"current_price===={current_price} order_price===={order_price}") logger.info(f"sell_order===={sell_order}") orderStatusMsg = sell_order['data'].get('orderStatusMsg', None) statusMsg = sell_order['data'].get('statusMsg', None) + logger.info(f"orderStatusMsg==={orderStatusMsg}") + logger.info(f"statusMsg==={statusMsg}") # orderStatusMsg 涓嶅湪buy_order鐨勪笅鍗曞洖璋冧腑锛岄偅涔堟墠璁や负涓嬪崟鎴愬姛 - if orderStatusMsg is not None or (statusMsg is not None and statusMsg != ''): + if statusMsg is not None and statusMsg == '': logger.info(f"鍗栫エ 涓嬪崟鎴愬姛锛氥�恵sec_name}銆�") # 姣忎竴娆℃垚鍔熶笅鍗曞悗瑕佹洿鏂颁竴涓� 缂撳瓨 鐨勬寔浠撴暟鎹� account_management.position_management() @@ -105,6 +134,7 @@ :param index: 鎸佷粨瀵硅薄鍒楄〃涓殑涓偂瀵瑰簲搴忓垪鍙� :return: 灏濊瘯杩斿洖鐨勮鍗曟暟鎹� """ + logger.info(f"褰撳墠涓偂鎸佷粨鎵嬫暟銆愬綋鍓嶅嚱鏁拌璋冪敤鏃朵紶杩涙潵鐨勫悓姝ユ暟鎹甦ata_cache涓殑鎸佷粨鏁版嵁銆�==={position_volume_yesterday}") # sell_order_volume = int(position_volume_yesterday * part_of_volume) sell_order_volume = round(position_volume_yesterday * part_of_volume / 100) * 100 -- Gitblit v1.8.0