wasm_plugin_sdk 参考
Rust WASM 扩展使用 C-ABI 导出,仅支持 i32 参数与返回值。价格与百分比需定点编码(×10000)。
定点编码规则
rust
encoded = (value × 10000) as i32
decoded = encoded as f64 / 10000.0
示例:价格 152.35 → 1_523_500,百分比 2% → 20_000,RSI 50.5 → 505_000。
生命周期函数
| 函数 | 说明 |
|---|---|
plugin_activate(ctx: i32) -> i32 | 插件激活,由 export_plugin! 宏生成 |
plugin_deactivate(ctx: i32) -> i32 | 插件停用 |
元数据函数
| 函数 | 说明 | 示例 |
|---|---|---|
get_version() -> i32 | 版本号 major×10000+minor×100+patch | 100 = v0.1.0 |
get_indicator_count() -> i32 | 支持的指标数量 | 11 |
技术指标函数
参数与返回值均为定点编码(×10000),除非注明为整数。
| 函数 | 参数 | 返回 |
|---|---|---|
| calculate_sma | sum×10000, period(整数) | SMA×10000 |
| calculate_ema_multiplier | period(整数) | 乘数×10000 |
| calculate_ema_step | price×10000, prev_ema×10000, multiplier×10000 | 新EMA×10000 |
| calculate_rsi | avg_gain×10000, avg_loss×10000 | RSI×10000 (0–1000000) |
| calculate_macd_signal | macd×10000, prev_signal×10000, period(整数) | 信号线×10000 |
| calculate_bollinger_width | std_dev×10000, num_std×10000 | 带宽×10000 |
| calculate_std_dev | sum_sq_dev×10000, count(整数) | 标准差×10000 |
| calculate_atr | prev_atr×10000, true_range×10000, period(整数) | ATR×10000 |
| calculate_true_range | high×10000, low×10000, prev_close×10000 | TR×10000 |
| fibonacci_level | high×10000, low×10000, level_index(0–4) | 回撤价格×10000 |
Fibonacci 索引:0=23.6%, 1=38.2%, 2=50%, 3=61.8%, 4=78.6%
风险管理函数
| 函数 | 参数 | 返回 |
|---|---|---|
| calculate_position_size | balance×10000, risk%×10000, entry×10000, stop×10000 | 仓位数量×10000 |
| calculate_risk_reward | entry×10000, stop×10000, take_profit×10000 | 比率×10000 |
| calculate_max_drawdown | peak×10000, trough×10000 | 回撤%×10000 |
| calculate_pnl | entry×10000, exit×10000, quantity×10000, is_long(0/1) | 盈亏×10000 |
宿主调用示例
dart
// 计算 SMA(3) for [100, 102, 104]
// sum = 306 × 10000 = 3_060_000
final sma = await wasmLoader.callPluginFunction(
'com.tradingai.ta_calculator', 'calculate_sma', [3060000, 3]
);
// sma = 1_020_000 → 102.00
参考
extensions/ta_calculator_plugin:完整实现;packages/wasm_plugin_sdk:SDK 源码。