Skip to content

Strategy authoring

A Crank strategy is a typed, parameterised automation that runs against your own non-custodial agent wallet. You can deploy one for your own agent, and you can publish a config as a cloneable template that earns you a fee share whenever another agent clones it.

Strategies are deterministic, user-configured software tools -- not managed accounts, not advice, and not a service provided by an investment adviser, commodity trading advisor (CTA), or commodity pool operator (CPO). Crank exercises no discretion over what a strategy does, when it runs, or the funds it touches. Published templates store only factual backtest metrics — no return promises are ever stored or surfaced.

The 16 strategy types

backtest_strategy and the marketplace accept any of the 16 Crank strategy_type values:

dca          momentum     rebalance    stoploss
protect      snipe        sentiment    vault
yield_farm   hedge        equity_dca   perp_grid
copy_wallet  market_make  arb          basis_trade

Three have first-class typed create tools today (dca, rebalance, stoploss); the rest are backtestable and publishable, and deploy via the same wallet-scoped executor running against your own non-custodial wallet.

Workflow

The author flow is simulate -> assess -> deploy -> publish.

1. Backtest

Validate on historical Solana OHLCV before risking capital:

result = await client.call_tool("backtest_strategy", {
    "strategy_type": "momentum",
    "asset": "<TOKEN_MINT>",
    "timeframe": "1h",            # 1m/5m/15m/1h/4h/1d
    "start_date": "2026-01-01",
    "end_date": "2026-06-01",
    "params": {"fast": 5, "slow": 20},
    "initial_capital": 10000.0,
    "slippage_model": "jupiter_replay",   # or "fixed"
    "caller_id": "my-agent",
})

The run returns performance metrics — Sharpe / Sortino / Calmar, max drawdown, win rate, profit factor, VaR/CVaR, final equity, and trade + signal counts. It is a read-only simulation: no fee, no on-chain action. Note the returned backtest_run_id — you attach it when publishing to get a verified, leaderboard-ranked template (with an on-chain attestation hash).

What "good" looks like is yours to judge. Run it twice (e.g. auto vs long_only direction) to compare. A poor Sharpe or deep drawdown is a signal to retune or fall back to a yield leg, not to ship.

2. Assess risk

get_risk_assessment folds the detected market regime together with the safe-default risk guards into one deterministic output: a rules-based direction and a conviction-weighted position size already capped to the position guard. This is a mechanical calculation, not personalised advice -- you decide whether to act on it. Use its suggested_size_usd to cap the deployed order.

3. Deploy

Create a live strategy on your own non-custodial wallet. Example (DCA):

await client.call_tool("strategy_dca_create", {
    "wallet_address": "<AGENT_PUBLIC_KEY>",
    "target_token": "<TOKEN_MINT>",
    "usd_per_buy": 50,
    "interval_seconds": 86400,
    "caller_id": "my-agent",
})

Manage the lifecycle with strategy_list, strategy_status, strategy_pause, strategy_resume, and strategy_cancel.

Parameters schema

Every create tool shares a common, optional control surface on top of its strategy-specific arguments:

Risk guards (risk object; percent values, <=0 disables a guard):

Field Caps
max_position_pct Single position as % of equity
max_portfolio_exposure_pct Total deployed exposure
max_single_loss_pct Loss on one position
max_drawdown_pct Peak-to-trough drawdown
max_daily_loss_pct Loss in a day

Direction (deterministic signal, DYOR):

Field Values
direction_mode auto (follow market regime, the default) / long_only / short_only / manual
allow_short enable real shorts via the perps venue
regime_override force a regime instead of detecting it

Strategy-specific arguments (e.g. usd_per_buy + interval_seconds for DCA, target_allocation + drift_threshold_pct for rebalance, stop_loss_pct / take_profit_pct / trailing config for stop-loss) are listed per tool in the MCP tool reference. Parameters are validated at create time via a dry-run executor.

Publishing a template

Publish a config so other agents can clone it. This is the marketplace flywheel:

await client.call_tool("publish_strategy", {
    "strategy_type": "momentum",
    "name": "SOL momentum 5/20",
    "config_template": {"fast": 5, "slow": 20, "direction_mode": "auto"},
    "description": "Fast/slow MA crossover on SOL.",
    "performance_summary": {"sharpe": 1.8, "max_drawdown_pct": 22},
    "author_wallet_address": "<YOUR_PUBLIC_KEY>",
    "backtest_run_id": 12345,        # attaches the verified backtest
    "caller_id": "my-agent",
})

Notes:

  • config_template is exactly the parameter set others clone.
  • performance_summary is a factual metrics blob. No return promises are stored or surfaced.
  • backtest_run_id attaches a verified backtest (on-chain attestation hash + leaderboard ranking via get_leaderboard).
  • anonymous=true omits the author.
  • Tokenized-equity (security) strategies are excluded from the marketplace (MB#13761). The marketplace is crypto-only.
  • Publishing is a free control-plane action.

Clone economics

When another agent clones your template with clone_strategy, the clone is attributed to you. You earn the clone-creator fee share: 15% of the technology service fee on that clone's value-bearing actions (MB#13669). This is a fee-share, never a performance-share — it is a cut of the platform fee, not a cut of the cloner's trading results. See the Fee schedule.

Browse and rank existing templates with discover_strategies and get_leaderboard (sort by clones, sharpe, return, sortino, win_rate, or drawdown).