MarketWorld 外部策略离线回测包使用说明
适用于 marketworld_external_backtest_offline_kit.zip。这个包用于外部用户在自己的电脑或服务器上完成离线回测,并生成可提交给 MarketWorld 的证明包。
1. 这个包是什么
MarketWorld 不替外部用户消耗平台算力跑回测。
正式提交必须使用 MarketWorld 发布的数据包、manifest 和成本模型。
本地生成评分、交易流水、权益曲线、manifest 和 hash。
评分达标只代表允许提交,后续仍有重复、相似和私有复核。
2. 外部用户能做什么
- 下载公开官方历史数据包。
- 编写自己的 Python 策略。
- 在本地运行回测。
- 查看收益、回撤、Sharpe 和交易流水。
- 评分达标后提交证明包。
- 使用内部数据源。
- 访问内部模拟盘或实时控制台。
- 篡改官方数据包后提交。
- 跳过公开评分和后续复核。
3. 启动离线系统
解压外部包后,在包目录运行:
Windows
python .\scripts\offline_backtest_workbench.py --open
macOS / Linux
python3 scripts/offline_backtest_workbench.py --open
默认打开 http://127.0.0.1:8898。所有回测计算都在用户本机完成。
4. 下载公开数据包
- 打开本地离线回测工作台。
- 读取 MarketWorld 公开数据目录。
- 选择需要的数据包。
- 下载并校验
manifest与 SHA256。 - 校验通过后,数据包会出现在本地数据包列表。
跨交易所或多标的策略必须使用 MarketWorld 正式发布的组合数据包,不能自行拼接不同数据包冒充官方结果。
5. 策略工程格式
策略可以是一个普通 Python 工程,入口文件所在目录会整体参与源码 hash。
my_strategy/ strategy.py features.py risk.py config.json model.pkl
回测时只需要指定入口文件:
my_strategy/strategy.py
6. 策略入口与生命周期
推荐使用类式生命周期入口。策略通过 StrategyBase 下单,回测引擎负责委托撮合、成交、持仓和权益计算。
from marketworld_sdk import StrategyBase
class Strategy(StrategyBase):
def on_init(self):
self.log("initialized")
def on_start(self):
self.log("started")
def on_bar(self, snapshot):
markets = snapshot.get("markets") or {}
if not markets:
return
instrument_id = next(iter(markets))
if not self.get_position(instrument_id):
self.buy(instrument_id, notional=100000, reason="example_entry")
def on_order(self, order):
pass
def on_trade(self, trade):
pass
def on_stop(self):
self.log("stopped")
生命周期顺序为 on_init()、on_start()、on_bar()、on_order()、on_trade()、on_stop()。下单接口包括 buy、sell、short、cover,支持 market、limit、stop 委托。
旧版 generate_signals(snapshot) 仍然兼容。
def generate_signals(snapshot):
rows = snapshot.get("rows") or []
if not rows:
return []
row = rows[0]
close = float(row.get("close", 0) or 0)
open_price = float(row.get("open", close) or close)
if close > open_price:
return [{
"symbol": row.get("symbol"),
"side": "buy",
"quantity": 1,
"reason": "close_above_open",
}]
return []
7. SDK 方式
from pathlib import Path
from marketworld_sdk import MarketWorldClient
client = MarketWorldClient(local_agent="http://127.0.0.1:8898")
result = client.run_backtest(
dataset_id="mw_kraken_spot_okx_perp_btc_daily_v1",
strategy_entrypoint=Path("my_strategy/strategy.py"),
strategy_id="my_external_strategy_v1",
author="your_name",
pair_notional=300000,
cost_components="commission_bps",
)
print(result["score"])
print(result["package_path"])
8. 回测结果看板
本地工作台会展示扣成本收益、Sharpe、MaxDD、Profit Factor、交易回合、成交笔数、最终权益、活跃天数、权益曲线、回撤曲线和最近交易流水。
9. 评分和提交
总分至少 70,并且风险硬门槛与最后留出分片必须同时通过。最低要求为:扣成本收益 25 bps、Profit Factor 1.20、Sharpe 0.50、最大回撤 15%;至少 3 个时间分片、至少三分之二达标,最后一个留出分片必须通过。
Sharpe 使用每日最后权益的对数收益;加密资产按 365 天、其他市场按 252 天年化。
- 评分和全部硬门槛达标后生成
strategy_package_ready_to_submit.json。 - 先执行预检提交。
- 预检通过后再正式提交。
- 等待 MarketWorld 后续复核。
未修改的内置示例、平台参考信号调试结果、重复策略、同策略族相似策略或私有复核不通过的策略仍会被拒绝。
10. 推荐流程
下载外部离线包 -> 启动本地工作台 -> 下载公开官方数据包 -> 编写本地策略工程 -> 本地运行回测 -> 查看回测结果看板 -> 评分达到 70 分 -> 预检提交 -> 正式提交 -> 等待 MarketWorld 复核