Loading...
Loading...
Compare original and translation side by side
小李用 5,000 USDC + 1 ETH(约 $8,000 总资产)启动网格机器人。ETH 在 $2,800~$3,200 区间震荡。 机器人设置 6 档网格,步长约 1.5%,每次交易约 $500。 一周内触发 12 次买卖,累计捕获网格价差约 $180,折合年化约 24%。 同期 ETH 横盘无涨跌,手动持有收益为零。
strategy-grid小李用5000 USDC + 1 ETH(约8000美元总资产)启动网格机器人。ETH在2800~3200美元区间震荡。 机器人设置6档网格,步长约1.5%,每次交易约500美元。 一周内触发12次买卖,累计捕获网格价差约180美元,折合年化收益率约24%。 同期ETH横盘无涨跌,手动持有收益为零。
strategy-gridwhich onchainosonchainos --versioncurl -sSL https://raw.githubusercontent.com/okx/onchainos-skills/main/install.sh | shonchainos --version自动安装失败,请手动安装 onchainos:
https://github.com/okx/onchainos-skillswhich onchainosonchainos --versioncurl -sSL https://raw.githubusercontent.com/okx/onchainos-skills/main/install.sh | shonchainos --version自动安装失败,请手动安装onchainos:
https://github.com/okx/onchainos-skillswhich skills-storecurl -sSL https://raw.githubusercontent.com/purong-huang-1121/skills-store/main/install.sh | sh~/.cargo/bin/.skills-store/last_check_gridcached_ts=$(cat ~/.cargo/bin/.skills-store/last_check_grid 2>/dev/null || true)
now=$(date +%s)cached_ts(now - cached_ts) < 43200which skills-storecurl -sSL https://raw.githubusercontent.com/purong-huang-1121/skills-store/main/install.sh | sh~/.cargo/bin/.skills-store/last_check_gridcached_ts=$(cat ~/.cargo/bin/.skills-store/last_check_grid 2>/dev/null || true)
now=$(date +%s)cached_ts(now - cached_ts) < 43200which strategy-gridcurl -sSL https://raw.githubusercontent.com/purong-huang-1121/skills-store/main/install_strategy.sh | sh -s -- strategy-gridstrategy-grid --version自动安装失败,请手动安装 strategy-grid:
curl -sSL https://raw.githubusercontent.com/purong-huang-1121/skills-store/main/install_strategy.sh | sh -s -- strategy-gridwhich strategy-gridcurl -sSL https://raw.githubusercontent.com/purong-huang-1121/skills-store/main/install_strategy.sh | sh -s -- strategy-gridstrategy-grid --version自动安装失败,请手动安装strategy-grid:
curl -sSL https://raw.githubusercontent.com/purong-huang-1121/skills-store/main/install_strategy.sh | sh -s -- strategy-gridOKX_API_KEY=...
OKX_SECRET_KEY=...
OKX_PASSPHRASE=...EVM_PRIVATE_KEY=0x... # Base wallet with ETH + USDCBASE_RPC_URL=... # Custom Base RPC (default: public endpoint)
TELEGRAM_BOT_TOKEN=... # Telegram notifications on trade/error
TELEGRAM_CHAT_ID=... # Telegram chat ID for alertsOKX_API_KEY=...
OKX_SECRET_KEY=...
OKX_PASSPHRASE=...EVM_PRIVATE_KEY=0x... # 持有ETH和USDC的Base钱包BASE_RPC_URL=... # 自定义Base RPC节点(默认使用公共节点)
TELEGRAM_BOT_TOKEN=... # 交易/错误通知的Telegram机器人令牌
TELEGRAM_CHAT_ID=... # 接收警报的Telegram聊天IDstrategy-grid startstrategy-grid configstrategy-grid set --key <name> --value <value>grid_config.jsonstrategy-gridundefinedstrategy-grid startstrategy-grid configstrategy-grid set --key <名称> --value <值>strategy-gridgrid_config.jsonundefinedundefinedundefinedundefinedundefinedundefinedundefined| # | Command | Auth | Description |
|---|---|---|---|
| 1 | | Yes | Execute one grid cycle |
| 2 | | Yes | Start foreground bot loop (60s ticks) |
| 3 | | No | Stop running bot via PID file |
| 4 | | No | Show grid state, balances, PnL |
| 5 | | No | Detailed PnL and performance stats |
| 6 | | No | Show trade history |
| 7 | | No | Clear all grid state |
| 8 | | Yes | Re-execute last failed trade |
| 9 | | Yes | Market analysis (EMA, volatility, trend) |
| 10 | | No | Record manual deposit/withdrawal |
| 11 | | No | Show current bot configuration |
| 12 | | No | Set a config parameter |
| 序号 | 命令 | 需要身份验证 | 描述 |
|---|---|---|---|
| 1 | | 是 | 执行一轮网格循环 |
| 2 | | 是 | 启动前台机器人循环(每60秒执行一次tick) |
| 3 | | 否 | 通过PID文件停止运行中的机器人 |
| 4 | | 否 | 显示网格状态、资产余额、盈亏情况 |
| 5 | | 否 | 生成详细的盈亏和性能统计报告 |
| 6 | | 否 | 显示交易历史 |
| 7 | | 否 | 清除所有网格状态 |
| 8 | | 是 | 重新执行最后一笔失败的交易 |
| 9 | | 是 | 市场分析(EMA、波动率、趋势) |
| 10 | | 否 | 记录手动存款/取款操作 |
| 11 | | 否 | 显示当前机器人配置 |
| 12 | | 否 | 设置配置参数 |
1. Fetch ETH price (OKX DEX quote API)
2. Read on-chain balances (ETH + USDC on Base)
3. Check circuit breaker (consecutive errors)
4. Recalibrate grid if needed (price breakout / vol shift / age)
5. Map price → grid level
6. If level changed:
a. Direction: BUY if level dropped, SELL if rose
b. Risk checks (cooldown, position limits, repeat guard, consecutive limit)
c. Calculate trade size (% of portfolio, capped)
d. Execute swap via OKX DEX aggregator
e. Update level ONLY on success
7. Save state and report1. 获取ETH价格(OKX DEX报价API)
2. 读取链上资产余额(Base链上的ETH和USDC)
3. 检查熔断机制(连续错误次数)
4. 必要时重新校准网格(价格突破/波动率变化/网格过期)
5. 将当前价格映射到网格档位
6. 若档位发生变化:
a. 交易方向:档位下降则买入,档位上升则卖出
b. 风险检查(冷却期、仓位限制、重复交易防护、连续交易限制)
c. 计算交易规模(占投资组合的比例,有上限)
d. 通过OKX DEX聚合器执行兑换
e. 仅在交易成功时更新当前档位
7. 保存状态并生成报告grid_config.jsonstrategy-gridstrategy-grid configstrategy-grid set --key <key> --value <value>strategy-grid setstrategy-gridgrid_config.jsonstrategy-grid configstrategy-grid set --key <键名> --value <值>tick_interval_secsstrategy-grid set| Key | Default | Description |
|---|---|---|
| | Number of grid levels |
| | EMA lookback periods for grid center calculation |
| | Grid width = multiplier × stddev |
| | Max hours before forced recalibration |
| | Seconds between each tick cycle (restart bot to apply) |
| 键名 | 默认值 | 描述 |
|---|---|---|
| | 网格档位数量 |
| | 计算网格中心的EMA回溯周期 |
| | 网格宽度 = 乘数 × 标准差 |
| | 强制重新校准网格的最长间隔(小时) |
| | 每轮tick循环的间隔秒数(修改后需重启机器人) |
step = (volatility_multiplier × stddev) / (grid_levels / 2)
step = clamp(step, price × step_min_pct, price × step_max_pct)
step = max(step, step_floor)| Key | Default | Description |
|---|---|---|
| | Step floor (0.8% of price) |
| | Step cap (6% of price) |
| | Absolute minimum step in USD |
step = (volatility_multiplier × stddev) / (grid_levels / 2)
step = clamp(step, price × step_min_pct, price × step_max_pct)
step = max(step, step_floor)| 键名 | 默认值 | 描述 |
|---|---|---|
| | 步长下限(价格的0.8%) |
| | 步长上限(价格的6%) |
| | 步长的绝对最小值(美元) |
| Key | Default | Description |
|---|---|---|
| | Max 12% of portfolio per trade |
| | Minimum trade size in USD |
| | Slippage tolerance % for DEX swap. Increase to 2-3 if trades revert |
| | ETH reserved for gas, not available for SELL |
| 键名 | 默认值 | 描述 |
|---|---|---|
| | 单笔交易最大占投资组合的比例(12%) |
| | 单笔交易的最小规模(美元) |
| | DEX兑换的滑点容忍度(百分比)。若交易频繁失败,可提高至2-3 |
| | 预留用于Gas的ETH,不可用于卖出交易 |
| Key | Default | Description |
|---|---|---|
| | 30min cooldown between same-direction trades |
| | Max consecutive same-direction trades |
| | Block BUY when ETH% exceeds this |
| | Block SELL when ETH% drops below this |
| | Circuit breaker threshold |
| | Seconds cooldown after circuit breaker trips |
| 键名 | 默认值 | 描述 |
|---|---|---|
| | 同方向交易的冷却时间(30分钟) |
| | 连续同方向交易的最大次数 |
| | 当ETH占比超过此值时,禁止买入 |
| | 当ETH占比低于此值时,禁止卖出 |
| | 熔断机制触发阈值 |
| | 熔断触发后的冷却时间(秒) |
strategy-grid set --key slippage_pct --value 2strategy-grid set --key position_max_pct --value 75
strategy-grid set --key position_min_pct --value 25strategy-grid set --key tick_interval_secs --value 120 # 2 minutestick_interval_secsstrategy-grid set --key max_trade_pct --value 0.20 # 20% per trade
strategy-grid set --key min_trade_usd --value 10 # $10 minimumstrategy-grid set --key slippage_pct --value 2strategy-grid set --key position_max_pct --value 75
strategy-grid set --key position_min_pct --value 25strategy-grid set --key tick_interval_secs --value 120 # 2分钟tick_interval_secsstrategy-grid set --key max_trade_pct --value 0.20 # 单笔交易最大占比20%
strategy-grid set --key min_trade_usd --value 10 # 最小交易规模10美元grid_calibratedno_crossingtrade_executedtrade_failedblockedskippedgrid_calibratedno_crossingtrade_executedtrade_failedblockedskippedtick~/.skills-store/grid_bot.pidgrid stoptick~/.skills-store/grid_bot.pidgrid stop--force--forcegrid_config.jsongrid_levelstick_interval_secsmax_trade_pctmin_trade_usdslippage_pctema_periodvolatility_multiplierstep_min_pctstep_max_pctstep_floorgrid_recalibrate_hoursmin_trade_intervalmax_same_dir_tradesposition_max_pctposition_min_pctgas_reserve_ethmax_consecutive_errorscooldown_after_errorsgrid_config.jsontick_interval_secsgrid_levelstick_interval_secsmax_trade_pctmin_trade_usdslippage_pctema_periodvolatility_multiplierstep_min_pctstep_max_pctstep_floorgrid_recalibrate_hoursmin_trade_intervalmax_same_dir_tradesposition_max_pctposition_min_pctgas_reserve_ethmax_consecutive_errorscooldown_after_errors| Outcome | Update level? | Rationale |
|---|---|---|
| Trade succeeded | Yes | Grid crossing consumed |
| Trade failed | No | Retry on next tick |
| Trade skipped (cooldown/limit) | No | Don't lose the crossing |
| 结果 | 是否更新档位? | 原因 |
|---|---|---|
| 交易成功 | 是 | 网格穿越已被消耗 |
| 交易失败 | 否 | 在下一轮tick重试 |
| 交易被跳过(冷却期/限制) | 否 | 不丢失网格穿越的机会 |
total_pnl = current_portfolio_value - initial_value - deposits
grid_profit += estimated spread capture on SELL tradestotal_pnl = 当前投资组合价值 - 初始价值 - 存款总额
grid_profit += 卖出交易中捕获的预估价差~/.skills-store/grid_state.json~/.skills-store/grid_bot.pid~/.skills-store/grid_state.json~/.skills-store/grid_bot.pid| Need | Skill |
|---|---|
| USDC yield optimization (Aave/Compound/Morpho) | |
| Aave V3 supply/withdraw/markets | |
| Morpho vault operations | |
| Hyperliquid perpetual trading | |
| Prediction markets | |
| 需求 | 对应技能 |
|---|---|
| USDC收益优化(Aave/Compound/Morpho) | |
| Aave V3存/取/市场查询 | |
| Morpho金库操作 | |
| Hyperliquid永续合约交易 | |
| 预测市场 | |
| Scenario | Behavior |
|---|---|
| First tick (no grid) | Calibrates grid from current price + history, sets initial level |
| Price exits grid range | Triggers recalibration (breakout detected) |
| Volatility shifts >30% | Triggers recalibration |
| Grid age > 12 hours | Triggers recalibration |
| 5 consecutive errors | Circuit breaker trips, 1-hour cooldown |
| Trade amount < $5 | Skipped (below minimum) |
| ETH balance < 0.003 | Gas reserve protected, SELL blocked |
| No EVM_PRIVATE_KEY | Error on tick/start/retry commands |
| Bot already running | |
| No running bot | |
| Reset without --force | Returns error, requires confirmation |
| 场景 | 行为 |
|---|---|
| 首次tick(无网格) | 根据当前价格和历史数据校准网格,设置初始档位 |
| 价格超出网格范围 | 触发重新校准(检测到突破) |
| 波动率变化超过30% | 触发重新校准 |
| 网格运行时间超过12小时 | 触发重新校准 |
| 连续5次错误 | 熔断机制触发,进入1小时冷却期 |
| 交易金额低于5美元 | 跳过交易(低于最小值) |
| ETH余额低于0.003 | 保护Gas预留额度,禁止卖出交易 |
| 未配置EVM_PRIVATE_KEY | tick/start/retry命令执行失败 |
| 机器人已在运行 | |
| 无运行中的机器人 | |
| 未加--force参数执行reset | 返回错误,需确认 |
| Symptom | Cause | Fix |
|---|---|---|
Trade reverts on-chain ( | Slippage too low for the DEX route | |
| RPC 429 / rate limit errors | Public Base RPC rate limited | Set |
| Circuit breaker trips (5 errors) | Repeated failures (RPC, slippage, gas) | Check logs, fix root cause, then wait 1h or |
| Bot not trading (no_crossing) | Price within same grid level | Normal — bot only trades when price crosses a grid boundary |
| Trade blocked: position limit | ETH% too high/low | Adjust |
| Trade blocked: cooldown | Same-direction trade too soon (30min default) | Lower |
| Trade blocked: repeat guard | Same crossing as last trade | Normal — prevents oscillation. Will clear when price moves to a new level |
| Gas estimation fails | Insufficient ETH for gas | Ensure wallet has > 0.003 ETH (adjust via |
| 症状 | 原因 | 解决方法 |
|---|---|---|
链上交易回滚( | DEX路由的滑点设置过低 | |
| RPC 429/速率限制错误 | 公共Base RPC节点达到速率限制 | 设置 |
| 熔断机制触发(连续5次错误) | 重复失败(RPC、滑点、Gas问题) | 检查日志,修复根本原因,等待1小时或执行 |
机器人未执行交易( | 价格未穿越网格档位 | 正常现象——仅当价格穿越网格线时才会触发交易 |
| 交易被阻止:仓位限制 | ETH占比过高/过低 | 调整 |
| 交易被阻止:冷却期 | 同方向交易间隔过短(默认30分钟) | 若需要更频繁交易,降低 |
| 交易被阻止:重复防护 | 与上一笔交易的网格穿越相同 | 正常现象——防止震荡。价格进入新档位后会自动解除 |
| Gas估算失败 | ETH余额不足支付Gas | 确保钱包持有超过0.003 ETH(可通过 |
| Pattern | Problem |
|---|---|
| Recalibrate every tick | Grid oscillates, no stable levels |
| Update level on failure/skip | Silently loses grid crossings |
| No position limits | Trending market → 100% one-sided |
| Fixed step in volatile market | Too small → over-trades; too large → never triggers |
| Net cash flow ≠ profit |
| No cooldown | Rapid swings cause burst of trades eating slippage |
| 模式 | 问题 |
|---|---|
| 每轮tick都重新校准网格 | 网格震荡,无稳定档位 |
| 交易失败/跳过时更新档位 | 悄悄丢失网格穿越机会 |
| 无仓位限制 | 趋势市场下会导致100%单边敞口 |
| 波动市场中使用固定步长 | 步长过小→过度交易;步长过大→永远不触发交易 |
用 | 净现金流不等于实际利润 |
| 无冷却期设置 | 价格快速波动导致大量交易,滑点成本过高 |