74 lines
2.9 KiB
Markdown
74 lines
2.9 KiB
Markdown
# JoinQuant hosted backtest evidence — 2026-07-26
|
|
|
|
This is a real hosted-runtime smoke record, not a cross-engine acceptance
|
|
report and not an investment-performance claim.
|
|
|
|
## Run identity
|
|
|
|
- Strategy: `quant_os_portable_momentum_v1`
|
|
- Hosted record:
|
|
[JoinQuant backtest detail](https://www.joinquant.com/algorithm/backtest/detail?backtestId=62de09f1e0f9e81b260a18e0ee59e953)
|
|
- Period: 2024-01-02 through 2024-12-31
|
|
- Initial capital: CNY 1,000,000
|
|
- Frequency/runtime: daily, Python 3
|
|
- Benchmark: CSI 500 (`000905.XSHG`)
|
|
- Uploaded bundle:
|
|
`dist/joinquant_strategy.py`
|
|
- Uploaded bundle SHA-256:
|
|
`22ddb0546beb3bd4e4bbedecb271452111324c3903e45be1f4ac3d39f38cce4f`
|
|
- Portable core SHA-256:
|
|
`af29e4e5e10705cf6aff89874394c1e80d3780f093c19d90ed53ef9d0188a934`
|
|
|
|
## Hosted result
|
|
|
|
| Metric | Hosted value |
|
|
| --- | ---: |
|
|
| Strategy return | -19.98% |
|
|
| Annualized return | -20.56% |
|
|
| Excess return | -24.12% |
|
|
| Benchmark return | 5.46% |
|
|
| Alpha | -0.259 |
|
|
| Beta | 0.830 |
|
|
| Sharpe | -0.806 |
|
|
| Win rate | 0.474 |
|
|
| Profit/loss ratio | 0.816 |
|
|
| Maximum drawdown | 32.45% |
|
|
|
|
The visible completed-run log contained zero `ERROR`, `Traceback`, or
|
|
`订单委托失败` entries. These performance numbers are negative and are recorded
|
|
only to prove that the hosted execution path completed; they provide no
|
|
investment-value evidence.
|
|
|
|
## Defects found by the hosted runtime
|
|
|
|
The real platform run found three issues that fake wiring alone did not expose:
|
|
|
|
1. JoinQuant's hosted namespace shadowed Python's global `sum`. The portable
|
|
core now uses its own deterministic numeric reducer.
|
|
2. STAR Market market orders require worst-price protection. The wrapper now
|
|
submits a documented `LimitOrderStyle`: daily upper limit for buys and daily
|
|
lower limit for sells, and fails closed when that price is absent or invalid.
|
|
3. STAR Market auction orders require at least 200 shares, except a complete
|
|
sale of the remaining sub-200 balance. The rule now lives in the shared
|
|
portable core and local simulator, so JoinQuant and QMT receive the same
|
|
legal target/order delta.
|
|
|
|
The order API and limit-style contract are documented in the
|
|
[official JoinQuant API PDF](https://cdn.joinquant.com/help/img/JoinQuantAPI.pdf).
|
|
The 200-share minimum and remaining-balance exception are described by the
|
|
[Shanghai Stock Exchange](https://edu.sse.com.cn/tib/).
|
|
|
|
## Evidence boundary
|
|
|
|
This record proves that one real JoinQuant daily backtest completed with the
|
|
uploaded wrapper. It does **not** pass G9 because the following evidence is
|
|
still missing:
|
|
|
|
- a complete hosted export containing input close arrays or hashes, the
|
|
portable plan, orders and fills;
|
|
- a local canonical run over the exact same frozen inputs;
|
|
- layer-by-layer L1—L4 comparison with enumerated difference reasons;
|
|
- a real QMT peer run and at least 20 trading days of broker shadow evidence.
|
|
|
|
Accordingly, `gate_scorecard.json` remains `NOT_BASELINE_60`.
|