算法打包教程(strategy-sdk)

生成共享库 .so 与 strategy_manifest.yaml,并打包成 ZIP 供平台导入

必备产物

ZIP 根目录需包含以下两个文件

strategy_manifest.yaml
策略清单,描述元信息与参数
libstrategy.so
由 strategy-sdk 产出的共享库,可被 runner 加载
strategy.zip
├── strategy_manifest.yaml
└── libstrategy.so

strategy_manifest.yaml 模板

library 字段与 ZIP 中 .so 文件名需一致

name: script
abi_version: 1
library: libstrategy.so
parameters:
  - name: atr_length
    type: int
    default: 14
    alias_to_runtime: atr_period
  - name: start
    type: float
    default: 0.02
    alias_to_runtime: psar_start
builtins:
  - name: rsi_period
    type: int
    default: 14
- name: 策略名称(前端默认显示)
- abi_version: 与 runner/SDK 约定的 ABI 版本(整数)
- library: .so 文件名(需与实际文件一致)
- parameters / builtins: 可配置参数,导入后会合并展示

生成共享库 .so

Strategy SDK

选择任意支持 C ABI 的语言编译为 .so

C/C++(示例)
# 单文件
gcc -O3 -fPIC -shared -o libstrategy.so strategy.c

# 多文件
gcc -O3 -fPIC -c strategy.c -o strategy.o
gcc -shared -o libstrategy.so strategy.o other.o
Go(c-shared)
GOOS=linux GOARCH=amd64 go build -buildmode=c-shared -o libstrategy.so .
注意:启用 -fPIC;目标架构需与 Runner 一致(如 x86_64 Linux);避免运行时缺失依赖。

ABI 接口规范(建议)

若你的 SDK 已有既定 ABI,请以实际为准

int strategy_abi_version(void);
int strategy_create(void** handle);
int strategy_destroy(void* handle);
int strategy_configure(void* handle, const char* params_json);

typedef struct {
  const char* ts; // RFC3339
  double open, high, low, close, volume;
} strategy_bar_t;

typedef struct {
  int action;      // 0=none,1=long_entry,2=long_exit,3=short_entry,4=short_exit
  double qty;      // optional
  double price;    // optional
  const char* note;// optional
} strategy_signal_t;

int strategy_on_bars(void* handle, const strategy_bar_t* bars, int n, strategy_signal_t* out_signal);
int strategy_on_bar(void* handle, const strategy_bar_t* bar, strategy_signal_t* out_signal);
int strategy_reset(void* handle);
- strategy_abi_version 应与 manifest.abi_version 一致或兼容。
- strategy_configure 入参 JSON 为前端合并的 parameters + builtins。
- 返回值:0 成功;负数为错误码(如 -1/-2)。

打包与上传

zip strategy.zip strategy_manifest.yaml libstrategy.so
- 上传后端将保存 .so 至本地目录(默认 ./data/algorithms,支持 ALGO_STORAGE_DIR),并计算 sha256 与大小。
- 前端保存策略时会一并提交 so_object/checksum/so_size/abi_version。