当前位置: 首页 > news >正文

【理财类-01-07】20260717 股票根据“股价*佣金费率大于等于5元”,推算最适合购买或卖出股数。(Python)

背景需求

【理财类-01-06】20260716 股票“差价”收益计算和excel统计(Python)https://mp.csdn.net/mp_blog/creation/editor/162911231

我发现有些股数少,会导致佣金总额小于5元,但是实际支付是5元,就会损失佣金

所以我要预先根据“买入价、卖出价”和“佣金比例”“预设100股-100000股(整数股)”来推算正好在大于等于5元的那个股数

在107行,写入股票代码和买入价或卖出价

''' 输入“买入价*预设股数(100-10000)*佣金比例(沪0.0001843深0.0001654)”,当佣金正好大于等于5“,就确定用这个股数” 豆包、阿夏 20260716 ''' def calc_min_shares(code: str, buy_price: float) -> dict: """ 根据股票代码、买入价,计算刚好佣金≥5元的最小股数(100~10000,100手递增) :param code: 股票代码字符串,如"600001"、"300001" :param buy_price: 买入单价 :return: 结果字典 """ # 1. 校验股票代码长度,提取前两位 if len(code) != 6 or not code.isdigit(): raise ValueError("股票代码必须是6位纯数字") code_prefix = code[:2] # 2. 匹配市场与佣金费率 if code_prefix in ("60", "68"): market = "沪市" commission_rate = 0.0001843 # 0.1843‰ elif code_prefix in ("00", "30"): market = "深市" commission_rate = 0.0001654 # 0.1654‰ else: raise ValueError("仅支持60/68开头沪市、00/30开头深市A股代码") min_target_shares = None target_commission = 0.0 target_amount = 0.0 # 3. 遍历100~10000股,步长100(A股1手=100股) for shares in range(100, 100001, 100): trade_amount = buy_price * shares real_commission = trade_amount * commission_rate # 找到第一个佣金≥5元的股数,直接跳出循环 if real_commission >= 5: min_target_shares = shares target_amount = trade_amount target_commission = real_commission break # 4. 封装返回结果 result = { "股票代码": code, "市场": market, "佣金费率": f"{commission_rate * 1000}‰", "买入单价": buy_price, "搜索区间": "100 ~ 10000股(100股递增)" '\n---------------' } if min_target_shares is not None: result["满足佣金≥5元最小股数"] = min_target_shares result["计算佣金(未保底)"] = round(target_commission, 4) result["实际收取佣金(保底5元)"] = max(5, round(target_commission, 2)) result[""]='----------------------------------' result["对应成交总金额"] = round(target_amount, 2) else: result["提示"] = "区间100-10000股内,所有持仓计算佣金均不足5元,统一按5元收取" return result # ---------------------- 测试调用示例 ---------------------- if __name__ == "__main__": # 示例1:沪市60开头,股价10元 try: res1 = calc_min_shares("600000", 10.0) print("=== 测试1 沪市600000,股价10元 ===") for k, v in res1.items(): print(f"{k}: {v}") except Exception as e: print("错误:", e) print("\n" + "-"*60 + "\n") # 示例2:深市30开头,股价5元 try: res2 = calc_min_shares("300001", 5.0) print("=== 测试2 深市300001,股价5元 ===") for k, v in res2.items(): print(f"{k}: {v}") except Exception as e: print("错误:", e) print("\n" + "-"*60 + "\n") # 示例3:低价股,10000股佣金仍不足5 try: res3 = calc_min_shares("000001", 0.5) print("=== 测试3 深市000001,股价0.5元 ===") for k, v in res3.items(): print(f"{k}: {v}") except Exception as e: print("错误:", e) # 交互式输入版本(运行后手动输入) print("\n===== 交互式输入 =====") # stock_code = input("请输入6位股票代码:") # price = float(input("请输入买入单价:")) stock_code = '002229' # price = 9.5 # 3200 5.03 price = 9.7 # 3200 5.13 output = calc_min_shares(stock_code, price) for key, val in output.items(): print(f"{key}: {val}")

我再预设一笔9.8和10,股价越高,可以买的股数逐渐减少从3200到3100(因为佣金总额高了)

但是如果差价过大:9.5元(3200股)和10元(3100股),股价不一样,

两种情况

以买入9.5元为主、3200股,则卖出10元 3200

以卖出10元为主、3100股,则买入9.5元 3100

低买,3200,高卖3200,佣金都大于5

高买,3100,低买3200,低买的佣金小于5(但是只是微微小于5)

以上需要分别输入买入价和卖出价,现在我要同时计算买入和卖出价对应的最大股数

''' 同时计算“买入价和卖出价*预设股数(100-10000)*佣金比例(沪0.0001843深0.0001654)”,当佣金正好大于等于5“,就确定用这个股数” 推算买入价最大股数,卖出价最大股数 豆包、阿夏 20260716 ''' def calc_min_shares(code: str, price: float) -> dict: """ 根据股票代码、价格,计算刚好佣金≥5元的最小股数(100~10000,100递增) :param code: 6位股票代码字符串 :param price: 买入/卖出单价 :return: 单组价格对应的计算结果字典 """ # 1. 校验股票代码 if len(code) != 6 or not code.isdigit(): raise ValueError("股票代码必须是6位纯数字") code_prefix = code[:2] # 2. 匹配市场佣金费率 if code_prefix in ("60", "68"): market = "沪市" commission_rate = 0.0001843 # 0.1843‰ elif code_prefix in ("00", "30"): market = "深市" commission_rate = 0.0001654 # 0.1654‰ else: raise ValueError("仅支持60/68开头沪市、00/30开头深市A股代码") min_target_shares = None target_commission = 0.0 target_amount = 0.0 # 3. 遍历100~10000股,步长100 for shares in range(100, 10001, 100): trade_amount = price * shares real_commission = trade_amount * commission_rate if real_commission >= 5: min_target_shares = shares target_amount = trade_amount target_commission = real_commission break # 4. 组装结果 result = { # "股票代码": code, # "市场": market, # "佣金费率": f"{commission_rate * 1000}‰", "成交单价": round(price, 2), # "搜索区间": "100 ~ 10000股(100股递增)" } if min_target_shares is not None: result["满足佣金≥5最小股数"] = min_target_shares # result["对应成交总金额"] = round(target_amount, 2) # result["理论计算佣金"] = round(target_commission, 4) # result["实际收取佣金(保底5元)"] = max(5, round(target_commission, 2)) else: result["提示"] = "100-10000股内全部佣金不足5元,统一收5元保底佣金" return result # ---------------------- 测试调用 ---------------------- if __name__ == "__main__": # 测试案例 try: stock_code = '002229' buy_price = 9.5 # 买入单价 sell_price = 10.0 # 卖出单价 # 分别计算买入、卖出两套数据 buy_result = calc_min_shares(stock_code, buy_price) sell_result = calc_min_shares(stock_code, sell_price) print("==================== 买入计算结果 ====================") for k, v in buy_result.items(): print(f"{k}: {v}") print("-" * 60) print("==================== 卖出计算结果 ====================") for k, v in sell_result.items(): print(f"{k}: {v}") except Exception as e: print("程序异常:", e) print("\n===== 交互式手动输入模式 =====") try: # input_code = input("请输入6位股票代码:") # input_buy = float(input("请输入买入单价:")) # input_sell = float(input("请输入卖出单价:")) input_code = '002229' input_buy = 9.3 input_sell = 10 res_buy = calc_min_shares(input_code, input_buy) res_sell = calc_min_shares(input_code, input_sell) print("\n===== 手动输入-买入结果 =====") for k, v in res_buy.items(): print(f"{k}: {v}") print("-" * 60) print("===== 手动输入-卖出结果 =====") for k, v in res_sell.items(): print(f"{k}: {v}") except Exception as err: print("输入错误:", err)

(做多)低买股数 与高卖股数不一样

(做空)高卖股数 与低买股数不一样(低买的相同股数的佣金会小于5)。所以高卖可以多加100股

http://www.cnnetsun.cn/news/3472172.html

相关文章:

  • 大营销平台 —— 第二阶段初始化以及DB路由中间件的使用及基本原理
  • Vibram与Agility Robotics合作:为双足机器人打造高性能定制鞋底
  • Linux内核调试实战:GDB与QEMU环境搭建
  • Edge Impulse BYOM:自定义模型一键部署到边缘设备
  • ROS2 Jazzy执行器:原理、优化与工业应用实践
  • React性能优化:PureComponent原理与实践指南
  • 线束压接反复试错,问题到底出在哪?用 Abaqus 把关键验证前移
  • LDCI1A高温I²C时钟芯片:极端环境下的时间管理解决方案
  • 《三体》选角分析:用老一辈演员重塑科幻角色气质的实操指南
  • AI原生安全时代:开源供应链投毒攻击与Agentic AI攻防新范式
  • 深入解析Tiva™ μDMA通道映射机制:从原理到实战配置
  • 【TongWeb7】M11开启远程访问控制台
  • 超图建模实战:解决多人协作、多维事件与高阶关联的工程指南
  • Android进阶学习路径与优质博客推荐
  • Google Colab 工作流重构:从临时环境到可复现云开发体系
  • GPT-5.6全面开放:多智能体协作与成本效益突破
  • Stylus——修改豆包网页版的外观
  • LDA、QDA与朴素贝叶斯:三类经典分类器的侦探式解读
  • 市面上规格尺寸齐全的LPDDR芯片测试治具公司
  • 数据结构(C语言版)学习日记(5)
  • Eclipse创建Android项目全指南:从环境搭建到运行调试
  • PySpark MLlib文本分类实战:大规模分布式特征工程与上线指南
  • #AI篇:Qoder的使用流程
  • 业绩一好就膨胀加人,然后赔惨了——用血泪换来的教训
  • DS1302实时时钟芯片应用与优化指南
  • openEuler 裸机安装 MySQL 8.0 并配置远程连接
  • Winform开发:使用CefSharp在窗体应用中嵌入网页(高德地图嵌入Winform)
  • Python办公自动化实战:提升效率300%的核心技巧
  • 多维数据聚合:从SQL GROUP BY到OLAP立方体的工程实践
  • Isaac Lab强化学习实战:Unitree Go2四足机器人金字塔阶梯课程学习