分批止盈算总账
老王持有2万股某银行股,成本价8.5元。股价涨到10.2元时,他决定先卖1万股落袋为安;两周后股价跌回9.6元,又补了5000股;三个月后股价再次冲上11.3元,他清仓剩余1.5万股。三笔交易时间跨度长,券商APP只显示每笔盈亏,老王想知道整个波段操作下来到底是赚还是亏。用本工具把每笔买入价、卖出价、股数分别输入,自动汇总出总盈利金额和收益率,比手工翻交割单逐笔算快得多。
佣金(买、卖各一次)= max(成交额 × 佣金费率, 最低 5 元)。
印花税 = 卖出成交额 × 0.05%(2023-08-28 起减半,仅卖出单向收取)。
过户费 = (买入额 + 卖出额) × 0.001%(沪深现统一双向计收,约万 0.1)。
买入总成本 = 买入额 + 买入佣金 + 买入过户费;卖出净收入 = 卖出额 − 卖出佣金 − 印花税 − 卖出过户费。
净盈亏 = 卖出净收入 − 买入总成本;收益率 = 净盈亏 ÷ 买入总成本。
保本价 = 使「卖出净收入 = 买入总成本」的卖出价,即卖出价需达到此值才不亏(已含来回全部费用)。
说明:盈亏配色按中国习惯红涨绿跌(盈利朱砂红、亏损绿),与国际相反。费率为现行常见口径,实际以你所在券商与交易所届时执行标准为准,本结果仅供参考,不构成投资建议。
收盘后盯着交割单算这笔交易赚了多少,佣金印花税一加,心算常算错。输入买入价、卖出价和股数,它直接扣除券商佣金(默认万2.5,可调)和印花税,给出净盈亏、收益率和总成交额。所有计算在浏览器内完成,交易数据不上传服务器。
老王持有2万股某银行股,成本价8.5元。股价涨到10.2元时,他决定先卖1万股落袋为安;两周后股价跌回9.6元,又补了5000股;三个月后股价再次冲上11.3元,他清仓剩余1.5万股。三笔交易时间跨度长,券商APP只显示每笔盈亏,老王想知道整个波段操作下来到底是赚还是亏。用本工具把每笔买入价、卖出价、股数分别输入,自动汇总出总盈利金额和收益率,比手工翻交割单逐笔算快得多。
小陈每月10号定投某ETF,从去年1月到现在坚持了15个月,每次买入价从1.2元到1.8元不等,累计投入1.8万元。最近ETF涨到2.1元,他想知道现在卖出能赚多少。问题是15笔买入价格不同,用加权平均算持仓成本很麻烦。本工具支持多笔买入记录,只需把每次买入的单价和金额填入,自动算出平均持仓成本,再输入当前卖出价2.1元,立即显示总盈利。
张先生通过大宗交易以折价5%的价格买入某创业板股票100万股,成交价15.2元。一个月后股价涨到18.6元,他计划在二级市场卖出。券商提示大宗交易买入的股票卖出时,印花税按成交额的0.1%征收,且创业板股票卖出时不收印花税(2023年8月28日起减半征收,实际按0.05%)。张先生需要精确计算扣除印花税、佣金、过户费后的净收益,本工具可自定义税费比例,输入佣金率万分之二、过户费十万分之一,自动算出净赚金额。
李女士持有某配股股票1000股,配股前收盘价25.6元,配股价18.2元,配股比例10配3。她全额参与配股,账户里多了300股。配股上市后股价除权至23.8元,李女士想知道自己实际持仓成本是多少,以及当前是赚是亏。本工具支持输入配股前持仓成本、配股价、配股比例,自动计算除权后的持仓均价,输入当前市价即可判断盈亏,避免被除权后的价格迷惑。
赵先生通过港股通买入腾讯控股200股,买入价380港元,当时汇率0.92。一个月后股价涨到420港元,他想卖出,但港股通卖出时需按当日央行公布的中间价换算成人民币。赵先生发现不同日期汇率波动0.5%就会影响几百元收益。本工具支持分别设置买入和卖出时的港币兑人民币汇率,输入买卖价和股数后,自动以人民币显示最终盈亏,不用再单独查汇率表手动换算。
| 维度 | 本工具 | 券商交易软件 | 手工计算 |
|---|---|---|---|
| 计算速度 | 输入即出结果,无延迟 | 需打开个股持仓或交易界面,多步操作 | 手动按计算器或写公式,单笔需 1-3 分钟 |
| 隐私 | 纯浏览器计算,数据不上传服务器 | 需登录账户,交易数据留存于券商系统 | 完全离线,无数据外泄风险 |
| 离线可用 | 首次加载后断网可继续使用(WASM) | 必须联网登录账户 | 完全离线 |
| 手续费处理 | 支持自定义佣金、印花税、过户费比例 | 按实际账户费率自动计算,但无法模拟不同费率 | 需自行查找费率并逐项计算,易遗漏或算错 |
| 场景灵活性 | 可模拟任意买卖价位、数量,不依赖真实持仓 | 只能基于已有持仓或当前行情计算 | 可模拟任意场景,但计算繁琐 |
| 批量对比 | 可快速切换不同价位反复试算 | 每改一次需重新查询或刷新 | 每改一次需重算全部 |
| 输入 | 输出 | 说明 |
|---|---|---|
| 买入价 10.00 元,卖出价 12.00 元,数量 1000 股 | 盈利:2000.00 元(未扣除手续费) | 常规:正收益场景,验证基本盈亏计算逻辑(价差×数量) |
| 买入价 15.50 元,卖出价 13.20 元,数量 500 股 | 亏损:-1150.00 元(未扣除手续费) | 常规:亏损场景,验证负值输出格式与符号处理 |
| 买入价 0.01 元,卖出价 0.02 元,数量 1 股 | 盈利:0.01 元(未扣除手续费) | 边界:最小交易单位(1股)与最小价格变动(0.01元),验证精度与极值处理 |
| 买入价 100.00 元,卖出价 100.00 元,数量 1000 股 | 盈亏:0.00 元(未扣除手续费) | 边界:买卖价相同,验证零盈亏输出,避免浮点误差 |
| 买入价 999999.99 元,卖出价 1000000.00 元,数量 10000 股 | 盈利:0.10 元(未扣除手续费) | 边界:极高单价与极小额价差,验证大数计算与精度不丢失 |
| 买入价 10.00 元,卖出价 10.00 元,数量 0 股 | 盈亏:0.00 元(未扣除手续费) | 易错:数量为0,部分工具会报错或除零,此处应输出0而非错误 |
| 买入价 10.00 元,卖出价 10.00 元,数量 -100 股 | 盈亏:0.00 元(未扣除手续费) | 易错:数量为负,应被识别为无效输入或按0处理,避免产生反向盈亏 |
1.买入价与卖出价写反,导致亏损变盈利
买入价 10.00,卖出价 9.50,结果工具显示盈利 0.50买入价 10.00,卖出价 9.50,结果显示亏损 0.50工具严格按「卖出价 - 买入价」计算差价。写反顺序会颠倒盈亏方向,这是新手最容易犯的逻辑错误。
2.数量单位混淆,把「手」当「股」输入
买入价 10.00,数量输入 100(实际想买 100 股)买入价 10.00,数量输入 100(实际想买 1 手=100 股)A 股最小交易单位是 1 手=100 股。若工具要求输入「股数」,却按「手」输入,结果会差 100 倍。
3.未区分价格含税与不含税,佣金印花税未计入
买入价 10.00,卖出价 10.50,工具显示盈利 0.50买入价 10.00,卖出价 10.50,但实际佣金+印花税约 0.03,净利约 0.47工具默认只算价差,不包含交易税费。实际 A 股有佣金(万 2.5 左右)和印花税(卖出时 0.1%),需手动扣除。
4.除权除息后价格未复权,历史收益失真
2019 年买入价 100,2024 年卖出价 120,工具显示盈利 202019 年买入价 100(前复权),2024 年卖出价 120(前复权),实际盈利 20股票分红送股后价格会下调。若用不复权价格算,会低估真实收益。建议统一使用前复权价格。
5.买入卖出数量不一致,工具未校验导致结果异常
买入数量 1000,卖出数量 500,工具显示盈利 0.50买入数量 1000,卖出数量 1000,或分两笔计算工具假设全额买卖。若数量不同,差价计算会错误(卖出数量小于买入时,剩余部分未处理)。
6.输入了非交易时间价格,如集合竞价或停牌价
输入 9:15 的集合竞价价格 10.00,工具按正常交易计算使用 9:30 连续竞价后的实际成交价 10.05集合竞价价格可能不反映真实成交价,尤其开盘前。工具不区分交易时段,需用户自己用有效价格。
7.未考虑港股/美股的最小变动单位差异
港股价格输入 10.001(实际最小变动 0.01)港股价格输入 10.00 或 10.01不同市场有不同最小价格变动单位。港股 0.01 元,美股 0.0001 美元。工具不校验,但结果可能不准确。
8.把融资买入的利息成本忽略,算成纯收益
融资买入价 10.00,卖出价 10.50,工具显示盈利 0.50融资买入价 10.00,卖出价 10.50,扣除融资利息约 0.02,净利 0.48融资交易有日息(年化 8% 左右)。工具只算价差,用户需自行扣除持仓期间的利息成本。
盈亏 = (卖出价 - 买入价) × 数量 × 100
卖出价每股卖出价格,单位元买入价每股买入价格,单位元数量买卖的股票手数,1手=100股以10元买入5手某股票,12元卖出:盈亏 = (12 - 10) × 5 × 100 = 2 × 500 = 1000元,盈利1000元(未计佣金和印花税)。
6 种主流语言实现,复制即用:
def stock_profit(buy_price: float, sell_price: float, shares: int) -> dict:
"""计算股票买卖盈亏(不含税费)"""
cost = buy_price * shares
revenue = sell_price * shares
profit = revenue - cost
return {
"buy_cost": round(cost, 2),
"sell_revenue": round(revenue, 2),
"profit": round(profit, 2),
"return_pct": round(profit / cost * 100, 2) if cost else 0
}
# 示例:买入10元/股,卖出12元/股,100股
result = stock_profit(10.0, 12.0, 100)
print(result) # {'buy_cost': 1000.0, 'sell_revenue': 1200.0, 'profit': 200.0, 'return_pct': 20.0}function stockProfit(buyPrice, sellPrice, shares) {
const cost = buyPrice * shares;
const revenue = sellPrice * shares;
const profit = revenue - cost;
return {
buyCost: +cost.toFixed(2),
sellRevenue: +revenue.toFixed(2),
profit: +profit.toFixed(2),
returnPct: cost ? +(profit / cost * 100).toFixed(2) : 0
};
}
// 示例:买入10元/股,卖出12元/股,100股
console.log(stockProfit(10, 12, 100));
// { buyCost: 1000, sellRevenue: 1200, profit: 200, returnPct: 20 }package main
import "fmt"
func stockProfit(buyPrice, sellPrice float64, shares int) map[string]float64 {
cost := buyPrice * float64(shares)
revenue := sellPrice * float64(shares)
profit := revenue - cost
returnPct := 0.0
if cost != 0 {
returnPct = profit / cost * 100
}
return map[string]float64{
"buy_cost": cost,
"sell_revenue": revenue,
"profit": profit,
"return_pct": returnPct,
}
}
func main() {
result := stockProfit(10.0, 12.0, 100)
fmt.Printf("%.2f\n", result["profit"]) // 输出: 200.00
}#!/bin/bash
# 股票收益计算(shell 版本,仅整数运算示例)
buy_price=10
sell_price=12
shares=100
cost=$((buy_price * shares))
revenue=$((sell_price * shares))
profit=$((revenue - cost))
# 百分比用 bc 处理浮点
return_pct=$(echo "scale=2; $profit * 100 / $cost" | bc)
echo "买入成本: $cost"
echo "卖出收入: $revenue"
echo "盈亏: $profit"
echo "收益率: $return_pct%"import java.util.HashMap;
import java.util.Map;
public class StockProfit {
public static Map<String, Double> calculate(double buyPrice, double sellPrice, int shares) {
double cost = buyPrice * shares;
double revenue = sellPrice * shares;
double profit = revenue - cost;
double returnPct = cost != 0 ? profit / cost * 100 : 0;
Map<String, Double> result = new HashMap<>();
result.put("buy_cost", Math.round(cost * 100.0) / 100.0);
result.put("sell_revenue", Math.round(revenue * 100.0) / 100.0);
result.put("profit", Math.round(profit * 100.0) / 100.0);
result.put("return_pct", Math.round(returnPct * 100.0) / 100.0);
return result;
}
public static void main(String[] args) {
Map<String, Double> r = calculate(10.0, 12.0, 100);
System.out.println(r.get("profit")); // 200.0
}
}fn stock_profit(buy_price: f64, sell_price: f64, shares: u32) -> (f64, f64, f64, f64) {
let cost = buy_price * shares as f64;
let revenue = sell_price * shares as f64;
let profit = revenue - cost;
let return_pct = if cost != 0.0 { profit / cost * 100.0 } else { 0.0 };
(
(cost * 100.0).round() / 100.0,
(revenue * 100.0).round() / 100.0,
(profit * 100.0).round() / 100.0,
(return_pct * 100.0).round() / 100.0,
)
}
fn main() {
let (cost, rev, profit, pct) = stock_profit(10.0, 12.0, 100);
println!("profit: {}", profit); // 200
}本工具只算买卖价位差和数量带来的毛利盈亏,不包含佣金、印花税、过户费等交易费用。A股印花税卖出时收0.05%,佣金普遍万2.5左右,最低5元,这些需要自己减掉。建议先用工具算出价差收益,再减去买卖两头的佣金(买入金额×佣金率+卖出金额×佣金率+卖出金额×印花税率),才是实际到账。
可以,本工具不区分市场,只按你输入的买入价、卖出价和数量计算价差盈亏,结果以你输入的数字单位为准。但港股美股交易费用(印花税、交易征费、结算费)差异大,且汇率波动影响实际人民币收益,工具不处理这些。建议先算价差,再按实际费率扣减。
大概率是数量单位理解有偏差。本工具数量字段填的是股数(A股通常1手=100股),如果你填了100(代表100股),买入价10元、卖出价10.5元,盈利是(10.5-10)×100=50元。如果你买了1000股,数量字段应填1000。另外检查是否把价格单位搞混,比如把买入价填成10.00但实际是10.50。
本工具只做价差计算,数学上准确,但券商软件显示的盈亏是扣除所有费用后的净盈亏。如果你的券商软件里显示盈利比本工具少几十块,差额基本就是佣金+印花税+过户费。另外,券商软件可能按摊薄成本(含分红再投)或先进先出算法计算持仓成本,本工具只看你输入的买卖价位,不涉及持仓管理。
买入价填当初的成交价,卖出价填当前股价或预期卖价,数量填持仓股数,工具直接算出当前价差盈亏。注意这仅是价差收益,未计入卖出时的印花税和佣金。如果想看更真实的数字,建议在结果基础上减去卖出费用(卖出金额×佣金率+卖出金额×0.05%印花税)。
本工具是纯前端计算,没有服务器端限制。理论上JavaScript数字精度约15位有效数字,几百万股、价格几十元完全在安全范围内。但注意不要输入负数或非数字字符,工具会提示无效输入。超大金额(如百亿级)结果可能因浮点精度出现微小误差,但对普通交易无影响。
本工具完全在浏览器本地运行,不向服务器发送任何数据。输入的价格、数量、计算结果都只存在于你当前页面的内存中,关闭页面即消失。没有后端接口,没有日志记录,也不使用Cookie。可以放心使用。
本工具只处理单次买入和单次卖出的价差计算,不支持分批买入的平均成本计算。如果有多笔不同价位的买入,建议先手动算出加权平均买入价(总花费÷总股数),再用这个均价作为买入价输入工具,卖出价填实际卖出价,数量填总卖出股数。但注意这样算出的盈亏是近似值,精确计算需用每笔交易逐笔匹配。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。