返回列表 发布新帖

求助,当有多只股票持仓时,其中一个股票触发了卖出,会全部卖出

1278 8
发表于 2024-1-5 13:55:32 | 显示全部楼层 阅读模式

这部分的代码是这样的:

# 这部分的代码是这样的:
s = [股票池]有N只股票
for i in range(len(s)):
    #### 若当前有持仓,但是持仓数量小于最大持仓;
    if 0 < len(position_codes) < max_pos_n:
        for j in range(len(pos_dicts)):
            stock_codes = pos_dicts[j]["股票代码"]
            holdings_v = pos_dicts[j]["持仓量"]
            holdings_p = pos_dicts[j]["成本价"]
            last_price = pos_dicts[j]["最新价"]
            holdings_u = pos_dicts[j]['可用数量']
            #### 设置跌停价
            down_stop_price = C.get_instrumentdetail(pos_dicts[j]["股票代码"])["DownStopPrice"]
            ###########print(stock_codes)
        if pos_dicts[j]["股票代码"] in s:  ###### 当前持仓代码在当前股票池中;判断是否平仓
            ### 判断止损
            if pos_dicts[j]["成本价"] * (1 - C.stop_loss_ratio) >= pos_dicts[j]["最新价"]:
                if mp[pos_dicts[j]["股票代码"]] == 1:
                    if pos_dicts[j]['可用数量'] > 0:
                        passorder(24, 1101, C.accID, pos_dicts[j]["股票代码"], 5, -1, pos_dicts[j]['可用数量'], 2, C)
                        mp[pos_dicts[j]["股票代码"]] = 0
                        total_value = sum(mp.values())
                        ##### print("mp字典对应股票代码值:",mp[stock_codes],"卖出股票代码:",stock_codes)
                        print("持仓未满,止损时间", timetag_to_datetime(a[-1]["Time"], '%Y%m%d %H:%M:%S'), "标的:",
                              pos_dicts[j]["股票代码"], total_value)
                        ##### print(mp)
                        C.draw_text(1, 1, '止损')

# 这是获取pos_dicts的函数
######### 获取持仓函数
def get_position(C):
    position_info = get_trade_detail_data(C.accID, "stock", 'position')
    def position_to_dict(pos):
        pos_dict = {'股票代码': pos.m_strInstrumentID + '.' + pos.m_strExchangeID,
                    '持仓量': pos.m_nVolume, '可用数量': pos.m_nCanUseVolume,
                    '持仓市值': pos.m_dMarketValue, '持仓成本': pos.m_dPositionCost,
                    '持仓盈亏': pos.m_dPositionProfit, '浮动盈亏': pos.m_dFloatProfit,
                    '成本价': pos.m_dOpenPrice, "最新价": pos.m_dLastPrice}
        return pos_dict
    pos_dicts = [position_to_dict(pos) for pos in position_info]
    return pos_dicts

望不吝赐教

评论8

*******1473楼主
发表于 2024-1-5 14:05:52 | 显示全部楼层
求教
*******6310
发表于 2024-1-5 14:13:23 | 显示全部楼层
image.png
看起来是这几个判断都满足了 走到了最里边的下单? print里加上各个条件 左右的值, 看为啥都符合.
*******1473楼主
发表于 2024-1-5 14:55:15 | 显示全部楼层
*******6310 发表于 2024-1-5 14:13
看起来是这几个判断都满足了 走到了最里边的下单? print里加上各个条件 左右的值, 看为啥都符合.  ...

大佬,这是打印出的值
C:\Users\Administrator\Desktop\1.png
f91b6be4e4cd0ad8f416f5846a0ebd0.png
*******1473楼主
发表于 2024-1-5 14:57:14 | 显示全部楼层
*******1473 发表于 2024-1-5 14:55
大佬,这是打印出的值

mp对应的值都正常,但是检查K线发现并不同时符合卖出条件...
hanson
发表于 2024-1-5 15:10:33 | 显示全部楼层
成本价  pos.m_dOpenPrice 改为 pos.m_dAvgPrice试试
*******6310
发表于 2024-1-5 15:27:20 | 显示全部楼层
pos_dicts[j]["成本价"] * (1 - C.stop_loss_ratio)  
pos_dicts[j]["最新价"]
这两个的值 打印看下 print(f"成本价 {pos_dicts[j]["成本价"]} 止损比例 {1 - C.stop_loss_ratio} 最新价 {pos_dicts[j]["最新价"]}")
*******5167
发表于 2024-1-7 12:24:38 | 显示全部楼层
s = [股票池]  # 假设这是你的股票池
max_pos_n =  # 你的最大持仓量
position_codes =  # 你的持仓代码列表
pos_dicts = get_position(C)  # 获取持仓信息的函数

for i in range(len(s)):
    stock_code = s[i]
   
    # 若当前有持仓,但是持仓数量小于最大持仓
    if 0 < len(position_codes) < max_pos_n:
        for j in range(len(pos_dicts)):
            if pos_dicts[j]["股票代码"] == stock_code:
                holdings_v = pos_dicts[j]["持仓量"]
                holdings_p = pos_dicts[j]["成本价"]
                last_price = pos_dicts[j]["最新价"]
                holdings_u = pos_dicts[j]['可用数量']
               
                # 设置跌停价
                down_stop_price = C.get_instrumentdetail(stock_code)["DownStopPrice"]
               
                # 当前持仓代码在当前股票池中,判断是否平仓
                # 判断止损
                if holdings_p * (1 - C.stop_loss_ratio) >= last_price:
                    if mp[stock_code] == 1:
                        if holdings_u > 0:
                            passorder(24, 1101, C.accID, stock_code, 5, -1, holdings_u, 2, C)
                            mp[stock_code] = 0
                            total_value = sum(mp.values())
                            print("持仓未满,止损时间", timetag_to_datetime(a[-1]["Time"], '%Y%m%d %H:%M:%S'), "标的:",
                                  stock_code, total_value)
                            C.draw_text(1, 1, '止损')
机器人的回答,只供参考
*******1473楼主
发表于 2024-1-9 12:44:44 | 显示全部楼层
谢谢各位大佬的回复,已解决了:baoquan:

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表