Administrator
2024-07-25 9d39b293bde97f31f522010373aad1dd3f654c07
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
"""
卖出策略
"""
import threading
import time
 
from code_attribute import target_codes_manager
from log_module import async_log_util
from log_module.log import logger_trade, logger_debug
from records import huaxin_trade_record_manager
from trade import huaxin_sell_util, huaxin_trade_data_update
from trade.buy_strategy import BuyStrategyDataManager
from utils import tool
 
 
def __refresh_trade_data(delays=1):
    time.sleep(delays)
    huaxin_trade_data_update.add_deal_list()
    huaxin_trade_data_update.add_position_list()
 
 
def process_market_info(market, buyStrategyDataManager: BuyStrategyDataManager):
    try:
        """
        处理市场行情
        :param market: (代码, 最近的价格, 涨幅, 买1价, 买1量, 成交总量, 买入量, 卖出量, 昨日收盘价, 时间戳)
        :return:
        """
        cb_code = market[0]
        buys = huaxin_trade_record_manager.DealRecordManager().list_buy_by_code_cache(cb_code)
        if not buys:
            return
        sells = huaxin_trade_record_manager.DealRecordManager().list_sell_by_code_cache(cb_code)
        if sells is None:
            sells = []
        left_volume = sum([int(x["volume"]) for x in buys]) - sum([int(x["volume"]) for x in sells])
        if left_volume <= 0:
            # 无剩余持仓
            return
        # 计算买入金额与卖出金额的差值
        total_buy_money = sum([float(x["price"]) * int(x["volume"]) for x in buys])
        total_sell_money = sum([float(x["price"]) * int(x["volume"]) for x in sells])
        left_money = total_buy_money - total_sell_money
        cos_price = round(left_money / left_volume, 3)
        # 如果现价低于现在的2%就需要全部卖出
        down_rate = (cos_price - market[1]) / cos_price
        threshold_rate = 0.02
        if down_rate < threshold_rate:
            return
        underlying_code = target_codes_manager.get_underlying_code(cb_code)
        if not underlying_code:
            # 获取最近的行情
            underlying_market = buyStrategyDataManager.get_latest_market_info(underlying_code)
            if underlying_market:
                underlying_limit_up_price = float(tool.get_limit_up_price(underlying_code, underlying_market[8]))
                if abs(underlying_limit_up_price - underlying_market[1]) < 0.0001:
                    # 正股是涨停的
                    threshold_rate = 0.03
        if down_rate <= threshold_rate:
            return
        # 降幅触发强平机制,已跌停价卖出
        limit_down_price = round(float(tool.get_limit_down_price(cb_code, market[8])), 3)
        result = huaxin_sell_util.start_sell(cb_code, left_volume, 1, None,
                                             limit_down_price,
                                             market[1], blocking=False)
        # 强平之后刷新
        threading.Thread(target=lambda : __refresh_trade_data, daemon=True).start()
        async_log_util.info(logger_trade, f"平仓API卖结果: {result}")
    except Exception as e:
        logger_debug.exception(e)