feat(portfolio): 组合回测接入A股费用(佣金/印花税/最低佣金/滑点)对齐个股回测; BulletTrade set_order_cost/set_slippage [vps]
CI/CD / test (push) Successful in 9s
CI/CD / nas-deploy (push) Successful in 25s
CI/CD / nas-verify (push) Successful in 10s

This commit is contained in:
2026-08-13 10:32:49 +08:00
parent b48a3b5c75
commit 66b393df16
6 changed files with 82 additions and 3 deletions
@@ -57,6 +57,11 @@ const form = reactive({
end: dr.end,
cash: 1_000_000,
benchmark: '000300.XSHG',
// A 股费用(对齐个股回测)
commission_rate: 0.0003,
stamp_duty_rate: 0.001,
min_commission: 5,
slippage: 0.001,
})
watch(
() => [form.start, form.end],
@@ -199,6 +204,10 @@ async function onSubmit(): Promise<void> {
end_date: form.end,
initial_cash: form.cash,
benchmark: form.benchmark,
commission_rate: Number(form.commission_rate),
stamp_duty_rate: Number(form.stamp_duty_rate),
min_commission: Number(form.min_commission),
slippage: Number(form.slippage),
})
try {
localStorage.setItem('last_portfolio_task', tid)
@@ -328,6 +337,22 @@ function fmtNum(v: number | null | undefined, digits = 2): string {
<el-option v-for="b in BENCHMARK_OPTIONS" :key="b.value" :label="b.label" :value="b.value" />
</el-select>
</el-form-item>
<el-form-item label="佣金率">
<el-input v-model="form.commission_rate" style="width: 160px" />
<span class="muted form-hint">0.0003=万3(双边,最低5元)</span>
</el-form-item>
<el-form-item label="印花税率">
<el-input v-model="form.stamp_duty_rate" style="width: 160px" />
<span class="muted form-hint">0.001=千1(仅卖出)</span>
</el-form-item>
<el-form-item label="最低佣金">
<el-input v-model="form.min_commission" style="width: 160px" />
<span class="muted form-hint">/</span>
</el-form-item>
<el-form-item label="滑点(比率)">
<el-input v-model="form.slippage" style="width: 160px" />
<span class="muted form-hint">0.001=万10,0=不加</span>
</el-form-item>
</el-form>
<div class="submit-bar">
<el-button type="primary" size="large" @click="onSubmit">开始回测</el-button>