Rank
70
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
Traction
No public download signal
Freshness
Updated 2d ago
Xpersona Agent
Agent Setup Guide — go-trader Agent Setup Guide — go-trader **Repository:** https://github.com/richkuo/go-trader.git This is a self-contained setup guide for AI agents. Give this file to any AI coding agent and it will handle the full installation — cloning the repo, installing dependencies, configuring Discord/strategies/risk, building, and starting the service. **For OpenClaw agents:** This is the skill entry point. Read it when a user says "se
git clone https://github.com/richkuo/go-trader.gitOverall rank
#37
Adoption
30 GitHub stars
Trust
Unknown
Freshness
Feb 23, 2026
Freshness
Last checked Feb 23, 2026
Best For
Contract is available with explicit auth and schema references.
Not Ideal For
go-trader is not ideal for teams that need stronger public trust telemetry, lower setup complexity, or more explicit contract coverage before production rollout.
Evidence Sources Checked
editorial-content, capability-contract, runtime-metrics, public facts pack
Key links, install path, reliability highlights, and the shortest practical read before diving into the crawl record.
Overview
Agent Setup Guide — go-trader Agent Setup Guide — go-trader **Repository:** https://github.com/richkuo/go-trader.git This is a self-contained setup guide for AI agents. Give this file to any AI coding agent and it will handle the full installation — cloning the repo, installing dependencies, configuring Discord/strategies/risk, building, and starting the service. **For OpenClaw agents:** This is the skill entry point. Read it when a user says "se Published capability contract available. No trust telemetry is available yet. 30 GitHub stars reported by the source. Last updated 4/15/2026.
Trust score
Unknown
Compatibility
OpenClaw
Freshness
Feb 23, 2026
Vendor
Richkuo
Artifacts
0
Benchmarks
0
Last release
Unpublished
Install & run
git clone https://github.com/richkuo/go-trader.gitSetup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Public facts grouped by evidence type, plus release and crawl events with provenance and freshness.
Public facts
Vendor
Richkuo
Protocol compatibility
OpenClaw
Auth modes
api_key
Machine-readable schemas
OpenAPI or schema references published
Adoption signal
30 GitHub stars
Handshake status
UNKNOWN
Crawlable docs
6 indexed pages on the official domain
Parameters, dependencies, examples, extracted files, editorial overview, and the complete README when available.
Captured outputs
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
Parameters
bash
python3 --version
bash
uv --version 2>/dev/null || echo "NOT_INSTALLED"
bash
curl -LsSf https://astral.sh/uv/install.sh | sh
bash
curl -LsSf https://astral.sh/uv/install.sh | sh
bash
go version 2>/dev/null || /usr/local/go/bin/go version 2>/dev/null || echo "NOT_INSTALLED"
bash
curl -sL https://go.dev/dl/go1.23.6.linux-amd64.tar.gz | tar -C /usr/local -xzf -
Editorial read
Docs source
GITHUB OPENCLEW
Editorial quality
ready
Agent Setup Guide — go-trader Agent Setup Guide — go-trader **Repository:** https://github.com/richkuo/go-trader.git This is a self-contained setup guide for AI agents. Give this file to any AI coding agent and it will handle the full installation — cloning the repo, installing dependencies, configuring Discord/strategies/risk, building, and starting the service. **For OpenClaw agents:** This is the skill entry point. Read it when a user says "se
Repository: https://github.com/richkuo/go-trader.git
This is a self-contained setup guide for AI agents. Give this file to any AI coding agent and it will handle the full installation — cloning the repo, installing dependencies, configuring Discord/strategies/risk, building, and starting the service.
For OpenClaw agents: This is the skill entry point. Read it when a user says "set up go-trader", "install go trading bot", or "configure go-trader".
Check each prerequisite. Install anything missing (ask user before installing).
python3 --version
If missing or < 3.12, ask:
Python 3.12+ is required. Want me to install it?
uv --version 2>/dev/null || echo "NOT_INSTALLED"
If missing, install:
curl -LsSf https://astral.sh/uv/install.sh | sh
go version 2>/dev/null || /usr/local/go/bin/go version 2>/dev/null || echo "NOT_INSTALLED"
If missing, ask:
Go 1.23+ is required to build the scheduler. Want me to install it?
Install with:
curl -sL https://go.dev/dl/go1.23.6.linux-amd64.tar.gz | tar -C /usr/local -xzf -
Note: Go may not be in PATH. Use /usr/local/go/bin/go if go doesn't resolve.
git --version
Check if already installed:
test -d go-trader/scheduler && echo "EXISTS" || echo "FRESH"
If EXISTS, ask:
go-trader is already installed. Do you want to:
- Reconfigure (keep code, redo setup)
- Update (pull latest + rebuild)
- Fresh install (delete and start over)
If FRESH, clone from GitHub:
git clone https://github.com/richkuo/go-trader.git
cd go-trader
If the clone fails (private repo or auth issue), ask:
I couldn't clone the repository. Do you have a GitHub token or SSH key configured? You can also download it manually: https://github.com/richkuo/go-trader
cd go-trader
uv sync
Verify: .venv/bin/python3 should exist after this.
No user input needed for this step.
Ask:
Do you want Discord trade alerts? The bot will post summaries and trade notifications to Discord channels.
(yes / no)
Set discord.enabled = false in config. Skip to Step 5.
Ask:
I need your Discord bot token. This is used to post trade alerts.
Where to find it: Discord Developer Portal → your application → Bot → Token
Security: I'll store this as a systemd environment variable, not in config files.
Paste your bot token:
Store the token for use in Step 8 (systemd service). Do NOT write it to config.json.
Ask:
Which Discord channel should receive spot trading alerts?
This channel will get:
- Hourly summaries showing PnL for each spot strategy (BTC/ETH/SOL)
- Immediate notifications when a spot trade executes
I need the channel ID — right-click the channel → "Copy Channel ID" (Enable Developer Mode in Discord Settings → Advanced if you don't see this option)
Spot channel ID:
Ask:
Which Discord channel should receive options trading alerts?
This channel will get:
- Per-check summaries split by exchange (Deribit + IBKR)
- Individual strategy PnL with recent trade history
- Immediate trade notifications
This can be the same channel as spot, or a different one.
Options channel ID:
Ask:
What's the Discord server (guild) ID where these channels are?
Right-click the server icon → "Copy Server ID"
Server ID:
Store this for OpenClaw allowlist configuration in Step 7.
Ask:
How often should spot summaries post to Discord?
- Hourly (recommended) — one summary per hour, trades posted immediately
- Per check — summary every 5 minutes (can be noisy)
Options summaries always post per check (every 20 minutes).
Your preference: (1 or 2, default: 1)
Map response:
"hourly""per_check"Ask:
Do you want to run in paper trading mode (simulated) or live trading?
Paper mode (recommended): No real money. Simulates trades with virtual capital. Good for testing strategies before going live.
Live mode: Requires exchange API keys. Real trades with real money.
(paper / live, default: paper)
If live, prompt for exchange API keys:
Binance API key: Binance API secret:
Store these for the systemd environment in Step 8.
Ask:
How much starting capital per strategy (in USD)?
Default is $1,000 per strategy. With 30 strategies, that's $30,000 total paper capital.
You can change individual strategy amounts later in the config.
Capital per strategy: (default: 1000)
Ask:
What's your maximum drawdown tolerance? When a strategy's losses exceed this percentage, a circuit breaker pauses trading for 24 hours.
- Spot strategies default: 60%
- Options strategies default: 40% (measured from peak value)
Do you want to customize these, or use the defaults?
- Use defaults (recommended)
- Set custom values
(1 or 2, default: 1)
If 2:
Max drawdown for spot strategies (%, default: 60): Max drawdown for options strategies (%, default: 20):
Ask:
go-trader comes with 30 strategies across three groups:
Spot (14 strategies) — BTC, ETH, SOL on Binance momentum, RSI, MACD, volume-weighted, pairs spread
Deribit Options (8 strategies) — BTC, ETH options vol mean reversion, momentum, puts, calls, wheel, butterfly
IBKR/CME Options (8 strategies) — BTC, ETH options (CME Micro) Same 6 strategies as Deribit, for head-to-head comparison
Do you want to:
- Run all 30 (recommended for paper trading)
- Choose by group (enable/disable spot, Deribit, IBKR)
- Pick individual strategies
(1, 2, or 3, default: 1)
Use the full default strategy set. Skip to Step 6b.
Ask for each group:
Enable spot strategies (momentum, RSI, MACD, volume-weighted, pairs on BTC/ETH/SOL)? (yes/no, default: yes) Enable Deribit options (vol MR, momentum, puts, calls, wheel, butterfly on BTC/ETH)? (yes/no, default: yes) Enable IBKR/CME options (same strategies as Deribit, CME Micro contracts)? (yes/no, default: yes)
Present each strategy and ask yes/no. Group them for readability:
Spot Strategies (5-minute checks):
| # | Strategy | Assets | Description | Enable? | |---|----------|--------|-------------|---------| | 1 | momentum | BTC, ETH, SOL | Rate of change breakouts | (y/n) | | 2 | rsi | BTC, ETH, SOL | Buy oversold, sell overbought | (y/n) | | 3 | macd | BTC, ETH | MACD/signal crossovers | (y/n) | | 4 | volume_weighted | BTC, ETH, SOL | Trend + volume confirmation | (y/n) | | 5 | pairs_spread | BTC/ETH, BTC/SOL, ETH/SOL | Spread z-score stat arb | (y/n) |
Which spot strategies do you want? (e.g., "1,2,4" or "all" or "none")
Then repeat for options:
Deribit Options (20-minute checks, BTC + ETH each):
| # | Strategy | Description | Enable? | |---|----------|-------------|---------| | 1 | vol_mean_reversion | High IV → sell strangles, Low IV → buy straddles | (y/n) | | 2 | momentum_options | ROC breakout → directional options | (y/n) | | 3 | protective_puts | Buy 12% OTM puts, 45 DTE | (y/n) | | 4 | covered_calls | Sell 12% OTM calls, 21 DTE | (y/n) | | 5 | wheel | Sell 6% OTM puts, 37 DTE | (y/n) | | 6 | butterfly | ±5% wing butterfly spread, 30 DTE | (y/n) |
Which Deribit strategies? (e.g., "1,3,6" or "all" or "none")
IBKR/CME Options — Same strategies as Deribit but using CME Micro contracts:
Run the same selection as Deribit, or choose differently?
- Same as Deribit
- Choose individually
- None
(1, 2, or 3)
Only ask if any options strategies were enabled:
Ask:
Theta harvesting lets the bot close sold options early instead of holding to expiry:
- Profit target: Close when X% of premium captured (e.g., 60%)
- Stop loss: Close if loss exceeds X% of premium (e.g., 200% = 2× premium)
- Min DTE: Force-close when fewer than N days to expiry (avoid gamma risk)
Do you want to configure theta harvesting?
- Enable with defaults (60% profit, 200% stop, 3 days min DTE) — recommended
- Custom values
- Disable (options ride to expiry or circuit breaker)
(1, 2, or 3, default: 1)
If 2:
Profit target (% of premium to capture before closing, default: 60): Stop loss (% of premium loss before closing, default: 200): Minimum DTE to force-close (days, default: 3):
Using all gathered inputs, generate scheduler/config.json.
Start from scheduler/config.example.json as a template. For each enabled strategy, add an entry with:
id: Use the naming convention {strategy}-{asset} for spot, deribit-{strategy}-{asset} or ibkr-{strategy}-{asset} for optionstype: "spot" or "options"script: "scripts/check_strategy.py" (spot), "scripts/check_options.py" (Deribit), "scripts/check_options_ibkr.py" (IBKR)args: Strategy-specific arguments (see config.example.json for format)capital: User's chosen amountmax_drawdown_pct: User's chosen value (spot default: 60, options default: 40)interval_seconds: 300 for spot, 1200 for optionstheta_harvest: If enabled, include the config blockDiscord config:
discord.enabled: true/false based on Step 4discord.token: Always "" (token comes from env var)discord.channels.spot: Channel ID from Step 4bdiscord.channels.options: Channel ID from Step 4cdiscord.spot_summary_freq: From Step 4ediscord.options_summary_freq: "per_check"If the agent is running inside OpenClaw and Discord was configured, add the channels to OpenClaw's guild allowlist so the bot can post:
# Using OpenClaw gateway config.patch:
# channels.discord.guilds.<GUILD_ID>.channels.<SPOT_CHANNEL>.requireMention = false
# channels.discord.guilds.<GUILD_ID>.channels.<OPTIONS_CHANNEL>.requireMention = false
Or via CLI:
openclaw config set "channels.discord.guilds.${GUILD_ID}.channels.${SPOT_CHANNEL}.requireMention" false
openclaw config set "channels.discord.guilds.${GUILD_ID}.channels.${OPTIONS_CHANNEL}.requireMention" false
Show the user a summary before proceeding:
Here's your configuration:
Mode: Paper trading Strategies: {N} total ({spot_count} spot, {deribit_count} Deribit, {ibkr_count} IBKR) Capital: ${amount} per strategy (${total} total) Risk: {spot_drawdown}% max drawdown (spot), {options_drawdown}% (options) Theta harvesting: {enabled/disabled} {details if enabled} Discord: {enabled/disabled} 📈 Spot alerts → #{channel_name} ({freq}) 🎯 Options alerts → #{channel_name} (per check)
Proceed? (yes / no)
If no, ask which part they want to change and loop back to the relevant step.
cd scheduler
/usr/local/go/bin/go build -o ../go-trader .
cd ..
If go is in PATH, just use go build. Check both.
Verify: ./go-trader --help should print usage.
./go-trader --config scheduler/config.json --once
Check for errors. If Discord is configured, a summary should appear in the channels.
Create or update the service file. Include the Discord token and any exchange API keys as environment variables:
[Unit]
Description=Go Trading Scheduler
After=network.target
[Service]
Type=simple
WorkingDirectory={PROJECT_DIR}
ExecStart={PROJECT_DIR}/go-trader --config scheduler/config.json
Environment="DISCORD_BOT_TOKEN={token}"
Restart=always
RestartSec=10
StandardOutput=append:{PROJECT_DIR}/logs/scheduler.log
StandardError=append:{PROJECT_DIR}/logs/scheduler.log
[Install]
WantedBy=multi-user.target
If live trading, also add:
Environment="BINANCE_API_KEY={key}"
Environment="BINANCE_API_SECRET={secret}"
mkdir -p logs
sudo cp go-trader.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable go-trader
sudo systemctl start go-trader
Ask the user which update method they prefer:
Add a cron entry to pull once a day (e.g. at 03:00). Only rebuilds and restarts if there are actual changes:
crontab -e
# Add this line:
0 3 * * * cd /root/.openclaw/workspace/go-trader && git pull --ff-only | grep -q 'Already up to date' || (cd scheduler && /usr/local/go/bin/go build -o ../go-trader . && systemctl restart go-trader) >> /var/log/go-trader-autoupdate.log 2>&1
Logs to
/var/log/go-trader-autoupdate.log. Rebuild and restart only trigger when upstream has changes.
Add a git_pull_interval_cycles field to scheduler/config.json (e.g., 12 = every ~1 hour at 5-min cycles), then add a runGitPull() call in the scheduler's main loop that fires every N cycles.
Note: Same caveat — Go source changes still need a rebuild + restart to take effect even with this enabled. This option is best for Python/config-only workflows.
No configuration needed. Pull whenever you push changes:
cd /path/to/go-trader && git pull --ff-only
sudo systemctl restart go-trader # only needed for Go source or config changes
After adding the cron or heartbeat, verify it works:
# Cron: check the log after the scheduled time
tail /tmp/go-trader-pull.log
# Heartbeat: check scheduler logs after N cycles
journalctl -u go-trader -f | grep -i "git pull"
systemctl is-active go-trader
Expected: active
curl -s localhost:8099/status | python3 -c "
import json, sys
d = json.load(sys.stdin)
print(f'Cycle: {d[\"cycle_count\"]}')
print(f'Strategies: {len(d[\"strategies\"])}')
for sym, price in d.get('prices', {}).items():
print(f' {sym}: \${price:,.2f}')
"
If Discord is enabled, wait for the first cycle to complete (~5 minutes) and verify messages appear in the configured channels.
✅ go-trader is running!
Mode: {paper/live} Strategies: {N} active Status:
curl localhost:8099/statusLogs:journalctl -u go-trader -fSpot strategies check every 5 minutes (summaries {freq}). Options strategies check every 20 minutes (summaries per check). Trades post immediately to Discord.
Useful commands:
- Stop:
sudo systemctl stop go-trader- Restart:
sudo systemctl restart go-trader- Status:
curl -s localhost:8099/status | python3 -m json.tool- Reset positions:
cp scheduler/state.example.json scheduler/state.json && sudo systemctl restart go-trader
Run historical simulations using scripts in backtest/. All require .venv/bin/python3 since dependencies (ccxt, pandas, numpy) are installed in the venv.
backtest/run_backtest.py)Requires PYTHONPATH=core:strategies to resolve imports.
# Single strategy run
PYTHONPATH=core:strategies .venv/bin/python3 backtest/run_backtest.py \
--strategy <name> --symbol BTC/USDT --timeframe 1h --mode single
# Compare two strategies
PYTHONPATH=core:strategies .venv/bin/python3 backtest/run_backtest.py \
--strategy <name> --symbol BTC/USDT --timeframe 1h --mode compare
# Multi-symbol sweep
PYTHONPATH=core:strategies .venv/bin/python3 backtest/run_backtest.py \
--strategy <name> --timeframe 1h --mode multi
# Parameter optimization
PYTHONPATH=core:strategies .venv/bin/python3 backtest/run_backtest.py \
--strategy <name> --symbol BTC/USDT --timeframe 1h --mode optimize
# Limit history (e.g. last 90 days)
PYTHONPATH=core:strategies .venv/bin/python3 backtest/run_backtest.py \
--strategy <name> --symbol BTC/USDT --timeframe 1h --since 90
Key flags: --strategy, --symbol, --timeframe, --mode (single/compare/multi/optimize), --since (days)
backtest/backtest_options.py)Self-contained (only imports ccxt).
.venv/bin/python3 backtest/backtest_options.py \
--underlying BTC --since 90 --capital 10000
# Verbose output
.venv/bin/python3 backtest/backtest_options.py \
--underlying BTC --since 90 --capital 10000 --verbose
Key flags: --underlying, --since (days), --capital, --verbose
backtest/backtest_theta.py)Self-contained.
.venv/bin/python3 backtest/backtest_theta.py \
--underlying BTC --since 90 --capital 10000
Key flags: --underlying, --since (days), --capital
These can be done after initial setup without re-running the full guide.
Edit scheduler/config.json → discord.channels, then restart:
sudo systemctl restart go-trader
If new channels, also add to OpenClaw allowlist.
sudo systemctl edit go-trader
# Add: Environment="DISCORD_BOT_TOKEN=new_token_here"
sudo systemctl restart go-trader
Edit scheduler/config.json → strategies array, then restart. Removed strategies are auto-pruned from state. New strategies initialize with fresh capital.
Edit max_drawdown_pct per strategy in config.json, then restart.
Add or remove the theta_harvest block from individual strategy entries in config.json, then restart.
Cron-based: Add or remove the cron entry (crontab -e). No restart needed.
Heartbeat-based: Set or remove git_pull_interval_cycles in config.json, then restart.
Add exchange API keys to systemd environment:
sudo systemctl edit go-trader
# [Service]
# Environment="BINANCE_API_KEY=..."
# Environment="BINANCE_API_SECRET=..."
sudo systemctl restart go-trader
/go-trader CommandWhen the user says /go-trader, "check bot status", "show strategy health", or "how are the bots doing", run this:
curl -s localhost:8099/status | python3 -c "
import json, sys
d = json.load(sys.stdin)
prices = d.get('prices', {})
strats = d.get('strategies', {})
print(f'=== GO-TRADER (Cycle {d[\"cycle_count\"]}) ===')
for sym, p in sorted(prices.items()):
print(f' {sym}: \${p:,.2f}')
total_val = sum(s['portfolio_value'] for s in strats.values())
total_cap = sum(s['initial_capital'] for s in strats.values())
total_pnl = total_val - total_cap
pct = (total_pnl/total_cap)*100 if total_cap else 0
print(f'\nPortfolio: \${total_cap:,.0f} → \${total_val:,.0f} ({total_pnl:+,.0f} / {pct:+.1f}%)')
print(f'Strategies: {len(strats)}')
# Circuit breakers
cb_active = [(id,s) for id,s in strats.items()
if s['risk_state'].get('circuit_breaker_until','').startswith('20')]
print(f'Circuit breakers active: {len(cb_active)}')
# Rank by PnL
ranked = sorted(strats.items(), key=lambda x: x[1]['pnl_pct'], reverse=True)
print(f'\nTop 5:')
for id, s in ranked[:5]:
print(f' {id}: {s[\"pnl_pct\"]:+.1f}% (\${s[\"pnl\"]:+,.0f}) | {s[\"trade_count\"]} trades')
print(f'\nBottom 5:')
for id, s in ranked[-5:]:
print(f' {id}: {s[\"pnl_pct\"]:+.1f}% (\${s[\"pnl\"]:+,.0f}) | {s[\"trade_count\"]} trades')
# Dead strategies
dead = [id for id,s in strats.items() if s['trade_count'] == 0]
if dead:
print(f'\nDead (0 trades): {len(dead)} — {dead}')
# Circuit breaker details
if cb_active:
print(f'\nCircuit breaker details:')
for id, s in cb_active:
rs = s['risk_state']
print(f' {id}: dd={rs[\"current_drawdown_pct\"]:.1f}% / max={rs[\"max_drawdown_pct\"]:.0f}% | until {rs[\"circuit_breaker_until\"][:19]}')
"
Present the output to the user in a readable format. Highlight any circuit breakers, dead strategies, or notable PnL changes.
All settings live in scheduler/config.json. After any change, restart the service:
sudo systemctl restart go-trader
Config changes are synced to state on startup — no need to reset positions.
| Setting | Key | Default | Description |
|---------|-----|---------|-------------|
| Check interval | interval_seconds | 300 (5 min) | Global default cycle interval in seconds |
| State file path | state_file | scheduler/state.json | Where positions and trade history are stored |
Each entry in the strategies array supports:
| Setting | Key | Default | Description |
|---------|-----|---------|-------------|
| Capital | capital | 1000 | Starting capital in USD for this strategy |
| Max drawdown | max_drawdown_pct | Spot: 60, Options: 40 | Circuit breaker triggers when drawdown from peak exceeds this %. Measured from the strategy's peak portfolio value, not initial capital. |
| Check interval | interval_seconds | Uses global | How often this strategy checks for signals (seconds). 0 = use global default. Spot typically 300 (5 min), options 1200 (20 min). |
| Theta harvest | theta_harvest.enabled | false | Enable early exit on sold options |
| Theta profit target | theta_harvest.profit_target_pct | 60 | Close sold option when this % of premium is captured |
| Theta stop loss | theta_harvest.stop_loss_pct | 200 | Close sold option if loss exceeds this % of premium (200 = 2× premium) |
| Theta min DTE | theta_harvest.min_dte_close | 3 | Force-close positions with fewer than N days to expiry |
| Setting | Key | Default | Description |
|---------|-----|---------|-------------|
| Enable Discord | discord.enabled | true | Turn Discord notifications on/off |
| Spot channel | discord.channels.spot | — | Channel ID for spot trading summaries |
| Options channel | discord.channels.options | — | Channel ID for options trading summaries |
| Spot frequency | discord.spot_summary_freq | "hourly" | How often spot summaries post: "hourly" or "per_check" |
| Options frequency | discord.options_summary_freq | "per_check" | How often options summaries post: "per_check" or "hourly" |
Set via systemd override (sudo systemctl edit go-trader):
| Variable | Description |
|----------|-------------|
| DISCORD_BOT_TOKEN | Discord bot token (never store in config.json) |
| STATUS_AUTH_TOKEN | Optional: require Bearer token for /status endpoint |
| BINANCE_API_KEY | Binance API key (live trading only) |
| BINANCE_API_SECRET | Binance API secret (live trading only) |
To change deribit-vol-btc to $2,000 capital with 50% max drawdown and theta harvesting:
{
"id": "deribit-vol-btc",
"type": "options",
"script": "scripts/check_options.py",
"args": ["vol_mean_reversion", "BTC"],
"capital": 2000,
"max_drawdown_pct": 50,
"interval_seconds": 1200,
"theta_harvest": {
"enabled": true,
"profit_target_pct": 60,
"stop_loss_pct": 200,
"min_dte_close": 3
}
}
Then restart: sudo systemctl restart go-trader
Note: Changing capital on an existing strategy does NOT reset its positions or cash. It only changes the initial_capital reference for PnL calculations. To fully reset a strategy, delete it from scheduler/state.json and restart.
Each spot strategy needs entries for each asset it supports:
{"id": "momentum-btc", "type": "spot", "script": "scripts/check_strategy.py", "args": ["momentum", "BTC/USDT", "1h"], "capital": 1000, "max_drawdown_pct": 60, "interval_seconds": 300}
{"id": "momentum-eth", "type": "spot", "script": "scripts/check_strategy.py", "args": ["momentum", "ETH/USDT", "1h"], "capital": 1000, "max_drawdown_pct": 60, "interval_seconds": 300}
{"id": "momentum-sol", "type": "spot", "script": "scripts/check_strategy.py", "args": ["momentum", "SOL/USDT", "1h"], "capital": 1000, "max_drawdown_pct": 60, "interval_seconds": 300}
Strategies and their assets:
momentum: BTC, ETH, SOLrsi: BTC, ETH, SOLmacd: BTC, ETHvolume_weighted: BTC, ETH, SOLpairs_spread: Requires two assets — args: ["pairs_spread", "BTC/USDT", "1d", "ETH/USDT"]Pairs strategy IDs and args:
{"id": "pairs-btc-eth", "args": ["pairs_spread", "BTC/USDT", "1d", "ETH/USDT"], "interval_seconds": 86400}
{"id": "pairs-btc-sol", "args": ["pairs_spread", "BTC/USDT", "1d", "SOL/USDT"], "interval_seconds": 86400}
{"id": "pairs-eth-sol", "args": ["pairs_spread", "ETH/USDT", "1d", "SOL/USDT"], "interval_seconds": 86400}
Each Deribit strategy runs on BTC and ETH:
{"id": "deribit-vol-btc", "type": "options", "script": "scripts/check_options.py", "args": ["vol_mean_reversion", "BTC"], "capital": 1000, "max_drawdown_pct": 40, "interval_seconds": 1200}
{"id": "deribit-vol-eth", "type": "options", "script": "scripts/check_options.py", "args": ["vol_mean_reversion", "ETH"], "capital": 1000, "max_drawdown_pct": 40, "interval_seconds": 1200}
Strategy arg names: vol_mean_reversion, momentum_options, protective_puts, covered_calls, wheel, butterfly
ID convention: deribit-{strategy_short}-{asset} where strategy_short is:
vol_mean_reversion → volmomentum_options → momentumprotective_puts → putscovered_calls → callswheel → wheelbutterfly → butterflySame as Deribit but with different script and ID prefix:
{"id": "ibkr-vol-btc", "type": "options", "script": "scripts/check_options_ibkr.py", "args": ["vol_mean_reversion", "BTC"], "capital": 1000, "max_drawdown_pct": 40, "interval_seconds": 1200}
ID convention: ibkr-{strategy_short}-{asset} (same short names as Deribit)
Machine endpoints, contract coverage, trust signals, runtime metrics, benchmarks, and guardrails for agent-to-agent use.
Machine interfaces
Contract coverage
Status
ready
Auth
api_key
Streaming
Yes
Data region
global
Protocol support
Requires: openclew, lang:typescript, streaming
Forbidden: none
Guardrails
Operational confidence: medium
curl -s "https://xpersona.co/api/v1/agents/richkuo-go-trader/snapshot"
curl -s "https://xpersona.co/api/v1/agents/richkuo-go-trader/contract"
curl -s "https://xpersona.co/api/v1/agents/richkuo-go-trader/trust"
Operational fit
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Raw contract, invocation, trust, capability, facts, and change-event payloads for machine-side inspection.
Contract JSON
{
"contractStatus": "ready",
"authModes": [
"api_key"
],
"requires": [
"openclew",
"lang:typescript",
"streaming"
],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": true,
"inputSchemaRef": "https://github.com/richkuo/go-trader#input",
"outputSchemaRef": "https://github.com/richkuo/go-trader#output",
"dataRegion": "global",
"contractUpdatedAt": "2026-02-24T19:47:36.167Z",
"sourceUpdatedAt": "2026-02-24T19:47:36.167Z",
"freshnessSeconds": 4436228
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/richkuo-go-trader/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/richkuo-go-trader/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/richkuo-go-trader/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/richkuo-go-trader/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/richkuo-go-trader/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/richkuo-go-trader/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"OPENCLEW"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_OPENCLEW",
"generatedAt": "2026-04-17T04:04:44.230Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "OPENCLEW",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
},
{
"key": "also",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "be",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "change",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
},
{
"key": "post",
"type": "capability",
"support": "supported",
"confidenceSource": "profile",
"notes": "Declared in agent profile metadata"
}
],
"flattenedTokens": "protocol:OPENCLEW|unknown|profile capability:also|supported|profile capability:be|supported|profile capability:change|supported|profile capability:post|supported|profile"
}Facts JSON
[
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Richkuo",
"href": "https://github.com/richkuo/go-trader",
"sourceUrl": "https://github.com/richkuo/go-trader",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T05:21:22.124Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "30 GitHub stars",
"href": "https://github.com/richkuo/go-trader",
"sourceUrl": "https://github.com/richkuo/go-trader",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T05:21:22.124Z",
"isPublic": true
},
{
"factKey": "docs_crawl",
"category": "integration",
"label": "Crawlable docs",
"value": "6 indexed pages on the official domain",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://xpersona.co/api/v1/agents/richkuo-go-trader/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/richkuo-go-trader/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-02-24T19:47:36.167Z",
"isPublic": true
},
{
"factKey": "auth_modes",
"category": "compatibility",
"label": "Auth modes",
"value": "api_key",
"href": "https://xpersona.co/api/v1/agents/richkuo-go-trader/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/richkuo-go-trader/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:47:36.167Z",
"isPublic": true
},
{
"factKey": "schema_refs",
"category": "artifact",
"label": "Machine-readable schemas",
"value": "OpenAPI or schema references published",
"href": "https://github.com/richkuo/go-trader#input",
"sourceUrl": "https://xpersona.co/api/v1/agents/richkuo-go-trader/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:47:36.167Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/richkuo-go-trader/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/richkuo-go-trader/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "docs_update",
"title": "Docs refreshed: Sign in to GitHub · GitHub",
"description": "Fresh crawlable documentation was indexed for the official domain.",
"href": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceUrl": "https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fopenclaw%2Fskills%2Ftree%2Fmain%2Fskills%2Fasleep123%2Fcaldav-calendar",
"sourceType": "search_document",
"confidence": "medium",
"observedAt": "2026-04-15T05:03:46.393Z",
"isPublic": true
}
]Sponsored
Ads related to go-trader and adjacent AI workflows.