"""
|
卖出策略
|
"""
|
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)
|