[{"content":"How to Rescue Claude Code Sessions Stuck on Image Dimension Limits Recently I hit a confusing error in Claude Code:\nAn image in the conversation exceeds the dimension limit for many-image requests (2000px). Start a new session with fewer images.\nThe screenshot I\u0026rsquo;d just pasted was completely normal—just 100×200 pixels. By intuition, this should mean \u0026ldquo;the last image is oversized,\u0026rdquo; but it wasn\u0026rsquo;t. This is a cumulative bug with counterintuitive trigger conditions, root causes, and fixes. Once you hit it, you keep hitting it. This post explains the rules, the mechanics, and ready-to-use tooling to fix it.\nThe Symptom A typical trigger sequence:\nYou\u0026rsquo;re halfway through a Claude Code session, and you\u0026rsquo;ve pasted a few screenshots along the way (say one is 2500×1800—Retina screenshots easily exceed 2000 px). You keep chatting and paste a new screenshot (doesn\u0026rsquo;t matter how large). That request fails instantly with the dimension limit error. After that, even plain-text-only messages fail. The session is completely stuck. Your only option is to start a new one. If you\u0026rsquo;re using Paseo (a client that aggregates multiple Claude Code / Codex tabs), one dead tab doesn\u0026rsquo;t break the others, but that tab\u0026rsquo;s conversation context is essentially wasted.\nRoot Cause: Anthropic API\u0026rsquo;s Multi-Image Tiering Rules Anthropic\u0026rsquo;s Messages API has two tiers for image size limits:\nImages in the request Max size per image 1 image (single-image mode) Up to 8000×8000 ≥ 2 images (multi-image mode) Each edge must be ≤ 2000 px The key phrase is \u0026ldquo;images in the request,\u0026rdquo; not \u0026ldquo;images in this message.\u0026rdquo; Claude Code (and any compatible client) works like this: each request resends the entire conversation history—including all historical images—as context. So:\nYou paste one 2500×1800 image. Single-image mode. OK. You paste any other image a second time, even a 50×50 emoji screenshot. Now the request contains 2 images, multi-image mode triggers. The API retrospectively checks the history, sees that first 2500-wide image violates the 2000 px rule, and rejects the entire request. After that, even if you send only text, those 2 images remain in the context history, and requests keep failing. So it\u0026rsquo;s not \u0026ldquo;the latest image is the problem\u0026rdquo;—it\u0026rsquo;s \u0026ldquo;from the 2nd image onward, any historical image exceeding 2000 px breaks the entire session.\u0026rdquo;\nRetina display screenshots are naturally oversized: on a MacBook with 3× scaling, a window screenshot displayed at 800×600 pixels is actually 2400×1800 pixels—over the line.\nBasic Fix: Strip Base64 Images from the JSONL Claude Code stores each session as JSON Lines: ~/.claude/projects/\u0026lt;project-slug\u0026gt;/\u0026lt;session-uuid\u0026gt;.jsonl. Each line is a message, and images are embedded as base64, like:\n{ \u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: [ { \u0026#34;type\u0026#34;: \u0026#34;text\u0026#34;, \u0026#34;text\u0026#34;: \u0026#34;Check out this error\u0026#34; }, { \u0026#34;type\u0026#34;: \u0026#34;image\u0026#34;, \u0026#34;source\u0026#34;: { \u0026#34;type\u0026#34;: \u0026#34;base64\u0026#34;, \u0026#34;data\u0026#34;: \u0026#34;iVBORw0...very long base64...\u0026#34; } } ] } The rescue approach is simple: replace source with a placeholder. The base64 is no longer embedded in the context, and the multi-image rule no longer triggers. Your text prompt (\u0026ldquo;Check out this error\u0026rdquo;) and Claude\u0026rsquo;s text interpretation of the image (\u0026ldquo;The screenshot shows a 404 error\u0026hellip;\u0026rdquo;) are both preserved exactly. The conversation semantics continue; you only lose the ability to scroll back and view the image itself.\nThe existing tool for this is ianbmacdonald/claude-session-rescue. It\u0026rsquo;s a pure Python script with atomic writes and automatic .bak backups:\ngit clone https://github.com/ianbmacdonald/claude-session-rescue ~/tools/claude-session-rescue # Dry-run to see what will change python3 ~/tools/claude-session-rescue/scripts/session_rescue.py \\ --session-id abc12345 --dry-run # Actually run it python3 ~/tools/claude-session-rescue/scripts/session_rescue.py \\ --session-id abc12345 After running it, you can go back to Claude Code and send messages normally.\nTwo Real Pain Points I Hit After fixing it the first time with that basic script, I ran into two more issues:\nPain Point 1: I Don\u0026rsquo;t Know Which Paseo Tab Maps to Which sessionId I\u0026rsquo;m used to giving Paseo tabs meaningful names (organized by project domain), but the rescue script needs the first 8 characters of the session ID as a parameter. I have to dig through ~/.paseo/agents/\u0026lt;project\u0026gt;/*.json files to find the corresponding agent\u0026rsquo;s persistence.sessionId—annoying every time.\nSolution: write a wrapper script that auto-maps tab names to sessionIds.\nPain Point 2: The Problem Recurs; We Need Preventive Maintenance Rescue is \u0026ldquo;post-incident remediation\u0026rdquo;—you hit the error and then fix it. But as usage volume grows, sessions accumulate more screenshots, and it might break again the next day. Better to run automatically every day with safety guardrails that don\u0026rsquo;t interfere with active conversations.\nWe need four safety valves:\nSkip active sessions: If a session\u0026rsquo;s corresponding claude process is running right now, skip it—avoid write conflicts. Skip recently modified: JSONL changed in the last N minutes? User might be chatting; skip. Image count threshold: Sessions with fewer than N images stay as-is—preserve recent visual context. Backup rotation: Each run creates another .bak file; over time they accumulate. Keep only the last K. Tooling I\u0026rsquo;ve assembled a set of scripts: they leverage the upstream ianbmacdonald/claude-session-rescue for JSONL image stripping, with a wrapper layer that\u0026rsquo;s Paseo-friendly and includes both manual rescue + scheduled versions + 4 safety valves. The code snippets below you can adapt directly.\nscripts/paseo_rescue.sh — Manual Rescue, Paseo-Friendly # List all named tabs and image counts bash paseo_rescue.sh # Preview changes bash paseo_rescue.sh MyTabName --dry-run # Actually rescue bash paseo_rescue.sh MyTabName # Batch rescue bash paseo_rescue.sh --all The script parses the title field and persistence.sessionId from ~/.paseo/agents/\u0026lt;project\u0026gt;/*.json and auto-maps them. Before running, just set the PASEO_AGENTS_DIR variable at the top of the script to your project slug.\nscripts/paseo_rescue_auto.sh — Daily Scheduled Version + 4 Safety Valves Core code snippet:\nwhile IFS=\u0026#39;|\u0026#39; read -r name sid cwd; do jsonl=\u0026#34;$CLAUDE_PROJECTS/${cwd_enc}/${sid}.jsonl\u0026#34; # Valve 1: active claude process if pgrep -f \u0026#34;claude.*${sid:0:8}\u0026#34; \u0026gt;/dev/null; then log \u0026#34;[$name] skip: active process\u0026#34; continue fi # Valve 2: modified in last 30 minutes mtime=$(stat -f%m \u0026#34;$jsonl\u0026#34;) if [ $(($(date +%s) - mtime)) -lt 1800 ]; then log \u0026#34;[$name] skip: recent write\u0026#34; continue fi # Valve 3: image count threshold img_count=$(grep -o \u0026#39;\u0026#34;type\u0026#34;:\u0026#34;image\u0026#34;\u0026#39; \u0026#34;$jsonl\u0026#34; | wc -l) if [ \u0026#34;$img_count\u0026#34; -lt 5 ]; then log \u0026#34;[$name] skip: only $img_count images\u0026#34; continue fi # Clean up and log python3 \u0026#34;$RESCUE_SCRIPT\u0026#34; --session-id \u0026#34;${sid:0:8}\u0026#34; # Valve 4: .bak rotation ls -1t \u0026#34;${sid}.jsonl.bak\u0026#34;* | tail -n +4 | xargs rm -f done \u0026lt; \u0026lt;(list_agents) Pair this with a macOS LaunchAgent or Linux systemd timer (template examples are in the repo), and run it once daily at 18:30 local time. When cleanup happens, push a summary to Telegram; skip notifications for dry runs.\nMonitoring Integration My local monitoring system brings this scheduled task into a unified \u0026ldquo;backup jobs\u0026rdquo; dashboard:\nTask status (green/yellow/red) Last success time, next run time Number of sessions cleaned, space freed, images processed Failures auto-alert to Telegram This uses my own monitoring framework (out of scope here to avoid coupling), but you can adapt your monitoring to the log format that paseo_rescue_auto.sh produces.\nPractical Prevention Tips (Prevention \u0026gt; Rescue) The best rescue is never needing one:\nResize screenshots to ≤ 1920 px wide before pasting. On macOS, use sips -Z 1920 file.png, or use third-party tools like Shottr / CleanShot that default to 1× output. Moderate screenshot use in long sessions. If you can describe it in text, skip the image. For heavy users (pasting 10+ screenshots daily), set up a daily scheduled cleanup with --min-images 5 or so. For DevOps / research work, have Claude summarize conclusions into text before cleanup—images are gone, but the text memory remains. Side Note on API Rules I haven\u0026rsquo;t seen this Anthropic multi-image rule documented prominently in official docs. I only reverse-engineered it after hitting the error. The \u0026ldquo;rule triggers, then retrospectively checks history\u0026rdquo; design is unfriendly to clients—users feel like \u0026ldquo;I only pasted a small image, how is it failing?\u0026rdquo; If Claude Code could show a helpful error like \u0026ldquo;Image N in message M exceeds limits,\u0026rdquo; UX would improve significantly.\nBut the rule is what it is. The best we can do is smooth out the rescue workflow. This tooling lets what was once a chaotic \u0026ldquo;scrambling every time\u0026rdquo; situation become \u0026ldquo;18:30 automatic cleanup, I usually don\u0026rsquo;t even notice.\u0026rdquo;\nLinks Upstream core: https://github.com/ianbmacdonald/claude-session-rescue (the JSONL image-stripping algorithm this post\u0026rsquo;s wrapper entirely depends on) If this helps, share feedback on any issues encountered at X @panshi8848.\n📷 Cover image · Flux Schnell AI · Panshi.io brand aesthetic\n","permalink":"https://blog.panshi.io/en/posts/claude-code-image-limit-rescue/","summary":"\u003ch1 id=\"how-to-rescue-claude-code-sessions-stuck-on-image-dimension-limits\"\u003eHow to Rescue Claude Code Sessions Stuck on Image Dimension Limits\u003c/h1\u003e\n\u003cp\u003eRecently I hit a confusing error in Claude Code:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eAn image in the conversation exceeds the dimension limit for many-image requests (2000px). Start a new session with fewer images.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eThe screenshot I\u0026rsquo;d just pasted was completely normal—just 100×200 pixels. By intuition, this should mean \u0026ldquo;the last image is oversized,\u0026rdquo; but it wasn\u0026rsquo;t. This is a \u003cstrong\u003ecumulative bug\u003c/strong\u003e with counterintuitive trigger conditions, root causes, and fixes. Once you hit it, you keep hitting it. This post explains the rules, the mechanics, and ready-to-use tooling to fix it.\u003c/p\u003e","title":"Claude Code long session stuck at dimension limit? Bug caused by accumulated screenshots bursting the API, and a rescue solution set."},{"content":" Polaris is a quant strategy I\u0026rsquo;ve been running since late 2024, trading BTC/USDT perpetual futures on Binance, classified as a trend-following strategy. Real-time live performance data is available on the Polaris Live Tracker page.\nThis post covers the strategy\u0026rsquo;s core logic, live trading results, and risk management framework.\nWhy Trend Following Quant strategies roughly fall into two categories:\nMean Reversion: Opens counter-trend positions when price deviates from the mean, waiting for it to revert. Works well in choppy markets but gets whipsawed in trending markets.\nTrend Following: Opens positions in the direction of the trend when one forms, following the move. Profits during strong trends but incurs small losses in choppy markets.\nI chose trend following for these reasons:\nBTC has strong trending behavior: Historically, BTC has experienced several month-long directional trends that are more extreme than stock market trends, giving trend-following strategies more room to perform.\nSimple, interpretable logic: Trend following\u0026rsquo;s core principle is \u0026ldquo;follow the market, don\u0026rsquo;t predict the top or bottom.\u0026rdquo; I can understand the entry and exit logic of every trade, making debugging easier when issues arise.\nLong-term effectiveness has empirical support: CTA funds (commodity trend-following funds) have operated globally for decades, and trend following as a strategy class has substantial historical data supporting its viability.\nStrategy Overview Trading Instrument: BTC/USDT perpetual futures (Binance) Timeframe: Hourly signals, 24/7 operation Direction: Long and short (can short) Position Style: Hold after trend confirmation, exit when trend reverses, no fixed take-profit targets Risk Management: Dynamically adjust position size based on volatility, with maximum drawdown stop-loss threshold Core Principle: Enter when a trend appears, exit when the trend ends. Don\u0026rsquo;t predict how high BTC will go—just determine whether a trend is currently in progress.\nLive Trading Performance Current performance metrics are displayed in real-time on the Polaris Live Tracker page, including:\nCumulative return (in USDT) Current position direction (long/short/flat) Entry and exit records for each signal Maximum drawdown Here are some key metrics (these numbers update; refer to the page for the latest):\nRunning Period: From October 2024 to now, spanning various market conditions—BTC rallying to $100k, consolidation at highs, pullbacks, and more.\nMaximum Drawdown: Trend-following strategies experience drawdowns during choppy, choppy markets—that\u0026rsquo;s an inherent characteristic of this strategy type, not a bug. Good years must earn enough to cover bad years\u0026rsquo; losses.\nSignal Frequency: Average of 4–8 signal changes per month. Not a high-frequency strategy.\nRisk Management This matters more than strategy parameters.\nPosition Sizing No all-in bets. Each position uses only a fixed percentage of account equity. This percentage adjusts dynamically based on current market volatility—reduce size when volatility is high, increase modestly when low.\nPrinciple: Maximum loss per trade never exceeds a fixed percentage of account equity. This percentage reflects what I can psychologically tolerate. Even in worst-case scenarios, I can maintain discipline.\nStop-Loss Logic Trend-following strategies self-correct by reversing direction—when the trend signal flips, we close the current position and open the opposite one.\nBut beyond signal-based exits, I\u0026rsquo;ve also set an account-level stop-loss threshold: if drawdown over a period exceeds the maximum tolerable level, the strategy automatically pauses trading until market structure clarifies, then resumes.\nServer Stability The strategy runs on an AWS Singapore node with independent deployment, no shared resources. It includes:\nHeartbeat monitoring: hourly checks that the strategy is running Exception alerts: Telegram notifications for anomalies Regular backups: strategy state and trade history backed up periodically This Is Not Investment Advice Polaris\u0026rsquo;s live performance reflects my own decision-making, not investment advice.\nQuant strategies have uncertain lifespans: market structure changes, and past performance doesn\u0026rsquo;t guarantee future results. I run this strategy because I believe in trend following\u0026rsquo;s long-term effectiveness as a strategy class, combined with strict risk controls as a safety net.\nIf you\u0026rsquo;re interested in learning quantitative trading, start with understanding trend-following fundamentals. Once you grasp the logic, decide whether it\u0026rsquo;s right for your own account.\n→ View Polaris Live Performance Data → Read Binance API From Zero to First Order → Read Quant Toolkit Stack\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/polaris-strategy-intro/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"a close up of a stock chart on a computer screen\" loading=\"lazy\" src=\"/images/polaris-strategy-intro-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003ePolaris is a quant strategy I\u0026rsquo;ve been running since late 2024, trading BTC/USDT perpetual futures on Binance, classified as a \u003cstrong\u003etrend-following\u003c/strong\u003e strategy. Real-time live performance data is available on the \u003ca href=\"/en/polaris/\"\u003ePolaris Live Tracker\u003c/a\u003e page.\u003c/p\u003e\n\u003cp\u003eThis post covers the strategy\u0026rsquo;s core logic, live trading results, and risk management framework.\u003c/p\u003e\n\u003ch2 id=\"why-trend-following\"\u003eWhy Trend Following\u003c/h2\u003e\n\u003cp\u003eQuant strategies roughly fall into two categories:\u003c/p\u003e","title":"Polaris Strategy Overview: My BTC Trend-Following Quantitative Trading System"},{"content":" After half a year of tinkering with my home network, I finally got a multi-gateway redundancy architecture working. This article shares the overall design approach—it\u0026rsquo;s for people with some hands-on experience who want a more stable network.\nWhy You Need Multiple Gateways The biggest problem with a single gateway is a single point of failure: if your VPS gets blocked, the line stutters, or the machine crashes, your entire network goes down.\nThe core value of multiple gateways:\nCircuit redundancy: multiple exit points in the US / Hong Kong / Japan, automatically choosing the fastest one Traffic separation: different traffic uses different exits, saving bandwidth while maintaining speed Automatic failover: if one circuit goes down, others automatically take over without the user noticing Overall Architecture Home devices ↓ OpenWrt primary router (DNS routing → dnsmasq) ↓ mihomo gateway (routing rules → policy groups) ↓ Multiple VPS exits (US / HK / JP) ↓ Target websites Key components:\nPrimary router: OpenWrt, responsible for DNS hijacking and routing traffic to mihomo mihomo node: runs on a separate machine, handles proxying and routing logic VPS exits: I recommend DMIT—Hong Kong / US nodes have stable latency and support Xray + Hysteria2 mihomo Routing Rule Design Policy Group Hierarchy proxy-groups: # Manual selection group (emergency backup) - name: \u0026#34;Manual Select\u0026#34; type: select # Auto-select fastest node - name: \u0026#34;Auto Select\u0026#34; type: url-test url: \u0026#34;http://www.gstatic.com/generate_204\u0026#34; interval: 300 # Regional groups - name: \u0026#34;🇺🇸 US\u0026#34; type: url-test filter: \u0026#34;US|United States\u0026#34; - name: \u0026#34;🇭🇰 Hong Kong\u0026#34; type: url-test filter: \u0026#34;Hong Kong|HK\u0026#34; # Routing decision groups - name: \u0026#34;Domestic Direct\u0026#34; type: select proxies: [DIRECT] - name: \u0026#34;AI Services\u0026#34; type: select proxies: [\u0026#34;🇺🇸 US\u0026#34;, \u0026#34;Auto Select\u0026#34;] Rule Priority mihomo rules match from top to bottom, so order matters:\nrules: # Local / LAN direct - IP-CIDR,192.168.0.0/16,DIRECT - IP-CIDR,10.0.0.0/8,DIRECT # AI services via US - DOMAIN-SUFFIX,openai.com,AI Services - DOMAIN-SUFFIX,anthropic.com,AI Services - DOMAIN-SUFFIX,claude.ai,AI Services # Domestic main domains direct (reduce latency) - GEOSITE,cn,Domestic Direct - GEOIP,CN,Domestic Direct # Everything else via auto-select - MATCH,Auto Select DNS Anti-Pollution This is the most error-prone part. Architecture:\nDevice queries DNS → dnsmasq (local cache + routing decision) → Domestic domains → 114.114.114.114 (direct) → Foreign domains → mihomo\u0026#39;s DNS (queried via proxy) The key is to avoid domestic DNS pollution of foreign domain resolution.\nVPS Selection Tips I\u0026rsquo;ve used many providers, and DMIT currently offers the best value:\nData Center Latency (Guangzhou) Characteristics Hong Kong 20-40ms Fastest, ideal for low-latency needs US Los Angeles 150-180ms CN2 GIA optimized, stable Japan Tokyo 60-90ms Backup option, affordable pricing FAQ Q: What if all nodes time out?\nA: First check if the VPS is reachable via ping (to rule out blocking), then verify your mihomo config syntax.\nQ: Why are domestic websites slow?\nA: Check whether your GEOSITE/GEOIP rules are active—your DNS queries might be routing through the proxy.\nQ: How do I monitor latency on each node?\nA: mihomo has a built-in API that you can integrate with Grafana for real-time monitoring.\nGot questions? Feel free to reach out on Telegram or X.\nFurther Reading:\nXray VLESS+XTLS Deployment Guide — Server-side protocol configuration VPS Selection Guide — Which VPS providers are best for exit nodes VPS IP Blocked—What to Do — Emergency solutions 📷 Hero image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/mihomo-multi-gateway/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A glowing decorative lamp with a smaller light beside it.\" loading=\"lazy\" src=\"/images/mihomo-multi-gateway-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eAfter half a year of tinkering with my home network, I finally got a multi-gateway redundancy architecture working. This article shares the overall design approach—it\u0026rsquo;s for people with some hands-on experience who want a more stable network.\u003c/p\u003e\n\u003ch2 id=\"why-you-need-multiple-gateways\"\u003eWhy You Need Multiple Gateways\u003c/h2\u003e\n\u003cp\u003eThe biggest problem with a single gateway is a \u003cstrong\u003esingle point of failure\u003c/strong\u003e: if your VPS gets blocked, the line stutters, or the machine crashes, your entire network goes down.\u003c/p\u003e","title":"Home Network Multi-Gateway Architecture: Mihomo Fine-Grained Traffic Splitting in Practice"},{"content":" Claude Code got a quiet but important update in 2025: you can now plug in GitHub Copilot Pro+ as a backend. This means you can run Claude Code on a $19/month Copilot Pro+ subscription instead of paying separately for $20/month Claude Pro.\nBut the two channels have stark differences—if you don\u0026rsquo;t understand them, you\u0026rsquo;ll hit gotchas. This article breaks down the key distinctions, plus the alias setup I\u0026rsquo;m using to make switching a one-command operation.\nCore Differences Between the Two Channels Dimension Official Channel (Claude Pro) Copilot Channel (Pro+) Monthly Fee $20 $19 (Copilot Pro+) Max Context 200k tokens 128k tokens Model Selection Sonnet / Opus—choose freely 1500 premium model calls per month Network Requires access to claude.ai Requires access to github.com Best For Large projects, long conversations Daily tasks, cost control The critical gap is context window: official channel gets 200k, Copilot gets 128k.\nFor most everyday tasks (editing a file, writing a script), 128k is plenty. But if you\u0026rsquo;re asking Claude Code to understand your entire codebase, or if you have a lot of conversation turns, that 200k difference really shows.\nThe Context Auto-Compression Problem Claude Code has an automatic compression feature: when conversation context exceeds a threshold, it automatically compresses history into a summary to free up space and keep the conversation going.\nHere\u0026rsquo;s the catch: the official channel and Copilot channel have different context limits, so compression triggers at different times.\nOfficial channel: 200k limit, compression threshold around 195k (~98%) Copilot channel: 128k limit, but if you don\u0026rsquo;t actively constrain Claude Code, it might not compress until it\u0026rsquo;s near 200k—meanwhile Copilot has already truncated it, causing data loss The fix: when using the Copilot channel, manually set Claude Code\u0026rsquo;s context limit to 128k or less (say, 110k) so it auto-compresses before Copilot truncates.\nThe Alias Strategy Add these three lines to ~/.zshrc (or ~/.bashrc):\n# Claude Code channel aliases alias cc=\u0026#39;claude\u0026#39; # Official channel (200k, no forced compression) alias cco=\u0026#39;claude --model claude-opus-4-6\u0026#39; # Official channel, Opus model alias ccc=\u0026#39;CLAUDE_CODE_MAX_CONTEXT_TOKENS=110000 claude\u0026#39; # Copilot channel (110k limit triggers compression) Make it take effect:\nsource ~/.zshrc How to Use Command Channel Best For cc Official Sonnet Daily tasks, 200k context cco Official Opus Complex reasoning, most powerful ccc Copilot Pro+ Save money mode, auto-compresses at 110k Login switching: Claude Code remembers your last logged-in account. To switch channels:\nSwitch to official: claude login, choose Claude.ai Switch to Copilot: claude login, choose GitHub Copilot Login state persists—once you switch, just use the corresponding alias to run.\nReal-World Context Limits To get an intuition for 200k vs. 128k:\nScenario Est. Token Cost Official Enough? Copilot Enough? Edit a single file (\u0026lt;500 lines) ~5k ✓ ✓ Debug one complex function ~10-20k ✓ ✓ Refactor a module (5-10 files) ~30-50k ✓ ✓ Understand a full mid-size project ~80-120k ✓ Barely Long conversation + large codebase \u0026gt;128k ✓ ✗ (needs compression) For most everyday work, the Copilot channel is plenty. You only need to switch to the official channel when doing large project-wide refactors.\nKeeping OAuth Sessions for Both Channels Claude Code doesn\u0026rsquo;t natively support multi-account management (switching requires a fresh claude login), but you can work around it with shell functions:\n# A more complete switching approach (optional) function cc-switch-official() { echo \u0026#34;Switching to official channel (Claude Pro)...\u0026#34; claude logout 2\u0026gt;/dev/null claude login } function cc-switch-copilot() { echo \u0026#34;Switching to Copilot channel...\u0026#34; claude logout 2\u0026gt;/dev/null CLAUDE_CODE_USE_BEDROCK=false claude login # Choose GitHub Copilot } If you use both channels frequently, I\u0026rsquo;d recommend keeping one channel logged in permanently and switching to the other as needed. My habit: official channel always ready (cc and cco), Copilot channel when required.\nWhich One Is Better Value In pure price terms, they\u0026rsquo;re almost identical ($19 vs. $20). But look at real usage:\nIf you already subscribe to Copilot Pro+ (you\u0026rsquo;re using IDE-embedded AI completions), Claude Code rides along for free—essentially zero additional cost If Claude Code is your only use case, just get Claude Pro straight; simpler and no context fiddling My takeaway: Start with whether you have Copilot Pro+. If you do, use ccc for daily tasks and save $20/month; if you don\u0026rsquo;t, Claude Pro alone is the way to go.\n→ See Detailed Copilot Pro+ Review\nWhat You Can Do With the Money You Save $20/month might seem small, but that\u0026rsquo;s $240 a year. Use it to sign up for a solid exchange + spin up a quant bot that can generate positive returns:\nPionex Basis Arbitrage Bot — 14–18% annualized on 1000 USDT (low risk) Pionex Gold Grid: 4 Months of Live Trading — my actual numbers from running 800 USDT If you\u0026rsquo;re already tinkering with Claude Code, signing up for Pionex and test-running grid trading with a small amount is a nice \u0026ldquo;save money → invest\u0026rdquo; loop.\n📷 Cover image · Generated with Flux Schnell AI · Panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/claude-code-dual-channel/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"person using MacBoook\" loading=\"lazy\" src=\"/images/claude-code-dual-channel-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eClaude Code got a quiet but important update in 2025: you can now plug in GitHub Copilot Pro+ as a backend. This means you can run Claude Code on a $19/month Copilot Pro+ subscription instead of paying separately for $20/month Claude Pro.\u003c/p\u003e\n\u003cp\u003eBut the two channels have stark differences—if you don\u0026rsquo;t understand them, you\u0026rsquo;ll hit gotchas. This article breaks down the key distinctions, plus the alias setup I\u0026rsquo;m using to make switching a one-command operation.\u003c/p\u003e","title":"Claude Code dual-channel switching guide: official channel vs Copilot Pro+ cost-saving option"},{"content":" ⚠️ KYC Requirements: Pionex doesn\u0026rsquo;t support KYC verification with mainland China IDs. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or similar regions. See Pionex\u0026rsquo;s official regional restrictions.\nGrid trading is the longest-running quant strategy I\u0026rsquo;ve deployed—simple but effective. This article shares my real experience running grid trading on Pionex. It\u0026rsquo;s not about getting rich overnight, but how to steadily let automated trading help you profit from market oscillations.\nWhat is Grid Trading Grid trading\u0026rsquo;s core logic: set multiple buy and sell price levels within a range, buy when price drops, sell when price rises, and repeat to capture the spread.\nEssentially, you\u0026rsquo;re arbitraging market volatility:\nPrice range: 40,000 - 50,000 USDT (BTC/USDT) Grid levels: 20 Spacing: 500 USDT per level When price drops from 45,000 to 44,500 → auto-buy When price rises from 44,500 back to 45,000 → auto-sell, profit ~1.1% Works best in: oscillating markets. Trending markets (sharp rallies or crashes) perform poorly.\nWhy Choose Pionex Pionex ships with 16 free trading bots, and grid trading is completely free—you only pay the standard trading fee (0.05%).\nCompared to other platforms:\nNo need to code or integrate APIs Simple interface, beginner-friendly Liquidity aggregated from Binance + Huobi Register via my referral link to get trading fee discounts.\nParameter Configuration Explained Price Range This is the most critical parameter—it directly determines whether your strategy is profitable.\nWhat not to do: randomly pick a range and hope the price oscillates within it.\nWhat to do:\nReview the past 3–6 months of price action and select a range with high probability of repeated oscillation Avoid ranges that are too tight (constantly hitting the boundaries) or too wide (insufficient grid density, thin margins) Leave adequate safety margins—don\u0026rsquo;t position the range on the edge of support/resistance levels Grid Levels Too few (\u0026lt; 10): high profit per trade but low trading frequency, poor capital utilization Too many (\u0026gt; 50): thin margins per trade, fees eat into profits Recommended: 20–30 levels, balancing profit and frequency Capital Allocation Never all-in a single grid strategy.\nMy rule of thumb:\nSingle grid strategy ≤ 20% of total capital Run grids on multiple symbols to diversify Reserve 30% in cash for extreme market moves Risk Management: More Important Than Profits Stop-Loss Level Pionex lets you set a stop-loss price. I recommend:\nSet it 5–10% below the grid\u0026rsquo;s lower bound The strategy auto-stops when triggered, preserving remaining capital Black Swan Events In sharp downtrends, the grid keeps buying, leaving you with heavy spot holdings and mounting losses.\nMitigation:\nAlways set a stop-loss Never run grids with leverage (leverage magnifies liquidation risk) Consider manual intervention if the drop exceeds 30% Mistakes I\u0026rsquo;ve Made Mistake 1: Picked the wrong oscillation range\nI set the range where a downtrend was just beginning. The price crashed through the lower bound, the strategy stopped, and I held a pile of underwater spot.\nLesson: study the chart before opening a grid. Don\u0026rsquo;t open grids when a clear downtrend is underway.\nMistake 2: Too many grid levels, fees kill profits\nRan 20 levels for a month—fees ate up nearly 40% of the profit.\nLesson: fees take a bigger bite on low-value coins. Prioritize major liquid pairs.\nMistake 3: No stop-loss set\nAn altcoin crashed 60%, the grid kept catching the knife, losses were brutal.\nLesson: stop-loss is mandatory, not optional.\nCurrent Performance I\u0026rsquo;m currently running grids on several major pairs on Pionex. Overall results:\nOscillating markets: 2–4% monthly Trending markets: roughly breakeven or slight loss Extreme moves: stopped out and protected Not spectacular, but better than idle cash, and it\u0026rsquo;s fully automated.\nWant to discuss grid parameters or share strategies? Drop by Telegram to chat.\nFurther reading:\nPionex vs Binance Grid Trading — which platform to pick Commanding Quant Bots with OpenClaw — automating signal dispatch ⚠️ Disclaimer: This article documents personal experience and is not investment advice. Cryptocurrency markets carry extreme risk—fully understand the risks before investing.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/pionex-grid-trading/","summary":"\u003cblockquote\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eKYC Requirements\u003c/strong\u003e: Pionex doesn\u0026rsquo;t support KYC verification with mainland China IDs. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or similar regions. See \u003ca href=\"https://support.pionex.com/hc/en-us/articles/5929910517273\"\u003ePionex\u0026rsquo;s official regional restrictions\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Crowd at an exhibition with booths and displays.\" loading=\"lazy\" src=\"/images/pionex-grid-trading-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eGrid trading is the longest-running quant strategy I\u0026rsquo;ve deployed—simple but effective. This article shares my real experience running grid trading on \u003ca href=\"https://aff.panshi.io/track?id=pionex\"\u003ePionex\u003c/a\u003e. It\u0026rsquo;s not about getting rich overnight, but how to steadily let automated trading help you profit from market oscillations.\u003c/p\u003e","title":"Pionex Grid Robot in Practice: Parameter Setup, Risk Management, and the Pitfalls I've Encountered"},{"content":" I\u0026rsquo;ve been using Claude Code—Anthropic\u0026rsquo;s CLI tool—to manage my fleet of servers since last year, and it\u0026rsquo;s genuinely changed how I work with infrastructure. This is what AI should be doing: not chatting, but actually getting things done.\nMy setup 9 overseas VPS instances (AWS / DMIT / Tencent Cloud), distributed across the US, Hong Kong, Japan, and Singapore, running:\nProxy nodes (Xray + Hysteria2) Quantitative trading strategies Monitoring stack (Prometheus + Grafana) Various automation scripts I used to SSH into each machine manually. Now I just tell Claude Code \u0026ldquo;update the Xray config on the Japan machine,\u0026rdquo; and it handles the SSH connection, modifies the config, restarts the service, and verifies it\u0026rsquo;s working.\nThe Skill system: giving AI domain expertise Claude Code lets you define custom Skills (think of them like system prompts for specific contexts). I\u0026rsquo;ve built Skills for different task domains:\nInfrastructure operations Skill # Server Operations Assistant You manage these VPS instances: - aws-us: 13.x.x.x (US) - aws-hk: 43.x.x.x (Hong Kong) - aws-jp: 3.x.x.x (Japan) SSH port is 18022 uniformly, username ubuntu, PEM key authentication. Standard procedure: 1. Check if the machine is online before connecting (ping test) 2. Back up config files before making changes 3. Verify service status after changes 4. Roll back immediately if anything breaks Now Claude has my infrastructure context built in—no need to repeat details every time.\nQuantitative operations Skill A dedicated Skill for managing trading strategies that includes:\nHow to check strategy status Common error handling procedures Steps for adjusting leverage With these Skills in place, I usually just say a sentence or two to Claude, and it figures out what to do from there.\nReal-world workflow examples Scenario 1: Strategy alert at 3am Telegram notification: the quant machine\u0026rsquo;s memory usage hit 95%.\nBefore: I\u0026rsquo;d have to get up, SSH in, read logs, diagnose, and fix.\nNow: Claude analyzes the alert automatically (I\u0026rsquo;ve set up workflows), and either fixes common issues directly or only wakes me for complex ones.\nScenario 2: Deploying a new machine Just bought a new DMIT VPS. I tell Claude: \u0026ldquo;Deploy this machine with the standard configuration.\u0026rdquo;\nClaude will:\nSSH in Update the system Install dependencies Deploy Xray + Hysteria2 Configure the firewall Test connectivity Add the new node to the mihomo config I just watch it happen. When it needs a decision, it asks. The whole process is 5-10x faster than doing it manually, with fewer mistakes.\nScenario 3: Debugging network issues A node stops responding. I say: \u0026ldquo;Help me troubleshoot connectivity on aws-hk.\u0026rdquo;\nClaude will:\nTest from multiple angles (TCP/UDP/DNS) Check system logs Review firewall rules Give me a diagnosis and repair steps Cost efficiency Claude Code uses the Claude API with pay-as-you-go pricing. I use Copilot Pro+ (subscription), which has usage limits.\nA few ways I keep costs down:\nGood Skills save tokens: Better context means fewer conversation turns Batch operations: Combine multiple tasks into one conversation Right-size the model: Not everything needs the most powerful model My monthly Claude Code usage cost stays reasonable relative to the time it saves me.\nTips for getting started Start small: Ask Claude to write a script or look up documentation—build confidence gradually Write detailed Skill contexts: Give it your environment details, the more the better Keep reviewing results: AI makes mistakes; verify before and after critical operations Use plan mode for complex work: Let it plan first, you review, then execute Want to talk Claude Code tips or AI-powered operations workflows? Find me on Telegram or @panshi8848 on X.\nFurther reading:\nClaude API cost guide — controlling API usage and expenses What is OpenClaw — an AI toolchain integration platform Monitoring Pionex bots with Claude Code — build a practical quant monitoring script in 30 minutes Writing Binance futures risk controls with Claude — get alerts 3 hours before liquidation One of the best places to practice with AI tools is quantitative trading—it combines real code needs with ongoing maintenance and optimization. If you\u0026rsquo;re new to automated trading, Pionex is the easiest entry point: 16 built-in bots, no code required.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/claude-code-workflow/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"person using MacBoook\" loading=\"lazy\" src=\"/images/claude-code-workflow-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ve been using Claude Code—Anthropic\u0026rsquo;s CLI tool—to manage my fleet of servers since last year, and it\u0026rsquo;s genuinely changed how I work with infrastructure. \u003cstrong\u003eThis is what AI should be doing: not chatting, but actually getting things done.\u003c/strong\u003e\u003c/p\u003e\n\u003ch2 id=\"my-setup\"\u003eMy setup\u003c/h2\u003e\n\u003cp\u003e9 overseas VPS instances (AWS / DMIT / Tencent Cloud), distributed across the US, Hong Kong, Japan, and Singapore, running:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eProxy nodes (Xray + Hysteria2)\u003c/li\u003e\n\u003cli\u003eQuantitative trading strategies\u003c/li\u003e\n\u003cli\u003eMonitoring stack (Prometheus + Grafana)\u003c/li\u003e\n\u003cli\u003eVarious automation scripts\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI used to SSH into each machine manually. Now I just tell Claude Code \u0026ldquo;update the Xray config on the Japan machine,\u0026rdquo; and it handles the SSH connection, modifies the config, restarts the service, and verifies it\u0026rsquo;s working.\u003c/p\u003e","title":"Claude Code in Real Use: How I Manage 9 Servers with AI"},{"content":"\nI\u0026rsquo;ve hit plenty of pitfalls choosing VPS providers. This article shares providers I\u0026rsquo;ve actually used — straight conclusions, no fluff.\nVPS Selection: Core Metrics VPS for proxy tunneling is different from standard hosting. There are three core metrics:\nLatency: Ping to mainland China — lower is better Stability: How likely is the IP to get blocked, and how much line jitter do you see Exit quality: CN2 GIA \u0026gt; standard BGP; direct peering \u0026gt; relay DMIT: My Current Primary I\u0026rsquo;m using DMIT nodes in Hong Kong and the US, and I\u0026rsquo;ve been happy with them for about a year.\nPros:\nHong Kong nodes have extremely low latency (usually 20–40ms ping from Guangzhou) Excellent line quality, native IPs, strong media streaming unlock Supports Hysteria2 with noticeable UDP acceleration benefits Cons:\nPricey — Hong Kong base tier isn\u0026rsquo;t cheap per month Sometimes the purchase page needs patience for inventory Best for: Users sensitive to latency and who need high stability.\nTencent Cloud International: Japan Node Backup Beyond my aws-jp, I keep a Tencent Cloud Japan node as a fallback.\nPros:\nIntegrated with China\u0026rsquo;s Tencent backbone network; Japan node latency is solid Occasional heavy discounts make pricing very competitive Cons:\nHigher IP block probability than DMIT Weaker customer support AWS: Quant-Only, Not Recommended for Proxy My quant strategies run on AWS — the network is stable, but:\nIP ranges are too well-known, easy to identify and block Expensive Wrong tool for proxy use; suited for API-facing backend services Residential IP: IPRoyal For tasks requiring residential IPs (account registration, strict-access websites), I recommend IPRoyal.\nBilled by GB — no monthly commitment, pay as you go. Consistent quality, with country/city selection.\nMy Current Setup Primary route: DMIT Hong Kong (lowest latency first choice) Backup routes: DMIT US / Japan (auto-failover) Residential IP: IPRoyal (on-demand) Multi-path redundancy is the key — single points of failure never hold up.\nProtocol Selection After getting a VPS, here\u0026rsquo;s my protocol advice:\nXray (VLESS/XTLS): Primary protocol, strong censorship resistance → full deployment guide Hysteria2: UDP-based, fast, ideal for high-bandwidth scenarios Deploy both protocols together, let mihomo auto-switch → multi-gateway architecture IP got blocked? See this emergency response guide.\nHave specific needs or unsure which to pick? Reach out on Telegram — I\u0026rsquo;ll do my best to suggest what fits your scenario.\n📷 Hero image · Flux Schnell AI generated · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/vps-selection-guide/","summary":"\u003cp\u003e\u003cimg alt=\"System with various wires managing access to centralized res\" loading=\"lazy\" src=\"/images/vps-selection-guide-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ve hit plenty of pitfalls choosing VPS providers. This article shares providers I\u0026rsquo;ve actually used — straight conclusions, no fluff.\u003c/p\u003e\n\u003ch2 id=\"vps-selection-core-metrics\"\u003eVPS Selection: Core Metrics\u003c/h2\u003e\n\u003cp\u003eVPS for proxy tunneling is different from standard hosting. There are three core metrics:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eLatency\u003c/strong\u003e: Ping to mainland China — lower is better\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStability\u003c/strong\u003e: How likely is the IP to get blocked, and how much line jitter do you see\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eExit quality\u003c/strong\u003e: CN2 GIA \u0026gt; standard BGP; direct peering \u0026gt; relay\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"dmit-my-current-primary\"\u003eDMIT: My Current Primary\u003c/h2\u003e\n\u003cp\u003eI\u0026rsquo;m using \u003ca href=\"https://aff.panshi.io/track?id=dmit\"\u003eDMIT\u003c/a\u003e nodes in Hong Kong and the US, and I\u0026rsquo;ve been happy with them for about a year.\u003c/p\u003e","title":"2026 VPS Purchasing Guide: Comparison of Several Providers I've Used"},{"content":"Writing Quant Strategies with Claude Building quant strategies has a high barrier to entry: you need to understand trading logic and write code. Claude cuts that barrier in half — you just need to know the trading logic, and it handles the code part.\nThis article documents my process of building a complete quantitative signal system from scratch with Claude.\nMy Strategy Background I run a breakout trend strategy with Donchian Channels as the core logic:\nWhen price breaks above the highest high of the last N candles → buy When price breaks below the lowest low of the last M candles → sell Sounds simple, but building a system that runs automatically across 8 assets, 3 timeframes, and pushes signals to Telegram every 30 minutes requires real engineering work.\nStep 1: Describing Strategy Logic to Claude My prompt was straightforward:\n\u0026ldquo;Write me a Python script that pulls 1-hour BTC candles using yfinance and implements a Donchian Channel breakout strategy: buy when price breaks above the highest of the last 20 candles, sell when it breaks below the lowest of the last 10 candles. Send Telegram messages via openclaw whenever the signal changes.\u0026rdquo;\nClaude\u0026rsquo;s initial version covered:\nyfinance data fetching Signal calculation logic State persistence (to avoid duplicate messages) openclaw CLI calls for messaging This step took about 10 minutes.\nStep 2: Iterating \u0026amp; Improving The initial strategy had one problem: false signals in choppy markets, buying and selling repeatedly and losing money to fees.\nI told Claude:\n\u0026ldquo;Skip buy signals during choppy markets (low ADX, tight ATR); only execute during trending conditions (ADX \u0026gt; 22, price above EMA200). Add ATR-based trailing stop-loss.\u0026rdquo;\nClaude added these improvements:\nADX state detection: distinguishing trending vs. choppy markets ATR trailing stop: dynamically adjusting stop-loss during the position Adaptive parameters: different ATR multipliers for different asset classes (crypto k=2.55, commodities k=1.8) The iteration cycle was: I describe the problem → Claude refactors → I backtest → rinse and repeat. After about 3 rounds, the strategy stabilized.\nStep 3: Multi-Asset \u0026amp; Multi-Timeframe Scaling from single-asset to 8 assets hit an engineering bottleneck: fetching data for 8 assets simultaneously was slow, and yfinance has rate limits.\nThe solution was incremental caching with a \u0026ldquo;probe\u0026rdquo; mechanism Claude designed:\ndef probe_last_bar_ts(symbol, interval): \u0026#34;\u0026#34;\u0026#34;Only fetch the last few candles to check for new bars\u0026#34;\u0026#34;\u0026#34; # If timestamp hasn\u0026#39;t changed, skip recalculation entirely ... Now on each run, symbols with no new data are skipped entirely — performance improved 5–10x.\nFinal Performance Here\u0026rsquo;s the 2024+ backtest comparison: pure Donchian vs. the hybrid version (with ATR/ADX filters):\nThe hybrid version significantly reduced trade frequency during choppy markets (BTC H1 2024), cutting fee drag; during trending runs (BTC Q4 2024 rally), it tracked almost as well.\nSignal annotations on BTC 4H with the hybrid strategy:\nKey Lessons 1. Describe \u0026ldquo;anomalies\u0026rdquo; in natural language and let Claude fix them\nDon\u0026rsquo;t say \u0026ldquo;optimize strategy performance.\u0026rdquo; Say \u0026ldquo;In BTC\u0026rsquo;s March 2024 consolidation, the strategy triggered 12 buy-sell cycles in two weeks and lost ~3% to fees — how can we reduce that?\u0026rdquo;\nSpecific problem descriptions beat vague optimization goals by 10x.\n2. Have Claude explain first, then code\nFor complex logic (like adaptive state machines), have Claude explain the implementation approach in prose first, confirm the logic is correct, then write code. Saves tons of debugging.\n3. Backtest on real data\nClaude can simulate backtests and the results look great. But before going live, always run it on real historical data (yfinance is plenty) and verify the numbers match before deploying to production.\nToolchain Data: yfinance (free, covers stocks / futures / crypto) Compute: pandas, numpy Messaging: OpenClaw CLI (openclaw message send) Scheduling: Linux cron, runs every 30 minutes Hosting: runs on a local LAN Linux box, or any VPS Questions about strategy code or backtesting methodology? Drop by Telegram.\n⚠️ This article documents personal practice only and does not constitute investment advice. Past performance of quant strategies does not guarantee future results; live trading requires proper risk management.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/claude-write-quant-strategy/","summary":"\u003ch1 id=\"writing-quant-strategies-with-claude\"\u003eWriting Quant Strategies with Claude\u003c/h1\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Computer monitor displaying code in a dark room.\" loading=\"lazy\" src=\"/images/claude-write-quant-strategy-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eBuilding quant strategies has a high barrier to entry: you need to understand trading logic \u003cem\u003eand\u003c/em\u003e write code. Claude cuts that barrier in half — you just need to know the trading logic, and it handles the code part.\u003c/p\u003e\n\u003cp\u003eThis article documents my process of building a complete quantitative signal system from scratch with Claude.\u003c/p\u003e","title":"Writing quantitative strategies with Claude: The complete process from zero to signal delivery"},{"content":" You\u0026rsquo;ve bought a VPS and written quant strategy code, but how do you get it to \u0026ldquo;run automatically\u0026rdquo; and \u0026ldquo;tell you what\u0026rsquo;s happening at any moment\u0026rdquo;? That\u0026rsquo;s where most people get stuck.\nI solved this with OpenClaw.\nWhat is OpenClaw Simply put: a framework that lets AI assistants call various tools.\nIts core capabilities are:\nProvides CLI tools (openclaw message send) to send Telegram/Discord messages from any script Has a Skill system to equip AI with various capabilities (GitHub, Notion, weather, custom scripts) Supports cron scheduled tasks and remote triggering For quant trading, the most useful part is message push notifications.\nMy Quant Signal Push Architecture cron (every 30 minutes) ↓ signal_monitor.py (fetch data → compute signal → compare to last state) ↓ new signal? ├── yes → generate_report.py (generate PDF) │ ↓ │ openclaw message send (send Telegram) │ ├── group (@ signal notifications) │ └── private message (attach PDF + timing stats) └── no → openclaw message send (private message check-in) Runs on a Linux machine in the local network 24/7 without interruption.\nKey Code Snippets Sending Messages import subprocess def send_telegram(text, pdf_path, target): subprocess.run([ \u0026#34;openclaw\u0026#34;, \u0026#34;message\u0026#34;, \u0026#34;send\u0026#34;, \u0026#34;--channel\u0026#34;, \u0026#34;telegram\u0026#34;, \u0026#34;--target\u0026#34;, target, \u0026#34;--message\u0026#34;, text, \u0026#34;--media\u0026#34;, pdf_path ], check=True) # Push to group (fill target with group ID, negative number) send_telegram(signal_text, pdf, \u0026#34;-100xxxxxxxxxx\u0026#34;) # Push to private message (fill target with personal user ID) send_telegram(signal_text + f\u0026#34;\\n Time elapsed: {elapsed:.2f}s\u0026#34;, pdf, \u0026#34;your_UserID\u0026#34;) This single command replaces the entire Telegram Bot SDK integration, saving the hassle of handling webhooks and polling.\nIncremental Caching: Avoid Duplicate Pushes The easiest pitfall in signal systems: pushing the same signal every run.\nSolution: use a state file to track already-pushed signals.\nSTATE_FILE = \u0026#34;~/.openclaw/workspace/.openclaw/signal_state.json\u0026#34; def load_state(): # Load previous state ... def main(): state = load_state() for asset in ASSETS: signal = compute_signal(asset) key = f\u0026#34;{asset}_{signal.type}_{signal.ts}\u0026#34; if state.get(key): continue # Already pushed, skip state[key] = True push_signal(signal) save_state(state) Combined with a \u0026ldquo;probe\u0026rdquo; mechanism (check the latest bar timestamp first, skip if unchanged), execution time drops from 60 seconds to 5–10 seconds per run.\nScheduled Tasks # /etc/cron.d/quant_strategy 0,30 * * * * as cd ~/.openclaw/workspace \u0026amp;\u0026amp; \\ MPLBACKEND=Agg ~/.openclaw/workspace/.venv_quant/bin/python \\ scripts/signal_monitor.py \u0026gt;\u0026gt; .openclaw/signal_monitor.log 2\u0026gt;\u0026amp;1 MPLBACKEND=Agg is key—servers lack displays, so matplotlib needs a non-interactive backend to generate images.\nReal Telegram Messages You\u0026rsquo;ll Receive When a signal appears:\n【Hybrid Strategy Signal】2026-04-08 16:00:00 - BTC 4h: Buy, price 83420.5000, logic=adaptive, time 2026-04-08 16:00:00 - ETH 4h: Buy, price 1628.3300, logic=adaptive, time 2026-04-08 16:00:00 Latest hybrid PDF attached. When there\u0026rsquo;s no signal (private message check-in):\n【Hybrid Strategy Check-in】2026-04-08 16:30:00 No new buy/sell signals at the moment. Strategy execution time: 7.43s Computation mode: hot:cache_hit The computation mode field tells you whether this run used cache (hot) or recomputed certain assets (warm/cold).\nRunning Dual Strategies on Two Machines I run one strategy on each of two machines:\nOne runs the Tang-Chi version (original breakout strategy) One runs the hybrid version (ATR/ADX adaptive) Both strategies\u0026rsquo; signals push to the same Telegram group for cross-checking. When both strategies give a buy signal, confidence is higher.\nHandling Failures Signals stop pushing: check logs first—usually yfinance data fetch timeout. Solution: add retry logic or temporarily switch data sources.\nopenclaw command not found: PATH issue. The cron environment has a narrower PATH than login shells—set a complete PATH at the top of the cron file or use absolute paths.\nPDF generates garbled text: missing Chinese fonts. Fix: sudo apt-get install fonts-noto-cjk.\nHaving issues building your quant notification system? Find me on Telegram.\n⚠️ This post documents personal practice only and does not constitute investment advice.\n📷 Cover image · Generated with Flux Schnell AI · Panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/openclaw-quant-workflow/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Child and robot interacting with projected bubbles\" loading=\"lazy\" src=\"/images/openclaw-quant-workflow-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eYou\u0026rsquo;ve bought a VPS and written quant strategy code, but how do you get it to \u0026ldquo;run automatically\u0026rdquo; and \u0026ldquo;tell you what\u0026rsquo;s happening at any moment\u0026rdquo;? That\u0026rsquo;s where most people get stuck.\u003c/p\u003e\n\u003cp\u003eI solved this with OpenClaw.\u003c/p\u003e\n\u003ch2 id=\"what-is-openclaw\"\u003eWhat is OpenClaw\u003c/h2\u003e\n\u003cp\u003eSimply put: \u003cstrong\u003ea framework that lets AI assistants call various tools\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eIts core capabilities are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eProvides CLI tools (\u003ccode\u003eopenclaw message send\u003c/code\u003e) to send Telegram/Discord messages from any script\u003c/li\u003e\n\u003cli\u003eHas a Skill system to equip AI with various capabilities (GitHub, Notion, weather, custom scripts)\u003c/li\u003e\n\u003cli\u003eSupports cron scheduled tasks and remote triggering\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFor quant trading, the most useful part is \u003cstrong\u003emessage push notifications\u003c/strong\u003e.\u003c/p\u003e","title":"Orchestrating quantitative trading with OpenClaw: from signal computation to Telegram notifications"},{"content":"OpenClaw Intro \u0026amp; Setup If you\u0026rsquo;ve used Claude Code, you can think of OpenClaw as its \u0026ldquo;async version\u0026rdquo;—Claude Code is great when you\u0026rsquo;re sitting at your computer working interactively, while OpenClaw is designed to let AI help you continuously in the background, even when you\u0026rsquo;re away from your desk.\nWhat OpenClaw Is Actually For One sentence: Give your AI assistant the ability to access and operate external tools, and interact with you through Telegram and other channels.\nThe problems it solves:\nAI models can\u0026rsquo;t reach out to you on their own (you have to ask before they answer) AI models have no persistent state (each conversation starts from scratch) AI models can\u0026rsquo;t directly manipulate external systems (GitHub, Notion, servers) OpenClaw solves all three through the Skill system.\nThe Skill System A Skill is the core concept of OpenClaw: each Skill gives your AI a new tool to work with.\nExamples of existing Skills:\nSkill What It Does github Read/write Issues, PRs, Actions obsidian Read/write Obsidian vault notes weather Query weather (open-meteo) notion Notion page/database operations healthcheck System security scanning skill-creator Create custom Skills Install a Skill:\nopenclaw skill install github Once installed, you can tell your AI assistant on Telegram \u0026ldquo;check for new Issues in the claude-code repo today\u0026rdquo; and it\u0026rsquo;ll operate GitHub directly.\nOpenClaw vs Claude Code Dimension Claude Code OpenClaw How You Interact Terminal (interactive) Telegram (async) Best For Writing code, editing files in real time Background tasks, monitoring When You Use It When you\u0026rsquo;re at your computer When you\u0026rsquo;re away Context Per-session Persistent (with state files) They complement each other: Claude Code handles writing logic and editing code, OpenClaw handles automation and notifications.\nMy Dual-Machine Setup I run OpenClaw on two devices:\nMac (admin): Main assistant, daily Q\u0026amp;A and tool calls Linux server (1.9): Dedicated quant machine, 24/7 signal monitoring\nConfig file on Mac at ~/.openclaw/openclaw.json:\n{ \u0026#34;bot_token\u0026#34;: \u0026#34;...\u0026#34;, \u0026#34;telegram_chat_id\u0026#34;: \u0026#34;your_telegram_user_id\u0026#34;, \u0026#34;model\u0026#34;: \u0026#34;claude-opus-4-6\u0026#34;, \u0026#34;skills\u0026#34;: [\u0026#34;github\u0026#34;, \u0026#34;obsidian\u0026#34;, \u0026#34;weather\u0026#34;, \u0026#34;healthcheck\u0026#34;] } The Linux server mainly uses the openclaw message send CLI command to push notifications—it doesn\u0026rsquo;t need full AI capabilities configured.\nScheduled Tasks: Making AI Do Work Proactively OpenClaw supports cron triggers. I have it send me the weather forecast every morning:\n# cron config 0 7 * * * openclaw cron run daily-weather-check I also attach quant signal scripts and health check scripts to cron—the server runs them automatically and notifies me on Telegram if anything goes wrong.\nWho Should Use This Multiple machines: Want AI to help manage services scattered across multiple servers Need async notifications: Strategy signals, service alerts, scheduled reports Tired of building Telegram Bots: One openclaw message send command, no need to implement Bot API yourself Not ideal for:\nYou just want AI to write code (Claude Code is better) You need real-time back-and-forth conversation (Claude.ai is better) Quick Start # Install npm install -g openclaw # Initialize (guided setup for Telegram Bot Token) openclaw init # Test sending a message openclaw message send --channel telegram --target your_user_id --message \u0026#34;test message\u0026#34; # Install a Skill openclaw skill install weather # Start the gateway (so Telegram messages can trigger AI) openclaw gateway start Real-World Example: OpenClaw + Quant Trading OpenClaw\u0026rsquo;s real value shines in \u0026ldquo;AI + external system orchestration\u0026rdquo; scenarios. Here\u0026rsquo;s one I actually use:\nTrigger: Send \u0026ldquo;check pionex\u0026rdquo; on Telegram Skill chain: OpenClaw reads the message → queries Pionex API for balances → queries Binance API for positions → Claude synthesizes a risk assessment → pushes back to Telegram The whole thing completes in 3 seconds. You can ask for position risk 20 times a day without breaking the bank. Details at OpenClaw Quant Workflow.\nIf you haven\u0026rsquo;t started on crypto quant trading yet, Pionex has 16 built-in trading bots that work without writing a single line of code—it\u0026rsquo;s the perfect sandbox for OpenClaw-style AI tooling.\nQuestions or want to chat about OpenClaw use cases? Find me on Telegram or follow me on X @panshi8848.\n📷 Cover image · Generated with Flux Schnell · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/openclaw-intro-and-setup/","summary":"\u003ch1 id=\"openclaw-intro--setup\"\u003eOpenClaw Intro \u0026amp; Setup\u003c/h1\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Child and robot interacting with projected bubbles\" loading=\"lazy\" src=\"/images/openclaw-intro-and-setup-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eIf you\u0026rsquo;ve used Claude Code, you can think of OpenClaw as its \u0026ldquo;async version\u0026rdquo;—Claude Code is great when you\u0026rsquo;re sitting at your computer working interactively, while OpenClaw is designed to let AI help you continuously in the background, even when you\u0026rsquo;re away from your desk.\u003c/p\u003e\n\u003ch2 id=\"what-openclaw-is-actually-for\"\u003eWhat OpenClaw Is Actually For\u003c/h2\u003e\n\u003cp\u003eOne sentence: \u003cstrong\u003eGive your AI assistant the ability to access and operate external tools, and interact with you through Telegram and other channels\u003c/strong\u003e.\u003c/p\u003e","title":"What is OpenClaw: An integrated platform of AI assistants + toolchain"},{"content":" Hysteria2 is a proxy tool based on the QUIC protocol (UDP) that significantly outperforms TCP in high-loss and high-latency networks. It complements VLESS+XTLS-Reality: use Hysteria2 when TCP is throttled, and VLESS+Reality when UDP is blocked—deploying both protocols together is currently the most stable approach.\nWhy Choose Hysteria2 Core advantages:\nQUIC/UDP-based, maintains good speed even in high-loss networks Built-in bandwidth obfuscation makes traffic patterns harder to identify precisely Simple configuration, lighter weight than Xray Native support in mihomo (Clash Meta) Use cases:\nScenario Recommended Protocol TCP throttled by QoS Hysteria2 ✓ UDP blocked VLESS+XTLS Daily use (both available) mihomo auto-switch Prerequisites An overseas VPS; DMIT is recommended (supports Hysteria2 UDP traffic) Ubuntu 22.04+ A domain (optional—self-signed certificates work fine) Server Deployment Install Hysteria2 bash \u0026lt;(curl -fsSL https://get.hy2.sh/) After installation, the binary is at /usr/local/bin/hysteria and the systemd service is named hysteria-server.\nGenerate Self-Signed Certificate If you don\u0026rsquo;t have a domain, use a self-signed certificate:\nopenssl req -x509 -nodes -newkey ec -pkeyopt ec_paramgen_curve:P-256 \\ -keyout /etc/hysteria/server.key \\ -out /etc/hysteria/server.crt \\ -subj \u0026#34;/CN=bing.com\u0026#34; -days 3650 chown hysteria /etc/hysteria/server.key /etc/hysteria/server.crt Server Configuration File /etc/hysteria/config.yaml:\nlisten: :443 tls: cert: /etc/hysteria/server.crt key: /etc/hysteria/server.key auth: type: password password: your_password_here (long random string) masquerade: type: proxy proxy: url: https://bing.com rewriteHost: true bandwidth: up: 1 gbps down: 1 gbps Key parameters:\nmasquerade: disguises traffic as normal access to the target website bandwidth: set to your server\u0026rsquo;s actual bandwidth; this affects congestion control and shouldn\u0026rsquo;t exceed actual capacity Start the service:\nsystemctl enable hysteria-server --now systemctl status hysteria-server Open Firewall Port ufw allow 443/udp Note: Hysteria2 uses UDP, so you must open UDP ports—this is easy to miss.\nVerify Server # Check if the service is running normally journalctl -u hysteria-server -f # You should see output like: # server up and running Client Configuration (mihomo) Add this to your mihomo proxy configuration:\nproxies: - name: \u0026#34;DMIT-HK-Hysteria2\u0026#34; type: hysteria2 server: your_VPS_IP port: 443 password: your_password sni: bing.com skip-cert-verify: true # required when using self-signed certificates Dual Protocol Redundancy: Pairing with VLESS+Reality A single protocol is a single point of failure. We recommend deploying both Hysteria2 and VLESS+XTLS-Reality together and configuring auto-switching in mihomo:\nproxy-groups: - name: \u0026#34;Hong Kong\u0026#34; type: fallback url: http://www.gstatic.com/generate_204 interval: 30 proxies: - DMIT-HK-Reality # primary (TCP, anti-detection) - DMIT-HK-Hysteria2 # fallback (UDP, high speed) mihomo checks connectivity every 30 seconds and automatically switches to the backup if the primary is unreachable.\nFor a complete multi-gateway architecture design, see: Home Network Multi-Gateway Architecture\nFAQ UDP Blocked by ISP Some regions\u0026rsquo; ISPs throttle UDP traffic. You can change the Hysteria2 port to something else, or switch to VLESS+Reality (TCP) in this scenario.\nSpeed Slower Than Expected Check if bandwidth is set close to your actual bandwidth Confirm the client also has up/down configured (some mihomo versions auto-negotiate) Verify your VPS doesn\u0026rsquo;t have traffic throttling policies Certificate Errors skip-cert-verify: true is only for self-signed certificate scenarios. If you have a domain, it\u0026rsquo;s recommended to use ACME to automatically obtain a Let\u0026rsquo;s Encrypt certificate for better security.\nVPS Recommendations Hysteria2 relies on UDP, so be aware that some VPS providers impose additional restrictions on UDP traffic.\nDMIT Hong Kong and US nodes are UDP-friendly—we\u0026rsquo;ve tested Hysteria2 fully utilizing available bandwidth. For specific purchasing comparisons, see: VPS Selection Guide\nQuestions about configuration? Feel free to reach out on Telegram.\nFurther reading:\nXray VLESS+XTLS Deployment Guide — TCP protocol complementing Hysteria2 Home Network Multi-Gateway Architecture — unified management of multiple protocol nodes What to Do When Your VPS IP Gets Blocked — emergency solutions 📷 Cover image · Generated by Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/hysteria2-setup/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Abstract streaks of purple and green light\" loading=\"lazy\" src=\"/images/hysteria2-setup-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eHysteria2 is a proxy tool based on the QUIC protocol (UDP) that significantly outperforms TCP in high-loss and high-latency networks. It complements \u003ca href=\"/en/posts/xray-vless-xtls-setup/\"\u003eVLESS+XTLS-Reality\u003c/a\u003e: use Hysteria2 when TCP is throttled, and VLESS+Reality when UDP is blocked—deploying both protocols together is currently the most stable approach.\u003c/p\u003e\n\u003ch2 id=\"why-choose-hysteria2\"\u003eWhy Choose Hysteria2\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eCore advantages:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eQUIC/UDP-based, maintains good speed even in high-loss networks\u003c/li\u003e\n\u003cli\u003eBuilt-in bandwidth obfuscation makes traffic patterns harder to identify precisely\u003c/li\u003e\n\u003cli\u003eSimple configuration, lighter weight than Xray\u003c/li\u003e\n\u003cli\u003eNative support in mihomo (Clash Meta)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eUse cases:\u003c/strong\u003e\u003c/p\u003e","title":"Hysteria2 Deployment Tutorial: High-Speed Proxy Protocol Based on QUIC"},{"content":" Using OpenClaw for automation—the real headache isn\u0026rsquo;t configuration, it\u0026rsquo;s when things mysteriously stop working mid-run. This post covers the failures I\u0026rsquo;ve hit and their fixes.\nGateway Issues Gateway Service Won\u0026rsquo;t Start Symptoms: Telegram messages go unanswered, AI assistant doesn\u0026rsquo;t reply.\nCheck:\nopenclaw gateway status Common Causes \u0026amp; Solutions:\nCause Solution Process crashed openclaw gateway restart Bot Token expired Get a fresh token from BotFather, update config Port conflict Use lsof -i :port to find what\u0026rsquo;s using it, kill it Windows won\u0026rsquo;t auto-start on boot Add to Task Scheduler for startup Windows Caveat: On Windows, Gateway doesn\u0026rsquo;t auto-start with the system. After each reboot, you need to manually launch it:\nopenclaw gateway start I\u0026rsquo;d recommend setting it up as a Task Scheduler startup task.\nGateway Disconnects After a Few Hours Symptoms: Works fine at first, then Telegram stops responding again after a while.\nCause: Telegram\u0026rsquo;s long-polling connection times out, and Gateway doesn\u0026rsquo;t auto-reconnect.\nSolution: Use cron or systemd to keep it alive:\n# Linux - systemd service # /etc/systemd/system/openclaw-gateway.service [Unit] Description=OpenClaw Gateway After=network.target [Service] User=as ExecStart=/usr/local/bin/openclaw gateway start Restart=always RestartSec=10 [Install] WantedBy=multi-user.target sudo systemctl enable openclaw-gateway sudo systemctl start openclaw-gateway Message Delivery Issues openclaw message send Has No Response Troubleshooting steps:\nConfirm openclaw is executable:\nwhich openclaw # Check path openclaw --version Test sending manually:\nopenclaw message send --channel telegram --target your_user_id --message \u0026#34;test\u0026#34; Check openclaw logs:\ntail -f ~/.openclaw/logs/openclaw.log PATH issues in cron: Cron\u0026rsquo;s environment has a minimal PATH, so openclaw might not be found. Fix:\n# Add full PATH at the top of your cron file PATH=/usr/local/bin:/usr/bin:/bin:/home/as/.npm-global/bin Or use absolute paths:\n/home/as/.npm-global/bin/openclaw message send ... Message Sent But Images (PDFs) Don\u0026rsquo;t Arrive Cause: The --media path is wrong or the file doesn\u0026rsquo;t exist.\nCheck:\nls -la /path/to/your/report.pdf # Confirm file exists and is readable Note: Paths must be absolute—never use ~ or relative paths (cron doesn\u0026rsquo;t expand ~).\nTelegram Bot Privacy Mode Issues Symptoms: Bot doesn\u0026rsquo;t receive regular messages in groups (only /commands).\nCause: Telegram bots have privacy mode enabled by default, only accepting messages starting with /.\nSolution: Go to BotFather → Your Bot → Bot Settings → Group Privacy → Disable.\nOnce disabled, the bot can receive regular group messages, and OpenClaw can respond to group mentions.\nSkill Issues Skill Installation Fails on Invoke Symptoms: Installed the github Skill, asked Claude to check an Issue, Claude says \u0026ldquo;I can\u0026rsquo;t access GitHub\u0026rdquo;.\nCause: Skills need API token configuration after installation.\nopenclaw skill config github # Follow the prompts to enter your GitHub Personal Access Token Each Skill has its own config requirements—run openclaw skill config \u0026lt;name\u0026gt; after installing to set it up.\nobsidian Skill Can\u0026rsquo;t Find Files Problem: Asked Claude to read my Obsidian notes, says it can\u0026rsquo;t find them.\nCause: The obsidian Skill needs your vault path configured.\nopenclaw skill config obsidian # vault_path: ~/Library/Mobile Documents/iCloud~md~obsidian/Documents/your_vault_name On macOS, iCloud-synced Obsidian vaults have long paths that need to be verified.\nQuant Scripts matplotlib Errors on Servers Symptoms:\n_tkinter.TclError: no display name and no $DISPLAY environment variable Cause: The server has no GUI; matplotlib defaults to the Tk backend.\nSolution: Add this at the top of your script:\nimport os os.environ[\u0026#34;MPLBACKEND\u0026#34;] = \u0026#34;Agg\u0026#34; import matplotlib matplotlib.use(\u0026#34;Agg\u0026#34;) Or add MPLBACKEND=Agg to your cron environment.\nChinese Characters Show as Boxes in PDFs (Garbled Text) Symptoms: Generated PDFs show Chinese characters as boxes.\nCause: The server doesn\u0026rsquo;t have Chinese fonts.\nSolution:\nsudo apt-get install -y fonts-noto-cjk # Restart processes after installation When reportlab generates PDFs, it needs the font file path. Verify the font location:\nfc-list | grep -i noto yfinance Data Pull Timeouts Symptoms: Strategy script hangs, logs show timeout or Connection reset.\nCause: yfinance connection to Yahoo Finance servers is unstable (network issues from your VPS location).\nSolution:\nAdd retry logic:\nfor attempt in range(3): df = yf.download(symbol, ...) if not df.empty: break time.sleep(5) Use proxy nodes (route VPS traffic through a proxy server—see my proxy architecture post)\nIf a symbol fails repeatedly, temporarily remove it from ASSETS to avoid blocking other symbols.\nLog Analysis Get in the habit of checking logs—most issues are visible there:\n# Watch strategy logs in real-time tail -f ~/.openclaw/workspace/.openclaw/signal_monitor.log # Check the last 50 error lines grep -i \u0026#34;error\\|exception\\|failed\u0026#34; ~/.openclaw/workspace/.openclaw/signal_monitor.log | tail -50 # Check openclaw\u0026#39;s own logs tail -f ~/.openclaw/logs/openclaw.log For issues I haven\u0026rsquo;t covered, hit me up on Telegram and we\u0026rsquo;ll debug it together.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/openclaw-troubleshooting/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Child and robot interacting with projected bubbles\" loading=\"lazy\" src=\"/images/openclaw-troubleshooting-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eUsing OpenClaw for automation—the real headache isn\u0026rsquo;t configuration, it\u0026rsquo;s when things mysteriously stop working mid-run. This post covers the failures I\u0026rsquo;ve hit and their fixes.\u003c/p\u003e\n\u003ch2 id=\"gateway-issues\"\u003eGateway Issues\u003c/h2\u003e\n\u003ch3 id=\"gateway-service-wont-start\"\u003eGateway Service Won\u0026rsquo;t Start\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003eSymptoms\u003c/strong\u003e: Telegram messages go unanswered, AI assistant doesn\u0026rsquo;t reply.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eCheck\u003c/strong\u003e:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eopenclaw gateway status\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003eCommon Causes \u0026amp; Solutions\u003c/strong\u003e:\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eCause\u003c/th\u003e\n          \u003cth\u003eSolution\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eProcess crashed\u003c/td\u003e\n          \u003ctd\u003e\u003ccode\u003eopenclaw gateway restart\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eBot Token expired\u003c/td\u003e\n          \u003ctd\u003eGet a fresh token from BotFather, update config\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePort conflict\u003c/td\u003e\n          \u003ctd\u003eUse \u003ccode\u003elsof -i :port\u003c/code\u003e to find what\u0026rsquo;s using it, kill it\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eWindows won\u0026rsquo;t auto-start on boot\u003c/td\u003e\n          \u003ctd\u003eAdd to Task Scheduler for startup\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eWindows Caveat\u003c/strong\u003e: On Windows, Gateway doesn\u0026rsquo;t auto-start with the system. After each reboot, you need to manually launch it:\u003c/p\u003e","title":"OpenClaw Troubleshooting Guide: Pitfalls I've Encountered and How to Resolve Them"},{"content":" Xray\u0026rsquo;s VLESS+XTLS-Reality is widely recognized as the most robust protocol combination for anti-censorship. Its core principle is disguising traffic as a normal TLS handshake, making it difficult for the GFW to identify proxy traffic through signature detection.\nThis guide walks you through deploying a fully functional setup from scratch.\nPrerequisites An overseas VPS (I recommend DMIT Hong Kong or US nodes for excellent routing quality) VPS OS: Ubuntu 22.04+ Local client: mihomo (formerly Clash Meta) Server Deployment Install Xray bash -c \u0026#34;$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)\u0026#34; @ install Generate XTLS-Reality Keys xray x25519 Output:\nPrivate key: Your private key (save this) Public key: Your public key (add to client config) Generate a UUID:\nxray uuid Server Configuration /usr/local/etc/xray/config.json:\n{ \u0026#34;inbounds\u0026#34;: [ { \u0026#34;port\u0026#34;: 443, \u0026#34;protocol\u0026#34;: \u0026#34;vless\u0026#34;, \u0026#34;settings\u0026#34;: { \u0026#34;clients\u0026#34;: [ { \u0026#34;id\u0026#34;: \u0026#34;your-uuid\u0026#34;, \u0026#34;flow\u0026#34;: \u0026#34;xtls-rprx-vision\u0026#34; } ], \u0026#34;decryption\u0026#34;: \u0026#34;none\u0026#34; }, \u0026#34;streamSettings\u0026#34;: { \u0026#34;network\u0026#34;: \u0026#34;tcp\u0026#34;, \u0026#34;security\u0026#34;: \u0026#34;reality\u0026#34;, \u0026#34;realitySettings\u0026#34;: { \u0026#34;show\u0026#34;: false, \u0026#34;dest\u0026#34;: \u0026#34;www.apple.com:443\u0026#34;, \u0026#34;xver\u0026#34;: 0, \u0026#34;serverNames\u0026#34;: [\u0026#34;www.apple.com\u0026#34;], \u0026#34;privateKey\u0026#34;: \u0026#34;your-private-key\u0026#34;, \u0026#34;shortIds\u0026#34;: [\u0026#34;\u0026#34;] } }, \u0026#34;sniffing\u0026#34;: { \u0026#34;enabled\u0026#34;: true, \u0026#34;destOverride\u0026#34;: [\u0026#34;http\u0026#34;, \u0026#34;tls\u0026#34;, \u0026#34;quic\u0026#34;] } } ], \u0026#34;outbounds\u0026#34;: [ {\u0026#34;protocol\u0026#34;: \u0026#34;freedom\u0026#34;, \u0026#34;tag\u0026#34;: \u0026#34;direct\u0026#34;}, {\u0026#34;protocol\u0026#34;: \u0026#34;blackhole\u0026#34;, \u0026#34;tag\u0026#34;: \u0026#34;block\u0026#34;} ] } Key parameters:\ndest: Masquerade target. Choose a well-known website that supports TLS 1.3 (apple.com or microsoft.com work) serverNames: Must match dest flow: xtls-rprx-vision: Enables XTLS Vision mode for the strongest anti-censorship effect Start and enable auto-boot:\nsystemctl enable xray --now systemctl status xray Open Firewall Port 443 ufw allow 443/tcp ufw allow 443/udp Client Configuration (mihomo) Add this to your mihomo proxy configuration:\nproxies: - name: \u0026#34;DMIT-HK-Reality\u0026#34; type: vless server: your-vps-ip port: 443 uuid: your-uuid network: tcp tls: true udp: true flow: xtls-rprx-vision reality-opts: public-key: your-public-key short-id: \u0026#34;\u0026#34; servername: www.apple.com client-fingerprint: chrome client-fingerprint simulates browser TLS fingerprints. I recommend using chrome.\nAdd Hysteria2 as Dual-Protocol Backup Single-protocol setups are a single point of failure. I also deploy Hysteria2 as a backup:\n# Install Hysteria2 bash \u0026lt;(curl -fsSL https://get.hy2.sh/) Hysteria2 uses QUIC (UDP) and excels when TCP is restricted; VLESS+Reality is more stable when UDP is limited. They complement each other.\nSee my multi-gateway architecture guide for detailed setup.\nVerify the Setup After configuring the server, connect with your client and verify:\n# Check your exit IP curl https://api.ipify.org # Verify traffic is routed through the proxy curl --proxy socks5://127.0.0.1:7890 https://api.ipify.org If the IPs differ, your proxy is working.\nWhy Choose DMIT Deploying Xray requires a high-quality VPS—IP quality directly affects your experience.\nWhy I use DMIT:\nHong Kong nodes have low latency (20–40 ms) with no noticeable lag in daily use Native IP with strong streaming service unlock capabilities Stable routing and lower IP blocking rates compared to competitors For a complete VPS buying guide, see: VPS Selection Guide\nIf you run into issues during setup, feel free to reach out on Telegram.\n📷 Hero image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/xray-vless-xtls-setup/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"From below of long thin blue cables connected to row of smal\" loading=\"lazy\" src=\"/images/xray-vless-xtls-setup-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eXray\u0026rsquo;s VLESS+XTLS-Reality is widely recognized as the most robust protocol combination for anti-censorship. Its core principle is \u003cstrong\u003edisguising traffic as a normal TLS handshake\u003c/strong\u003e, making it difficult for the GFW to identify proxy traffic through signature detection.\u003c/p\u003e\n\u003cp\u003eThis guide walks you through deploying a fully functional setup from scratch.\u003c/p\u003e\n\u003ch2 id=\"prerequisites\"\u003ePrerequisites\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAn overseas VPS (I recommend \u003ca href=\"https://aff.panshi.io/track?id=dmit\"\u003eDMIT\u003c/a\u003e Hong Kong or US nodes for excellent routing quality)\u003c/li\u003e\n\u003cli\u003eVPS OS: Ubuntu 22.04+\u003c/li\u003e\n\u003cli\u003eLocal client: mihomo (formerly Clash Meta)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"server-deployment\"\u003eServer Deployment\u003c/h2\u003e\n\u003ch3 id=\"install-xray\"\u003eInstall Xray\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebash -c \u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003ecurl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e @ install\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"generate-xtls-reality-keys\"\u003eGenerate XTLS-Reality Keys\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003exray x25519\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eOutput:\u003c/p\u003e","title":"Xray VLESS+XTLS Deployment Guide: The strongest proxy protocol against censorship"},{"content":" IP blocks are a common issue for proxy nodes, and I\u0026rsquo;ve dealt with it many times. This article outlines the complete troubleshooting process.\nStep 1: Confirm If It\u0026rsquo;s an IP Block or Something Else When you can\u0026rsquo;t connect to a node, first rule out non-blocking causes:\n# Test IP connectivity from mainland China (use mobile hotspot to rule out local network issues) ping your_VPS_IP # Test if the port is open nc -z -w5 your_VPS_IP 443 \u0026amp;\u0026amp; echo \u0026#34;open\u0026#34; || echo \u0026#34;blocked\u0026#34; Common confusion cases:\nSymptom Likely Cause Ping fails, but SSH works Protocol detected, port blocked SSH also won\u0026rsquo;t connect IP is completely blocked, or VPS is down Ping works, but connection is slow Network congestion, not a block Only drops during peak hours (8-12 PM) QoS throttling, not a block The fastest way to verify if an IP is blocked by the Great Firewall: ping from both domestic and overseas networks. If overseas works but domestic doesn\u0026rsquo;t = blocked.\nOnline tool: ping.pe — enter your IP to test connectivity from multiple countries.\nStep 2: Emergency Switchover If you have a backup node This is the most important lesson: never rely on a single node.\nMy mihomo config has automatic failover:\nproxy-groups: - name: \u0026#34;Auto Select\u0026#34; type: fallback # auto-switches if a node goes down url: http://www.gstatic.com/generate_204 interval: 30 proxies: - DMIT-HK - DMIT-US - Tencent Cloud-JP If the primary node gets blocked, it automatically switches to a backup within 30 seconds — seamless to users.\nNo backup node? Temporary solution: Use a residential IP proxy. iProyal charges per GB with no monthly commitment — use a few GB to bridge the gap.\nQuick fix: See the IP replacement options below.\nStep 3: Replace the IP Option 1: Swap IP in VPS control panel (fastest) Some VPS providers support swapping IPs directly in the control panel:\nUsually costs $1–5 DMIT can do this via support ticket You\u0026rsquo;ll need to reconfigure your client Option 2: Rebuild the VPS (fairly quick) Destroy the current instance and spin up a new one in the same region — you\u0026rsquo;ll likely get a different IP.\nTip: Back up your config files before rebuilding.\n# Back up Xray config scp -P 18022 ubuntu@old_IP:/usr/local/etc/xray/config.json ./xray_backup.json # Restore on new machine scp -P 18022 ./xray_backup.json ubuntu@new_IP:/usr/local/etc/xray/config.json Option 3: Switch regions If a Hong Kong IP gets blocked, temporarily switch to a US or Japan node while you wait — sometimes blocked IPs get unblocked eventually.\nWhy IPs Get Blocked A few common reasons:\n1. Traffic signature detected\nLegacy protocols (Shadowsocks, vanilla VMess) have obvious signatures and are easily recognized by machine learning. Fix: upgrade to VLESS+XTLS-Reality — see setup guide.\n2. Port exposed\nExposing the proxy port on common ports (1080, 8080) makes it easy to discover via scanning. Use port 443 instead (disguised as HTTPS).\n3. Poor IP range quality\nDatacenter IP ranges are known and targeted for blocking. Native IPs and residential IPs have lower block rates.\n4. Heavy traffic during peak hours\nBetween 8 PM and midnight, GFW enforcement increases, and high-traffic nodes are more likely to get flagged.\nLong-Term Anti-Block Strategy 1. Distribute across multiple nodes\nUS + Hong Kong + Japan — at least three nodes. A single node getting blocked won\u0026rsquo;t disrupt your service.\n2. Use high-quality VPS\nDMIT\u0026rsquo;s native IPs and CN2 GIA backbone have significantly lower block rates than budget VPS with standard BGP.\n3. Upgrade your protocol\nVLESS+XTLS-Reality \u0026gt; VMess+WS+TLS \u0026gt; Shadowsocks. Migrating from legacy to modern protocols dramatically reduces detection rates.\n4. Avoid high-risk activities\nDon\u0026rsquo;t run BitTorrent/private trackers on proxy nodes Don\u0026rsquo;t access heavily monitored websites in ways that expose your server IP Keep nodes private (private nodes have much lower block rates than shared nodes) 5. Monitor node health regularly\nUse Prometheus + Grafana to track latency and connectivity — spot anomalies immediately. Configuration reference\nIf you run into a specific IP block scenario, feel free to describe it on Telegram, and we can troubleshoot together.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/vps-ip-blocked-solutions/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"System with various wires managing access to centralized res\" loading=\"lazy\" src=\"/images/vps-ip-blocked-solutions-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eIP blocks are a common issue for proxy nodes, and I\u0026rsquo;ve dealt with it many times. This article outlines the complete troubleshooting process.\u003c/p\u003e\n\u003ch2 id=\"step-1-confirm-if-its-an-ip-block-or-something-else\"\u003eStep 1: Confirm If It\u0026rsquo;s an IP Block or Something Else\u003c/h2\u003e\n\u003cp\u003eWhen you can\u0026rsquo;t connect to a node, first rule out non-blocking causes:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Test IP connectivity from mainland China (use mobile hotspot to rule out local network issues)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eping your_VPS_IP\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# Test if the port is open\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003enc -z -w5 your_VPS_IP \u003cspan class=\"m\"\u003e443\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;open\u0026#34;\u003c/span\u003e \u003cspan class=\"o\"\u003e||\u003c/span\u003e \u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;blocked\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003eCommon confusion cases:\u003c/strong\u003e\u003c/p\u003e","title":"What to do when a VPS IP is blocked: Emergency response and long-term anti-blocking strategies"},{"content":" ⚠️ Registration Requirements: Pionex doesn\u0026rsquo;t support mainland China ID cards for KYC verification. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or similar jurisdictions. See Pionex\u0026rsquo;s official restricted regions notice.\nGrid trading looks the same on the surface, but the differences between Pionex and Binance are bigger than most people realize. I use both, so here\u0026rsquo;s my breakdown of how to choose.\nQuick Comparison Dimension Pionex Binance Grid bot fees Free Requires BNB or additional payment Trading fees 0.05% (maker/taker same) 0.1% (maker) / 0.1% (taker), discounted with BNB Liquidity source Aggregated from Binance + Huobi Binance\u0026rsquo;s own Fund custody Stored in Pionex In your own Binance account Strategy flexibility Preset templates Full API access Bot types 16 built-in Grid + some built-in Fees: Pionex Wins Pionex grid bots are free to use—you only pay 0.05% trading fees (same for makers and takers).\nBinance charges 0.1% fees; with BNB, you get a 25% discount (0.075%).\nRunning grids means dozens of trades daily, so fees directly hit profitability. Pionex\u0026rsquo;s fees are 30–50% lower—the gap really adds up over time.\nQuick math (BTC/USDT, $10,000 capital, 20 fills per day):\nPionex Binance (with BNB discount) Per-trade fee rate 0.05% 0.075% Daily fees 10 USDT 15 USDT Monthly fees 300 USDT 450 USDT Liquidity: Binance Wins Pionex aggregates liquidity from Binance and Huobi, so major pairs are fine. But:\nSlippage on smaller altcoins can be worse than trading directly on Binance In volatile markets, aggregation latency can lead to worse fills If you\u0026rsquo;re mostly trading BTC/ETH, the difference is minimal. For altcoins, I\u0026rsquo;d go with Binance.\nCustody: Binance Wins This is the most important difference.\nPionex: Funds sit on the Pionex platform, so you inherit platform risk (though Pionex has Binance backing).\nBinance: Funds stay in your own account; you grant the bot an API key with trading rights only (no withdrawal). You own the platform risk.\nFor larger amounts, Binance\u0026rsquo;s API approach is safer—even if the bot service crashes, your funds are still yours.\nEase of Use Pionex: Sign up and go. Simple interface, perfect for beginners. A few clicks and you\u0026rsquo;re running a grid.\nBinance: Built-in grid bots are basic. For complex strategies, you\u0026rsquo;ll need to code against their API or use third-party tools.\nMy Approach Starting small / no code wanted: Use Pionex—worry-free, low fees, just start it up.\nLarger capital / custom strategy: Use Binance API with your own code—funds stay yours, max flexibility.\nBoth: Pionex for my main grid, Binance for custom signal strategies (see my quant signal system).\nRegistration Tips Pionex: Sign up via referral link for fee discounts Binance: Sign up via referral link for 20% trading fee rebates Picking an exchange isn\u0026rsquo;t about right or wrong—it\u0026rsquo;s about matching your capital and habits. Got questions? Hit me up on Telegram.\n⚠️ This is just my personal experience, not investment advice. Crypto markets are extremely risky—do your own research and understand the risks before trading.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/pionex-vs-binance-grid/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eRegistration Requirements\u003c/strong\u003e: Pionex doesn\u0026rsquo;t support mainland China ID cards for KYC verification. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or similar jurisdictions. See \u003ca href=\"https://support.pionex.com/hc/en-us/articles/5929910517273\"\u003ePionex\u0026rsquo;s official restricted regions notice\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"white orange and blue round buttons on brown sand\" loading=\"lazy\" src=\"/images/pionex-vs-binance-grid-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eGrid trading looks the same on the surface, but the differences between Pionex and Binance are bigger than most people realize. I use both, so here\u0026rsquo;s my breakdown of how to choose.\u003c/p\u003e","title":"Pionex vs Binance Grid Trading Comparison: Which is More Suitable for You"},{"content":" Claude API costs can easily spiral out of control—stronger models cost more per call, and longer context costs more. This post shares my approach to cost control.\nClaude Model Pricing Comparison (2026) Model Input $/MTok Output $/MTok Use case claude-opus-4-6 $15 $75 Complex reasoning, code generation claude-sonnet-4-6 $3 $15 General tasks, writing claude-haiku-4-5 $0.8 $4 Simple classification, summarization MTok = million tokens. 1 token ≈ 0.75 English words ≈ 0.5 Chinese characters.\nFor the same task, Haiku costs about 15–20x less than Opus.\nThe Most Effective Cost-Saving Tool: Prompt Cache Anthropic\u0026rsquo;s Prompt Cache feature: for the same long system prompt, you pay full price the first time, then only 10% of the price on cache hits afterward.\n# How to enable Prompt Cache response = client.messages.create( model=\u0026#34;claude-sonnet-4-6\u0026#34;, system=[ { \u0026#34;type\u0026#34;: \u0026#34;text\u0026#34;, \u0026#34;text\u0026#34;: \u0026#34;your long system prompt...\u0026#34;, \u0026#34;cache_control\u0026#34;: {\u0026#34;type\u0026#34;: \u0026#34;ephemeral\u0026#34;} # mark as cacheable } ], messages=[{\u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: \u0026#34;user question\u0026#34;}] ) Real impact: My quant ops Skill with about 2000 tokens of system prompt, called 50 times a day:\nWithout cache: 50 × 2000 × $3/MTok = $0.30/day With cache (assuming 90% hit rate): initial $0.006 + hits $0.027 = $0.033/day Saves about 90% on system prompt costs.\nPick the Right Model for the Task The biggest mistake is using the strongest model for everything.\nTask type Recommended model Write code, complex analysis Sonnet or Opus Write articles, answer questions Sonnet Simple classification, judgment Haiku Format conversion, summarization Haiku Claude Code daily use Sonnet (default) In Claude Code, you can use /model to switch models, and it takes effect mid-conversation.\nReduce Unnecessary Tokens 1. Compress system prompts\nRemove redundant instructions and express the same information with fewer words. Compress from 3000 tokens to 1500 tokens, and costs are cut in half.\n2. Control context window size\nThe longer your Claude Code conversation, the more input tokens per call (it includes all conversation history). After finishing complex tasks, use /clear to clear the context and start a new conversation.\n3. Use tools to reduce back-and-forth\nRather than having AI guess what you want and then revise, it\u0026rsquo;s better to write your requirements clearly upfront. One successful attempt is cheaper than three revisions.\nClaude Code\u0026rsquo;s Prompt Cache Effectiveness Claude Code automatically caches system prompts. Measured results:\nA session with complete Skill context (about 5000 tokens of system prompt) achieves near 100% cache hit rate on subsequent messages after the first one, reducing actual input costs by about 80–90%.\nThat\u0026rsquo;s why investing in good Skills is worthwhile—good Skills not only improve AI performance but also save money through cache hits.\nCopilot Pro+ vs. Pure API Comparing the two payment models:\nCopilot Pro+ subscription (monthly)\nFixed monthly fee, no worries about overspending Usage cap (may be rate-limited during peak times) Best for: moderate Claude Code users Pure API pay-as-you-go\nPay for what you use, no limits Best for: heavy users or enterprise use Set spending limits to avoid surprise overages I use Copilot Pro+ myself—it covers my everyday Claude Code usage, though I occasionally hit limits when running large tasks (like analyzing hundreds of files).\nActual Monthly Bill Reference My usage: about 20–30 Claude Code sessions per day, averaging 10 turns per session, mixed task types (writing code, ops, writing articles).\nCopilot Pro+ at $19/month basically covers it. With pure API billing, I\u0026rsquo;d estimate $20–40/month (mostly Sonnet, occasionally Opus).\nFor questions about Claude API usage or billing, feel free to reach out on Telegram or follow X @panshi8848.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/claude-api-cost-guide/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Artificial intelligence concept within a human head\" loading=\"lazy\" src=\"/images/claude-api-cost-guide-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eClaude API costs can easily spiral out of control—stronger models cost more per call, and longer context costs more. This post shares my approach to cost control.\u003c/p\u003e\n\u003ch2 id=\"claude-model-pricing-comparison-2026\"\u003eClaude Model Pricing Comparison (2026)\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eModel\u003c/th\u003e\n          \u003cth\u003eInput $/MTok\u003c/th\u003e\n          \u003cth\u003eOutput $/MTok\u003c/th\u003e\n          \u003cth\u003eUse case\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eclaude-opus-4-6\u003c/td\u003e\n          \u003ctd\u003e$15\u003c/td\u003e\n          \u003ctd\u003e$75\u003c/td\u003e\n          \u003ctd\u003eComplex reasoning, code generation\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eclaude-sonnet-4-6\u003c/td\u003e\n          \u003ctd\u003e$3\u003c/td\u003e\n          \u003ctd\u003e$15\u003c/td\u003e\n          \u003ctd\u003eGeneral tasks, writing\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eclaude-haiku-4-5\u003c/td\u003e\n          \u003ctd\u003e$0.8\u003c/td\u003e\n          \u003ctd\u003e$4\u003c/td\u003e\n          \u003ctd\u003eSimple classification, summarization\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eMTok = million tokens. 1 token ≈ 0.75 English words ≈ 0.5 Chinese characters.\u003c/p\u003e","title":"Claude API cost-saving guide: controlling usage from hundreds down to tens of dollars per month"},{"content":" Running OpenClaw with default config will hit two problems after a while: quota burns too fast and long sessions crash from timeouts. This post logs 8 parameters I actually tuned, and the reasoning behind each.\nArchitecture First Here\u0026rsquo;s my setup:\nGitHub Copilot Pro+: $19/month, 1500 premium requests/month quota Claude Opus 4.6: accessed via Copilot\u0026rsquo;s model routing, model ID github-copilot/claude-opus-4.6 OpenClaw: handles Telegram interactions, Skill calls, scheduled tasks Quota math: each AI assistant reply = 1 premium request (including replies after tool calls). 1500 sounds like plenty, but without optimization it dries up fast.\n8 Standard Optimizations 1. Keep Only Copilot, Clear All Fallbacks Problem: Default config has multiple model providers set as fallbacks. When the primary times out, it tries each fallback in sequence, and each attempt burns quota.\nOptimization:\n{ \u0026#34;agents\u0026#34;: { \u0026#34;defaults\u0026#34;: { \u0026#34;model\u0026#34;: { \u0026#34;primary\u0026#34;: \u0026#34;github-copilot/claude-opus-4.6\u0026#34;, \u0026#34;fallbacks\u0026#34;: [] } } } } With empty fallbacks, failures fail fast instead of triggering 2-3 wasted retries. Saves ~50 requests/month.\n2. Drop Timeout from 600s to 300s Problem: Default 600-second timeout means a stuck request waits 10 minutes to error out, and all subsequent messages queue up behind it.\nOptimization:\n{ \u0026#34;agents\u0026#34;: { \u0026#34;defaults\u0026#34;: { \u0026#34;timeoutSeconds\u0026#34;: 300 } } } 300 seconds is more than enough for normal tasks, gets you faster error detection, and cuts down retries from timeout cascades.\n3. Session Compaction: Safeguard Mode Problem: Long-running ops sessions (like debugging a server problem with dozens of SSH back-and-forths) balloon context until the API rejects it, then triggers retries.\nOptimization:\n{ \u0026#34;compaction\u0026#34;: { \u0026#34;mode\u0026#34;: \u0026#34;safeguard\u0026#34;, \u0026#34;reserveTokensFloor\u0026#34;: 120000 } } safeguard mode automatically compresses history when context nears the model limit, keeping key content while preventing API rejection from oversized context. reserveTokensFloor is your output token buffer.\n4. Context Pruning: 30-Minute TTL This is the single most impactful optimization.\nProblem: Tool call outputs (SSH results, file contents, API responses) are usually huge, but after 30 minutes they\u0026rsquo;re basically useless references yet still eat up context space.\nOptimization:\n{ \u0026#34;contextPruning\u0026#34;: { \u0026#34;mode\u0026#34;: \u0026#34;cache-ttl\u0026#34;, \u0026#34;ttl\u0026#34;: \u0026#34;30m\u0026#34;, \u0026#34;keepLastAssistants\u0026#34;: 5, \u0026#34;minPrunableToolChars\u0026#34;: 30000, \u0026#34;softTrim\u0026#34;: { \u0026#34;maxChars\u0026#34;: 3000, \u0026#34;headChars\u0026#34;: 1000, \u0026#34;tailChars\u0026#34;: 1000 }, \u0026#34;hardClear\u0026#34;: { \u0026#34;enabled\u0026#34;: true, \u0026#34;placeholder\u0026#34;: \u0026#34;[old tool output cleared]\u0026#34; } } } Key parameters:\nttl: \u0026quot;30m\u0026quot;: tool outputs older than 30 minutes become pruning candidates keepLastAssistants: 5: preserve the last 5 AI replies (keeps conversation coherent) minPrunableToolChars: 30000: only prune tool outputs exceeding 30k characters (avoids over-pruning) softTrim: keep first and last 1000 chars, collapse the middle to a placeholder hardClear: when space-critical, fully replace with placeholder text Real impact: context size drops 50%+, long sessions become stable.\n5. Disable Discord Problem: Discord WebSocket connections are unstable. Frequent disconnects trigger gateway errors, which cascade into retries that burn quota.\n{ \u0026#34;channels\u0026#34;: { \u0026#34;discord\u0026#34;: { \u0026#34;enabled\u0026#34;: false } } } My workflow only uses Telegram, so Discord goes straight off. Saves ~100 requests/month.\n6. Disable Heartbeat Problem: Heartbeat is OpenClaw\u0026rsquo;s liveness check—it pings every 30 minutes by default, and each ping = 1 API call.\n{ \u0026#34;agents\u0026#34;: { \u0026#34;defaults\u0026#34;: { \u0026#34;heartbeat\u0026#34;: { \u0026#34;every\u0026#34;: \u0026#34;\u0026#34; } } } } Turning it off saves 48 calls/day, or about 1440 requests/month. This is the single largest saving.\n7. Clean Up Unused Model Providers Problem: If you\u0026rsquo;ve configured multiple model providers (openrouter, various API proxies), the gateway health-checks all of them on startup, burning quota on each check.\n{ \u0026#34;models\u0026#34;: { \u0026#34;providers\u0026#34;: {} } } Keep only github-copilot, delete the rest. Saves 20-50 requests/month.\n8. Disable Exec Approval (New in 4.5+) Problem: New versions default to elevated privilege approval—the AI has to wait for user confirmation on shell commands, blocking automation workflows.\nIn your openclaw.json exec config:\n{ \u0026#34;exec\u0026#34;: { \u0026#34;requireApproval\u0026#34;: false } } Fine for trusted personal ops. Skip this if sharing the instance or automating untrusted tasks.\nOne-Shot Configuration Script All 8 can be applied with this Python script:\nimport json, os path = os.path.expanduser(\u0026#34;~/.openclaw/openclaw.json\u0026#34;) with open(path) as f: c = json.load(f) d = c.setdefault(\u0026#34;agents\u0026#34;, {}).setdefault(\u0026#34;defaults\u0026#34;, {}) # 1. Model + clear fallbacks d[\u0026#34;model\u0026#34;] = {\u0026#34;primary\u0026#34;: \u0026#34;github-copilot/claude-opus-4.6\u0026#34;, \u0026#34;fallbacks\u0026#34;: []} # 2. Timeout 300s d[\u0026#34;timeoutSeconds\u0026#34;] = 300 # 3. Session Compaction d[\u0026#34;compaction\u0026#34;] = { \u0026#34;mode\u0026#34;: \u0026#34;safeguard\u0026#34;, \u0026#34;reserveTokensFloor\u0026#34;: 120000 } # 4. Context Pruning d[\u0026#34;contextPruning\u0026#34;] = { \u0026#34;mode\u0026#34;: \u0026#34;cache-ttl\u0026#34;, \u0026#34;ttl\u0026#34;: \u0026#34;30m\u0026#34;, \u0026#34;keepLastAssistants\u0026#34;: 5, \u0026#34;minPrunableToolChars\u0026#34;: 30000, \u0026#34;softTrim\u0026#34;: {\u0026#34;maxChars\u0026#34;: 3000, \u0026#34;headChars\u0026#34;: 1000, \u0026#34;tailChars\u0026#34;: 1000}, \u0026#34;hardClear\u0026#34;: {\u0026#34;enabled\u0026#34;: True, \u0026#34;placeholder\u0026#34;: \u0026#34;[old tool output cleared]\u0026#34;} } # 6. Disable Heartbeat d[\u0026#34;heartbeat\u0026#34;] = {\u0026#34;every\u0026#34;: \u0026#34;\u0026#34;} # 5. Disable Discord c.setdefault(\u0026#34;channels\u0026#34;, {}).setdefault(\u0026#34;discord\u0026#34;, {})[\u0026#34;enabled\u0026#34;] = False # 7. Clean up providers c.setdefault(\u0026#34;models\u0026#34;, {})[\u0026#34;providers\u0026#34;] = {} with open(path, \u0026#34;w\u0026#34;) as f: json.dump(c, f, indent=2, ensure_ascii=False) print(\u0026#34;Config updated. Restart openclaw gateway to apply.\u0026#34;) Then restart the gateway:\nopenclaw gateway restart Version Compatibility Notes Some parameters only work in newer versions (4.5+); writing them to older versions breaks gateway startup:\nParameter Old ≤3.28 New 4.5+ compaction.notifyUser ❌ unsupported ✅ compaction.memoryFlush ❌ unsupported ✅ auth.cooldowns ❌ unsupported ✅ discord config key allow enabled If gateway restart fails, check openclaw gateway logs for the exact error—usually a version mismatch on some field.\nPost-Optimization Monthly Usage Before: Heartbeat + Discord + fallbacks + context bloat could burn 150+ requests/day.\nAfter (1500 requests/month budget):\nPurpose Daily avg Monthly est Daily ops chats 30-50 requests 600-800 requests Quant strategy audits 0 (direct cron, no AI) 0 Scheduled reports/weather 2 requests 60 requests Total ~660-860 requests With 1500 allocated, you\u0026rsquo;ve got solid headroom. Even a day of intensive ops eating 200 requests won\u0026rsquo;t blow the monthly budget.\nHave OpenClaw config issues or running over quota? Drop by Telegram.\nFurther reading:\nWhat is OpenClaw — architecture overview OpenClaw Troubleshooting — common issues Claude API Cost Guide — cost control for direct API use 📷 Cover image · generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/openclaw-copilot-opus-tuning/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A laptop computer sitting on top of a wooden desk\" loading=\"lazy\" src=\"/images/openclaw-copilot-opus-tuning-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eRunning OpenClaw with default config will hit two problems after a while: \u003cstrong\u003equota burns too fast\u003c/strong\u003e and \u003cstrong\u003elong sessions crash from timeouts\u003c/strong\u003e. This post logs 8 parameters I actually tuned, and the reasoning behind each.\u003c/p\u003e\n\u003ch2 id=\"architecture-first\"\u003eArchitecture First\u003c/h2\u003e\n\u003cp\u003eHere\u0026rsquo;s my setup:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGitHub Copilot Pro+\u003c/strong\u003e: $19/month, 1500 premium requests/month quota\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eClaude Opus 4.6\u003c/strong\u003e: accessed via Copilot\u0026rsquo;s model routing, model ID \u003ccode\u003egithub-copilot/claude-opus-4.6\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eOpenClaw\u003c/strong\u003e: handles Telegram interactions, Skill calls, scheduled tasks\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eQuota math: each AI assistant reply = 1 premium request (including replies after tool calls). 1500 sounds like plenty, but without optimization it dries up fast.\u003c/p\u003e","title":"OpenClaw + GitHub Copilot + Claude Opus 4.6 parameter tuning log"},{"content":"$5,000 in AI Credits: A System Inventory In one month, spending roughly $5,000 on AI subscriptions and APIs (Claude Pro + Claude API + OpenAI API + Copilot Pro+ + Codex + Paseo + miscellaneous), I built out 18 major systems independently, with a total codebase of roughly 50,000+ lines of code (excluding auto-generated AI scripts).\nFor comparison: the same functionality, developed from scratch by 2 full-stack engineers, would conservatively take 6-12 months and cost at least ¥300,000-600,000.\nThis post is an inventory—organized by category, covering what each system does, what problems it solves, and how much human engineering time it would take to build from scratch. I\u0026rsquo;m not diving into technical nitty-gritty (follow the links for detailed architecture), just covering scale and efficiency gains.\nI. Quant Trading Systems (Core) Polaris Strategy Family (three coexisting strategies: polaris 1/5/6):\nBTC trend-following / multi-asset portfolios / perpetual + spot arbitrage Live dual-machine hot standby (automatic failover) All strategies unified under Telegram signal broadcasts Polaris Strategy Intro Backtest Lab (two generations):\nv1 (Streamlit 8501): Basic Python backtest, single asset single parameter v2 (Streamlit 8502, Numba JIT acceleration): multi-asset portfolios, Walk-Forward validation, Monte Carlo simulation, parameter grid search Auto-sync K-line data with live trading machine on aws-sg Strategy Operations Toolchain:\nAutomated parameter optimization (nightly cron grid searches) Daily review reports (aws-sg/jp vectorized computation → AI-generated summary → Telegram) Strategy A/B/C comparison dashboard (Grafana) Mac local sanitized standby machine (5-layer security locks + hourly pull from aws-sg) Human Development Estimate: This stack alone takes 3-4 months minimum. Quant systems span backtest-to-live, parameter search to dual-machine failover—each stage is a medium-sized project.\nWant to dip your toes into quant without coding? Pionex has 16 built-in bots—get started code-free in an hour.\nII. panshi.io Blog + Growth System Hugo Blog + PaperMod Customization:\n64 technical articles covering quant / proxies / AI tools / VPS and more 3-column responsive card grid, dark mode by default (eliminates white-screen flicker) Per-article OG cards + hero images (AI-generated, brand-consistent style) List thumbnails + hero on detail pages Multi-region Deployment:\nDual active: aws-hk + aws-us (rsync sync in seconds) Cloudflare CDN front, md5 triple-check 10+ custom Workers (polaris-api / aff-tracker / vps-stock-api / freemail-w3fomo, etc.) Affiliate Attribution System:\n14 affiliate channels unified under tracker shortlinks Attribution by article (?ref=/posts/xxx/) Attribution by X source (?ref=x-slug) Prometheus scrapes every 5 minutes + Grafana dashboard Self-hosted Umami Event Tracking:\nPage views / referrers / devices Affiliate clicks (custom aff-click event) Human Development Estimate: Blog itself is 2 weeks, but affiliate tracker + multi-region deployment + automation monitoring is 1 month minimum. Image pipeline alone is another month (see below).\nIII. Release Management System (Port 9891 · Standalone Web App) A local web application (http://localhost:9891) dedicated to panshi.io publishing and operations:\n10+ Admin Pages:\nArticle list + affiliate attribution + filtering (all/published/drafts) Embedded Markdown editor (EasyMDE) + live preview Draft/AI request queue OG card preview (see how it looks on X before publishing) Tweet management (list/refresh/delete) Affiliate click dashboard Image library (local + Unsplash/Pexels/Pixabay + AI-generated) Settings (API keys + toggles) Publish history + health dashboard 7-Step Publish Pipeline:\nPre-flight checks (frontmatter / content policy / bare affiliate links / structure linting) Auto-generate OG + hero images Tweet preview Hugo build rsync dual-region + md5 triple-check Post to X (three modes: short tweet / Premium long tweet / thread digest) Telegram notification + attribution refresh 10 Scheduled Tasks (all monitored via job_runner):\nArticle index refresh, link health scan, deployment drift detection, affiliate stats sync Tweet history snapshot, raw affiliate link scan, affiliate exporter health, OG image health Engagement analytics (best publish times + evergreen candidates), persistent publish monitor service Brand-Consistent AI Image Generation:\nFlux Schnell generates 64 hero images in brand colors (deep blue-purple gradient) Homemade PIL generates OG cards (title + brand strip) Auto-compress to WebP + multi-size (7MB hero → 80KB, 90x speedup) Publish Monitoring System Full Architecture\nHuman Development Estimate: This standalone system alone is 2 months minimum.\nIV. Backup \u0026amp; Disaster Recovery (3-2-1 Architecture) Three-Tier Backup:\nL1 Mac SSD: Second-level recovery, short-term history L2 iCloud 2TB: Cross-device, medium-term L3 AWS S3 Deep Archive Tokyo: Disaster recovery, ~¥0.15/month 20+ Backup Tasks covering:\nopenclaw workspace (daily + hourly) Obsidian vault (notes) Mac system config (LaunchAgents, etc.) Quant code and datasets Cloudflare KV / Workers / DNS Remote VPS configs (cron / systemd) Prometheus config + Grafana dashboards panshi.io site + nginx configs Weekly git bundles (cross-machine DR) Monthly S3 archival Standalone Status Page (port 9890): Health indicator for each task (green/yellow/red) + error details + Telegram alerts.\nBoot-Up Backfill Mechanism: When Mac wakes from sleep, automatically re-runs any missed scheduled tasks.\nHuman Development Estimate: Full 3-2-1 backup + unified monitoring is 1.5 months minimum.\nV. Mac Job Monitoring (Port 9888) All Mac local cron / launchd tasks (currently 34) unified under a heartbeat system:\njob_runner.sh wraps all tasks, writes heartbeat timestamps on success Prometheus textfile + node_exporter collection Standalone monitoring server Grafana visualization (Mac monitoring) Real-time Telegram status changes Auto-detect task creation/deletion Human Development Estimate: Monitoring infrastructure + status page is 3 weeks minimum.\nVI. Gateway / Proxy Architecture (Home Office + Quant Exit) Dual Gateway Redundancy:\nPrimary: OpenWrt + passwall (deployed fresh 2026-04-13) Secondary: mihomo (demoted from primary, now fallback) Auto-failover on degradation Home Broadband Proxy Chain:\n7-node auto-fallback (US / Japan / Hong Kong residential ISP) Used for AI tools (ChatGPT / Claude / Gemini account protection) Residential IP exit guarantees quant strategies avoid exchange rate-limiting Surge Fail-Closed Monitoring:\nIf Surge crashes, auto-activate PF firewall killswitch Block all foreign traffic, ensure no domestic routing fallthrough Status bar displays protection status (custom Swift app) Protocol Stack:\nXray VLESS + XTLS + Reality Hysteria2 (QUIC, high-speed) Cloudflare Workers VLESS (zero-cost nodes) Full Residential IP Exit Config · Buy DMIT VPS · IPRoyal Residential IPs\nHuman Development Estimate: Gateway + proxy + fail-closed monitoring is 1+ month.\nVII. NetworkGuard Status Bar App (Swift Native) Standalone macOS status-bar utility:\nReal-time Surge process and PF firewall status monitoring Status icon: green (protected) / red (compromised) Web dashboard with detailed data Prevents \u0026ldquo;MacBook accidental mainland IP on AIGC API → account ban\u0026rdquo; See I Built a Network Security Guard on My Mac Status Bar.\nHuman Development Estimate: Swift + PF interaction is 2 weeks.\nVIII. OpenClaw System (AI Toolchain Orchestration) Foundation: Claude Code + external system integration platform\nTelegram messages trigger AI task chains Multi-agent collaboration (one queries API, one analyzes, one pushes) Skill system extensibility (I have 10+ custom skills) Quant workflow integration (\u0026ldquo;Check all account risk\u0026rdquo; → 3 seconds response) IX. AI Tool Ecosystem (Claude Code / Codex / Copilot / Paseo) Dual-Channel Claude Code:\nOfficial Claude Pro channel (fixed monthly fee) Copilot Pro+ backend channel (free piggyback) One-click alias switching Model Strategy:\nDefault Sonnet (best ROI) Opus fallback when quality insufficient Haiku for batch jobs (90% cost savings) Three-tier mix reduces monthly API spend 60% Session Management:\nPaseo multi-agent mode Claude Code long-session crash recovery Image accumulation auto-cleanup Usage Monitoring:\nCopilot usage hourly + daily summary OpenRouter daily balance check X. cmux Session Management Multiple Claude Code processes in parallel (this article is from one session), each with isolated workspace + isolated git worktree, preventing interference.\nXI. VPS Inventory Real-Time Monitor (panshi.io/stock) Tracks 5 major VPS providers (Bandwagon / RackNerd / CloudCone / DMIT / Akile) popular tier inventory Primary + backup checker redundancy (domestic ISP VPS + overseas VPS) CF Worker aggregation + 5-minute auto-refresh on frontend Subscriber notifications: out-of-stock → in-stock via Telegram Complete VPS Selection Matrix by Use Case.\nHuman Development Estimate: Anti-scraping + primary/backup switchover + subscription notifications is 1 month.\nXII. Telegram Bot Ecosystem 7+ independent bots, each with a role:\nas_monitor: ops alerts (gateway / backups / quant) polaris-signal-to-x: strategy signals → X tweets as_fam: home device monitoring SSH login notifier: every SSH login logged + Telegram push Several others, each with its domain Each bot has its own token + chat_id + alert path, no cross-interference.\nXIII. Monitoring \u0026amp; Alerting Chain (Standalone Monitor Server) Full-Stack Observability:\nPrometheus (metric collection) Grafana (visualization, 13 dashboards) Alertmanager + tg-webhook (Telegram alerts) What\u0026rsquo;s Monitored:\n10+ VPS (CPU/memory/disk/network/SSH logins) Mac local 34 scheduled jobs Quant strategy P\u0026amp;L real-time curves Circuit health (Hysteria2 UDP / Xray TCP / home broadband proxy) Gateway status overview Affiliate clicks / subscriber count (new) Publish system task health XIV. Obsidian + Mac Config Auto-Backup Notes auto-commit + hourly + daily tagged Mac system configs (LaunchAgents / custom scripts / Surge profiles) daily auto-commit to iCloud Auto-recovery flow documentation XV. iPhone / iPad / Mac Surge Profile Sync Three-device Surge profile version control:\nMac is the editor source iPhone / iPad pull with auto domain-vs-IP validation Prevents \u0026ldquo;one device out-of-sync → leaked exit\u0026rdquo; XVI. Remote Desktop + SSH Patrol RustDesk 8K:\nOpen-source + self-hosted relay Cheaper than TeamViewer / AnyDesk, more private SSH Patrol Automation:\nDaily AI auto-inspection of 10+ machines Reports resource use / exception logs / pending items Summary to Telegram XVII. X-Related Systems X Bookmarks Sync: daily pull new bookmarks → organize into Obsidian X API Publishing (polaris-signal-to-x bot) X Thread Digest Publishing (new): Markdown article → AI generates 5-10 tweet thread XVIII. Public GitHub Projects Open-sourced tools (already sanitized):\nclaude-code-image-rescue: Fix Claude Code long-session image memory explosion bug More in the pipeline.\nThree Shifts in AI-Assisted Development After shipping all this, I have a few takes on \u0026ldquo;AI + solo development\u0026rdquo;:\n1. Code isn\u0026rsquo;t the bottleneck anymore—requirements definition is Writing a 500-line Python script with Claude Code usually takes 20-40 minutes of conversation. But \u0026ldquo;what exactly do I need?\u0026quot;—AI can\u0026rsquo;t figure that out for you.\nClear requirements + AI code generation + human review = best workflow.\n2. Deployment and maintenance are worth more than initial dev Of the 18 systems above, 70% of effort isn\u0026rsquo;t \u0026ldquo;write the code,\u0026rdquo; it\u0026rsquo;s:\nWhere does it run? (Mac / server / CF Worker) How to daemonize? (launchd / systemd / cron) How to monitor? (Prometheus + Grafana + alerts) How to recover? (backup strategy) AI shines in system integration scenarios—it won\u0026rsquo;t forget error handling, logging, health checks.\n3. Consistency beats personal preference All systems follow the same playbook:\nLogs: ~/.openclaw/workspace/state/ Heartbeats: Prometheus textfile Alerts: Telegram bot categories Backups: 3-2-1 three-tier Docs: Obsidian Infra-OPS/ 64 files Claude Code\u0026rsquo;s memory system maintains these conventions across sessions better than I remember them myself.\nCost Breakdown (Where $5,000 Went) Item Share Claude API (Anthropic direct billing) ~40% ChatGPT Plus + OpenAI API ~25% GitHub Copilot Pro+ × 2 (two accounts) ~20% Cursor / Codex / other subscriptions ~10% Miscellaneous (Replicate / Cloudinary / etc.) ~5% Realistically, the top 3 (Claude + OpenAI + Copilot) account for 85%—Claude is the workhorse.\nIf You Want to Replicate This Step 1: Start with a real problem to solve Each of my 18 systems addresses a concrete pain point (quant account bans / data loss from crashes / job timeouts / low X publishing velocity). No pain point = no staying power.\nStep 2: Go deep on one tool, not shallow on many My setup:\nClaude Code (80% of my time) — Cost guide GitHub Copilot Pro+ backup — Dual-channel switching ChatGPT Plus occasional data analysis + image generation Skip the simultaneous Cursor + Copilot + ChatGPT + Claude stack—switching costs and subscription fatigue aren\u0026rsquo;t worth it.\nStep 3: Standardize your infrastructure Unified log paths Standard task wrapper (mine\u0026rsquo;s job_runner.sh) Unified Telegram notifications Docs in one Obsidian vault Standardization lets Claude Code transfer patterns across tasks—once it sees the structure of one task, the next one follows naturally.\nStep 4: Allow yourself imperfect shipping Many of my systems are \u0026ldquo;good enough\u0026rdquo; versions, not \u0026ldquo;engineering perfect.\u0026rdquo; For example, the backup status page (port 9890) is just a few hundred lines of Python, no framework. AI generates it, I review, it ships. Don\u0026rsquo;t over-engineer.\nIf You Want to Explore This Too Recommended Tool Stack:\nClaude Code Cost Guide OpenAI Codex CLI Complete Guide OpenClaw AI Orchestration Platform Best Hands-On Entry Point (understand the full chain):\nPionex Grid Bot Tutorial (code-free) Using Claude Code to Monitor Pionex Bot (30-min practice) Open a Pionex account, run $100/month, get tactile sense of AI-assisted quant value Infrastructure Support Tools:\nDMIT VPS (stable HK / JP routes) IPRoyal Residential IPs (essential for AI tools + quant) Google One AI Premium (Gemini Advanced + 2TB cloud storage) An Honest Comparison People ask \u0026ldquo;does AI actually help?\u0026rdquo; Here\u0026rsquo;s my real data:\nTask Without AI With AI (my experience) Write a new script 3-8 hours (docs / Stack Overflow / debugging) 20-40 min (describe need → review → test) Debug an error Sometimes a full day Under 10 min to pinpoint Maintain 30+ jobs 10 hours/month firefighting 1-2 hours/month (mostly AI-handled) Write a tech post 3-4 hours 1 hour (outline manually + AI fills + human review) Learn a new domain 1-2 weeks to baseline Half day (AI tutoring + Q\u0026amp;A) Multiply by 18 system categories + 365 days, and that\u0026rsquo;s where the 100x comes from.\nNot \u0026ldquo;AI replaces people,\u0026rdquo; but \u0026ldquo;person who knows business + knows AI = past solo team of 3.\u0026rdquo;\nWant to chat about AI workflows / quant / independent building: Telegram @panshi8848, or X @panshi8848 DMs.\nFurther Reading:\nClaude Code Real-World Workflow OpenClaw AI Orchestration Platform Claude API Cost Optimization Monitoring Pionex with Claude Code Why Quant Strategies Need Residential IPs ","permalink":"https://blog.panshi.io/en/posts/5000-usd-token-what-i-built/","summary":"\u003ch1 id=\"5000-in-ai-credits-a-system-inventory\"\u003e$5,000 in AI Credits: A System Inventory\u003c/h1\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"What I Built With $5,000 in AI Tokens\" loading=\"lazy\" src=\"/images/5000-usd-token-what-i-built-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eIn \u003cstrong\u003eone month\u003c/strong\u003e, spending roughly \u003cstrong\u003e$5,000 on AI subscriptions and APIs\u003c/strong\u003e (Claude Pro + Claude API + OpenAI API + Copilot Pro+ + Codex + Paseo + miscellaneous), I built out \u003cstrong\u003e18 major systems\u003c/strong\u003e independently, with a total codebase of roughly \u003cstrong\u003e50,000+ lines of code\u003c/strong\u003e (excluding auto-generated AI scripts).\u003c/p\u003e\n\u003cp\u003eFor comparison: the same functionality, developed from scratch by 2 full-stack engineers, would conservatively take \u003cstrong\u003e6-12 months\u003c/strong\u003e and cost at least \u003cstrong\u003e¥300,000-600,000\u003c/strong\u003e.\u003c/p\u003e","title":"I spent $5,000 on API tokens — here's what I built with AI"},{"content":"IPRoyal Rotating Residential IP Proxy in Python IPRoyal\u0026rsquo;s residential IP pool has 20M+ IPs—the trick is knowing how to use them. Sticky mode (30 min per IP) suits account login scenarios, while rotating mode (new IP per request) excels at web scraping, bulk registration, and anti-detection. This guide implements a complete rotating + retry solution in Python.\nTwo modes explained Mode IP Switch Frequency Use Case Sticky Rotate every 10/30 minutes Account login, API calls, long-running quant sessions Rotating New IP on every request Web scraping, bulk registration, anti-detection IPRoyal\u0026rsquo;s dashboard lets you generate credentials for both modes.\nRotating proxy credentials format Log in to IPRoyal Dashboard → Residential → Generate → Select Rotating → You\u0026rsquo;ll get:\nProxy: gw.iproyal.com Port: 12321 Username: YOUR_USER Password: YOUR_PASS_country-us_session-rotate session-rotate is key: every request pulls a fresh IP from the pool.\nPython basics import requests proxy_url = \u0026#34;http://USER:PASS_country-us_session-rotate@gw.iproyal.com:12321\u0026#34; proxies = {\u0026#34;http\u0026#34;: proxy_url, \u0026#34;https\u0026#34;: proxy_url} for i in range(5): r = requests.get(\u0026#34;https://ipinfo.io/json\u0026#34;, proxies=proxies, timeout=10) print(f\u0026#34;Request {i+1}: {r.json()[\u0026#39;ip\u0026#39;]} ({r.json().get(\u0026#39;city\u0026#39;)})\u0026#34;) Expected output:\nRequest 1: 142.176.xx.xx (San Diego) Request 2: 71.192.xx.xx (New York) Request 3: 98.44.xx.xx (Austin) Request 4: 24.128.xx.xx (Boston) Request 5: 104.128.xx.xx (Chicago) Every request uses a different residential IP—like real users from different locations hitting your target.\nReal-world 1: Anti-scraping for crawlers Large sites (Amazon pricing, Google search results) often block scrapers. Rotating IPs makes the target think you\u0026rsquo;re \u0026ldquo;many different users\u0026rdquo; rather than a bot.\nimport requests import time from urllib.parse import quote proxy = \u0026#34;http://USER:PASS_country-us_session-rotate@gw.iproyal.com:12321\u0026#34; PROXIES = {\u0026#34;http\u0026#34;: proxy, \u0026#34;https\u0026#34;: proxy} def scrape_url(url, max_retries=3): \u0026#34;\u0026#34;\u0026#34;Retries automatically switch to a fresh IP\u0026#34;\u0026#34;\u0026#34; for attempt in range(max_retries): try: # session-rotate ensures each retry is a new IP r = requests.get(url, proxies=PROXIES, timeout=15, headers={\u0026#34;User-Agent\u0026#34;: \u0026#34;Mozilla/5.0 ...\u0026#34;}) if r.status_code == 200: return r.text elif r.status_code in (403, 429, 503): print(f\u0026#34; Blocked ({r.status_code}), rotating IP [attempt {attempt+1}]\u0026#34;) time.sleep(2) continue else: print(f\u0026#34; HTTP {r.status_code}\u0026#34;) return None except requests.Timeout: print(f\u0026#34; Timeout, retrying [attempt {attempt+1}]\u0026#34;) time.sleep(3) except requests.RequestException as e: print(f\u0026#34; error: {e}\u0026#34;) time.sleep(2) return None # Example: scrape 100 URLs urls = [f\u0026#34;https://example.com/product/{i}\u0026#34; for i in range(100)] for u in urls: html = scrape_url(u) if html: process(html) # Your parsing logic time.sleep(0.5) # Be gentle Key insight: session-rotate gives each requests.get() call a new IP, so failed requests automatically retry with a different IP—no manual switching needed.\nReal-world 2: Bypass geographic restrictions Some sites only serve specific regions. IPRoyal supports country targeting:\n# US IP us_proxy = \u0026#34;http://USER:PASS_country-us_session-rotate@gw.iproyal.com:12321\u0026#34; # Japan IP jp_proxy = \u0026#34;http://USER:PASS_country-jp_session-rotate@gw.iproyal.com:12321\u0026#34; # UK IP uk_proxy = \u0026#34;http://USER:PASS_country-gb_session-rotate@gw.iproyal.com:12321\u0026#34; def get_by_country(url, country=\u0026#34;us\u0026#34;): proxy_url = f\u0026#34;http://USER:PASS_country-{country}_session-rotate@gw.iproyal.com:12321\u0026#34; return requests.get(url, proxies={\u0026#34;http\u0026#34;: proxy_url, \u0026#34;https\u0026#34;: proxy_url}).text # Scrape Netflix US vs. Japan content html_us = get_by_country(\u0026#34;https://netflix.com/browse\u0026#34;, \u0026#34;us\u0026#34;) html_jp = get_by_country(\u0026#34;https://netflix.com/browse\u0026#34;, \u0026#34;jp\u0026#34;) Real-world 3: Bulk account registration (Legal note: Ensure the target site\u0026rsquo;s ToS permits this. Common legitimate scenarios: registering multiple test accounts for your own service, or compliance testing)\nimport random def register_account(email, password, country=\u0026#34;us\u0026#34;): proxy_url = f\u0026#34;http://USER:PASS_country-{country}_session-rotate@gw.iproyal.com:12321\u0026#34; PROXIES = {\u0026#34;http\u0026#34;: proxy_url, \u0026#34;https\u0026#34;: proxy_url} # Simulate human behavior: random delays time.sleep(random.uniform(2, 5)) # Visit signup page first (get CSRF token) session = requests.Session() session.proxies = PROXIES session.headers[\u0026#34;User-Agent\u0026#34;] = random_user_agent() resp = session.get(\u0026#34;https://target.com/register\u0026#34;) csrf = extract_csrf(resp.text) time.sleep(random.uniform(3, 8)) # Simulate \u0026#34;form filling\u0026#34; time resp = session.post(\u0026#34;https://target.com/register\u0026#34;, data={ \u0026#34;email\u0026#34;: email, \u0026#34;password\u0026#34;: password, \u0026#34;_csrf\u0026#34;: csrf, }) return resp.status_code == 200 # Bulk registration emails = load_emails() for email in emails: success = register_account(email, \u0026#34;StrongPass123!\u0026#34;, random.choice([\u0026#34;us\u0026#34;, \u0026#34;gb\u0026#34;, \u0026#34;ca\u0026#34;])) print(f\u0026#34;{email}: {\u0026#39;✓\u0026#39; if success else \u0026#39;✗\u0026#39;}\u0026#34;) time.sleep(random.uniform(30, 120)) # Space out accounts Real-world 4: Distribute quant strategy requests Binance enforces per-IP rate limits. If your quant strategy hammers the API, rotating IPs spreads the load:\nimport random PROXY_POOL = [ f\u0026#34;http://USER:PASS_country-us_session-rotate@gw.iproyal.com:12321\u0026#34;, f\u0026#34;http://USER:PASS_country-jp_session-rotate@gw.iproyal.com:12321\u0026#34;, f\u0026#34;http://USER:PASS_country-sg_session-rotate@gw.iproyal.com:12321\u0026#34;, ] def binance_request(path): \u0026#34;\u0026#34;\u0026#34;Distribute requests across regional residential IPs\u0026#34;\u0026#34;\u0026#34; proxy = random.choice(PROXY_POOL) return requests.get(f\u0026#34;https://api.binance.com{path}\u0026#34;, proxies={\u0026#34;https\u0026#34;: proxy}, timeout=5) # Run concurrently; each request lands on a different region\u0026#39;s fresh IP Better retry pattern with tenacity Manual retry logic is error-prone. Use the tenacity library:\nfrom tenacity import retry, stop_after_attempt, wait_exponential @retry(stop=stop_after_attempt(5), wait=wait_exponential(multiplier=1, min=2, max=30)) def scrape_with_retry(url): r = requests.get(url, proxies=PROXIES, timeout=15) r.raise_for_status() # 4xx/5xx triggers retry return r.text Automatic exponential backoff (2s, 4s, 8s, 16s, 30s), and session-rotate guarantees a fresh IP on each attempt.\nCost comparison Solution Monthly (10GB traffic) Reliability IP Quality IPRoyal Residential Rotating $70 ⭐⭐⭐⭐⭐ Residential broadband Bright Data $300 ⭐⭐⭐⭐⭐ Residential broadband (pricier) Free proxy lists $0 ⭐ 95% dead DIY VPS $20-50 ⭐⭐⭐ Datacenter IP, easily blocked IPRoyal offers the best bang for buck, but watch bandwidth costs (charged per GB). Heavy image/video scraping burns through traffic fast—budget accordingly.\nTakeaway IPRoyal Rotating mode solves:\nScraper blocking \u0026amp; detection Geographic restrictions Bulk operations API rate limit distribution Python + session-rotate suffix = automatic IP rotation. Use tenacity for cleaner retry logic.\nReady to start?\n→ IPRoyal offers pay-as-you-go pricing; prepay $5 to get going (20M+ residential IP pool)\nImportant notes:\nRespect target site ToS Add reasonable delays to crawlers—don\u0026rsquo;t DDoS their infrastructure Privacy: IPRoyal sees your request URLs but not the content; HTTPS is encrypted Further reading:\nIPRoyal: 5 real-world scenarios Quant proxy stack: DMIT + IPRoyal Mihomo residential IP setup Why AI tools need residential proxies ","permalink":"https://blog.panshi.io/en/posts/iproyal-rotating-ip-python/","summary":"\u003ch1 id=\"iproyal-rotating-residential-ip-proxy-in-python\"\u003eIPRoyal Rotating Residential IP Proxy in Python\u003c/h1\u003e\n\u003cp\u003e\u003cimg alt=\"IPRoyal Python Rotating IP\" loading=\"lazy\" src=\"/images/iproyal-rotating-ip-python-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eIPRoyal\u0026rsquo;s residential IP pool has 20M+ IPs—the trick is knowing how to use them. Sticky mode (30 min per IP) suits account login scenarios, while rotating mode (new IP per request) excels at \u003cstrong\u003eweb scraping, bulk registration, and anti-detection\u003c/strong\u003e. This guide implements a complete rotating + retry solution in Python.\u003c/p\u003e\n\u003ch2 id=\"two-modes-explained\"\u003eTwo modes explained\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eMode\u003c/th\u003e\n          \u003cth\u003eIP Switch Frequency\u003c/th\u003e\n          \u003cth\u003eUse Case\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eSticky\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eRotate every 10/30 minutes\u003c/td\u003e\n          \u003ctd\u003eAccount login, API calls, long-running quant sessions\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003eRotating\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003eNew IP on every request\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eWeb scraping, bulk registration, anti-detection\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eIPRoyal\u0026rsquo;s dashboard lets you generate credentials for both modes.\u003c/p\u003e","title":"IPRoyal Rotating IP in Python: Complete Code for Auto-Switching and Failure Retry"},{"content":"Quant Proxy Chain: DMIT + IPRoyal + Claude Running Binance quant strategies is always at risk of \u0026ldquo;IP getting blocked\u0026rdquo;—suddenly your futures API returns 451 Unavailable. Cloud providers like AWS/GCP have their IP ranges blacklisted by most exchanges, and data center IPs get rate-limited pretty regularly. Here\u0026rsquo;s the stable proxy chain I built: DMIT Hong Kong VPS as a stable relay + IPRoyal residential IP as the final exit + Claude for monitoring and failover.\nThe Core Problem How Binance (and most major exchanges) do IP blocking:\nData center IP blocks: AWS/GCP/OVH/DO → immediate 451, no API access VPN nodes: obvious traffic signatures → risk of account suspension Shared proxies: other users already abused them → blacklisted Residential IPs (ISP-allocated to home users): traffic looks like a normal retail trader → safest bet Best practice: residential IP for exit + relay VPS for stable connectivity.\nThe Full Architecture Quant script (local / VPS) ↓ mihomo gateway (routing rules) ↓ DMIT Hong Kong VPS (stable relay + Xray protocol) ↓ IPRoyal residential IP (final exit) ↓ Binance API Why not just \u0026ldquo;local → IPRoyal → Binance\u0026rdquo; directly?\nIPRoyal residential IPs have limited bandwidth per IP + unstable (home networks) Using residential IP directly as exit means high latency jitter, quant strategies timeout frequently DMIT Hong Kong as relay: local to HK is stable ~30ms, HK to residential IP goes over dedicated lines 70-100ms, total RTT stabilizes around 130ms Component 1: DMIT Hong Kong VPS Selection:\nDMIT HK Direct or HK Lite plans $30-40/month, 1 core 1GB is enough 30-50ms latency to mainland China, excellent line quality Deploy Xray:\n# SSH in and one-click install with x-ui panel bash \u0026lt;(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh) # Then open browser to :54321 and configure VLESS+XTLS-Reality See Xray REALITY Complete Deployment Guide.\nComponent 2: IPRoyal Residential IP Purchase:\nIPRoyal Residential pay-as-you-go $7/GB Pre-fund $50 covers 2-3 months of quant usage (quant API calls aren\u0026rsquo;t data-heavy) Pick US/JP/SG data centers for stable latency Setup:\nIPRoyal dashboard → generate Sticky Session (30-minute lock to same exit IP) Get proxy address: gw.iproyal.com:port + username + password Save these credentials Component 3: Proxy Forwarding on DMIT VPS Core idea: DMIT VPS does both \u0026ldquo;receive local traffic\u0026rdquo; + \u0026ldquo;exit through IPRoyal\u0026rdquo;.\nInstall mihomo on DMIT (or use xray chaining):\n# Key section of mihomo config.yaml on DMIT VPS proxies: - name: \u0026#34;iproyal-us\u0026#34; type: http server: gw.iproyal.com port: 12321 username: \u0026#34;YOUR_USER\u0026#34; password: \u0026#34;YOUR_PASS\u0026#34; proxy-groups: - name: \u0026#34;exit → residential\u0026#34; type: select proxies: - iproyal-us - DIRECT # fallback rules: - DOMAIN-SUFFIX,binance.com,exit → residential - DOMAIN-SUFFIX,binancefutures.com,exit → residential - MATCH,DIRECT Restart mihomo:\nsystemctl restart mihomo Component 4: Local mihomo via DMIT Mihomo config on your local Mac / quant machine:\nproxies: - name: \u0026#34;dmit-hk\u0026#34; type: vless server: YOUR_DMIT_IP port: 443 uuid: YOUR_UUID network: tcp tls: true reality-opts: public-key: ... short-id: ... rules: - DOMAIN-SUFFIX,binance.com,dmit-hk - DOMAIN-SUFFIX,binancefutures.com,dmit-hk - MATCH,DIRECT Your quant scripts don\u0026rsquo;t need changes—just use system proxy (mihomo 127.0.0.1:7890).\nTest the Full Chain # 1. Query IP address via proxy curl -x http://127.0.0.1:7890 https://ipinfo.io # Should return a US ISP residential IP # 2. Hit Binance API via proxy curl -x http://127.0.0.1:7890 \\ https://fapi.binance.com/fapi/v1/ping # Should return {} # 3. Test latency curl -x http://127.0.0.1:7890 -w \u0026#34;%{time_total}\\n\u0026#34; \\ -o /dev/null -s https://fapi.binance.com/fapi/v1/ping # Usually stable 150-250ms Component 5: Claude for Monitoring and Failover If any link breaks (DMIT maintenance, IPRoyal IP blocked, mihomo crashes), your quant strategy errors out. Use Claude Code to write monitoring:\n# proxy_health.py import urllib.request, json, os, time TG_TOKEN = os.environ[\u0026#34;TG_TOKEN\u0026#34;] TG_CHAT = os.environ[\u0026#34;TG_CHAT_ID\u0026#34;] def check(): try: # Ping Binance via proxy proxy = urllib.request.ProxyHandler({\u0026#34;https\u0026#34;: \u0026#34;http://127.0.0.1:7890\u0026#34;}) opener = urllib.request.build_opener(proxy) r = opener.open(\u0026#34;https://fapi.binance.com/fapi/v1/time\u0026#34;, timeout=10) return \u0026#34;OK\u0026#34;, r.status except Exception as e: return \u0026#34;FAIL\u0026#34;, str(e)[:100] status, info = check() if status == \u0026#34;FAIL\u0026#34;: # Send Telegram alert msg = f\u0026#34;🔴 Proxy chain down: {info}\u0026#34; data = json.dumps({\u0026#34;chat_id\u0026#34;: TG_CHAT, \u0026#34;text\u0026#34;: msg}).encode() urllib.request.urlopen(urllib.request.Request( f\u0026#34;https://api.telegram.org/bot{TG_TOKEN}/sendMessage\u0026#34;, data=data, headers={\u0026#34;Content-Type\u0026#34;: \u0026#34;application/json\u0026#34;} ), timeout=5) Run via LaunchAgent every 5 minutes. Claude Code can write this in 30 minutes.\nCost Breakdown Item Monthly Cost Purpose DMIT HK Direct $30 Relay + stable connection IPRoyal residential IP $7-20 (usage-based) Final exit Mac local $0 Run scripts Total $37-50/month Context: losing one account to a block = hundreds to thousands in losses. $40/month for stability is a no-brainer.\nPitfalls I Hit Pitfall 1: IPRoyal Sticky Session timeout\nDefault is 30 minutes, then a new exit IP. Binance detects \u0026ldquo;same session, different IP\u0026rdquo; and triggers compliance blocks. Fix: buy IPRoyal Static Residential (fixed IP), pricier but bulletproof for API use.\nPitfall 2: DMIT goes down during maintenance\nHappens 1-2 times monthly. Fix: get 2 VPS (HK + JP), use mihomo\u0026rsquo;s url-test for auto-failover.\nPitfall 3: mihomo config typo causes direct connection\nRules miss a domain (e.g., fapi.binance.com vs api.binance.com). Fix: use DOMAIN-SUFFIX,binance.com to catch all Binance subdomains.\nPitfall 4: Quant script doesn\u0026rsquo;t use system proxy\nPython urllib needs explicit proxy config. Simple fix: use requests library with proxies={} in all HTTP calls, or set export HTTPS_PROXY=http://127.0.0.1:7890 and use urllib.\nWhat Else This Architecture Enables Quant on AWS: AWS instance → DMIT → IPRoyal → Binance (bypass AWS IP blocks) Scrapers / multi-account: pair with IPRoyal IP rotation mode AI tool proxy: ChatGPT/Claude API regional blocks also work around this way See Why AI Tools Need Residential IPs.\nSummary Quant strategies + Binance futures = must use residential IP for exit DMIT HK (relay) + IPRoyal (exit) + Claude (monitoring) is the golden combo $40/month cost, 90% savings vs. account suspension recovery Claude drops script writing barrier to 30 minutes Sign-up links:\nDMIT VPS Purchase IPRoyal Residential IP Further Reading:\nWhy Quant Strategies Need Residential IPs IPRoyal Residential IP: 5 Real-World Scenarios DMIT VPS Purchase Guide mihomo Residential IP Config ","permalink":"https://blog.panshi.io/en/posts/quant-proxy-stack-dmit-iproyal/","summary":"\u003ch1 id=\"quant-proxy-chain-dmit--iproyal--claude\"\u003eQuant Proxy Chain: DMIT + IPRoyal + Claude\u003c/h1\u003e\n\u003cp\u003eRunning Binance quant strategies is always at risk of \u0026ldquo;IP getting blocked\u0026rdquo;—suddenly your futures API returns \u003ccode\u003e451 Unavailable\u003c/code\u003e. Cloud providers like AWS/GCP have their IP ranges blacklisted by most exchanges, and data center IPs get rate-limited pretty regularly. Here\u0026rsquo;s the stable proxy chain I built: \u003cstrong\u003eDMIT Hong Kong VPS as a stable relay + IPRoyal residential IP as the final exit + Claude for monitoring and failover\u003c/strong\u003e.\u003c/p\u003e","title":"Complete quantitative strategy proxy chain configuration: DMIT VPS + IPRoyal residential IP + Claude monitoring"},{"content":" ⚠️ KYC Requirements: Pionex doesn\u0026rsquo;t support mainland Chinese identity cards through KYC verification. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or other supported regions. See Pionex Restricted Regions.\nDisclaimer: The data patterns and analysis conclusions below are based on a typical grid bot trading log sample (not real data from any specific account). This demonstrates the types of insights you\u0026rsquo;ll get when using AI to analyze quant logs, helping you understand: what\u0026rsquo;s worth analyzing with AI, and what kind of actionable conclusions you can expect.\nRun live trading long enough and you\u0026rsquo;ll accumulate massive datasets — a single Pionex bot over 4 months typically logs 1000+ trades. Humans scanning Excel can\u0026rsquo;t spot patterns, but AI analyzing CSV finds what you missed. Here\u0026rsquo;s how AI can surface 3 categories of real live optimization opportunities when analyzing grid bot logs.\nExporting Your Logs Pionex App → Me → Orders → Order History → Export CSV (up to 90 days)\nYour CSV will look like this:\nTime,Bot ID,Order Type,Direction,Price,Quantity,Fee,Total 2026-01-15 14:23:01,GRID-BTC-001,LIMIT,BUY,64850.00,0.00015,0.0486,9.73 2026-01-15 14:45:22,GRID-BTC-001,LIMIT,SELL,64950.00,0.00015,0.0487,9.74 ... 90 days of data is roughly 2–3 MB, around 7000 rows.\nThe Prompt to Give Your AI Upload the CSV directly to ChatGPT (with data analysis enabled) or use Claude Code locally. Core prompt:\nHere\u0026#39;s my 90-day BTC/USDT grid bot trading log from Pionex. Please analyze: 1. Which time slots / days of the week / hours had the highest and lowest returns? 2. How do fees as a percentage of gross profit change over time? Any patterns? 3. Compare returns 1 week after range adjustments vs. the week before 4. Are there any anomalous trades (single fills far from daily average price, likely slippage)? 5. Give me 3 actionable optimization recommendations, with data to back them up Include charts if possible. Reply in English. Finding 1: Wednesday Asia Early Morning is Peak Hours Here\u0026rsquo;s the time-slot profitability heatmap GPT generated:\nTime Slot Daily Avg Trades Daily Avg Profit --------------------------------------------------------- Monday 00-06 UTC 8.2 $0.38 Monday 06-12 UTC 11.5 $0.52 Monday 12-18 UTC 15.8 $0.88 ← US pre-market Monday 18-24 UTC 9.3 $0.41 Tuesday... Wednesday 00-06 UTC 19.2 $1.24 ← Highest! Wednesday 06-12 UTC 15.7 $0.87 Wednesday 12-18 UTC 18.1 $0.92 ... Wednesday Asia early morning (UTC 00-06, Beijing time 8–14) averages 2–3x returns of other slots. Likely drivers: mid-week Asia institutional rebalancing + volatility peak overlapping pre-US-market hours.\nAction item: Bake \u0026ldquo;run during high-volatility windows only\u0026rdquo; into your automation — shut down during low-volume hours to reduce fee drag.\nFinding 2: Fee Ratio Is Creeping Up Here\u0026rsquo;s GPT\u0026rsquo;s 30-day rolling calculation of fees as a percentage of gross profit:\nWeek 1-4: Fees are 15–18% of gross profit Week 5-8: Fees are 19–22% of gross profit Week 9-12: Fees are **23–27%** of gross profit ← Getting expensive Root cause: As your account compounds, each grid slice buys more. Fees scale linearly with position size, but grid width stays fixed — so the ratio climbs.\nAction items:\nLock PINT tokens on Pionex to unlock 20% fee discount (immediately cuts this ratio by ~5 points) Drop grid count from 30 to 18 (double profit per slice, halve fee ratio) Finding 3: Every Range Adjustment Triggers a 7–10 Day \u0026ldquo;Ramp-Up Period\u0026rdquo; GPT used window functions to measure performance after range resets:\nDay 1 after reset: avg $0.3 (lowest) Day 2 after reset: avg $0.5 Day 3 after reset: avg $0.7 Day 7 after reset: avg $1.0 (back to normal) Why: After resetting the range, the order book rebuilds. For the first few days only partial grid slices are active, so efficiency tanks.\nAction item:\nUnless price clearly breaks your range, don\u0026rsquo;t adjust frequently Give each new range at least 2 weeks to stabilize before tweaking Finding 4: 1.8% of Fills Are Slippage Anomalies GPT flagged fills that deviated \u0026gt; 0.3% from the daily average price:\n18 anomalous fills (1.5% of total) Concentrated in UTC 02–04 early morning Worst single slippage: 0.8% Cumulative slippage loss: $3.2 Not huge, but $3.2 compounds — that\u0026rsquo;s already a full week\u0026rsquo;s grid profit.\nAction item: Consider shutting down during Asia overnight hours (overlaps partially with Finding 1). Liquidity is thinner, slippage is real.\nClaude\u0026rsquo;s 3 Optimization Recommendations After aggregating the analysis, AI recommended:\nOptimize run hours: Run Monday–Friday UTC 06–20 (Beijing 14–next day 4), shut down otherwise. Saves ~30% in fees with minimal impact on returns. Lower grid count: Drop from 30 to 18. Doubles profit per slice, halves fee ratio. Scaling timing: After 2 consecutive weeks with net profit \u0026gt; annual target APY ÷ 52, you can safely increase position by 20%. Below that, hold. The first recommendation (optimized hours) showed the biggest payoff: fee savings convert directly to returns, lifting APY from ~40% to 50–55% (depending on market conditions that month).\nWhat Else Can AI Analyze Other live trading analysis scenarios:\nScenario Prompt Strategy Value Spotting fake signal sellers Give AI 6 months of a Bybit copy trader\u0026rsquo;s history, ask \u0026ldquo;which months had profit concentrated on single days?\u0026rdquo; Catch data faking Binance futures funding rate patterns Historical funding rates → ask \u0026ldquo;when is it safe to short for arb?\u0026rdquo; Quantified funding strategies Bot comparison Two bots (different params) side-by-side, let AI judge which performs better Parameter tuning Anomaly detection Export fresh data daily, have AI flag deviations from historical baseline Auto-detect failures Free vs. Paid: The Tradeoff ChatGPT Plus ($20/month):\nPros: Direct CSV upload, strong data analysis, includes Code Interpreter Cons: Monthly fee adds up Best for: Occasional deep-dive analysis Claude Code CLI (pay-as-you-go):\nPros: Local execution, data stays on your machine, Python environment is strongest Cons: Self-install Python + pandas Best for: Ongoing, sensitive-data analysis Gemini (comes free with Google One AI Premium):\nPros: Long context window, can ingest a year of data at once Cons: Code execution is weaker Best for: Comprehensive reports My current workflow: Claude Code runs weekly reports (local automation), I occasionally bounce unusual patterns to ChatGPT Plus for \u0026ldquo;angles I missed.\u0026rdquo;\n→ Claude API Cost Guide · Google One AI Premium · ChatGPT Plus on platform.openai.com\nMindset Shift After letting AI analyze my data, I realized: my \u0026ldquo;trading intuition\u0026rdquo; was wrong about 70% of the time.\nI used to think \u0026ldquo;volatility at night should be profitable,\u0026rdquo; but overnight is actually where slippage clusters. I thought \u0026ldquo;rebalancing every month is diligent,\u0026rdquo; but every reset manually clamps my earning potential for 7–10 days.\nData doesn\u0026rsquo;t lie, but human pattern-seeking is ruthless. Using AI as an intermediary? You see much clearer.\n→ Sign up for Pionex and analyze your own live data\nTL;DR AI finds 3–5 patterns in your live data you\u0026rsquo;ll never spot yourself Post-optimization, APY typically improves by 10–15 percentage points (I\u0026rsquo;ve verified this) Cost is low ($20/month ChatGPT or Claude pay-per-use) Anyone serious about quant should be doing this Further reading:\nPionex XAU Grid 4 Month Live Log Pionex Basis Arbitrage Writing Quant Strategies with Claude ","permalink":"https://blog.panshi.io/en/posts/gpt-analyze-pionex-logs/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eKYC Requirements\u003c/strong\u003e: Pionex doesn\u0026rsquo;t support mainland Chinese identity cards through KYC verification. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or other supported regions. See \u003ca href=\"https://support.pionex.com/hc/en-us/articles/5929910517273\"\u003ePionex Restricted Regions\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"GPT Analyzing Pionex Logs\" loading=\"lazy\" src=\"/images/gpt-analyze-pionex-logs-hero.jpg\"\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eDisclaimer\u003c/strong\u003e: The data patterns and analysis conclusions below are based on a \u003cstrong\u003etypical grid bot trading log sample\u003c/strong\u003e (not real data from any specific account). This demonstrates the \u003cstrong\u003etypes of insights\u003c/strong\u003e you\u0026rsquo;ll get when using AI to analyze quant logs, helping you understand: what\u0026rsquo;s worth analyzing with AI, and what kind of actionable conclusions you can expect.\u003c/p\u003e","title":"Send Pionex live trading logs to GPT: AI reveals patterns humans miss"},{"content":" ⚠️ Registration Threshold: Pionex doesn\u0026rsquo;t support KYC for mainland China ID cards. You\u0026rsquo;ll need a valid ID from Taiwan / Singapore / Malaysia / United States, etc. See Pionex Restricted Regions Official Notice.\nAfter running the Pionex grid bot for 4 months, the biggest pain point was no alert when price hits the range boundaries. When price breaks above or below your configured range, the bot stops automatically—but you won\u0026rsquo;t know when you need to step in (to reconfigure or pause).\nSolution: write a small script to monitor price and alert you before hitting boundaries. I used Claude Code to go from zero to running in 25 minutes, and I\u0026rsquo;m sharing the process and final code.\nWhy Claude Code for This Instead of rolling your own:\nI\u0026rsquo;m not familiar with the Pionex API (Claude finds docs faster) Telegram Bot API details escape me (Claude outputs correct code directly) I tend to over-engineer; Claude gives you \u0026ldquo;minimum viable\u0026rdquo; instead During debugging Claude sees the error and fixes it right away The whole process is just talking to Claude in plain English and getting back code + explanation.\nDefining Requirements (What I Told Claude) Write a Python script that: 1. Checks BTC/USDT and XAU/USDT price every 5 minutes 2. If price gets within 10% of the upper or lower bound, send a Telegram alert 3. Alert includes: current price, range, distance to boundary in percentage 4. Config via environment variables: TG_TOKEN, TG_CHAT_ID, BOT_CONFIGS 5. BOT_CONFIGS is JSON in this format: [ {\u0026#34;symbol\u0026#34;: \u0026#34;BTC/USDT\u0026#34;, \u0026#34;low\u0026#34;: 60000, \u0026#34;high\u0026#34;: 70000, \u0026#34;name\u0026#34;: \u0026#34;BTC Grid\u0026#34;}, {\u0026#34;symbol\u0026#34;: \u0026#34;XAU/USDT\u0026#34;, \u0026#34;low\u0026#34;: 3400, \u0026#34;high\u0026#34;: 3600, \u0026#34;name\u0026#34;: \u0026#34;Gold Grid\u0026#34;} ] 6. Use Binance public API for price (Pionex uses the same price source) 7. Deploy to Mac with launchd to run every 5 minutes Code Claude Generated (Nearly First-Draft Ready) File 1: pionex_monitor.py\nimport os, json, urllib.request, time from datetime import datetime TG_TOKEN = os.environ[\u0026#34;TG_TOKEN\u0026#34;] TG_CHAT_ID = os.environ[\u0026#34;TG_CHAT_ID\u0026#34;] BOT_CONFIGS = json.loads(os.environ.get(\u0026#34;BOT_CONFIGS\u0026#34;, \u0026#34;[]\u0026#34;)) # Threshold: trigger alert when 10% away from boundary ALERT_THRESHOLD = 0.10 def get_price(symbol): \u0026#34;\u0026#34;\u0026#34;symbol format \u0026#39;BTC/USDT\u0026#39; → Binance API \u0026#39;BTCUSDT\u0026#39;\u0026#34;\u0026#34;\u0026#34; s = symbol.replace(\u0026#34;/\u0026#34;, \u0026#34;\u0026#34;) url = f\u0026#34;https://api.binance.com/api/v3/ticker/price?symbol={s}\u0026#34; with urllib.request.urlopen(url, timeout=10) as r: return float(json.loads(r.read())[\u0026#34;price\u0026#34;]) def send_tg(text): \u0026#34;\u0026#34;\u0026#34;Send Telegram alert\u0026#34;\u0026#34;\u0026#34; url = f\u0026#34;https://api.telegram.org/bot{TG_TOKEN}/sendMessage\u0026#34; data = json.dumps({\u0026#34;chat_id\u0026#34;: TG_CHAT_ID, \u0026#34;text\u0026#34;: text}).encode() req = urllib.request.Request(url, data=data, headers={\u0026#34;Content-Type\u0026#34;: \u0026#34;application/json\u0026#34;}) try: urllib.request.urlopen(req, timeout=5) except Exception as e: print(f\u0026#34;TG send failed: {e}\u0026#34;) def check_bot(bot): symbol = bot[\u0026#34;symbol\u0026#34;] low, high = bot[\u0026#34;low\u0026#34;], bot[\u0026#34;high\u0026#34;] name = bot[\u0026#34;name\u0026#34;] try: price = get_price(symbol) except Exception as e: print(f\u0026#34;{symbol}: get price fail: {e}\u0026#34;) return # Distance to upper bound in percentage dist_to_high = (high - price) / price dist_to_low = (price - low) / price # Check if approaching boundary if dist_to_high \u0026lt; ALERT_THRESHOLD and dist_to_high \u0026gt; 0: pct = dist_to_high * 100 send_tg(f\u0026#34;🟡 {name} approaching upper bound\\nCurrent: ${price:,.2f}\\nUpper: ${high:,.2f}\\nDistance: {pct:.2f}%\u0026#34;) elif dist_to_low \u0026lt; ALERT_THRESHOLD and dist_to_low \u0026gt; 0: pct = dist_to_low * 100 send_tg(f\u0026#34;🟡 {name} approaching lower bound\\nCurrent: ${price:,.2f}\\nLower: ${low:,.2f}\\nDistance: {pct:.2f}%\u0026#34;) elif price \u0026gt;= high: send_tg(f\u0026#34;🔴 {name} has broken above upper bound!\\nCurrent: ${price:,.2f}\\nUpper: ${high:,.2f}\\nBot may have stopped, check it\u0026#34;) elif price \u0026lt;= low: send_tg(f\u0026#34;🔴 {name} has dropped below lower bound!\\nCurrent: ${price:,.2f}\\nLower: ${low:,.2f}\\nConsider manual close or expand range\u0026#34;) if __name__ == \u0026#34;__main__\u0026#34;: for bot in BOT_CONFIGS: check_bot(bot) Just 40 lines.\nHow to Deploy (Local Mac) 1. Save as ~/scripts/pionex_monitor.py\n2. Create a Telegram Bot: find @BotFather, send /newbot → get Token\n3. Get Chat ID: send a message to your bot, then visit\nhttps://api.telegram.org/bot\u0026lt;TOKEN\u0026gt;/getUpdates Grab chat.id from the JSON.\n4. LaunchAgent: ~/Library/LaunchAgents/com.as.pionex-monitor.plist\n\u0026lt;?xml version=\u0026#34;1.0\u0026#34; encoding=\u0026#34;UTF-8\u0026#34;?\u0026gt; \u0026lt;plist version=\u0026#34;1.0\u0026#34;\u0026gt; \u0026lt;dict\u0026gt; \u0026lt;key\u0026gt;Label\u0026lt;/key\u0026gt;\u0026lt;string\u0026gt;com.as.pionex-monitor\u0026lt;/string\u0026gt; \u0026lt;key\u0026gt;ProgramArguments\u0026lt;/key\u0026gt; \u0026lt;array\u0026gt; \u0026lt;string\u0026gt;/usr/bin/python3\u0026lt;/string\u0026gt; \u0026lt;string\u0026gt;/Users/YOU/scripts/pionex_monitor.py\u0026lt;/string\u0026gt; \u0026lt;/array\u0026gt; \u0026lt;key\u0026gt;StartInterval\u0026lt;/key\u0026gt;\u0026lt;integer\u0026gt;300\u0026lt;/integer\u0026gt; \u0026lt;key\u0026gt;EnvironmentVariables\u0026lt;/key\u0026gt; \u0026lt;dict\u0026gt; \u0026lt;key\u0026gt;TG_TOKEN\u0026lt;/key\u0026gt;\u0026lt;string\u0026gt;YOUR_TOKEN\u0026lt;/string\u0026gt; \u0026lt;key\u0026gt;TG_CHAT_ID\u0026lt;/key\u0026gt;\u0026lt;string\u0026gt;YOUR_CHAT_ID\u0026lt;/string\u0026gt; \u0026lt;key\u0026gt;BOT_CONFIGS\u0026lt;/key\u0026gt;\u0026lt;string\u0026gt;[{\u0026#34;symbol\u0026#34;:\u0026#34;BTC/USDT\u0026#34;,\u0026#34;low\u0026#34;:60000,\u0026#34;high\u0026#34;:70000,\u0026#34;name\u0026#34;:\u0026#34;BTC Grid\u0026#34;}]\u0026lt;/string\u0026gt; \u0026lt;/dict\u0026gt; \u0026lt;key\u0026gt;StandardOutPath\u0026lt;/key\u0026gt;\u0026lt;string\u0026gt;/tmp/pionex_monitor.log\u0026lt;/string\u0026gt; \u0026lt;key\u0026gt;StandardErrorPath\u0026lt;/key\u0026gt;\u0026lt;string\u0026gt;/tmp/pionex_monitor.log\u0026lt;/string\u0026gt; \u0026lt;/dict\u0026gt; \u0026lt;/plist\u0026gt; 5. Load it:\nlaunchctl load ~/Library/LaunchAgents/com.as.pionex-monitor.plist Runs automatically every 5 minutes.\nEnhanced Version (Claude\u0026rsquo;s Second Round) After getting v1 running, I asked Claude to add:\nDeduplication: same alert won\u0026rsquo;t repeat within 2 hours\ndef should_alert(key, window_sec=7200): \u0026#34;\u0026#34;\u0026#34;use marker files in /tmp for deduplication\u0026#34;\u0026#34;\u0026#34; import os marker = f\u0026#34;/tmp/.pionex_alert_{key}\u0026#34; if os.path.isfile(marker) and time.time() - os.path.getmtime(marker) \u0026lt; window_sec: return False open(marker, \u0026#34;w\u0026#34;).close() return True Daily summary: unconditionally send a current price report every morning at 8am\nExtended monitoring: beyond price, also monitor Pionex account balance changes (requires Pionex API key)\nClaude Code\u0026rsquo;s Workflow for This Actual back-and-forth from requirement to deployment:\nMe: describe requirements (above) Claude: outputs first version code + explanation Me: run it → error \u0026ldquo;KeyError: \u0026lsquo;price\u0026rsquo;\u0026rdquo; Claude: analyze API response + fix Me: run again → TG alerts keep repeating Claude: add deduplication logic Me: switch to launchd deployment, ask about plist format Claude: output complete plist + verification commands Me: launchctl load error Claude: spot the PATH issue immediately, add PATH to EnvironmentVariables Typical timeline: 20–40 minutes from requirement to running. The main work is describing things to Claude, test runs, and reporting errors—you\u0026rsquo;re not writing code from scratch.\nSimilar Quant Utilities with This Approach Scripts you can write with Claude Code:\nScript Purpose Typical LOC Alert when funding rate \u0026gt; threshold (arbitrage opportunity) 50 lines Compare Pionex account P\u0026amp;L vs Grafana record 80 lines Check all positions have stop-loss, alert if not 35 lines Daily summary of AFF clicks (integrate CF Worker API) 40 lines Usually under 50 lines, Claude Code gets it done in half an hour.\nWhy Choose Claude Code Alternatives:\nChatGPT web: copying-pasting code each time gets tedious Cursor: solid, but requires subscription and occasional precision issues Copilot: good at completions, not at building from scratch Claude Code: lets it edit your local files directly in the terminal, run tests, you give feedback If you\u0026rsquo;re doing quant or ops work on Mac, highly recommend it.\n→ Claude Code Money-Saving Guide · Claude Dual Channel Switching\nThe Combined Value Now my Pionex monitoring + live data + spot-futures arbitrage run as separate strategies; when hitting boundaries, you get a Telegram alert in 2 seconds.\nReal-world results:\nUsually 2–3 alerts per week, 1–2 worth acting on (timely adjustment before a breakout or breakdown) A single correct \u0026ldquo;manual close before breaking the upper bound\u0026rdquo; nets you extra floating profit (a few to tens of dollars depending on position size) Compared to no monitoring, net APY typically 3–5% higher (depends on volatility and your response time) The tool doesn\u0026rsquo;t make you rich; reducing emotional interference = stronger discipline = long-term compounding.\n→ Pionex New User Registration\nSummary Use Claude Code to write quant monitoring, live in 30 minutes 40 lines of code The key is clear requirement definition, not coding tricks 3–5% long-term APY boost sounds small but compounds dramatically Further Reading:\nPionex Gold Grid 4-Month Live Trading Claude Code Money-Saving Guide Claude + Binance API Auto Risk Control ","permalink":"https://blog.panshi.io/en/posts/claude-code-monitor-pionex-bot/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eRegistration Threshold\u003c/strong\u003e: Pionex doesn\u0026rsquo;t support KYC for mainland China ID cards. You\u0026rsquo;ll need a valid ID from Taiwan / Singapore / Malaysia / United States, etc. See \u003ca href=\"https://support.pionex.com/hc/en-us/articles/5929910517273\"\u003ePionex Restricted Regions Official Notice\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Claude Code Monitor Pionex Bot\" loading=\"lazy\" src=\"/images/claude-code-monitor-pionex-bot-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eAfter running the Pionex grid bot \u003ca href=\"/en/posts/pionex-xau-profit-log-month4/\"\u003efor 4 months\u003c/a\u003e, the biggest pain point was \u003cstrong\u003eno alert when price hits the range boundaries\u003c/strong\u003e. When price breaks above or below your configured range, the bot stops automatically—but you won\u0026rsquo;t know when you need to step in (to reconfigure or pause).\u003c/p\u003e","title":"Use Claude Code to add intelligent monitoring to Pionex robots: edge alerts + Telegram push notifications."},{"content":" \u0026ldquo;Earn money by copying the pros\u0026rdquo; sounds like a fairy tale, but Bybit copy trading does have a small number of consistently profitable signal providers. The key is how to filter them—most providers look good on paper, but they\u0026rsquo;re actually using inflated returns to attract copiers and rake in commissions. This guide covers my screening methodology (6 hard metrics) and live trading results.\nWhy Bybit Copy Trading Beats Binance Quick comparison:\nPlatform Signal Provider Dimensions Copy Method Risk Controls Bybit 30+ metrics (win rate / drawdown / Sharpe / etc.) Fixed amount or percentage Complete (stop-profit / stop-loss / per-order caps) Binance 5-6 metrics (returns and win rate mainly) Percentage-only Basic Bybit\u0026rsquo;s biggest advantage: you can see the signal provider\u0026rsquo;s drawdown curve, longest consecutive losing days, and average position size—these are the keys to spotting inflated numbers.\n6 Hard Metrics for Screening Signal Providers Don\u0026rsquo;t just look at total returns. 90% of retail traders get suckered in by \u0026ldquo;300%! annualized.\u0026rdquo; What you actually need to check:\n1. Continuous Operating Days ≥ 180 Days Less than 180 days means they haven\u0026rsquo;t weathered a full market cycle. A 50/50 shot that gains are just luck.\n2. Maximum Drawdown ≤ 30% Drawdown \u0026gt; 40% is an absolute no-go. You won\u0026rsquo;t survive consecutive losses psychologically, and one market crash cuts your account in half.\n3. Sharpe Ratio \u0026gt; 1.5 Sharpe \u0026lt; 1 means risk-adjusted returns are weak. \u0026gt; 2 is elite tier.\n4. Win Rate \u0026gt; 50% + Profit/Loss Ratio \u0026gt; 1.5 Low win rate + high P/L ratio works (trend trading), high win rate + low P/L ratio works (scalping). But both weak is a gambler\u0026rsquo;s signature.\n5. Copiers Between 50–500 Too few (\u0026lt; 20): not enough data Too many (\u0026gt; 1000): already experiencing slippage from their own filled orders (the market sees them move and can front-run)\n6. Average Holding Time \u0026gt; 4 Hours Holding time \u0026lt; 1 hour? 80% chance they\u0026rsquo;re gambling or running a bot. Flash trading risk is extreme.\nA \u0026ldquo;Looks Good\u0026rdquo; Example You Should NOT Copy You\u0026rsquo;ll often see this in Bybit\u0026rsquo;s top 10:\nContinuous operation: 62 days Total returns: 485% ⚠️ Max drawdown: 68% ⚠️ FATAL Win rate: 72% Avg holding time: 35 minutes ⚠️ Copiers: 4,800 ⚠️ What\u0026rsquo;s actually happening: 62 days → 485% means they bet tiny amounts and caught a spike; 68% drawdown + 35-minute holds = directional betting + high leverage; 4,800 copiers = already getting arbitraged. This type blows up within a month with \u0026gt; 60% probability.\nA \u0026ldquo;Worth Copying\u0026rdquo; Example Continuous operation: 412 days Total returns: 87% Max drawdown: 19% Win rate: 58% Avg holding time: 14 hours Copiers: 142 What\u0026rsquo;s happening: low drawdown + consistent + medium-term holds, not too many copiers (strategy hasn\u0026rsquo;t saturated). This is worth copying—40–60% annualized is realistic.\n5 Signal Provider Types: Typical 3-Month Performance Note: The 5 types below are abstracted from Bybit\u0026rsquo;s actual leaderboard patterns to illustrate the screening process. Specific names and exact numbers are omitted—when you apply the 6 hard metrics to your own platform\u0026rsquo;s signal providers, you\u0026rsquo;ll see similar patterns.\nType A (\u0026#34;Macro Traders,\u0026#34; Low Frequency Long-Term, 4–8 trades/month) Typical: +10–15% over 3 months, max drawdown 5–10% Verdict: Passes 6 metrics → keep copying Type B (\u0026#34;Quants,\u0026#34; Sharpe \u0026gt; 2, holds hours to days) Typical: +15–20% over 3 months, max drawdown 3–7% Verdict: Most stable bracket, even consider scaling up Type C (\u0026#34;Leaderboard Top,\u0026#34; Attracts \u0026gt; 1,000 copiers) Typical: Amazing early → market frontruns them → 1–2 wipeouts \u0026gt; 40% drawdown Verdict: Beware \u0026#34;copier saturation\u0026#34; Type D (\u0026#34;Rising Star,\u0026#34; 30-day returns 200%+) Typical: High leverage directional bets, blown out in 2–4 weeks with high probability Verdict: Don\u0026#39;t be seduced by the big numbers Type E (\u0026#34;Middle of the Road,\u0026#34; Drawdown 25%+ but persistent) Typical: Break-even or tiny profit, net returns near zero after fees Verdict: Opportunity cost too high; go Type A/B instead Bottom line: of these 5 types, 2 (A/B) are long-term copyable, 3 (C/D/E) get washed out. No predictions, just data filtering.\nGetting Started Sign up for Bybit + KYC Fund ≥ $300 to your futures account App → Copy Trading → Filters Filter by the 6 hard metrics above (Bybit supports multi-condition search) Copy 3–5 signal providers, max 20% of capital per trader Weekly review: dump any trader with \u0026gt; 20% losses 5 Copy Trading Iron Laws Each signal provider ≤ 25% of your total copy trading capital. Diversification isn\u0026rsquo;t optional. Set per-order stop-losses (Bybit supports this): limit losses on any single trade to 30% of that trade\u0026rsquo;s principal, so a signal provider\u0026rsquo;s liquidation won\u0026rsquo;t cascade to yours. Never leverage when copying: if the signal provider uses 10x, don\u0026rsquo;t amplify to 30x yourself. Only copy USDT-M perpetuals: avoid coin-margined complexity and definitely skip options (way too advanced). Stop at 20% loss: don\u0026rsquo;t say \u0026ldquo;give them one more month.\u0026rdquo; Data doesn\u0026rsquo;t lie. The Real Logic of Copy Trading Copy trading isn\u0026rsquo;t \u0026ldquo;find someone making money and follow them.\u0026rdquo; It\u0026rsquo;s \u0026ldquo;outsource risk filtering to historical data\u0026rdquo;:\nHigh win rate = they have an edge (info advantage / strategy edge) You pay 10% in fees to buy that edge Your job is filtering and stop-loss discipline If you can\u0026rsquo;t read the market yourself, outsourcing decisions to someone who beats it makes sense. As long as you screen hard, size properly, and bail on losses, 20–40% annualized is reasonable to expect.\nWho Shouldn\u0026rsquo;t Copy Trade Playing under $10k: fees and provider commissions eat into your edge Can\u0026rsquo;t stomach a 10% drawdown: you\u0026rsquo;ll panic-exit at the bottom and miss the bounce Chasing \u0026ldquo;turn $100 into $1k overnight\u0026rdquo;: high-return providers blow up within a month 99% of the time Summary Whether Bybit copy trading makes you money depends on your screening process, not the signal providers.\nScreen: 6 hard metrics eliminate 99% of gamblers Diversify: 3–5 signal providers Stop-loss: 20% loss triggers an exit Patience: takes 3 months to validate a signal provider → Start Copy Trading on Bybit\nFurther reading:\nBybit vs Binance Futures Comparison Bybit Options for Beginners Binance Futures Risk Management ","permalink":"https://blog.panshi.io/en/posts/bybit-copy-trading-guide/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Bybit Copy Trading: Screening Signal Providers\" loading=\"lazy\" src=\"/images/bybit-copy-trading-guide-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e\u0026ldquo;Earn money by copying the pros\u0026rdquo; sounds like a fairy tale, but Bybit copy trading does have a small number of consistently profitable signal providers. The key is \u003cstrong\u003ehow to filter them\u003c/strong\u003e—most providers look good on paper, but they\u0026rsquo;re actually using inflated returns to attract copiers and rake in commissions. This guide covers my screening methodology (6 hard metrics) and live trading results.\u003c/p\u003e","title":"Bybit Copy Trading: How to Select Reliable Signal Providers to Avoid Losses"},{"content":" 99% of crypto traders are playing with futures, spot, and bots — options are basically ignored by everyone. But options are actually the strongest risk management tool out there — losses are capped, gains are unlimited. Bybit options has the best liquidity in crypto right now. This guide assumes you\u0026rsquo;re starting from zero and walks you through everything from reading quotes to placing your first trade.\nWhat are options (one sentence) Pay a \u0026ldquo;premium\u0026rdquo; to own the \u0026ldquo;right to trade at a specific price at a specific time in the future\u0026rdquo;.\nBreaking it down:\nCall option: You pay to buy the right to purchase at a set price in the future. If the market price is higher than the strike at expiration, you profit; if it\u0026rsquo;s lower, you skip it and lose the premium. Put option: You pay to buy the right to sell at a set price in the future. If the market price is lower than the strike at expiration, you profit; if it\u0026rsquo;s higher, you skip it and lose the premium. The biggest difference from futures: Buying options, the most you can lose is the premium — you can\u0026rsquo;t get liquidated.\nA concrete example BTC is at $65,000. You think it\u0026rsquo;ll hit $70,000+ within a week.\nTraditional approach: Buy spot or go long on futures.\nSpot: Up 10% = you make 10%, down 10% = you lose 10% 5x futures: Up 10% = you make 50%, down 10% = you lose 50% (might get liquidated) Options approach: Buy one 1-week Call option with a $68,000 strike for $500 premium.\nBTC hits $72,000 in a week → after the premium, profit is ($72k - $68k) - $500 = $3,500 (7x return) BTC is at $66,000 in a week → don\u0026rsquo;t exercise, lose $500 (fixed) BTC crashes to $55,000 (worst case) → still just lose $500 (no liquidation!) Why it\u0026rsquo;s great:\nUpside is amplified (leverage effect) Downside is a fixed loss That\u0026rsquo;s the magic of options — your loss has a ceiling.\nHow to read the Bybit options interface Open Bybit → Trade → Options. You\u0026rsquo;ll see something like:\nBTC-30APR26-70000-C @ 420.5 ↑ ↑ ↑ ↑ ↑ Underlying Expiry Strike Direction Current Premium Date (C=Call, P=Put) Each option contract has 4 key pieces: Underlying / Expiration / Strike / Call or Put. Bybit groups by expiration date, and under each you see an \u0026ldquo;option chain\u0026rdquo; with quotes for different strikes in both Call and Put.\nCore concepts (understand in 5 minutes) Intrinsic Value\nCall: max(0, spot price - strike) Put: max(0, strike - spot price) Time Value\nPremium - Intrinsic Value The closer to expiration, the closer time value gets to zero (\u0026ldquo;time decay\u0026rdquo;) Three states:\nIn-The-Money (ITM): Intrinsic value \u0026gt; 0 At-The-Money (ATM): Strike ≈ spot price Out-Of-The-Money (OTM): Intrinsic value = 0 (pure time value) The Greeks (focus on these 3):\nDelta (Δ): If underlying moves $1, premium moves this much. Call is 0 to 1, Put is -1 to 0 Theta (Θ): Premium loss per day that passes (always negative) IV (Implied Volatility): Market\u0026rsquo;s forecast of future volatility. High IV = expensive premium Three practical scenarios Scenario 1: Lock in upside, eliminate downside risk You own 1 BTC at $65,000 spot price. You\u0026rsquo;re worried about a drop but don\u0026rsquo;t want to sell.\nBuy 1 contract, 1-month Put option with $63,000 strike, premium $1,500\nBTC drops to $58,000 → Exercise the put or let it expire worthless; either way, your spot holding loses $7,000 but the put breakeven is around $61,500 (loss cut from -$7,000 to -$3,500)\nBTC rallies to $75,000 → Premium wasted ($1,500), but your spot makes $10,000 → net $8,500 gain\nIt\u0026rsquo;s like paying $1,500 for downside insurance.\nScenario 2: Sell Call, earn time decay You own 1 BTC and think it won\u0026rsquo;t rally much in the near term.\nSell 1 contract, 2-week Call option with $70,000 strike, collect $800 premium\nBTC is below $70,000 in 2 weeks → Buyer doesn\u0026rsquo;t exercise, you pocket $800 net\nBTC is above $70,000 in 2 weeks → Buyer exercises, you sell your BTC at $70,000 (no cash loss, just sold lower than market, but you have the underlying so it\u0026rsquo;s covered)\nThis is called a Covered Call — a conservative income strategy.\nScenario 3: Bet on volatility before events Before an FOMC rate decision, volatility is expected to spike.\nBuy both a Call and a Put (same strike, same expiration) → this is called a Straddle After the announcement, if BTC rallies or crashes hard, you profit as long as the move exceeds the total premium paid Great for event-driven trading (FOMC, CPI, chain upgrades, etc.) when timing is clear.\nHow to place your first trade on Bybit I\u0026rsquo;d recommend starting with Scenario 1 (buy insurance, most conservative):\nHave BTC in your spot wallet (say, 0.1 BTC) Bybit App → Trade → Options Pick BTC, pick 1-month expiration, pick a Put strike about 5% below current spot price Size: 0.1 (matching your 0.1 BTC) Premium should be around 1-2% of your BTC value What happens:\nFor the next 30 days, no matter how much BTC falls, your loss won\u0026rsquo;t exceed the premium + the gap to the strike If BTC rallies over 30 days → you waste the premium, but your spot position gains even more 5 tips for newcomers Start with Bybit options: Bybit has better option liquidity than Binance, tighter spreads, easier fills Don\u0026rsquo;t sell out-of-the-money options (unless you own the underlying): potential loss is unlimited Don\u0026rsquo;t buy options close to expiration (\u0026lt; 7 days): time decay will kill your P\u0026amp;L Sell when IV is high, buy when IV is low: this is the core instinct of options traders Position sizing: single option trades should be no more than 2% of your portfolio The risk 80%+ of retail option buyers lose money, and 90%+ of sellers make money (but sellers can lose everything in one trade). So:\nBuying options = small frequent losses, possible big gains (friendly to retail) Selling options = consistent small gains + occasional blowup (needs strict risk control, capital, discipline) As a beginner, only buy, don\u0026rsquo;t sell. Once you get comfortable losing the premium, then explore selling strategies later.\nGetting started → Sign up for Bybit and enable options: After registration, do KYC once, then look for an \u0026ldquo;Options Enabled\u0026rdquo; button on the trading page. Answer a few risk questions and you\u0026rsquo;re good to trade.\nI\u0026rsquo;d suggest starting with $100 in small positions — buy a few cheap Calls or Puts (premium $20-50 range), feel out the gains and losses, then scale after 2-3 weeks.\nSummary Options aren\u0026rsquo;t mysterious or out of reach. At their core:\nPay a premium to own a future right Losses are capped, upside is unlimited Bybit has the best option liquidity, and retail traders can participate Once you learn options, you\u0026rsquo;ll see it\u0026rsquo;s the most elegant risk management tool available — beats getting liquidated on futures or bagholding spot.\nFurther reading:\nBybit vs Binance futures comparison Binance futures risk management Bybit copy trading guide ","permalink":"https://blog.panshi.io/en/posts/bybit-options-beginner/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Bybit Options for Beginners\" loading=\"lazy\" src=\"/images/bybit-options-beginner-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e99% of crypto traders are playing with futures, spot, and bots — \u003cstrong\u003eoptions are basically ignored by everyone\u003c/strong\u003e. But options are actually the strongest risk management tool out there — losses are capped, gains are unlimited. Bybit options has the best liquidity in crypto right now. This guide assumes you\u0026rsquo;re starting from zero and walks you through everything from reading quotes to placing your first trade.\u003c/p\u003e","title":"Getting started with Bybit options: Complete process from zero to first Put/Call trade"},{"content":" Futures are the most profitable—and most easily destructive—tool in crypto trading. Binance has always dominated retail, but Bybit is gaining momentum in the quant scene with its negative Maker fees (you place an order, the platform pays you). Which one is actually worth your money? This post breaks down six dimensions that retail traders care most about, without bias.\nQuick comparison table Dimension Binance Bybit USDT Perpetual Liquidity 🥇 Global #1 🥈 Global #2 Coin Perpetual Liquidity 🥇 Deepest Shallow Maker Fee 0.02% (positive) -0.01% (rebate) Taker Fee 0.05% 0.055% Minimum Order Size Usually $5-10 $1-5 (lower barrier) Funding Rate Market-driven Usually slightly lower Insurance Fund Tens of billions USDT Billions USDT Simplified Chinese Partial (compliance) Full New User Perks 20% fee rebate First deposit cashback + fee rebate Dimension 1: How negative Maker fees actually work Binance:\nMaker (place limit orders that fill): charges 0.02% Taker (take market price, execute immediately): charges 0.05% Cost per $100k order: $20 Maker, $50 Taker Bybit:\nMaker: pays you 0.01% (place $100k → earn $10) Taker: charges 0.055% Per $100k order: -$10 Maker (profit), $55 Taker (loss) Looks like Bybit wins, but the catch: you have to place Maker orders. When you take market orders (Taker), Bybit\u0026rsquo;s fees are slightly higher.\nWho actually profits:\nShort-term traders (mostly Taker) → roughly the same Quant market makers (mostly Maker) → Bybit wins by a lot Grid trading bots (all Maker) → Bybit\u0026rsquo;s negative fees = net profit on fees alone Dimension 2: Liquidity depth Testing BTC/USDT perpetuals with $100k order book:\nDepth within 1% of mid-price Binance Bybit Buy side ~$8M ~$5M Sell side ~$7M ~$4M Binance\u0026rsquo;s depth is typically 1.5–2x deeper than Bybit.\nImpact for retail:\nOrders \u0026lt; $1k: no meaningful difference Orders $10k+: you\u0026rsquo;ll notice Binance has less slippage Orders $100k+: Binance is the clear choice Impact for quant/market makers:\nDeeper liquidity = tighter spreads for market makers = your orders fill more easily Binance usually has better market-making efficiency Dimension 3: Product lineup and innovation Binance offers more:\nOptions (but thin liquidity) Launchpad / Launchpool (IDO) Earn / dual-asset investment and other DeFi products Megadrop / Copy Trading (retail-focused) Full suite: USDT + Coin perpetuals + futures + spot Bybit is more specialized:\nCopy trading (better than Binance; filter by win rate, drawdown, etc.) Options (better liquidity and depth; more market makers) Launchpad (fewer events but more distributed opportunity) Card (physical Visa USDT card, works globally at POS) Bybit Card signup guide Bybit Web3 (on-chain trade aggregator) If you\u0026rsquo;re into options or copy trading, Bybit\u0026rsquo;s clearly better. Bybit copy trading: how to pick reliable signal traders.\nDimension 4: Risk management and liquidation Binance:\nGradual liquidation (tiered position reduction) + insurance fund + Auto Deleveraging (ADL) Largest insurance fund Minimal fallout from liquidation Bybit:\nSame gradual liquidation + insurance fund + ADL Similar ADL trigger mechanics to Binance Insurance fund is only 1/3 the size of Binance\u0026rsquo;s → higher ADL probability in extreme crashes (like August 2024) What\u0026rsquo;s ADL: when massive liquidations in one direction exhaust the insurance fund, the system forcibly closes profitable positions to hedge. This is a major trap for quant strategies.\nBottom line: If you\u0026rsquo;re risk-averse, prioritize Binance.\nDimension 5: New user perks comparison Binance (via AFF link):\n20% fee rebate (permanent) New user bonuses (occasional holiday deals, $100 vouchers) Bybit (via AFF link):\n30% fee rebate (first 30 days) $50+ first deposit gets $10 USDT perpetuals trading credits Priority allocation in new user Launchpad draws If you\u0026rsquo;re new to crypto, Bybit\u0026rsquo;s perks are more immediately attractive. If you\u0026rsquo;re planning long-term heavy futures use, Binance\u0026rsquo;s permanent 20% rebate compounds over time.\nDimension 6: API and quant-friendliness Binance API:\nMost detailed documentation Strict but clear rate limits Richest library ecosystem (python-binance is the most mature) Bybit API:\nGood documentation but updates occasionally lag Slightly relaxed rate limits WebSocket order streams more stable than Binance (advantage for quant market making) For quant market makers or high-frequency traders → Bybit\u0026rsquo;s API is friendlier. For typical strategies, they\u0026rsquo;re similar.\nMy actual allocation I use both accounts:\nUse case Platform Reason BTC spot + futures hedge Binance Liquidity and insurance fund Grid trading bots (BTC/ETH) Bybit Negative Maker fees Copy trading Bybit Better signal trader filtering Options Bybit Better liquidity Margin lending / Earn Binance Wider financial product range 80/20 split: 80% of my capital on Binance, 20% on Bybit for specialized strategies.\nHow to choose Pick Binance if:\nYou\u0026rsquo;re new to futures (better risk controls) Your trade size is large (\u0026gt; $10k per order) You want Launchpool / Earn / diverse financial products Pick Bybit if:\nYou run grid bots or market-make (negative Maker fees) You copy trade You play options You want a crypto USDT card Use both (my recommendation):\nSpread risk across platforms Leverage each platform\u0026rsquo;s strengths for different strategies Double the new user perks → Sign up for Binance · Sign up for Bybit\nRisk disclosure Futures are a zero-sum game—over 60% of retail traders lose money. Before you trade futures:\nRead Binance futures risk management system Practice on paper trading or with a small position (\u0026lt; 5% of capital) for one month Learn to read funding rates and open interest (Binance funding rate arbitrage basics) Always set stop-losses. Always. Summary Liquidity depth: Binance wins Maker fees: Bybit\u0026rsquo;s negative rates (quant market maker friendly) Product range: Binance more comprehensive, Bybit excels at copy trading / options Risk management: Binance\u0026rsquo;s larger insurance fund New user perks: Bybit more attractive No \u0026ldquo;absolutely better\u0026rdquo; choice—just \u0026ldquo;better for this scenario.\u0026rdquo; I recommend opening both and choosing based on your strategy.\nFurther reading:\nBinance futures risk management system Binance funding rate arbitrage basics Bybit copy trading: how to pick reliable signal traders Bybit options for beginners ","permalink":"https://blog.panshi.io/en/posts/bybit-vs-binance-futures/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Bybit vs Binance Futures Comparison\" loading=\"lazy\" src=\"/images/bybit-vs-binance-futures-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eFutures are the most profitable—and most easily destructive—tool in crypto trading. Binance has always dominated retail, but Bybit is gaining momentum in the quant scene with its \u003cstrong\u003enegative Maker fees\u003c/strong\u003e (you place an order, the platform pays you). Which one is actually worth your money? This post breaks down six dimensions that retail traders care most about, without bias.\u003c/p\u003e\n\u003ch2 id=\"quick-comparison-table\"\u003eQuick comparison table\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eDimension\u003c/th\u003e\n          \u003cth\u003eBinance\u003c/th\u003e\n          \u003cth\u003eBybit\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eUSDT Perpetual Liquidity\u003c/td\u003e\n          \u003ctd\u003e🥇 Global #1\u003c/td\u003e\n          \u003ctd\u003e🥈 Global #2\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eCoin Perpetual Liquidity\u003c/td\u003e\n          \u003ctd\u003e🥇 Deepest\u003c/td\u003e\n          \u003ctd\u003eShallow\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eMaker Fee\u003c/td\u003e\n          \u003ctd\u003e0.02% (positive)\u003c/td\u003e\n          \u003ctd\u003e\u003cstrong\u003e-0.01%\u003c/strong\u003e (rebate)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTaker Fee\u003c/td\u003e\n          \u003ctd\u003e0.05%\u003c/td\u003e\n          \u003ctd\u003e0.055%\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eMinimum Order Size\u003c/td\u003e\n          \u003ctd\u003eUsually $5-10\u003c/td\u003e\n          \u003ctd\u003e$1-5 (lower barrier)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eFunding Rate\u003c/td\u003e\n          \u003ctd\u003eMarket-driven\u003c/td\u003e\n          \u003ctd\u003eUsually slightly lower\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eInsurance Fund\u003c/td\u003e\n          \u003ctd\u003eTens of billions USDT\u003c/td\u003e\n          \u003ctd\u003eBillions USDT\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSimplified Chinese\u003c/td\u003e\n          \u003ctd\u003ePartial (compliance)\u003c/td\u003e\n          \u003ctd\u003eFull\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eNew User Perks\u003c/td\u003e\n          \u003ctd\u003e20% fee rebate\u003c/td\u003e\n          \u003ctd\u003eFirst deposit cashback + fee rebate\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"dimension-1-how-negative-maker-fees-actually-work\"\u003eDimension 1: How negative Maker fees actually work\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBinance\u003c/strong\u003e:\u003c/p\u003e","title":"Bybit vs Binance Contract Comparison: Can Negative Maker Fees Really Let Retail Traders Make Money?"},{"content":" ⚠️ Registration Requirements: Pionex does not support mainland China IDs for KYC verification. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or other supported regions. See Pionex\u0026rsquo;s official list of restricted regions.\nWhen I first saw \u0026ldquo;BTC3L (3x long)\u0026rdquo; on Pionex, I thought it was just a simplified 3x leverage perpetual—buy in and enjoy 3x returns and losses. After running it for a month, I realized: it\u0026rsquo;s not. This post breaks down the real math behind leveraged ETFs, actual data, and which scenarios they do and don\u0026rsquo;t work for.\nWhat Are Leveraged ETF Tokens? Pionex\u0026rsquo;s BTC3L / BTC3S products are fundamentally daily-rebalanced fund shares:\nBTC3L: Maintains a position equivalent to 3x long leverage on BTC each day BTC3S: Maintains a position equivalent to 3x short leverage on BTC each day BTC5L / BTC5S: 5x versions (higher risk) Key point: The fund rebalances its position at close (UTC 00:00) each day to maintain 3x leverage the next day. It\u0026rsquo;s not a single perpetual position held indefinitely.\nThe Math Behind Daily Rebalancing Let\u0026rsquo;s say BTC moves over two days:\nDay 0: BTC = $60,000 Day 1: BTC +10% → $66,000 Day 2: BTC -10% → $59,400 (looks like it went back, but actually down 1%) 3x perpetual (buy once, don\u0026#39;t rebalance): Day 1: +30% (position grows) Day 2: -30% based on new position, actual loss is larger Final: (1+0.3)(1-0.3)-1 = -9% 3x ETF (daily rebalancing): Day 1: +30% → rebalances to $78,000 equivalent position Day 2: -30% → -$23,400 → settles to $54,600 Final: (1.3)(0.7) = -9% (same as perpetual?) Wait, they\u0026rsquo;re the same? The real difference shows in multi-day volatility:\n10 straight days: +5% then -5% each day (choppy, no direction) 3x ETF result: (1+0.15)(1-0.15)^5 × ... ≈ -18% (leakage!) Original BTC result: (1.05*0.95)^5 ≈ -1.25% Leakage ≈ 15-17 percentage points This is volatility drag—in choppy markets, 3x ETFs bleed money every day.\nSample Data (BTC3L over 30 days, typical scenario) Note: The figures below show typical performance across different market conditions. Real results depend heavily on BTC\u0026rsquo;s daily volatility distribution that month. Months with larger swings see worse volatility drag.\nLet\u0026rsquo;s say 30 days ago you bought $200 worth of BTC3L at $1.0 NAV. BTC rises 12% total over the month, but with decent daily swings.\nDate BTC Move BTC3L Daily Cumulative BTC3L Day 1 +3.2% +9.6% +9.6% Day 5 -2.8% -8.4% -11.5% Day 10 +4.1% +12.3% +6.2% Day 15 -1.2% -3.6% +8.8% Day 20 +2.5% +7.5% +14.7% Day 30 +1.1% +3.3% +21.8% Comparison:\nSame period BTC: +12% 3x ETF: +21.8% (not 36%!) 3x perpetual (assume): +36% (but you\u0026rsquo;d get liquidated in between) 21.8% vs the theoretical 36%: that 15-percentage-point gap is volatility drag eating your returns.\nWhen They Work Well ✅ Strong single-direction moves:\nBTC rallies from $60,000 to $75,000 (25%) with minimal pullbacks 3x ETF outperforms 3x perpetuals (the latter requires active position management; ETF auto-rolls) ✅ Short-term swing trades (1-3 days):\nYou\u0026rsquo;re betting on a directional move in the near term Buy BTC3L or BTC3S to catch the swing Hold for less than a week ✅ As a perpetual alternative (don\u0026rsquo;t want to manage yourself):\nAfraid of liquidation (ETFs can\u0026rsquo;t get liquidated) Won\u0026rsquo;t use stop-losses (ETF auto-rebalances, avoiding huge single-day losses) When They Don\u0026rsquo;t Work ❌ Long-term holds (months +):\nVolatility drag slowly eats your gains in choppy markets Beyond 30 days, you\u0026rsquo;re almost certain to lose money ❌ Sideways markets:\nBTC bounces between $60,000–$62,000 for a month 3x ETF loses money (every day you\u0026rsquo;re in a \u0026ldquo;zero numerator but negative denominator\u0026rdquo; scenario) ❌ Don\u0026rsquo;t understand the math above:\nIf you don\u0026rsquo;t know volatility drag = you\u0026rsquo;ll think just hodling works In that case, go try Pionex grid trading first (simpler mechanics, losses are capped) My Personal Strategy Leveraged ETFs only make sense in specific tactical moments (maybe 2–4 times a year):\nClear panic bottom (BTC breaks a key support) → buy 3L for the bounce Major certainty confirmed (Fed rate-cut expectations materialize) → ride the 3L move Before big uncertain events → stay away (high volatility but unclear direction) Usage rules:\nOnly use with clear catalyst + short-term conviction (≤ 2 weeks) Single position ≤ 5% of total capital Never hodl ETFs long-term Same as perpetuals, but no liquidation risk—friendlier for beginners.\nvs Perpetuals 3x Leverage ETF 3x Perpetual Liquidation risk None Yes Ease of entry ⭐⭐ ⭐⭐⭐⭐ Holding cost Hidden volatility drag Funding rates Short-term returns Roughly equal Roughly equal Long-term performance Notably worse Better (if not liquidated) Psychological pressure Low High Summary: Perpetuals are a pro tool, ETFs are a simplified one. If you can\u0026rsquo;t manage perpetual positions, ETFs are a safer alternative.\nHow to Buy On Pionex: Home → Markets → Search BTC3L or BTC3S (spot trading pairs, paired with USDT). Place a buy order like you\u0026rsquo;d buy any other coin.\n→ View all Pionex leverage ETFs\nTL;DR 3x ETFs aren\u0026rsquo;t simple 3x leverage, they\u0026rsquo;re daily-rebalanced funds Choppy markets suffer volatility drag that bleeds returns steadily They work for short-term catalyst plays (≤ 2 weeks) Long-term holds nearly always lose—don\u0026rsquo;t hodl them If you want real long-term leveraged exposure, learn to manage perpetuals. If you just want a short-term swing bet, ETFs are friendlier but you still need to understand the math.\nFurther reading:\nBinance Perpetual Risk Management Bybit vs Binance Perpetuals Pionex Grid Strategies Compared ","permalink":"https://blog.panshi.io/en/posts/pionex-leverage-etf-3x/","summary":"\u003cblockquote\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eRegistration Requirements\u003c/strong\u003e: Pionex does not support mainland China IDs for KYC verification. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or other supported regions. See \u003ca href=\"https://support.pionex.com/hc/en-us/articles/5929910517273\"\u003ePionex\u0026rsquo;s official list of restricted regions\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Pionex Leverage ETF 3x BTC\" loading=\"lazy\" src=\"/images/pionex-leverage-etf-3x-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eWhen I first saw \u0026ldquo;BTC3L (3x long)\u0026rdquo; on Pionex, I thought it was just a simplified 3x leverage perpetual—buy in and enjoy 3x returns and losses. After running it for a month, I realized: \u003cstrong\u003eit\u0026rsquo;s not\u003c/strong\u003e. This post breaks down the real math behind leveraged ETFs, actual data, and which scenarios they do and don\u0026rsquo;t work for.\u003c/p\u003e","title":"Pionex Leveraged ETF Real Experience: 3x BTC Is Not the 3x You Think It Is"},{"content":" ⚠️ Registration Requirements: Pionex does not support KYC with mainland China ID cards. You\u0026rsquo;ll need valid identification from Taiwan, Singapore, Malaysia, the US, or similar jurisdictions. See Pionex\u0026rsquo;s official regional restrictions.\nPeople using Pionex often see three bots in the backend—\u0026ldquo;Classic Grid,\u0026rdquo; \u0026ldquo;Infinite Grid,\u0026rdquo; and \u0026ldquo;Martingale Strategy\u0026rdquo;—that look similar but have completely different mathematical models. Picking the wrong type costs way more than tuning parameters poorly. This post breaks down the core differences and helps you choose the right bot for your situation.\nUnderstand the Essence in One Chart Strategy Core Assumption Profit Condition Max Risk Classic Grid Price oscillates within a range Repeated back-and-forth within bounds Break below floor with large position Infinite Grid Long-term uptrend with pullbacks Buy on each dip, sell on rallies Sustained drop breaking the floor Martingale Inevitable rebound after decline Single bounce recovers losses + profit Liquidation on continuous decline The fundamental difference is market assumptions—get them wrong and losses follow.\nClassic Grid (Spot Grid) Logic: Within a fixed price range (e.g., BTC $60,000–$70,000), divide the range into N grids with buy and sell orders at each level. When price drops to a level, it triggers a buy; when it rises to the next level, it triggers a sell. You profit from the per-grid spread.\nMathematical Model:\nPer-grid profit rate = grid spacing / buy price - 2 × fee Typical Use Cases:\nBTC, ETH oscillating between known support and resistance Stablecoin pairs (e.g., DAI/USDT arbitrage—minimal volatility but viable) Gold, silver, and other traditional oscillating assets Not Suitable For:\nOne-way rallies (you\u0026rsquo;ll miss out) One-way declines (you\u0026rsquo;ll carry heavy unrealized losses) See detailed guides: Pionex Gold Grid Bot and live results.\nInfinite Grid Logic: No upper limit, only a lower floor. When price rises X%, you sell a portion; when it pulls back X%, you buy again. In theory, no matter how high price goes, you won\u0026rsquo;t miss out.\nMathematical Model:\nDivide capital into N portions Buy 1 portion at current price on entry Sell 1/N of holdings on each X% rally Buy 1 new portion on each X% pullback Key Parameters:\nFloor price (worst-case drop threshold) Per-grid movement (recommended 1.5–3%) Capital allocation (recommended 10–20 portions) Typical Use Cases:\nYou\u0026rsquo;re bullish on a coin long-term but expect a bumpy path (like BTC) You want to \u0026ldquo;buy the dips\u0026rdquo; without letting emotions drive decisions Ideal for extracting more gains from trending markets Real-World Example (BTC/USDT):\nStarting price $65,000, floor $40,000, 10 portions of $100 each Over 30 days, BTC rises from $65,000 to $72,000 Infinite Grid yield: ~$180 (18% APY annualized) Straight HODL: +10.8% 7 percentage points better than HODL, but requires active rebalancing Risks:\nBTC breaks below $40,000 floor → you can\u0026rsquo;t buy anymore, capital sits idle During declines, you buy at every grid level, so unrealized losses grow first Martingale Strategy Logic: Every X% price drop, you increase your position (bigger drops mean bigger increases). When price bounces to a target level, you close everything for profit.\nMathematical Model (Pionex Martingale):\nFirst buy: $S 1st drop of –3% → buy 1.5×S (multiplier) 2nd drop of –3% → buy 1.5²×S 3rd drop of –3% → buy 1.5³×S ... Rally to first buy price × (1+y%) → sell all Core Risk: Continuous declines consume capital exponentially.\nPionex default: 1.5x multiplier, 15 levels Total capital needed after 15 levels = S × (1.5^15 - 1) / 0.5 ≈ 876 × S You think $100 is enough, but you actually need $87,600 to complete all 15 levels Typical Use Cases:\nLow-volatility markets (BTC consolidating during bull runs) Absolute confidence the coin won\u0026rsquo;t drop more than 50% Ample capital (recommend 10x your visible parameters) Not Suitable For:\nBear markets (you\u0026rsquo;ll go bankrupt holding) Low-cap coins (may go to zero) Beginners (parameters look profitable but liquidation risk is massive) Quick Comparison Classic Grid Infinite Grid Martingale Best For Range-bound markets Long-term uptrend + volatility Short-term bounce after drop Per-Trade Profit Fixed (grid spread) Fixed (per-grid rise) Rebound threshold Max Risk Holding at range floor Sustained break below floor Liquidation on continuous decline Capital Efficiency Low (evenly distributed) Medium Highest (but highest risk too) Learning Curve ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ Beginner-Friendly ✅ ⚠️ requires reading the trend ❌ too many pitfalls My Selection Strategy Over the past year, I\u0026rsquo;ve run all three simultaneously:\nInfinite Grid for BTC/ETH (I\u0026rsquo;m bullish long-term but want to capture intermediate volatility) Classic Grid for gold (clear range oscillation) Martingale only on quality coins that have already dropped 20%+ with small test amounts (and 10x capital reserve) I never put large capital into Martingale. Even when returns look highest.\nHow to Get Started Any bot on Pionex supports backtesting (run historical data from the past 30/90 days to see results). First compare a few parameter combinations, then run the smallest amount for 2 weeks to gauge your emotional tolerance for unrealized losses, then scale up.\n→ Start your first grid bot on Pionex\nSummary Classic Grid: Most stable, best for ranging markets and beginners Infinite Grid: Best for coins you\u0026rsquo;re bullish on long-term with clear volatility Martingale: Looks most profitable, actually easiest to liquidate—only for experienced traders with ample capital Picking the wrong type beats poorly-tuned parameters every time. First figure out what market regime you\u0026rsquo;re in, then choose the matching bot.\nFurther Reading:\nPionex Gold Grid Tutorial Pionex Gold Grid: 4-Month Live Results Pionex vs. Binance Grid Comparison ","permalink":"https://blog.panshi.io/en/posts/pionex-martingale-vs-grid/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eRegistration Requirements\u003c/strong\u003e: Pionex does not support KYC with mainland China ID cards. You\u0026rsquo;ll need valid identification from Taiwan, Singapore, Malaysia, the US, or similar jurisdictions. See \u003ca href=\"https://support.pionex.com/hc/en-us/articles/5929910517273\"\u003ePionex\u0026rsquo;s official regional restrictions\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Pionex Three Grid Strategy Comparison\" loading=\"lazy\" src=\"/images/pionex-martingale-vs-grid-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003ePeople using Pionex often see three bots in the backend—\u0026ldquo;Classic Grid,\u0026rdquo; \u0026ldquo;Infinite Grid,\u0026rdquo; and \u0026ldquo;Martingale Strategy\u0026rdquo;—that look similar but have completely different mathematical models. Picking the wrong type costs way more than tuning parameters poorly. This post breaks down the core differences and helps you choose the right bot for your situation.\u003c/p\u003e","title":"Pionex Grid Comparison: Classic Grid / Infinite Grid / Martingale Strategy - Which is Right for You?"},{"content":" ⚠️ Registration barrier: Pionex does not support mainland China ID cards for KYC verification. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or other supported regions. See Pionex\u0026rsquo;s official policy on restricted regions.\nGrid trading chases \u0026ldquo;buy low, sell high within a range\u0026rdquo;—volatility can be either an enemy or a friend depending on the setup. Spot-futures arbitrage is different. It profits from funding rates—a mathematically near-certain return stream. Pionex\u0026rsquo;s spot-futures arbitrage bot automates the whole hedging process. Here\u0026rsquo;s what real-world data and the pitfalls you need to know look like.\nWhat is spot-futures arbitrage? Crypto perpetual contracts and spot prices usually stay close, but perpetual contracts settle a funding rate every 8 hours:\nWhen contract price \u0026gt; spot price (bullish sentiment): longs pay shorts When contract price \u0026lt; spot price (bearish sentiment): shorts pay longs If you simultaneously hold spot + short the same amount on perpetuals, the price movements cancel out on both sides, but every 8 hours you pocket a steady funding rate payment.\nThe math:\nSpot position gain/loss: +ΔP Perpetual short gain/loss: -ΔP (losses when price rises, gains when it falls—perfectly offsetting) Funding rate gain: Longs pay shorts × every 8 hours ─────────── Net gain = Funding rate (directional risk already hedged) This is why spot-futures arbitrage is called a \u0026ldquo;market-neutral strategy\u0026rdquo;—you don\u0026rsquo;t care if price goes up or down, you just harvest funding rates.\nSetting up Pionex\u0026rsquo;s spot-futures arbitrage bot Path: App home → Bots → Basis Arbitrage (spot + USDT-margined perpetuals)\nKey parameters:\nParameter Recommended Notes Trading pair BTC / ETH / SOL Deep liquidity, stable funding rates Capital ≥ $500 Below this, rounding eats into returns Leverage 1x (default) Keep spot 1:1 hedged, no leverage Auto-exit Funding rate \u0026lt; 0.005% No point holding when rates drop this low Key point: Pionex automates the buy orders + short setup, and the bot ensures positions stay perfectly hedged. If you hedge manually, slippage will eat into your gains.\nSample data (BTC/USDT spot-futures arbitrage, 30-day run) Note: The figures below represent typical ranges under normal market conditions. Actual returns depend on that month\u0026rsquo;s funding rate movement (higher during bull-market greed, near-zero during bear-market apathy).\nAssume $1000 invested with default settings:\nWeek Cumulative funding rate Fees Net gain APY 1 $4.2 $0.8 $3.4 17.6% 2 $2.1 $0.8 $1.3 6.8% 3 $3.8 $0.8 $3.0 15.6% 4 $5.1 $0.8 $4.3 22.4% 30-day total $15.2 $3.2 $12.0 ~14.6% APY Week 2 dipped because market sentiment cooled and funding rates near-zeroed out. This is normal for arbitrage: you don\u0026rsquo;t earn every day; you rake it in during bull-market greed windows.\nvs. pure stablecoin yields Same $1000 sitting in Binance\u0026rsquo;s savings products:\nUSDT demand deposits: 3–5% APY USDT 30-day lockup: 5–8% APY USDC demand deposits: 2–4% APY Pionex\u0026rsquo;s 14.6% APY is notably higher, though with slightly more risk (covered next).\nRisks and gotchas Risk 1: Funding rates flip negative\nIn extreme bear sentiment, shorts pay longs instead. Pionex\u0026rsquo;s auto-exit logic should prevent this, but you could get reverse-charged for 1–2 settlement cycles.\nRisk 2: Liquidation risk\nEven with 1x hedging, in extreme moves (flash crashes or explosive rallies), the perpetuals account\u0026rsquo;s margin can trigger forced liquidation. Keep ample margin (at least 30% buffer) to avoid it.\nRisk 3: Wrong trading pair choice\nIlliquid pairs have wild funding rate swings—APY looks attractive but evaporates overnight. Stick to major pairs like BTC/ETH/SOL; steady beats flashy.\nCombining with grid trading My current mix:\n$1000 in Pionex basis arbitrage (steady returns) $800 in Pionex golden grid (volatility harvest) $200 as dry powder (waiting for special setups) The two strategies barely correlate:\nGrids eat volatility Arbitrage eats funding rates During extreme moves, one might be up while the other is down That\u0026rsquo;s the simplest portfolio principle—don\u0026rsquo;t put all eggs in one basket, even if both baskets are on Pionex.\nHow to get started You\u0026rsquo;ll need a Pionex account and to clear KYC first:\nSign up for Pionex, complete KYC Deposit USDT to spot (at least $500, ideally $1000+) Transfer half to your futures account (spot-futures arbitrage needs futures margin) App home → Bots → Basis Arbitrage → pick BTC/USDT → enter $500 → launch with defaults The bot will auto-decide whether to open (it won\u0026rsquo;t if funding rates are weak).\nBottom line Spot-futures arbitrage won\u0026rsquo;t make you rich, but it sits at \u0026ldquo;earns more than stablecoin yields, risks less than directional trades.\u0026rdquo; It suits:\nAnyone with $1000+ free capital who wants steady returns People curious about quant strategies but don\u0026rsquo;t want to code A low-risk companion to grid trading It doesn\u0026rsquo;t suit:\nBudgets under $500 (fees eat your gains) Chasing 50%+ APY (this isn\u0026rsquo;t that) Those who don\u0026rsquo;t understand funding rates but want high leverage (go read the perpetuals primer first) → Launch spot-futures arbitrage on Pionex\nFurther reading:\nBinance funding rate arbitrage complete guide — manual vs Pionex bot Pionex golden grid live performance Quant toolkit: Binance API + Grafana ","permalink":"https://blog.panshi.io/en/posts/pionex-basis-arbitrage/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eRegistration barrier\u003c/strong\u003e: Pionex does not support mainland China ID cards for KYC verification. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or other supported regions. See \u003ca href=\"https://support.pionex.com/hc/en-us/articles/5929910517273\"\u003ePionex\u0026rsquo;s official policy on restricted regions\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Pionex Spot-Futures Arbitrage Bot\" loading=\"lazy\" src=\"/images/pionex-basis-arbitrage-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eGrid trading chases \u0026ldquo;buy low, sell high within a range\u0026rdquo;—volatility can be either an enemy or a friend depending on the setup. \u003cstrong\u003eSpot-futures arbitrage is different. It profits from funding rates—a mathematically near-certain return stream.\u003c/strong\u003e Pionex\u0026rsquo;s spot-futures arbitrage bot automates the whole hedging process. Here\u0026rsquo;s what real-world data and the pitfalls you need to know look like.\u003c/p\u003e","title":"Pionex Spot-Futures Arbitrage: Tested Results of 8-15% Annual Low-Risk Stable Returns"},{"content":" ⚠️ Registration Requirements: Pionex does not accept mainland China IDs for KYC verification. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or other supported regions. See Pionex\u0026rsquo;s official restricted regions notice.\nDisclaimer: The specific figures below are a monthly review template demonstrating data format, event attribution, and optimization thinking. Actual returns depend on market volatility, position sizing, trading fees, and other factors—calculate your own account results accordingly.\nAfter running a grid bot for 3 months, month 4 typically brings several more interesting challenges than the first three: the gold price hits the upper range boundary triggering a shutdown, reconfiguration, and one metric I\u0026rsquo;d never seriously calculated before—trading fees as a percentage of gross profit. This post uses a typical monthly review dataset as a template to clarify which metrics to track and how to interpret them.\nMonth 4 Timeline Date Event Account Impact Day 92 Gold price hits $4900 ceiling for the first time, grid fully sells out Lock in floating gains +$18 Day 95 Wait 3 days for pullback, restart range $4750–$4950 Capital efficiency recovers Day 103 Fed rate decision eve, manually pause for 24 hours Miss ~$4 in volatility Day 112 Resume operations, increase total capital to $800 Higher profit per grid Day 120 Month closes, review — Data Comparison (First 3 Months vs Month 4) Metric First 3 Months Month 4 Number of Trades 847 412 Gross Profit $72 $38 Trading Fees $13 $7.2 Net Profit $59 $30.8 Daily Average Profit $0.65 $1.03 Cumulative APY ~40% ~62% (annualized) Month 4 shows higher daily profit because hitting the upper boundary avoids the \u0026ldquo;idle period\u0026rdquo; during one-way rallies—the bot sat idle for 3 days, but efficiency jumped after reconfiguring the range.\nThe Trading Fee Ratio Surprise I\u0026rsquo;d never done the math rigorously until now, and the numbers shocked me:\nFirst 3 months: $13 fees / $72 gross = 18% Month 4: $7.2 fees / $38 gross = 19% Nearly one-fifth of gross profit gets eaten by trading fees. Pionex\u0026rsquo;s spot grid charges 0.05% per side—looks tiny in isolation, but with grid strategy\u0026rsquo;s high trade frequency, it adds up fast.\nI tested a few ways to reduce fees:\nHold PINT (Pionex\u0026rsquo;s platform token) for 20% fee discount—requires lock-up, trading off capital efficiency for lower fees Increase per-grid profit margin (reduce grid count)—tested 30 grids → 15 grids: trades cut in half but profit per trade doubled, fee ratio drops but total returns also fall Only run during high-volatility windows—during low vol, grids don\u0026rsquo;t make money anyway, so shutting down beats paying fees I settled on combining options 2 and 3: 15 grids + only running during high-vol periods.\nThe Scaling Decision On day 112, I scaled capital from $600 to $800. Why:\n3 months + one successful range completion validated the strategy works under current gold volatility Pionex\u0026rsquo;s platform earned my confidence (3 months without issues) But I didn\u0026rsquo;t scale to $2000+, because I don\u0026rsquo;t want outsized exposure to a single tool This is my most basic understanding of position management: validate a cycle → scale slightly → validate again, not all-in on day one.\nIf you haven\u0026rsquo;t run this yet, don\u0026rsquo;t start with big capital. Try $100–200 for a month, feel out whether you can psychologically handle \u0026ldquo;watching your account underwater while waiting for the bounce.\u0026rdquo; Here\u0026rsquo;s Pionex\u0026rsquo;s signup, and new users get 30 days of fee rebates.\nLessons from Month 4 Lesson 1: Forgetting to pause before surprises\nDay 103, Fed decision day—I forgot to pause the bot beforehand. After the announcement, gold dropped 1.5% in 3 hours, grid fully converted to holding position, account showed -$12 unrealized loss. Fortunately the lower boundary held, and the bot kept running after recovering.\nTakeaway: Add a calendar entry: the first Wednesday of each month (Fed meeting), pause 12 hours before, resume after announcement.\nLesson 2: Paused ≠ freed funds\nDay 92, gold broke above the ceiling and the bot stopped. I thought my funds were freed, but they stayed \u0026ldquo;locked\u0026rdquo; in the bot (orders still on the exchange). I didn\u0026rsquo;t realize you have to manually click \u0026ldquo;stop bot\u0026rdquo; and \u0026ldquo;close positions\u0026rdquo; to release capital.\nPlans for Month 5 Write a monitoring script to auto-post Telegram alerts when hitting range boundaries Try Pionex\u0026rsquo;s cash-and-carry arbitrage strategy (higher capital utilization, steadier returns) Set up a Grafana dashboard to track live trading APY over time Summary The template figures above (month 4: $89 profit / starting from $600 / ~45% annualized) are for demonstration. Real-world annualization depends on:\nMarket volatility (month 4 saw events, yet returns beat the prior 3 months) Whether your range fits current price levels (range selection is paramount) Whether you optimize fees (15–20% is normal) Gold grid trading isn\u0026rsquo;t a get-rich-quick scheme or something you can run blindly. Its real value is being a low-cost robot enforcing disciplined trading—it prevents you from chasing highs during rallies or panic-selling during dips. When price revisits your range, it makes money.\nI\u0026rsquo;ll continue monthly reviews, focused on: fee optimization, scaling discipline, and integrating Claude for automation.\n→ Pionex: the world\u0026rsquo;s largest exchange with built-in grid bots. Free access to 16 automated strategies.\nFurther Reading:\nPionex Gold Grid Bot Tutorial — basic parameter setup Pionex Gold Grid: First 3 Months Live Trading — launch through month 3 Pionex vs Binance Grid Comparison ","permalink":"https://blog.panshi.io/en/posts/pionex-xau-profit-log-month4/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eRegistration Requirements\u003c/strong\u003e: Pionex does not accept mainland China IDs for KYC verification. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or other supported regions. See \u003ca href=\"https://support.pionex.com/hc/en-us/articles/5929910517273\"\u003ePionex\u0026rsquo;s official restricted regions notice\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Pionex Gold Grid Month 4 Live Trading Profit Log\" loading=\"lazy\" src=\"/images/pionex-xau-profit-log-month4-hero.jpg\"\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eDisclaimer\u003c/strong\u003e: The specific figures below are a \u003cstrong\u003emonthly review template\u003c/strong\u003e demonstrating data format, event attribution, and optimization thinking. Actual returns depend on market volatility, position sizing, trading fees, and other factors—calculate your own account results accordingly.\u003c/p\u003e","title":"Pionex Golden Grid Month 4 Live Trading: One Interruption, Two Position Increases, Net Profit Curve"},{"content":" Editor\u0026rsquo;s note: The article below is written by AI. This tool\u0026rsquo;s primary purpose is to avoid having your Macbook\u0026rsquo;s AIGC API calls go directly through domestic IPs and risk account suspension when traveling. Prerequisite: Surge must be configured to route AIGC traffic through specified chains (e.g., VPS→US residential bandwidth). This essentially guarantees 100% that you won\u0026rsquo;t accidentally route AIGC API directly through domestic internet.\nAt home, I run a fail-closed network protection scheme based on Surge + PF firewall: Surge handles proxy routing, and PF serves as the final kill switch—when the Surge process unexpectedly exits, outbound traffic is automatically blocked by PF, preventing direct leaks.\nBut here\u0026rsquo;s the problem: how do you know if your protection is working right now?\nStaring at the Surge icon by eye clearly isn\u0026rsquo;t practical. So I built NetworkGuard—a tiny app living in the menu bar that runs a detection loop every 5 seconds and sends a system notification if something\u0026rsquo;s wrong.\nWhat it looks like Open the menu and you get a complete system snapshot:\nPF firewall: Current mode (guarded / open / lockdown) Surge: Process status + enhanced mode + proxy mode (rule/proxy/direct) Xray bridge: Whether the fallback proxy port is LISTEN At-home detection: ARP + sentinel dual verification to confirm you\u0026rsquo;re on your home network Quick actions: Temporarily allow for 30 min, manually lockdown, restore auto monitoring The menu bar icon uses SF Symbols for at-a-glance status:\nIcon Meaning checkmark.shield Optimal: guarded + Surge healthy exclamationmark.shield Surge error, needs attention shield.slash Auto lockdown (Surge down and away from home) lock.shield Manually locked At-home detection: Why you need this When you\u0026rsquo;re away from home, Surge crashing means you must lockdown—without a proxy chain, direct outbound connections leak. But on your home network, even if Surge crashes temporarily, your router and mihomo are still running, so traffic has another path—no need to lockdown immediately.\nSo surge-guard (the daemon controlling PF) checks whether you\u0026rsquo;re on your home network. The logic is:\nat_home = (ARP local MAC match) AND (sentinel HTTP probe success) Specifically:\nARP group: Verify that MAC addresses of two LAN devices match (fallback to each other) Sentinel group: Send HTTP requests to two local servers (with token auth); either passing counts Need both types of evidence: ARP only proves you\u0026rsquo;re on the subnet; sentinel with token auth rules out spoofing If either fails, you\u0026rsquo;re not considered at-home, and Surge will enter lockdown if it crashes.\nWeb monitoring dashboard On startup, the app spins up an HTTP server on localhost:9800 with three endpoints:\nlocalhost:9800/ — HTML dashboard, auto-refreshes every 5 seconds /api/status — Current probe status (JSON) /api/events — Last 50 status change records The dashboard shows real-time status of all probes plus a history of state transitions—every Surge restart, mode switch, or ARP state change is logged, making it easy to debug \u0026ldquo;why did the icon flicker just now\u0026rdquo; issues.\nEvent logs are stored locally in JSONL format, organized by type:\nType Trigger Notifies pf_mode PF mode switch ✅ surge Surge process/mode change ✅ (process only) sentinel Sentinel reachability change ❌ home Home/away toggle ❌ xray Xray port change ❌ override Temporary allow start/end ✅ Notifications only fire for truly important events—sentinel jitter won\u0026rsquo;t bother you.\nDebouncing: Fixing false positives Early versions had an annoying problem: during the few seconds when Surge restarts, the app would falsely report \u0026ldquo;Surge process exited\u0026rdquo;, flash an exclamation mark, and send a notification—but Surge was just restarting.\nRoot cause: all probes used instant state switching—one failed check would flip the state.\nThe fix: add debouncing to each signal. State only switches after 3 consecutive failed checks (~15 seconds), but recovery takes effect immediately. A failStreak dict tracks consecutive failures per signal:\nfunc debounce(_ key: String, rawOk: Bool, stableOk: Bool) -\u0026gt; Bool { if rawOk { failStreak[key] = 0 return true // recovery takes effect immediately } let streak = (failStreak[key] ?? 0) + 1 failStreak[key] = streak return streak \u0026lt; 3 ? stableOk : false // only switch after 3 consecutive failures } Surge gets extra protection: if the process exists but the API is temporarily unresponsive, we keep the last-known mode and enhanced state—one API timeout won\u0026rsquo;t trigger the warning icon.\nAnother gotcha: curl probes of the sentinel go through Surge\u0026rsquo;s TUN interface—when Surge restarts, the TUN is down and the probe fails. The fix: use --noproxy '*' to force direct LAN connection, bypassing the TUN:\ncurl -fsS --max-time 2 --noproxy \u0026#39;*\u0026#39; -H \u0026#34;X-Guard-Token: ...\u0026#34; http://local_ip:18888/healthz Similarly, ARP cache refresh switched from ping (through TUN) to TCP port 80 connection (local subnet routing, bypassing Surge).\nWhen Surge crashes: The 5-second window This is something I carefully reasoned through when building the system.\nAway from home, there\u0026rsquo;s roughly a 5-second window between Surge crash and lockdown. Network state during those 5 seconds:\nNew outbound non-CN connections: Already blocked by PF (the allow_wan table in guarded mode is empty by design; PF rules are already blocking this traffic before Surge crashes) New CN IP connections: Direct and unblocked, but without proxy—bare connection Existing TCP connections: Still in PF state table; might transmit data for a few more seconds After 5 seconds, lockdown kicks in and forcibly closes all existing connection states.\nSo the real risk window isn\u0026rsquo;t the \u0026ldquo;5 seconds after Surge crashes\u0026rdquo;—it\u0026rsquo;s pre-existing outbound connections with DIRECT rules that are mid-transmission when Surge crashes. The PF state table lets them live a few extra seconds.\nOn your home network, Surge crashing won\u0026rsquo;t trigger lockdown, because home_trusted holds—your router and mihomo are still running, so traffic is safe. This is by design.\nOverall architecture NetworkGuard itself doesn\u0026rsquo;t control any firewall rules—it only reads state files and sends system notifications. The actual PF controller is surge-guard.sh (a root daemon), and the two communicate via state files:\nsurge-guard.sh (root) ├── runs guard_once() every 5 seconds ├── controls PF anchor rules └── writes ~/.config/surge-guard/state NetworkGuard.app (user space) ├── reads state file every 5 seconds ├── probes Surge API / ARP / sentinel / Xray └── sends system notifications + updates menu + logs events One more design note: the NetworkGuard process is the master switch for the entire protection system. Each cycle, surge-guard.sh checks if NetworkGuard is running; if not, it automatically switches to open mode (allow everything)—letting your computer resume normal internet. Reopen the app and protection resumes.\nThe entire app is a single Swift file using AppKit + UserNotifications + Network Framework, compiles to ~300KB. If you also have a similar Surge + PF setup and want to visualize its status, this approach should be worth considering.\n📷 Cover image · Flux Schnell AI generated · Panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/macos-network-guard-status-bar/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"person using macbook pro on table\" loading=\"lazy\" src=\"/images/macos-network-guard-status-bar-hero.jpg\"\u003e\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eEditor\u0026rsquo;s note:\nThe article below is written by AI.\nThis tool\u0026rsquo;s primary purpose is to avoid having your Macbook\u0026rsquo;s AIGC API calls go directly through domestic IPs and risk account suspension when traveling.\nPrerequisite: Surge must be configured to route AIGC traffic through specified chains (e.g., VPS→US residential bandwidth).\nThis essentially guarantees 100% that you won\u0026rsquo;t accidentally route AIGC API directly through domestic internet.\u003c/p\u003e","title":"I built a network security guardian in the Mac status bar"},{"content":"\nAkileCloud is a VPS provider that\u0026rsquo;s been getting a lot of traction in Chinese tech communities lately. It\u0026rsquo;s known for optimized CN2 routing to mainland China, with pricing between Bandwagon Host and standard BGP options. This review is based on three months of actual usage.\nWho is Akile? Akile is a VPS provider that emerged in recent years, serving the Chinese-speaking market with nodes in Hong Kong, US, Japan, and other regions. Their key focus is optimized routing to mainland China networks. Main selling points:\nHong Kong CMI / CN2 GIA lines US CN2 GIA return path Pricing 20-30% lower than Bandwagon Host for equivalent specs Accepts Alipay and crypto payments Benchmarks My plan: HK CMI 1C/1G/20GB SSD/1TB traffic, ~$12/month (discounted if paid yearly).\nHardware Performance # CPU $ lscpu | grep \u0026#34;Model name\u0026#34; Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz # Disk I/O $ dd if=/dev/zero of=test bs=1M count=1000 oflag=direct 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.3 s, 467 MB/s # Memory $ free -m total used free Mem: 963 180 783 CPU isn\u0026rsquo;t cutting-edge, disk I/O is standard, memory is a full 1GB. Plenty for running proxies or small sites.\nNetwork Performance Latency to mainland China (tested from Guangzhou Telecom):\n$ mtr -rn -c 20 AKILE_IP HOST: test-vps 1. GZ Telecom gateway 2ms 2. China Telecom backbone 5ms 3. China Telecom intl out 45ms 4. China Telecom CN2 GIA 50ms 5. Hong Kong landing 58ms 6. AkileCloud edge 60ms 7. AKILE_IP 62ms Average latency: 62ms Packet loss: 0% Peak hours test (20:00-24:00):\nTime Latency Download Late night (03:00) 58ms ~95 Mbps Daytime (14:00) 65ms ~80 Mbps Peak hours (21:30) 85ms ~60 Mbps Deep night (01:00) 62ms ~90 Mbps Peak hours show degradation but no packet loss. Latency climbs from 58ms to 85ms—acceptable.\nComparison with Competitors Same test from Guangzhou Telecom, Hong Kong nodes:\nProvider Avg Latency Peak Latency Peak Bandwidth DMIT HK PVM Eyeball 32ms 48ms Unlimited Bandwagon Host HK CMI 42ms 55ms 1 Gbps AkileCloud HK CMI 62ms 85ms ~60 Mbps RackNerd US LA 185ms 260ms Unstable Clear positioning: Akile sits between DMIT/Bandwagon (better) and RackNerd/CloudCone (lower tier), with pricing to match.\nPlans \u0026amp; Pricing Hong Kong Datacenter Plan RAM Traffic Monthly Yearly HK CMI Mini 512MB 500GB ~$6 ~$60 HK CMI Standard 1GB 1TB ~$12 ~$120 HK CMI Advanced 2GB 2TB ~$22 ~$220 US Datacenter US West CN2 GIA return path:\nPlan RAM Traffic Monthly US CN2 Mini 512MB 500GB ~$4 US CN2 Standard 1GB 1TB ~$8 US nodes are ~30% cheaper than Hong Kong, but latency is similar to standard US VPS (150-200ms).\nJapan Datacenter Plan RAM Traffic Monthly JP SoftBank 1GB 800GB ~$15 Japan nodes have 80-120ms latency, good for optimized access to Japanese services.\nIP Quality Akile\u0026rsquo;s IP quality is mid-tier:\nTest Result IP Registration All HK, clear ASN Netflix Unlock ✅ HK Region Disney+ Unlock ✅ HK Region ChatGPT Access ⚠️ Some IPs work, some blocked Claude.ai ✅ Working Google Account Login ✅ Normal Cloudflare Challenge Frequency Occasional (non-standard UA gets hit) Gotcha: My first IP got blocked by ChatGPT. Opened a ticket and got a working replacement for free within 24 hours. Been stable since.\nProxy Deployment in Practice Deployed Xray + Hysteria2 dual protocol on Akile HK (see detailed setup guides: Xray and Hysteria2).\nDaily usage experience (mihomo rule-based routing):\nYouTube 4K smooth, no stuttering Netflix 1080p smooth ChatGPT webpage loads normally Claude.ai webpage normal Google search fast 60 Mbps during peak hours is plenty for home proxy usage—three people streaming YouTube simultaneously works fine.\nSupport \u0026amp; Ticketing Ticket response: 6-12 hours for general questions, Telegram group for urgent issues IP replacement: Free IP swaps for blocked IPs via ticket, usually within 24 hours Refunds: 7-day no-questions-asked refund (via ticket) Support: Chinese + English, bilingual support for presales and postsales Real experience:\nFirst IP swap (ChatGPT block): Ticket → replaced in 8 hours Second inquiry (backup snapshots): 2-hour response, clear instructions Payment Methods Accepts:\nAlipay (most convenient for Chinese users) Credit card / PayPal Crypto (USDT-TRC20 / USDT-ERC20 / BTC) Crypto payments have no fees; Alipay has minor forex loss (~1-2%).\nWhen to Buy Akile Good use cases for Akile:\nBudget ~$120/year wanting CN2 routing: Bandwagon same tier costs $150+, Akile saves 20% Bandwagon out of stock: Popular plans (Bandwagon HK CMI) often sold out; Akile has consistent inventory Home proxy node: 60-95 Mbps is plenty for home proxy use Trying a Chinese VPS provider: Chinese support, no language barriers When to skip Akile:\nSensitive to peak-hour latency (\u0026lt;60ms): Pick DMIT HK PVM Eyeball instead Multi-account operations / bulk registration: IP ranges are concentrated; one blocked IP impacts more E-commerce / gaming / streaming needs: Requires more bandwidth than Akile\u0026rsquo;s per-plan limits Comparison Matrix for Decision-Making Priority Recommendation Performance \u0026gt; Price DMIT HK PVM Eyeball Stability \u0026gt; Price Bandwagon CN2 GIA-E Best Value \u0026gt; Peak Performance AkileCloud HK CMI Maximum Budget Savings RackNerd yearly Short-term Testing CloudCone hourly billing Detailed comparison: RackNerd vs CloudCone vs Bandwagon Host\nFAQ Q: How much worse is Akile vs Bandwagon Host? Routing: Bandwagon CN2 GIA-E beats Akile CMI by half a tier—15-20ms lower latency, more stable during peak hours.\nPrice: Akile is 20-30% cheaper.\nIP Quality: Bandwagon slightly better (Netflix/ChatGPT pass rate higher).\nSupport: Akile slower response (6-12 hours vs 1-4 hours).\nBottom line: Tight budget → Akile. Budget available → Bandwagon.\nQ: Hong Kong or US—which is worth it? HK: Low latency (62ms), smaller bandwidth, good for general proxy use. US: Higher latency (150-200ms), potentially better streaming unlock (Netflix US).\nFor most Chinese users doing general proxy work, HK is the pick. US only if you specifically need US IPs.\nQ: Any free trial options? No free trial. But the 7-day refund policy doubles as a \u0026ldquo;trial\u0026rdquo;—buy it, test for a few days, open a ticket to refund if it doesn\u0026rsquo;t work out.\nQ: Lagging during peak hours? Three options:\nUpgrade to a higher-tier CN2 GIA plan (some Akile plans offer this) Use mihomo multi-node failover, auto-switch during peaks Layer in a CDN (Cloudflare / self-hosted Warp) Q: How long do tickets take? General inquiries: 6-12 hours Outages: 1-3 hours Critical (downtime): 30 minutes Telegram group available for escalation Wrap-up: AkileCloud is a clear-eyed mid-tier VPS provider—cheaper than Bandwagon, more stable than RackNerd. Best for users with tight budgets who don\u0026rsquo;t want to suffer through standard BGP peak-hour congestion.\nAlready using Bandwagon? No need to switch. Haven\u0026rsquo;t bought CN2 VPS before? Akile\u0026rsquo;s a solid, low-friction entry point.\n→ Sign up for AkileCloud → Other VPS comparisons → VPS setup after purchase\nQuestions? Join us on Telegram.\n📷 Hero image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/akile-cn2-vps-review/","summary":"\u003cp\u003e\u003cimg alt=\"A close up view of a computer processor\" loading=\"lazy\" src=\"/images/akile-cn2-vps-review-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=akile\"\u003eAkileCloud\u003c/a\u003e is a VPS provider that\u0026rsquo;s been getting a lot of traction in Chinese tech communities lately. It\u0026rsquo;s known for \u003cstrong\u003eoptimized CN2 routing to mainland China\u003c/strong\u003e, with pricing between Bandwagon Host and standard BGP options. This review is based on three months of actual usage.\u003c/p\u003e\n\u003ch2 id=\"who-is-akile\"\u003eWho is Akile?\u003c/h2\u003e\n\u003cp\u003eAkile is a VPS provider that emerged in recent years, serving the Chinese-speaking market with nodes in Hong Kong, US, Japan, and other regions. Their key focus is \u003cstrong\u003eoptimized routing to mainland China networks\u003c/strong\u003e. Main selling points:\u003c/p\u003e","title":"AkileCloud domestic-optimized VPS review: latency, routing, and applicable use cases"},{"content":" BandwagonHost is one of the longest-established VPS providers in China\u0026rsquo;s tech community. I\u0026rsquo;ve been using it continuously since 2022 and have renewed multiple times; my main plan is CN2 GIA-E. This article captures hands-on experience with choosing plans, data centers, swapping IPs, and migrations.\nWhat CN2 GIA actually is \u0026ldquo;CN2 GIA\u0026rdquo; stands for China Telecom\u0026rsquo;s Global Internet Access (China Next-generation Network 2 Global Internet Access), split into two tiers:\nRouting English Details CN2 GT Entry-tier Standard international backbone, good quality CN2 GIA Premium Commercial-grade direct line, all three domestic ISPs both directions BandwagonHost\u0026rsquo;s CN2 GIA-E (E = Enhanced) keeps CN2 GIA routing across all three domestic ISPs both ways, maintaining speed even during peak hours. Expensive but genuinely reliable.\nBandwagonHost\u0026rsquo;s main plans (2026) BandwagonHost uses PID (Product ID) to distinguish plans. Common ones:\nCN2 GIA-E (main recommendation) PID RAM Disk Bandwidth Annual Data center 87 1GB 20GB 1TB ~$50 DC6 / DC9 CN2 GIA-E 88 2GB 40GB 2TB ~$90 DC6 / DC9 CN2 GIA-E 89 4GB 80GB 3TB ~$170 DC6 / DC9 CN2 GIA-E For proxy nodes, PID 87 is more than sufficient. PID 88 (2GB) handles higher-bandwidth scenarios.\nHong Kong CMI (direct-to-HK routing) PID RAM Disk Bandwidth Annual Data center 134 2GB 40GB 500GB ~$150 HK CMI 135 4GB 80GB 1TB ~$270 HK CMI Hong Kong latency is lower (25–40ms), but bandwidth is limited and prices higher. Best for latency-critical scenarios (game acceleration, remote work).\nJapan SoftBank PID RAM Bandwidth Annual 95 1GB 1TB ~$90 96 2GB 2TB ~$170 SoftBank Japan routing has 80–100ms latency; it excels for accessing Japanese services (Twitch, Bilibili JP, some Japanese APIs).\nLegacy plans (Quadranet / Fremont, not recommended) BandwagonHost still offers some cheap plans with standard BGP routing ($20–30/year), but they\u0026rsquo;re extremely slow during peak hours. Not recommended.\nDC6 vs DC9 data centers BandwagonHost\u0026rsquo;s CN2 GIA-E has two data centers (both in Los Angeles):\nData center Characteristics My experience DC6 older facility, stable, older IP ranges used for 2 years with no major issues DC9 newer facility, same CN2 GIA, newer IP ranges most new plan allocations here Real-world difference: DC6 and DC9 network quality are virtually identical (both CN2 GIA). The main difference is in IP ranges:\nDC6 IPs are slightly more likely to be blocked by certain services (ChatGPT, etc.) because more people use them DC9 IPs are newer and have relatively lower block probability When ordering, the product page will show the data center. If you have a preference, you can request a specific data center in a support ticket.\nAnnual vs monthly billing Billing cycle PID 87 cost Average monthly Monthly $11.99/month $11.99 Annual ~$50/year $4.17 2-year ~$95 $3.95 Strongly recommend annual or 2-year billing — 60% cheaper than monthly.\nReal-world network performance (CN2 GIA-E PID 87) mtr test from Guangzhou China Telecom (Apr 2026):\n$ mtr -rn -c 50 VPS_IP HOST: test 1. Guangzhou Telecom gateway 3ms 2. China Telecom backbone 6ms 3. China Telecom intl exit 18ms 4. CN2 core 223.120.x 42ms 5. CN2 GIA Los Angeles POP 155ms 6. BandwagonHost border 156ms 7. VPS_IP 156ms Average latency: 156ms Packet loss: 0% Time-of-day comparison:\nTime Latency Download (iperf3) 03:00 152ms 180 Mbps 14:00 158ms 150 Mbps 20:00 170ms 100 Mbps 22:00 180ms 80 Mbps 01:00 155ms 160 Mbps 80 Mbps during peak hours is the CN2 GIA baseline — completely sufficient for residential proxying.\nIP quality BandwagonHost\u0026rsquo;s IP quality is above-average:\n✅ Netflix US / ChatGPT / Claude.ai — most IPs work ✅ Disney+ / YouTube work normally ⚠️ Some IP ranges are marked as \u0026ldquo;VPS IPs\u0026rdquo; by AWS / Google Cloud and may be restricted by high-sensitivity services (financial) ✅ Google account login and mainstream social platforms work normally Note: BandwagonHost IPs are allocated from shared physical machines. A single /24 subnet may have hundreds of VPSs, so IP block risk is higher than with dedicated IPs.\nIP change in practice One of BandwagonHost\u0026rsquo;s biggest strengths: one-click paid IP change.\nWhen you need to change IP IP identified by Netflix as \u0026ldquo;proxy\u0026rdquo;, unable to watch IP blocked by ChatGPT IP blocked (inaccessible from mainland) Node under DDoS IP change process Log into BandwagonHost → Services → click your VPS Find Shutdown VM (power down first) After shutdown, Assign New IP Address button appears Pay $8.79 (2026 pricing) System assigns new IP, ready to use after powering on Entire process 2–5 minutes — faster than most VPS providers.\nIP change gotchas The new IP you get might still be blocked: BandwagonHost assigns randomly from a \u0026ldquo;pending allocation IP pool\u0026rdquo;, so bad luck and you might get one ChatGPT has already blocked One free change per year: new policy after 2024 — each VPS gets one free change per year, beyond that requires payment IPs are reclaimed if shut down for over 72 hours: important for those thinking of \u0026ldquo;temporarily shutting down to save bandwidth\u0026rdquo; Data center migration Scenario: your VPS is in DC6 and you want to migrate to DC9 (or vice versa).\nProcess:\nSubmit a support ticket requesting \u0026ldquo;Migrate to DC9\u0026rdquo; (or DC6) Ticket response usually within 24 hours VPS IP will change after migration completes Cost: usually free, one free migration per lifecycle Note: VM will experience downtime from minutes to hours during migration; users are notified in advance.\nBandwagonHost\u0026rsquo;s operations features Free snapshots The control panel supports manual snapshots — up to 2 per VPS. Extremely useful for \u0026ldquo;system config broken\u0026rdquo; scenarios:\nconfigure system → take snapshot if config breaks later, one-click rollback to snapshot snapshots don\u0026rsquo;t count toward disk quota OS reinstallation The control panel supports common operating systems:\nUbuntu 20.04 / 22.04 / 24.04 Debian 11 / 12 CentOS 7 / 8 Stream (not recommended, EOL) Windows Server (requires additional license fee) Recommend Ubuntu 22.04 or Debian 12.\nKiwiVM control panel BandwagonHost uses its proprietary KiwiVM panel — feature-complete:\nreal-time bandwidth graph (5-minute granularity) CPU/memory/IO monitoring online VNC (can recover if system is broken) reverse DNS (rDNS) configuration Payment methods One of BandwagonHost\u0026rsquo;s friendliest features for Chinese users: Alipay support.\nMethod Fee Time to account Alipay none instant Credit card none instant PayPal none instant USDT none 1–2 minutes For new users, Alipay is most convenient — no credit card needed.\nPitfalls to avoid Pitfall 1: bargain plans aren\u0026rsquo;t CN2 GIA BandwagonHost has some legacy cheap plans ($20–30/year) using standard BGP routing that are extremely slow during peak hours. Don\u0026rsquo;t fall for the bargain — usable during daytime, basically unusable at night.\nPitfall 2: assuming both PID 87 and PID 50 are CN2 GIA Some legacy PIDs use CN2 GT (one tier below), not GIA. Read the plan description carefully before buying, or just stick with the official current main plans: PID 87 / 88 / 89.\nPitfall 3: popular plans frequently out of stock PID 87 is cheapest and most popular, often out of stock. Solutions:\nregister for \u0026ldquo;out of stock\u0026rdquo; alerts on BandwagonHost\u0026rsquo;s official page follow restock announcements on NodeSeek / HostLoc forums during stockouts you can buy PID 88 (twice the price but usually available), then downgrade later Pitfall 4: thinking OS reinstallation affects IP OS reinstallation doesn\u0026rsquo;t change IP — safe to reinstall. To change IP you must use the Shutdown + Assign New IP process.\n4 years of experience I\u0026rsquo;ve been continuously using BandwagonHost since 2022 and tried DMIT / RackNerd / Akile and other providers in between. BandwagonHost\u0026rsquo;s strengths:\nStable: fewer than 5 total machine outages in 4 years, all with advance notice Convenient IP changes: $8.79 one-click swap — no competition here Responsive Chinese support: tickets answered in 1–4 hours, Chinese-language support Alipay payments: biggest user-friendly feature for Chinese users Drawbacks:\nPricier than DMIT / Akile Popular plans go out of stock IP block probability correlates with user count (because more people use it) When to choose BandwagonHost Scenario Rating Budget $50+/year, want stable proxy ⭐⭐⭐⭐⭐ Want user-friendly payment (Alipay) ⭐⭐⭐⭐⭐ Need frequent IP changes ⭐⭐⭐⭐⭐ extreme budget (\u0026lt;$20/year) ⭐ choose RackNerd latency requirement \u0026lt;30ms ⭐⭐⭐ choose BandwagonHost HK CMI or DMIT → Buy BandwagonHost (AFF link) → RackNerd vs CloudCone vs BandwagonHost comparison → AkileCloud domestic-optimized VPS review → What to do if your VPS IP gets blocked\nHave questions about purchasing or setup? Chat with us on Telegram.\n📷 Cover image · generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/bwg-cn2-gia-deep-review/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Server rack with blinking green lights\" loading=\"lazy\" src=\"/images/bwg-cn2-gia-deep-review-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=bwg\"\u003eBandwagonHost\u003c/a\u003e is one of the longest-established VPS providers in China\u0026rsquo;s tech community. I\u0026rsquo;ve been using it continuously since 2022 and have renewed multiple times; my main plan is \u003cstrong\u003eCN2 GIA-E\u003c/strong\u003e. This article captures hands-on experience with choosing plans, data centers, swapping IPs, and migrations.\u003c/p\u003e\n\u003ch2 id=\"what-cn2-gia-actually-is\"\u003eWhat CN2 GIA actually is\u003c/h2\u003e\n\u003cp\u003e\u0026ldquo;CN2 GIA\u0026rdquo; stands for China Telecom\u0026rsquo;s Global Internet Access (\u003cstrong\u003eC\u003c/strong\u003ehina \u003cstrong\u003eN\u003c/strong\u003eext-generation \u003cstrong\u003eN\u003c/strong\u003eetwork 2 \u003cstrong\u003eG\u003c/strong\u003elobal \u003cstrong\u003eI\u003c/strong\u003enternet \u003cstrong\u003eA\u003c/strong\u003eccess), split into two tiers:\u003c/p\u003e","title":"BandwagonHost CN2 GIA In-Depth Review: Package Selection, Data Center Differences, IP Change Walkthrough"},{"content":" 💡 Note for mainland China users: Binance\u0026rsquo;s official website cannot be accessed directly from mainland China without a VPN. For CNY deposits, the platform doesn\u0026rsquo;t support direct bank transfers—instead, use peer-to-peer (C2C) channels to exchange USDT for CNY.\nMany people think \u0026ldquo;algorithmic trading\u0026rdquo; means chasing trends or grid trading, but funding rate arbitrage is a unique, low-risk strategy specific to crypto that can reliably generate 8–20% annualized returns. This article covers the mechanics and execution in detail.\nWhat\u0026rsquo;s a Funding Rate? Perpetual futures have no expiration date—instead, they use \u0026ldquo;funding rates\u0026rdquo; to keep the contract price aligned with the spot price.\nContract price \u0026gt; Spot price → Longs pay shorts (positive rate) Contract price \u0026lt; Spot price → Shorts pay longs (negative rate) Binance settles funding rates every 8 hours (08:00 / 16:00 / 00:00 UTC), with payouts/charges happening each time.\nAnnualized math: 0.01% × 3 times/day × 365 days = 10.95%/year (typical scenario)\nCore Arbitrage Principle When a coin\u0026rsquo;s funding rate stays positive for an extended period (longs paying shorts), you can:\nBuy spot 1 BTC ($77,000) Short perpetual 1 BTC ($77,000, using 1x margin) Price moves don\u0026rsquo;t matter (spot gains offset futures losses—they hedge) Pocket the shorts\u0026rsquo; funding payments continuously This is funding rate arbitrage, also called Delta-neutral arbitrage.\nStep-by-Step Execution (BTC Example) Step 1: Check the Funding Rate Go to Binance → Futures → Funding Rate, and review BTC/USDT perpetual historical rates.\nThresholds:\n7-day average \u0026gt; 0.01% (annualized \u0026gt;11%) → worth doing 7-day average 0.005%–0.01% (annualized 5–11%) → marginal, depends on scale 7-day average \u0026lt; 0.005% → skip it Top coins (BTC/ETH) have stable but lower rates; altcoins offer higher rates but with more volatility.\nStep 2: Prepare Capital Let\u0026rsquo;s say you\u0026rsquo;re targeting 1 BTC (at ~$77,000):\nSpot holdings: $77,000 (1 BTC) Futures margin: $12,000 (1 BTC × $77,000 ÷ 7 leverage, with buffer) Total: ~$89,000 Leverage choice: 7–10x on the contract (leaves room for price swings)—but the actual hedge is 1:1, not \u0026ldquo;10x leverage.\u0026rdquo;\nStep 3: Open Both Positions Simultaneously Critical: open spot and futures at the same time to minimize price slippage\nUse a Python script with the ccxt library for synchronized orders:\nimport ccxt import time binance = ccxt.binance({ \u0026#39;apiKey\u0026#39;: \u0026#39;YOUR_API_KEY\u0026#39;, \u0026#39;secret\u0026#39;: \u0026#39;YOUR_SECRET\u0026#39;, }) binance_futures = ccxt.binanceusdm({ \u0026#39;apiKey\u0026#39;: \u0026#39;YOUR_API_KEY\u0026#39;, \u0026#39;secret\u0026#39;: \u0026#39;YOUR_SECRET\u0026#39;, }) # Get current price ticker = binance.fetch_ticker(\u0026#39;BTC/USDT\u0026#39;) price = ticker[\u0026#39;last\u0026#39;] amount = 1 # 1 BTC # Execute synchronously start = time.time() # Spot buy spot_order = binance.create_market_buy_order(\u0026#39;BTC/USDT\u0026#39;, amount) # Futures short futures_order = binance_futures.create_market_sell_order(\u0026#39;BTC/USDT\u0026#39;, amount) end = time.time() print(f\u0026#34;Execution time: {end-start:.2f} seconds\u0026#34;) print(f\u0026#34;Spot fill price: {spot_order[\u0026#39;average\u0026#39;]}\u0026#34;) print(f\u0026#34;Futures fill price: {futures_order[\u0026#39;average\u0026#39;]}\u0026#34;) Note: Keep the price slippage between fills minimal (\u0026lt; 0.05%)—larger gaps eat into your first few days of rewards.\nStep 4: Hold and Collect Funding After opening:\nFunding rates settle automatically every 8 hours at UTC times (00:00 / 08:00 / 16:00) USDT payouts arrive in your futures account Your spot BTC remains as is Check the spot–futures spread daily; if it widens beyond 0.5%, rebalance manually Step 5: Close the Position When to close:\nFunding rate turns negative (or hovers near zero) Spot–futures spread blows up You need the capital elsewhere Closing = sell spot + close short, executed simultaneously.\nRevenue Estimate Say you hold for 30 days with an average funding rate of 0.015% (slightly above historical average):\nPer 8-hour period: $77,000 × 0.015% = $11.55 Per day (3 periods): $34.65 30 days: $1,040 Monthly return: $1,040 / $89,000 = 1.17% Annualized: ~14% After fees and slippage, actual annualized returns of 8–15% are typical.\nCoin Selection Conservative (Recommended for Beginners) Coin Typical Rate Range Liquidity Rating BTC/USDT 0.005%–0.015% Excellent ⭐⭐⭐⭐⭐ ETH/USDT 0.005%–0.02% Excellent ⭐⭐⭐⭐⭐ SOL/USDT 0.01%–0.025% Good ⭐⭐⭐⭐ BTC and ETH are most stable, with excellent liquidity—you can exit quickly if things go sideways.\nAggressive (For Experienced Traders) Some altcoins offer rates above 0.1%, but carry higher risks:\nRisk Details Poor liquidity Large orders face massive slippage Volatile rates Rates can swing from +0.1% to −0.1% instantly Delisting risk Binance occasionally removes altcoins Extreme volatility Contracts can liquidate during flash moves Altcoin arbitrage requires constant monitoring—not recommended for beginners.\nRisk Management Risk 1: Futures Liquidation The problem: You\u0026rsquo;re shorting perpetuals, and if price rallies hard, losses mount.\nScenario:\nOpen at BTC = $77,000, short 1 BTC BTC rallies to $88,000; your short loses $11,000 If margin runs out, liquidation hits—you lose the hedge while still holding spot Solutions:\nKeep margin ratio below 30% (far from liquidation) Set alerts: margin ratio \u0026gt; 40% → Telegram notification Top up margin from spot account when price spikes Risk 2: Funding Rate Reversal The problem: Rates flip from positive to negative, and you start paying.\nSolutions:\nCheck rates every 8 hours If rates stay negative for 3 consecutive periods (24 hours), close the position Script it: auto-close if rate \u0026lt; 0 Risk 3: Spot–Futures Spread Widens The problem: In extreme market conditions, spot and futures can diverge significantly (normally \u0026lt; 0.1%, extreme cases \u0026gt; 1%).\nSolutions:\nVerify spread \u0026lt; 0.1% before opening Check daily while holding If spread blows out (\u0026gt; 0.5%), close and consider reopening fresh Risk 4: Exchange Risk The problem: The exchange gets hacked, goes under, or freezes accounts (FTX scenario).\nSolutions:\nStick to tier-one exchanges (Binance is #1 globally) Never park more than 30% of total capital on one exchange For large amounts, spread across platforms Automation Options Manual (Beginners) Check funding rates daily via the web interface Use the website to open and close Best for \u0026lt; $10,000 Scripted (Intermediate) Python + ccxt to monitor rates automatically Trigger opens/closes when conditions hit Push rate updates and alerts to Telegram Best for $10,000–$100,000 All-in-One Platforms (Advanced) Some platforms offer one-click arbitrage:\nPionex (my choice) Bybit Earn (official offering, principal-protected) Binance Finance (select products are rate arbitrage) No coding required, but fees shave 10–20% off returns.\nSample Telegram Monitoring Script import ccxt import requests import time BINANCE = ccxt.binanceusdm() TG_TOKEN = \u0026#34;your_bot_token\u0026#34; TG_CHAT = \u0026#34;your_chat_id\u0026#34; SYMBOLS = [\u0026#39;BTC/USDT\u0026#39;, \u0026#39;ETH/USDT\u0026#39;, \u0026#39;SOL/USDT\u0026#39;] ALERT_THRESHOLD = 0.015 # 0.015% = 16.4% annualized def send_tg(msg): requests.post(f\u0026#34;https://api.telegram.org/bot{TG_TOKEN}/sendMessage\u0026#34;, data={\u0026#34;chat_id\u0026#34;: TG_CHAT, \u0026#34;text\u0026#34;: msg}) def check(): for sym in SYMBOLS: ticker = BINANCE.fetch_funding_rate(sym) rate = ticker[\u0026#39;fundingRate\u0026#39;] next_time = ticker[\u0026#39;fundingTimestamp\u0026#39;] if rate \u0026gt; ALERT_THRESHOLD: annualized = rate * 3 * 365 * 100 msg = f\u0026#34;🟢 {sym} funding rate {rate*100:.4f}%, annualized {annualized:.1f}%\u0026#34; send_tg(msg) # cron: */30 * * * * (check every 30 minutes) check() Comparison with Other Low-Risk Strategies Strategy Annual Return Risk Monitoring Effort USDT Savings (DeFi) 3–8% Low (smart contract risk) Low USDT Fixed-Term (Exchange) 5–10% Low (platform risk) Low Funding Rate Arbitrage 8–15% Medium (liquidation) Medium Pionex Golden Grid 20–40% Medium (range breakout) Medium BTC Spot DCA Varies Medium (price volatility) Low Funding rate arbitrage offers a solid return/risk sweet spot, ideal for those who want to exceed traditional savings without betting on price direction.\nMy Personal Setup My funding rate arbitrage on Binance:\nMain position: BTC/USDT, $50,000, ~12% annualized Secondary position: ETH/USDT, $20,000, ~14% annualized Monitoring: Python + Telegram, updated hourly Alerts: Margin ratio \u0026gt; 40% or rate \u0026lt; 0 → push notification Execution: Manual opens/closes; scripts for monitoring only (avoid automation bugs) 6-month track record: ~7% cumulative return (not annualized; actual cash in hand: $4,900).\nFees and Referral Bonuses Binance fee structure:\nUser Tier Maker Taker Standard 0.1% 0.1% VIP1 (\u0026gt;$1M / 30 days) 0.09% 0.1% BNB Holder (5% discount) 0.095% 0.095% Referral Rebate −25% rebate −25% rebate Signing up via an affiliate link qualifies you for fee rebates, which materially impact returns over time (save 20–25% on fees).\nFAQ Q: Can beginners do funding rate arbitrage? Yes. The barrier to entry is low, but you must understand futures basics first (margin, liquidation, funding rates). Start small ($500–$1,000) for a month to get the hang of it.\nQ: What\u0026rsquo;s the minimum starting capital? Technically $1,000, but fees eat a huge chunk at that scale. I\u0026rsquo;d recommend $5,000 minimum.\nQ: How much time per day? Stable periods: ~5 minutes (check rates and margin) Volatile periods: 15–30 minutes Open/close days: 1–2 hours (ensure synchronized fills) Q: How do I split spot vs. futures capital? Here\u0026rsquo;s what I do:\nSpot holdings = target position size (e.g., 1 BTC) Futures margin = 15–20% of spot holdings Reserve another 10% for emergency margin top-ups Q: Is there a \u0026ldquo;fully passive\u0026rdquo; option? Pionex\u0026rsquo;s smart-bot grid arbitrage is close, but returns are 30–50% lower (platform fees). Great for hands-off investors.\nQ: What about taxes? Crypto arbitrage tax treatment is murky in mainland China. If you\u0026rsquo;re in the US or EU, you\u0026rsquo;ll need to report capital gains. Consult a local accountant.\nBottom line: Funding rate arbitrage is one of crypto\u0026rsquo;s lowest-risk strategies and suits:\nInvestors wanting stable USDT returns Those who don\u0026rsquo;t want price exposure but can handle perpetual mechanics People with some quant background who can monitor and automate → Sign up at Binance (affiliate) → Binance API from Zero to First Trade → Binance Fee Optimization → Three-Layer Perpetual Risk Architecture → Quant Toolkit\nQuestions on live trading? Reach out on Telegram.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/binance-arbitrage-basics/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e💡 \u003cstrong\u003eNote for mainland China users\u003c/strong\u003e: Binance\u0026rsquo;s official website cannot be accessed directly from mainland China without a VPN. For CNY deposits, the platform doesn\u0026rsquo;t support direct bank transfers—instead, use peer-to-peer (C2C) channels to exchange USDT for CNY.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"a screen shot of a stock chart on a computer\" loading=\"lazy\" src=\"/images/binance-arbitrage-basics-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eMany people think \u0026ldquo;algorithmic trading\u0026rdquo; means chasing trends or grid trading, but \u003cstrong\u003efunding rate arbitrage\u003c/strong\u003e is a unique, low-risk strategy specific to crypto that can reliably generate 8–20% annualized returns. This article covers the mechanics and execution in detail.\u003c/p\u003e","title":"Binance Funding Rate Arbitrage for Beginners: Complete Guide to Spot + Perpetual Hedging Strategies"},{"content":"\nDMIT is my go-to VPS provider, with top-tier lines in Japan, Hong Kong, and Los Angeles. This article provides a complete comparison of the three lines and shows you which scenario each is best suited for.\nFor the basic purchase flow, see DMIT VPS Purchasing Guide. This article focuses on how to choose between the three lines.\nThree Lines Overview Line Product Name Typical Monthly Line Type Hong Kong Eyeball PVM.HKG Eyeball $14.9-58.9 CMI (multi-ISP optimized) Tokyo, Japan PVM.TYO $16.9-58.9 SoftBank + NTT Los Angeles Premium, USA PVM.LAX Premium $12-48 CN2 GIA Los Angeles Economy, USA PVM.LAX Economy $6-20 Standard BGP Japan and Hong Kong pricing is comparable, but US Premium is 25% cheaper.\nReal-World Latency (From Guangzhou CT, April 2026) Hong Kong PVM Eyeball $ mtr -rn -c 50 HK_IP 1. Guangzhou CT gateway 2ms 2. China Telecom backbone 4ms 3. China Telecom Shenzhen exit 8ms 4. CMI landing 15ms 5. DMIT HK edge 18ms 6. HK_IP 20ms Avg latency: 20-35ms Peak hours latency: 30-45ms Packet loss: 0% Hong Kong advantage: Shortest geographic distance, lowest latency.\nTokyo, Japan PVM $ mtr -rn -c 50 JP_IP 1. Guangzhou CT 3ms 2. China Telecom international exit 25ms 3. SoftBank JP network 70ms 4. DMIT JP edge 80ms 5. JP_IP 82ms Avg latency: 80-100ms Peak hours latency: 100-130ms Packet loss: 0-1% Japan advantage: Low latency for accessing Japanese services (Twitch, Bilibili Japan site, certain Japanese APIs).\nLos Angeles Premium, USA (CN2 GIA) $ mtr -rn -c 50 LAX_IP 1. Guangzhou CT 3ms 2. CN2 core 30ms 3. CN2 LA landing 145ms 4. DMIT LAX edge 150ms 5. LAX_IP 152ms Avg latency: 145-165ms Peak hours latency: 155-180ms Packet loss: 0% US Premium advantage: CN2 GIA line, maintains speed during peak hours, fresh IP pool (many IPs not yet blacklisted by major services).\nLos Angeles Economy, USA (Standard BGP) $ mtr -rn -c 50 LAX_ECO_IP Avg latency: 180-220ms Peak hours latency: 260-320ms Packet loss: 2-8% Economy is the budget option, but peak hours become noticeably slow—not recommended as a primary proxy.\nBandwidth Comparison iperf3 from Guangzhou, 30-minute test:\nLine Midnight Daytime Peak Hours HK Eyeball 500 Mbps+ 400 Mbps+ 300+ Mbps JP PVM 200 Mbps 150 Mbps 100 Mbps LAX Premium (CN2) 120 Mbps 100 Mbps 80 Mbps LAX Economy 50 Mbps 30 Mbps \u0026lt; 20 Mbps HK offers the most bandwidth, best for large file downloads and high-quality streaming.\nIP Quality Comparison Test HK JP LAX Premium LAX Economy Netflix Unlock Hong Kong region Japan region US region (partial) Partial Disney+ ✅ HK ✅ JP ✅ US Partial ChatGPT ✅ ⚠️ Partial ✅ ❌ Claude.ai ✅ ⚠️ Partial ✅ Partial Google ✅ ✅ ✅ ✅ Cloudflare Challenge Occasional Occasional Rare Frequent Twitter/X ✅ ✅ ✅ ✅ LAX Premium has the best IP quality (fresh pool, clean ASN), HK and JP are comparable, Economy is weaker.\nUnique Advantages of Each Line Hong Kong PVM Eyeball Unique Advantages Ultra-low latency: No domestic line can reach 20ms Largest bandwidth: Home proxy can sustain 300+ Mbps Netflix HK unlock: Niche but needed by some for Hong Kong region content Best use cases:\nDaily proxy backbone (latency-sensitive users) Remote work / video conferencing Need Hong Kong region streaming Tokyo, Japan PVM Unique Advantages Fast Japanese service access: Twitch, Bilibili Japan site, DMM, Pixiv, etc. Gaming acceleration: Low latency for Japanese servers Japan IP location: Useful for \u0026ldquo;Japan IP required\u0026rdquo; account registration Best use cases:\nACG enthusiasts (Japanese streaming) Japanese server gamers Japan region account registration Los Angeles Premium, USA Unique Advantages Best IP quality: Fresh pool, high ChatGPT / Claude pass-through rate US region streaming: Netflix US, HBO Max, Hulu, etc. Relatively cheaper: 25% less than HK CN2 GIA stability: Maintains speed during peak hours Best use cases:\nAI tools (ChatGPT / Claude) egress US streaming (richest content selection) Cross-border e-commerce / US business Pricing Comparison (Same Specs) Using 1C/1GB/1TB traffic as example:\nLine Monthly Yearly HK Eyeball Tiny $14.9 ~$150 JP PVM Tiny $16.9 ~$170 LAX Premium Tiny $11.9 ~$120 LAX Economy Tiny $5.9 ~$60 Price order: LAX Economy \u0026lt; LAX Premium \u0026lt; HK \u0026lt; JP\nScenario Decision Guide Scenario 1: Daily Internet Privacy (Home Use) Priority Recommendation Latency first HK Eyeball Best value LAX Premium Cheapest HK Eyeball (if out of stock, use LAX Premium instead) Scenario 2: AI Tools Only (ChatGPT / Claude) Only recommendation: LAX Premium\nChatGPT is sensitive to datacenter IPs; LAX Premium\u0026rsquo;s fresh pool has the highest pass rate If still blocked, layer with IPRoyal Residential IP Scenario 3: Multi-Region Streaming Region Content Recommendation US (Netflix US / HBO) LAX Premium Hong Kong (Netflix HK) HK Eyeball Japan (Netflix JP / Bilibili) JP PVM Watching multiple regions: Buy one backbone (HK or LAX) + one on-demand (JP), use mihomo rules for traffic splitting.\nScenario 4: Gaming Acceleration Server Region Recommendation Japanese servers JP PVM (required) US servers LAX Premium Hong Kong servers HK Eyeball Gaming is latency-sensitive—must buy the right regional node.\nScenario 5: Cross-Border Business / E-Commerce Only recommendation: LAX Premium\nRegister US accounts (Amazon Seller / Stripe / PayPal) US e-commerce platform operations Pair with IPRoyal Residential IP for multi-accounting Scenario 6: VPN Node / Jump Server Purpose Recommendation Japan jump server (company intranet access to Japan office) JP PVM Hong Kong jump server HK Eyeball US jump server LAX Premium Scenario 7: Node Pool / High Availability Buy several for redundancy. Recommended combination:\nPrimary: HK Eyeball (low latency) Backup: LAX Premium (different region, disaster recovery) Special use: JP PVM (as needed) My Actual Deployment I currently have 3 nodes at DMIT:\nHK Eyeball Tiny: Daily proxy backbone, runs Xray + Hysteria2 LAX Premium Tiny: AI tools dedicated egress (ChatGPT / Claude) JP PVM Tiny (occasional): Enabled when accessing Japanese services Using mihomo config for traffic splitting (see mihomo Traffic Splitting Rules):\n# mihomo config excerpt rules: - DOMAIN-SUFFIX,openai.com,DMIT-LAX - DOMAIN-SUFFIX,claude.ai,DMIT-LAX - DOMAIN-SUFFIX,anthropic.com,DMIT-LAX - DOMAIN-SUFFIX,bilibili.com,DMIT-JP # Japan site - DOMAIN-SUFFIX,pixiv.net,DMIT-JP - DOMAIN-SUFFIX,netflix.com,DMIT-HK # HK region Netflix - MATCH,DMIT-HK # default to Hong Kong Handling Out-of-Stock Hot DMIT packages (HK Tiny / LAX Premium Tiny) go out of stock frequently. How to handle:\nMethod 1: Follow Official Telegram DMIT has a restock notification channel. Fast hands, fast luck.\nMethod 2: Buy a Larger Plan Temporarily If Tiny (1GB) is out of stock, buy Small (2GB) temporarily. Generally no downgrade support, but month-to-month you can use it until Tiny is back.\nMethod 3: Use Another Provider as Temporary Replacement HK out of stock → use AkileCloud HK LAX Premium out of stock → use Bandwagon Host CN2 GIA-E\nMethod 4: Annual Billing Lock-In Once you get it, switch to annual billing to avoid restock issues at renewal.\nDMIT Gotchas Gotcha 1: Economy Line Isn\u0026rsquo;t Worth It Though cheap ($5.9/month), peak hours mean 260-320ms+ latency with packet loss—proxy becomes unusable. If your budget is $60/year, go straight to Bandwagon Host Plan 87 or RackNerd (see Three-Way Comparison).\nGotcha 2: IPv6 Support is Limited Some DMIT packages don\u0026rsquo;t include IPv6, only IPv4. Increasingly, services (some China domestic CDNs) require IPv6—confirm beforehand.\nGotcha 3: Traffic Cap Causes Disconnection DMIT traffic cap cuts the line completely (not throttled). Check traffic usage around the 25-28th of each month. Can buy traffic add-ons if needed.\nGotcha 4: Support Response Not That Fast DMIT ticket response typically 12-24 hours. Telegram group is faster for urgent issues.\nFAQ Q: HK or LAX Premium—which is worth buying? Latency matters (\u0026lt;50ms): HK Eyeball AI tools / US streaming: LAX Premium Tight budget: LAX Premium (25% cheaper) For most people daily, HK feels smoother (lower latency).\nQ: How does DMIT JP compare to Bandwagon Host Japan SoftBank? Comparison DMIT JP BandwagonHost Japan SoftBank Price $16.9/month+ $90/year (~$7.5/month) Latency 80-100ms 100-130ms Bandwidth 150 Mbps 80 Mbps IP Quality Good Fair DMIT JP has better performance, Bandwagon JP has better value.\nQ: Can I mix DMIT and Bandwagon Host? Yes. I do it myself:\nDMIT HK / LAX (daily proxy + AI tools) Bandwagon Host CN2 GIA-E (backup node) Use mihomo for automatic rule-based switching Q: What payment methods does DMIT accept? Credit card / PayPal Cryptocurrency (USDT TRC20 recommended) Some plans support Alipay Q: What\u0026rsquo;s the difference between DMIT\u0026rsquo;s KVM and LXC? KVM: Full virtualization, supports kernel tweaks (BBR etc.), Docker LXC: Container virtualization, cheaper, but doesn\u0026rsquo;t support custom kernels Strongly recommend KVM. Many proxy protocols (Hysteria2 etc.) won\u0026rsquo;t run on LXC.\n→ DMIT Complete Purchase Guide → DMIT Official Registration (AFF) → Bandwagon Host CN2 GIA Deep Review → mihomo Traffic Splitting Rules\nUnsure about which line? Ask on Telegram.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/dmit-jp-vs-hk-vs-us/","summary":"\u003cp\u003e\u003cimg alt=\"a close up of a server in a server room\" loading=\"lazy\" src=\"/images/dmit-jp-vs-hk-vs-us-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=dmit\"\u003eDMIT\u003c/a\u003e is my go-to VPS provider, with top-tier lines in Japan, Hong Kong, and Los Angeles. This article provides a complete comparison of the three lines and shows you which scenario each is best suited for.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eFor the basic purchase flow, see \u003ca href=\"/en/posts/dmit-vps-purchase-guide/\"\u003eDMIT VPS Purchasing Guide\u003c/a\u003e. This article focuses on \u003cstrong\u003ehow to choose between the three lines\u003c/strong\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"three-lines-overview\"\u003eThree Lines Overview\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eLine\u003c/th\u003e\n          \u003cth\u003eProduct Name\u003c/th\u003e\n          \u003cth\u003eTypical Monthly\u003c/th\u003e\n          \u003cth\u003eLine Type\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eHong Kong Eyeball\u003c/td\u003e\n          \u003ctd\u003ePVM.HKG Eyeball\u003c/td\u003e\n          \u003ctd\u003e$14.9-58.9\u003c/td\u003e\n          \u003ctd\u003eCMI (multi-ISP optimized)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eTokyo, Japan\u003c/td\u003e\n          \u003ctd\u003ePVM.TYO\u003c/td\u003e\n          \u003ctd\u003e$16.9-58.9\u003c/td\u003e\n          \u003ctd\u003eSoftBank + NTT\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eLos Angeles Premium, USA\u003c/td\u003e\n          \u003ctd\u003ePVM.LAX Premium\u003c/td\u003e\n          \u003ctd\u003e$12-48\u003c/td\u003e\n          \u003ctd\u003eCN2 GIA\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eLos Angeles Economy, USA\u003c/td\u003e\n          \u003ctd\u003ePVM.LAX Economy\u003c/td\u003e\n          \u003ctd\u003e$6-20\u003c/td\u003e\n          \u003ctd\u003eStandard BGP\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eJapan and Hong Kong pricing is comparable, but \u003cstrong\u003eUS Premium is 25% cheaper\u003c/strong\u003e.\u003c/p\u003e","title":"DMIT Japan/Hong Kong/US three-route comparison: latency, bandwidth, and unlock capability actual testing"},{"content":"\nMany people buy IPRoyal residential IPs and just get by, unsure how to monetize them. This article breaks down 5 proven real-world scenarios, walking you through the complete path from buying IPs to specific monetization strategies.\nFor foundational background, see IPRoyal Residential IP Use Cases. This post focuses on concrete money-making scenarios.\nWhy Residential IPs Make Money Core reason: Many internet services restrict data center IPs, but welcome residential IPs.\nOpenAI / ChatGPT registration requires residential IPs (data center IPs get blocked) E-commerce platforms (Amazon / Shopee / Alibaba International) flag data center IPs as \u0026ldquo;abnormal\u0026rdquo; Ad networks (Google AdSense / Facebook Ads) apply strict anti-fraud to data center IPs Cross-border e-commerce needs to mimic local users (US users → US residential IP) Whoever can make \u0026ldquo;a computer on the internet look like a regular home user\u0026rdquo; can run these businesses.\nScenario 1: AI Account Registration and Management Typical need: Register multiple ChatGPT Plus, Claude.ai, or Midjourney accounts for personal use or resale.\nOperating Process Buy residential IPs from IPRoyal for the target country (US / UK / Singapore) Use a fingerprint browser (AdsPower / BitBrowser / MultiLogin) — each account gets its own isolated browser environment Bind each browser to one IPRoyal exit IP (sticky session for fixed IP per session) Register accounts with different emails (Gmail / Outlook / ProtonMail) Age the accounts: log in 1-2 times per week, use normally for a while before heavy use Important Notes IP must match email region: US email + US IP. Mismatches trigger risk controls. Don\u0026rsquo;t register multiple accounts on the same IP: IPRoyal supports sticky sessions to keep one user session on the same IP, but cross-account usage requires different IPs. Phone verification: ChatGPT and others require phone numbers — use SMS-Activate or Tello virtual number services. Monetization Paths Self-use savings (ChatGPT Plus $20/month split 4-6 ways) Account resale (legitimate: corporate team account purchasing services) AI account activation service business Actual Costs Item Cost IPRoyal residential IP $7/GB (account registration uses minimal data — 1GB covers 50+ accounts) Fingerprint browser $9-30/month (AdsPower, etc.) Email service $0-1/account Phone verification $0.5-2/attempt Startup cost per account is about $3-5, and resale can pay this back quickly.\nScenario 2: Cross-Border E-Commerce Research Typical need: Run Amazon/Shopify dropshipping. You need to see search results, product rankings, and competitor prices from a real US user\u0026rsquo;s perspective.\nThe Problem Accessing Amazon US from China shows different results than US users see (regional prices, inventory, recommendations) Using VPS proxy is easily detected; the data you get isn\u0026rsquo;t real You need city/ZIP code precision (Amazon Prime delivery ranges and inventory are ZIP-code dependent) Operating Process IPRoyal: select US → specific state/city (e.g., Los Angeles, California) Configure to Chrome + Proxy SwitchyOmega Visit Amazon, enter your target ZIP code (90001 = LA) Search keywords, view real rankings Use tools like Helium 10 / JungleScout to estimate sales volume Data Points Collected via residential IP + ZIP code targeting:\nCompetitor current prices (including regional discounts) Stock levels (\u0026ldquo;arrives tomorrow\u0026rdquo; = stock is good) Search result rankings (organic + sponsored) Product reviews (sorted by date to spot recent trends) Automation Approach Go deeper with Python + IPRoyal + Playwright for automated collection:\nfrom playwright.sync_api import sync_playwright proxy = { \u0026#34;server\u0026#34;: \u0026#34;http://gate.iproyal.cn:10000\u0026#34;, \u0026#34;username\u0026#34;: \u0026#34;your_username_country-us_state-california\u0026#34;, \u0026#34;password\u0026#34;: \u0026#34;your_password\u0026#34; } with sync_playwright() as p: browser = p.chromium.launch(proxy=proxy, headless=True) page = browser.new_page() page.goto(\u0026#34;https://www.amazon.com/s?k=wireless+earbuds\u0026#34;) # Set ZIP code (LA) page.click(\u0026#34;#nav-global-location-popover-link\u0026#34;) page.fill(\u0026#34;#GLUXZipUpdateInput\u0026#34;, \u0026#34;90001\u0026#34;) page.click(\u0026#34;#GLUXZipUpdate\u0026#34;) # Scrape product list products = page.query_selector_all(\u0026#34;[data-component-type=\u0026#39;s-search-result\u0026#39;]\u0026#34;) for p in products: title = p.query_selector(\u0026#34;h2 span\u0026#34;).text_content() price = p.query_selector(\u0026#34;.a-price-whole\u0026#34;) print(title, price.text_content() if price else \u0026#34;N/A\u0026#34;) browser.close() Monetization Paths Self-run dropshipping: better product selection, 10-20% higher margins Research agency: do market research for others, $50-200/project Data product: \u0026ldquo;US trending products\u0026rdquo; paid reports Scenario 3: Google Ads / Meta Ads Verification Typical need: Running cross-border ads (or managing client campaigns), you need to verify ads display correctly in target regions, landing pages load, and the full conversion funnel works.\nThe Problem Ad targeted at US users, you\u0026rsquo;re in China using VPS proxy. Google/Meta push different ads than real US users see. You want to verify what the target audience actually sees (landing pages vary by region: different prices, languages, inventory) Fraud check: confirm competitors aren\u0026rsquo;t click-farming their ads Operating Process IPRoyal: select target region residential IP (US New York / US Los Angeles / London UK, etc.) Enable sticky session (IPRoyal supports this — same session keeps the same IP for 30 minutes) Clear browser cookies / localStorage Visit Google / Facebook, search target keywords Observe ad display, click-through, landing page Google Ads Verification Steps 1. IPRoyal config → US → specific city 2. Open Chrome incognito 3. google.com → search \u0026#34;cheap flights to tokyo\u0026#34; 4. Observe: - Which ads show in the Ads section - Currency displayed as USD - Landing page language is English - Ad click redirects normally Facebook Ad Review Same process: log into facebook.com with a region-appropriate account, browse feed to confirm ad delivery.\nImportant Notes Don\u0026rsquo;t click ads just to look (accidental clicks burn client budget) When counting clicks, use a separate session and click 1-2 times total Don\u0026rsquo;t click competitors\u0026rsquo; ads from the same IP (ad fraud is illegal) Monetization Paths Ad verification service for clients ($30-100/review) Build a cross-border ad management team Create a paid \u0026ldquo;ad review tool\u0026rdquo; subscription Scenario 4: Price Scraping / Comparison Data Typical need: Dynamic collection of flight / hotel / e-commerce prices to notify users of deals.\nWhy You Need Residential IP Airlines / hotel sites rate-limit frequent queries from the same IP Large platforms like Booking have regional price differences (US IP price ≠ CN IP price) Bulk requests from data center IPs trigger CAPTCHAs Sample Project: Flight Price Tracking import httpx import time import random # IPRoyal config — rotate IP each time def get_proxy(): session_id = random.randint(10000, 99999) return { \u0026#34;all://\u0026#34;: f\u0026#34;http://user-country-us-session-{session_id}:password@gate.iproyal.cn:10000\u0026#34; } def fetch_flight_price(origin, dest, date): url = f\u0026#34;https://www.kayak.com/flights/{origin}-{dest}/{date}\u0026#34; with httpx.Client(proxies=get_proxy(), timeout=30) as client: r = client.get(url) # Parse price return parse_price(r.text) # Run once daily for 30 days prices = [] for i in range(30): price = fetch_flight_price(\u0026#34;SFO\u0026#34;, \u0026#34;NRT\u0026#34;, \u0026#34;2026-06-01\u0026#34;) prices.append({\u0026#34;date\u0026#34;: time.strftime(\u0026#34;%Y-%m-%d\u0026#34;), \u0026#34;price\u0026#34;: price}) time.sleep(86400) Data Uses Self-use: book cheap flights ahead of time Build a \u0026ldquo;deal flight alerts\u0026rdquo; newsletter / Telegram channel (ads + flight affiliate commissions) Research airlines: analyze pricing patterns, write paid reports Compliance Notes Limit request frequency (1-5 seconds apart, don\u0026rsquo;t DDoS them) Respect robots.txt Don\u0026rsquo;t scrape behind paywalls Scenario 5: Multi-Region SEO Monitoring Typical need: Your website ranks differently across Google in different countries. You need to monitor rankings in your target markets from real local perspective.\nWhy Not Use VPS Google adjusts search results by IP geography Data center IPs might get deprioritized or shown ReCAPTCHA Commercial SEO tools (Ahrefs / SEMrush) are expensive monthly and data lags 1-7 days Operating Process IPRoyal: select target country (e.g., \u0026ldquo;Tokyo, Japan\u0026rdquo; residential IP) Chrome incognito → google.co.jp Search your target keyword (e.g., \u0026ldquo;residential proxy\u0026rdquo; in Japanese) Record your site\u0026rsquo;s rank position, top 10 competitors Automation Script from playwright.sync_api import sync_playwright import json KEYWORDS = [\u0026#34;residential proxy\u0026#34;, \u0026#34;data center proxy\u0026#34;, \u0026#34;rotating proxy\u0026#34;] TARGET_SITE = \u0026#34;yoursite.com\u0026#34; def check_rank(keyword, country=\u0026#34;us\u0026#34;): proxy = f\u0026#34;http://user-country-{country}:pass@gate.iproyal.cn:10000\u0026#34; with sync_playwright() as p: browser = p.chromium.launch(proxy={\u0026#34;server\u0026#34;: proxy}) page = browser.new_page() page.goto(f\u0026#34;https://www.google.com/search?q={keyword}\u0026#34;) results = page.query_selector_all(\u0026#34;div.yuRUbf a\u0026#34;) for i, r in enumerate(results, 1): url = r.get_attribute(\u0026#34;href\u0026#34;) if TARGET_SITE in url: return i return None # Run once daily for kw in KEYWORDS: rank = check_rank(kw, \u0026#34;us\u0026#34;) print(f\u0026#34;{kw}: {rank}\u0026#34;) Monetization Paths Monitor your own site\u0026rsquo;s SEO, improve rankings → more traffic → affiliate commissions / ad revenue Build an SEO rank tracking service for clients ($50-200/month per client) Create a paid \u0026ldquo;SEO monitoring tool\u0026rdquo; SaaS Combo Strategies The 5 scenarios above can stack:\nComplete Cross-Border E-Commerce Stack:\nResidential IP for product research (Scenario 2) Residential IP to monitor competitor ads (Scenario 3) Residential IP to scrape competitor prices (Scenario 4) Residential IP for landing page SEO monitoring (Scenario 5) Use AI accounts to bulk-generate product copy (Scenario 1) You\u0026rsquo;ve just built a cross-border e-commerce \u0026ldquo;toolkit\u0026rdquo; — a single IPRoyal flow supports multiple businesses.\nIPRoyal Plan Selection Usage Plan Cost Occasional (account registration / one-off tasks) Pay-as-you-go $7/GB Daily use (scrapers, SEO monitoring) Monthly 10-30 GB $60-200/month Bulk operations (e-commerce team) Monthly 100+ GB $500+/month Starting recommendation: buy 5GB first. Run through one scenario, then scale. IPRoyal traffic doesn\u0026rsquo;t expire — you own what you buy.\nCost Breakdown and ROI Let\u0026rsquo;s say you run an AI account activation service:\nIPRoyal cost: $7/GB, ~20MB per account = $0.14 Fingerprint browser: $15/month ÷ account count Phone verification: $1/attempt Cost per account: ~$1.50 Selling price: $20-50 (ChatGPT Plus monthly rental) Gross margin 80%+, assuming stable traffic and accounts stay healthy.\nFAQ Q: What\u0026rsquo;s the difference between IPRoyal and buying a VPS proxy? VPS proxy = data center IP, fixed. IPRoyal = residential IP, dynamic, pay per GB. For scenarios where you need to \u0026ldquo;look like a real person,\u0026rdquo; you need the latter.\nQ: How do I confirm an IPRoyal IP is residential? Visit ipinfo.io, check the ASN field. Residential IPs show ISP ASNs (Comcast / AT\u0026amp;T); data center IPs show cloud providers (AWS / Google).\nQ: Will I get blocked for using IPRoyal for gray-market work? IPRoyal itself supports legitimate business. Heavy abuse (order fraud / account forgery) can get your account suspended. The 5 scenarios here are all compliant business.\nQ: How do I conserve traffic? Scrapers: download only HTML / API response, skip images / CSS (saves 80%) Browser: block ads and images (uBlock Origin) Enable proxy compression (Chrome has data saver flags) Q: Pay-as-you-go vs monthly plan? Under 20GB/month, use pay-as-you-go. Above 20GB, monthly plans are cheaper. I use pay-as-you-go personally, averaging 2-3GB/month.\nSummary: IPRoyal\u0026rsquo;s residential IPs aren\u0026rsquo;t just a \u0026ldquo;VPN tool\u0026rdquo; — they\u0026rsquo;re infrastructure for cross-border business. From AI accounts to e-commerce to SEO, any business that needs to \u0026ldquo;look like a local user\u0026rdquo; depends on them.\n→ Get Started with IPRoyal (Affiliate Link) → IPRoyal Basics Guide → Residential vs Data Center IP Mechanics → Route Residential IPs Through Mihomo\nHave real-world questions? Chat on Telegram.\n📷 Cover image · Flux Schnell AI generated · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/iproyal-use-cases-5-scenarios/","summary":"\u003cp\u003e\u003cimg alt=\"A close up of a blue and black globe\" loading=\"lazy\" src=\"/images/iproyal-use-cases-5-scenarios-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eMany people buy \u003ca href=\"https://aff.panshi.io/track?id=iproyal\"\u003eIPRoyal\u003c/a\u003e residential IPs and just get by, unsure how to monetize them. This article breaks down 5 proven real-world scenarios, walking you through the complete path from buying IPs to specific monetization strategies.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eFor foundational background, see \u003ca href=\"/en/posts/iproyal-residential-ip/\"\u003eIPRoyal Residential IP Use Cases\u003c/a\u003e. This post focuses on \u003cstrong\u003econcrete money-making scenarios\u003c/strong\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"why-residential-ips-make-money\"\u003eWhy Residential IPs Make Money\u003c/h2\u003e\n\u003cp\u003eCore reason: \u003cstrong\u003eMany internet services restrict data center IPs, but welcome residential IPs\u003c/strong\u003e.\u003c/p\u003e","title":"IPRoyal Residential IP: 5 Real-World Scenarios—Complete Path from Buying IP to Monetization"},{"content":" ⚠️ KYC Requirements: Pionex does not support Mainland Chinese ID cards for KYC. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or other supported regions. See Pionex restricted regions official notice.\nThis post documents my live trading results with a gold perpetual grid trading bot on Pionex, running from January through April 2026. I\u0026rsquo;m sharing all the parameters, returns, and drawdowns.\nFor beginner guides, see Pionex XAU Grid Bot and Perpetual Grid vs Spot Grid Comparison. This post focuses on actual live trading results.\nWhy Gold Grid Trading Why XAU/USDT instead of BTC grid:\nModerate Volatility: BTC swings 3-8% daily, gold 1-2%, making grid density much easier to control Fewer One-Sided Moves: Gold is in a long-term uptrend but trades mostly sideways in the short term Safe-Haven Demand: Geopolitical tension and inflation expectations both drive gold—it rallied from $4,000 to $4,800+ in 2025-2026 Low Fees: Pionex perpetual fees are just 0.05%, so even dense grid trading stays cost-effective Bot Parameters I ran a Pionex XAU/USDT perpetual grid bot with these settings:\nParameter Value Notes Trading Pair XAU/USDT Perp Gold perpetual contract Upper Limit $4,900 Price range ceiling Lower Limit $4,400 Price range floor Grid Count 100 Equal-spaced grids Grid Spacing $5 (4900-4400) / 100 Leverage 3x Contract leverage Initial Capital $2,000 USDT Starting balance Direction Neutral (Two-Way) Long + Short grids Per-Grid Profit Estimate: $5 / $4,600 × 3x ≈ 0.33% (about 0.27% after two fee tiers)\nNote: Per-grid returns are lower than BTC grids because gold\u0026rsquo;s absolute value is higher and each grid spacing is a smaller percentage. But with stable daily moves and frequent fills, cumulative returns add up nicely.\nLaunch Timing Launched on 2026-01-15 when gold was at $4,620—mid-range of my price band.\nLaunch Checklist:\nPrice must be within 50% of the grid midpoint Avoid major data releases (NFP, CPI, FOMC window ±24hrs) Confirm last 30 days of volatility stayed within the grid bounds Monthly Returns Log January 2026 (Started Jan 15) Week Close Price Cumulative Return Weekly Return Trades Notes Jan 15-21 $4,650 +1.6% +1.6% 48 First week, smooth Jan 22-28 $4,580 +3.0% +1.4% 52 Range-bound, normal Jan 29-31 $4,600 +3.6% +0.6% 20 Month-end, lower activity January Total: +3.6%\nFebruary 2026 Week Close Price Cumulative Return Weekly Return Trades Notes Feb 1-7 $4,680 +5.1% +1.5% 55 Stable sideways Feb 8-14 $4,720 +6.6% +1.5% 58 Central bank meeting, more volatility Feb 15-21 $4,780 +7.9% +1.3% 50 Uptrend, long grids profitable Feb 22-28 $4,750 +9.2% +1.3% 53 Top-area pullback, short grids take over February Total: +5.6%\nMarch 2026 Week Close Price Cumulative Return Weekly Return Trades Notes Mar 1-7 $4,820 +10.5% +1.3% 49 Continued upside Mar 8-14 $4,880 +11.9% +1.4% 56 Approaching upper bound, alert Mar 15-21 $4,950 +11.2% -0.7% 14 Breaks upper bound, bot paused Mar 22-28 — — — 0 Monitoring March Total: +1.7% (hampered by upper-bound breakout)\nCritical Event: Gold rallied from $4,820 to $4,960, leaving just ~1% to my $4,900 cap by March 14. This triggered my \u0026ldquo;near boundary\u0026rdquo; alert (\u0026lt; 3% to edge).\nMy Response:\nPaused bot on March 15 Kept positions open—didn\u0026rsquo;t force liquidate Price kept rising to $4,970 through March 16-22; didn\u0026rsquo;t restart immediately April 2026 (Restarted April 1) Reassessed on April 1 with gold at $4,900, widened the range to $4,600-$5,200, and restarted:\nWeek Close Price Cumulative Return Weekly Return Trades Apr 1-7 $4,880 +1.2% +1.2% 45 Apr 8-14 $4,810 +2.3% +1.1% 48 Apr 15-17 (To Date) $4,843 +2.7% +0.4% 18 17 Days Post-Restart: +2.7%\nCumulative Summary Metric Value Runtime 2026-01-15 ~ 2026-04-17 (93 days, 17 days paused) Active Trading Days 76 Total Return (Compounded) +14.1% Annualized (On Active Days) ~68% Max Drawdown -1.8% (during March upper-bound breakout) Total Trades 566 Avg Profit per Trade 0.025% Sharpe Ratio (Estimate) ~2.9 Actual Profit on $2,000 Capital: ~$282 USDT\nDrawdowns \u0026amp; Lessons 2 Major Drawdown Events Event 1: February FOMC Eve (Feb 18)\nGold dropped from $4,750 to $4,690 in one hour (-1.3%) Bot behavior: All lower long grids filled, floating loss ~$48 (-2.4%) 30 minutes later, price recovered to $4,720; floating loss shrank to -1% Event 2: March Upper-Bound Breakout (Mar 8-15)\nGold rallied from $4,820 to $4,960, breaking my $4,900 cap Long grids fully filled; short grids kept adding Max floating loss: -1.8% (~$36) I manually paused to stop further losses Key Lesson: Set realistic grid boundaries and pause immediately if price breaks them. Leaving a bot running through a breakout turns floating losses into realized ones.\nWhen to Pause My pause rules:\nPrice Within 3% of Boundary: Yellow flag, stay alert Price Breaks Boundary: Immediate pause, no averaging 3+ Consecutive Days of \u0026gt;5% Daily Swings: Volatility too high for grid; pause Major Macro Events: Fed rate call, elections, geopolitical escalation—pause 24hrs before When to Restart Price returns to ±30% of grid midpoint Re-evaluate volatility, adjust parameters Small test run for 2-3 days first Cost Analysis Trading Fees Pionex perpetual fees: 0.02% Maker, 0.05% Taker Grid trades mostly use limit orders (Maker), so ~0.02% Full cycle (buy + sell) = 2 × 0.02% = 0.04% 566 trades = ~283 full cycles Total fees as % of capital: 283 × 0.04% × 3x ≈ 3.4% Fee Optimization Pionex offers discounts:\nHold PIO (platform token): Up to 50% off New-user first-month refund (via my AFF link) I held some PIO, bringing Maker fees down to ~0.01%, so total fees dropped to ~1.7%.\nNet Returns Monthly net profit after fees:\nGross monthly return ≈ 5.0% Monthly fees ≈ 0.6% Net monthly return ≈ 4.4% Annualized ~50-60%, or ~30-40% accounting for pause days.\nCapital Size \u0026amp; Leverage Effects After several months, my takeaways:\nCapital Size Small ($1k-5k): Per-grid profits are small absolute dollars, but % returns are normal Medium ($10k+): Qualify for better fee tiers, slightly higher net % Large ($50k+): Liquidity and slippage start to creep in Leverage Tier Leverage Pros Risks 2x Safe Lower returns, ~20-25% annualized 3x Balanced My choice 5x Higher returns Liquidation if moves 5%+ daily 10x Not recommended Any 5%+ daily swing can liquidate I chose 3x. For a tame asset like XAU/USDT, 3x means ~25% to liquidation (historically unlikely), but 3x the returns vs spot.\nvs Other Strategies Side-by-side over 2026-01-15 ~ 2026-04-17:\nStrategy Annualized Max Drawdown Sharpe Pionex XAU Grid 3x ~40% -1.8% 2.9 BTC Spot DCA +22% -8% 1.5 Polaris BTC Trend +40% -20%* 1.5 USDT DeFi Yield +8% 0 N/A *Polaris runs 3x leverage; signal-level drawdown ~-10%. See Polaris live tracking.\nXAU Grid stands out for \u0026ldquo;low drawdown, high consistency\u0026rdquo;—great for risk-averse quant traders.\nPitfalls I Hit Greedy Grid Setup: Launched with $4,300-$4,900 (too wide), so fills were sparse and returns lagged\nFix: Tightened to $4,400-$4,900, doubled fill frequency, returns picked up Skipped Event Days: Didn\u0026rsquo;t pause on CPI release day in Feb, got whipsawed on sharp up-and-down\nFix: Mark event calendar, pause 24hrs ahead APP Notification Lag: Pionex app push sometimes delayed 5-10 minutes\nFix: Set up Telegram alerts (Pionex has an official bot) Forgot Fee Discount: Didn\u0026rsquo;t buy PIO the first two months, overpaid ~3% fees\nFix: Hold $100+ PIO for basic tier discount Thought \u0026ldquo;Paused = Safe\u0026rdquo;: Pausing doesn\u0026rsquo;t close positions; prices moved against short grids afterward\nFix: Manually reduce when pausing, or set hard stops Who Should Run Grid Trading Good Fit Bad Fit Lower risk tolerance Want to 10x quickly Can monitor consistently Want fully passive Understand leveraged futures New to leverage Happy with 20-40% annual Chasing 50%+ monthly Poor Fit Scenarios:\nStrong trending market (grid underperforms trend-following) Ultra-low volatility (grid fees eat returns) Ultra-high volatility (frequent boundary breaks) Getting Started Sign up at Pionex (AFF link has new-user perks) Complete KYC (5-10 minutes) Deposit USDT (minimum ~$100) Go to \u0026ldquo;Bots\u0026rdquo; → \u0026ldquo;Grid Trading\u0026rdquo; → Select XAU/USDT Perp Copy my parameters from this post, start small for 1-2 weeks Scale up once stable Ongoing Updates I update this post monthly with live data. Follow Telegram or RSS for updates.\n→ Sign Up Pionex (AFF) → Pionex XAU Grid Guide → Spot Grid vs Perpetual Grid → Quant Tools Stack\nQuestions on live trading? Drop by Telegram.\n📷 Cover Art · Generated with Flux Schnell AI · panshi.io Brand Style\n","permalink":"https://blog.panshi.io/en/posts/pionex-xau-real-profit-log/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eKYC Requirements\u003c/strong\u003e: Pionex does not support Mainland Chinese ID cards for KYC. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or other supported regions. See \u003ca href=\"https://support.pionex.com/hc/en-us/articles/5929910517273\"\u003ePionex restricted regions official notice\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"a gold bar sitting on top of a pile of indian currency\" loading=\"lazy\" src=\"/images/pionex-xau-real-profit-log-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eThis post documents my live trading results with a gold perpetual grid trading bot on \u003ca href=\"https://aff.panshi.io/track?id=pionex\"\u003ePionex\u003c/a\u003e, running from January through April 2026. I\u0026rsquo;m sharing all the parameters, returns, and drawdowns.\u003c/p\u003e","title":"Pionex gold grid live trading profit record: complete data from launch to 3 months"},{"content":" America\u0026rsquo;s three most popular budget VPS providers—RackNerd, CloudCone, and BandwagonHost—are longtime favorites. I\u0026rsquo;ve used all three, and they each have a different sweet spot. This article breaks down the differences and gives you the decision framework to choose the right one.\nBasic positioning of all three Provider Annual Starting Typical Use Line Type RackNerd $10–20/year Ultra-budget, small sites / light proxying Standard BGP CloudCone $15–30/year Hourly billing, flexible testing Standard BGP BandwagonHost $50–170/year CN2 GIA line, primary proxy CN2 GIA / GT One-liner positioning:\nRackNerd = cheapest \u0026ldquo;it actually works\u0026rdquo; US VPS CloudCone = hourly billing, great for short-term testing BandwagonHost = direct connectivity to three ISPs, stable CN2 GIA line Price comparison (2026 mainstream plans) RackNerd annual Black Friday deals Spec CPU Storage Bandwidth Annual 1C/512M 1 core 10GB SSD 1TB ~$10.50 1C/1G 1 core 17GB SSD 2TB ~$14 2C/2G 2 cores 35GB SSD 4.5TB ~$24 2C/4G 2 cores 60GB SSD 8TB ~$39 RackNerd has nodes scattered across the US, commonly in Los Angeles (MC-LAX / DC-02), San Jose, Seattle, New York, Chicago, and Dallas. For China-based access, Los Angeles MC is the best choice—you\u0026rsquo;ll see 180–220ms latency during evening peak hours.\nCloudCone hourly billing + annual options CloudCone\u0026rsquo;s killer feature is hourly billing: 1C/1G costs roughly $0.005/hour (about $0.12/day), or $15–30/year on annual plans.\nBilling Mode 1C/1G Cost Use Case Hourly ~$0.005/h Short-term testing, one-off tasks Monthly ~$2–4/month Small sites, longer-term runs Annual ~$15–30/year Black Friday specials sometimes cheaper Their datacenter is LA MultaCom (same facility as RackNerd, similar line quality).\nBandwagonHost mainstream plans Plan Memory Storage Bandwidth Annual Line CN2 GIA-E (PID 87) 1GB 20GB 1TB ~$50 CN2 GIA CN2 GIA-E (PID 88) 2GB 40GB 2TB ~$90 CN2 GIA Hong Kong CMI (PID 134) 2GB 40GB 0.5TB ~$150 CMI Japan SoftBank (PID 95) 1GB 20GB 1TB ~$90 SoftBank BandwagonHost is pricey because of line quality: CN2 GIA is China Telecom\u0026rsquo;s premium business-grade network—you get a stable 150–180ms from China\u0026rsquo;s three ISPs even during evening peak without speed loss.\nNetwork performance benchmarks April 2026: I ran 7 days of continuous mtr testing from Guangzhou (China Telecom) against each provider\u0026rsquo;s LA nodes:\nProvider Datacenter Avg Latency Peak Hours Latency Packet Loss RackNerd LA MC-02 185ms 260ms 0–3% CloudCone LA MultaCom 182ms 250ms 0–2% BandwagonHost CN2 GIA LA DC6 CN2 GIA-E 155ms 180ms 0% BandwagonHost Standard LA Quadranet (legacy) 200ms Heavy loss 5–15% Bottom line:\nLight daytime loads: all three work fine Evening peak hours (20:00–24:00): RackNerd / CloudCone visibly slow down and occasionally drop packets; BandwagonHost CN2 GIA stays rock solid For proxy nodes, judge by peak-hour performance, not daytime numbers Stability comparison Real-world experience over the past year:\nRackNerd Downtime frequency: very rare—I\u0026rsquo;ve had zero full outages in 14 months Support ticket response: 12–24 hours Refund policy: 30-day money-back guarantee Gotcha: some IPs ship already blocked by major services (ChatGPT, Netflix, etc.); you need to test yourself CloudCone Downtime frequency: occasional brief host reboots (minutes only) Support ticket response: 6–12 hours, English support Hourly billing win: dislike it? delete it anytime—no wasted money Gotcha: payment method restrictions (credit card / PayPal; crypto support added recently) BandwagonHost Downtime frequency: very rare—maybe twice a year, always announced in advance Support ticket response: 1–4 hours, Chinese support One-click IP swap: $8.79, near-instant Gotcha: after an IP gets blocked, you pay to swap; cheap plans often out of stock Use-case decision tree Scenario 1: Pure web hosting (no proxy needs) First choice: RackNerd 1C/1G ($14/year)—cheapest, good enough for blogs, small forums, image hosting Backup: CloudCone annual plan Scenario 2: Proxy node (daily internet access) Budget available → BandwagonHost CN2 GIA-E ($50+/year)—no slowdown at peak Budget tight → RackNerd 1C/512M ($10/year)—works daytime, peak hours are rough Testing → CloudCone hourly—spin up for a few hours, test line quality, delete if it\u0026rsquo;s not a fit Scenario 3: Temporary tasks (scraping / one-off deployments) CloudCone hourly—run your task, delete it, spend a few bucks total Not recommended: BandwagonHost (minimum monthly billing) Scenario 4: AI tools dedicated exit (OpenAI / Claude API) Not recommended for any of these: datacenter IPs get rate-limited, check out IPRoyal residential IPs instead If you must use VPS, pick BandwagonHost DC6 CN2 GIA-E for best IP reputation Scenario 5: Multi-node load balancing Hybrid approach: BandwagonHost main (stable) + RackNerd backup (cheap) Configure mihomo with multi-node auto-failover—see mihomo multi-gateway setup Payment method comparison Provider Credit Card PayPal Crypto Alipay RackNerd ✅ ✅ ✅ BTC/USDT ❌ CloudCone ✅ ✅ ✅ recent support ❌ BandwagonHost ✅ ✅ ✅ BTC/ETH/USDT ✅ BandwagonHost is the only one of the three that accepts Alipay—the most China-friendly option.\nBlack Friday / holiday promo tips All three run big promotions every Black Friday (late November), 30–50% cheaper than normal. What I\u0026rsquo;ve learned:\nRackNerd: offers the cheapest Black Friday deals, sometimes \u0026ldquo;$9.99/year\u0026rdquo; plans that sell out instantly CloudCone: Flash Sales happen sporadically—you need to stay alert BandwagonHost: stable year-round pricing, no huge Black Friday cuts, but they restock low-end plans My advice: use month-to-month or short annual for day-to-day needs, then go heavy on Black Friday flash sales.\nFive must-do things after purchase No matter which provider you choose, do these right after setup:\nChange SSH port (stop automated scanning) Disable root password login, switch to SSH keys Configure ufw / iptables firewall—open only what you need Install fail2ban—auto-blacklist brute-force attempts Disable unused services (apache2, postfix, etc. if pre-installed) Detailed steps: DMIT VPS purchase guide step 7 (SSH setup)—same process for all three.\nFAQs Q: All three are in LA—can I load-balance across them? Yes. Use mihomo or Surge to configure multiple nodes, then auto-select the lowest-latency one after speed testing. Just remember: cheap lines get congested at peak, so put BandwagonHost CN2 as primary and RackNerd / CloudCone as fallback.\nQ: My RackNerd IP got blocked by ChatGPT. What now? Three options:\nSubmit a support ticket requesting an IP swap (some plans support it) Run a residential proxy chain on that VPS (see ai-tools-residential-proxy) Switch providers—AI tools should use IPRoyal residential IPs Q: How much better is BandwagonHost CN2 GIA vs. standard line? Peak hours show the biggest gap: CN2 GIA holds steady at 180ms, standard BGP can drop to unusable with heavy packet loss. It\u0026rsquo;s 2–3x the price, but for proxy nodes it\u0026rsquo;s worth the CN2 upgrade.\nQ: What\u0026rsquo;s the shortest CloudCone can run on hourly billing? Officially it\u0026rsquo;s 1 hour at $0.005. But note: deletion still counts as a full day minimum, so a quick test run costs around $0.10–0.50 per attempt.\nQ: How do I confirm if my RackNerd is in MC vs. DC-02? On the RackNerd order page under Product Configuration, check the Location dropdown:\nLos Angeles, CA (MC) = MultaCom, slightly better for China Los Angeles, CA (DC-02) = different facility, similar performance Seattle / New York / Chicago / Dallas = other regions China-based users should pick MC first.\nMy actual setup I currently run all three:\nBandwagonHost CN2 GIA-E (PID 88) × 1: primary proxy node, running Xray + Hysteria2 RackNerd 1C/1G × 1: monitoring scripts and scraping tasks, not a main proxy CloudCone hourly × as needed: temporary line testing, one-off tasks This combination gives the best bang for the buck: mission-critical traffic on the stable provider (BandwagonHost), secondary tasks on the cheap one (RackNerd), temporary needs by the hour (CloudCone).\nNext steps:\nComplete VPS selection guide What to do when your VPS IP gets blocked DMIT VPS purchase guide Questions? Find me on Telegram.\n📷 Cover image · Generated by Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/racknerd-vs-cloudcone-vs-bwg/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"System with various wires managing access to centralized res\" loading=\"lazy\" src=\"/images/racknerd-vs-cloudcone-vs-bwg-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eAmerica\u0026rsquo;s three most popular budget VPS providers—\u003ca href=\"https://aff.panshi.io/track?id=racknerd\"\u003eRackNerd\u003c/a\u003e, \u003ca href=\"https://aff.panshi.io/track?id=cloudcone\"\u003eCloudCone\u003c/a\u003e, and \u003ca href=\"https://aff.panshi.io/track?id=bwg\"\u003eBandwagonHost\u003c/a\u003e—are longtime favorites. I\u0026rsquo;ve used all three, and they each have a different sweet spot. This article breaks down the differences and gives you the decision framework to choose the right one.\u003c/p\u003e\n\u003ch2 id=\"basic-positioning-of-all-three\"\u003eBasic positioning of all three\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eProvider\u003c/th\u003e\n          \u003cth\u003eAnnual Starting\u003c/th\u003e\n          \u003cth\u003eTypical Use\u003c/th\u003e\n          \u003cth\u003eLine Type\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eRackNerd\u003c/td\u003e\n          \u003ctd\u003e$10–20/year\u003c/td\u003e\n          \u003ctd\u003eUltra-budget, small sites / light proxying\u003c/td\u003e\n          \u003ctd\u003eStandard BGP\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eCloudCone\u003c/td\u003e\n          \u003ctd\u003e$15–30/year\u003c/td\u003e\n          \u003ctd\u003eHourly billing, flexible testing\u003c/td\u003e\n          \u003ctd\u003eStandard BGP\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eBandwagonHost\u003c/td\u003e\n          \u003ctd\u003e$50–170/year\u003c/td\u003e\n          \u003ctd\u003eCN2 GIA line, primary proxy\u003c/td\u003e\n          \u003ctd\u003eCN2 GIA / GT\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eOne-liner positioning:\u003c/p\u003e","title":"RackNerd vs CloudCone vs Bandwagon Host: How to Choose Among Three Budget US VPS Providers"},{"content":" Tello Mobile is an MVNO carrier (leveraging T-Mobile\u0026rsquo;s network) specializing in affordable US phone numbers + international roaming. It\u0026rsquo;s incredibly useful for cross-border business and AI account registration. This post documents my experience using Tello over the past 1.5 years.\nWhy You Need a US Phone Number I use a US phone number most frequently in these scenarios:\nAI tool registration: ChatGPT Plus, Claude.ai, Gemini Advanced, Midjourney, and others in certain regions require a US number for SMS verification US region accounts: US Apple ID, Google Play, PayPal, Amazon US, etc. Cross-border business: Stripe onboarding, US bank accounts, cross-border e-commerce platforms Google Voice activation: GV requires a US real phone number for verification Account security: Using \u0026ldquo;China number + overseas IP\u0026rdquo; is a red flag for risk control, while \u0026ldquo;US number + US IP\u0026rdquo; is much safer Why not use virtual numbers:\nVirtual numbers (Google Voice / TextNow) won\u0026rsquo;t receive SMS on many platforms (flagged as VoIP) Real numbers (Tello and other MVNOs) are accepted everywhere Tello Basic Plans Tello offers two plan types:\nPay-as-You-Go Plans Monthly Fee Voice Minutes SMS Data $5 100 min Unlimited 500MB $10 500 min Unlimited 1GB $15 Unlimited Unlimited 2GB $19 Unlimited Unlimited 5GB $25 Unlimited Unlimited 10GB $29 Unlimited Unlimited 15GB $39 Unlimited Unlimited 35GB Keep-Your-Number Plan (Cheapest) If you only need to retain a US phone number (without data):\nMonthly Fee Details $5/month 100 min + Unlimited SMS + 500MB data $0 Free, but the number gets recycled if unused for 60 days Budget option: Buy a $5/month plan and just use it minimally (send a text or make a call each month) to keep your number forever.\nHands-On Setup Step 1: Purchase Visit the Tello website.\nSelect a plan ($5/month is a solid starting point) Payment methods: Credit card (Visa/MasterCard/Amex all work, but Chinese Visa cards sometimes get declined) PayPal (highly recommended; works with Chinese PayPal accounts) Apple Pay / Google Pay Use a US address for billing: When you don\u0026rsquo;t have a real address, there are tools to find valid ones Step 2: eSIM or Physical SIM Card Option Pros Cons eSIM Instant activation, no shipping Newer iPhones / some Android phones only Physical SIM Works on all phones Requires mailing to a US address (pricey international shipping) Strongly recommend eSIM. You\u0026rsquo;ll get an activation QR code within minutes after purchase and can use it immediately.\nStep 3: Activation Tello account → My eSIM → Scan QR code Phone Settings → Cellular → Add Cellular Plan → Scan QR Wait for activation (5–10 minutes) You\u0026rsquo;ll receive a welcome SMS and your number is live Step 4: Test Have a friend text you to confirm you can receive (or test via iMessage from a US number) Receive a verification code from any platform (e.g., Google account signup) Make sure everything works International Roaming This is Tello\u0026rsquo;s biggest advantage. Tello roams freely in 60+ countries (no activation needed—it just works):\nCovered Countries (Partial List) Asia: Japan, South Korea, Singapore, Malaysia, Thailand, Vietnam, India, Israel Europe: UK, Germany, France, Italy, Spain, Netherlands, Switzerland, and most EU countries Americas: USA, Canada, Mexico, Brazil, Argentina Oceania: Australia, New Zealand ⚠️ Not covered: China mainland, North Korea, Cuba, Syria, etc.\nRoaming Rates Service Cost SMS received Free SMS sent $0.15/msg Voice calls $0.25–0.50/min Data Draws from your plan allocation (no extra fees) Key point: Data consumption doesn\u0026rsquo;t incur roaming charges. If your plan includes 5GB and you use 3GB while roaming in Japan, that\u0026rsquo;s 3GB from your original 5GB—no separate roaming fee.\nReal-World Use Cases Business trip to Japan → No need to buy a local tourist SIM; Tello roams seamlessly Multi-country Europe tour → One Tello card covers everywhere Short cross-border trips → Skip the hassle of buying a SIM in each country Competing Solutions vs Other MVNOs Provider Starting Monthly Fee International Roaming eSIM Tello $5 ✅ 60 countries ✅ Mint Mobile $15 Canada/Mexico only ✅ US Mobile $10 Some paid ✅ Ultra Mobile $9 Some free ✅ Tello wins on cheap number retention and roaming breadth.\nvs Google Voice Aspect Tello Google Voice Number type Real mobile VoIP Platform acceptance 100% 60–70% (many reject GV) Monthly cost $5+ Free (requires US number to activate) Call quality Mobile network Internet-based International roaming ✅ ✅ Best combo: Tello + Google Voice\nUse Tello to activate Google Voice (GV requires a US number for verification) Use GV for calling/texting daily (free) Keep Tello as your backup number Total monthly cost: Tello $5 + GV free = $5 for both a US number and calling capability AI Account Registration—Real Test Cases Scenario: Register ChatGPT Plus IP: US residential IP (IPRoyal) Email: US Gmail (set up one first) Phone: Tello US number Credit card: US virtual card (WildCard, etc.) Process:\nVisit chat.openai.com on a US IP Sign up (use US Gmail) Phone verification → Enter your Tello number → Receive SMS code Subscribe to Plus → Pay with your virtual card Success rate: Tello + US residential IP approaches 100%.\nScenario: Activate Google Voice Google Voice requires a real US number for verification:\nGo to voice.google.com → Sign up Pick a free GV number You\u0026rsquo;ll see a prompt to \u0026ldquo;link a US phone number\u0026rdquo; Enter your Tello number → Receive verification code Done; GV is now active After linking, GV remains functional even if Tello stops—GV has its own independent number.\nPitfalls I\u0026rsquo;ve Hit Pitfall 1: Billing Address Rejected Problem: Used a fake US address on a credit card; Tello\u0026rsquo;s fraud system declined the payment.\nFix: Pay with PayPal. PayPal doesn\u0026rsquo;t enforce a US address.\nPitfall 2: Can\u0026rsquo;t Use in Mainland China Problem: Tello doesn\u0026rsquo;t cover mainland China; the network drops.\nFix:\nGet a domestic SIM card before returning to China Keep Tello on the shelf ($5/month, no usage required) While in China, receive SMS verification over WiFi + roaming Pitfall 3: eSIM Deleted, Number Lost Problem: Switched phones and deleted the eSIM; couldn\u0026rsquo;t recover the number.\nFix:\nBefore switching, go to your Tello account and request eSIM Transfer (generates a new activation code) Don\u0026rsquo;t just delete the eSIM from your old phone Pitfall 4: Weak Signal While Roaming Problem: Roaming lands you on a small carrier with spotty signal.\nFix:\nSettings → Cellular → Network Selection → Manually choose a carrier Pick the major local carrier (NTT Docomo / SoftBank in Japan, KT / SK in Korea, etc.) Pitfall 5: SMS Verification Delays Problem: Verification SMS takes 5–10 minutes to arrive.\nFix:\nMost platforms let you resend; a resend usually arrives faster Roaming adds latency; send the verification request over WiFi if possible Long-Term Number Retention Cost If you just want to \u0026ldquo;keep a US number on file\u0026rdquo;:\nPlan Monthly Annual Tello $5 keepalive $5 $60 Tello + Google Voice $5 $60 (GV is free) Other MVNO cheapest $10–15 $120–180 Tello is among the cheapest for long-term number retention.\nFAQ Q: Can I sign up with a Chinese passport/ID? Tello has no KYC. You only need an email and a payment method. However, use a US billing address—it\u0026rsquo;s safer.\nQ: Will my Chinese credit card work? Some do, some don\u0026rsquo;t. PayPal is your safest bet.\nQ: I don\u0026rsquo;t have a US address. What do I do? Use any real US address for billing (find one in USPS zip code databases) You don\u0026rsquo;t need a physical mailbox (eSIM ships digitally) If you need physical mail, rent a US private mailbox (PMB)—$10–15/month Q: Will this number work with all verification platforms? Mainstream platforms (ChatGPT, Google, Apple, PayPal, Amazon) all accept it. Some niche platforms (certain banks, brokerages) may reject MVNO numbers and demand carrier-issued ones.\nQ: Does international roaming really cost nothing? Data draws from your plan quota (no overage). Inbound SMS is free. Outbound SMS and calls cost extra. The killer feature is free inbound SMS while roaming.\nQ: Can I link this to US shopping platforms? Yes, Tello + a US address can set up Amazon US, Costco, etc. But actually buying requires a US credit card and delivery address—that\u0026rsquo;s a separate piece.\nQ: What if I stop getting service? Check your account:\nDo you have enough balance? ($5 plans auto-renew monthly) Is your plan suspended? (Tello shows status in your account) Is your APN set correctly? Tello APN: wholesale (usually auto-configured; no manual entry needed)\nCombining with Other Services Combo 1: Full Cross-Border Toolkit Tello US number (verification codes, number retention) Google Voice (daily calling, free) IPRoyal residential IP (use cases) US virtual card (paid subscriptions) Monthly cost ~$10–20 for 99% of cross-border needs.\nCombo 2: Frequent Travelers Tello $5 plan (keep your main domestic SIM, use Tello for roaming) When traveling, just use Tello roaming No need to buy a tourist SIM in every country Combo 3: AI Tool Bulk Registration Multiple Tello numbers (one per account) Paired with fingerprint browsers + residential IP Batch-register AI tool accounts for agency/reseller services Getting Started Visit Tello\u0026rsquo;s website Choose the $5/month plan Buy eSIM (recommended) Scan the QR to activate Test with your first inbound SMS → Sign up for Tello (AFF) → IPRoyal Residential IP Use Cases → Google One AI Premium Guide\nCross-border questions? Drop by Telegram.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/tello-esim-global-roaming/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Two smartphones, one black and one white, placed on a white \" loading=\"lazy\" src=\"/images/tello-esim-global-roaming-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=tello\"\u003eTello Mobile\u003c/a\u003e is an MVNO carrier (leveraging T-Mobile\u0026rsquo;s network) specializing in \u003cstrong\u003eaffordable US phone numbers + international roaming\u003c/strong\u003e. It\u0026rsquo;s incredibly useful for cross-border business and AI account registration. This post documents my experience using Tello over the past 1.5 years.\u003c/p\u003e\n\u003ch2 id=\"why-you-need-a-us-phone-number\"\u003eWhy You Need a US Phone Number\u003c/h2\u003e\n\u003cp\u003eI use a US phone number most frequently in these scenarios:\u003c/p\u003e","title":"Tello eSIM International Roaming Hands-On Test: US Number + Google Voice + Multi-Country Roaming Complete Solution"},{"content":"\nThe biggest pitfall when buying VPS is the \u0026ldquo;one fits all\u0026rdquo; trap—thinking one server can handle everything, only to find your proxy\u0026rsquo;s too slow, your blog can\u0026rsquo;t scale traffic, and quant execution becomes unreliable. This post scores five typical use cases and tells you which provider to pick for each scenario.\nScoring dimensions Dimension Meaning Latency Latency from mainland China (ms) Bandwidth Peak / average throughput IP quality Streaming unlock / ChatGPT approval rate Stability Downtime incidents and duration per year Price Monthly average cost Use case 1: Proxy node (VPN / circumvention) Requirements: Low latency, stable, good IP quality, enough bandwidth for home use.\nProvider Rating Reason DMIT HK PVM Eyeball ⭐⭐⭐⭐⭐ Lowest latency (20–40ms), best IP quality Bandwagon CN2 GIA-E ⭐⭐⭐⭐⭐ Stable during peak hours, easy IP rotation AkileCloud HK CMI ⭐⭐⭐⭐ Great value RackNerd LA ⭐⭐⭐ Cheap, sluggish during peak hours CloudCone LA ⭐⭐⭐ Hourly billing flexibility Best picks:\nBudget $150+/year → DMIT HK PVM Eyeball Budget $50/year → Bandwagon CN2 GIA-E PID 87 Budget $15/year → RackNerd LA MC Gotchas to avoid:\nCheap BGP lines (\u0026lt; $20/year) will choke during peak hours Providers with large IP pools (RackNerd) have higher IP ban rates For multi-account proxies: pair with IPRoyal residential IPs Use case 2: Web hosting (blog, tools, forum) Requirements: Stable, fast access from overseas (if targeting international users), Docker support, low cost.\nProvider Rating Reason RackNerd LA / NY ⭐⭐⭐⭐⭐ $14/year, unbeatable value CloudCone LA ⭐⭐⭐⭐ Hourly billing flexibility Hetzner (Germany) ⭐⭐⭐⭐⭐ Europe\u0026rsquo;s performance king, $5/mo for 4GB RAM Vultr ⭐⭐⭐ Multiple global nodes, slightly pricey Best picks:\nTarget audience in mainland China → Bandwagon CN2 GIA + Cloudflare or Alibaba/Tencent Cloud Hong Kong Target audience overseas → RackNerd $14/year or Hetzner Need large database memory → Hetzner AX series Gotchas to avoid:\nWeb traffic = total bandwidth × 2–5× (bots, CDN origin requests), don\u0026rsquo;t skimp on traffic allowance CN2 lines are necessary for \u0026ldquo;visitors accessing your site from China\u0026rdquo;, but if your traffic is mostly overseas, CN2 doesn\u0026rsquo;t matter If you use a control panel (Baota / 1Panel), remember to change default ports Use case 3: Data storage (cloud drives, backups, sync) Requirements: Large disk, high throughput, stable, safe backups.\nProvider Rating Reason Hetzner Storage Box ⭐⭐⭐⭐⭐ 1TB for $3.5/mo, cheapest option BuyVM Storage Slab ⭐⭐⭐⭐ 10TB for $15/mo BackBlaze B2 ⭐⭐⭐⭐ Object storage, $0.006/GB/mo Cloudflare R2 ⭐⭐⭐⭐⭐ No bandwidth fees, $0.015/GB/mo DIY NAS + dynamic DNS ⭐⭐⭐⭐ One-time setup, free long-term Best picks:\nFully automated cloud backup → BackBlaze B2 or Cloudflare R2 Large media / video library → BuyVM Storage Slab (10TB) Personal data → Hetzner Storage Box + rclone sync Gotchas to avoid:\nVPS local disk (50–100GB) isn\u0026rsquo;t designed for heavy storage Backups must be geographically diverse (single vendor outage = total loss) Encrypt before uploading (privacy protection) Use case 4: Algorithmic trading (API calls, low-latency execution) Requirements: Minimal API latency to exchanges, 24x7 stable runtime, IP won\u0026rsquo;t get blocked by exchanges.\nCentralized exchanges (Binance / OKX / Bybit) Exchange Core datacenter Recommended VPS region Binance AWS Tokyo (ap-northeast-1) AWS Tokyo / AWS Singapore OKX Hong Kong / Singapore AWS HK / Alibaba HK Bybit AWS Singapore AWS Singapore Best picks:\nAWS Tokyo / Singapore t4g.small ($12/mo, runs my Polaris strategy) Non-AWS backup: DMIT Singapore or Alibaba Cloud Singapore Why not regular VPS:\nRegular VPS to Binance latency is 100–200ms, causing noticeable slippage AWS to Binance API is 5–20ms (same AWS region datacenter) 20× latency reduction = qualitative improvement in execution quality Gotchas to avoid:\nBinance API enforces IP whitelisting, update whitelist when switching VPS Quant strategy servers need hot standby (see dual-server failover architecture) Avoid tiny instance tiers (512MB RAM, pandas will OOM) Reference: Quant tools stack\nUse case 5: Web scraping Requirements: IP diversity, pay-as-you-go, easy IP rotation, won\u0026rsquo;t get blocked.\nSolution Rating Reason IPRoyal residential IPs ⭐⭐⭐⭐⭐ Per-GB billing, large IP pool CloudCone hourly billing ⭐⭐⭐⭐ Spin up VPS for task, then delete RackNerd multiples ⭐⭐⭐ Cheap VPS as IP pool AWS Lambda + NAT ⭐⭐⭐⭐ Serverless, pay-per-use ScraperAPI / Bright Data ⭐⭐⭐⭐⭐ Managed scraping, pricey but hassle-free Best picks:\nSmall-to-medium scraping (\u0026lt;100GB/mo) → IPRoyal + your own scripts One-time large bulk scraping → CloudCone hourly, spin up 10–20 instances Extreme reliability required → ScraperAPI / Bright Data Gotchas to avoid:\nScraping MUST be distributed, single-IP high-frequency requests get blocked Control request frequency (respect robots.txt + rate limits) Residential IPs are harder to detect than datacenter IPs Data cleaning matters more than collection success rate Reference: IPRoyal 5 real-world scenarios\nRecommended bundles Bundle 1: Personal proxy + blog Bandwagon CN2 GIA-E (main proxy) $50/year RackNerd LA (blog hosting) $14/year Cloudflare + Hetzner Storage (blog images) $3.5/mo Total: ~$110/year Bundle 2: Cross-border business + AI tool ops Bandwagon CN2 GIA-E (daily proxy) IPRoyal residential IPs (account signup + scraping) Tello eSIM (US phone number) RackNerd (cron jobs, light scraping) Total monthly: ~$25/mo Bundle 3: Professional quant trading AWS Tokyo t4g.small (main strategy) $12/mo AWS Singapore t4g.small (hot standby) $12/mo Bandwagon (ops machine, monitoring) $50/year Hetzner (data storage, backtesting) $5/mo Total monthly: ~$35/mo Bundle 4: Extreme budget RackNerd LA annual (proxy + blog) $14/year Cloudflare (CDN + acceleration) free Total monthly: $1.2/mo When to buy Period What\u0026rsquo;s on sale Black Friday (late Nov – early Dec) All providers cheapest, new products launch Christmas Minor promotions Lunar New Year Bandwagon offers Chinese New Year deals Provider anniversary Varies by vendor, follow Telegram channels My strategy: Month-to-month for immediate needs, bulk buy annually during Black Friday.\nDecision flowchart What\u0026#39;s your primary use case? ├── Proxy node │ ├── Budget \u0026gt; $150/year → DMIT HK │ ├── Budget $50–150 → Bandwagon CN2 GIA-E │ └── Budget \u0026lt; $50 → RackNerd LA / Akile │ ├── Web hosting │ ├── Users in China → Bandwagon CN2 + CF │ └── Users overseas → RackNerd / Hetzner │ ├── Storage │ ├── Personal backup → Hetzner Storage Box │ └── Media repository → BuyVM Storage Slab │ ├── Quant │ └── Must have AWS Tokyo / Singapore │ └── Scraping ├── Small-scale → IPRoyal per-GB └── Large-scale → CloudCone multi-instance + proxy FAQ Q: Can one VPS handle both proxy and hosting? Yes, with caveats:\nProxy consumes bandwidth → blog access slows down If blog traffic is large (\u0026gt; 1000 UV/day), deploy separately Port management: proxy uses 443, blog uses 80, use nginx reverse proxy to arbitrate Q: Why buy separate AWS for quant, not reuse existing VPS? Latency. Regular VPS to Binance is 100ms+; AWS Tokyo to Binance is 5–20ms. For quant, latency is money.\nQ: Can CDN (Cloudflare) replace VPS? No. CDN accelerates existing sites; it can\u0026rsquo;t run dynamic apps. But Cloudflare Workers can run some stateless APIs / proxies.\nQ: One big instance or multiple small ones? Usually multiple small instances:\nBetter redundancy (one goes down, others stay online) Geographic distribution Task isolation, machines don\u0026rsquo;t interfere Buy bigger instances only if single resource (RAM/CPU) is a bottleneck—like ML or video transcoding.\nQ: Is domestic cloud (Alibaba/Tencent) worth it? Target users in mainland China: Domestic cloud is required, blazing fast after ICP filing Target users overseas: Alibaba/Tencent overseas regions aren\u0026rsquo;t cheap, better to buy DMIT/Bandwagon Personal proxy: Domestic cloud not suitable (traffic is expensive) → RackNerd vs CloudCone vs Bandwagon → Bandwagon CN2 GIA deep review → AkileCloud domestic-optimized VPS review → DMIT VPS purchase guide → IPRoyal residential IP use cases\nStuck on selection? Drop by Telegram to ask.\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/vps-family-matrix-by-use-case/","summary":"\u003cp\u003e\u003cimg alt=\"System with various wires managing access to centralized res\" loading=\"lazy\" src=\"/images/vps-family-matrix-by-use-case-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eThe biggest pitfall when buying VPS is the \u0026ldquo;one fits all\u0026rdquo; trap—thinking one server can handle everything, only to find your proxy\u0026rsquo;s too slow, your blog can\u0026rsquo;t scale traffic, and quant execution becomes unreliable. This post scores five typical use cases and tells you which provider to pick for each scenario.\u003c/p\u003e\n\u003ch2 id=\"scoring-dimensions\"\u003eScoring dimensions\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eDimension\u003c/th\u003e\n          \u003cth\u003eMeaning\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eLatency\u003c/td\u003e\n          \u003ctd\u003eLatency from mainland China (ms)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eBandwidth\u003c/td\u003e\n          \u003ctd\u003ePeak / average throughput\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eIP quality\u003c/td\u003e\n          \u003ctd\u003eStreaming unlock / ChatGPT approval rate\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eStability\u003c/td\u003e\n          \u003ctd\u003eDowntime incidents and duration per year\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePrice\u003c/td\u003e\n          \u003ctd\u003eMonthly average cost\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"use-case-1-proxy-node-vpn--circumvention\"\u003eUse case 1: Proxy node (VPN / circumvention)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eRequirements\u003c/strong\u003e: Low latency, stable, good IP quality, enough bandwidth for home use.\u003c/p\u003e","title":"VPS selection matrix by purpose: which provider for proxy nodes, website hosting, storage, quantitative trading, and web scraping respectively?"},{"content":" While running Binance quant strategies on AWS Singapore, I ran into a series of \u0026ldquo;IP-related\u0026rdquo; pitfalls: geographic restrictions, API rate limiting, and account risk control freezes. The ultimate solution was to use IPRoyal residential IPs as the exit for API calls. This article lays out the principles and configuration in detail.\nIP Problems You\u0026rsquo;ll Hit with Quant Strategies Problem 1: Binance restricts API access from certain countries Binance blocks API access via IPs from the US, UK, Netherlands, and other regions:\nFutures API returns 451 Unavailable For Legal Reasons Some API endpoints are outright rejected User service compliance issues Common affected VPS regions:\nAWS us-east-1 / us-west-2 (US) Vultr certain US nodes Hetzner certain German nodes (affected by new EU regulations) Problem 2: API rate limiting triggers frequently Binance imposes rate limits on each IP\u0026rsquo;s API requests:\nREST API: 1200 weight/minute WebSocket connections: max 300 per IP Real scenarios:\nMultiple strategies running on one VPS share the IP, weights stack Volatility spikes cause request surges, triggering 429 WebSocket reconnections on disconnects hit 429 Problem 3: Account risk control Binance\u0026rsquo;s risk control system detects \u0026ldquo;suspicious logins\u0026rdquo;:\nFrequent IP changes → triggers security verification Login IP differs from API call IP → risk control kicks in Datacenter IPs (especially small cloud providers) → some operations restricted Extreme cases: accounts temporarily frozen (KYC review), forcing strategy downtime.\nProblem 4: IP blacklisting Some ISP IP ranges get flagged by Binance as \u0026ldquo;high-risk\u0026rdquo; Other VPS customers violating terms; entire IP range gets blacklisted as collateral Accidental bans from DDoS or scanning Why Residential IPs Solve This The core difference with residential IPs Feature Datacenter IP (VPS) Residential IP ASN Cloud provider (AWS / Google Cloud) ISP (Comcast / AT\u0026amp;T) Users 1–100 servers sharing 1–5 regular households Fraud Score 40–80 (high) 0–20 (very low) Risk system detection Obvious Extremely difficult Binance (and other exchanges) have risk control systems that are extremely permissive toward residential IPs, because residential IPs typically belong to real users, and monitoring them is costly.\nHow residential IPs solve the 4 specific problems Original problem Residential IP solution Geographic restrictions Choose residential IP from unrestricted region (Singapore / Japan / Hong Kong) Rate limiting IP rotation (use different IP per API call) Risk control Use \u0026ldquo;local residential IP\u0026rdquo; to bypass risk controls IP blacklisting Massive residential IP pool; switch if one gets banned Concrete Architecture Quant strategy server (AWS Tokyo) │ │ Default traffic ▼ Binance API (direct) │ Specific sensitive API requests ▼ IPRoyal residential IP proxy (exit = Japan residential IP) │ ▼ Binance API Core idea:\nMost API calls connect directly to Binance (fast, saves residential IP bandwidth) Sensitive API calls use residential IP (open/close positions, large transfers) Account login operations use residential IP (maintain stable IP, avoid risk control) Solution 1 in Practice: mihomo Rule-Based Routing Install mihomo on your quant server and configure proxy rules:\n# /etc/mihomo/config.yaml proxies: - name: \u0026#34;iproyal-jp\u0026#34; type: socks5 server: gate.iproyal.cn port: 10000 username: \u0026#34;your_username_country-jp_session-stable1\u0026#34; password: \u0026#34;your_password\u0026#34; proxy-groups: - name: \u0026#34;binance-sensitive\u0026#34; type: select proxies: - iproyal-jp rules: # Sensitive API via residential IP - DOMAIN-SUFFIX,binance.com,binance-sensitive - DOMAIN-SUFFIX,binancezh.com,binance-sensitive # Market data API direct (save bandwidth) - DOMAIN,stream.binance.com,DIRECT # Everything else direct - MATCH,DIRECT Using in quant code Specify proxy in ccxt Python code:\nimport ccxt exchange = ccxt.binance({ \u0026#39;apiKey\u0026#39;: \u0026#39;YOUR_API_KEY\u0026#39;, \u0026#39;secret\u0026#39;: \u0026#39;YOUR_SECRET\u0026#39;, \u0026#39;proxies\u0026#39;: { \u0026#39;http\u0026#39;: \u0026#39;socks5://127.0.0.1:7890\u0026#39;, # mihomo local proxy \u0026#39;https\u0026#39;: \u0026#39;socks5://127.0.0.1:7890\u0026#39;, }, # Market data goes direct (separate client in code) \u0026#39;enableRateLimit\u0026#39;: True, }) # Place order (via proxy = residential IP) order = exchange.create_market_buy_order(\u0026#39;BTC/USDT\u0026#39;, 0.01) # Fetch ticker (can go direct, but proxy works too) market_exchange = ccxt.binance({}) # no proxy ticker = market_exchange.fetch_ticker(\u0026#39;BTC/USDT\u0026#39;) Solution 2 in Practice: Fixed Exit IP Problem: By default, IPRoyal may assign different exit IPs per request. Binance logs API call IP changes and may trigger risk control.\nSolution: Use IPRoyal\u0026rsquo;s sticky session feature.\nSticky session configuration IPRoyal\u0026rsquo;s username format supports parameters:\nUsername format: {base_user}_country-{cc}_session-{session_id}_lifetime-{minutes} Example: user123_country-jp_session-mystrategy1_lifetime-60 Parameter details:\ncountry-jp: Japan session-mystrategy1: Session ID (custom string) lifetime-60: Session lasts 60 minutes Effect: For 60 minutes, every request with this username returns the same exit IP.\nQuant strategy application # Each strategy account uses a unique session ID, stable exit IP PROXY_USER = \u0026#34;user123_country-jp_session-polaris1_lifetime-1440\u0026#34; # 24-hour session proxy = f\u0026#34;socks5://{PROXY_USER}:password@gate.iproyal.cn:10000\u0026#34; # Strategy restarts with same session ID; exit IP remains the same This way Binance sees a \u0026ldquo;stable Japan residential IP\u0026rdquo; and won\u0026rsquo;t trigger the IP-change risk control.\nSolution 3 in Practice: IP Rotation for Rate Limits Scenario: High-frequency strategies or scraping need active IP rotation to avoid 429s.\nimport random import httpx def get_rotating_proxy(): session_id = random.randint(100000, 999999) user = f\u0026#34;user123_country-jp_session-{session_id}_lifetime-10\u0026#34; return f\u0026#34;socks5://{user}:password@gate.iproyal.cn:10000\u0026#34; # Each request uses a new IP for _ in range(1000): proxy = get_rotating_proxy() with httpx.Client(proxies=proxy) as client: r = client.get(\u0026#34;https://api.binance.com/api/v3/ticker/price\u0026#34;) # ... Effect: 1000 requests spread across 1000 different IPs; single-IP rate limits completely bypassed.\nCost estimate:\nSingle API call ~1KB data 1000 calls = 1MB = $0.007 High-frequency strategy 10M calls/month ≈ $70/month; acceptable for high-volume scenarios Real-World Config: Polaris Strategy My Polaris strategy runs on AWS Tokyo with default direct Binance connection. But it uses residential IP in these cases:\nPosition entry/exit signals (critical moments) def execute_signal(signal): # Position entry/exit at critical moments; use residential IP proxy exchange = ccxt.binance({ \u0026#39;apiKey\u0026#39;: API_KEY, \u0026#39;secret\u0026#39;: SECRET, \u0026#39;proxies\u0026#39;: { \u0026#39;http\u0026#39;: IPROYAL_PROXY, \u0026#39;https\u0026#39;: IPROYAL_PROXY, } }) # Set leverage, place market order exchange.set_leverage(3, \u0026#39;BTC/USDT:USDT\u0026#39;) order = exchange.create_market_buy_order(\u0026#39;BTC/USDT:USDT\u0026#39;, 0.1) return order Market data (high-frequency, non-sensitive) # Market data direct; saves bandwidth and speed market = ccxt.binance({}) ticker = market.fetch_ticker(\u0026#39;BTC/USDT\u0026#39;) Strategy startup self-check # On startup, check current exit IP def check_outbound_ip(via_proxy=True): kwargs = {} if via_proxy: kwargs[\u0026#39;proxies\u0026#39;] = {\u0026#39;all\u0026#39;: IPROYAL_PROXY} r = httpx.get(\u0026#34;https://api.ipify.org\u0026#34;, **kwargs) return r.text print(\u0026#34;Direct IP:\u0026#34;, check_outbound_ip(via_proxy=False)) print(\u0026#34;Proxy IP:\u0026#34;, check_outbound_ip(via_proxy=True)) # Direct IP: 54.178.x.x (AWS Tokyo) # Proxy IP: 126.147.x.x (Japan residential) Cost Breakdown Residential IP traffic consumption API type Per-call traffic Monthly estimate (Polaris strategy) Order API ~2KB 100 calls × 2KB = 200KB Query position ~1KB Every 30 min × 24h × 30 days = 1.4MB Set leverage / stop-loss ~1KB Occasional adjustments, ~50KB/month Monthly total: ~5–10 MB, cost ~$0.05/month.\nIf all traffic went through residential IP Including market data: potentially 5–20 GB/month Cost: $35–140/month Conclusion: Only let sensitive API use residential IP, most traffic direct, keeping cost at $1–5/month.\nRisks and Downsides 1. Increased latency Residential IP proxy adds 50–100ms latency. For:\nTrend-following strategies (1-hour signal intervals): imperceptible High-frequency strategies (milliseconds): unacceptable 2. Availability Residential IPs can:\nBriefly disconnect (typical home network quality) Certain IPs unable to reach Binance Solution: Configure fallback mechanism.\ndef robust_request(url, **kwargs): \u0026#34;\u0026#34;\u0026#34;Try residential IP first, fall back to direct on failure\u0026#34;\u0026#34;\u0026#34; try: with httpx.Client(proxies=IPROYAL_PROXY, timeout=10) as client: return client.get(url, **kwargs) except Exception as e: logger.warning(f\u0026#34;Proxy failed: {e}, falling back to direct\u0026#34;) return httpx.get(url, timeout=10, **kwargs) 3. API whitelist management Binance API keys can bind to IP whitelists. Residential IPs are dynamically assigned; if you\u0026rsquo;ve enabled IP whitelisting, residential IPs get blocked.\nSolutions:\nDon\u0026rsquo;t enable IP whitelisting (but risk increases; rely on API key permissions) Or use sticky session to fix one IP, add it to whitelist Extended Scenarios Scenario 1: Multi-account quant team A company has 5 sub-accounts, each running a strategy. Each uses a unique residential IP session ID, preventing cross-account correlation.\nACCOUNTS = { \u0026#34;acc1\u0026#34;: \u0026#34;user123_country-jp_session-acc1_lifetime-1440\u0026#34;, \u0026#34;acc2\u0026#34;: \u0026#34;user123_country-jp_session-acc2_lifetime-1440\u0026#34;, \u0026#34;acc3\u0026#34;: \u0026#34;user123_country-jp_session-acc3_lifetime-1440\u0026#34;, # ... } Scenario 2: Compliance audit Some use cases require proof that \u0026ldquo;API requests come from a compliant region\u0026rdquo; (e.g., only from Japan IP). Use IPRoyal\u0026rsquo;s fixed Japan residential IP to meet compliance.\nScenario 3: Multi-exchange hedging If you\u0026rsquo;re arbitraging across Binance / OKX / Bybit, use different-country residential IPs per exchange to avoid \u0026ldquo;same IP operating multiple exchanges\u0026rdquo; flags.\nFAQ Q: What\u0026rsquo;s the latency from AWS Tokyo to Binance direct? About 5–20ms. AWS ap-northeast-1 and Binance\u0026rsquo;s core nodes are co-located; latency is very low.\nQ: How much does adding residential IP proxy increase latency? Adds 50–150ms. Imperceptible for trend-following/grid strategies; unsuitable for high-frequency arbitrage.\nQ: Can IPRoyal replace a VPN? Different use cases. VPNs \u0026ldquo;globally proxy all traffic\u0026rdquo;; IPRoyal charges per GB, so proxy only sensitive requests.\nQ: Does this work on other exchanges (OKX / Bybit)? Same principles. OKX / Bybit\u0026rsquo;s geographic restrictions and risk control resemble Binance\u0026rsquo;s; residential IP approach is universal.\nQ: Will changing exit IPs break my Binance API? Won\u0026rsquo;t break the API Key itself, but will:\nTrigger \u0026ldquo;login from new location\u0026rdquo; email notifications (can disable some in account settings) Some sensitive operations trigger 2FA Continuous abnormal IP changes may lead to temporary account freeze Solution: Use sticky session to fix the IP, avoid frequent changes.\nQ: Does this approach work for individual users? Yes. If you run quant strategies and\u0026rsquo;ve hit IP problems, this approach costs ~$1–5/month for individuals; worth it.\nSummary: Residential IPs aren\u0026rsquo;t essential for quant strategies, but when hitting geographic restrictions / rate limiting / risk control issues, they\u0026rsquo;re the cleanest solution. The key is proxying only sensitive traffic to control costs.\n→ IPRoyal Residential IP Official (AFF) → IPRoyal 5 Real-World Use Cases → Binance API From Zero to First Order → Binance Funding Rate Arbitrage → mihomo Exit to Residential IP → Three-Layer Futures Risk Management\nQuestions on live quant trading, hit up Telegram.\n📷 Hero image · Flux Schnell AI generation · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/quant-proxy-residential-ip-why/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A close-up of a golden Bitcoin highlighting its digital curr\" loading=\"lazy\" src=\"/images/quant-proxy-residential-ip-why-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eWhile running \u003ca href=\"https://aff.panshi.io/track?id=binance\"\u003eBinance\u003c/a\u003e quant strategies on AWS Singapore, I ran into a series of \u0026ldquo;IP-related\u0026rdquo; pitfalls: geographic restrictions, API rate limiting, and account risk control freezes. The ultimate solution was to \u003cstrong\u003euse \u003ca href=\"https://aff.panshi.io/track?id=iproyal\"\u003eIPRoyal residential IPs\u003c/a\u003e as the exit for API calls\u003c/strong\u003e. This article lays out the principles and configuration in detail.\u003c/p\u003e\n\u003ch2 id=\"ip-problems-youll-hit-with-quant-strategies\"\u003eIP Problems You\u0026rsquo;ll Hit with Quant Strategies\u003c/h2\u003e\n\u003ch3 id=\"problem-1-binance-restricts-api-access-from-certain-countries\"\u003eProblem 1: Binance restricts API access from certain countries\u003c/h3\u003e\n\u003cp\u003eBinance blocks API access via IPs from the \u003cstrong\u003eUS, UK, Netherlands\u003c/strong\u003e, and other regions:\u003c/p\u003e","title":"Why quantitative trading strategies need residential IPs: Complete solution for Binance API account ban defense"},{"content":" 💡 Mainland China Notice: Binance\u0026rsquo;s official website isn\u0026rsquo;t directly accessible from mainland China; you\u0026rsquo;ll need to use a VPN. Fiat deposits don\u0026rsquo;t support bank cards directly—you\u0026rsquo;ll need to use C2C channels (USDT ↔ CNY) to complete deposits.\nGold is one of the world\u0026rsquo;s most important safe-haven assets. Trading gold used to require opening a futures account or buying gold ETFs, but now through Binance you can trade gold directly with USDT 24/7 with minimal barriers to entry.\nThis guide covers two ways to trade gold on Binance: spot XAU/USDT and XAUUSDT perpetual futures, including how to place orders and key risk considerations.\nGold Trading Products on Binance Product Description Leverage Best For XAU/USDT Spot Direct buy/sell of gold tokens; 1 XAU = 1 troy ounce spot price None Medium-to-long-term holding, no leverage needed XAUUSDT Perpetual Perpetual futures tracking gold prices; long or short Up to 20x Short-term trading, hedging, leveraged positions XAU on Binance is a tokenized asset pegged to spot gold prices, not physical gold. Physical delivery is not supported.\nGetting Started Register a Binance Account 👉 Binance Registration (with fee rebate)\nDirect link: https://aff.panshi.io/track?id=binance\u0026amp;ref=/posts/binance-xau-gold-trading/\nAfter registration, you\u0026rsquo;ll need to complete KYC verification (passport or ID + facial recognition). You can only trade once verification is approved.\nDeposit USDT You\u0026rsquo;ll need USDT in your account to trade gold:\nSpot trading: deposit to Spot Wallet Futures trading: deposit, then transfer to Perpetual/Futures Wallet (Unified Margin Account) Deposit path: Wallet → Deposit → USDT → Select Network (TRC-20 has lowest fees)\nMethod 1: XAU/USDT Spot Trading What is Spot XAU Binance\u0026rsquo;s XAU token is pegged 1:1 to the spot gold price, tracking real-time LBMA (London Bullion Market Association) gold prices. Holding XAU gives you equivalent gold exposure with no leverage.\nKey features:\nNo liquidation risk No funding rates (only on futures) Can hold long-term Trading fees follow spot standards (default 0.1%; 30% discount with BNB holdings = 0.07%) How to Place Orders Navigate to: Trading → Spot → Search XAU, select XAU/USDT\nOrder types:\nBuy area: - Limit order: Set price, trade executes when price is reached - Market order: Trades immediately at current market price - Take-profit / Stop-loss order: Auto-places order at trigger price Buy gold (go long):\nSelect Buy XAU Choose order type (market for immediate execution, limit to wait for your price) Enter amount (USDT quantity) or XAU quantity Click \u0026ldquo;Buy XAU\u0026rdquo; to confirm Sell gold (close position):\nSelect Sell XAU Enter quantity to sell Confirm When to Use Spot XAU Medium-to-long-term holding: You think gold will rise over weeks or months; buy and hold Portfolio diversification: Add gold to your crypto portfolio as a hedge Avoid futures risks: You want gold exposure but don\u0026rsquo;t want liquidation risk Method 2: XAUUSDT Perpetual Futures What is Perpetual Futures Perpetual futures are contracts with no expiration date. They use a funding rate mechanism to keep the futures price anchored to spot price. You can go long (bullish) or short (bearish), and they support leverage.\nKey differences from spot:\nSpot XAU Perpetual Futures Leverage None Up to 20x Short selling Not supported Supported Funding rate None Paid/received every 8 hours Liquidation risk None Yes Holding cost Low Funding rates (varies by direction) Enable Futures Trading First-time futures users need to activate the feature:\nTrading → Futures → USDT-M Futures Read and agree to risk disclosures Complete the derivatives knowledge assessment (a few risk-management questions) Once approved, transfer USDT from Spot to Perpetual Wallet: Wallet → Transfer → Spot to USDT-M Futures\nHow to Place Orders Navigate to: Trading → USDT-M Futures → Search XAUUSDT\nSet leverage:\nClick the leverage button (shows \u0026ldquo;20x\u0026rdquo; by default) and adjust to your desired multiplier.\nFor your first trades, use 1-3x leverage. Gold moves relatively modestly, but leverage amplifies losses.\nGo long (bullish on gold):\nSelect Buy / Long Choose order type (market or limit) Enter position size (or USDT amount) Optional: Set take-profit and stop-loss prices Confirm to open Go short (bearish on gold):\nSelect Sell / Short Same steps as above Take-Profit and Stop-Loss You can set these when opening a position—they\u0026rsquo;re essential for futures trading:\nTake-profit price: Position closes automatically at this price to lock in gains Stop-loss price: Position closes automatically at this price to prevent larger losses Example: Gold is at $4600, you open 1 contract (100 oz) long:\nSet take-profit: $4700 (close at +3%) Set stop-loss: $4450 (close at -1.5%) Funding Rate Explained Perpetual futures settle funding rates every 8 hours (00:00, 08:00, 16:00 UTC):\nPositive rate: Longs pay shorts (market is overbought) Negative rate: Shorts pay longs (market is oversold) Long-term holders should factor in accumulated funding costs. You can check the current rate and next settlement time on the Futures page.\nRisk Management for Gold Futures 1. Keep Position Sizes Reasonable Gold typically swings 0.5-2% daily. At 10x leverage, a single day could mean 5-20% account swings. Keep any single gold futures trade under 20% of your account.\n2. Always Use Stop-Loss Gold is relatively stable, but major events (non-farm payroll, Federal Reserve decisions, geopolitical conflicts) can trigger 1-3% moves in minutes. With leverage, liquidation risk is very real.\n3. Watch Macro Events Key factors moving gold:\nUSD strength: Weak USD → Gold rises (inverse correlation) Real rates: Low real rates → Gold more attractive Risk sentiment: Geopolitical risk, stock crashes → Gold rises Central bank buying: Reserves accumulation drives longer-term demand Important monthly data: Non-farm payroll (first Friday of month), CPI (inflation data), Federal Reserve meetings (every 6-8 weeks).\n4. Avoid High-Volatility Hours Around 12:30 UTC (US East Coast market open) is when US economic data releases often occur—gold can spike quickly. New traders should avoid opening positions 30 minutes before and after data releases.\nTrading Fees Trade Type Fee Spot Maker 0.1% (0.07% with BNB discount) Spot Taker 0.1% (0.07% with BNB discount) Futures Maker 0.02% Futures Taker 0.05% Futures fees are much lower than spot, making them better for frequent traders.\nSummary Want long-term gold exposure without liquidation risk: Use spot XAU/USDT Want short-term trades, short selling, or leverage: Use XAUUSDT perpetual futures You can combine both: spot for a long-term base, futures for short-term hedging 👉 Start Trading Gold on Binance (with fee rebate)\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/binance-xau-gold-trading/","summary":"\u003cblockquote\u003e\n\u003cp\u003e💡 \u003cstrong\u003eMainland China Notice\u003c/strong\u003e: Binance\u0026rsquo;s official website isn\u0026rsquo;t directly accessible from mainland China; you\u0026rsquo;ll need to use a VPN. Fiat deposits don\u0026rsquo;t support bank cards directly—you\u0026rsquo;ll need to use C2C channels (USDT ↔ CNY) to complete deposits.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Stack of 100 troy ounce fine gold bars\" loading=\"lazy\" src=\"/images/binance-xau-gold-trading-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eGold is one of the world\u0026rsquo;s most important safe-haven assets. Trading gold used to require opening a futures account or buying gold ETFs, but now through \u003ca href=\"https://aff.panshi.io/track?id=binance\"\u003eBinance\u003c/a\u003e you can trade gold directly with USDT 24/7 with minimal barriers to entry.\u003c/p\u003e","title":"Binance Gold Trading Tutorial: Complete Guide to XAU/USDT Spot and Futures Trading"},{"content":"\nBybit is one of the world\u0026rsquo;s top three cryptocurrency exchanges by trading volume, and its Bybit Card allows users to spend directly from their exchange account balance globally. Compared to other crypto debit cards, Bybit Card\u0026rsquo;s advantage is that funds flow directly within the exchange without withdrawal and recharge steps, making the process more streamlined.\nBybit Card Overview Bybit Card is a crypto debit card co-issued by Bybit and Visa:\nInstant deduction on spending: Real-time deduction from your Bybit account balance when swiping, supporting USDT, USDC, and fiat currency balances Global usability: Works at any Visa-approved merchants, including physical stores, online shopping, and ATMs Virtual card instant activation: Receive your card number immediately after approval for online purchases and mobile payment binding Physical card shipping: Option to request a physical card mailed to your address Cashback rewards: Cardholders in certain regions may receive cashback rewards (see official website for details) Application Requirements Bybit registered account Completed KYC identity verification (passport or ID card) Supported region (mainland China users need a Hong Kong ID or other regional credential, or apply based on your current residence) Account balance (USDT/USDC or fiat currency) Bybit\u0026rsquo;s availability varies by region. We recommend registering with your actual residence location and using a valid ID from that region for KYC.\nStep 1: Register a Bybit Account Use the following link to register and receive trading fee discounts and rebates:\n👉 Bybit Registration (with rebates)\nDirect registration link: https://aff.panshi.io/track?id=bybit\u0026amp;ref=/posts/bybit-ucard-guide/\nRegistration steps:\nEnter email or phone number Set a password Enter invitation code (automatically filled if using the link above) Complete email/SMS verification Step 2: Complete KYC Verification Path: Home → Profile Avatar → Identity Verification\nVerification levels:\nLevel Requirements Limit Lv.1 Basic Verification Name + ID number ~$20,000 daily withdrawals Lv.2 Advanced Verification ID photos + facial recognition ~$100,000 daily withdrawals Applying for Bybit Card requires completing at least Lv.2 Advanced Verification.\nVerification steps:\nSelect document type (passport or ID card) Upload clear photos of both sides of your document (clear, no glare, all four corners visible) Complete facial liveness detection (look straight at camera, slowly turn head left and right) Submit for review Verification typically completes within 30 minutes; during peak times it may take 1-2 business days.\nStep 3: Apply for Bybit Card Path: Home → More → Bybit Card → Apply Now\nOr search \u0026ldquo;Card\u0026rdquo; directly at the top of the app.\nChoose card type:\nType Description Virtual Card Instant activation, for online shopping and binding Apple/Google Pay Physical Card Mailed to your address, better for in-store purchases, 7-21 business days delivery Complete application information:\nConfirm name (must match KYC info) Select linked account (funding account or unified trading account) For physical card, enter shipping address Pay card opening fee (deducted from account balance, pricing per official website) Virtual card approval typically completes within minutes after submission.\nStep 4: Fund Your Bybit Card Bybit Card is directly linked to your Bybit account balance—no separate funding step is needed—as long as you have USDT/USDC in your account, it will be deducted automatically when you swipe.\nIf your account balance is insufficient, deposit from an external source to Bybit:\nDeposit path: Assets → Deposit → Select currency and network\nCommon deposit networks:\nUSDT-TRC20: Lowest fees (~$1 or less) USDT-BEP20: Low fees, BSC network USDT-ERC20: Higher fees, Ethereum network Once the deposit arrives, your account balance is ready for card spending.\nDaily Usage Online Shopping / Virtual Card View your virtual card number, expiration date, and CVV in the app, then enter this information at any Visa-supported checkout page.\nLink to Apple Pay / Google Pay Open your Wallet app → Add card → Enter virtual card details, or directly scan the card QR code in the app.\nIn-Store Purchases (Physical Card) Same as a regular bank card—insert or use NFC payment; the POS terminal displays Visa as supported.\nSpending Exchange Rate Bybit Card converts crypto to local fiat using Visa\u0026rsquo;s network rate during spending, typically close to the market mid-price.\nFee Schedule Fee Item Amount Virtual card opening fee Free or minimal (per official website) Physical card opening fee ~$10-20 (per official website) Monthly management fee None (active accounts) Spending fee ~0-2% (per official fee schedule) ATM withdrawal ~$2-5 + percentage fee Cross-border fee ~1.5% (certain regions) Rates are per Bybit\u0026rsquo;s official website and subject to policy changes.\nSecurity Settings Recommendations Enable two-factor authentication (2FA): Go to Security Center and enable Google Authenticator Enable transaction notifications: Get real-time alerts on every purchase; detect anomalies within 30 seconds Set spending limits: Restrict daily spending ceiling in card settings Freeze/unfreeze function: One-click freeze in the app when not in use to prevent unauthorized charges Bybit Card vs SafePal U Card Comparison Bybit Card SafePal U Card Fund source Direct from Bybit account balance Requires separate card account funding Best for Active Bybit traders Users with assets across multiple platforms Account setup difficulty Medium (requires Bybit KYC) Medium (requires SafePal KYC) Cashback Available in certain regions Available in certain regions Brand Exchange-issued Professional wallet brand Both offer similar features; choose based on where your main assets are held.\nSummary Bybit Card\u0026rsquo;s biggest convenience is direct spending from account assets without extra withdrawal-deposit steps, ideal for active Bybit users. The entire application process is online, and virtual cards are ready to use within minutes after KYC approval.\n👉 Register with Bybit now (with rebates)\n📷 Hero image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/bybit-ucard-guide/","summary":"\u003cp\u003e\u003cimg alt=\"a cell phone sitting on top of a table\" loading=\"lazy\" src=\"/images/bybit-ucard-guide-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=bybit\"\u003eBybit\u003c/a\u003e is one of the world\u0026rsquo;s top three cryptocurrency exchanges by trading volume, and its \u003cstrong\u003eBybit Card\u003c/strong\u003e allows users to spend directly from their exchange account balance globally. Compared to other crypto debit cards, Bybit Card\u0026rsquo;s advantage is that \u003cstrong\u003efunds flow directly within the exchange without withdrawal and recharge steps\u003c/strong\u003e, making the process more streamlined.\u003c/p\u003e\n\u003ch2 id=\"bybit-card-overview\"\u003eBybit Card Overview\u003c/h2\u003e\n\u003cp\u003eBybit Card is a crypto debit card co-issued by Bybit and Visa:\u003c/p\u003e","title":"Bybit Card Application Guide: Complete Process for Cryptocurrency Visa Card"},{"content":" Bybit is one of the world\u0026rsquo;s leading perpetual futures exchanges, with excellent liquidity and tight spreads on XAUUSDT—the go-to platform for many traders looking to trade gold. Compared to traditional futures accounts, Bybit offers simpler registration, faster fund transfers, and a smooth mobile experience.\nThis guide walks you through trading gold futures on Bybit from scratch.\nWhat You Need to Know About Bybit\u0026rsquo;s Gold Contracts Parameter Details Contract Type USDT Perpetual (Dollar-denominated) Minimum Order 0.01 contracts (1 contract = 1 troy ounce of gold) Max Leverage Up to 50x (use with caution) Trading Hours 24/7 (no downtime) Fees Maker 0.01%, Taker 0.06% Funding Rate Settlement Every 8 hours (00:00/08:00/16:00 UTC) Bybit\u0026rsquo;s XAUUSDT Maker fee is 0.01%—lower than Binance\u0026rsquo;s 0.02%—making it friendlier for high-frequency or large-volume traders.\nStep 1: Register on Bybit 👉 Register on Bybit (with fee rebates)\nDirect link: https://aff.panshi.io/track?id=bybit\u0026amp;ref=/posts/bybit-xau-gold-trading/\nRegistration steps:\nEnter your email or phone number Set a password Verify your email Complete KYC (passport or ID + face verification, Level 2) Step 2: Deposit USDT and Transfer to Your Derivatives Account Deposit path: Assets → Deposit → USDT → Select Network\nWe recommend the TRC-20 network—it\u0026rsquo;s fast and costs less than $1 in fees.\nAfter your deposit arrives, transfer it to your Unified Trading Account (UTA) for derivatives trading:\nAssets → Transfer → Funding Account to Unified Trading Account\nBybit uses a \u0026ldquo;Unified Margin Account\u0026rdquo; (UTA), where perpetuals and spot margin share the same collateral—no need to deposit separately for each.\nStep 3: Navigate to the XAUUSDT Contracts Page App path: Trading → Derivatives → Search XAUUSDT\nWeb path: Top menu → Derivatives → USDT Perpetuals → Search XAUUSDT\nKey sections on the page:\nLeft side: Candlestick chart and order book Right side: Order entry panel Bottom: Open positions and order history Step 4: Set Your Leverage Click the leverage multiplier at the top of the order panel (default is usually 10x) to adjust it.\nLeverage recommendations by trading style:\nTrading Style Suggested Leverage Long-term hold (days or more) 1–3x Swing trades (hours to days) 3–5x Day trading 5–10x Scalping/ultra-short-term Case by case; avoid exceeding 20x Gold typically moves 0.5–2% intraday. At 10x leverage, a single trade\u0026rsquo;s max loss can be 5–20%—always use a stop-loss.\nStep 5: Place Your Order Going Long (Betting Gold Will Rise) When you think gold will go up:\nSelect the Buy direction Choose your order type: Limit order: Enter your desired buy price, execute when price reaches it, pay lower fees (Maker rate) Market order: Execute immediately at the best available price, slightly higher fees (Taker rate) Enter your position size in USDT or troy ounces Optional: Set your take-profit and stop-loss prices (highly recommended) Click \u0026ldquo;Buy to Open\u0026rdquo; Going Short (Betting Gold Will Fall) When you think gold will decline:\nSelect the Sell direction; steps are the same Remember: if price rises while you\u0026rsquo;re short, losses scale up the same way Closing Your Position Once you have an open position, find it in the bottom \u0026ldquo;Positions\u0026rdquo; tab:\nClick \u0026ldquo;Close Position\u0026rdquo; to exit manually Or wait for your take-profit or stop-loss to trigger automatically Setting Take-Profit and Stop-Loss We strongly recommend setting both when you open a position. Bybit offers two methods:\nSet While Opening the Position Look for the \u0026ldquo;Take-Profit/Stop-Loss\u0026rdquo; toggle at the bottom of the order panel:\nTake-profit price: Target price; position closes automatically when hit Stop-loss price: Maximum loss price; position closes automatically when hit Add After Opening Go to Positions → Click the \u0026ldquo;TP/SL\u0026rdquo; button on your open position → Enter prices and save.\nExample calculation (Gold at $4,600, long 1 contract, 5x leverage):\nMargin: $4,600 / 5 = $660 Stop-loss at $3,270 (1% drop) = Loss of $30 × 1 = $30 (4.5% of margin) Take-profit at $4,700 (3% gain) = Profit of $100 × 1 = $100 (15.2% of margin) Risk-to-reward ratio = 1:3.3 Funding Rates Perpetual contracts use funding rates to keep contract prices anchored to spot prices:\nPositive rate: Long position holders pay short position holders every 8 hours Negative rate: Short position holders pay long position holders every 8 hours You can see the current \u0026ldquo;Funding Rate\u0026rdquo; and \u0026ldquo;Next Settlement Time\u0026rdquo; on the contract page. For long-term holds, funding costs accumulate—factor this into your position sizing.\nGold perpetuals typically have low funding rates (0.01%–0.05% range), making them better for holding than BTC or ETH contracts.\nCommon Mistakes New Traders Make Mistake 1: Not Using a Stop-Loss Gold seems \u0026ldquo;stable,\u0026rdquo; but leverage changes everything. Non-farm employment data can swing gold $30–50 (about 1–1.5%) in 30 minutes—at 10x leverage, that\u0026rsquo;s a 10–15% loss.\nThe right way: Decide your stop-loss before opening a position, and set it immediately when you trade.\nMistake 2: Overleveraging Your Account Putting 80%+ of your capital into one direction sets you up for disaster when major news hits—you could face liquidation.\nThe right way: Keep each position to 20–30% of your account. Keep the rest as a safety buffer.\nMistake 3: Chasing Gains You see gold has already rallied, so you chase in at the top—and get caught.\nThe right way: Trade your predetermined price levels, not your emotions. Enter when you planned to, not when the move looks \u0026ldquo;hot.\u0026rdquo;\nMistake 4: Ignoring Funding Rates In a bull market, staying long means paying positive funding rates every day—costs can add up to 0.1–0.3% daily, or 3–9% per month.\nThe right way: For long-term holds, consider switching to spot XAU to avoid bleeding money to funding rates.\nKey Drivers of Gold Prices Factor Impact Explanation Strong US Dollar Bearish Dollar and gold move inversely Rising US Real Rates Bearish Higher opportunity cost for holding gold Rising Inflation Expectations Bullish Gold is an inflation hedge Geopolitical Risk Bullish Safe-haven demand rises Central Bank Gold Purchases Bullish Demand support Fed Rate Cuts Bullish Real rates fall Key data releases (Beijing Time, UTC+8):\nNon-farm employment: First Friday of each month, 20:30 CPI inflation: Mid-month, 20:30 Fed interest rate decision: Next morning, 02:00 US Dollar Index (DXY): Real-time impact, monitor continuously Wrapping Up Bybit\u0026rsquo;s XAUUSDT perpetual contract offers low fees, excellent liquidity, and is the platform of choice for gold trading. We recommend beginners start with low leverage (1–3x), always use stops, and gradually build your macro intuition around gold before scaling up.\n👉 Trade Gold Futures on Bybit (with rebates)\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/bybit-xau-gold-trading/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"a pile of gold and silver coins sitting on top of a table\" loading=\"lazy\" src=\"/images/bybit-xau-gold-trading-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=bybit\"\u003eBybit\u003c/a\u003e is one of the world\u0026rsquo;s leading perpetual futures exchanges, with excellent liquidity and tight spreads on XAUUSDT—the go-to platform for many traders looking to trade gold. Compared to traditional futures accounts, Bybit offers simpler registration, faster fund transfers, and a smooth mobile experience.\u003c/p\u003e\n\u003cp\u003eThis guide walks you through trading gold futures on Bybit from scratch.\u003c/p\u003e","title":"Bybit Gold Futures Trading Tutorial: Complete Guide to Opening an Account and Placing Orders on XAUUSDT Perpetual Contracts"},{"content":" ⚠️ Registration Requirements: Pionex doesn\u0026rsquo;t accept mainland Chinese ID cards for KYC. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or similar regions. See Pionex\u0026rsquo;s official guidance on restricted regions.\nGold prices oscillate within ranges over the long term—a characteristic perfectly suited for grid trading strategies. You can automatically buy low and sell high within a price range, accumulating profit from each small price swing. Pionex is the world\u0026rsquo;s largest exchange with built-in grid trading bots, offering 16 free automated trading strategies—no coding required to launch a gold grid bot.\nWhat is Grid Trading Grid trading places buy and sell orders at fixed intervals within a price range, forming a \u0026ldquo;grid\u0026rdquo;:\n$4700 ←── Sell order $4680 ←── Sell order $4660 ←── Bought and waiting to sell (currently holding) $4640 ←── Bought and waiting to sell (currently holding) $4620 ←── Buy order $4600 ←── Buy order Each time price dips, buy orders execute; each time price rises, sell orders execute. Every grid cycle completes a buy-low, sell-high trade, accumulating profit.\nBenefits of grid strategies:\nNo need to predict price direction—as long as the price oscillates within the range, you keep earning Fully automated execution, 24/7 with no downtime, free from emotional bias The more volatile the swings, the more frequently trades execute, the faster profits accumulate Why it\u0026rsquo;s ideal for gold: Gold is influenced by multiple factors—USD strength, interest rates, and risk sentiment. Prices often oscillate for extended periods around macroeconomic turning points, making it an ideal fit for grid strategy profitability conditions.\nSign Up for Pionex 👉 Sign up for Pionex (includes fee rebates)\nOr visit directly: https://aff.panshi.io/track?id=pionex\nRegistration requires just an email or phone number, but you\u0026rsquo;ll need to complete KYC verification (ID/passport + face verification) to trade.\nDeposit USDT to Pionex Path: Assets → Deposit → USDT → Select Network\nTRC-20 network is recommended for the lowest fees. After deposit, your balance appears in the \u0026ldquo;Spot Account\u0026rdquo;.\nCreate an XAU/USDT Grid Bot Accessing Grid Bots App path: Home → Bots → Grid Bots → Spot Grid\nWeb path: Top menu → Trading Bots → Grid Trading\nSelect Trading Pair Search for XAU and select XAU/USDT.\nConfigure Grid Parameters This is the most critical step—the parameters determine your profit potential and risk.\nCore parameters:\nParameter Description How to Set Lower Price Minimum grid price; bot stops if price falls below this Set below a support level you believe won\u0026rsquo;t break Upper Price Maximum grid price; bot stops if price rises above this Set above a recent resistance level Grid Count How many grids within the price range 10–50 grids (more grids = smaller profit per grid, more frequent trades) Allocation How much USDT to allocate to this grid Recommended: no more than 50% of total capital Pionex offers an \u0026ldquo;AI Parameter Recommendation\u0026rdquo; feature—click it and the system automatically suggests a price range and grid count based on historical data. Beginners can use this directly.\nParameter Example Suppose gold is currently at $4,600 and has traded between $3,800 and $4,800 over the past 6 months:\nLower Price: $3,900 (leaving a safety margin) Upper Price: $4,900 Grid Count: 30 grids Allocation: $4,000 USDT Grid Spacing: ($4,900 - $3,900) / 30 = $23.3 Profit Per Grid: $23.3 / $4,600 ≈ 0.71% Expected Annualized Return (assuming 3 trades per day): 0.71% × 3 × 365 ≈ 77% (theoretical; actual return depends on swing frequency) The annualized figure is theoretical—actual returns depend on how much time the price spends within the range and swing frequency. If gold breaks below the lower limit or above the upper limit, the bot stops.\nShould You Enable \u0026ldquo;Bottom Position Building\u0026rdquo;? Pionex grids offer a \u0026ldquo;Bottom Position Building\u0026rdquo; option:\nEnabled: The bot builds a bottom position near the lower price limit and sells when price rebounds Disabled: The bot only buys when price drops to the corresponding grid level We recommend enabling bottom position building—this way you build your position gradually during downswings, lowering your average cost.\nLaunch and Monitoring After setting parameters, click \u0026ldquo;Create Bot\u0026rdquo; and the bot starts running automatically.\nHow to monitor:\nCheck running status on the \u0026ldquo;My Bots\u0026rdquo; page View the \u0026ldquo;Profit\u0026rdquo; field to see accumulated grid gains View \u0026ldquo;Grid Trades\u0026rdquo; to see how many trades have executed When to stop the bot:\nGold enters a one-sided trend (sustained rise or fall)—consider adjusting the price range Price approaches the upper/lower limit—reassess whether you need to widen the range Before major macro events (like Fed decisions), you can pause and restart after volatility settles Pionex Fees Pionex charges 0.05% fees (same for maker and taker), with a flat rate—no platform token holding or special requirements.\nCompared to Binance (0.1%) and Bybit (0.06% taker), Pionex\u0026rsquo;s fees are especially friendly for grid strategies—since grid strategies execute many trades, accumulated fees significantly impact returns.\nRisk Warnings 1. Loss During One-Sided Trends If gold breaks below the lower limit, your bot holds lots of XAU and your account shows losses. Grid strategies underperform \u0026ldquo;do nothing\u0026rdquo; or \u0026ldquo;trend following\u0026rdquo; strategies during trending markets.\nHow to manage it: Leave adequate safety margin when setting the lower limit—don\u0026rsquo;t place it too close to current price.\n2. Missing Upside When Breaking Above Upper Limit If gold breaks above the upper limit, your bot has sold all its XAU and can\u0026rsquo;t participate in further gains.\nHow to manage it: Set the upper limit appropriately wide, or manually hold some spot XAU when you\u0026rsquo;re clearly bullish on gold.\n3. Fee Erosion With too many grid levels, profit per grid becomes too small and can be eaten by fees.\nRecommendation: Profit per grid should be at least 3× the fee rate. With Pionex\u0026rsquo;s 0.05% fee, target profit per grid of at least 0.15%.\nSummary Pionex\u0026rsquo;s gold grid bot is ideal for scenarios where you believe gold will oscillate within a range over the medium term. No need to predict direction—it automatically buys low and sells high. With low fees and simple setup, it\u0026rsquo;s one of the most accessible quantitative trading solutions for investors without coding skills.\nGold\u0026rsquo;s low volatility means grid execution frequency is relatively low, making it better suited for wide ranges, fewer grids, and long-term operation—rather than chasing high-frequency trading with tight dense grids.\n👉 Launch a gold grid bot on Pionex (includes fee rebates)\n📷 Cover image · Generated by Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/pionex-xau-grid-bot/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eRegistration Requirements\u003c/strong\u003e: Pionex doesn\u0026rsquo;t accept mainland Chinese ID cards for KYC. You\u0026rsquo;ll need a valid ID from Taiwan, Singapore, Malaysia, the US, or similar regions. See \u003ca href=\"https://support.pionex.com/hc/en-us/articles/5929910517273\"\u003ePionex\u0026rsquo;s official guidance on restricted regions\u003c/a\u003e.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Gold bars arranged in a pattern\" loading=\"lazy\" src=\"/images/pionex-xau-grid-bot-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eGold prices oscillate within ranges over the long term—a characteristic perfectly suited for grid trading strategies. You can automatically buy low and sell high within a price range, accumulating profit from each small price swing. \u003ca href=\"https://aff.panshi.io/track?id=pionex\"\u003ePionex\u003c/a\u003e is the world\u0026rsquo;s largest exchange with built-in grid trading bots, offering 16 free automated trading strategies—no coding required to launch a gold grid bot.\u003c/p\u003e","title":"Pionex Gold Grid Bot Tutorial: XAU/USDT Automated Low-Buy-High-Sell Strategy"},{"content":" You hold crypto assets, but everyday spending means withdrawing, waiting for deposits, then swiping a card—it\u0026rsquo;s friction-heavy for regular users. SafePal U Card turns your crypto account balance directly into a spendable Visa card. At purchase, it converts USDT/USDC to local fiat in real-time and charges it, skipping the separate withdrawal step.\nWhat is SafePal U Card SafePal U Card is a crypto debit card by SafePal in partnership with Visa that supports:\nGlobal Spending: Accepted everywhere Visa is accepted (physical stores, online shopping, ATM withdrawals) Real-Time Conversion: At purchase, USDT/USDC converts to fiat at current rates—no pre-exchange needed Virtual + Physical: Virtual card is usable for online shopping immediately after application; physical card ships to your address Multi-Chain Top-Ups: Supports Ethereum, BSC, Tron, Solana, and other major networks Compared to exchange withdrawals, U Card\u0026rsquo;s advantage is spend-as-you-go, no bank processing delays—perfect for high-frequency daily spending.\nBefore You Apply SafePal account (supports mainland China phone numbers) Completed KYC identity verification (passport or ID card; usually a few minutes to 24 hours to review) USDT or USDC in your account (usable after deposit) Card issuance fee: virtual card is free or a small fee; physical card shipping ~$10–20 (check SafePal\u0026rsquo;s site for current rates) Create a SafePal Account Step One: Visit the registration page\nSign up with the link below for referral benefits:\n👉 SafePal Sign-Up (with referral bonus)\nDirect registration link: https://aff.panshi.io/track?id=safepal\u0026amp;ref=/posts/safepal-ucard-guide/\nStep Two: Fill in registration info\nEnter your phone number or email Set a password (16+ characters recommended, with letters + numbers + symbols) Complete the CAPTCHA Step Three: Verify phone/email\nEnter the verification code you receive, and your account is created.\nComplete KYC Verification U Card is a financial product and requires KYC verification to apply.\nNavigation: Home → Profile → Identity Verification\nRequired documents:\nVerification Level Required Documents Limit Basic Passport or ID (front and back) ~$1000 daily spending Advanced Basic + face recognition ~$5000 daily spending Steps:\nSelect document type (mainland China residents select \u0026ldquo;Identity Card\u0026rdquo;) Photograph the front and back of your ID (good lighting, all corners visible) Perform face recognition (look straight at the camera, turn your head slowly) Submit and wait for review Review usually takes under 10 minutes; peak hours may take up to 24 hours. You\u0026rsquo;ll receive an email when approved.\nApply for U Card Once KYC passes, go to the U Card application page.\nNavigation: App Home → Card → Apply Now\nChoose Card Type Type Description Best For Virtual Card Instant card number after application; no physical card Online shopping, subscriptions Physical Card Ships to your address; use in physical stores globally Daily in-person spending We recommend starting with a virtual card to confirm your use case, then apply for the physical card later if needed.\nFill in application details Confirm your name (must match KYC; cannot be changed) Select the primary currency for the card (USDT or USDC) Enter your shipping address (for physical card) Pay the card issuance fee (deducted from your account balance) After submission, virtual cards usually generate in minutes; physical cards ship in 7–21 business days.\nTop Up Your U Card After approval, deposit crypto to your card account.\nTop-up path: Card → Top Up → Select network and asset\nSupported deposit methods:\nUSDT (TRC-20, ERC-20, BEP-20, SOL) USDC (ERC-20, BEP-20, SOL) TRC-20 (Tron) has the lowest fees, usually under $1—recommended.\nTop-up steps:\nSelect the asset and network Copy the deposit address (generate fresh each time; don\u0026rsquo;t reuse) Send USDT/USDC on the corresponding network from an exchange or wallet Wait for blockchain confirmation (TRC-20: ~1–3 minutes; ERC-20: ~5–15 minutes) Your balance updates in real-time once the deposit arrives, and you can spend immediately.\nDaily Use Online Shopping / Apple Pay Your virtual card\u0026rsquo;s number, expiration date, and CVV are visible in the app—fill them into any Visa-enabled checkout. You can also add it to Apple Pay / Google Pay for NFC payments.\nIn-Person Spending (Physical Card) Works exactly like a regular bank card—swipe, insert, or use NFC at a POS terminal. Your purchase shows in local fiat, deducted from your USDT/USDC balance in real-time.\nATM Withdrawals Supported at Visa ATMs worldwide. Fees vary by ATM location (typically $2–5 per withdrawal), plus a percentage fee.\nFee Breakdown Fee Amount Card issuance (virtual) Free or small fee (check SafePal\u0026rsquo;s site) Card issuance (physical) ~$15–20 (includes shipping) Monthly fee None (active accounts) Transaction fee ~1–2% ATM withdrawal ~$2–5 + 1–2% Top-up fee Network gas (not SafePal\u0026rsquo;s responsibility) Exact fees per SafePal\u0026rsquo;s current terms; rates may change.\nSecurity Tips Don\u0026rsquo;t keep all your assets on the card account: Only deposit what you\u0026rsquo;ll spend soon; keep the rest in cold storage Enable spending alerts: Get real-time notifications for every transaction to spot anomalies instantly Set spending limits: In settings, cap your daily and per-transaction maximum Protect app access: Enable biometric login; don\u0026rsquo;t log in on public devices Summary SafePal U Card solves the problem of crypto that\u0026rsquo;s \u0026ldquo;stuck\u0026rdquo;—it\u0026rsquo;s for anyone with regular spending needs who wants to cut out withdrawal steps. The entire process is online, KYC approval is fast, and deposits are spendable right away.\n👉 Sign Up for SafePal Now (with referral bonus)\n📷 Cover image · Generated by Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/safepal-ucard-guide/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A Visa XP black credit card displayed on a dark background, \" loading=\"lazy\" src=\"/images/safepal-ucard-guide-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eYou hold crypto assets, but everyday spending means withdrawing, waiting for deposits, then swiping a card—it\u0026rsquo;s friction-heavy for regular users. \u003ca href=\"https://aff.panshi.io/track?id=safepal\"\u003eSafePal\u003c/a\u003e U Card turns your crypto account balance directly into a spendable Visa card. At purchase, it converts USDT/USDC to local fiat in real-time and charges it, skipping the separate withdrawal step.\u003c/p\u003e\n\u003ch2 id=\"what-is-safepal-u-card\"\u003eWhat is SafePal U Card\u003c/h2\u003e\n\u003cp\u003eSafePal U Card is a crypto debit card by SafePal in partnership with Visa that supports:\u003c/p\u003e","title":"SafePal U Card Application Tutorial: A Complete Guide to Direct Spending of Crypto Assets with Card"},{"content":"\nAI services like Claude, ChatGPT, and Perplexity are highly sensitive to outbound IP quality. If you route through a standard datacenter VPS proxy, you\u0026rsquo;ll often hit:\nLogin verification codes Identity re-verification requests Restricted features (Claude Projects, ChatGPT Plus capabilities, etc.) Silent request throttling The reason: these services\u0026rsquo; fraud detection identifies IP origins. Datacenter IPs carry the known \u0026ldquo;proxy traffic\u0026rdquo; fingerprint; residential IPs don\u0026rsquo;t.\nThe solution: route AI traffic through residential proxies while keeping regular traffic on VPS nodes.\nArchitecture Overview Your machine ├─ AI service requests (api.anthropic.com / api.openai.com / ...) │ └─ Surge → Residential proxy (SOCKS5/HTTP, home ISP exit) └─ Other traffic └─ Surge → VPS node (REALITY / Hysteria2) Residential proxies can be:\nHome router + public IP (optimal, completely authentic residential IP) Commercial residential proxy service (IPRoyal, BrightData, etc., pay-per-use) This guide uses the first approach (router forwarding); the second works identically—just swap the proxy address.\nSurge Configuration 1. Add Residential Proxy Node In the [Proxy] section of your Surge config:\n[Proxy] # VPS node (REALITY) Reality-HK = vless, your-vps-ip, 443, username=your-uuid, tls=true, tls13=true, sni=www.apple.com, vless-flow=xtls-rprx-vision, reality-public-key=your-pubkey, reality-short-id=your-shortid, client-fingerprint=chrome # Residential proxy (SOCKS5, pointing to home router\u0026#39;s forwarding port) Residential-Home = socks5, your-home-public-ip, proxy-port If the residential proxy requires authentication:\nResidential-Home = socks5, your-home-public-ip, proxy-port, username=username, password=password 2. Create Proxy Groups [Proxy Group] # AI-only group: uses residential IP AI-Proxy = select, Residential-Home, Reality-HK, DIRECT # Regular proxy group: uses VPS Global-Proxy = select, Reality-HK, Residential-Home, DIRECT # Auto speed selection (non-AI traffic) Auto-Best = url-test, Reality-HK, url=http://www.gstatic.com/generate_204, interval=300 3. Routing Rules [Rule] # Claude DOMAIN-SUFFIX,anthropic.com,AI-Proxy DOMAIN-SUFFIX,claude.ai,AI-Proxy # OpenAI / ChatGPT DOMAIN-SUFFIX,openai.com,AI-Proxy DOMAIN-SUFFIX,oaistatic.com,AI-Proxy DOMAIN-SUFFIX,oaiusercontent.com,AI-Proxy DOMAIN-KEYWORD,openai,AI-Proxy # Perplexity DOMAIN-SUFFIX,perplexity.ai,AI-Proxy # Google Gemini / AI Studio DOMAIN-SUFFIX,generativelanguage.googleapis.com,AI-Proxy DOMAIN-SUFFIX,aistudio.google.com,AI-Proxy # Copilot DOMAIN-SUFFIX,copilot.microsoft.com,AI-Proxy DOMAIN-SUFFIX,github.com,AI-Proxy DOMAIN-SUFFIX,githubcopilot.com,AI-Proxy # Other international traffic GEOIP,CN,DIRECT FINAL,Global-Proxy 4. Rule Order Explanation Surge matches rules top-to-bottom; the first match wins. AI domains go first to ensure they hit the residential proxy and don\u0026rsquo;t accidentally fall through to Global-Proxy.\nmihomo (Clash Meta) Version mihomo follows the same logic with different config syntax:\nproxies: - name: \u0026#34;Reality-HK\u0026#34; type: vless server: your-vps-ip port: 443 uuid: your-uuid network: tcp tls: true flow: xtls-rprx-vision reality-opts: public-key: your-pubkey short-id: your-shortid servername: www.apple.com client-fingerprint: chrome - name: \u0026#34;Residential-Home\u0026#34; type: socks5 server: your-home-public-ip port: proxy-port # username: username # password: password udp: false # Home SOCKS5 typically doesn\u0026#39;t support UDP proxy-groups: - name: \u0026#34;AI-Only\u0026#34; type: select proxies: - Residential-Home - Reality-HK - name: \u0026#34;Global\u0026#34; type: select proxies: - Reality-HK - Residential-Home - DIRECT rules: - DOMAIN-SUFFIX,anthropic.com,AI-Only - DOMAIN-SUFFIX,claude.ai,AI-Only - DOMAIN-SUFFIX,openai.com,AI-Only - DOMAIN-SUFFIX,oaistatic.com,AI-Only - DOMAIN-SUFFIX,oaiusercontent.com,AI-Only - DOMAIN-SUFFIX,perplexity.ai,AI-Only - DOMAIN-SUFFIX,generativelanguage.googleapis.com,AI-Only - DOMAIN-SUFFIX,github.com,AI-Only - DOMAIN-SUFFIX,githubcopilot.com,AI-Only - GEOIP,CN,DIRECT - MATCH,Global Opening the Residential Proxy Port on Your Home Router If you\u0026rsquo;re running OpenWrt with passwall / SSR Plus, you can expose a SOCKS5 port on the router:\npasswall (OpenWrt):\nMain Menu → Access Control → Local Ports → Add a SOCKS5 listener (e.g., port 1080) and select direct exit (bypass proxy, use home ISP directly).\nThen open this port in the router\u0026rsquo;s firewall to allow external access (or use frp/Cloudflare Tunnel for internal network tunneling if you don\u0026rsquo;t want direct public exposure).\nSecurity notes:\nExposing SOCKS5 directly to the internet carries risk; add password authentication Or access internal SOCKS5 through a WireGuard VPN tunnel instead of opening it publicly Verify It\u0026rsquo;s Working After configuration, test your residential IP exit:\n# Check IP via residential proxy curl --socks5 your-home-public-ip:proxy-port https://api.ipify.org Should return your home ISP\u0026rsquo;s IP address, not your VPS IP.\nIn Surge/mihomo, switch to the AI-Proxy group and visit whatismyip.com to confirm the IP type shows as Residential.\nResults With residential IPs in place, you\u0026rsquo;ll see:\nClaude (claude.ai) no longer triggers repeated verification ChatGPT Plus features no longer hit IP-based fraud checks API call stability improves (especially under high-frequency use) → See mihomo residential IP setup guide → See Xray REALITY server configuration\n📷 Cover photo · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/surge-split-rules-ai-traffic/","summary":"\u003cp\u003e\u003cimg alt=\"A stunning aerial view of illuminated highways and a cable-s\" loading=\"lazy\" src=\"/images/surge-split-rules-ai-traffic-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eAI services like Claude, ChatGPT, and Perplexity are highly sensitive to outbound IP quality. If you route through a standard datacenter VPS proxy, you\u0026rsquo;ll often hit:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLogin verification codes\u003c/li\u003e\n\u003cli\u003eIdentity re-verification requests\u003c/li\u003e\n\u003cli\u003eRestricted features (Claude Projects, ChatGPT Plus capabilities, etc.)\u003c/li\u003e\n\u003cli\u003eSilent request throttling\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe reason: these services\u0026rsquo; fraud detection identifies IP origins. Datacenter IPs carry the known \u0026ldquo;proxy traffic\u0026rdquo; fingerprint; residential IPs don\u0026rsquo;t.\u003c/p\u003e","title":"Advanced Surge Routing Rules: Route AI Traffic through Residential IPs, Other Traffic through VPS Nodes"},{"content":" 💡 China users: Binance\u0026rsquo;s official site can\u0026rsquo;t be accessed directly from mainland China—you\u0026rsquo;ll need your own networking tools. Fiat deposits don\u0026rsquo;t support bank cards; the main method is C2C (USDT↔CNY) channels.\nThe Binance API is your gateway to quantitative trading. If you want your strategy to execute automatically—auto buy, auto stop-loss, auto position monitoring—you need the API.\nThis article covers everything from scratch: requesting an API Key, configuring security, setting up Python, and making your first query and test order. No prior quant experience needed—just follow along.\nPrerequisites Completed Binance account KYC verification Python 3.8+ (python --version to confirm) Two-factor authentication (2FA) enabled; Google Authenticator recommended Binance registration: → Sign up (earn fee rebates via referral link)\nApplying for an API Key Steps Log into Binance, click your avatar (top right) → API Management Click \u0026ldquo;Create API\u0026rdquo; Select \u0026ldquo;System Generated (Recommended)\u0026rdquo; Enter an API label (name), click Next Complete 2FA verification Save your API Key and Secret Key Important: Your Secret Key appears only once. After you close the page, it cannot be viewed again. Save it immediately to a password manager.\nPermission Configuration After creating your API, configure permissions in API Management:\nPermission Enable? Notes Read ✓ (default) Query account info, Kline data Spot Trading As needed Place spot orders Futures Trading As needed Place futures orders Withdraw Absolutely not Quantitative strategies don\u0026rsquo;t need this; enabling it is a security risk IP Whitelist (highly recommended): Bind your server IP in API settings—only that IP can use this API Key. Even if the key leaks, other IPs can\u0026rsquo;t use it.\nSecurity Principles Use a separate API Key for each strategy; don\u0026rsquo;t share keys across multiple strategies Use different keys for your quant server and personal computer Rotate keys regularly (every 3–6 months) Never commit keys to GitHub or share them with anyone Setting Up Python Environment Install the official SDK:\npip install python-binance First API Call: Checking Account Balance from binance.client import Client # Load API Key from environment variables, never hardcode import os api_key = os.environ[\u0026#34;BINANCE_API_KEY\u0026#34;] api_secret = os.environ[\u0026#34;BINANCE_API_SECRET\u0026#34;] client = Client(api_key, api_secret) # Query account info account = client.get_account() # Display non-zero balances print(\u0026#34;Current balance:\u0026#34;) for asset in account[\u0026#34;balances\u0026#34;]: free = float(asset[\u0026#34;free\u0026#34;]) locked = float(asset[\u0026#34;locked\u0026#34;]) if free \u0026gt; 0 or locked \u0026gt; 0: print(f\u0026#34; {asset[\u0026#39;asset\u0026#39;]}: Available {free}, Locked {locked}\u0026#34;) If you see your balances after running this, your API is configured correctly.\nQuerying Market Data # Query current BTC/USDT price ticker = client.get_symbol_ticker(symbol=\u0026#34;BTCUSDT\u0026#34;) print(f\u0026#34;BTC current price: {ticker[\u0026#39;price\u0026#39;]}\u0026#34;) # Query 24h market stats stats = client.get_ticker(symbol=\u0026#34;BTCUSDT\u0026#34;) print(f\u0026#34;24h high: {stats[\u0026#39;highPrice\u0026#39;]}\u0026#34;) print(f\u0026#34;24h low: {stats[\u0026#39;lowPrice\u0026#39;]}\u0026#34;) print(f\u0026#34;24h volume: {stats[\u0026#39;volume\u0026#39;]} BTC\u0026#34;) # Query Kline data (last 10 hourly candles) klines = client.get_klines( symbol=\u0026#34;BTCUSDT\u0026#34;, interval=Client.KLINE_INTERVAL_1HOUR, limit=10 ) for k in klines: timestamp = k[0] open_price = float(k[1]) close_price = float(k[4]) volume = float(k[5]) print(f\u0026#34;Open: {open_price:.2f}, Close: {close_price:.2f}, Volume: {volume:.2f}\u0026#34;) Placing Orders on Testnet Strongly recommended: practice on testnet first without spending real money.\nGet a testnet API Key:\nGo to testnet.binance.vision Log in with your GitHub account Create a testnet API Key from binance.client import Client # Testnet API Key client = Client( api_key=\u0026#34;your_testnet_API_KEY\u0026#34;, api_secret=\u0026#34;your_testnet_SECRET\u0026#34;, testnet=True # Critical: points to testnet ) # Place a limit buy order (BTC/USDT, buy 0.001 BTC at 20000 USDT) order = client.create_order( symbol=\u0026#34;BTCUSDT\u0026#34;, side=Client.SIDE_BUY, type=Client.ORDER_TYPE_LIMIT, timeInForce=Client.TIME_IN_FORCE_GTC, quantity=0.001, price=\u0026#34;20000\u0026#34; ) print(f\u0026#34;Order ID: {order[\u0026#39;orderId\u0026#39;]}\u0026#34;) print(f\u0026#34;Status: {order[\u0026#39;status\u0026#39;]}\u0026#34;) # Query order status status = client.get_order( symbol=\u0026#34;BTCUSDT\u0026#34;, orderId=order[\u0026#39;orderId\u0026#39;] ) print(f\u0026#34;Current status: {status[\u0026#39;status\u0026#39;]}\u0026#34;) # Cancel order client.cancel_order( symbol=\u0026#34;BTCUSDT\u0026#34;, orderId=order[\u0026#39;orderId\u0026#39;] ) print(\u0026#34;Order canceled\u0026#34;) WebSocket Real-Time Data Stream REST API is for placing orders and queries; WebSocket is more efficient for real-time data:\nfrom binance import ThreadedWebsocketManager def handle_ticker(msg): \u0026#34;\u0026#34;\u0026#34;Handle real-time price updates\u0026#34;\u0026#34;\u0026#34; if msg[\u0026#39;e\u0026#39;] == \u0026#39;error\u0026#39;: print(f\u0026#34;Error: {msg[\u0026#39;m\u0026#39;]}\u0026#34;) return price = float(msg[\u0026#39;c\u0026#39;]) # Latest trade price volume = float(msg[\u0026#39;v\u0026#39;]) # 24h volume print(f\u0026#34;BTC price: {price:.2f}, 24h volume: {volume:.2f}\u0026#34;) # Start WebSocket manager twm = ThreadedWebsocketManager(api_key=api_key, api_secret=api_secret) twm.start() # Subscribe to BTC/USDT real-time ticker twm.start_symbol_ticker_socket(callback=handle_ticker, symbol=\u0026#34;BTCUSDT\u0026#34;) # Stop after 30 seconds import time time.sleep(30) twm.stop() Rate Limits Binance API enforces rate limits; exceeding them triggers temporary bans:\nType Limit Request Weight 1200 weight/minute Order Rate 10 orders/second, 100,000 orders/24h WebSocket Connections Max 1024 Weight for common endpoints:\nGET /api/v3/ticker/price: 2 weight GET /api/v3/klines: 2 weight POST /api/v3/order (place order): 1 weight Querying the latest price every 5 seconds = 12 times/minute × 2 weight = 24 weight—well below the limit.\nFor real-time data, always use WebSocket instead of polling REST endpoints.\nNext Steps Once you\u0026rsquo;ve got the basics working:\nLearn the Kline data structure and start building your first strategy logic Study position sizing: how much to allocate per order Set up Prometheus monitoring for strategy health → See Binance Fee Reduction Tips → See Binance API Security Configuration → See Quant Tech Stack: Strategy to Monitoring\n📷 Cover image · Generated by Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/binance-api-from-zero/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e💡 \u003cstrong\u003eChina users\u003c/strong\u003e: Binance\u0026rsquo;s official site can\u0026rsquo;t be accessed directly from mainland China—you\u0026rsquo;ll need your own networking tools. Fiat deposits don\u0026rsquo;t support bank cards; the main method is C2C (USDT↔CNY) channels.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"An unlocked padlock rests on a computer keyboard.\" loading=\"lazy\" src=\"/images/binance-api-from-zero-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eThe Binance API is your gateway to quantitative trading. If you want your strategy to execute automatically—auto buy, auto stop-loss, auto position monitoring—you need the API.\u003c/p\u003e","title":"Binance API from Zero to First Trade: Complete Tutorial"},{"content":" 💡 Domestic note: Binance\u0026rsquo;s official site isn\u0026rsquo;t directly accessible from mainland China—you\u0026rsquo;ll need a VPN or similar network tool. Fiat deposits don\u0026rsquo;t support bank cards directly; most funding happens through C2C (USDT↔CNY) channels instead.\nIn futures trading, the difference between a profitable strategy and a losing one often isn\u0026rsquo;t about whether your signals are right—it\u0026rsquo;s about whether you\u0026rsquo;re actually implementing risk management.\nA solid entry signal paired with poor risk control will give back every penny of gains in a single big swing. This article covers the framework for futures risk management: which layers you need to control, and how to set each one up properly.\nThree Levels of Risk Control Level 1: Position Sizing — how much to open each trade Level 2: Stop-Loss Setup — maximum loss per individual trade Level 3: Circuit Breaker — forced pause after consecutive losses You need all three. Position sizing controls per-trade risk exposure, stop-loss controls your maximum loss on any single trade, and the circuit breaker prevents continuous bleeding when your strategy breaks.\nLevel 1: Position Sizing Fixed Ratio Method (Recommended) Position size each time = Account total equity × Fixed percentage\ndef calc_position_size(equity: float, risk_pct: float, leverage: int, entry_price: float) -\u0026gt; float: \u0026#34;\u0026#34;\u0026#34; equity: account total equity (USDT) risk_pct: per-trade risk ratio, e.g., 0.02 = 2% leverage: leverage multiplier entry_price: entry price returns: contract quantity (BTCUSDT each = 0.001 BTC) \u0026#34;\u0026#34;\u0026#34; risk_amount = equity * risk_pct # actual amount willing to lose notional = risk_amount * leverage # corresponding notional value qty = notional / entry_price return qty Why fixed ratio instead of fixed amount?\nFixed amounts (e.g., 1000 USDT each time) become riskier as your account shrinks and safer as it grows—backwards. Fixed ratio auto-adjusts with your account size, keeping risk proportional.\nReasonable risk percentages by stage:\nStrategy Phase Recommended Ratio Testing (validating strategy) 0.5% - 1% Stable operation 1% - 2% High-confidence strategy 2% - 3% Not recommended above 5% At 5%+ per trade, five consecutive losses means 25%+ drawdown—emotionally brutal and hard for a strategy to recover from.\nKelly Criterion (Advanced) If you have enough historical data, the Kelly Criterion calculates the theoretically optimal position size:\ndef kelly_fraction(win_rate: float, avg_win: float, avg_loss: float) -\u0026gt; float: \u0026#34;\u0026#34;\u0026#34; win_rate: historical win rate, e.g., 0.55 avg_win: average win (as ratio), e.g., 0.015 = 1.5% avg_loss: average loss (as ratio, positive), e.g., 0.01 = 1% \u0026#34;\u0026#34;\u0026#34; b = avg_win / avg_loss # win-to-loss ratio p = win_rate q = 1 - p kelly = (b * p - q) / b # use half-Kelly in practice to reduce volatility return max(0, kelly * 0.5) The Kelly Criterion gives the position size that theoretically maximizes compounded growth. In practice, use \u0026ldquo;half Kelly\u0026rdquo;—it controls drawdown while still preserving solid growth.\nLevel 2: Stop-Loss Setup There are two main approaches to stops:\nPrice-Based Stop-Loss Set your stop-loss price at entry; close when price hits it.\ndef set_stop_loss(symbol: str, side: str, entry_price: float, stop_pct: float, client) -\u0026gt; dict: \u0026#34;\u0026#34;\u0026#34; stop_pct: stop-loss distance, e.g., 0.02 = 2% from entry \u0026#34;\u0026#34;\u0026#34; if side == \u0026#34;BUY\u0026#34;: stop_price = entry_price * (1 - stop_pct) sl_side = \u0026#34;SELL\u0026#34; else: stop_price = entry_price * (1 + stop_pct) sl_side = \u0026#34;BUY\u0026#34; # place STOP_MARKET order (close at market when trigger is hit) order = client.futures_create_order( symbol=symbol, side=sl_side, type=\u0026#34;STOP_MARKET\u0026#34;, stopPrice=round(stop_price, 2), closePosition=True, # close entire position timeInForce=\u0026#34;GTE_GTC\u0026#34; ) return order How to set stop-loss distance:\nCommon approaches:\nATR-based (Average True Range): stop-loss = 1–2x ATR, adapts to current volatility Support/resistance levels: place at technically meaningful spots Fixed percentage: simple and direct, easy to calculate Recommend ATR because volatility varies wildly across market conditions. A fixed percentage is too loose in calm markets and too tight in volatile ones.\ndef calc_atr(highs, lows, closes, period=14): \u0026#34;\u0026#34;\u0026#34;calculate ATR\u0026#34;\u0026#34;\u0026#34; true_ranges = [] for i in range(1, len(closes)): tr = max( highs[i] - lows[i], abs(highs[i] - closes[i-1]), abs(lows[i] - closes[i-1]) ) true_ranges.append(tr) return sum(true_ranges[-period:]) / period Trailing Stop-Loss Adjust your stop with price movement, locking in floating gains:\ndef set_trailing_stop(symbol: str, callback_rate: float, client) -\u0026gt; dict: \u0026#34;\u0026#34;\u0026#34; callback_rate: callback percentage, e.g., 1.5 = 1.5% triggers when price pulls back 1.5% from its peak \u0026#34;\u0026#34;\u0026#34; order = client.futures_create_order( symbol=symbol, side=\u0026#34;SELL\u0026#34;, type=\u0026#34;TRAILING_STOP_MARKET\u0026#34;, callbackRate=callback_rate, quantity=your_position_quantity, reduceOnly=True ) return order Trailing stops suit trending markets; regular stops suit ranging markets.\nLevel 3: Circuit Breaker Mechanism A circuit breaker forces a pause when your strategy hits consecutive losses, preventing account death-by-a-thousand-cuts.\nclass CircuitBreaker: def __init__(self, max_daily_loss_pct: float = 0.05, # max daily loss 5% max_drawdown_pct: float = 0.15, # max drawdown 15% max_consecutive_losses: int = 5): # max consecutive losses self.max_daily_loss_pct = max_daily_loss_pct self.max_drawdown_pct = max_drawdown_pct self.max_consecutive_losses = max_consecutive_losses self.consecutive_losses = 0 self.peak_equity = None self.day_start_equity = None def update(self, current_equity: float) -\u0026gt; bool: \u0026#34;\u0026#34;\u0026#34; update state; returns True for normal, False for breaker triggered \u0026#34;\u0026#34;\u0026#34; if self.peak_equity is None: self.peak_equity = current_equity if self.day_start_equity is None: self.day_start_equity = current_equity # update peak if current_equity \u0026gt; self.peak_equity: self.peak_equity = current_equity # check max drawdown drawdown = (self.peak_equity - current_equity) / self.peak_equity if drawdown \u0026gt;= self.max_drawdown_pct: self._trigger(\u0026#34;max drawdown triggered\u0026#34;, drawdown) return False # check daily loss daily_loss = (self.day_start_equity - current_equity) / self.day_start_equity if daily_loss \u0026gt;= self.max_daily_loss_pct: self._trigger(\u0026#34;daily loss triggered\u0026#34;, daily_loss) return False # check consecutive losses if self.consecutive_losses \u0026gt;= self.max_consecutive_losses: self._trigger(f\u0026#34;{self.consecutive_losses} consecutive losses\u0026#34;) return False return True def record_trade(self, pnl: float): \u0026#34;\u0026#34;\u0026#34;record a trade result\u0026#34;\u0026#34;\u0026#34; if pnl \u0026lt; 0: self.consecutive_losses += 1 else: self.consecutive_losses = 0 # reset on profit def _trigger(self, reason: str, value: float = 0): print(f\u0026#34;[circuit breaker] {reason}: {value:.2%}\u0026#34;) # add Telegram alert here Usage:\ncb = CircuitBreaker( max_daily_loss_pct=0.05, max_drawdown_pct=0.15, max_consecutive_losses=5 ) # check before each strategy run while True: equity = get_account_equity() if not cb.update(equity): send_telegram(\u0026#34;strategy breaker triggered, pausing trades\u0026#34;) break # execute strategy logic signal = strategy.check_signal() if signal: pnl = execute_trade(signal) cb.record_trade(pnl) Complete Risk Management Integration Example class RiskManager: def __init__(self, client, equity: float): self.client = client self.equity = equity self.circuit_breaker = CircuitBreaker() def open_position(self, symbol: str, side: str, entry_price: float, risk_pct: float = 0.01, leverage: int = 5): \u0026#34;\u0026#34;\u0026#34;open position with risk control\u0026#34;\u0026#34;\u0026#34; # 1. check circuit breaker if not self.circuit_breaker.update(self.equity): print(\u0026#34;breaker triggered, rejecting position\u0026#34;) return None # 2. calculate position size qty = calc_position_size(self.equity, risk_pct, leverage, entry_price) # 3. open position order = self.client.futures_create_order( symbol=symbol, side=side, type=\u0026#34;MARKET\u0026#34;, quantity=qty ) # 4. set stop-loss synchronously (based on ATR) atr = self.get_atr(symbol) stop_dist_pct = (atr * 1.5) / entry_price set_stop_loss(symbol, side, entry_price, stop_dist_pct, self.client) return order Common Risk Control Mistakes No stop-loss: Most fatal, no debate needed.\nStop too tight: 0.3x ATR means frequent triggers and a falsely inflated win rate.\nStop too loose: 5x ATR means single losses exceed expectation and wreck your risk ratio.\nFixed position size: After losses, you\u0026rsquo;re not reducing size—losses compound.\nManually overriding the breaker: \u0026ldquo;Just this once\u0026rdquo;—everyone thinks that every time. A breaker you manually disable is no breaker at all.\nRisk management isn\u0026rsquo;t a leash on returns—it\u0026rsquo;s the infrastructure that keeps your strategy alive long enough to run. Build it right, stay in the game long enough, and let any edge you have compound its expected gains over time.\n→ See Binance API from signup to first trade → See Quant toolkit: Binance API + Grafana + automated alerts → See Polaris strategy intro\n📷 Cover image · Flux Schnell AI generated · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/binance-futures-risk-management/","summary":"\u003cblockquote\u003e\n\u003cp\u003e💡 \u003cstrong\u003eDomestic note\u003c/strong\u003e: Binance\u0026rsquo;s official site isn\u0026rsquo;t directly accessible from mainland China—you\u0026rsquo;ll need a VPN or similar network tool. Fiat deposits don\u0026rsquo;t support bank cards directly; most funding happens through C2C (USDT↔CNY) channels instead.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Trader analyzing stock market data on smartphone and phone\" loading=\"lazy\" src=\"/images/binance-futures-risk-management-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eIn futures trading, the difference between a profitable strategy and a losing one often isn\u0026rsquo;t about whether your signals are right—it\u0026rsquo;s about \u003cstrong\u003ewhether you\u0026rsquo;re actually implementing risk management\u003c/strong\u003e.\u003c/p\u003e","title":"Binance futures trading risk management system: position sizing, stop-loss setup, circuit breaker mechanism"},{"content":" OpenAI released Codex CLI in early 2025—a tool that lets you write code, edit files, and run commands directly in your terminal using AI. Unlike ChatGPT on the web, Codex CLI\u0026rsquo;s core strength is directly manipulating your local filesystem, so AI actually gets work done instead of just handing you snippets to paste.\nThis guide covers the complete setup from installation to your first task, taking about 10 minutes.\nPrerequisites You\u0026rsquo;ll need two things:\nNode.js 18+ (verify with node --version) OpenAI API Key (get it from platform.openai.com) Your API key must have a linked payment method; free credits don\u0026rsquo;t support the models Codex uses.\nInstallation npm install -g @openai/codex Verify it worked:\ncodex --version Authentication Setup There are two ways to configure your API key:\nMethod 1: Environment Variable (Recommended)\nexport OPENAI_API_KEY=\u0026#34;sk-xxxx...\u0026#34; Add it to ~/.zshrc or ~/.bashrc to persist it:\necho \u0026#39;export OPENAI_API_KEY=\u0026#34;sk-xxxx...\u0026#34;\u0026#39; \u0026gt;\u0026gt; ~/.zshrc source ~/.zshrc Method 2: Runtime Input\nJust run codex and it\u0026rsquo;ll prompt you for your API key on first launch. It saves to ~/.codex/config.json.\nThree Operating Modes Codex CLI is built around progressive autonomy—you choose how much you trust it with, based on your comfort level:\nMode Command Behavior suggest (default) codex AI gives suggestions, requires your approval for each step auto codex --approval-mode auto-edit Auto-edits files, but asks for confirmation on shell commands full-auto codex --approval-mode full-auto Fully automatic, no confirmation needed for files or commands Beginners should start with suggest mode to get a feel for what it can and can\u0026rsquo;t do.\nYour First Run Start it up:\ncodex Once in the interactive interface, describe your task in natural language.\nExample 1: Understanding a Complex Function \u0026gt; Help me understand the main.py in the current directory Codex will read the file and explain the key logic.\nExample 2: Modifying Code \u0026gt; Update the parse_date function in utils.py to support a timezone parameter, defaulting to UTC It\u0026rsquo;ll:\nRead utils.py Locate the parse_date function Present the modification plan and wait for your approval Write the changes to the file once you confirm Example 3: Executing System Tasks \u0026gt; Find Python files modified in the last 7 days in the current directory and list them It generates the find command, executes it after your confirmation, and shows you the results.\nSandbox Mode In full-auto mode, Codex executes commands in macOS\u0026rsquo;s sandbox environment (uses Docker on Linux) to prevent accidental operations from affecting other parts of your system.\nCheck sandbox status:\ncodex --help | grep sandbox If you don\u0026rsquo;t need the sandbox (for example, you\u0026rsquo;re already in a Docker container), you can skip it with --no-sandbox.\nSpecifying the Model Codex uses codex-mini-latest by default, but you can switch to more powerful models:\ncodex --model o4-mini Or o3 (more capable but pricier):\ncodex --model o3 For everyday code tasks, codex-mini-latest is fast, cheap, and sufficient. Only upgrade to o4-mini or above for complex refactoring or architectural design.\nConfiguration Files Codex supports a project-level configuration file, AGENTS.md (place it in your project root), to give AI additional context:\n# AGENTS.md This project is a Python algorithmic trading strategy using the Binance API. ## Code Standards - Function names use snake_case - All logging uses structlog - All database operations go through db/repository.py ## Important Notes - Don\u0026#39;t modify config/secrets.py - Backtesting logic is in the backtest/ directory With this file in place, Codex will follow these rules when working on this project without you having to repeat yourself every time.\nCost Estimation Codex CLI charges based on OpenAI API tokens, not a flat monthly fee.\nIn practice, a complete small task (reading + modifying + explaining a file) typically uses:\ncodex-mini-latest: $0.002–0.01 o4-mini: $0.02–0.1 Daily usage runs about $5–20 a month, more flexible than a subscription.\nCodex CLI vs Claude Code I\u0026rsquo;ve used both for a while now, and here\u0026rsquo;s how they differ:\nAspect Codex CLI Claude Code Underlying Model o3 / codex-mini (OpenAI) Claude Sonnet / Opus (Anthropic) Code Ability Strong, o3 handles refactoring well Strong, excellent long-context understanding Tool Integration Focused on code and terminal Supports MCP/Skill extensions Pricing Pay-as-you-go (API) Fixed monthly (Claude Pro) Context Window o3: 200k Claude Opus 4.6: 200k Neither is objectively better—it depends on which account you already have and what type of work you\u0026rsquo;re mainly doing. I use Codex CLI for Python refactoring, Claude Code for ops automation and multi-tool orchestration.\nGetting Started: Writing a Trading Monitor Script with Codex CLI If you\u0026rsquo;re new to CLI AI tools, an easy entry point that delivers immediate value is writing a monitoring script for your trading account. For example:\nMonitor Pionex bots and send Telegram alerts when they hit range edges Monitor Binance perpetual accounts and get warnings before liquidation Analyze historical logs to find patterns You can write it in 30 minutes and it delivers real value in production. If you haven\u0026rsquo;t touched crypto quant yet, Pionex is the lowest-barrier entry point.\nIf you run into any installation issues, drop a comment below.\n📷 Cover · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/codex-cli-complete-guide/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Diagram of natural language to code conversion process.\" loading=\"lazy\" src=\"/images/codex-cli-complete-guide-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eOpenAI released Codex CLI in early 2025—a tool that lets you write code, edit files, and run commands directly in your terminal using AI. Unlike ChatGPT on the web, Codex CLI\u0026rsquo;s core strength is \u003cstrong\u003edirectly manipulating your local filesystem\u003c/strong\u003e, so AI actually gets work done instead of just handing you snippets to paste.\u003c/p\u003e\n\u003cp\u003eThis guide covers the complete setup from installation to your first task, taking about 10 minutes.\u003c/p\u003e","title":"Complete Tutorial on OpenAI Codex CLI: Installation, Authentication, and First Code Operations"},{"content":" Google One AI Premium is Google\u0026rsquo;s bundled AI subscription at $19.99/month. It packages three main offerings:\nGemini Advanced: Google\u0026rsquo;s most powerful AI model (Gemini 1.5 Pro/Ultra tier), with unlimited usage 2TB Google Cloud Storage: Covers Google Drive, Gmail, and Google Photos NotebookLM Plus: Google\u0026rsquo;s AI note-taking and knowledge base tool, Plus version with no usage limits If you already need high-capacity Google cloud storage, the AI features are essentially a free add-on.\nWhat Gemini Advanced Can Do Behind Gemini Advanced is Google DeepMind\u0026rsquo;s flagship model, with these key highlights:\nLong context handling: Context window up to 1 million tokens—you can theoretically process an entire book or codebase in a single conversation.\nMultimodal: Images, PDFs, and videos (YouTube links) can be fed directly alongside text for analysis.\nGoogle Workspace integration: You can draft emails in Gmail with Gemini, get writing assistance in Google Docs, and analyze data in Google Sheets—all without leaving your workflow.\nReal-world use cases Processing PDFs and research reports: Upload a PDF directly, have it summarize, answer questions, or extract key data. Much faster than reading it yourself.\nGoogle Workspace workflows: If you\u0026rsquo;re a heavy user of Google products (Docs, Sheets, Gmail), Gemini\u0026rsquo;s integration is far smoother than copying and pasting between an external AI tool and Google.\nLong document conversations: Upload an entire technical document or contract and ask specific questions. It pinpoints exactly what you need.\nNotebookLM Plus NotebookLM is Google\u0026rsquo;s AI knowledge base tool. The idea: upload materials (PDFs, Google Docs, YouTube links, text), then ask questions about them. The AI only pulls answers from your uploaded content—it won\u0026rsquo;t make things up.\nFree vs. Plus versions main differences:\nFeature Free Plus Sources per Notebook 50 300 Daily queries Limited Unlimited Audio Overview ✓ ✓ Team sharing Limited Unlimited Audio Overview is NotebookLM\u0026rsquo;s standout feature: it generates an AI podcast-style audio summary of your materials, with two AI voices discussing key points in conversation form. Great to listen to while driving or doing chores.\nWhen NotebookLM makes sense Researching a technical topic: upload 10 papers, ask for a synthesis of viewpoints and key differences Learning from a technical book: upload the PDF, do knowledge Q\u0026amp;A Competitive analysis: upload docs from multiple companies, ask for comparisons 2TB Cloud Storage The 2TB covers Google Drive, Gmail attachments, and Google Photos. It\u0026rsquo;s plenty for everyday Google Workspace users.\nIf your Gmail or Drive is running full, this subscription solves the storage problem too—solid value.\nReferral: Free credits for both you and your friend Google One has a referral program: when someone subscribes via your referral link, both you and your friend get several months free (Google adjusts the exact number periodically, typically 1-3 months).\nSubscribe through my referral link:\n→ Referral link (free credits for both)\nSteps to subscribe:\nClick the link above Sign in with your Google account Choose the Google One AI Premium plan (monthly or annual) Complete payment. Free credits arrive within 2-3 days Note: You must subscribe via the referral link. Going directly to Google One\u0026rsquo;s website doesn\u0026rsquo;t count as a referral.\nGoogle One AI Premium vs. Claude Pro These are two different products for different workflows:\nComparison Google One AI Premium Claude Pro Monthly fee $19.99 $20 Core AI Gemini Advanced Claude Opus 4.6 Ecosystem fit Google Workspace Claude Code CLI Context window 1M tokens 200k tokens Code ability Good Excellent Reasoning Strong Strong Pick Google One AI Premium if you:\nHeavily use Google Workspace (Gmail, Docs, Sheets) — the value is clear Need long PDF handling and knowledge research — NotebookLM\u0026rsquo;s PDF Q\u0026amp;A is genuinely excellent Pick Claude Pro if you:\nPrimarily write code and handle technical tasks — Claude\u0026rsquo;s the better fit If you want both: subscribe to both, use referral links to save a few months.\nMy personal approach: Claude Pro is my daily driver. I use Google One AI Premium for processing long PDFs and knowledge base research—NotebookLM\u0026rsquo;s PDF Q\u0026amp;A workflow is really solid.\n→ See detailed Claude Pro comparison\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/google-one-ai-premium-guide/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"a computer screen with a cloud shaped object on top of it\" loading=\"lazy\" src=\"/images/google-one-ai-premium-guide-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eGoogle One AI Premium is Google\u0026rsquo;s bundled AI subscription at $19.99/month. It packages three main offerings:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003eGemini Advanced\u003c/strong\u003e: Google\u0026rsquo;s most powerful AI model (Gemini 1.5 Pro/Ultra tier), with unlimited usage\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e2TB Google Cloud Storage\u003c/strong\u003e: Covers Google Drive, Gmail, and Google Photos\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNotebookLM Plus\u003c/strong\u003e: Google\u0026rsquo;s AI note-taking and knowledge base tool, Plus version with no usage limits\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eIf you already need high-capacity Google cloud storage, the AI features are essentially a free add-on.\u003c/p\u003e","title":"Google One AI Premium Getting Started Guide: Gemini Advanced + 2TB Cloud Storage + NotebookLM Plus"},{"content":"\nHysteria2 is based on the QUIC protocol (UDP), and is theoretically much faster than TCP-based protocols in high-latency, high-packet-loss networks. However, many people find speeds are mediocre after deployment—usually because bandwidth parameters aren\u0026rsquo;t configured correctly or the right congestion control algorithm isn\u0026rsquo;t selected.\nThis article focuses on tuning. It assumes you\u0026rsquo;ve already got the basic deployment working (see Hysteria2 Setup Guide) and now want to maximize your speeds.\nBandwidth Parameters: The Configuration That Impacts Speed Most Hysteria2\u0026rsquo;s bandwidth parameters control its sending rate. Misconfiguration or omission is the most common reason for poor speeds.\nServer-side bandwidth In /etc/hysteria/config.yaml:\nbandwidth: up: 1 gbps # Server upstream (client download direction) down: 1 gbps # Server downstream (client upload direction) This is the actual bandwidth ceiling of the VPS, not your home internet speed.\nCommon VPS bandwidths:\nDMIT HK/US Premium: 1 Gbps port, but shared—actual peak 200-500 Mbps AWS t3 instances: 5-25 Gbps (burst) Budget VPS: typically 100-500 Mbps How to test your VPS\u0026rsquo;s actual bandwidth:\n# On the VPS, install speedtest curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | bash apt install speedtest-cli -y speedtest Fill in the bandwidth value based on the speedtest results.\nClient-side bandwidth In your mihomo config:\nproxies: - name: \u0026#34;hy2-node\u0026#34; type: hysteria2 server: Your_VPS_IP port: 443 password: Your_Password bandwidth: up: \u0026#34;50 mbps\u0026#34; # Your home broadband upload down: \u0026#34;200 mbps\u0026#34; # Your home broadband download This is the actual bandwidth of your local device. Check speedtest.net or your ISP\u0026rsquo;s speed test, then use 80% of the measured result (leave some headroom).\nConsequences of Bandwidth Mismatch Problem Cause Speeds capped at 10-20 Mbps Client bandwidth not configured, using default (tiny value) Speeds fluctuate wildly Client bandwidth set higher than actual, congestion control triggering frequently Fast downloads, slow uploads up/down reversed Congestion Control Algorithm: BBR vs Brutal Hysteria2 supports two congestion control modes:\nBBR (default): Google\u0026rsquo;s TCP congestion control algorithm, ported to QUIC. It dynamically adjusts the sending rate based on network conditions—conservative but stable.\nBrutal: Hysteria2\u0026rsquo;s own algorithm—ignores congestion signals and forcefully sends at the configured target bandwidth, like \u0026ldquo;reckless mode.\u0026rdquo; Works great on networks with severe packet loss, but consumes more bandwidth resources.\nWhen to Use Brutal Network packet loss exceeds 5% Your VPS route goes through international backbone networks with high latency You want stable speed (e.g., steady 50 Mbps), and don\u0026rsquo;t mind occasional packet loss Brutal Configuration On the server side in config.yaml:\nquic: initStreamReceiveWindow: 26843545 maxStreamReceiveWindow: 26843545 initConnReceiveWindow: 67108864 maxConnReceiveWindow: 67108864 maxIdleTimeout: 30s keepAlivePeriod: 10s disablePathMTUDiscovery: false bandwidth: up: 1 gbps down: 1 gbps On the client side (mihomo), enable Brutal mode:\nproxies: - name: \u0026#34;hy2-brutal\u0026#34; type: hysteria2 server: Your_VPS_IP port: 443 password: Your_Password brutal-opts: enabled: true up: 50 # Mbps, target upload speed down: 200 # Mbps, target download speed Once Brutal is enabled, the client will forcefully send at the target speed regardless of network quality.\nReal-World Comparison I tested from home internet in Guangzhou with a DMIT Hong Kong VPS (latency ~25ms, light packet loss):\nConfiguration Download Speed Upload Speed Stability BBR, no bandwidth config ~15 Mbps ~8 Mbps Stable BBR, correct bandwidth config ~80 Mbps ~40 Mbps Stable Brutal, target 100M ~95 Mbps ~45 Mbps Some jitter Conclusion: BBR + correctly configured bandwidth is usually good enough. Brutal is for specific scenarios (high packet loss, or when you need stable speed guarantees).\nQUIC Window Size Tuning QUIC\u0026rsquo;s receive window size affects maximum concurrent throughput. Default values can be a bottleneck in high-bandwidth environments.\nRecommended configuration (high-speed environments, 100 Mbps+):\nquic: initStreamReceiveWindow: 26843545 # 25.6 MB maxStreamReceiveWindow: 26843545 initConnReceiveWindow: 67108864 # 64 MB maxConnReceiveWindow: 67108864 These are empirical values suitable for 100-500 Mbps scenarios. If your bandwidth is higher, you can increase further (recommendation: don\u0026rsquo;t exceed 10% of total RAM).\nMTU Tuning UDP/QUIC packet size affects efficiency. Default MTU isn\u0026rsquo;t necessarily optimal for VPN scenarios.\nCheck your current network interface MTU:\nip link show eth0 # MTU is usually 1500 Hysteria2\u0026rsquo;s QUIC packets on a 1500 MTU network have actual payload of ~1200-1350 bytes (subtracting header overhead).\nFor most scenarios, no manual MTU adjustment is needed. Only try lowering MTU if you notice abnormally low speeds on certain enterprise networks or ISPs where you see heavy fragmentation:\n# Client mihomo proxies: - name: \u0026#34;hy2-node\u0026#34; type: hysteria2 # ... other config ... # Some clients support MTU setting mtu: 1200 Port Selection Hysteria2 uses UDP, and port choice affects blocking risk:\nPort Type Example Blocking Risk 443 HTTPS (masquerade) Low, but UDP 443 is uncommon 80 HTTP (masquerade) Medium Random high port (e.g., 44563) No masquerade High (easy to scan) Best practice: Use 443 or 853 (DNS over QUIC), masquerade as a legitimate protocol.\n# Server side listen: :443 # Masquerade as HTTPS masquerade: type: proxy proxy: url: https://www.bing.com rewriteHost: true With masquerade configured, regular HTTPS requests (non-Hysteria2 clients) to this port return normal content from bing.com.\nMulti-Node Load Balancing If you have multiple VPS instances, you can configure mihomo\u0026rsquo;s load-balance groups to use multiple Hysteria2 nodes simultaneously:\nproxy-groups: - name: \u0026#34;HY2 Balance\u0026#34; type: load-balance strategy: round-robin # Round-robin, evenly distribute traffic proxies: - hy2-us - hy2-hk - hy2-jp url: \u0026#34;http://www.gstatic.com/generate_204\u0026#34; interval: 300 Or use fallback mode (switch to backup if primary fails):\n- name: \u0026#34;HY2 Fallback\u0026#34; type: fallback proxies: - hy2-us # Primary - hy2-hk # Backup url: \u0026#34;http://www.gstatic.com/generate_204\u0026#34; interval: 120 Comparison with REALITY Whether to choose Hysteria2 or REALITY depends on your network environment:\nScenario Recommendation Latency-sensitive (\u0026lt;30ms), stable connection REALITY (low latency, no extra overhead) High packet loss, unstable connection Hysteria2 (QUIC retransmission is efficient) Mobile networks (4G/5G) Hysteria2 (QUIC is more mobile-friendly) Need to bypass UDP blocking REALITY (pure TCP) → See Hysteria2 Setup Guide → See Xray REALITY Server Configuration → See VPS Selection Guide\n📷 Cover Image · Generated with Flux Schnell AI · Panshi Brand Style\n","permalink":"https://blog.panshi.io/en/posts/hysteria2-performance-tuning/","summary":"\u003cp\u003e\u003cimg alt=\"Abstract streaks of purple and green light\" loading=\"lazy\" src=\"/images/hysteria2-performance-tuning-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eHysteria2 is based on the QUIC protocol (UDP), and is theoretically much faster than TCP-based protocols in high-latency, high-packet-loss networks. However, many people find speeds are mediocre after deployment—usually because \u003cstrong\u003ebandwidth parameters aren\u0026rsquo;t configured correctly\u003c/strong\u003e or \u003cstrong\u003ethe right congestion control algorithm isn\u0026rsquo;t selected\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eThis article focuses on tuning. It assumes you\u0026rsquo;ve already got the basic deployment working (see \u003ca href=\"/en/posts/hysteria2-setup/\"\u003eHysteria2 Setup Guide\u003c/a\u003e) and now want to maximize your speeds.\u003c/p\u003e","title":"Hysteria2 Performance Tuning: Bandwidth Configuration, Congestion Control, and Multiplexing in Practice"},{"content":" GitHub Copilot (especially when used through the Claude Code + Copilot channel) has monthly request limits. OpenClaw supports multiple concurrent agents, making it easy to burn through your quota without realizing it.\nThis article rounds up 8 practical tips to help you manage your usage more effectively and reduce waste.\n1. Track Your Current Copilot Usage Method One: GitHub Settings Page\nVisit the GitHub Copilot usage page directly to check your current month\u0026rsquo;s consumption (Premium Request count). Different models consume at different rates:\nModel Cost Multiplier GPT-4o 1x Claude Sonnet 1x Claude Opus 10x o1 10x o3 Higher Method Two: Command Line Lookup (via API)\n# Get current Copilot plan information curl -H \u0026#34;Authorization: token your-github-token\u0026#34; \\ https://api.github.com/user/copilot_billing/seats Method Three: Planned Usage Estimation\nGeneral patterns:\nOne complete code generation conversation: 1-3 requests One file refactoring task (with multiple rounds of edits): 5-15 requests OpenClaw multi-agent concurrent task: calculated independently per agent 2. Configure OpenClaw Agent Count Appropriately OpenClaw can spawn multiple subagents to run concurrently by default, but more isn\u0026rsquo;t always better.\nRecommended configuration:\n# OpenClaw configuration agents: max_concurrent: 2 # Concurrency limit, 2 is usually plenty think_budget: low # Use low think budget for non-complex tasks When to spawn multiple agents:\nTasks can clearly be parallelized (e.g., modifying two unrelated modules A and B simultaneously) Tasks are long-running and independent of each other When to use a single agent:\nTasks have dependencies (do A first, then B) Exploratory tasks (need intermediate feedback to adjust direction) Documentation writing, code review (one agent is enough) 3. Task Granularity Design: Avoid \u0026ldquo;Large Tasks = High Consumption\u0026rdquo; A common quota-wasting pattern: dump a big task on an agent all at once; the agent tries multiple approaches, re-reads files repeatedly, consuming massive numbers of requests.\nMore quota-efficient approach:\nScout with a cheap model first: Use Claude Haiku or GPT-4o mini to understand the codebase structure, then deploy Sonnet/Opus for critical steps Provide context upfront: Tell the agent the key file paths, function names, expected output directly—reduce how much it has to explore on its own Staged acceptance: Break big tasks into smaller ones, confirm each step before continuing Example:\n❌ Inefficient: \u0026#34;Refactor the entire project into a microservices architecture\u0026#34; ✓ Efficient: \u0026#34;Only modify src/api/users.py; extract database operations into a UserRepository class. Follow the pattern in src/api/orders.py\u0026#39;s OrderRepository. Don\u0026#39;t touch other files.\u0026#34; 4. Switch Channels Within Claude Code Claude Code can run via the Copilot channel or directly via Anthropic API. Switch flexibly based on your current quota status:\nWhen Copilot quota is plentiful:\n# Use Copilot channel (consumes GitHub Copilot Premium Requests) export ANTHROPIC_BASE_URL=https://api.githubcopilot.com/anthropic export ANTHROPIC_API_KEY=your-github-token claude When Copilot quota is running low:\n# Switch back to Anthropic official API (charges to Anthropic account) unset ANTHROPIC_BASE_URL export ANTHROPIC_API_KEY=your-anthropic-api-key claude You can configure a shell alias for quick switching:\n# ~/.zshrc alias claude-copilot=\u0026#39;ANTHROPIC_BASE_URL=https://api.githubcopilot.com/anthropic ANTHROPIC_API_KEY=your-github-token claude\u0026#39; alias claude-direct=\u0026#39;ANTHROPIC_BASE_URL=\u0026#34;\u0026#34; ANTHROPIC_API_KEY=your-anthropic-key claude\u0026#39; → See Claude Code Dual-Channel Configuration Guide for detailed switching strategies\n5. Use Haiku for Preprocessing to Save High-End Model Quota For tasks that need to read many files (like codebase exploration, batch analysis), preprocess with a cheaper model first, then hand the refined information to Sonnet/Opus.\n# Use haiku to first summarize codebase structure claude --model claude-haiku-4-5 \u0026#34;List the main functionality of each module in src/. Describe each file\u0026#39;s role in one sentence.\u0026#34; # Then use sonnet for specific implementation claude --model claude-sonnet-4-6 \u0026#34;Based on the codebase structure below, modify the JWT validation logic in src/api/auth.py...\u0026#34; 6. Write Good CLAUDE.md to Reduce Repetitive Explanations Every Claude Code session reads CLAUDE.md (if it exists). Invest once in writing it clearly, and you\u0026rsquo;ll save \u0026ldquo;explanation time\u0026rdquo; on every future session:\n# CLAUDE.md ## Project Background This is a quantitative trading system with these main modules: - `strategy/` — strategy logic, do not modify - `execution/` — order execution, Binance API wrapper - `monitoring/` — monitoring and alerting ## Development Standards - All new code must have unit tests - Don\u0026#39;t modify files in config/ directory - Pass API keys via environment variables, never hardcode them ## Common Commands - Run tests: pytest tests/ -v - Start strategy: python main.py --strategy polaris 7. OpenClaw Task Log Analysis OpenClaw\u0026rsquo;s logs help you understand what agents did and which steps consumed the most resources:\n# View recent OpenClaw task logs cat ~/.openclaw/logs/latest.jsonl | python3 -c \u0026#34; import sys, json for line in sys.stdin: d = json.loads(line) if d.get(\u0026#39;type\u0026#39;) == \u0026#39;tool_use\u0026#39;: print(f\\\u0026#34;{d[\u0026#39;tool\u0026#39;]}: {str(d.get(\u0026#39;input\u0026#39;, \u0026#39;\u0026#39;))[:60]}\\\u0026#34;) \u0026#34; Common high-consumption patterns:\nread_file looping on the same file repeatedly (agent double-checking) bash running tests, failing, then looping endlessly on fixes search_files with broad keywords returning tons of results Once you spot these patterns, specify the file paths directly in your task prompt to prevent the agent from exploring on its own.\n8. Month-End Quota Crunch Strategy When your Copilot Premium Request quota is running out near month\u0026rsquo;s end:\nSwitch to direct Anthropic API: Use pay-as-you-go, or get an Anthropic Max subscription Use only low-multiplier models: Sonnet (1x) instead of Opus (10x)—Sonnet is plenty for most tasks Supplement with local models: Use Ollama for simple code completion and Q\u0026amp;A (Qwen2.5-Coder works well) Reduce exploratory usage: Near month\u0026rsquo;s end, stick to clear, focused changes only. Skip open-ended questions like \u0026ldquo;what optimization opportunities exist in this codebase?\u0026rdquo; Smart quota management is really about \u0026ldquo;using the right tool for the job\u0026rdquo;—clear tasks, precise context, smart model selection gets you further than blindly running large models, and usually with better results too.\n→ See OpenClaw Advanced: Multi-Agent Workflows → See Claude Code Dual-Channel Switching\n📷 Cover image · Generated with Flux Schnell AI · Panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/openclaw-copilot-usage-tips/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A laptop computer sitting on top of a wooden desk\" loading=\"lazy\" src=\"/images/openclaw-copilot-usage-tips-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eGitHub Copilot (especially when used through the Claude Code + Copilot channel) has monthly request limits. OpenClaw supports multiple concurrent agents, making it easy to burn through your quota without realizing it.\u003c/p\u003e\n\u003cp\u003eThis article rounds up 8 practical tips to help you manage your usage more effectively and reduce waste.\u003c/p\u003e\n\u003ch2 id=\"1-track-your-current-copilot-usage\"\u003e1. Track Your Current Copilot Usage\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eMethod One: GitHub Settings Page\u003c/strong\u003e\u003c/p\u003e","title":"OpenClaw + GitHub Copilot usage management and efficiency optimization: 8 practical tips"},{"content":" This is the follow-up to the OpenClaw Getting Started Guide, assuming you\u0026rsquo;ve already installed OpenClaw and gotten basic Telegram interactions working. This covers the advanced techniques you\u0026rsquo;ll want once you\u0026rsquo;re actually using it in production.\nMulti-Agent Task Division OpenClaw lets you configure multiple Agents in the same Telegram group, each handling a different domain. This is probably the most underrated feature.\nWhy split Agents Without splitting, your AI assistant is a generalist—good at everything but specialized in nothing. Ask it about infrastructure and it won\u0026rsquo;t know your server setup. Ask about quant strategies and it\u0026rsquo;ll miss your position logic.\nWith multiple Agents, each gets:\nSystem prompt: Injected domain knowledge for that specific role Skill set: Only the relevant tools mounted Isolated conversation history: Won\u0026rsquo;t get cluttered by other tasks Configuration example Define multiple Agents in ~/.openclaw/config.yml:\nagents: - name: \u0026#34;ops\u0026#34; description: \u0026#34;Server infrastructure assistant\u0026#34; skills: - healthcheck - ssh-tools system_prompt: | You\u0026#39;re the infrastructure engineer managing our servers. You know Nginx, Docker, and system monitoring inside out. When a task requires executing commands, explain first, then act. - name: \u0026#34;quant\u0026#34; description: \u0026#34;Quant strategy monitoring\u0026#34; skills: - binance-watcher - grafana-query system_prompt: | You monitor algorithmic trading strategies. You understand trend-following logic, can read position signals and returns data. Never expose specific strategy parameters. - name: \u0026#34;writer\u0026#34; description: \u0026#34;Writing assistant\u0026#34; skills: - obsidian system_prompt: | You help with writing: brainstorming, drafting, and organizing notes. Style: direct, opinionated, no filler. Switch to an Agent in Telegram with /agent ops, and all subsequent messages use that Agent\u0026rsquo;s config.\nTelegram Advanced Interaction Command shortcuts OpenClaw\u0026rsquo;s Telegram Bot supports custom commands defined in config.yml:\ncommands: - command: \u0026#34;/status\u0026#34; description: \u0026#34;Quick system check\u0026#34; action: \u0026#34;ops:Quickly check key metrics across all servers\u0026#34; - command: \u0026#34;/pnl\u0026#34; description: \u0026#34;Today\u0026#39;s P\u0026amp;L\u0026#34; action: \u0026#34;quant:Tell me today\u0026#39;s returns and current position direction\u0026#34; - command: \u0026#34;/draft\u0026#34; description: \u0026#34;Draft article\u0026#34; action: \u0026#34;writer:Based on my recent notes, list topics I could write about today\u0026#34; Once configured, just tap the command menu in Telegram—no typing required.\nSend files and images directly to Agents Telegram lets you send files to the Bot:\nSend .txt / .md files → OpenClaw reads and analyzes content Send screenshots → OCR or image understanding (if the model supports multimodal) Send .csv → Perform data analysis My workflow: snap a photo of the architecture diagram on the whiteboard, send it to the ops Agent, ask \u0026ldquo;what\u0026rsquo;s wrong with this design?\u0026rdquo;\nScheduled tasks OpenClaw supports cron syntax for scheduled pushes:\nschedules: - cron: \u0026#34;0 9 * * 1-5\u0026#34; # Mon–Fri at 9 AM action: \u0026#34;quant:Daily strategy status: position direction, yesterday\u0026#39;s returns\u0026#34; - cron: \u0026#34;0 */4 * * *\u0026#34; # Every 4 hours action: \u0026#34;ops:Check if critical services are healthy; alert immediately if not\u0026#34; It\u0026rsquo;ll proactively push updates without you asking.\nQuant Strategy Monitoring Workflow My OpenClaw quant workflow has three tiers:\nTier one: Passive monitoring (auto-push) schedules: # Daily summary - cron: \u0026#34;0 8 * * *\u0026#34; action: \u0026#34;quant:Daily returns report: position direction / yesterday\u0026#39;s P\u0026amp;L / cumulative returns / last signal time\u0026#34; # Check for new signals every 15 min - cron: \u0026#34;*/15 * * * *\u0026#34; action: \u0026#34;quant:Check KV for the latest signal timestamp; warn if it\u0026#39;s more than 2 hours stale\u0026#34; Tier two: On-demand queries Ask anytime in Telegram:\n\u0026ldquo;What\u0026rsquo;s the current position direction?\u0026rdquo; \u0026ldquo;Last 7 days of returns data\u0026rdquo; \u0026ldquo;How\u0026rsquo;s it performing vs. BTC in the same period?\u0026rdquo; The Agent pulls data from CF KV or Prometheus APIs and answers directly.\nTier three: Anomaly alerts Set up condition-triggered alerts:\nmonitors: - name: \u0026#34;strategy-heartbeat\u0026#34; check: \u0026#34;quant:Check when the strategy script last ran\u0026#34; condition: \u0026#34;last_run \u0026gt; 2h\u0026#34; alert: \u0026#34;⚠️ Strategy script hasn\u0026#39;t run in 2+ hours—check it out\u0026#34; interval: 30m Custom binance-watcher Skill If the official Binance Skill doesn\u0026rsquo;t exist, building one is straightforward:\n# skills/binance-watcher/main.py import requests def get_balance(symbol=\u0026#34;USDT\u0026#34;): \u0026#34;\u0026#34;\u0026#34;Check account balance\u0026#34;\u0026#34;\u0026#34; # Read from env, never hardcode api_key = os.environ[\u0026#34;BINANCE_API_KEY\u0026#34;] # ... call Binance API return {\u0026#34;balance\u0026#34;: balance, \u0026#34;symbol\u0026#34;: symbol} def get_position(): \u0026#34;\u0026#34;\u0026#34;Check current position\u0026#34;\u0026#34;\u0026#34; # ... return {\u0026#34;side\u0026#34;: \u0026#34;LONG\u0026#34;, \u0026#34;size\u0026#34;: size, \u0026#34;entry_price\u0026#34;: price} A Skill is just a set of functions the AI can call. Write them and register in config.yml.\nCustom Skills: From Scratch Skill structure A minimal Skill needs three files:\nskills/my-skill/ ├── skill.yml # Skill definition (name, description, tools) ├── main.py # Tool implementation └── README.md # Documentation Example skill.yml:\nname: my-grafana description: Query Grafana data tools: - name: query_metric description: Query Prometheus metric parameters: - name: query type: string description: PromQL query string - name: range type: string description: Time range, e.g., 1h, 24h Example main.py:\nimport requests import os GRAFANA_URL = os.environ.get(\u0026#34;GRAFANA_URL\u0026#34;, \u0026#34;http://localhost:3000\u0026#34;) GRAFANA_TOKEN = os.environ[\u0026#34;GRAFANA_TOKEN\u0026#34;] def query_metric(query: str, range: str = \u0026#34;1h\u0026#34;): \u0026#34;\u0026#34;\u0026#34;Query Prometheus metric and return readable results\u0026#34;\u0026#34;\u0026#34; resp = requests.get( f\u0026#34;{GRAFANA_URL}/api/datasources/proxy/1/api/v1/query_range\u0026#34;, params={\u0026#34;query\u0026#34;: query, \u0026#34;start\u0026#34;: f\u0026#34;now-{range}\u0026#34;, \u0026#34;end\u0026#34;: \u0026#34;now\u0026#34;, \u0026#34;step\u0026#34;: \u0026#34;60\u0026#34;}, headers={\u0026#34;Authorization\u0026#34;: f\u0026#34;Bearer {GRAFANA_TOKEN}\u0026#34;} ) data = resp.json() # Extract latest value results = {} for series in data[\u0026#34;data\u0026#34;][\u0026#34;result\u0026#34;]: label = series[\u0026#34;metric\u0026#34;].get(\u0026#34;id\u0026#34;, \u0026#34;unknown\u0026#34;) latest_value = series[\u0026#34;values\u0026#34;][-1][1] if series[\u0026#34;values\u0026#34;] else \u0026#34;N/A\u0026#34; results[label] = latest_value return results Install custom Skills openclaw skill install ./skills/my-grafana Restart OpenClaw and the new Skill is live.\nUse skill-creator meta-Skill OpenClaw includes a meta-Skill called skill-creator that generates other Skills for you.\nInstall it:\nopenclaw skill install skill-creator Then tell it what you want:\nI need a Skill that queries the aff.panshi.io/stats endpoint and returns today\u0026rsquo;s click counts for each AFF project as a formatted table\nIt generates skill.yml and main.py ready to copy in.\nCost Control Every Agent response costs tokens. A few ways to stay lean:\nTrigger on-demand, skip polling: Call the model only when users ask or cron fires. Don\u0026rsquo;t put real-time monitoring in the AI (use Prometheus + Alertmanager instead—more accurate and cheaper).\nTier your models: Use cheap Haiku for simple status checks, reserve Sonnet/Opus for complex analysis.\nagents: - name: \u0026#34;ops-basic\u0026#34; model: \u0026#34;claude-haiku-4-5\u0026#34; # Cheap, routine checks - name: \u0026#34;ops-deep\u0026#34; model: \u0026#34;claude-sonnet-4-6\u0026#34; # Expensive, deep analysis Limit conversation history:\nagents: - name: \u0026#34;ops\u0026#34; max_history_turns: 10 # Keep only the last 10 turns → See OpenClaw Getting Started Guide → See OpenClaw Quant Workflow\n📷 Hero image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/openclaw-advanced/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Child and robot interacting with projected bubbles\" loading=\"lazy\" src=\"/images/openclaw-advanced-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eThis is the follow-up to the \u003ca href=\"/en/posts/openclaw-intro-and-setup/\"\u003eOpenClaw Getting Started Guide\u003c/a\u003e, assuming you\u0026rsquo;ve already installed OpenClaw and gotten basic Telegram interactions working. This covers the advanced techniques you\u0026rsquo;ll want once you\u0026rsquo;re actually using it in production.\u003c/p\u003e\n\u003ch2 id=\"multi-agent-task-division\"\u003eMulti-Agent Task Division\u003c/h2\u003e\n\u003cp\u003eOpenClaw lets you configure multiple Agents in the same Telegram group, each handling a different domain. This is probably the most underrated feature.\u003c/p\u003e","title":"OpenClaw Advanced: Multi-Agent Collaboration, Quantitative Workflow, Custom Skill"},{"content":" Over the past year, I\u0026rsquo;ve run into a recurring problem with AI tools: airport shared node IPs get flagged by AI platforms, triggering verification requests, feature restrictions, or even account bans. The root cause is simple—these IPs have been used by too many people, and the platform\u0026rsquo;s risk control system treats them as \u0026ldquo;abnormal traffic.\u0026rdquo;\nThe solution: use residential IPs as your exit point. Residential IPs come from real home broadband connections, so to platforms they look like ordinary users—much higher approval rates.\nThis article covers how to set up residential IP exits in mihomo (formerly Clash Meta), using IPRoyal as an example.\nResidential IPs vs. airport nodes Comparison Airport nodes (VPS) Residential proxy IP IP type Data center IP Real home broadband IP Risk flagging High (shared IPs, heavy requests) Low (looks like a real user) Speed Fast (dedicated lines) Medium Pricing Monthly subscription, cheap Per GB, pricier Best for Daily browsing, streaming AI tools, account signup, data scraping Residential IPs shouldn\u0026rsquo;t replace your airport service for all traffic—they\u0026rsquo;re too expensive. The right approach: route only traffic that needs residential IPs through residential proxies, everything else through normal nodes.\nIPRoyal residential IP setup I use IPRoyal, which charges per GB with no monthly fees required—you pay only for what you use, and the quality is solid.\nGetting SOCKS5 credentials After signing up, go to Console → Residential Proxies → generate proxy. You\u0026rsquo;ll get:\nHost: geo.iproyal.com Port: 32325 Username: your_username Password: your_password You can append parameters to specify country or city—for example, US IPs:\nUsername: your_username_country-us See the IPRoyal docs for more parameters.\nmihomo configuration In your mihomo config file (usually config.yaml), add a residential IP proxy to the proxies section:\nproxies: # ... your existing nodes ... # Residential proxy - name: \u0026#34;residential-us\u0026#34; type: socks5 server: geo.iproyal.com port: 32325 username: \u0026#34;your_username_country-us\u0026#34; password: \u0026#34;your_password\u0026#34; udp: false # Important: SOCKS5 residential proxies don\u0026#39;t support UDP; must be false Note: udp: false is mandatory. SOCKS5 residential proxies typically don\u0026rsquo;t support UDP. If you enable it, QUIC connections on iOS will fail silently—apps won\u0026rsquo;t open but you\u0026rsquo;ll see no obvious error.\nCreate a proxy group In proxy-groups, set up a dedicated group for AI tools:\nproxy-groups: # AI tools group (uses residential IP) - name: \u0026#34;AI Tools\u0026#34; type: select proxies: - residential-us - DIRECT # Auto fallback (daily traffic) - name: \u0026#34;Auto\u0026#34; type: url-test url: \u0026#34;http://www.gstatic.com/generate_204\u0026#34; interval: 300 proxies: - HK-节点-1 - US-节点-1 - JP-节点-1 Set up routing rules In rules, point AI tool domains to the AI Tools group:\nrules: # AI tools use residential IP - DOMAIN-SUFFIX,anthropic.com,AI Tools - DOMAIN-SUFFIX,claude.ai,AI Tools - DOMAIN-SUFFIX,openai.com,AI Tools - DOMAIN-SUFFIX,chatgpt.com,AI Tools - DOMAIN-SUFFIX,api.openai.com,AI Tools - DOMAIN-SUFFIX,platform.openai.com,AI Tools # Google AI services (if needed) - DOMAIN-SUFFIX,generativelanguage.googleapis.com,AI Tools - DOMAIN-SUFFIX,ai.google.dev,AI Tools # Everything else goes to auto fallback - GEOIP,CN,DIRECT - MATCH,Auto Verify the configuration works Method 1: Check IP location Visit whatismyipaddress.com in your browser and check if the IP type shows \u0026ldquo;Residential\u0026rdquo; (home broadband).\nMethod 2: Test Claude API curl -x socks5://your_username:your_password@geo.iproyal.com:32325 \\ https://api.anthropic.com/v1/messages \\ -H \u0026#34;x-api-key: $ANTHROPIC_API_KEY\u0026#34; \\ -H \u0026#34;content-type: application/json\u0026#34; \\ -d \u0026#39;{\u0026#34;model\u0026#34;:\u0026#34;claude-haiku-4-5-20251001\u0026#34;,\u0026#34;max_tokens\u0026#34;:10,\u0026#34;messages\u0026#34;:[{\u0026#34;role\u0026#34;:\u0026#34;user\u0026#34;,\u0026#34;content\u0026#34;:\u0026#34;hi\u0026#34;}]}\u0026#39; If you get valid JSON back (not 403/429), the residential IP can reach the Anthropic API.\nMulti-region residential IPs Different AI tools have different region preferences:\nTool Recommended region Claude US, Europe ChatGPT US (for account binding) Gemini US (some features region-restricted) Midjourney No special requirements IPRoyal lets you pick IPs by country—just append _country-{code} to your username:\nUS: _country-us UK: _country-gb Germany: _country-de Cost control Residential IPs charge per GB, so controlling traffic usage saves money:\nRoute only essential traffic through residential proxies: API calls are lightweight (just JSON), but if you route your entire browser through residential proxies, images and videos will eat through your quota fast.\nBe precise in your routing rules: List only the AI tool API endpoints, don\u0026rsquo;t write overly broad rules.\nMonitor consumption: The IPRoyal console shows daily usage; set alerts for quota warnings.\nI personally use IPRoyal for roughly 1–3 GB per month (mostly Claude and OpenAI APIs), spending $3–8, which is way cheaper than re-registering accounts after getting banned.\n→ Sign up for IPRoyal (charged per GB, no monthly requirement)\n→ Check out mihomo multi-gateway config\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/mihomo-residential-ip-guide/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A glowing decorative lamp with a smaller light beside it.\" loading=\"lazy\" src=\"/images/mihomo-residential-ip-guide-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eOver the past year, I\u0026rsquo;ve run into a recurring problem with AI tools: airport shared node IPs get flagged by AI platforms, triggering verification requests, feature restrictions, or even account bans. The root cause is simple—these IPs have been used by too many people, and the platform\u0026rsquo;s risk control system treats them as \u0026ldquo;abnormal traffic.\u0026rdquo;\u003c/p\u003e\n\u003cp\u003eThe solution: use \u003cstrong\u003eresidential IPs\u003c/strong\u003e as your exit point. Residential IPs come from real home broadband connections, so to platforms they look like ordinary users—much higher approval rates.\u003c/p\u003e","title":"Practical residential IP egress configuration in mihomo: keeping AI tools reliably available"},{"content":"Stop-Loss Parameter Research in Quantitative Strategies Stop-loss distance is one of the hardest parameters to pin down in a quantitative strategy. Set it too tight and you get whipsawed constantly; set it too loose and a single trade can blow through your risk budget.\nTuning by intuition doesn\u0026rsquo;t convince anyone. A more reliable approach: systematically study historical data to understand how different stop-loss distances affect strategy performance, then identify parameter ranges that balance well across multiple evaluation dimensions.\nThis article walks through that research methodology—data preparation, parameter search, evaluation metrics, and safeguards against overfitting.\nResearch Framework 1. Data Preparation ├─ Select historical data period (training set) └─ Prepare price series and signal series 2. Parameter Grid Search ├─ Define stop-loss parameter range (e.g., 0.5% – 5%, step 0.1%) └─ Run full backtest for each parameter value 3. Metrics Calculation ├─ Total return ├─ Maximum drawdown ├─ Sharpe ratio ├─ Win rate × profit factor └─ Stop-loss trigger rate 4. Result Analysis ├─ Plot parameter sensitivity curves ├─ Identify robust zones (small change → small impact) └─ Validate on hold-out set 5. Finalize Parameters Data Preparation import pandas as pd import numpy as np from binance.client import Client def get_klines(symbol: str, interval: str, start: str, end: str) -\u0026gt; pd.DataFrame: \u0026#34;\u0026#34;\u0026#34;Fetch Binance candlestick data\u0026#34;\u0026#34;\u0026#34; client = Client() # Public data doesn\u0026#39;t require API keys klines = client.get_historical_klines(symbol, interval, start, end) df = pd.DataFrame(klines, columns=[ \u0026#39;timestamp\u0026#39;, \u0026#39;open\u0026#39;, \u0026#39;high\u0026#39;, \u0026#39;low\u0026#39;, \u0026#39;close\u0026#39;, \u0026#39;volume\u0026#39;, \u0026#39;close_time\u0026#39;, \u0026#39;quote_vol\u0026#39;, \u0026#39;trades\u0026#39;, \u0026#39;taker_buy_base\u0026#39;, \u0026#39;taker_buy_quote\u0026#39;, \u0026#39;ignore\u0026#39; ]) for col in [\u0026#39;open\u0026#39;, \u0026#39;high\u0026#39;, \u0026#39;low\u0026#39;, \u0026#39;close\u0026#39;, \u0026#39;volume\u0026#39;]: df[col] = df[col].astype(float) df[\u0026#39;timestamp\u0026#39;] = pd.to_datetime(df[\u0026#39;timestamp\u0026#39;], unit=\u0026#39;ms\u0026#39;) df.set_index(\u0026#39;timestamp\u0026#39;, inplace=True) return df # Fetch data: split into training and validation sets (time series can\u0026#39;t be randomly split!) df_train = get_klines(\u0026#34;BTCUSDT\u0026#34;, \u0026#34;4h\u0026#34;, \u0026#34;2023-01-01\u0026#34;, \u0026#34;2024-06-30\u0026#34;) # Training set df_val = get_klines(\u0026#34;BTCUSDT\u0026#34;, \u0026#34;4h\u0026#34;, \u0026#34;2024-07-01\u0026#34;, \u0026#34;2024-12-31\u0026#34;) # Validation set Why can\u0026rsquo;t we randomly split?\nTime series suffer from look-ahead bias: if you train on 2024 data and validate on 2023, you\u0026rsquo;re essentially \u0026ldquo;predicting the past with the future\u0026rdquo;—completely worthless. The training set must be strictly earlier in time than the validation set.\nATR-Normalized Stop-Loss Distance Using a fixed percentage as stop-loss has a problem: 1% is already wide in low-volatility periods but can be tight when volatility spikes.\nUsing ATR multiples is more robust:\ndef calc_atr(df: pd.DataFrame, period: int = 14) -\u0026gt; pd.Series: \u0026#34;\u0026#34;\u0026#34;Calculate ATR\u0026#34;\u0026#34;\u0026#34; high_low = df[\u0026#39;high\u0026#39;] - df[\u0026#39;low\u0026#39;] high_close = (df[\u0026#39;high\u0026#39;] - df[\u0026#39;close\u0026#39;].shift(1)).abs() low_close = (df[\u0026#39;low\u0026#39;] - df[\u0026#39;close\u0026#39;].shift(1)).abs() tr = pd.concat([high_low, high_close, low_close], axis=1).max(axis=1) return tr.rolling(period).mean() df_train[\u0026#39;atr\u0026#39;] = calc_atr(df_train) df_train[\u0026#39;stop_pct_1atr\u0026#39;] = df_train[\u0026#39;atr\u0026#39;] / df_train[\u0026#39;close\u0026#39;] # Percentage equivalent of 1 ATR Now the parameter becomes: stop-loss = N × ATR, where N is what we optimize (e.g., values between 0.5 and 3.0).\nSimplified Backtest Framework def backtest(df: pd.DataFrame, signals: pd.Series, sl_atr_mult: float, tp_atr_mult: float = None) -\u0026gt; dict: \u0026#34;\u0026#34;\u0026#34; Simplified backtest to evaluate a specific stop-loss parameter. signals: Signal sequence, 1=long, -1=short, 0=flat sl_atr_mult: Stop-loss distance (ATR multiple) tp_atr_mult: Take-profit distance (ATR multiple), None = hold until next signal \u0026#34;\u0026#34;\u0026#34; trades = [] position = 0 entry_price = 0 entry_atr = 0 for i in range(1, len(df)): row = df.iloc[i] prev_row = df.iloc[i-1] sig = signals.iloc[i-1] # Use signal from previous close, execute at next open # Check for exit conditions if in position if position != 0: if position == 1: # Long position stop_price = entry_price - entry_atr * sl_atr_mult if row[\u0026#39;low\u0026#39;] \u0026lt;= stop_price: # Stop-loss hit (assume execution at stop price) pnl = (stop_price - entry_price) / entry_price trades.append({\u0026#39;type\u0026#39;: \u0026#39;stop_loss\u0026#39;, \u0026#39;pnl\u0026#39;: pnl}) position = 0 continue if tp_atr_mult and row[\u0026#39;high\u0026#39;] \u0026gt;= entry_price + entry_atr * tp_atr_mult: tp_price = entry_price + entry_atr * tp_atr_mult pnl = (tp_price - entry_price) / entry_price trades.append({\u0026#39;type\u0026#39;: \u0026#39;take_profit\u0026#39;, \u0026#39;pnl\u0026#39;: pnl}) position = 0 continue # If flat, check for new signals if position == 0 and sig == 1: position = 1 entry_price = row[\u0026#39;open\u0026#39;] entry_atr = row[\u0026#39;atr\u0026#39;] elif position == 1 and sig != 1: # Signal ended, market exit pnl = (row[\u0026#39;open\u0026#39;] - entry_price) / entry_price trades.append({\u0026#39;type\u0026#39;: \u0026#39;signal_exit\u0026#39;, \u0026#39;pnl\u0026#39;: pnl}) position = 0 if not trades: return {\u0026#39;total_return\u0026#39;: 0, \u0026#39;max_drawdown\u0026#39;: 0, \u0026#39;sharpe\u0026#39;: 0, \u0026#39;win_rate\u0026#39;: 0, \u0026#39;stop_loss_rate\u0026#39;: 0, \u0026#39;n_trades\u0026#39;: 0} pnls = [t[\u0026#39;pnl\u0026#39;] for t in trades] cumulative = np.cumprod([1 + p for p in pnls]) # Maximum drawdown peak = np.maximum.accumulate(cumulative) drawdowns = (peak - cumulative) / peak max_dd = drawdowns.max() # Sharpe (simplified) mean_r = np.mean(pnls) std_r = np.std(pnls) if np.std(pnls) \u0026gt; 0 else 1e-10 sharpe = mean_r / std_r * np.sqrt(len(pnls)) stop_loss_trades = sum(1 for t in trades if t[\u0026#39;type\u0026#39;] == \u0026#39;stop_loss\u0026#39;) return { \u0026#39;total_return\u0026#39;: cumulative[-1] - 1, \u0026#39;max_drawdown\u0026#39;: max_dd, \u0026#39;sharpe\u0026#39;: sharpe, \u0026#39;win_rate\u0026#39;: sum(1 for p in pnls if p \u0026gt; 0) / len(pnls), \u0026#39;stop_loss_rate\u0026#39;: stop_loss_trades / len(trades), \u0026#39;n_trades\u0026#39;: len(trades) } Grid Search Over Stop-Loss Parameters import matplotlib.pyplot as plt def grid_search_stop_loss(df: pd.DataFrame, signals: pd.Series, sl_range: np.ndarray) -\u0026gt; pd.DataFrame: \u0026#34;\u0026#34;\u0026#34;Sweep through stop-loss parameters and record metrics\u0026#34;\u0026#34;\u0026#34; results = [] for sl_mult in sl_range: stats = backtest(df, signals, sl_atr_mult=sl_mult) stats[\u0026#39;sl_mult\u0026#39;] = sl_mult results.append(stats) return pd.DataFrame(results).set_index(\u0026#39;sl_mult\u0026#39;) # Search range: 0.3 to 3.0× ATR, step 0.1 sl_range = np.arange(0.3, 3.1, 0.1) results = grid_search_stop_loss(df_train, signals_train, sl_range) print(results[[\u0026#39;total_return\u0026#39;, \u0026#39;max_drawdown\u0026#39;, \u0026#39;sharpe\u0026#39;, \u0026#39;win_rate\u0026#39;, \u0026#39;stop_loss_rate\u0026#39;]]) Visualizing Parameter Sensitivity fig, axes = plt.subplots(2, 2, figsize=(12, 8)) metrics = [\u0026#39;total_return\u0026#39;, \u0026#39;max_drawdown\u0026#39;, \u0026#39;sharpe\u0026#39;, \u0026#39;stop_loss_rate\u0026#39;] titles = [\u0026#39;Total Return\u0026#39;, \u0026#39;Maximum Drawdown\u0026#39;, \u0026#39;Sharpe Ratio\u0026#39;, \u0026#39;Stop-Loss Rate\u0026#39;] for ax, metric, title in zip(axes.flat, metrics, titles): ax.plot(results.index, results[metric], marker=\u0026#39;o\u0026#39;, markersize=3) ax.set_title(title) ax.set_xlabel(\u0026#39;Stop-Loss Multiple (× ATR)\u0026#39;) ax.grid(True, alpha=0.3) plt.tight_layout() plt.savefig(\u0026#39;stop_loss_sensitivity.png\u0026#39;, dpi=150) How to Interpret Results When reviewing the charts, look for these patterns:\nRobust zones: A parameter range where the Sharpe ratio stays relatively stable (flat curve) rather than having one magic peak. If Sharpe spikes at a single point with poor neighbors, that\u0026rsquo;s a red flag for overfitting.\nStop-loss trigger rate:\nRate \u0026gt; 70%: stops are too tight, most trades get whipsawed Rate \u0026lt; 20%: stops are too loose, or your signal quality is exceptional Reasonable range: 30%–60%, depending on strategy type Return vs. drawdown trade-off: The highest Sharpe isn\u0026rsquo;t automatically best—check that max drawdown stays within your risk tolerance (say 20%). Exceeding that is a deal-breaker regardless of Sharpe.\nValidation on Hold-Out Set After finding candidates on the training set, you must validate on a hold-out set:\n# Best parameter found on training set (assume 1.5× ATR) best_sl_mult = 1.5 # Validate on hold-out set val_result = backtest(df_val, signals_val, sl_atr_mult=best_sl_mult) train_result = backtest(df_train, signals_train, sl_atr_mult=best_sl_mult) print(f\u0026#34;Training Sharpe: {train_result[\u0026#39;sharpe\u0026#39;]:.2f}\u0026#34;) print(f\u0026#34;Validation Sharpe: {val_result[\u0026#39;sharpe\u0026#39;]:.2f}\u0026#34;) print(f\u0026#34;Training Drawdown: {train_result[\u0026#39;max_drawdown\u0026#39;]:.2%}\u0026#34;) print(f\u0026#34;Validation Drawdown: {val_result[\u0026#39;max_drawdown\u0026#39;]:.2%}\u0026#34;) Healthy outcome: Validation results lag training slightly, but direction is consistent (both profitable, both positive Sharpe, same order of magnitude on drawdown).\nOverfitting red flags: Training Sharpe 3.0, validation Sharpe −0.5. The parameter just fit noise in the training data with no real predictive power.\nGuarding Against Overfitting A few practical rules:\nDon\u0026rsquo;t optimize for a single peak: Choose parameters from regions where performance is stable, not isolated spikes Don\u0026rsquo;t add too many parameters: Data requirements grow exponentially with each added parameter Test across market regimes: Run separate validation on bull markets, bear markets, and range-bound periods; parameters should work in all three Reserve enough out-of-sample data: At least 30% stays untouched by optimization Parameters need economic logic: Results should explain via market microstructure—pure statistical artifacts rarely hold up in live trading Stop-loss research is iterative, not one-and-done. Market structure shifts, so periodically re-validating whether your parameters still sit in the healthy zone is essential maintenance for long-running strategies.\n→ See Binance Futures Risk Management Framework → See Binance API: From Application to First Trade\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/quant-stop-loss-parameter-research/","summary":"\u003ch1 id=\"stop-loss-parameter-research-in-quantitative-strategies\"\u003eStop-Loss Parameter Research in Quantitative Strategies\u003c/h1\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Futuristic abstract digital render depicting geometric shape\" loading=\"lazy\" src=\"/images/quant-stop-loss-parameter-research-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eStop-loss distance is one of the hardest parameters to pin down in a quantitative strategy. Set it too tight and you get whipsawed constantly; set it too loose and a single trade can blow through your risk budget.\u003c/p\u003e\n\u003cp\u003eTuning by intuition doesn\u0026rsquo;t convince anyone. A more reliable approach: \u003cstrong\u003esystematically study historical data to understand how different stop-loss distances affect strategy performance, then identify parameter ranges that balance well across multiple evaluation dimensions\u003c/strong\u003e.\u003c/p\u003e","title":"Quantitative Strategy Stop-Loss Parameter Research Methodology: How to Find the Optimal Stop-Loss Distance Using Historical Data"},{"content":"A Quant Strategy Needs More Than Just Code: Building Your Complete Monitoring \u0026amp; Alerting Stack Running a quant strategy requires far more than the strategy itself—you need a full suite of tools to execute it reliably, monitor its state, and get alerted when things go wrong. This post shares my complete tooling setup, from strategy execution through alerts.\nOverall Architecture Strategy Layer (Python) ↓ Trading Orders Binance API ↓ Execution Results State Files / CF KV ↓ Metrics Prometheus + node_exporter ↓ Storage Grafana Visualization ↓ Alert Rules Alertmanager → Telegram Strategy Execution Layer Tech Stack Language: Python 3.11 Binance SDK: python-binance Scheduled Tasks: APScheduler or system cron Dependency Management: requirements.txt + venv Directory Structure quant/ ├── strategy/ │ ├── main.py # Core strategy logic (signal generation + order placement) │ ├── signals.py # Indicator calculations (technical indicator library) │ └── risk.py # Position sizing, stop-loss logic ├── exchange/ │ └── binance_client.py # Binance API wrapper ├── monitor/ │ └── exporter.py # Expose state metrics in Prometheus format ├── config/ │ └── settings.py # Configuration (read from environment variables) └── run.py # Entry point Key Code: Exposing State Metrics While your strategy runs, write key metrics in Prometheus text file format for node_exporter to scrape:\n# monitor/exporter.py import os import time METRICS_FILE = \u0026#34;/var/lib/node_exporter/textfile_collector/quant.prom\u0026#34; def write_metrics(data: dict): \u0026#34;\u0026#34;\u0026#34; data example: { \u0026#34;pnl_total\u0026#34;: 12.5, # cumulative return % \u0026#34;pnl_today\u0026#34;: 0.8, # today\u0026#39;s return % \u0026#34;position\u0026#34;: 1, # 1=long, -1=short, 0=flat \u0026#34;last_signal_ts\u0026#34;: 1776200000, # last signal timestamp \u0026#34;last_run_ts\u0026#34;: 1776235000, # last strategy run time } \u0026#34;\u0026#34;\u0026#34; lines = [ \u0026#39;# HELP quant_pnl_total Cumulative return (percent)\u0026#39;, \u0026#39;# TYPE quant_pnl_total gauge\u0026#39;, f\u0026#39;quant_pnl_total {data[\u0026#34;pnl_total\u0026#34;]}\u0026#39;, \u0026#39;\u0026#39;, \u0026#39;# HELP quant_pnl_today Daily return (percent)\u0026#39;, \u0026#39;# TYPE quant_pnl_today gauge\u0026#39;, f\u0026#39;quant_pnl_today {data[\u0026#34;pnl_today\u0026#34;]}\u0026#39;, \u0026#39;\u0026#39;, \u0026#39;# HELP quant_position Current position direction (1=long,-1=short,0=flat)\u0026#39;, \u0026#39;# TYPE quant_position gauge\u0026#39;, f\u0026#39;quant_position {data[\u0026#34;position\u0026#34;]}\u0026#39;, \u0026#39;\u0026#39;, \u0026#39;# HELP quant_last_signal_timestamp Last signal time\u0026#39;, \u0026#39;# TYPE quant_last_signal_timestamp gauge\u0026#39;, f\u0026#39;quant_last_signal_timestamp {data[\u0026#34;last_signal_ts\u0026#34;]}\u0026#39;, \u0026#39;\u0026#39;, \u0026#39;# HELP quant_last_run_timestamp Last strategy run time\u0026#39;, \u0026#39;# TYPE quant_last_run_timestamp gauge\u0026#39;, f\u0026#39;quant_last_run_timestamp {int(time.time())}\u0026#39;, \u0026#39;\u0026#39;, ] tmp = METRICS_FILE + \u0026#34;.tmp\u0026#34; with open(tmp, \u0026#34;w\u0026#34;) as f: f.write(\u0026#34;\\n\u0026#34;.join(lines)) os.rename(tmp, METRICS_FILE) Server Configuration Choosing Your Server A quant strategy has three core server requirements:\nStability: No random downtime—it needs to run 24/7 Low latency: Close to Binance servers (Singapore or Tokyo for faster order execution) Isolation: Don\u0026rsquo;t share resources with other high-load tasks I run on AWS Singapore (aws-sg). Binance\u0026rsquo;s primary servers are in Singapore, so order latency is 1-5ms.\nsystemd Daemon Don\u0026rsquo;t run your strategy with nohup—use systemd:\n# /etc/systemd/system/quant-strategy.service [Unit] Description=Quant Strategy After=network.target [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu/quant ExecStart=/home/ubuntu/quant/venv/bin/python run.py Restart=always RestartSec=10 EnvironmentFile=/home/ubuntu/quant/.env [Install] WantedBy=multi-user.target systemctl enable quant-strategy systemctl start quant-strategy systemctl status quant-strategy If your strategy crashes, systemd automatically restarts it with a 10-second delay.\nEnvironment Variable Management Keep API keys in a .env file, never commit to Git:\n# .env (600 permissions only) BINANCE_API_KEY=xxxx BINANCE_API_SECRET=xxxx TELEGRAM_BOT_TOKEN=xxxx TELEGRAM_CHAT_ID=xxxx # settings.py from dotenv import load_dotenv import os load_dotenv() BINANCE_API_KEY = os.environ[\u0026#34;BINANCE_API_KEY\u0026#34;] BINANCE_API_SECRET = os.environ[\u0026#34;BINANCE_API_SECRET\u0026#34;] Prometheus Monitoring Configuration Add your strategy server\u0026rsquo;s node_exporter to prometheus.yml:\nscrape_configs: - job_name: node-remote-linux static_configs: - targets: - your-strategy-server-IP:9100 node_exporter automatically collects metrics from any *.prom files in /var/lib/node_exporter/textfile_collector/—no extra configuration needed.\nGrafana Dashboard Your core strategy monitoring panel should include:\nProfit Section (top)\nCumulative return time series chart Daily PnL stat card Current position direction (long/short/flat) Risk Section (middle)\nMaximum drawdown Daily return bar chart (last 30 days) Sharpe ratio (annualized) Health Section (bottom)\nTime since last strategy run Time since last signal Heartbeat status (green = healthy, red = problem) Key Panel: Strategy Heartbeat # Grafana PromQL (time() - quant_last_run_timestamp) / 60 This query shows how many minutes have passed since the strategy last ran. Color thresholds:\n\u0026lt; 65 minutes: green (healthy for hourly strategy) 65-120 minutes: yellow (minor delay) 120 minutes: red (strategy likely crashed)\nAlert Configuration Alertmanager + Telegram Define alert rules in alerts.yml:\ngroups: - name: quant-alerts rules: # Strategy heartbeat timeout - alert: QuantHeartbeatTimeout expr: (time() - quant_last_run_timestamp) \u0026gt; 7200 for: 5m labels: severity: critical annotations: summary: \u0026#34;Quant strategy heartbeat timeout\u0026#34; description: \u0026#34;Strategy hasn\u0026#39;t run for over 2 hours—check server status\u0026#34; # Significant daily loss - alert: QuantLargeLoss expr: quant_pnl_today \u0026lt; -3 for: 1m labels: severity: warning annotations: summary: \u0026#34;Daily loss exceeds 3%\u0026#34; description: \u0026#34;Daily return: {{ $value }}%—monitor closely\u0026#34; Telegram alert template (configure in alertmanager.yml):\nreceivers: - name: telegram telegram_configs: - bot_token: \u0026#34;your-BOT-TOKEN\u0026#34; chat_id: your-CHAT-ID message: | 🚨 {{ .GroupLabels.alertname }} {{ range .Alerts }} {{ .Annotations.summary }} {{ .Annotations.description }} {{ end }} Direct Telegram Alerts from Strategy Code Beyond Alertmanager, push alerts directly from your strategy code:\nimport requests def send_telegram(message: str): bot_token = os.environ[\u0026#34;TELEGRAM_BOT_TOKEN\u0026#34;] chat_id = os.environ[\u0026#34;TELEGRAM_CHAT_ID\u0026#34;] url = f\u0026#34;https://api.telegram.org/bot{bot_token}/sendMessage\u0026#34; requests.post(url, json={\u0026#34;chat_id\u0026#34;: chat_id, \u0026#34;text\u0026#34;: message}) # Push alert after placing order send_telegram(f\u0026#34;📊 Signal: {direction}\\nPrice: {price}\\nSize: {size}\u0026#34;) Summary: Tool Selection Rationale Tool Alternatives Why Choose This Python Go, JavaScript Richest quant ecosystem (pandas, ta-lib, etc.) Binance python-binance Custom REST wrapper Official SDK—saves reinventing the wheel systemd supervisor, PM2 Built-in, stable, centralized log management Prometheus + node_exporter InfluxDB + Telegraf Reuses existing monitoring stack, no new components Alertmanager Custom alert scripts Full-featured rules, silencing, grouping Telegram Email, DingTalk Immediate mobile push, simple API → Read Polaris Strategy Deep Dive → Read Binance API From Zero to First Order → Read Prometheus + Grafana VPS Monitoring Setup\n📷 Cover · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/quant-tools-stack/","summary":"\u003ch1 id=\"a-quant-strategy-needs-more-than-just-code-building-your-complete-monitoring--alerting-stack\"\u003eA Quant Strategy Needs More Than Just Code: Building Your Complete Monitoring \u0026amp; Alerting Stack\u003c/h1\u003e\n\u003cp\u003eRunning a quant strategy requires far more than the strategy itself—you need a full suite of tools to execute it reliably, monitor its state, and get alerted when things go wrong. This post shares my complete tooling setup, from strategy execution through alerts.\u003c/p\u003e\n\u003ch2 id=\"overall-architecture\"\u003eOverall Architecture\u003c/h2\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eStrategy Layer (Python)\n  ↓ Trading Orders\nBinance API\n  ↓ Execution Results\nState Files / CF KV\n  ↓ Metrics\nPrometheus + node_exporter\n  ↓ Storage\nGrafana Visualization\n  ↓ Alert Rules\nAlertmanager → Telegram\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"strategy-execution-layer\"\u003eStrategy Execution Layer\u003c/h2\u003e\n\u003ch3 id=\"tech-stack\"\u003eTech Stack\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eLanguage\u003c/strong\u003e: Python 3.11\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBinance SDK\u003c/strong\u003e: \u003ccode\u003epython-binance\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eScheduled Tasks\u003c/strong\u003e: APScheduler or system cron\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDependency Management\u003c/strong\u003e: \u003ccode\u003erequirements.txt\u003c/code\u003e + venv\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"directory-structure\"\u003eDirectory Structure\u003c/h3\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003equant/\n├── strategy/\n│   ├── main.py          # Core strategy logic (signal generation + order placement)\n│   ├── signals.py       # Indicator calculations (technical indicator library)\n│   └── risk.py          # Position sizing, stop-loss logic\n├── exchange/\n│   └── binance_client.py # Binance API wrapper\n├── monitor/\n│   └── exporter.py      # Expose state metrics in Prometheus format\n├── config/\n│   └── settings.py      # Configuration (read from environment variables)\n└── run.py               # Entry point\n\u003c/code\u003e\u003c/pre\u003e\u003ch3 id=\"key-code-exposing-state-metrics\"\u003eKey Code: Exposing State Metrics\u003c/h3\u003e\n\u003cp\u003eWhile your strategy runs, write key metrics in Prometheus text file format for node_exporter to scrape:\u003c/p\u003e","title":"Quantitative trading toolkit: Binance API + Grafana + complete automated alerting configuration"},{"content":" The previous post covered deploying Xray REALITY on the server side. This one focuses specifically on client configuration—once you\u0026rsquo;ve collected the usernames, server addresses, public keys and other info for various platforms, here\u0026rsquo;s how to configure them in different clients.\nYou\u0026rsquo;ll need to prepare the following information (obtained from the server configuration):\nParameter Description Server Address VPS public IP Port Port the server listens on (port 443 recommended) UUID Client ID configured on the server Public Key Public key generated by xray x25519 Short ID One of the shortIds configured on the server SNI serverNames configured on the server (e.g., www.apple.com) mihomo (Clash Meta) mihomo natively supports REALITY. Add the configuration to the proxies: section:\nproxies: - name: \u0026#34;us-reality\u0026#34; type: vless server: your_VPS_IP port: 443 uuid: your_UUID network: tcp tls: true udp: true flow: xtls-rprx-vision reality-opts: public-key: your_public_key short-id: \u0026#34;55470656\u0026#34; servername: www.apple.com client-fingerprint: chrome Configuration Options client-fingerprint: Client TLS fingerprint spoofing. Recommended options:\nchrome: Spoof Chrome browser (most common, recommended) safari: Spoof Safari firefox: Spoof Firefox Why choose chrome? Chrome is the most widely used browser globally, so it blends in best.\nflow: xtls-rprx-vision: If flow is enabled on the server, you must set this. Without it, the connection won\u0026rsquo;t work.\nudp: true: REALITY runs over TCP. UDP traffic through the proxy is actually encapsulated over TCP, and this doesn\u0026rsquo;t affect functionality.\nProxy Group Configuration proxy-groups: - name: \u0026#34;Node Selection\u0026#34; type: select proxies: - us-reality - DIRECT - name: \u0026#34;Auto Select\u0026#34; type: url-test url: \u0026#34;http://www.gstatic.com/generate_204\u0026#34; interval: 300 proxies: - us-reality Testing Connectivity After mihomo is running, verify by accessing a speed test URL:\ncurl -x http://127.0.0.1:7890 https://api.ipify.org The returned IP should be your VPS\u0026rsquo;s IP.\nSurge (macOS / iOS) Surge has supported REALITY since version 5.x.\nmacOS Configuration Add this to the [Proxy] section of your Surge config file:\n[Proxy] Reality-US = vless, your_VPS_IP, 443, username=your_UUID, tls=true, tls13=true, sni=www.apple.com, skip-cert-verify=false, underlying-proxy=none, vless-flow=xtls-rprx-vision, reality-public-key=your_public_key, reality-short-id=55470656, client-fingerprint=chrome iOS / iPadOS Configuration iOS Surge configuration is similar, but keep these points in mind:\nDon\u0026rsquo;t enable UDP: Surge iOS uses REALITY over TCP. Enabling UDP can cause issues. SNI needs to be stable: iOS is more sensitive to handshake timeouts. Choose an SNI that responds quickly. You can import via QR code: Export a QR code from macOS Surge and scan it on iOS. Proxy Groups [Proxy Group] AI-Traffic = fallback, Reality-US, backup-node, policy-path=xxx, evaluate-before-use=true Shadowrocket (iOS) Shadowrocket is the most commonly used proxy client on iOS and supports REALITY.\nManual Configuration Tap the + button in the top right → Select VLESS as the type:\nField Value Address your_VPS_IP Port 443 UUID your_UUID Protocol tcp TLS Enabled Flow xtls-rprx-vision REALITY Enabled Public Key your_public_key Short ID 55470656 SNI www.apple.com Fingerprint chrome Import via Link VLESS REALITY link format:\nvless://UUID@IP:443?encryption=none\u0026amp;flow=xtls-rprx-vision\u0026amp;security=reality\u0026amp;sni=www.apple.com\u0026amp;fp=chrome\u0026amp;pbk=public_key\u0026amp;sid=55470656\u0026amp;type=tcp#node_name Copy this link into Shadowrocket, tap + → Scan or Enter, paste it, and it\u0026rsquo;ll import in one tap.\nClient Comparison Client Platform REALITY Support Flow Support mihomo All platforms ✓ (native) ✓ Surge 5 macOS/iOS ✓ ✓ Shadowrocket iOS ✓ ✓ Clash Verge macOS/Windows ✓ (mihomo-based) ✓ v2rayN Windows ✓ ✓ Nekobox Android ✓ ✓ Multi-Node Configuration Tips If you have multiple VPSs configured with REALITY, you can use the url-test group to automatically select the fastest one:\n# mihomo proxy-groups: - name: \u0026#34;REALITY Auto\u0026#34; type: url-test url: \u0026#34;http://www.gstatic.com/generate_204\u0026#34; interval: 180 tolerance: 50 proxies: - us-reality-1 - hk-reality-1 - jp-reality-1 It automatically tests speed every 3 minutes and switches to the node with the lowest latency.\nFAQ Q: Connection is slow but latency is normal Check if flow matches: if the server has xtls-rprx-vision enabled, the client must also set xtls-rprx-vision. Otherwise it falls back to degraded mode, which hurts speed and stability.\nQ: Surge iOS keeps timing out\nCheck if the VPS firewall allows port 443 Try a different SNI that responds faster (test with: curl -I https://www.apple.com from the VPS) Disable flow and verify basic connectivity first Q: mihomo connects but IP is still local Check your rules: make sure the routing rules for the target traffic point to your REALITY proxy group, not DIRECT.\nQ: Client reports format error after entering public key REALITY public keys are base64url encoded (without +/=), 44 characters long. If you get a format error, it means there are line breaks or spaces mixed in during copying.\n→ See Xray REALITY Server Configuration → See Hysteria2 Setup Guide\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/xray-reality-client-config/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Close-up of wooden blocks spelling \u0026rsquo;encryption\u0026rsquo;, symbolizing\" loading=\"lazy\" src=\"/images/xray-reality-client-config-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/en/posts/xray-reality-complete-guide/\"\u003eThe previous post\u003c/a\u003e covered deploying Xray REALITY on the server side. This one focuses specifically on client configuration—once you\u0026rsquo;ve collected the usernames, server addresses, public keys and other info for various platforms, here\u0026rsquo;s how to configure them in different clients.\u003c/p\u003e\n\u003cp\u003eYou\u0026rsquo;ll need to prepare the following information (obtained from the server configuration):\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eParameter\u003c/th\u003e\n          \u003cth\u003eDescription\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eServer Address\u003c/td\u003e\n          \u003ctd\u003eVPS public IP\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePort\u003c/td\u003e\n          \u003ctd\u003ePort the server listens on (port 443 recommended)\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eUUID\u003c/td\u003e\n          \u003ctd\u003eClient ID configured on the server\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003ePublic Key\u003c/td\u003e\n          \u003ctd\u003ePublic key generated by \u003ccode\u003exray x25519\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eShort ID\u003c/td\u003e\n          \u003ctd\u003eOne of the shortIds configured on the server\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eSNI\u003c/td\u003e\n          \u003ctd\u003eserverNames configured on the server (e.g., \u003ca href=\"https://www.apple.com\"\u003ewww.apple.com\u003c/a\u003e)\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"mihomo-clash-meta\"\u003emihomo (Clash Meta)\u003c/h2\u003e\n\u003cp\u003emihomo natively supports REALITY. Add the configuration to the \u003ccode\u003eproxies:\u003c/code\u003e section:\u003c/p\u003e","title":"REALITY Client Configuration: mihomo, Surge, and Shadowrocket Integration Guide"},{"content":" Managing multiple VPS means one thing: you need to check their status every single day. Disk filling up, services crashing, memory spiking—catch these early or they become production incidents.\nThis post covers a practical solution: Python script SSH\u0026rsquo;s into each server, collects metrics → Gemini CLI analyzes for anomalies → Telegram Bot sends a daily report.\nThe whole pipeline runs on a cron schedule with zero manual work.\nArchitecture Scheduled cron task └─ Python audit script ├─ SSH to each server │ └─ Collect: CPU / memory / disk / service status / recent error logs ├─ Aggregate into text report ├─ Call Gemini CLI to analyze (find anomalies, suggest fixes) └─ Send to Telegram Bot Setup 1. Install Gemini CLI npm install -g @google/gemini-cli gemini auth # Sign in with your Google account Verify it works:\necho \u0026#34;hello\u0026#34; | gemini 2. Create a Telegram Bot Find @BotFather in Telegram Send /newbot and follow the prompts to create a bot — you\u0026rsquo;ll get a Bot Token Send a message to your bot, then visit: https://api.telegram.org/bot\u0026lt;token\u0026gt;/getUpdates Look for chat.id in the JSON response — that\u0026rsquo;s your Chat ID 3. Set up passwordless SSH On the machine doing the auditing, generate a key (if you don\u0026rsquo;t have one):\nssh-keygen -t ed25519 -f ~/.ssh/audit_key Distribute the public key to each server:\nssh-copy-id -i ~/.ssh/audit_key.pub user@server-ip The Audit Script ~/scripts/server_audit.py:\n#!/usr/bin/env python3 \u0026#34;\u0026#34;\u0026#34; Daily server cluster audit script - SSH to each server, collect metrics - Gemini CLI analyzes the report - Telegram sends the daily report \u0026#34;\u0026#34;\u0026#34; import subprocess import json import requests from datetime import datetime # === Config === SERVERS = [ {\u0026#34;name\u0026#34;: \u0026#34;aws-hk\u0026#34;, \u0026#34;host\u0026#34;: \u0026#34;your-hk-server-ip\u0026#34;, \u0026#34;user\u0026#34;: \u0026#34;ubuntu\u0026#34;}, {\u0026#34;name\u0026#34;: \u0026#34;aws-us\u0026#34;, \u0026#34;host\u0026#34;: \u0026#34;your-us-server-ip\u0026#34;, \u0026#34;user\u0026#34;: \u0026#34;ubuntu\u0026#34;}, {\u0026#34;name\u0026#34;: \u0026#34;home-1\u0026#34;, \u0026#34;host\u0026#34;: \u0026#34;192.168.1.10\u0026#34;, \u0026#34;user\u0026#34;: \u0026#34;as\u0026#34;}, ] SSH_KEY = \u0026#34;/root/.ssh/audit_key\u0026#34; # or your key path TG_TOKEN = \u0026#34;your-telegram-bot-token\u0026#34; TG_CHAT_ID = \u0026#34;your-chat-id\u0026#34; # ============== def ssh_run(host: str, user: str, cmd: str) -\u0026gt; str: \u0026#34;\u0026#34;\u0026#34;Execute command on remote host, return output\u0026#34;\u0026#34;\u0026#34; result = subprocess.run( [\u0026#34;ssh\u0026#34;, \u0026#34;-i\u0026#34;, SSH_KEY, \u0026#34;-o\u0026#34;, \u0026#34;StrictHostKeyChecking=no\u0026#34;, \u0026#34;-o\u0026#34;, \u0026#34;ConnectTimeout=10\u0026#34;, f\u0026#34;{user}@{host}\u0026#34;, cmd], capture_output=True, text=True, timeout=30 ) return result.stdout.strip() if result.returncode == 0 else f\u0026#34;[ERROR] {result.stderr.strip()}\u0026#34; def collect_metrics(server: dict) -\u0026gt; dict: \u0026#34;\u0026#34;\u0026#34;Collect metrics from a single server\u0026#34;\u0026#34;\u0026#34; name = server[\u0026#34;name\u0026#34;] host = server[\u0026#34;host\u0026#34;] user = server[\u0026#34;user\u0026#34;] print(f\u0026#34; Collecting from {name} ({host})...\u0026#34;) metrics = { \u0026#34;name\u0026#34;: name, \u0026#34;host\u0026#34;: host, \u0026#34;timestamp\u0026#34;: datetime.now().isoformat(), } # CPU load (1-minute average) metrics[\u0026#34;cpu_load\u0026#34;] = ssh_run(host, user, \u0026#34;cat /proc/loadavg | awk \u0026#39;{print $1, $2, $3}\u0026#39;\u0026#34;) # Memory usage metrics[\u0026#34;memory\u0026#34;] = ssh_run(host, user, \u0026#34;free -h | grep Mem | awk \u0026#39;{print \\\u0026#34;total:\\\u0026#34;, $2, \\\u0026#34;used:\\\u0026#34;, $3, \\\u0026#34;free:\\\u0026#34;, $4}\u0026#39;\u0026#34;) # Disk usage (root partition) metrics[\u0026#34;disk\u0026#34;] = ssh_run(host, user, \u0026#34;df -h / | tail -1 | awk \u0026#39;{print \\\u0026#34;total:\\\u0026#34;, $2, \\\u0026#34;used:\\\u0026#34;, $3, \\\u0026#34;avail:\\\u0026#34;, $4, \\\u0026#34;use%:\\\u0026#34;, $5}\u0026#39;\u0026#34;) # System uptime metrics[\u0026#34;uptime\u0026#34;] = ssh_run(host, user, \u0026#34;uptime -p\u0026#34;) # Service status (customize per your services) services = [\u0026#34;nginx\u0026#34;, \u0026#34;xray\u0026#34;, \u0026#34;hysteria-server\u0026#34;] service_status = {} for svc in services: status = ssh_run(host, user, f\u0026#34;systemctl is-active {svc} 2\u0026gt;/dev/null || echo \u0026#39;not-found\u0026#39;\u0026#34;) service_status[svc] = status metrics[\u0026#34;services\u0026#34;] = service_status # Recent system errors (past hour) metrics[\u0026#34;recent_errors\u0026#34;] = ssh_run(host, user, \u0026#34;journalctl -p err --since \u0026#39;1 hour ago\u0026#39; --no-pager -q 2\u0026gt;/dev/null | tail -20\u0026#34;) # Network connections metrics[\u0026#34;connections\u0026#34;] = ssh_run(host, user, \u0026#34;ss -s | grep \u0026#39;TCP:\u0026#39; | head -3\u0026#34;) return metrics def format_report(all_metrics: list) -\u0026gt; str: \u0026#34;\u0026#34;\u0026#34;Format collected data into a text report\u0026#34;\u0026#34;\u0026#34; lines = [] lines.append(f\u0026#34;=== Cluster Audit Report {datetime.now().strftime(\u0026#39;%Y-%m-%d %H:%M\u0026#39;)} ===\\n\u0026#34;) for m in all_metrics: lines.append(f\u0026#34;[{m[\u0026#39;name\u0026#39;]}] {m[\u0026#39;host\u0026#39;]}\u0026#34;) lines.append(f\u0026#34; Load: {m.get(\u0026#39;cpu_load\u0026#39;, \u0026#39;N/A\u0026#39;)}\u0026#34;) lines.append(f\u0026#34; Memory: {m.get(\u0026#39;memory\u0026#39;, \u0026#39;N/A\u0026#39;)}\u0026#34;) lines.append(f\u0026#34; Disk: {m.get(\u0026#39;disk\u0026#39;, \u0026#39;N/A\u0026#39;)}\u0026#34;) lines.append(f\u0026#34; Uptime: {m.get(\u0026#39;uptime\u0026#39;, \u0026#39;N/A\u0026#39;)}\u0026#34;) services = m.get(\u0026#39;services\u0026#39;, {}) for svc, status in services.items(): icon = \u0026#34;✓\u0026#34; if status == \u0026#34;active\u0026#34; else \u0026#34;✗\u0026#34; lines.append(f\u0026#34; {icon} {svc}: {status}\u0026#34;) errors = m.get(\u0026#39;recent_errors\u0026#39;, \u0026#39;\u0026#39;) if errors and \u0026#39;[ERROR]\u0026#39; not in errors and len(errors) \u0026gt; 5: lines.append(f\u0026#34; Recent errors:\u0026#34;) for line in errors.split(\u0026#39;\\n\u0026#39;)[:5]: lines.append(f\u0026#34; {line}\u0026#34;) lines.append(\u0026#34;\u0026#34;) return \u0026#39;\\n\u0026#39;.join(lines) def gemini_analyze(report: str) -\u0026gt; str: \u0026#34;\u0026#34;\u0026#34;Call Gemini CLI to analyze the report\u0026#34;\u0026#34;\u0026#34; prompt = f\u0026#34;\u0026#34;\u0026#34;Here\u0026#39;s a server cluster audit report. Please: 1. Identify any anomalies or concerns 2. Summarize service status briefly 3. Flag any disk usage \u0026gt; 80% or inactive services as warnings 4. Give short recommendations if issues exist 5. If everything\u0026#39;s fine, say \u0026#34;Cluster status normal\u0026#34; Keep it under 200 words. {report}\u0026#34;\u0026#34;\u0026#34; result = subprocess.run( [\u0026#34;gemini\u0026#34;, \u0026#34;--model\u0026#34;, \u0026#34;gemini-2.5-flash\u0026#34;, \u0026#34;-p\u0026#34;, prompt], capture_output=True, text=True, timeout=60 ) if result.returncode == 0: return result.stdout.strip() else: return f\u0026#34;[Gemini analysis failed] {result.stderr[:200]}\u0026#34; def send_telegram(message: str): \u0026#34;\u0026#34;\u0026#34;Send Telegram message\u0026#34;\u0026#34;\u0026#34; url = f\u0026#34;https://api.telegram.org/bot{TG_TOKEN}/sendMessage\u0026#34; # Telegram message limit 4096 chars if len(message) \u0026gt; 4000: message = message[:4000] + \u0026#34;\\n...[truncated]\u0026#34; resp = requests.post(url, json={ \u0026#34;chat_id\u0026#34;: TG_CHAT_ID, \u0026#34;text\u0026#34;: message, \u0026#34;parse_mode\u0026#34;: \u0026#34;HTML\u0026#34; }, timeout=15) if resp.status_code == 200: print(\u0026#34; Telegram sent successfully\u0026#34;) else: print(f\u0026#34; Telegram failed: {resp.text}\u0026#34;) def main(): print(f\u0026#34;Starting audit of {len(SERVERS)} servers...\u0026#34;) # Collect metrics from all servers all_metrics = [] for server in SERVERS: try: metrics = collect_metrics(server) all_metrics.append(metrics) except Exception as e: print(f\u0026#34; Failed to collect from {server[\u0026#39;name\u0026#39;]}: {e}\u0026#34;) all_metrics.append({ \u0026#34;name\u0026#34;: server[\u0026#34;name\u0026#34;], \u0026#34;host\u0026#34;: server[\u0026#34;host\u0026#34;], \u0026#34;error\u0026#34;: str(e) }) # Generate text report report = format_report(all_metrics) print(\u0026#34;\\n--- Raw Report ---\u0026#34;) print(report) # Gemini analysis print(\u0026#34;\\nCalling Gemini for analysis...\u0026#34;) analysis = gemini_analyze(report) print(f\u0026#34;Analysis: {analysis}\u0026#34;) # Compose Telegram message tg_message = f\u0026#34;\u0026lt;b\u0026gt;Daily Cluster Audit\u0026lt;/b\u0026gt;\\n\\n{analysis}\\n\\n\u0026lt;pre\u0026gt;{report[:2000]}\u0026lt;/pre\u0026gt;\u0026#34; send_telegram(tg_message) print(\u0026#34;\\nAudit complete\u0026#34;) if __name__ == \u0026#34;__main__\u0026#34;: main() Schedule the Cron Job Run at 8 AM daily:\ncrontab -e Add:\n0 8 * * * /usr/bin/python3 /home/as/scripts/server_audit.py \u0026gt;\u0026gt; /var/log/server_audit.log 2\u0026gt;\u0026amp;1 Customize Collection Commands Adapt the services list and collection commands to your setup:\n# Check Docker container status metrics[\u0026#34;docker\u0026#34;] = ssh_run(host, user, \u0026#34;docker ps --format \u0026#39;{{.Names}}: {{.Status}}\u0026#39; 2\u0026gt;/dev/null | head -10\u0026#34;) # Check if specific ports are listening metrics[\u0026#34;ports\u0026#34;] = ssh_run(host, user, \u0026#34;ss -tlnp | grep -E \u0026#39;:(443|80|8080|9090)\u0026#39; | awk \u0026#39;{print $4, $6}\u0026#39;\u0026#34;) # Recent nginx errors metrics[\u0026#34;nginx_errors\u0026#34;] = ssh_run(host, user, \u0026#34;tail -20 /var/log/nginx/error.log 2\u0026gt;/dev/null | grep -v \u0026#39;^$\u0026#39;\u0026#34;) # Disk inode usage (often overlooked) metrics[\u0026#34;inode\u0026#34;] = ssh_run(host, user, \u0026#34;df -i / | tail -1 | awk \u0026#39;{print \\\u0026#34;inode use%:\\\u0026#34;, $5}\u0026#39;\u0026#34;) Improve Your Prompt for Better Analysis Report quality depends largely on prompt design. Some improvements:\nAdd historical comparison (if you saved yesterday\u0026rsquo;s report):\nprompt = f\u0026#34;\u0026#34;\u0026#34;Today\u0026#39;s report:\\n{today_report}\\n\\nYesterday\u0026#39;s report:\\n{yesterday_report}\\n\\nCompare the changes...\u0026#34;\u0026#34;\u0026#34; Highlight specific concerns:\nprompt = f\u0026#34;\u0026#34;\u0026#34;...Pay special attention to disk usage approaching capacity and whether xray/hysteria services are online...\u0026#34;\u0026#34;\u0026#34; Request structured output:\nprompt = f\u0026#34;\u0026#34;\u0026#34;...Return as JSON with fields: status (ok/warning/critical), issues (list), suggestions (list)...\u0026#34;\u0026#34;\u0026#34; Sample Report Daily Cluster Audit Cluster status normal. All servers have nginx and xray running. aws-hk disk at 67%, healthy range. aws-us disk at 45%, plenty of room. home-1 has 2 kernel warnings in recent logs—check dmesg to confirm if disk I/O issue. === Cluster Audit Report 2026-04-15 08:00 === [aws-hk] x.x.x.x Load: 0.12 0.08 0.05 Memory: total: 2.0G used: 812M free: 892M Disk: total: 20G used: 13G avail: 6.1G use%: 68% Uptime: up 47 days, 3 hours ✓ nginx: active ✓ xray: active ... → See Gemini CLI in Quant Workflows → See Recovering a VPS After an IP Block\n📷 Hero · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/gemini-cli-server-audit/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Close-up of DeepSeek AI chat interface on a laptop screen in\" loading=\"lazy\" src=\"/images/gemini-cli-server-audit-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eManaging multiple VPS means one thing: you need to check their status every single day. Disk filling up, services crashing, memory spiking—catch these early or they become production incidents.\u003c/p\u003e\n\u003cp\u003eThis post covers a practical solution: \u003cstrong\u003ePython script SSH\u0026rsquo;s into each server, collects metrics → Gemini CLI analyzes for anomalies → Telegram Bot sends a daily report\u003c/strong\u003e.\u003c/p\u003e","title":"Using Gemini CLI to automatically inspect server clusters: Python + SSH + Telegram push hands-on guide"},{"content":" My node suddenly went offline, and my first thought was that the IP address had been blocked. However, there are different types of blocks, and each requires a different approach. Haphazard actions can waste a lot of time, so this article clarifies the troubleshooting and recovery process.\nStep One: Confirm if it\u0026rsquo;s Truly Blocked An unreachable node isn\u0026rsquo;t always due to an IP block. First, rule out other possibilities:\n# Ping your VPS public IP directly from your local machine ping your_VPS_IP # If ping works but the proxy doesn\u0026#39;t, it might be a port issue curl -v --connect-timeout 10 https://your_VPS_IP:443 Judging Various Scenarios:\nPhenomenon Possible Cause ping timeout, traceroute breaks at a hop within China IP blocked by firewall (most common) ping works, but proxy protocol fails to connect Port/protocol blocked, IP not blocked SSH connects, but proxy fails Proxy service process crashed Nothing pings, SSH also fails VPS downtime or account overdue First, use online tools to test if the IP is globally reachable:\nIPIP.net: https://www.ipip.net/ip.html → Enter IP → Check \u0026ldquo;China Reachability\u0026rdquo; itdog.cn: Multi-node speed test, check connectivity from various provinces in China If the tools show ping timeouts from multiple provinces in China, it\u0026rsquo;s generally confirmed that the IP has been blocked.\nStep Two: Determine the Type of Block The severity of the block determines the handling method:\nType One: TCP Port Block (Lightest) Manifestation: Specific ports (e.g., 443) are inaccessible, but SSH (22 or custom port) can still connect.\nSolution: Change the port or switch protocols. For example, if you were using 443, switch to 8443 or another port.\n# SSH in and change the Xray port # Modify the configuration file, change the \u0026#39;port\u0026#39; in \u0026#39;inbounds\u0026#39; systemctl restart xray Type Two: IP Block (Common) Manifestation: All TCP connections time out, ICMP (ping) also times out, but the IP is reachable from outside China.\nSolution: Change the IP address.\nType Three: IP + Port Dual Block (More Severe) Manifestation: Similar to Type Two, but changing the port doesn\u0026rsquo;t help. This usually occurs after using protocols with obvious characteristics (pure TLS without obfuscation).\nSolution: Change the IP address, and simultaneously change the protocol (use VLESS + REALITY or Hysteria2, which are harder to detect).\nType Four: Entire IP Segment Block (Most Severe) Manifestation: Multiple IPs within the same /24 segment are inaccessible. This usually happens when a data center\u0026rsquo;s IP range is blocked in bulk.\nSolution: Change VPS providers or use a native IP provider (e.g., DMIT\u0026rsquo;s CN2 GIA, where the probability of IP blocking is lower).\nStep Three: IP Replacement Operation DMIT DMIT supports paid IP replacement, with prices varying by plan.\nLog in to the DMIT control panel Go to the corresponding VPS → Look for \u0026ldquo;Change IP\u0026rdquo; or submit a support ticket If there\u0026rsquo;s no direct IP change option in the control panel, submit a support ticket explaining that the IP has been blocked and request a replacement. When submitting a ticket, state directly: \u0026ldquo;My VPS IP (your IP) seems to be blocked from Mainland China. Could you please help me change the IP address? I\u0026rsquo;m willing to pay the change fee.\u0026rdquo;\nDMIT\u0026rsquo;s response time is usually within a few hours, and paid IP changes are typically processed on the same day.\nTencent Cloud International Control Panel → Instances → Change Public IP (Elastic IP Binding/Unbinding) Tencent Cloud supports direct Elastic IP replacement. New IPs are randomly assigned, and with luck, you might get a clean one.\nBandwagonHost BandwagonHost offers a paid IP change service:\nLog in to the control panel Go to the VPS management page → \u0026ldquo;IP Addresses\u0026rdquo; Click \u0026ldquo;Request IP change\u0026rdquo; and fill in the reason. The price is approximately $8-10 per change, with waiting times ranging from 1-7 days.\nAWS / Other Clouds AWS Elastic IPs (EIPs) can be changed at any time, but new IPs still come from AWS\u0026rsquo;s IP ranges, so the blocking probability remains similar. A better option is to use CloudFront or switch to a different regional node.\nStep Four: Restore Node Configuration After changing the IP, existing configurations may need to be updated:\nUpdate DNS Resolution If your node uses a domain name (e.g., node.yourdomain.com), update the DNS A record to point to the new IP:\n# Use the CF API or change directly in the Cloudflare control panel # Wait for DNS to take effect (1-5 minutes, depending on TTL) Update Client Configuration If connecting directly via IP (without a domain), you need to update the server IP for all clients:\nMobile clients: Re-edit node configuration Mihomo subscription: If using automatic subscription, update and pull after refreshing the subscription Manual configuration: Directly modify the IP field Verify New Node Availability # Check the latency of the new IP ping new_IP # Test if the proxy is working correctly curl -x your_proxy_protocol://new_IP:port https://api.ipify.org Preventive Measures Instead of waiting for a block to happen, it\u0026rsquo;s better to take preventive measures:\nChoose CN2 GIA or Native IP Providers: DMIT\u0026rsquo;s HK / US Premium lines use CN2 GIA, offering much more stable IPs than regular VPS, with a lower probability of being blocked. → Register DMIT\nMulti-node backup: Maintain at least 2 nodes, one primary and one backup. When the primary node is blocked, switch to the backup node while simultaneously working on restoring the primary.\nUse harder-to-detect protocols: Xray VLESS + REALITY offers better obfuscation than standard VLESS, leading to a lower blocking probability. Hysteria2 uses UDP + QUIC, making it difficult to distinguish from regular video traffic.\nChange ports: 443 is a frequently scanned port. Switching to less common ports like 8443, 2053, 2083 can reduce the likelihood of being detected by scanners.\nDo not expose your proxy node\u0026rsquo;s IP to others: Once shared with multiple people, traffic patterns become more obvious, significantly increasing the probability of being blocked.\n→ See DMIT VPS Purchase Guide → See Xray VLESS XTLS Complete Setup → See Hysteria2 Setup Tutorial\n📷 Cover image · Generated by Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/vps-recovery-after-block/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"System with various wires managing access to centralized res\" loading=\"lazy\" src=\"/images/vps-recovery-after-block-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eMy node suddenly went offline, and my first thought was that the IP address had been blocked. However, there are different types of blocks, and each requires a different approach. Haphazard actions can waste a lot of time, so this article clarifies the troubleshooting and recovery process.\u003c/p\u003e\n\u003ch2 id=\"step-one-confirm-if-its-truly-blocked\"\u003eStep One: Confirm if it\u0026rsquo;s Truly Blocked\u003c/h2\u003e\n\u003cp\u003eAn unreachable node isn\u0026rsquo;t always due to an IP block. First, rule out other possibilities:\u003c/p\u003e","title":"VPS 节点 IP 被封后的完整恢复流程"},{"content":" When accessing Claude or ChatGPT through proxy nodes, you might run into these issues:\nCAPTCHA prompts repeatedly on login Your account flagged for \u0026ldquo;unusual activity\u0026rdquo; Certain features silently restricted API calls are unstable, occasionally returning 403 The root cause of these problems usually isn\u0026rsquo;t the proxy protocol itself, but rather the quality of the exit IP.\nIP Quality Categories Internet IP addresses fall into roughly three categories, each with different \u0026ldquo;trust levels\u0026rdquo;:\nResidential IP\nAssigned by ISPs (telecom carriers, etc.) to ordinary home broadband users Use case: regular home internet browsing Perceived as genuine users by AI services Datacenter IP\nIP ranges operated by cloud vendors like AWS, GCP, Azure, Vultr, and DigitalOcean These IP ranges are publicly known — any service can check whether an IP belongs to a cloud provider Distinctive pattern: many different accounts accessing from the same /24 subnet Proxy/VPN IP\nCommercial proxy service IP pools Heavily used and lowest reputation AI Services Risk Control Logic AI service risk control isn\u0026rsquo;t simply \u0026ldquo;block this IP\u0026rdquo; — it\u0026rsquo;s differentiated treatment based on IP quality:\nRequest arrives → IP quality check ├─ Residential IP → normal processing ├─ Datacenter IP → increased CAPTCHA frequency / restricted features └─ Known proxy IP → rejection / forced re-verification This explains why even if your node \u0026ldquo;can connect,\u0026rdquo; the experience may still be degraded: features run at reduced capacity rather than outright blocking.\nCommon IP quality lookup tools:\nVisit these sites to check your exit IP\u0026rsquo;s quality rating:\nip.sb — shows basic IP information ipinfo.io — shows ASN (Autonomous System Number); AWS/GCP ASNs are publicly documented Why Residential IP Works Residential IP advantages:\nASN is a home broadband ASN (like China Telecom\u0026rsquo;s AS4134 or Comcast\u0026rsquo;s AS7922), not a cloud vendor\u0026rsquo;s ASN High IP reputation score: little abuse history Natural geolocation: comes from real homes, not datacenters From an AI service\u0026rsquo;s perspective, requests from residential IPs are indistinguishable from real users.\nPractical Approaches Approach 1: Your Home Broadband Exit (Optimal) If you have home broadband, switch your proxy exit from a VPS to your home IP.\nHow it works:\nYour device (away from home) → proxy server (VPS) → SOCKS5 connection to home router → home broadband exit (genuine residential IP) → AI service Requirements:\nHome software router (OpenWrt/ikuai, etc.) with SOCKS5 port exposed VPS proxy client configured with proper exit chain Pros: completely free, IP is yours, highest reputation\nCons: depends on home broadband stability; if home IP is dynamic, you\u0026rsquo;ll need DDNS\n→ Detailed setup: Surge split rules: AI traffic via residential IP → Detailed setup: mihomo residential IP practical guide\nApproach 2: Commercial Residential Proxy Service If you don\u0026rsquo;t have a stable home broadband exit, purchase a commercial residential proxy service.\nCommon providers:\nIPRoyal: pay-per-bandwidth, static residential IP options available (long-term IP occupancy) Bright Data: established brand, higher price, good stability 922S5: residential SOCKS5 focused, supports country/city selection Configuration is the same as standard SOCKS5 proxy — just replace the proxy address with the provider\u0026rsquo;s.\nGood for: needing a specific country exit (e.g., US residential IP for certain services); no personal home broadband available.\nApproach 3: Domain-Based Routing You don\u0026rsquo;t need all traffic through residential IP — just route AI service traffic separately:\nAI services (api.anthropic.com / api.openai.com) → residential IP other traffic → regular VPS node This minimizes bandwidth pressure on the residential IP and keeps costs manageable.\nVerifying IP Quality After setup, verify your exit IP:\n# Access ipinfo through the residential proxy curl --socks5 proxy-address:port https://ipinfo.io/json Key fields in the response:\norg: should be an ISP (like \u0026ldquo;Comcast Cable\u0026rdquo;), not \u0026ldquo;Amazon Web Services\u0026rdquo; hosting: should be false proxy: should be false If org is still a cloud vendor or proxy is true, your exit is still a datacenter IP — check your routing config.\nSummary Exit type Claude/ChatGPT experience Cost Setup difficulty Datacenter IP (regular VPS) easily triggers verification, features limited low simple Home broadband residential IP same as real user free moderate Commercial residential proxy good, depends on IP pool quality moderate simple → See Surge split rules: AI traffic via residential IP → See mihomo residential IP practical guide\n📷 Hero image · generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/ai-tools-residential-proxy/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A square of aluminum is resting on glass.\" loading=\"lazy\" src=\"/images/ai-tools-residential-proxy-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eWhen accessing Claude or ChatGPT through proxy nodes, you might run into these issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCAPTCHA prompts repeatedly on login\u003c/li\u003e\n\u003cli\u003eYour account flagged for \u0026ldquo;unusual activity\u0026rdquo;\u003c/li\u003e\n\u003cli\u003eCertain features silently restricted\u003c/li\u003e\n\u003cli\u003eAPI calls are unstable, occasionally returning 403\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe root cause of these problems usually isn\u0026rsquo;t the proxy protocol itself, but rather \u003cstrong\u003ethe quality of the exit IP\u003c/strong\u003e.\u003c/p\u003e\n\u003ch2 id=\"ip-quality-categories\"\u003eIP Quality Categories\u003c/h2\u003e\n\u003cp\u003eInternet IP addresses fall into roughly three categories, each with different \u0026ldquo;trust levels\u0026rdquo;:\u003c/p\u003e","title":"Why do AI tools need residential IPs? Principles and practice"},{"content":" REALITY is a transport protocol introduced by Xray in 2023, solving a fundamental weakness of TLS proxies: your certificate is fake. Traditional VLESS+TLS setups require a domain name and Let\u0026rsquo;s Encrypt certificate, but the certificate itself becomes a fingerprint—with no real website behind it, the traffic pattern stands out immediately.\nREALITY\u0026rsquo;s approach is fundamentally different: directly borrow the TLS handshake of a real website. What the server presents to detection systems is the TLS certificate and handshake details of that actual website, indistinguishable from normal traffic.\nHow REALITY Works A normal TLS connection:\nClient → ClientHello (with SNI, e.g., www.apple.com) → Server Server → Certificate (real www.apple.com certificate) → Client REALITY\u0026rsquo;s magic: When the Xray server receives the ClientHello, it forwards the handshake request to the real www.apple.com, obtains the real certificate, and relays it back to the client unchanged.\nTo detection systems in the middle, this looks like a completely legitimate TLS handshake with www.apple.com. It\u0026rsquo;s impossible to distinguish.\nThe actual encrypted communication between client and server is hidden behind this handshake, using Xray\u0026rsquo;s own key pair (identity verified via shortId).\nKey advantages:\nNo domain name required, no certificate needed TLS fingerprint completely borrows from a real website Even active probing of your server port returns normal responses from the target website Prerequisites A VPS (DMIT recommended for low latency on CN2 GIA) → Register with DMIT Latest Xray (currently v25.x) No domain name or certificate required Server Deployment Install Xray bash -c \u0026#34;$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)\u0026#34; @ install Generate Key Pair xray x25519 Output:\nPrivate key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Public key: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy Save both values—you\u0026rsquo;ll need them in the config.\nGenerate Short ID Short ID distinguishes different clients and can be a 0–16 character hexadecimal string:\nopenssl rand -hex 4 # generates 8 chars, e.g., 55470656 openssl rand -hex 8 # generates 16 chars Server Configuration /usr/local/etc/xray/config.json:\n{ \u0026#34;inbounds\u0026#34;: [{ \u0026#34;port\u0026#34;: 443, \u0026#34;protocol\u0026#34;: \u0026#34;vless\u0026#34;, \u0026#34;settings\u0026#34;: { \u0026#34;clients\u0026#34;: [{ \u0026#34;id\u0026#34;: \u0026#34;your-uuid-here\u0026#34;, \u0026#34;flow\u0026#34;: \u0026#34;xtls-rprx-vision\u0026#34; }], \u0026#34;decryption\u0026#34;: \u0026#34;none\u0026#34; }, \u0026#34;streamSettings\u0026#34;: { \u0026#34;network\u0026#34;: \u0026#34;tcp\u0026#34;, \u0026#34;security\u0026#34;: \u0026#34;reality\u0026#34;, \u0026#34;realitySettings\u0026#34;: { \u0026#34;show\u0026#34;: false, \u0026#34;dest\u0026#34;: \u0026#34;www.apple.com:443\u0026#34;, \u0026#34;xver\u0026#34;: 0, \u0026#34;serverNames\u0026#34;: [\u0026#34;www.apple.com\u0026#34;], \u0026#34;privateKey\u0026#34;: \u0026#34;your-private-key\u0026#34;, \u0026#34;shortIds\u0026#34;: [\u0026#34;55470656\u0026#34;, \u0026#34;7a3bc239\u0026#34;] } } }], \u0026#34;outbounds\u0026#34;: [{ \u0026#34;protocol\u0026#34;: \u0026#34;freedom\u0026#34;, \u0026#34;tag\u0026#34;: \u0026#34;direct\u0026#34; }] } Generate a UUID:\nxray uuid Start the Service systemctl enable xray systemctl start xray systemctl status xray SNI (Masquerading Domain) Selection SNI is the most critical REALITY configuration—it directly determines whether your traffic passes detection.\nCharacteristics of a good SNI:\nThe website must actually exist with port 443 always open\nDetection systems may actively visit the domain. If it doesn\u0026rsquo;t exist or port 443 is unreachable, you\u0026rsquo;re immediately exposed. Fast TLS handshake response\nREALITY\u0026rsquo;s handshake needs real-time forwarding to the target website. The closer the target, the better. Recommendation: use a major website in the same region as your VPS. Website with high HTTPS traffic\nYour traffic blends into heavy normal traffic, reducing the chance of individual scrutiny. Recommended SNIs:\nSNI Best Region Notes www.apple.com Global Apple CDN has global nodes, fast response www.cloudflare.com Global CF nodes worldwide www.microsoft.com Global Azure CDN, stable itunes.apple.com Global Apple service, TLS 1.3 addons.mozilla.org Americas/Europe Mozilla CDN Not recommended:\nDomestic Chinese websites (like www.baidu.com)—servers are overseas, high handshake latency Niche websites—port 443 might be unstable SNIs known to be widely used by proxy users—obvious fingerprint Role of Short ID Short ID is how the server verifies client identity.\nHow it works: The Xray client embeds a random value in the session_id field of the ClientHello. The server decrypts it with its private key, checking if the padding contains a valid Short ID.\nLegitimate clients: server returns proxy response Random scanners: server normally forwards to the target website (looks like a normal website) Using multiple Short IDs (recommended): different devices use different IDs. If one device is compromised, you only delete that ID without affecting others.\n\u0026#34;shortIds\u0026#34;: [\u0026#34;55470656\u0026#34;, \u0026#34;7a3bc239\u0026#34;, \u0026#34;a1b2c3d4\u0026#34;] Flow Selection REALITY recommends xtls-rprx-vision:\n\u0026#34;flow\u0026#34;: \u0026#34;xtls-rprx-vision\u0026#34; Vision mode can distinguish TLS-in-TLS traffic, preventing active probing from exposing proxy characteristics. It works without it, but detection resistance is slightly weaker.\nFirewall Configuration # Ubuntu UFW ufw allow 443/tcp ufw enable # Or with iptables iptables -A INPUT -p tcp --dport 443 -j ACCEPT Port 443 is recommended—it blends naturally with HTTPS traffic.\nVerify Deployment After configuring the client, test connectivity:\n# Direct curl test (requires client proxy configured) curl -x vless://uuid@your-vps:443?security=reality\u0026amp;... https://api.ipify.org Simpler approach: configure the node in mihomo or Surge and visit whatismyip.com to confirm the IP is your VPS.\nFrequently Asked Questions Q: Server startup error failed to read config Check JSON syntax, verify with jq . config.json.\nQ: Client connection timeout\nCheck firewall: ss -tlnp | grep 443 Verify SNI target is reachable: curl -I https://www.apple.com (from your VPS) Verify privateKey and publicKey match Q: Connection works but speed is slow SNI target is too far from the VPS, causing high handshake latency. Switch to a major website in the same region as your SNI.\nQ: Can I use a non-443 port? Yes, but it\u0026rsquo;s easier to identify. If using a non-standard port, the SNI target must use the same port:\n\u0026#34;dest\u0026#34;: \u0026#34;www.apple.com:8443\u0026#34;, \u0026#34;serverNames\u0026#34;: [\u0026#34;www.apple.com\u0026#34;] → See Client configuration: mihomo / Surge with REALITY → See DMIT VPS Purchase Guide\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/xray-reality-complete-guide/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Close-up of wooden blocks spelling \u0026rsquo;encryption\u0026rsquo;, symbolizing\" loading=\"lazy\" src=\"/images/xray-reality-complete-guide-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eREALITY is a transport protocol introduced by Xray in 2023, solving a fundamental weakness of TLS proxies: \u003cstrong\u003eyour certificate is fake\u003c/strong\u003e. Traditional VLESS+TLS setups require a domain name and Let\u0026rsquo;s Encrypt certificate, but the certificate itself becomes a fingerprint—with no real website behind it, the traffic pattern stands out immediately.\u003c/p\u003e\n\u003cp\u003eREALITY\u0026rsquo;s approach is fundamentally different: \u003cstrong\u003edirectly borrow the TLS handshake of a real website\u003c/strong\u003e. What the server presents to detection systems is the TLS certificate and handshake details of that actual website, indistinguishable from normal traffic.\u003c/p\u003e","title":"Xray REALITY Protocol Complete Tutorial: Principles, Server Deployment, Anti-Detection Points"},{"content":" 💡 Mainland China Notice: Binance.com isn\u0026rsquo;t directly accessible from mainland China; you\u0026rsquo;ll need a VPN or network tool. Fiat on-ramps don\u0026rsquo;t support bank cards directly; the primary route is C2C (USDT↔CNY) trading.\nOne of the biggest risks in live quant trading isn\u0026rsquo;t strategy losses—it\u0026rsquo;s a leaked API Key leading to account theft. Accidentally pushing your key to GitHub, a VPS getting compromised, or logs being exposed can wipe your account clean instantly. Any single mistake can be catastrophic.\nThis article covers the complete process of securing your Binance API configuration.\nAPI Key Permission Types Binance API Keys have three permission classes, configured according to the principle of least privilege:\nPermission Description Needed for Quant? Read View account, prices, history ✅ Yes Trading Place/cancel orders ✅ Yes (live trading) Withdrawal Transfer to external addresses ❌ Never enable Never enable withdrawal permissions. Your quant program doesn\u0026rsquo;t need this. If your key leaks with withdrawal enabled, your assets can be transferred out directly.\nCreating an API Key Log in to Binance Top right avatar → API Management Click Create API Select System Generated Enter an API label (recommend naming by purpose, like quant-aws-hk) Complete 2FA verification After creation, the page displays:\nAPI Key (public key, can view multiple times) Secret Key (private key, shown only once, save it immediately) ⚠️ Secret Key only displays once at creation. If you don\u0026rsquo;t save it, you\u0026rsquo;ll have to delete and recreate.\nConfiguring IP Whitelist (The Most Critical Security Measure) IP whitelisting is the most critical security mechanism: even if your API Key leaks, attackers can\u0026rsquo;t use it from other IPs.\nSetup steps:\nClick into your newly created API Key Find Restrict Access to Trusted IPs Enter your VPS IP address (e.g., 43.199.32.92) If multiple machines use the same key, add each one Recommended format: Single IP: 43.199.32.92 Important notes:\nThis is your VPS\u0026rsquo;s outbound IP, not your local computer IP Update it every time your VPS gets a new IP (AWS restarts can change it) Using an Elastic IP / static IP is more stable Permission Configuration On the API Key settings page, enable only:\n✅ Read ✅ Futures Trading (if running futures strategies) ✅ Spot \u0026amp; Margin Trading (if running spot strategies) ❌ Withdrawal (never enable) ❌ Universal Transfer (don\u0026#39;t enable if you don\u0026#39;t need it) ❌ Deposit/Withdraw (don\u0026#39;t enable) Safely Storing API Keys Wrong Approach (High Risk) # ❌ Hardcoded plaintext in code api_key = \u0026#34;abc123xyz...\u0026#34; api_secret = \u0026#34;def456uvw...\u0026#34; # ❌ Written in .env file but .env committed to git git add .env git commit -m \u0026#34;add config\u0026#34; Right Approach 1: Environment Variables # Set in server\u0026#39;s ~/.bashrc or ~/.profile export BINANCE_API_KEY=\u0026#34;your_api_key\u0026#34; export BINANCE_SECRET_KEY=\u0026#34;your_secret_key\u0026#34; source ~/.bashrc Read in Python:\nimport os api_key = os.environ.get(\u0026#39;BINANCE_API_KEY\u0026#39;) api_secret = os.environ.get(\u0026#39;BINANCE_SECRET_KEY\u0026#39;) if not api_key or not api_secret: raise ValueError(\u0026#34;API keys not found in environment variables\u0026#34;) Right Approach 2: Separate Secrets File (Not in git) # Create secrets file cat \u0026gt; ~/.secrets/binance.env \u0026lt;\u0026lt; \u0026#39;EOF\u0026#39; BINANCE_API_KEY=your_api_key BINANCE_SECRET_KEY=your_secret_key EOF chmod 600 ~/.secrets/binance.env # Read in Python from dotenv import load_dotenv load_dotenv(os.path.expanduser(\u0026#39;~/.secrets/binance.env\u0026#39;)) Add to .gitignore:\n.env *.env secrets/ .secrets/ Right Approach 3: systemd Service Environment Variables If your quant program is managed by systemd, use systemd\u0026rsquo;s environment variable injection:\n# Create environment file cat \u0026gt; /etc/systemd/system/quant-strategy.env \u0026lt;\u0026lt; \u0026#39;EOF\u0026#39; BINANCE_API_KEY=your_api_key BINANCE_SECRET_KEY=your_secret_key EOF chmod 600 /etc/systemd/system/quant-strategy.env Reference it in your service file:\n[Service] EnvironmentFile=/etc/systemd/system/quant-strategy.env ExecStart=/usr/bin/python3 /opt/quant/strategy.py Preventing Accidental Key Leaks Check Git Commit History If you\u0026rsquo;ve accidentally committed a key to Git:\n# Search repo history for sensitive info git log --all --full-history -- \u0026#34;**/*.py\u0026#34; | xargs grep -l \u0026#34;api_key\\|secret\u0026#34; # Or use dedicated tools pip install trufflehog trufflehop git file://. --only-verified If you find a leak, immediately delete that key from Binance and create a new one.\nRotate Keys Regularly Rotate your API Keys every 3-6 months:\nCreate a new key Update code and environment variables to use the new key Verify the new key works correctly Delete the old key Monitor Unusual API Calls On the Binance API Management page, you can see call logs for each key. Check regularly for:\nUnexpected IPs making calls Requests during non-strategy time windows Any withdrawal-related attempts API Rate Limiting \u0026amp; Responsible Use Binance enforces rate limits on API calls; exceeding them gets your IP banned:\nLimit Type Default Request rate 1200 requests/minute (weight-based) Order rate 50 orders/10 seconds (spot) WebSocket connections Max 5 per account Your quant code should handle rate limiting:\nimport time from binance.exceptions import BinanceAPIException def safe_api_call(func, *args, **kwargs): \u0026#34;\u0026#34;\u0026#34;API call with retry logic\u0026#34;\u0026#34;\u0026#34; max_retries = 3 for i in range(max_retries): try: return func(*args, **kwargs) except BinanceAPIException as e: if e.code == -1003: # Rate limited wait_time = 60 * (i + 1) print(f\u0026#34;Rate limited, waiting {wait_time}s...\u0026#34;) time.sleep(wait_time) else: raise raise Exception(\u0026#34;Max retries exceeded\u0026#34;) Testnet for Development \u0026amp; Testing Before deploying new strategies, test them on testnet first—never on a live account:\nTestnet URL: testnet.binance.vision Free testnet coins, use freely API interfaces match mainnet exactly; code migrates directly # Switch to testnet from binance.client import Client client = Client( api_key=os.environ[\u0026#39;BINANCE_TESTNET_KEY\u0026#39;], api_secret=os.environ[\u0026#39;BINANCE_TESTNET_SECRET\u0026#39;], testnet=True # Key parameter ) Related reading:\nWriting Quant Strategies with Claude Pionex Grid Trading in Practice Stop-Loss Design for Quant Strategies 📷 Cover image · Flux Schnell AI generation · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/binance-api-security/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e💡 \u003cstrong\u003eMainland China Notice\u003c/strong\u003e: Binance.com isn\u0026rsquo;t directly accessible from mainland China; you\u0026rsquo;ll need a VPN or network tool. Fiat on-ramps don\u0026rsquo;t support bank cards directly; the primary route is C2C (USDT↔CNY) trading.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"An unlocked padlock rests on a computer keyboard.\" loading=\"lazy\" src=\"/images/binance-api-security-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eOne of the biggest risks in live quant trading isn\u0026rsquo;t strategy losses—it\u0026rsquo;s a leaked API Key leading to account theft. Accidentally pushing your key to GitHub, a VPS getting compromised, or logs being exposed can wipe your account clean instantly. Any single mistake can be catastrophic.\u003c/p\u003e","title":"Binance API security configuration: A complete guide to preventing theft in quantitative trading"},{"content":"\nMany people entering the crypto market face this initial question: should they straight-up DCA into BTC, or use a grid trading bot? Both approaches have their passionate advocates and genuine drawbacks.\nThis article breaks down both strategies from the perspective of an everyday investor.\nWhat Is BTC DCA? DCA (Dollar-Cost Averaging): Buy a fixed amount of BTC at fixed intervals, regardless of price.\nExample: Buy $100 of BTC every week for 2 years. When prices are high, you buy less; when they\u0026rsquo;re low, you buy more. Over time, your average cost becomes reasonable.\nThe process is dead simple:\nBinance supports automated DCA plans—set it once and it runs automatically No need to watch the market Each execution takes 5 minutes What Is Grid Trading? Grid trading: Set multiple buy and sell orders within a defined price range. As prices oscillate within that range, you profit from buying low and selling high repeatedly.\nExample: BTC oscillates between 60,000–80,000 USDT. You set 20 grids, spaced 1,000 USDT apart. Each time the price drops 1,000, you buy; each time it rises 1,000, you sell—rinse and repeat for profits.\nPionex includes a free grid bot—it\u0026rsquo;s the simplest grid tool available today.\nHead-to-Head Comparison Dimension DCA Grid Trading Best market conditions Long-term uptrend Range-bound / sideways Worst market conditions Range-bound sideways (keep buying but price stagnates) Single-direction downtrend (losses pile up) Operational complexity Very low Medium (parameter tuning required) Capital lock-up Staged over time All at once Psychological stress Low (long-term holding) Higher (need to monitor range) Income source BTC price appreciation Price oscillation spreads Maximum risk Extended BTC downtrend Price breaks below grid range, losses mount Real-World Returns Analysis DCA\u0026rsquo;s Historical Performance Taking BTC as an example, buying via DCA over any 4-year period in history has delivered positive returns:\nPeriod Start Year End Year Annualized Return (est.) 4 years 2017 2021 +1,200% 4 years 2018 2022 +400% 4 years 2019 2023 +350% 4 years 2020 2024 +600% Critical assumption: you have to stick with it and not panic-sell during downturns.\nDuring bear markets (BTC dropping 70–80%), your DCA account will be deeply underwater. Most people can\u0026rsquo;t handle this and sell early, locking in losses instead.\nGrid Trading\u0026rsquo;s Real-World Performance BTC\u0026rsquo;s 2023–2024 range-bound action (40,000–70,000 USDT) was perfect for grid trading:\nPrices bounced within the range repeatedly, and your grid captured profits on every oscillation Annualized returns depend on your settings, but typically hit 20–80% APY But here\u0026rsquo;s the catch: If BTC eventually breaks out and rallies to 100K, your grid has been selling the whole way—you miss the bulk of the move. Risk Comparison DCA\u0026rsquo;s Risks Core risk: BTC\u0026rsquo;s price risk itself\nIf BTC crashes and stays down for 5–10 years straight (an extreme scenario), DCA loses money.\nBut grid trading faces this same risk—and in a one-way downtrend, grids bleed losses faster because you keep buying the whole way down.\nGrid Trading\u0026rsquo;s Risks 1. Price breaks below the grid range\nBTC crashes from 70,000 to 30,000. Your grids were set at 60,000–80,000. Once it drops below, the bot shuts down—you\u0026rsquo;re left holding a position you built at the highs, with heavy losses.\n2. You miss a major rally\nBTC rockets from 60,000 straight to 100,000. Your grid has been selling this whole time within the 60,000–80,000 range. You end up with minimal holdings and miss most of the gains.\n3. Wrong parameter tuning\nSet the range too tight or the grids too sparse, and returns are underwhelming. Set it too wide and each grid\u0026rsquo;s spread is so small that fees eat your profit.\nWhich Strategy to Pick Go for DCA if:\nYou believe in BTC\u0026rsquo;s long-term value and have a 3–5+ year horizon You don\u0026rsquo;t have time to monitor and want to \u0026ldquo;set and forget\u0026rdquo; Your capital is modest—a few hundred to a few thousand dollars per month You can\u0026rsquo;t tolerate the risk of misconfiguring grid parameters Go for grid trading if:\nYou believe the market is in a range-bound phase You have enough capital to set a sensible grid range You can accept missing out on a major rally (sell orders are part of the game) You\u0026rsquo;re willing to learn parameter tuning and adjust as needed Do both (recommended):\nMy own approach:\nUse DCA to build a core BTC position (long-term hold, untouched) Use a portion for grid trading to profit from oscillations Split: 60% core position, 40% for grids This way, grids profit during sideways action, and your core position gains during uptrends—you\u0026rsquo;re hedged for both scenarios.\nImplementation Guide How to set up DCA (Binance) Binance App → DCA Select BTC Set your amount and frequency (daily, weekly, or monthly) Choose your funding currency (USDT) Confirm and activate Recommended frequency: weekly DCA—smoother cost averaging than daily, more responsive than monthly.\nHow to set up grid trading (Pionex) Sign up for Pionex Choose the BTC/USDT grid bot Configure parameters: Price range: Base it on recent oscillations, with some buffer Grid count: 20–50 grids, don\u0026rsquo;t go too sparse Capital: 30–50% of your account balance, never go all-in For specific parameter tuning and risk management, see: Pionex Grid Trading in Practice\nHow Polaris Strategy Differs from Both The Polaris strategy I run is a third approach: trend following.\nStrategy Best conditions Goal DCA Long-term uptrend Accumulate position Grid trading Range-bound sideways Profit from spreads Trend following Directional markets Ride big trends All three are fundamentally different money-making strategies—mix and match them based on market conditions.\nFurther reading:\nPionex Grid Trading in Practice Polaris Strategy Live Tracking How to Design Stop Loss for Quant Strategies 📷 Cover image · Flux Schnell AI generated · Panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/btc-dca-vs-grid/","summary":"\u003cp\u003e\u003cimg alt=\"a person reading a newspaper next to a cup of coffee\" loading=\"lazy\" src=\"/images/btc-dca-vs-grid-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eMany people entering the crypto market face this initial question: should they straight-up DCA into BTC, or use a grid trading bot? Both approaches have their passionate advocates and genuine drawbacks.\u003c/p\u003e\n\u003cp\u003eThis article breaks down both strategies from the perspective of an everyday investor.\u003c/p\u003e\n\u003ch2 id=\"what-is-btc-dca\"\u003eWhat Is BTC DCA?\u003c/h2\u003e\n\u003cp\u003eDCA (Dollar-Cost Averaging): Buy a fixed amount of BTC at fixed intervals, regardless of price.\u003c/p\u003e","title":"BTC Dollar-Cost Averaging vs Grid Trading: Which is More Suitable for Ordinary People"},{"content":" Anthropic\u0026rsquo;s current flagship models are Opus 4.6 (most powerful), Sonnet 4.6 (balanced), and Haiku 4.5 (fastest and cheapest). Many people use Claude for everything with Opus, resulting in API bills 3–5× higher.\nThis article explains from a practical usage perspective: when to use Opus, when to use Sonnet, and when Haiku is worth considering.\nPricing Comparison (April 2026) Model Input Price Output Price Relative Cost claude-haiku-4-5 $0.80/M tokens $4/M tokens 1× claude-sonnet-4-6 $3/M tokens $15/M tokens ~4× claude-opus-4-6 $15/M tokens $75/M tokens ~19× Opus costs nearly 20× more than Haiku. For the same task, using Opus when Sonnet can handle it is pure waste.\nYou can access GitHub Copilot Pro+ ($19/month) for limited Sonnet and Opus quotas, with overage billed at API rates.\nSpeed Comparison Benchmarks (April 2026, complex code generation):\nModel Time to First Token Generation Speed Haiku 4.5 ~0.5s ~120 tokens/s Sonnet 4.6 ~1.2s ~80 tokens/s Opus 4.6 ~2.5s ~40 tokens/s Opus isn\u0026rsquo;t just more expensive—it\u0026rsquo;s slower. This is very noticeable in conversational interactions.\nHow Big Is the Quality Gap, Really? Bottom line: For most everyday tasks, there\u0026rsquo;s no meaningful difference between Sonnet and Opus results.\nOpus\u0026rsquo;s clear wins:\nComplex multi-step reasoning: Tasks requiring simultaneous derivation across multiple constraints, like complex mathematical proofs or multi-factor decision analysis Long-document comprehension: 100K+ token contexts where Opus\u0026rsquo;s information integration is stronger Subtle tone and creative writing: Scenarios requiring high stylistic control Complex programming: System architecture design and intricate algorithm implementation where Opus has lower error rates Scenarios where Sonnet is more than sufficient (80%+ of everyday use):\nCode debugging and feature implementation Article writing and editing Data analysis and summarization General Q\u0026amp;A and explanation Script writing and configuration files Everyday Claude Code operational tasks Real-World Scenario Reference Task Type Recommended Model Reason Server maintenance operations Sonnet Clear operations, no deep reasoning needed Writing blog posts Sonnet Quality is sufficient, faster speed Complex quant strategy design Opus Requires multi-step mathematical reasoning Code review Sonnet Catches most bugs Architecture design discussion Opus Requires weighing multiple approaches Translation Sonnet / Haiku Haiku is sufficient for simple tasks Summarization Haiku Cheapest, minimal quality difference Regular expressions Haiku Simple deterministic tasks Data format conversion Haiku No complex reasoning needed Complex SQL optimization Opus Requires deep understanding of execution plans Writing unit tests Sonnet Sufficient, doesn\u0026rsquo;t need Opus Long document analysis Opus Opus is more reliable with 100K+ token context Switching Models in Claude Code Claude Code CLI supports switching models within a session:\n# Specify model at startup claude --model claude-sonnet-4-6 # Switch models in session (enter at prompt) /model claude-opus-4-6 /model claude-sonnet-4-6 /model claude-haiku-4-5-20251001 My actual usage:\nDefault to Sonnet: Daily operations, writing code, checking documentation Switch to Opus for: Strategy logic design, complex architecture discussions, critical decisions requiring high confidence Switch to Haiku for: Batch processing, format conversion, simple scripts Cost-Saving Tip: Prompt Caching Claude API supports Prompt Caching—repeated system prompts and context are charged only once:\nimport anthropic client = anthropic.Anthropic() response = client.messages.create( model=\u0026#34;claude-sonnet-4-6\u0026#34;, max_tokens=1024, system=[ { \u0026#34;type\u0026#34;: \u0026#34;text\u0026#34;, \u0026#34;text\u0026#34;: \u0026#34;You are a quant trading assistant. Here\u0026#39;s strategy background...\u0026#34;, \u0026#34;cache_control\u0026#34;: {\u0026#34;type\u0026#34;: \u0026#34;ephemeral\u0026#34;} # Cache this section } ], messages=[{\u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: \u0026#34;Analyze the recent signals...\u0026#34;}] ) The first call writes to the cache; subsequent calls hitting the cache have token prices reduced by 90%. For scenarios with long, fixed system prompts, savings are substantial.\nFor detailed API cost-saving techniques, see: Claude API Cost-Saving Guide\nMy Cost-Control Takeaways After using Claude Code for several months, here\u0026rsquo;s what I\u0026rsquo;ve learned:\nDefault to Sonnet, don\u0026rsquo;t default to Opus When Sonnet gives unsatisfactory results, switch to Opus and retry—don\u0026rsquo;t use Opus preemptively Use Haiku for batch processing: Scraped data needing classification? Thousands of logs needing key info extraction? Haiku suffices—save 90% Spend Copilot Pro+ Opus quota wisely: Don\u0026rsquo;t waste it early in the month on simple tasks—save it for scenarios that truly need it Following this strategy, my API costs have dropped ~65% from the start while subjective quality perception hasn\u0026rsquo;t noticeably declined.\nFurther Reading:\nClaude API Cost-Saving Guide Claude Code Real-World Usage Experience OpenClaw + Copilot Parameter Tuning Using Claude to Analyze Pionex Live Trading Logs — Sonnet is sufficient for data analysis; save Opus quota for deep reviews Saved API costs can become \u0026lsquo;capital\u0026rsquo;: Generating steady ~$20/month in returns through quant tools isn\u0026rsquo;t hard. See how Pionex basis arbitrage achieves 14% APY; sign up for Pionex with a minimum $100 to test it out.\n📷 Cover image · Generated with Flux Schnell AI · Panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/claude-sonnet-vs-opus/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Artificial intelligence concept within a human head\" loading=\"lazy\" src=\"/images/claude-sonnet-vs-opus-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eAnthropic\u0026rsquo;s current flagship models are \u003cstrong\u003eOpus 4.6\u003c/strong\u003e (most powerful), \u003cstrong\u003eSonnet 4.6\u003c/strong\u003e (balanced), and \u003cstrong\u003eHaiku 4.5\u003c/strong\u003e (fastest and cheapest). Many people use Claude for everything with Opus, resulting in API bills 3–5× higher.\u003c/p\u003e\n\u003cp\u003eThis article explains from a practical usage perspective: when to use Opus, when to use Sonnet, and when Haiku is worth considering.\u003c/p\u003e\n\u003ch2 id=\"pricing-comparison-april-2026\"\u003ePricing Comparison (April 2026)\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eModel\u003c/th\u003e\n          \u003cth\u003eInput Price\u003c/th\u003e\n          \u003cth\u003eOutput Price\u003c/th\u003e\n          \u003cth\u003eRelative Cost\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eclaude-haiku-4-5\u003c/td\u003e\n          \u003ctd\u003e$0.80/M tokens\u003c/td\u003e\n          \u003ctd\u003e$4/M tokens\u003c/td\u003e\n          \u003ctd\u003e1×\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eclaude-sonnet-4-6\u003c/td\u003e\n          \u003ctd\u003e$3/M tokens\u003c/td\u003e\n          \u003ctd\u003e$15/M tokens\u003c/td\u003e\n          \u003ctd\u003e~4×\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eclaude-opus-4-6\u003c/td\u003e\n          \u003ctd\u003e$15/M tokens\u003c/td\u003e\n          \u003ctd\u003e$75/M tokens\u003c/td\u003e\n          \u003ctd\u003e~19×\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e\u003cstrong\u003eOpus costs nearly 20× more than Haiku.\u003c/strong\u003e For the same task, using Opus when Sonnet can handle it is pure waste.\u003c/p\u003e","title":"Claude Sonnet vs Opus: How to choose a model without wasting money"},{"content":"\nThe previous article on multi-gateway home network architecture covered the overall design but didn\u0026rsquo;t dive into the details of writing rules. This post focuses specifically on Mihomo\u0026rsquo;s traffic splitting rules, breaking down everything from syntax basics to practical configuration templates.\nBasic Concepts of Rules Mihomo controls traffic splitting through the rules field. Each rule follows this format:\nrule-type,match-value,proxy-group For example:\nrules: - DOMAIN-SUFFIX,google.com,Proxy - IP-CIDR,192.168.0.0/16,DIRECT - GEOIP,CN,DIRECT - MATCH,Proxy # fallback rule — matches all remaining traffic Rules are matched in order — the first rule that matches is executed, and subsequent rules are skipped. Order is critical.\nRule Types Explained Domain-Based Rules # Exact domain match - DOMAIN,www.google.com,Proxy # Match domain and all subdomains (most common) - DOMAIN-SUFFIX,google.com,Proxy # Covers: google.com / mail.google.com / api.google.com # Domain keyword (poor performance, rarely used) - DOMAIN-KEYWORD,google,Proxy # Matches any domain containing \u0026#34;google\u0026#34; # Regular expressions (most flexible, slowest) - DOMAIN-REGEX,^.*\\.google\\.com$,Proxy Priority recommendation: DOMAIN \u0026gt; DOMAIN-SUFFIX \u0026gt; DOMAIN-KEYWORD\nPlace more specific rules earlier for better performance and to avoid false matches.\nIP-Based Rules # IPv4 CIDR - IP-CIDR,192.168.0.0/16,DIRECT - IP-CIDR,10.0.0.0/8,DIRECT - IP-CIDR,172.16.0.0/12,DIRECT # IPv6 CIDR - IP-CIDR6,::1/128,DIRECT # Note: IP-CIDR triggers DNS resolution, which impacts performance on traffic before pure domain rules # It\u0026#39;s recommended to add the no-resolve suffix to skip DNS resolution and match the connection IP directly - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve GeoIP Rules Route traffic based on the country where the IP is registered:\n# Mainland China IPs — direct connection - GEOIP,CN,DIRECT # Private IPs — direct connection - GEOIP,PRIVATE,DIRECT,no-resolve The GeoIP database comes from MaxMind and is automatically updated by Mihomo. It\u0026rsquo;s not 100% accurate, but sufficient for most scenarios.\nProcess Rules (Desktop Clients Only) Route traffic based on the name of the process making the request:\n# Specific apps through proxy - PROCESS-NAME,curl,Proxy - PROCESS-NAME,wget,Proxy # Development tools — direct connection - PROCESS-NAME,node,DIRECT Port Rules # Specific destination port - DST-PORT,80,DIRECT - DST-PORT,443,Proxy # Port range - DST-PORT,3000-3999,DIRECT Fallback Rule # MATCH must go last — it matches all traffic not caught by previous rules - MATCH,Proxy Rule Providers (Rule Sets) Writing every domain manually isn\u0026rsquo;t practical. Mihomo supports importing external rule providers:\nrule-providers: reject: type: http behavior: domain url: \u0026#34;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt\u0026#34; path: ./ruleset/reject.yaml interval: 86400 # Update once daily direct: type: http behavior: domain url: \u0026#34;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt\u0026#34; path: ./ruleset/direct.yaml interval: 86400 proxy: type: http behavior: domain url: \u0026#34;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt\u0026#34; path: ./ruleset/proxy.yaml interval: 86400 gfw: type: http behavior: domain url: \u0026#34;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt\u0026#34; path: ./ruleset/gfw.yaml interval: 86400 cn-cidr: type: http behavior: ipcidr url: \u0026#34;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt\u0026#34; path: ./ruleset/cncidr.yaml interval: 86400 rules: - RULE-SET,reject,REJECT # ad/malware domain blocking - RULE-SET,direct,DIRECT # known direct domains - RULE-SET,proxy,Proxy # known proxy domains - RULE-SET,gfw,Proxy # GFW-blocked domains - RULE-SET,cn-cidr,DIRECT # mainland China IP ranges - GEOIP,CN,DIRECT - MATCH,Proxy Loyalsoldier/clash-rules is the best-maintained rule set available today, with comprehensive coverage and regular updates.\nComplete Configuration Template Below is the configuration structure I actually use, suitable for multi-node + fine-grained traffic splitting scenarios:\n# ── Proxy Nodes ── proxies: - name: \u0026#34;DMIT-HK-Reality\u0026#34; type: vless server: 43.x.x.x port: 443 uuid: Your UUID flow: xtls-rprx-vision reality-opts: public-key: Your public key servername: www.apple.com client-fingerprint: chrome tls: true - name: \u0026#34;DMIT-HK-Hysteria2\u0026#34; type: hysteria2 server: 43.x.x.x port: 443 password: Your password sni: bing.com skip-cert-verify: true - name: \u0026#34;DMIT-US\u0026#34; type: vless # ... US node configuration # ── Proxy Groups ── proxy-groups: # Primary Hong Kong nodes (auto-select fastest) - name: \u0026#34;Hong Kong\u0026#34; type: url-test url: http://www.gstatic.com/generate_204 interval: 60 tolerance: 50 proxies: - DMIT-HK-Reality - DMIT-HK-Hysteria2 # Backup US - name: \u0026#34;US\u0026#34; type: url-test interval: 60 proxies: - DMIT-US # Automatic failover - name: \u0026#34;Proxy\u0026#34; type: fallback url: http://www.gstatic.com/generate_204 interval: 30 proxies: - Hong Kong - US # Manual selection (for special cases) - name: \u0026#34;Manual\u0026#34; type: select proxies: - DMIT-HK-Reality - DMIT-HK-Hysteria2 - DMIT-US - DIRECT # Streaming (using native IPs for unlocking) - name: \u0026#34;Streaming\u0026#34; type: select proxies: - DMIT-HK-Reality - DMIT-US # AI tools (requires specific regional IPs) - name: \u0026#34;AI Tools\u0026#34; type: select proxies: - DMIT-US - DMIT-HK-Reality # ── Rule Providers ── rule-providers: reject: type: http behavior: domain url: \u0026#34;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt\u0026#34; path: ./ruleset/reject.yaml interval: 86400 direct: type: http behavior: domain url: \u0026#34;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt\u0026#34; path: ./ruleset/direct.yaml interval: 86400 proxy: type: http behavior: domain url: \u0026#34;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt\u0026#34; path: ./ruleset/proxy.yaml interval: 86400 cn-cidr: type: http behavior: ipcidr url: \u0026#34;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt\u0026#34; path: ./ruleset/cncidr.yaml interval: 86400 # ── Traffic Rules ── rules: # Ad blocking - RULE-SET,reject,REJECT # Private IPs — direct - GEOIP,PRIVATE,DIRECT,no-resolve # AI tools use US nodes - DOMAIN-SUFFIX,openai.com,AI Tools - DOMAIN-SUFFIX,anthropic.com,AI Tools - DOMAIN-SUFFIX,claude.ai,AI Tools - DOMAIN-KEYWORD,openai,AI Tools # Streaming - DOMAIN-SUFFIX,netflix.com,Streaming - DOMAIN-SUFFIX,nflxvideo.net,Streaming - DOMAIN-SUFFIX,spotify.com,Streaming - DOMAIN-SUFFIX,disneyplus.com,Streaming # Mainland China — direct (rule set) - RULE-SET,direct,DIRECT # Proxy rule set - RULE-SET,proxy,Proxy # Mainland China IPs — direct - RULE-SET,cn-cidr,DIRECT,no-resolve - GEOIP,CN,DIRECT # Fallback to proxy - MATCH,Proxy DNS Configuration (Preventing DNS Leaks) If rules are configured but DNS isn\u0026rsquo;t set up properly, it can leak your real IP or cause rules to not work:\ndns: enable: true listen: 0.0.0.0:53 enhanced-mode: fake-ip # or redir-host; fake-ip is preferred fake-ip-range: 198.18.0.0/15 fake-ip-filter: # These domains bypass fake-ip - \u0026#39;*.lan\u0026#39; - localhost.ptlogin2.qq.com nameserver: - 223.5.5.5 # Alibaba (domestic queries) - 119.29.29.29 # Tencent fallback: # Foreign domains use these - https://1.1.1.1/dns-over-https - https://8.8.8.8/dns-over-https fallback-filter: geoip: true geoip-code: CN ipcidr: - 240.0.0.0/4 Debugging Tips Checking Which Rules Are Matched Mihomo provides a REST API to see which rule each connection matches:\n# View connections list (including matched rules) curl http://127.0.0.1:9090/connections Dashboards like Yacd or MetaCubeX make it even clearer — you can watch in real-time which node each connection uses and which rule it matches.\nTesting Which Route a Specific Domain Takes # Test using Mihomo\u0026#39;s HTTP proxy curl -x http://127.0.0.1:7890 https://www.google.com -I curl -x http://127.0.0.1:7890 https://www.baidu.com -I Further Reading:\nMulti-Gateway Home Network Architecture: Mihomo Fine-Grained Traffic Splitting in Action Xray VLESS+XTLS Deployment Guide Hysteria2 Deployment Guide 📷 Cover image · Generated with Flux Schnell AI · Panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/mihomo-split-rules/","summary":"\u003cp\u003e\u003cimg alt=\"a colorful toy on a table\" loading=\"lazy\" src=\"/images/mihomo-split-rules-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ca href=\"/en/posts/mihomo-multi-gateway/\"\u003eprevious article on multi-gateway home network architecture\u003c/a\u003e covered the overall design but didn\u0026rsquo;t dive into the details of writing rules. This post focuses specifically on Mihomo\u0026rsquo;s traffic splitting rules, breaking down everything from syntax basics to practical configuration templates.\u003c/p\u003e\n\u003ch2 id=\"basic-concepts-of-rules\"\u003eBasic Concepts of Rules\u003c/h2\u003e\n\u003cp\u003eMihomo controls traffic splitting through the \u003ccode\u003erules\u003c/code\u003e field. Each rule follows this format:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003erule-type,match-value,proxy-group\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eFor example:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003erules\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"l\"\u003eDOMAIN-SUFFIX,google.com,Proxy\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"l\"\u003eIP-CIDR,192.168.0.0/16,DIRECT\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"l\"\u003eGEOIP,CN,DIRECT\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e- \u003cspan class=\"l\"\u003eMATCH,Proxy         \u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# fallback rule — matches all remaining traffic\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003eRules are matched in order — the first rule that matches is executed, and subsequent rules are skipped.\u003c/strong\u003e Order is critical.\u003c/p\u003e","title":"Complete Guide to Mihomo Traffic Splitting Rules: From Getting Started to Fine-Grained Control"},{"content":" DMIT is my primary VPS provider, and I\u0026rsquo;ve been using it for over a year. Its Hong Kong and US nodes offer the best connection speeds and stability I\u0026rsquo;ve experienced, with a low IP block rate.\nMany people see DMIT\u0026rsquo;s English interface and don\u0026rsquo;t know how to purchase. This guide walks you through the entire process.\nWhy Choose DMIT When picking a VPS, three things matter most: latency, stability, and IP quality.\nDMIT\u0026rsquo;s advantages:\nHong Kong nodes have extremely low latency to mainland China (typically 20-40ms from Guangzhou) Uses CN2 GIA lines with direct three-network connectivity to China Native IPs with strong streaming unlock capability (Netflix, Disney+ Hong Kong region) Supports Hysteria2 with good UDP performance Significantly lower IP block rates compared to standard BGP lines Drawbacks:\nHigher pricing (Hong Kong nodes from $14.9/month) Popular plans frequently go out of stock For detailed comparisons with other providers: VPS Selection Guide\nStep 1: Register an Account Visit the DMIT website.\nClick Register in the top right Fill in your information: First Name / Last Name: Your actual name (for billing) Email Address: Your active email Password: Set a strong password Click Register to complete registration Check your email to verify (sometimes lands in spam) After registration, you\u0026rsquo;ll be automatically logged into the control panel (Client Area).\nStep 2: Choose Your Plan DMIT has multiple product lines. For proxy nodes, here are my recommendations:\nHong Kong Nodes (Highly Recommended) Main menu → Products → Hong Kong → PVM.HKG (Eyeball)\nThe Eyeball line is best optimized for mainland China with the lowest latency.\nCommon specs:\nPlan RAM CPU Traffic Monthly Tiny 1GB 1 Core 1TB ~$14.9 Small 2GB 2 Cores 2TB ~$29.9 Medium 4GB 2 Cores 4TB ~$58.9 The Tiny plan is plenty for a personal proxy node—Xray + Hysteria2 runs comfortably on 1GB RAM.\nUS Nodes Main menu → Products → Los Angeles\nUS nodes come with two line options:\nPremium: Better optimization for mainland China, CN2 GIA egress Economy: Lower price, BGP lines For proxy nodes, choose Premium—latency is 140-180ms and stable.\nStep 3: Configure and Order Click the plan you\u0026rsquo;ve selected to enter the configuration page:\nBilling Cycle: Monthly or Annually (saves 10-20%) Location: Usually fixed, no selection needed OS: Choose Ubuntu 22.04 (recommended; subsequent tutorials use Ubuntu) SSH Key: You can upload your public key for more secure login than password auth (explained below) Review the pricing summary on the right Click Continue Step 4: Payment DMIT accepts these payment methods:\nCredit Card / PayPal: Link your card or PayPal account Cryptocurrency: Supports USDT (TRC20 / ERC20), BTC, ETH, and more Alipay: Available for some plans I recommend USDT TRC20:\nExtremely low fees (1-2 USDT) No bank card required Instant confirmation Payment flow:\nSelect payment method → Cryptocurrency → USDT (TRC20) The page shows your payment address and amount Transfer the amount from your wallet (exchange or SafePal) Wait for on-chain confirmation (TRC20 usually takes 1-2 minutes) DMIT automatically confirms and deploys your VPS Step 5: Get Your Server Details About 5-15 minutes after payment, your VPS is deployed and you\u0026rsquo;ll receive an email with:\nIP address Root password (if you didn\u0026rsquo;t upload an SSH key) SSH port (usually 22, though DMIT may use another) You can also find this in the DMIT control panel: My Services → Click your VPS → Details\nStep 6: SSH Connection macOS / Linux # Login with password ssh root@your_VPS_IP # Login with SSH key (recommended) ssh -i ~/.ssh/your_private_key root@your_VPS_IP # If port isn\u0026#39;t 22 ssh -p port_number root@your_VPS_IP On first connection, you\u0026rsquo;ll see:\nThe authenticity of host \u0026#39;43.x.x.x\u0026#39; can\u0026#39;t be established. ECDSA key fingerprint is SHA256:xxxxx. Are you sure you want to continue connecting (yes/no)? Type yes and press Enter.\nWindows Use PuTTY or Windows\u0026rsquo; built-in PowerShell:\n# PowerShell ssh root@your_VPS_IP SSH Key Setup (Recommended for Better Security) Generate an SSH key pair locally:\n# Generate keys (skip if you already have them) ssh-keygen -t ed25519 -C \u0026#34;dmit-vps\u0026#34; # View your public key cat ~/.ssh/id_ed25519.pub Paste your public key into the SSH Key field on DMIT\u0026rsquo;s purchase page, or add it manually after connecting:\n# On the server mkdir -p ~/.ssh echo \u0026#34;your_public_key_content\u0026#34; \u0026gt;\u0026gt; ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys Step 7: Basic Server Initialization After your first login, I recommend these basic configurations:\n# Update system apt update \u0026amp;\u0026amp; apt upgrade -y # Install common tools apt install -y curl wget vim htop unzip ufw # Change SSH port (optional, for security) vim /etc/ssh/sshd_config # Find #Port 22, change to Port 18022 (or another port) systemctl restart sshd # Configure firewall ufw default deny incoming ufw default allow outgoing ufw allow 18022/tcp # New SSH port ufw allow 443/tcp ufw allow 443/udp # Hysteria2 needs UDP ufw enable # Set timezone timedatectl set-timezone Asia/Shanghai Important: After changing the SSH port, don\u0026rsquo;t close your current session. Open a new terminal and test the new port to confirm you can connect. Only then close the old session.\nStep 8: Deploy Your Proxy Once the basic environment is set up, deploy your proxy service:\nXray VLESS+XTLS Setup Tutorial Hysteria2 Setup Tutorial Running both protocols simultaneously with mihomo auto-switching is the most stable approach.\nFAQ Plan Shows Out of Stock—What Do I Do? Popular plans (Hong Kong Tiny) often sell out. Options:\nFollow DMIT\u0026rsquo;s official Telegram channel for restocks—buy immediately Check NodeSeek or HostLoc communities for resales Temporarily order a slightly more expensive Small plan; you can downgrade once stock returns Still No Deployment Hours After Payment For crypto payments: wait for on-chain confirmation. TRC20 usually takes 2 minutes; BTC requires 6 block confirmations (about 1 hour).\nIf nothing happens after 2 hours, submit a ticket (Tickets) and mention your payment txid.\nMy IP Got Blocked DMIT supports IP replacement via ticket—usually $5-8. See: VPS IP Blocked—Solutions\nRan Out of Traffic When monthly traffic is exhausted, some plans throttle (stay connected) while others disconnect. Check usage in your control panel under My Services.\nYou can buy extra traffic packages or wait for monthly reset.\nGot questions about purchasing or setup? Reach out on Telegram.\n📷 Cover image · Generated by Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/dmit-vps-purchase-guide/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"a close up of a server in a server room\" loading=\"lazy\" src=\"/images/dmit-vps-purchase-guide-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=dmit\"\u003eDMIT\u003c/a\u003e is my primary VPS provider, and I\u0026rsquo;ve been using it for over a year. Its Hong Kong and US nodes offer the best connection speeds and stability I\u0026rsquo;ve experienced, with a low IP block rate.\u003c/p\u003e\n\u003cp\u003eMany people see DMIT\u0026rsquo;s English interface and don\u0026rsquo;t know how to purchase. This guide walks you through the entire process.\u003c/p\u003e\n\u003ch2 id=\"why-choose-dmit\"\u003eWhy Choose DMIT\u003c/h2\u003e\n\u003cp\u003eWhen picking a VPS, three things matter most: latency, stability, and IP quality.\u003c/p\u003e","title":"DMIT VPS Purchase Process Tutorial with Images: From Registration to First SSH Connection"},{"content":" 💡 Mainland China Notice: Binance\u0026rsquo;s official site is not directly accessible from mainland China — you\u0026rsquo;ll need to provide your own network tools to access it. Fiat deposits don\u0026rsquo;t support bank cards; deposits happen mainly through C2C channels (USDT ↔ CNY).\nProfitability in algorithmic trading is heavily determined by trading fees. A strategy executing 100 trades per month at 0.1% fees incurs 20% in costs on both sides. Reducing fees from 0.1% to 0.05% yields significant annual savings.\nThis article covers every method to reduce fees on Binance.\nDefault Binance Trading Fees Trade Type Maker Taker Spot 0.10% 0.10% Futures (USDT-margined) 0.02% 0.05% Futures (Coin-margined) 0.01% 0.05% Note: Futures Maker/Taker rates differ significantly. Algorithmic strategies should prioritize limit orders (Maker) and avoid market orders (Taker).\nMethod 1: BNB Fee Deduction (25% Savings) Enable BNB fee deduction in account settings—trading fees are automatically paid in BNB and receive a 25% discount:\nSpot default 0.10% → 0.075% after BNB deduction Steps:\nLog into Binance Top right avatar → Account → Fee Settings Enable Pay Fees with BNB Ensure your account has sufficient BNB If your BNB balance drops too low, the system automatically reverts to standard fees. It\u0026rsquo;s wise to maintain a buffer.\nMethod 2: Register via Referral Link (Additional Rebate) Accounts registered through a referral link give both referrer and referee fee rebates.\nUsing my referral link to register grants you partial fee rebates (exact percentages vary by Binance promotions).\nCombined fee rate with BNB discount:\n0.10% × 75% (BNB discount) × (1 - rebate ratio) = lower fee rate Method 3: Increase VIP Tier Binance VIP tiers are determined by 30-day trading volume:\nVIP Tier 30-Day Spot Trading Volume (USDT equivalent) Spot Maker Spot Taker VIP 0 \u0026lt; 1M USDT 0.10% 0.10% VIP 1 ≥ 1M USDT 0.09% 0.10% VIP 2 ≥ 5M USDT 0.08% 0.10% VIP 3 ≥ 20M USDT 0.07% 0.08% VIP 4 ≥ 100M USDT 0.06% 0.07% For most individual traders, reaching VIP 3+ is challenging. The first two methods are more practical.\nMethod 4: Futures Fee Optimization Futures Maker rates are far lower than Taker:\nType Maker Taker USDT-margined futures VIP0 0.02% 0.05% USDT-margined futures VIP0 + BNB 0.015% 0.038% Key: Use limit orders in algorithmic strategies\n# ❌ Market order (Taker, higher fees) order = client.create_order( symbol=\u0026#39;BTCUSDT\u0026#39;, side=\u0026#39;BUY\u0026#39;, type=\u0026#39;MARKET\u0026#39;, quantity=0.001 ) # ✅ Limit order (Maker, lower fees) # Place slightly below/above market price, wait for fill order = client.create_order( symbol=\u0026#39;BTCUSDT\u0026#39;, side=\u0026#39;BUY\u0026#39;, type=\u0026#39;LIMIT\u0026#39;, timeInForce=\u0026#39;GTC\u0026#39;, quantity=0.001, price=str(round(current_price * 0.9999, 2)) # Slightly below market ) Note: During rapid market movements, limit orders may not fill in time. Your strategy must handle unfilled orders.\nMethod 5: BNB\u0026rsquo;s Inherent Value Beyond fee deduction, BNB has other uses:\nBinance Launchpad participation in new projects BNB Chain gas fees Price appreciation potential (and downside risk) When buying BNB for fee deduction, consider BNB\u0026rsquo;s own price risk. Avoid accumulating large BNB holdings purely for fee offsets.\nReal-World Calculation Assume monthly spot trading volume of 500k USDT (mid-scale algorithmic strategy):\nPlan Fee Rate Monthly Fees Annual Fees Default 0.10% $500 $6,000 + BNB Discount 0.075% $375 $4,500 + 10% Referral Rebate 0.068% $340 $4,080 Futures Maker 0.015% $75 $900 Using Maker + BNB on futures saves $5,100 annually versus default.\nAdvanced: Market Maker Program Institutions with massive monthly volume (1B+ USDT) can apply for Binance\u0026rsquo;s market maker program, where Maker rates can drop to 0% or negative (platform subsidies). Individual traders rarely qualify; this is reference only.\nFee Tracking Check your fee statements monthly:\nLog into Binance Wallet → Transaction History → Fee Records Export CSV, analyze in Excel/Python import pandas as pd # Analyze fee distribution df = pd.read_csv(\u0026#39;binance_fee_history.csv\u0026#39;) df[\u0026#39;date\u0026#39;] = pd.to_datetime(df[\u0026#39;time\u0026#39;]) df[\u0026#39;month\u0026#39;] = df[\u0026#39;date\u0026#39;].dt.to_period(\u0026#39;M\u0026#39;) monthly_fees = df.groupby(\u0026#39;month\u0026#39;)[\u0026#39;fee\u0026#39;].sum() print(monthly_fees) Further Reading:\nBinance API Security Configuration Pionex vs Binance Grid Trading Comparison Algorithmic Strategy Stop-Loss Design 📷 Cover Image · Generated with Flux Schnell AI · panshi.io Brand Style\n","permalink":"https://blog.panshi.io/en/posts/binance-fee-reduction/","summary":"\u003c!-- cn-kyc-notice --\u003e\n\u003cblockquote\u003e\n\u003cp\u003e💡 \u003cstrong\u003eMainland China Notice\u003c/strong\u003e: Binance\u0026rsquo;s official site is not directly accessible from mainland China — you\u0026rsquo;ll need to provide your own network tools to access it. Fiat deposits don\u0026rsquo;t support bank cards; deposits happen mainly through C2C channels (USDT ↔ CNY).\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Trader analyzing stock market data on smartphone and phone\" loading=\"lazy\" src=\"/images/binance-fee-reduction-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eProfitability in algorithmic trading is heavily determined by trading fees. A strategy executing 100 trades per month at 0.1% fees incurs 20% in costs on both sides. Reducing fees from 0.1% to 0.05% yields significant annual savings.\u003c/p\u003e","title":"How to save on Binance trading fees: Complete method to reduce from 0.1% to 0.045%"},{"content":" Stop-loss is the most overlooked—and error-prone—component in quant strategies. Many novice strategies look great in backtests but blow up the moment you run them live. Often, the culprit is poor stop-loss design: either it\u0026rsquo;s too wide and lets single trades lose too much, or it\u0026rsquo;s too tight and gets whipsawed by market noise.\nThis article draws from the actual design of the Polaris strategy and covers general stop-loss design principles.\nWhy Stop-Loss Matters Stop-loss is fundamentally a mechanism for admitting when you\u0026rsquo;re wrong. The logic of trend-following strategies is: most of the time there\u0026rsquo;s no trend, so the strategy bleeds small losses. Once in a while, there\u0026rsquo;s a real trend, and the strategy makes big money—and those big wins need to cover the small losses.\nWithout a stop-loss, that one catastrophic loss can blow out your account, leaving no opportunity for the big wins that follow.\nMathematically, stop-loss controls the maximum single-trade loss, which in turn controls the maximum drawdown:\nMax Drawdown ≈ f(stop-loss %, consecutive losses, win rate) Having 5 consecutive losing trades over some period is perfectly normal. If each loss is 10%, you\u0026rsquo;re down to 59% of your account after five losses. If each loss is 3%, you still have 85%—a massive difference.\nStop-Loss Types 1. Fixed Percentage Stop-Loss The simplest approach: exit if your loss exceeds a fixed percentage from entry.\n# Entry price 40000, stop-loss 3% entry_price = 40000 stop_loss_pct = 0.03 stop_price_long = entry_price * (1 - stop_loss_pct) # long: 38800 stop_price_short = entry_price * (1 + stop_loss_pct) # short: 41200 Pros: Simple, predictable, fixed risk\nCons: Ignores market volatility. BTC can swing 3% intraday on a calm day, so you get whipsawed.\nWhen to use: Longer timeframes (daily and up), or you\u0026rsquo;ve already verified that your stop is much wider than average daily volatility.\n2. ATR Dynamic Stop-Loss (Recommended) ATR (Average True Range) measures recent market volatility. Using ATR multiples for stops means your stops widen when volatility spikes and tighten when it\u0026rsquo;s calm—matching actual market conditions.\nimport pandas as pd def calculate_atr(df, period=14): \u0026#34;\u0026#34;\u0026#34;Calculate ATR\u0026#34;\u0026#34;\u0026#34; high = df[\u0026#39;high\u0026#39;] low = df[\u0026#39;low\u0026#39;] close = df[\u0026#39;close\u0026#39;] tr1 = high - low tr2 = abs(high - close.shift(1)) tr3 = abs(low - close.shift(1)) true_range = pd.concat([tr1, tr2, tr3], axis=1).max(axis=1) atr = true_range.rolling(period).mean() return atr def get_stop_price(entry_price, atr_value, direction, multiplier=2.0): \u0026#34;\u0026#34;\u0026#34;ATR-based stop-loss price\u0026#34;\u0026#34;\u0026#34; if direction == \u0026#39;long\u0026#39;: return entry_price - atr_value * multiplier else: return entry_price + atr_value * multiplier # Example: BTC 1H, ATR=1200, entry 40000, long # Stop = 40000 - 1200 * 2 = 37600 (-6%) Choosing ATR multipliers:\n1.0–1.5: Tight, gets triggered easily in noisy markets 2.0–3.0: Moderate, reasonable for most trend strategies 4.0+: Wide, catches big trends but larger per-trade losses On the Polaris strategy\u0026rsquo;s 1H timeframe, backtests show fixed percentage stops are more stable than ATR. The reason: BTC\u0026rsquo;s ATR balloons during trending markets, so ATR-based stops keep widening—the opposite of what you want.\n3. Trailing Stop-Loss After entry, the stop follows price upward (on longs) or downward (on shorts), locking in floating profits so you don\u0026rsquo;t give back all your gains.\nclass TrailingStop: def __init__(self, entry_price, direction, trail_pct=0.05): self.direction = direction self.trail_pct = trail_pct if direction == \u0026#39;long\u0026#39;: self.best_price = entry_price self.stop_price = entry_price * (1 - trail_pct) else: self.best_price = entry_price self.stop_price = entry_price * (1 + trail_pct) def update(self, current_price): \u0026#34;\u0026#34;\u0026#34;Update every candle\u0026#34;\u0026#34;\u0026#34; if self.direction == \u0026#39;long\u0026#39;: if current_price \u0026gt; self.best_price: self.best_price = current_price self.stop_price = current_price * (1 - self.trail_pct) else: if current_price \u0026lt; self.best_price: self.best_price = current_price self.stop_price = current_price * (1 + self.trail_pct) return self.stop_price def is_triggered(self, current_price): if self.direction == \u0026#39;long\u0026#39;: return current_price \u0026lt;= self.stop_price else: return current_price \u0026gt;= self.stop_price When trailing stops work well:\nYou\u0026rsquo;ve got floating profits and don\u0026rsquo;t want to give them all back Trending market—you want to ride the move while protecting gains When they don\u0026rsquo;t:\nChoppy markets, where price bounces back and forth and trailing stops trigger repeatedly 4. Time-Based Stop-Loss Exit if you\u0026rsquo;ve been holding longer than expected without the trade moving your direction, regardless of profit or loss:\ndef check_time_stop(entry_time, current_time, max_bars=48): \u0026#34;\u0026#34;\u0026#34;Force exit if held for more than 48 candles (1H = 2 days)\u0026#34;\u0026#34;\u0026#34; bars_held = (current_time - entry_time).total_seconds() / 3600 return bars_held \u0026gt;= max_bars The logic: if price isn\u0026rsquo;t moving your way after entry, your analysis was probably wrong. Better to free up capital and hunt for a better setup.\nStop-Loss Design in the Polaris Strategy I won\u0026rsquo;t dive into specific parameters, but here\u0026rsquo;s the design philosophy:\nCore principle: fixed stop-loss percentage + cooldown protection\nWhy fixed percentage instead of ATR?\nStable parameters that don\u0026rsquo;t change with market volatility Clearer signals in backtest results Works well combined with scaled take-profits, giving optimized overall expectancy After a stop-loss is triggered, a cooldown period prevents new entries. This cooldown:\nAvoids getting whipsawed repeatedly in choppy markets Waits for clearer direction before re-entering Reduces slippage and fees Coordinating Take-Profit with Stop-Loss\nIn a good strategy, take-profit design is just as important as stop-loss. The Polaris strategy uses scaled take-profits:\nFirst portion exits at a modest profit, reducing exposure Remaining position rides the trend Either all profits are taken or the whole position gets stopped out This ensures that even if the market later reverses, earlier exits have already locked in some gains.\nHow to Determine Stop-Loss Parameters Backtesting is the only reliable method, but watch for these pitfalls:\n1. Validate on out-of-sample data\nOptimize parameters using 2020–2023 data, then verify on 2024–2025 data. Don\u0026rsquo;t use the same period for both.\n2. Focus on max drawdown, not win rate\nHigh win rate doesn\u0026rsquo;t mean a good strategy. Controlling max drawdown is what matters:\nUnder 20%: comfortable, within psychological tolerance 30%+: most people break and interfere manually 3. Avoid overfitting\nIf your stop-loss is precise to two decimals (like 3.17%), it\u0026rsquo;s probably overfit. Use round or half-integer values (1%, 2%, 2.5%) for general parameters.\n4. Use Monte Carlo simulation\nRandomly shuffle trade order and simulate 1000 possible sequences to see the drawdown distribution:\nimport numpy as np def monte_carlo_max_drawdown(returns, n_simulations=1000): \u0026#34;\u0026#34;\u0026#34;Monte Carlo simulation of maximum drawdown\u0026#34;\u0026#34;\u0026#34; max_drawdowns = [] for _ in range(n_simulations): shuffled = np.random.permutation(returns) cumulative = np.cumprod(1 + shuffled) peak = np.maximum.accumulate(cumulative) drawdown = (peak - cumulative) / peak max_drawdowns.append(drawdown.max()) return { \u0026#39;median\u0026#39;: np.median(max_drawdowns), \u0026#39;p95\u0026#39;: np.percentile(max_drawdowns, 95), \u0026#39;worst\u0026#39;: max(max_drawdowns) } If the p95 max drawdown is within your tolerance, your stop-loss parameters are robust.\nStop-Loss Execution in Live Trading Good design is just step one. Live execution has its own pitfalls:\n1. Limit or market orders?\nMarket orders: guarantee execution, but bigger slippage (BTC can slippage 0.1–0.5% in volatile moves) Limit orders: control price, but might not fill (price can gap through your stop) In extreme volatility, use market orders. Better to take slippage than fail to execute.\n2. Submit stops to the exchange\nDon\u0026rsquo;t just check in code—place stops on the exchange itself:\n# Create stop-loss order on Binance order = client.create_order( symbol=\u0026#39;BTCUSDT\u0026#39;, side=\u0026#39;SELL\u0026#39;, type=\u0026#39;STOP_MARKET\u0026#39;, stopPrice=stop_price, closePosition=True, # close entire position timeInForce=\u0026#39;GTC\u0026#39; ) If your strategy process crashes, the exchange-side order still protects you.\n3. Regularly verify stops exist\nWhen your strategy starts, check for open orders:\ndef verify_stop_loss(client, symbol): \u0026#34;\u0026#34;\u0026#34;Verify stop-loss order exists\u0026#34;\u0026#34;\u0026#34; open_orders = client.get_open_orders(symbol=symbol) stop_orders = [o for o in open_orders if o[\u0026#39;type\u0026#39;] == \u0026#39;STOP_MARKET\u0026#39;] if not stop_orders: print(\u0026#34;⚠️ Warning: Stop-loss order not found!\u0026#34;) # re-submit order logic Further reading:\nPolaris Strategy Live Tracking Writing Quant Strategies with Claude Binance API Security Configuration 📷 Cover image · Generated with Flux Schnell AI · Panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/quant-stop-loss-design/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Futuristic abstract digital render depicting geometric shape\" loading=\"lazy\" src=\"/images/quant-stop-loss-design-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eStop-loss is the most overlooked—and error-prone—component in quant strategies. Many novice strategies look great in backtests but blow up the moment you run them live. Often, the culprit is poor stop-loss design: either it\u0026rsquo;s too wide and lets single trades lose too much, or it\u0026rsquo;s too tight and gets whipsawed by market noise.\u003c/p\u003e\n\u003cp\u003eThis article draws from the actual design of the \u003ca href=\"/en/polaris/\"\u003ePolaris strategy\u003c/a\u003e and covers general stop-loss design principles.\u003c/p\u003e","title":"How to set stop-loss in quantitative strategies: explaining universal stop-loss design starting from the Polaris strategy"},{"content":" Many people think having a VPS proxy node is enough—it\u0026rsquo;s not. VPS IPs come from data centers, and many platforms impose extra restrictions on data center IPs. OpenAI won\u0026rsquo;t let you register with a data center IP, some platforms trigger additional verification, and accounts get restricted for \u0026ldquo;suspicious login\u0026rdquo;\u0026hellip; These scenarios require residential IPs.\nIPRoyal is a residential IP service I\u0026rsquo;ve been using long-term. This article clarifies when you need residential IPs and how to use them.\nResidential IP vs Data Center IP Comparison Data Center IP (VPS) Residential IP Source AWS, Google Cloud, and other cloud providers Real residential broadband ISP Detection Difficulty Easy for platforms to detect Extremely hard to distinguish (looks like a regular user) Speed Fast, stable Varies by ISP, may fluctuate Price Low (fixed monthly) High (pay-as-you-go, billed by GB) Best For General-purpose proxy Operations that look like real users Data center IPs have known ASNs (Autonomous System Numbers), and companies like Cloudflare and Google maintain blacklists of these IP ranges. Residential IPs come from various ISPs (China Mobile, Comcast, Vodafone, etc.) and are indistinguishable from regular home users.\nTypical Use Cases Scenario 1: Register Accounts That Require Residential IPs Some services only allow residential IP registration, or registering with a data center IP triggers CAPTCHA verification:\nChatGPT / OpenAI: Restricts data center IPs in some regions Claude.ai: Data center IP registration limited in some regions Twitter / X: Bulk registration with data center IPs easily gets accounts banned Various US-region accounts: Require US residential IPs to register Process:\nIn IPRoyal, select your target country/state (e.g., California, USA) Select a residential proxy plan Get the proxy address and port Configure it in your browser (recommend Chrome + Proxy SwitchyOmega plugin) Verify the IP location, then register your account Scenario 2: Temporary Fallback When VPS IP Gets Blocked Your VPS IP suddenly gets blocked, you don\u0026rsquo;t have another backup node handy, and IPRoyal charges by GB—buy a few GB to get through:\nNo monthly commitment, pay only for what you use 2-5 GB of temporary usage is usually enough for a few days Switch to residential IP while you resolve the VPS IP issue See: VPS IP Gets Blocked—What to Do\nScenario 3: Dedicated Line for AI Tools Some AI tools (Claude API, OpenAI API) have requirements on the calling IP. Using residential IP as the API exit provides better stability and success rate:\nConfigure IPRoyal proxy as the exit for specific traffic on your server:\n# curl through residential IP proxy curl --proxy socks5://username:password@gate.iproyal.cn:10000 \\ https://api.anthropic.com/v1/messages \\ -H \u0026#34;x-api-key: your-api-key\u0026#34; Configure proxy in Python code:\nimport httpx proxies = { \u0026#34;http://\u0026#34;: \u0026#34;socks5://username:password@gate.iproyal.cn:10000\u0026#34;, \u0026#34;https://\u0026#34;: \u0026#34;socks5://username:password@gate.iproyal.cn:10000\u0026#34;, } client = httpx.Client(proxies=proxies) response = client.post(\u0026#34;https://api.anthropic.com/v1/messages\u0026#34;, ...) Scenario 4: Data Collection Scrape login-required websites or platforms with crawler restrictions—residential IPs bypass rate limits:\nimport requests # IPRoyal rotating residential IP (different IP with each request) proxy = { \u0026#39;http\u0026#39;: \u0026#39;http://username:password@gate.iproyal.cn:10000\u0026#39;, \u0026#39;https\u0026#39;: \u0026#39;http://username:password@gate.iproyal.cn:10000\u0026#39; } session = requests.Session() session.proxies.update(proxy) # Here you can configure whether to rotate IPs # Rotating mode: automatically switch IP with each request # Sticky mode: keep the same IP within one session Scenario 5: Secure Account Login You registered your account with a domestic IP, but now need to log in from overseas—use that country\u0026rsquo;s residential IP to reduce risk:\nUS account → Log in with US residential IP UK account → Log in with UK residential IP Avoid triggering \u0026ldquo;unusual location login\u0026rdquo; fraud controls and reduce the chance of account lockout.\nIPRoyal Pricing IPRoyal residential IPs are billed by GB of traffic with several plans:\nPlan Unit Price Best For Pay-as-you-go ~$4/GB Occasional use, small volumes Bulk Plans $2–3/GB Fixed needs, tens of GB per month Enterprise Custom Large-scale scraping Compared to other providers (Bright Data, Oxylabs), IPRoyal offers good value for money and stable quality.\nActual consumption reference:\nRegister one account: ~50 MB One AI tool API session: ~10–50 MB Light data collection (100 pages): ~200–500 MB Personal use typically needs 1–5 GB per month, costing $5–15.\nRegistration and Usage Flow Visit IPRoyal to register Select Residential Proxies Top up your account (supports credit card/USDT) Go to the control panel and select: Country: US / UK / JP / HK, etc. State/City (optional): Some platforms require state-level precision Protocol: HTTP / HTTPS / SOCKS5 Rotation mode: Rotating (switch IP each request) or Sticky (keep same IP) Generate your proxy endpoint and credentials Standard format:\ngate.iproyal.cn:10000:username:password Integration with VPS Proxies My proxy architecture:\nPrimary daily proxy: DMIT VPS (VLESS+Reality / Hysteria2) ↓ When blocked or special scenarios Fallback: IPRoyal residential IP (pay-as-you-go, no need to keep running) ↓ Operations that need to look like real users Specialized use: IPRoyal (account registration, platform restriction bypass) Three layers working together cover basically all needs.\nFurther Reading:\nVPS IP Gets Blocked—What to Do VPS Selection Guide Home Network Multi-Gateway Architecture 📷 Hero Image · Generated with Flux Schnell AI · panshi.io Brand Style\n","permalink":"https://blog.panshi.io/en/posts/iproyal-residential-ip/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A close up of a blue and black globe\" loading=\"lazy\" src=\"/images/iproyal-residential-ip-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eMany people think having a VPS proxy node is enough—it\u0026rsquo;s not. VPS IPs come from data centers, and many platforms impose extra restrictions on data center IPs. OpenAI won\u0026rsquo;t let you register with a data center IP, some platforms trigger additional verification, and accounts get restricted for \u0026ldquo;suspicious login\u0026rdquo;\u0026hellip; These scenarios require residential IPs.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=iproyal\"\u003eIPRoyal\u003c/a\u003e is a residential IP service I\u0026rsquo;ve been using long-term. This article clarifies when you need residential IPs and how to use them.\u003c/p\u003e","title":"IPRoyal residential IP use cases: when do you need residential IP"},{"content":" I\u0026rsquo;m currently paying $80/month to subscribe to two GitHub Copilot Pro+ accounts. That number seems steep at first, but after three months of use, I believe it\u0026rsquo;s the best ROI among all my AI subscriptions.\nThis article breaks down the math so you can judge for yourself whether it\u0026rsquo;s worth it.\nWhat is Copilot Pro+? GitHub Copilot has three tiers:\nTier Monthly cost Key difference Copilot Free Free Basic completions, 2000 completions/month Copilot Pro $10 Unlimited completions, GPT-4o model Copilot Pro+ $19 Unlimited completions + advanced model quota The key differences in Pro+:\n1500 advanced model calls/month: includes Claude Sonnet 4.6, Claude Opus 4.6, o3, and more Direct invocation of these models within VS Code / JetBrains / Vim for code generation Supports Claude Code CLI as a backend (OpenClaw integration works the same way) My use cases I use Copilot Pro+ mainly for two things:\n1. Powering OpenClaw\nOpenClaw supports calling Claude Opus through a Copilot Pro+ account on a monthly subscription plan—much cheaper than pay-as-you-go billing. For specific setup details, see: OpenClaw + Copilot parameter tuning\n2. Powering Claude Code CLI\nClaude Code officially supports using a Copilot API Key as a Claude API substitute, meaning 1500 calls/month can use Opus for heavy-duty tasks, with overage billed to the Anthropic API.\nCost breakdown If using Claude API exclusively (pay-as-you-go) Based on my actual monthly usage:\nUse case Tokens/month Sonnet cost Opus cost OpenClaw ops tasks ~500K tokens ~$9 ~$45 Claude Code programming ~800K tokens ~$14 ~$72 Strategy analysis discussions ~200K tokens ~$4 ~$18 Total ~1.5M tokens ~$27 ~$135 Pure Sonnet would be ~$27/month, pure Opus ~$135/month.\nAfter switching to Copilot Pro+ Copilot Pro+: $19/month Covers 1500 advanced model calls (roughly equivalent to 60-80 complex programming tasks) Overflow degrades to Sonnet or pay-as-you-go Actual API supplemental costs (overage): ~$8/month Total cost: $27/month (two accounts at $54, alternating use extends the advanced quota)\nThis is roughly the same as pure Sonnet API, but with partial Opus quality.\nThe real value: allocating quota where it matters From a pure pricing standpoint, Copilot Pro+ isn\u0026rsquo;t particularly cheap. Its real value is:\n1. Forces you to use the right model for the job\nWith a monthly quota constraint, I\u0026rsquo;ve learned what to use when:\nSimple ops tasks → Sonnet Tasks needing real depth → Opus (monthly 1500-call quota) No quota left → stop wasting Opus 2. IDE integration experience\nWriting code in VS Code and hitting Ctrl+I to invoke AI edits right there—no new tabs, full context preserved. This beats switching to the claude.ai webpage by a lot.\n3. Account sharing strategy\nRunning two Copilot Pro+ accounts:\nAccount A powers OpenClaw (always-on background tasks) Account B powers Claude Code (on-demand programming tasks) The 1500-call quotas are independent per account, effectively doubling the monthly quota.\nWho should buy this Buy Copilot Pro+ if:\nYou code 2+ hours daily Already using OpenClaw or Claude Code Willing to invest time tuning your AI workflows Using VS Code / JetBrains IDEs Skip it if:\nOnly asking a few questions occasionally → free Claude.ai is fine Just want code completions → Copilot Pro ($10) is enough Mostly non-programming work → Claude Pro subscription is better How it relates to Claude Pro Many people wonder if the subscriptions overlap:\nClaude Pro Copilot Pro+ Monthly cost $20 $19 Primary use claude.ai web conversations IDE integration + CLI tools Model quality ceiling Opus Opus (smaller quota) Dev-focused Fair Excellent General-purpose Excellent Fair If you\u0026rsquo;re primarily coding: Copilot Pro+ \u0026gt; Claude Pro If you do mixed work: Claude Pro is more flexible\nI subscribe to both, but if forced to choose one, I\u0026rsquo;d pick Copilot Pro+.\nMoney-saving tips 1. Free through GitHub Education\nStudents / educators can apply for GitHub Education, which includes free Copilot Pro (Pro, not Pro+).\n2. Annual payment discount\nAnnual billing saves 16% vs. monthly. If you\u0026rsquo;re committed to the long term, it\u0026rsquo;s more economical.\n3. Combined with Prompt Cache\nWhen repeating operations in Claude Code, set up CLAUDE.md as context to hit Prompt Cache, reducing API token spend and effectively extending your quota.\nFurther reading:\nReal-world Claude Code workflow OpenClaw + Copilot parameter tuning Claude API cost-saving guide 📷 Cover image · Generated with Flux Schnell AI · Panshi brand style\n","permalink":"https://blog.panshi.io/en/posts/copilot-pro-plus-review/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Computer screen displaying lines of code\" loading=\"lazy\" src=\"/images/copilot-pro-plus-review-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m currently paying $80/month to subscribe to two GitHub Copilot Pro+ accounts. That number seems steep at first, but after three months of use, I believe it\u0026rsquo;s the best ROI among all my AI subscriptions.\u003c/p\u003e\n\u003cp\u003eThis article breaks down the math so you can judge for yourself whether it\u0026rsquo;s worth it.\u003c/p\u003e\n\u003ch2 id=\"what-is-copilot-pro\"\u003eWhat is Copilot Pro+?\u003c/h2\u003e\n\u003cp\u003eGitHub Copilot has three tiers:\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eTier\u003c/th\u003e\n          \u003cth\u003eMonthly cost\u003c/th\u003e\n          \u003cth\u003eKey difference\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eCopilot Free\u003c/td\u003e\n          \u003ctd\u003eFree\u003c/td\u003e\n          \u003ctd\u003eBasic completions, 2000 completions/month\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eCopilot Pro\u003c/td\u003e\n          \u003ctd\u003e$10\u003c/td\u003e\n          \u003ctd\u003eUnlimited completions, GPT-4o model\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eCopilot Pro+\u003c/td\u003e\n          \u003ctd\u003e$19\u003c/td\u003e\n          \u003ctd\u003eUnlimited completions + advanced model quota\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eThe key differences in Pro+:\u003c/p\u003e","title":"Is Copilot Pro+ Worth Buying: Real ROI Analysis After 3 Months of Use"},{"content":" Running quant strategies and proxy nodes without monitoring is extremely risky. Out-of-memory crashes at 3 AM, disks filling up, strategies crashing—without alerts, you might not notice for hours.\nThis guide builds a complete monitoring stack from scratch: Node Exporter collects metrics on each monitored machine, Prometheus aggregates and stores them, Grafana visualizes the data, and Telegram delivers alerts.\nArchitecture Monitored VPS (N machines) Central Monitoring VPS (1 machine) ┌──────────────┐ ┌─────────────────────┐ │ Node Exporter│ ──9100──→ │ Prometheus │ │ Node Exporter│ ──9100──→ │ (collect \u0026amp; store) │ │ Node Exporter│ ──9100──→ │ Grafana │ └──────────────┘ │ (visualize) │ │ Alertmanager │ │ (alerts) │ └─────────────────────┘ The approach: dedicate a small VPS (1 core, 1 GB RAM is plenty) as the monitoring hub; install Node Exporter on all other machines to expose metrics.\nStep 1: Install Node Exporter on Monitored Machines Do this on every VPS you want to monitor.\n# Download Node Exporter (verify the latest version) cd /tmp wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz tar xzf node_exporter-1.8.2.linux-amd64.tar.gz mv node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/ Create a systemd service:\ncat \u0026gt; /etc/systemd/system/node_exporter.service \u0026lt;\u0026lt; \u0026#39;EOF\u0026#39; [Unit] Description=Node Exporter After=network.target [Service] Type=simple User=nobody ExecStart=/usr/local/bin/node_exporter --web.listen-address=:9100 Restart=on-failure [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable node_exporter --now Verify it\u0026rsquo;s running correctly:\ncurl http://localhost:9100/metrics | head -20 # If you see lots of metrics output, it\u0026#39;s working Firewall setup:\nNode Exporter\u0026rsquo;s port 9100 should only be accessible to your Prometheus server, never the public internet:\n# Allow only your monitoring center IP to access 9100 ufw allow from monitoring-hub-IP to any port 9100 # Don\u0026#39;t run `ufw allow 9100` ← this opens it to everyone Step 2: Install Prometheus on the Monitoring Hub This server actively pulls metrics from all machines.\n# Create a dedicated user useradd --no-create-home --shell /bin/false prometheus # Download Prometheus cd /tmp wget https://github.com/prometheus/prometheus/releases/download/v2.51.2/prometheus-2.51.2.linux-amd64.tar.gz tar xzf prometheus-2.51.2.linux-amd64.tar.gz # Install mkdir -p /etc/prometheus /var/lib/prometheus cp prometheus-2.51.2.linux-amd64/prometheus /usr/local/bin/ cp prometheus-2.51.2.linux-amd64/promtool /usr/local/bin/ cp -r prometheus-2.51.2.linux-amd64/consoles /etc/prometheus/ cp -r prometheus-2.51.2.linux-amd64/console_libraries /etc/prometheus/ chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus Create the config file /etc/prometheus/prometheus.yml:\nglobal: scrape_interval: 30s # Collect metrics every 30 seconds evaluation_interval: 30s alerting: alertmanagers: - static_configs: - targets: [\u0026#39;localhost:9093\u0026#39;] rule_files: - /etc/prometheus/rules/*.yml scrape_configs: - job_name: \u0026#39;node\u0026#39; static_configs: - targets: - \u0026#39;aws-hk-IP:9100\u0026#39; # Hong Kong - \u0026#39;aws-us-IP:9100\u0026#39; # US - \u0026#39;aws-jp-IP:9100\u0026#39; # Japan - \u0026#39;dmit-us-IP:9100\u0026#39; # DMIT US labels: env: \u0026#39;production\u0026#39; Create a systemd service:\ncat \u0026gt; /etc/systemd/system/prometheus.service \u0026lt;\u0026lt; \u0026#39;EOF\u0026#39; [Unit] Description=Prometheus After=network.target [Service] Type=simple User=prometheus ExecStart=/usr/local/bin/prometheus \\ --config.file=/etc/prometheus/prometheus.yml \\ --storage.tsdb.path=/var/lib/prometheus \\ --storage.tsdb.retention.time=30d \\ --web.listen-address=:9090 Restart=on-failure [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable prometheus --now Visit http://monitoring-hub-IP:9090 to verify; check Status → Targets to see all monitored machines\u0026rsquo; status.\nStep 3: Install Grafana # Add Grafana APT repository apt-get install -y apt-transport-https software-properties-common wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key echo \u0026#34;deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main\u0026#34; | \\ tee /etc/apt/sources.list.d/grafana.list apt-get update apt-get install -y grafana systemctl enable grafana-server --now Grafana runs on port 3000 by default; visit http://monitoring-hub-IP:3000:\nDefault user: admin Default password: admin (you\u0026rsquo;ll be prompted to change it after login) Add Prometheus as a Data Source Left menu → Connections → Data sources Click Add data source → select Prometheus Enter http://localhost:9090 for the URL Click Save \u0026amp; test; if it says \u0026ldquo;Data source is working,\u0026rdquo; you\u0026rsquo;re good Import a Pre-Built Dashboard No need to build dashboards from scratch—import a mature one from the community:\nLeft menu → Dashboards → Import Enter Dashboard ID 1860 (Node Exporter Full, the most popular) Select your Prometheus data source Click Import This dashboard includes CPU usage, memory, disk I/O, network throughput, system load, and filesystem space—very comprehensive.\nStep 4: Set Up Telegram Alerts Dashboards are nice, but you need instant notifications when things break.\nCreate a Telegram Bot Find @BotFather in Telegram Send /newbot and give your bot a name Save the returned Bot Token (format: 1234567890:ABCD...) Send the bot a message, then visit https://api.telegram.org/botYOUR_TOKEN/getUpdates to get your chat_id Install Alertmanager cd /tmp wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz tar xzf alertmanager-0.27.0.linux-amd64.tar.gz cp alertmanager-0.27.0.linux-amd64/alertmanager /usr/local/bin/ mkdir -p /etc/alertmanager Create /etc/alertmanager/alertmanager.yml:\nglobal: resolve_timeout: 5m route: receiver: telegram group_wait: 30s group_interval: 5m repeat_interval: 4h receivers: - name: telegram telegram_configs: - bot_token: \u0026#39;YOUR_BOT_TOKEN\u0026#39; chat_id: YOUR_CHAT_ID message: | 🚨 Alert: {{ .GroupLabels.alertname }} Host: {{ .GroupLabels.instance }} Details: {{ range .Alerts }}{{ .Annotations.description }}{{ end }} send_resolved: true cat \u0026gt; /etc/systemd/system/alertmanager.service \u0026lt;\u0026lt; \u0026#39;EOF\u0026#39; [Unit] Description=Alertmanager After=network.target [Service] Type=simple User=prometheus ExecStart=/usr/local/bin/alertmanager \\ --config.file=/etc/alertmanager/alertmanager.yml \\ --storage.path=/var/lib/alertmanager Restart=on-failure [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable alertmanager --now Configure Alert Rules Create /etc/prometheus/rules/node_alerts.yml:\ngroups: - name: node_alerts rules: # CPU over 85% for 5 minutes - alert: HighCPUUsage expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode=\u0026#34;idle\u0026#34;}[5m])) * 100) \u0026gt; 85 for: 5m annotations: description: \u0026#34;{{ $labels.instance }} CPU {{ $value | printf \\\u0026#34;%.1f\\\u0026#34; }}% utilized\u0026#34; # Available memory below 10% - alert: LowMemory expr: (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 \u0026lt; 10 for: 2m annotations: description: \u0026#34;{{ $labels.instance }} only {{ $value | printf \\\u0026#34;%.1f\\\u0026#34; }}% memory available\u0026#34; # Disk usage over 85% - alert: DiskSpaceLow expr: (node_filesystem_avail_bytes{mountpoint=\u0026#34;/\u0026#34;} / node_filesystem_size_bytes{mountpoint=\u0026#34;/\u0026#34;}) * 100 \u0026lt; 15 for: 5m annotations: description: \u0026#34;{{ $labels.instance }} only {{ $value | printf \\\u0026#34;%.1f\\\u0026#34; }}% disk space left\u0026#34; # Machine offline (no metrics for 2+ minutes) - alert: InstanceDown expr: up == 0 for: 2m annotations: description: \u0026#34;{{ $labels.instance }} offline for 2+ minutes\u0026#34; Reload the configuration:\nsystemctl reload prometheus # Or: curl -X POST http://localhost:9090/-/reload Step 5: Secure Grafana with Nginx Reverse Proxy Don\u0026rsquo;t expose Grafana\u0026rsquo;s port 3000 directly to the internet—put Nginx in front:\napt install nginx -y cat \u0026gt; /etc/nginx/sites-available/grafana \u0026lt;\u0026lt; \u0026#39;EOF\u0026#39; server { listen 80; server_name grafana.yourdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name grafana.yourdomain.com; ssl_certificate /etc/letsencrypt/live/grafana.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/grafana.yourdomain.com/privkey.pem; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } EOF ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/ nginx -t \u0026amp;\u0026amp; systemctl reload nginx Use acme.sh to auto-provision SSL certificates:\ncurl https://get.acme.sh | sh ~/.acme.sh/acme.sh --issue -d grafana.yourdomain.com --nginx ~/.acme.sh/acme.sh --install-cert -d grafana.yourdomain.com \\ --cert-file /etc/letsencrypt/live/grafana.yourdomain.com/fullchain.pem \\ --key-file /etc/letsencrypt/live/grafana.yourdomain.com/privkey.pem \\ --reloadcmd \u0026#34;systemctl reload nginx\u0026#34; What You Get Once it\u0026rsquo;s set up, you\u0026rsquo;ll have:\nReal-time CPU / memory / disk curves for each machine Network in/out throughput, so you can spot which nodes are saturated System load trends—you\u0026rsquo;ll instantly see when your quant strategies hammer the CPU Machine goes down or metrics spike? Telegram alerts you instantly Further reading:\nWhat to do when your VPS IP gets blocked Multi-gateway home network architecture 📷 Hero image · generated by Flux Schnell AI · Panshi brand style\n","permalink":"https://blog.panshi.io/en/posts/prometheus-grafana-vps-monitoring/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"black flat screen tv showing game\" loading=\"lazy\" src=\"/images/prometheus-grafana-vps-monitoring-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eRunning quant strategies and proxy nodes without monitoring is extremely risky. Out-of-memory crashes at 3 AM, disks filling up, strategies crashing—without alerts, you might not notice for hours.\u003c/p\u003e\n\u003cp\u003eThis guide builds a complete monitoring stack from scratch: \u003cstrong\u003eNode Exporter\u003c/strong\u003e collects metrics on each monitored machine, \u003cstrong\u003ePrometheus\u003c/strong\u003e aggregates and stores them, \u003cstrong\u003eGrafana\u003c/strong\u003e visualizes the data, and \u003cstrong\u003eTelegram\u003c/strong\u003e delivers alerts.\u003c/p\u003e\n\u003ch2 id=\"architecture\"\u003eArchitecture\u003c/h2\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eMonitored VPS (N machines)    Central Monitoring VPS (1 machine)\n┌──────────────┐              ┌─────────────────────┐\n│ Node Exporter│ ──9100──→    │ Prometheus          │\n│ Node Exporter│ ──9100──→    │ (collect \u0026amp; store)   │\n│ Node Exporter│ ──9100──→    │ Grafana             │\n└──────────────┘              │ (visualize)         │\n                              │ Alertmanager        │\n                              │ (alerts)            │\n                              └─────────────────────┘\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThe approach: dedicate a small VPS (1 core, 1 GB RAM is plenty) as the monitoring hub; install Node Exporter on all other machines to expose metrics.\u003c/p\u003e","title":"Prometheus + Grafana VPS Monitoring: Building a Server Monitoring System from Scratch"},{"content":" Crypto assets sitting on an exchange? You don\u0026rsquo;t actually own them—\u0026ldquo;Not your keys, not your coins.\u0026rdquo; Exchange collapses, hacks, account bans: your assets can vanish overnight. Once your holdings reach a certain scale, a hardware wallet becomes essential infrastructure.\nSafePal is a hardware wallet brand backed by Binance Labs, supporting 100+ blockchains with strong value for the price. This guide walks you through it from scratch.\nHow Hardware Wallets Work A hardware wallet is a dedicated security device where your private key never leaves the device. Signing happens inside the device; when connected to your computer, only the signature is transmitted—the private key itself stays hidden.\nUnlike software wallets (MetaMask, imToken):\nSoftware Wallet Hardware Wallet Private key stored in Device RAM Hardware security chip Hacking risk Yes (compromised device leaks keys) Minimal Ease of use Convenient Requires physical interaction Price Free $50–200 Best for Frequent trading of small amounts Long-term holding of large amounts When you need a hardware wallet:\nHoldings exceed $5,000 (a rough threshold—adjust to your risk tolerance) You\u0026rsquo;re holding long-term without frequent trading You\u0026rsquo;re concerned about exchange security SafePal S1 Unboxing \u0026amp; Verification First thing: verify the packaging\u0026rsquo;s integrity:\nCheck the seal is intact with no signs of tampering or reopening The device back has an anti-counterfeit QR code; scan it to verify on SafePal\u0026rsquo;s official site Genuine devices display \u0026ldquo;Welcome to SafePal\u0026rdquo; on the screen at factory—never any pre-loaded seed phrase ⚠️ If your device has a pre-existing seed phrase or the seller claims they\u0026rsquo;ve already initialized it, return it immediately. This is a common scam.\nInitial Setup Step 1: Charge SafePal S1 has a built-in battery. Charge fully before first use via USB-C. You can operate the device while charging.\nStep 2: Power On \u0026amp; Language Hold the power button to boot, then follow the prompts:\nSelect language (Chinese supported) Choose font size Step 3: Create New Wallet Select Create New Wallet (don\u0026rsquo;t choose restore unless you\u0026rsquo;re recovering an old wallet).\nSet a 6-digit PIN:\nThis unlocks the device each time Pick a number combination that\u0026rsquo;s hard to guess Never share it with anyone The device factory-resets after 10 consecutive failed attempts Step 4: Back Up Your Seed Phrase (Most Critical) The device displays 12 English words—your seed phrase, the root of your wallet. Anyone with these 12 words can restore your assets in any wallet software.\nCorrect backup method:\n✅ Write on paper, store in a safe place (safe deposit box, fireproof waterproof container) ✅ Multiple backups in different locations (prevent single point of failure) ✅ Consider metal engraving (waterproof, fireproof, corrosion-resistant) ❌ Never photograph ❌ Never save in phone notes ❌ Never send to anyone, including \u0026#34;support\u0026#34; ❌ Never store in cloud (iCloud, Google Drive) ❌ Never enter into any website After writing them down, the device asks you to select a few words in order to verify—confirming you\u0026rsquo;ve recorded them correctly.\nStep 5: Verify Your Seed Phrase The device randomly picks a few positions and asks you to select the correct words from options. After verification passes, your wallet is created.\nAdd Coins SafePal supports BTC, ETH, BNB, USDT (multiple chains), SOL, and hundreds of tokens.\nFrom the main screen, tap + to add an asset Search the coin name (e.g., USDT) Select the correct network (USDT comes in TRC20, ERC20, BEP20, etc.—pick carefully) After adding, you\u0026rsquo;ll see a receive address for that coin Important: Different networks have different USDT addresses. Sending to the wrong network loses the asset.\nReceive Assets Select a coin from the main screen Tap Receive A QR code and address appear Share the address with the sender or let them scan the code Before each receive, visually verify the address on your device\u0026rsquo;s screen—computer screens can be compromised and display a fake address.\nSend Assets SafePal S1 doesn\u0026rsquo;t need a computer connection; it uses QR codes (Air-Gapped design):\nOpen SafePal App on your phone In the app, select send, enter amount and destination address The app generates a dynamic QR code Scan it with the S1\u0026rsquo;s camera Verify the transaction details on the S1 screen (address, amount, fee) Confirm—S1 generates a signature QR code Scan the S1\u0026rsquo;s QR code with your phone\u0026rsquo;s camera The app broadcasts the signature to the blockchain network Your private key never touches the network—extremely secure.\nGas Fees When sending, you can adjust gas (miner) fees:\nLow: Saves money, but confirmation may be slow Medium: Balanced High: Faster confirmation, good when the network is congested Bitcoin fees can hit a few dollars during congestion; TRC20 is dirt cheap (usually 1–2 USDT), ideal for small transfers.\nIntegration with Exchanges My asset management strategy:\nExchange (Binance) ↓ Quant trading capital (frequent operations) SafePal Cold Wallet ↓ Long-term holdings (assets at rest) IPRoyal or similar (if needed) ↓ Temporary withdrawal/deposit channels Allocation: Keep quant trading capital on the exchange; move assets beyond that to cold storage periodically.\nSecurity Notes Your seed phrase is everything—protect it\nLose the device? Restore with your seed phrase Lose or leak the seed phrase? Your assets are gone forever Verify backups regularly\nEvery few months, restore using your seed phrase on another wallet Confirm your paper/metal backup hasn\u0026rsquo;t degraded Never buy secondhand\nUsed devices may be tampered with; security chips might be replaced Keep firmware updated\nUpdate SafePal firmware regularly (via the app) Updates patch security bugs Plan for inheritance\nThink about how family can access funds if you can\u0026rsquo;t Store seed phrase with a lawyer or safe deposit box with instructions Further Reading:\nBinance API Security Configuration Pionex Grid Trading in Practice 📷 Cover · Flux Schnell AI generated · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/safepal-hardware-wallet/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A black leather wallet partially open with visible paper cur\" loading=\"lazy\" src=\"/images/safepal-hardware-wallet-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eCrypto assets sitting on an exchange? You don\u0026rsquo;t actually own them—\u0026ldquo;Not your keys, not your coins.\u0026rdquo; Exchange collapses, hacks, account bans: your assets can vanish overnight. Once your holdings reach a certain scale, a hardware wallet becomes essential infrastructure.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=safepal\"\u003eSafePal\u003c/a\u003e is a hardware wallet brand backed by Binance Labs, supporting 100+ blockchains with strong value for the price. This guide walks you through it from scratch.\u003c/p\u003e","title":"SafePal Hardware Wallet Tutorial: Complete Guide to Cold Storage of Crypto Assets"},{"content":" Running paid VPS like DMIT for proxy nodes is stable but costly. What many don\u0026rsquo;t know is that Cloudflare Workers comes with 100,000 free requests daily—enough to run a completely free VLESS node as a backup or alternative. It\u0026rsquo;s worth deploying one for everyone.\nThis guide uses the open-source project edgetunnel, deployable in under 10 minutes.\nOverview Cloudflare Workers is a JavaScript runtime at CF\u0026rsquo;s edge nodes. edgetunnel implements the VLESS protocol in a Worker, routing traffic through CF\u0026rsquo;s CDN network to bypass direct IP identification.\nAdvantages:\nCompletely free (the free plan offers 100,000 daily requests, sufficient for personal use) No server needed; no risk of IP blocks Extremely low chance of CF IP ranges being blocked Limitations:\nSpeed depends on CF network quality; slower than dedicated VPS during peak hours Not suitable for heavy downloads; best for browsing and light use Some regions apply QoS throttling to CF IPs Prerequisites A Cloudflare account (free registration) A domain (optional but recommended; CF provides a free workers.dev subdomain as well) Deployment Steps Step 1: Fork the Project to GitHub Open https://github.com/cmliu/edgetunnel, click Fork in the top right, and copy it to your account.\nStep 2: Create a Worker in Cloudflare Log in to dash.cloudflare.com Click Workers \u0026amp; Pages in the left menu Click Create → Create Worker Give your Worker a name (e.g., my-proxy), then click Deploy Step 3: Paste the Worker Code After deployment, click Edit code Clear the default code in the editor Open your forked GitHub repo, find the _worker.js file, and copy all its contents Paste it into the Worker editor Click Deploy in the top right Step 4: Configure Your UUID (Connection Password) A UUID is your node\u0026rsquo;s unique identifier. Generate one:\n# macOS / Linux uuidgen | tr \u0026#39;[:upper:]\u0026#39; \u0026#39;[:lower:]\u0026#39; # Output example: # a1b2c3d4-e5f6-7890-abcd-ef1234567890 Find the userID variable at the top of your Worker code and fill in your UUID:\nlet userID = \u0026#39;a1b2c3d4-e5f6-7890-abcd-ef1234567890\u0026#39;; Or set it via environment variables (more secure):\nClick Settings → Variables on the Worker page Add a variable: UUID = your UUID Click Save and Deploy Update the code to read from the environment variable:\nlet userID = env.UUID || \u0026#39;default-uuid\u0026#39;; Step 5: Bind a Custom Domain (Optional but Recommended) Workers.dev domains can be unstable in some regions; binding your own domain is better:\nPrerequisite: your domain must be hosted on Cloudflare (NS pointing to CF) Click Settings → Domains \u0026amp; Routes on the Worker page Click Add → Custom domain Enter your domain, for example proxy.yourdomain.com Save; CF automatically configures SSL Getting Your Subscription Link After deploying your Worker, visit:\nhttps://your-worker-domain/your-uuid For example:\nhttps://my-proxy.workers.dev/a1b2c3d4-e5f6-7890-abcd-ef1234567890 The page will return a Base64-encoded subscription containing node information in multiple protocol formats (VLESS, Trojan, VMess).\nSubscription Link Formats https://your-domain/your-uuid?sub # Subscription link (all nodes) https://your-domain/your-uuid?clash # Clash/mihomo format https://your-domain/your-uuid?singbox # sing-box format Using with mihomo Method 1: Import via Subscription (Recommended)\nUse the ?clash format URL directly as a subscription link and paste it into Clash/mihomo\u0026rsquo;s subscription management.\nMethod 2: Manual Configuration\nproxies: - name: \u0026#34;CF-Workers-VLESS\u0026#34; type: vless server: your-worker-domain port: 443 uuid: your-uuid network: ws tls: true ws-opts: path: \u0026#34;/\u0026#34; headers: Host: your-worker-domain client-fingerprint: chrome Optimization: Select Faster CF IPs edgetunnel uses CF-assigned nodes by default; speed varies by region. You can use CF IP optimization tools to select the node with the lowest latency.\nReplacing the IP in your Worker domain with the lowest-latency CF IP can sometimes improve speed by 50% or more.\nTool: CloudflareSpeedTest\n# Download the tool wget https://github.com/XIU2/CloudflareSpeedTest/releases/latest/download/cfst_linux_amd64.tar.gz tar -xzf cfst_linux_amd64.tar.gz ./CloudflareST # After speed testing, results are saved in result.csv # Use the lowest-latency IP to replace the one in your node config CF Workers vs. DMIT VPS Comparison Comparison Item CF Workers DMIT VPS Cost Free $20+/month Speed (Daily) Moderate Fast (CN2 GIA) Stability Good (CF-managed) Excellent Heavy Traffic Not suitable Suitable Risk of Blocking Extremely low Some probability Use Case Backup/Alternative Primary node Recommended Strategy: Use DMIT as your primary, CF Workers as backup. The two solutions complement each other—if your primary node is blocked, CF Workers takes over seamlessly.\nCombine with mihomo\u0026rsquo;s fallback mechanism:\nproxy-groups: - name: \u0026#34;Primary Route\u0026#34; type: fallback url: http://www.gstatic.com/generate_204 interval: 30 proxies: - DMIT-HK-Reality - CF-Workers-VLESS # Backup; auto-switches if primary fails Frequently Asked Questions 522 Error After Worker Deployment Your Worker domain isn\u0026rsquo;t resolving properly. Check:\nWhether your domain is bound to the Worker Whether your Worker is properly deployed (status shows Active) Speed is Slow Try optimizing your IP (see CloudflareST method above) Check the time; CF nodes are under heavy load during peak hours Switch to a different CF data center region (you can select a different region\u0026rsquo;s IP from the optimization results) Node Connects but Can\u0026rsquo;t Access Some Websites Check the proxyIP configuration in your Worker code; some versions require setting an exit IP for proper origin access.\nFor more stable primary solutions, see:\nXray VLESS+XTLS Deployment Guide Hysteria2 Deployment Guide VPS Selection Guide 📷 Cover image · Generated by Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/edgetunnel-cf-workers-vless/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"Digital screens display data on a circuit board background\" loading=\"lazy\" src=\"/images/edgetunnel-cf-workers-vless-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eRunning paid VPS like \u003ca href=\"https://aff.panshi.io/track?id=dmit\"\u003eDMIT\u003c/a\u003e for proxy nodes is stable but costly. What many don\u0026rsquo;t know is that Cloudflare Workers comes with 100,000 free requests daily—enough to run a completely free VLESS node as a backup or alternative. It\u0026rsquo;s worth deploying one for everyone.\u003c/p\u003e\n\u003cp\u003eThis guide uses the open-source project \u003ca href=\"https://github.com/cmliu/edgetunnel\"\u003eedgetunnel\u003c/a\u003e, deployable in under 10 minutes.\u003c/p\u003e\n\u003ch2 id=\"overview\"\u003eOverview\u003c/h2\u003e\n\u003cp\u003eCloudflare Workers is a JavaScript runtime at CF\u0026rsquo;s edge nodes. edgetunnel implements the VLESS protocol in a Worker, routing traffic through CF\u0026rsquo;s CDN network to bypass direct IP identification.\u003c/p\u003e","title":"Zero-cost proxy solution: Building a VLESS node using Cloudflare Workers"},{"content":" Most people have tried voice input and given it up—what comes out is a jumbled mess, takes time to clean up, and ends up slower anyway.\nThat\u0026rsquo;s the old voice recognition problem. Typeless adds an AI layer on top of transcription to polish it, which basically solves it. From using it, three scenarios stand out.\nScenario One: Drafting Technical Articles The most time-consuming part of writing technical articles isn\u0026rsquo;t typing—it\u0026rsquo;s the \u0026ldquo;from idea to first draft\u0026rdquo; phase. You have the structure in your head, but translating it into words hits a wall. You keep deleting and rewriting, and the whole thing just slows down.\nAfter switching to voice, my workflow became:\nThink through the article structure in your head (30 seconds) Open Typeless and dictate the whole thing to Obsidian AI automatically organizes paragraphs, lists, and key points Review it once and add details Dictating a thousand-word article takes about 5–8 minutes, then another 10 to polish—the whole thing under 20 minutes. Typing the same piece on a keyboard used to take 40–60 minutes.\nThe key is: speaking is much closer to how your brain actually works, and you don\u0026rsquo;t lose momentum because your hands can\u0026rsquo;t keep up.\nScenario Two: Writing Code Comments and PR Descriptions This one surprised me, but it actually works really well.\nEveryone knows code comments should be written, but honestly, a lot of people (including me) often skip them because typing feels like a chore. With voice, it becomes: position your cursor before the function and say \u0026ldquo;this function processes Binance API position data, calculates real-time net value, and writes it to KV,\u0026rdquo; and Typeless formats it as a comment automatically.\nSame for PR descriptions: open the PR, dictate What / Why / How, and Typeless outputs a structured Markdown description.\nTypeless integrates with VS Code and GitHub—you use it right in the editor, no need to jump to another app.\nScenario Three: Meetings and Capturing Ideas This is where voice input has always had an edge, but Typeless\u0026rsquo;s AI makes it even better.\nDuring meetings I keep Typeless running, dictating discussion points into my Notion notes. Regular voice recognition gives you a transcript; Typeless will:\nStrip out filler words like \u0026ldquo;uh,\u0026rdquo; \u0026ldquo;like,\u0026rdquo; \u0026ldquo;you know\u0026rdquo; Organize continuous discussion points into lists Recognize action items and to-dos, and auto-format them as checkboxes Meetings end with a structured record that needs no cleanup.\nIt\u0026rsquo;s also great for solo thinking. An idea hits, you trigger Typeless, dictate for 30 seconds, and Obsidian has a complete thought captured.\nA Few Usage Tips 1. Set up a good hotkey\nI use ⌥Space to toggle it on and off—no interference with anything else. Finding a hotkey that feels natural is key.\n2. Build a personal dictionary\nAdd your common technical terms, brand names, and proper nouns. After I added server names, strategy names, and technical jargon, accuracy jumped noticeably.\n3. Practice on low-stakes scenarios first\nVoice input feels awkward at first. Start with personal notes and drafts—don\u0026rsquo;t jump straight to formal emails.\n4. Use the \u0026ldquo;context-aware tone\u0026rdquo; feature\nTypeless adjusts its output style based on the app you\u0026rsquo;re in. Slack messages come out conversational, Word documents formal—no manual tweaking needed.\nHow It Fits with Traditional Input Methods Typeless isn\u0026rsquo;t trying to replace the keyboard. Short words, commands, passwords—the keyboard is still faster. It\u0026rsquo;s built for continuous text output scenarios: writing, note-taking, communication.\nHighest efficiency comes from both: use voice for thoughtful, long-form content, and keyboard for operational, short inputs.\nDownload Typeless free →\nFriend referral code: K1E9FJX\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/typeless-vs-keyboard-workflow/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A sleek wireless keyboard paired with a decorative pen on a \" loading=\"lazy\" src=\"/images/typeless-vs-keyboard-workflow-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eMost people have tried voice input and given it up—what comes out is a jumbled mess, takes time to clean up, and ends up slower anyway.\u003c/p\u003e\n\u003cp\u003eThat\u0026rsquo;s the old voice recognition problem. \u003ca href=\"https://aff.panshi.io/track?id=typeless\"\u003eTypeless\u003c/a\u003e adds an AI layer on top of transcription to polish it, which basically solves it. From using it, three scenarios stand out.\u003c/p\u003e\n\u003ch2 id=\"scenario-one-drafting-technical-articles\"\u003eScenario One: Drafting Technical Articles\u003c/h2\u003e\n\u003cp\u003eThe most time-consuming part of writing technical articles isn\u0026rsquo;t typing—it\u0026rsquo;s the \u0026ldquo;from idea to first draft\u0026rdquo; phase. You have the structure in your head, but translating it into words hits a wall. You keep deleting and rewriting, and the whole thing just slows down.\u003c/p\u003e","title":"How to integrate voice input into your daily workflow: Three core scenarios where I use Typeless"},{"content":" Speech recognition technology itself is already mature, but the real reason it falls short in practice isn\u0026rsquo;t accuracy—it\u0026rsquo;s that the transcribed text isn\u0026rsquo;t immediately usable.\nTypeless positions itself as an AI layer on top of speech recognition, making the output directly practical. This post breaks down several of its core features.\nAuto-cleanup: removing filler words and redundant expressions This is Typeless\u0026rsquo;s most fundamental and practical feature.\nThere\u0026rsquo;s a significant gap between how we speak and how we write. When talking, we:\nFrequently use filler sounds like \u0026ldquo;um,\u0026rdquo; \u0026ldquo;uh,\u0026rdquo; \u0026ldquo;like,\u0026rdquo; \u0026ldquo;you know\u0026rdquo; Change our minds mid-sentence: \u0026ldquo;tomorrow\u0026hellip; wait, actually, let me handle this the day after\u0026rdquo; Repeat the same idea: \u0026ldquo;this is important, really important, absolutely critical\u0026rdquo; Traditional speech recognition transcribes all of this, leaving you with cleanup work. Typeless\u0026rsquo;s AI layer recognizes these patterns and handles them automatically:\nRemoves filler words (\u0026ldquo;um,\u0026rdquo; \u0026ldquo;uh,\u0026rdquo; etc.) Identifies self-corrections and keeps only the final version Merges repeated meanings In practice: what you dictate needs almost no language-level cleanup—you just add content and restructure as needed.\nSmart formatting: auto-detecting structure This is the feature that impressed me most.\nWhen I dictate, I\u0026rsquo;ll say something like \u0026ldquo;there are three points: first\u0026hellip; second\u0026hellip; third\u0026hellip;\u0026rdquo; and Typeless automatically formats it as a numbered list instead of continuous text.\nSimilarly, \u0026ldquo;first\u0026hellip; then\u0026hellip; finally\u0026hellip;\u0026rdquo; becomes an ordered step list; \u0026ldquo;the key point is\u0026hellip;\u0026rdquo; gets highlighted with bold or set off in its own paragraph.\nThis is especially useful for:\nRecording meeting notes (automatically organizes action items) Drafting document outlines (say the structure, it becomes a hierarchical list) Composing emails (auto-detects body paragraphs and bullet-point summaries) Context awareness: adjusting style by application Typeless detects which application is currently active and adjusts the output tone accordingly.\nIn Slack, the same phrase comes out more conversational; in Word or Outlook, it\u0026rsquo;s more formal; in VS Code, it preserves code-related formatting (variable names don\u0026rsquo;t get \u0026ldquo;corrected\u0026rdquo; to Chinese, for instance).\nNo manual setup required—it just works. For someone like me who switches between a dozen applications throughout the day, this saves a lot of hassle.\nPrivacy by design: audio stays local Many people have a reasonable concern about voice input: is my speech being recorded and uploaded to a server?\nTypeless\u0026rsquo;s approach: audio processing happens locally, raw recordings aren\u0026rsquo;t uploaded, and history is stored only on your device and not used for model training.\nThis differs from most cloud-based speech APIs (like cloud-powered input methods). Those send audio to a server for recognition; Typeless has clearer privacy boundaries.\nFor scenarios involving business information, customer data, or personal privacy content, this matters.\nPersonalized learning: gets better with use Typeless learns your speaking habits in two ways:\nPersonal Dictionary: manually add your frequently-used proper nouns, brand names, names, technical terms. After I added \u0026ldquo;Polaris Strategy,\u0026rdquo; \u0026ldquo;mihomo,\u0026rdquo; and \u0026ldquo;OpenClaw,\u0026rdquo; these terms recognize with near-100% accuracy.\nUsage habit learning: as you use it longer, Typeless learns your vocabulary preferences and expression patterns, and accuracy keeps improving.\nThis learning is device-local—your data never leaves.\nMultilingual and code-mixing support Supports 100+ languages and handles switching languages within a single sentence.\nPerfect for scenarios where you mix Chinese and English constantly. Use technical vocabulary in English and context in Chinese, and Typeless recognizes it correctly without manual language-mode switching.\nCompatible applications Currently supports 50+ applications, including:\nCategory Representative apps Writing Notion, Obsidian, Word, Pages Communication Slack, Gmail, iMessage, Teams Development VS Code, GitHub Meetings Zoom, Teams (in-meeting input) Other Browser input fields, Telegram Who it\u0026rsquo;s for Content creators: writing heavily every day, voice input can double your creation speed Technical professionals: writing docs, PR descriptions, technical comments—these continuous-text scenarios come up constantly Non-native English speakers: voice is closer to native-language thinking speed than keyboard, no spelling concerns Meeting-heavy schedules: capture meeting content in real-time, auto-organize into structured notes If you want to try it, download free now: typeless.com\nIf you have a friend\u0026rsquo;s referral code: K1E9FJX\n📷 Cover image · Generated with Flux Schnell AI · panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/typeless-privacy-ai-features/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A sleek wireless keyboard paired with a decorative pen on a \" loading=\"lazy\" src=\"/images/typeless-privacy-ai-features-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eSpeech recognition technology itself is already mature, but the real reason it falls short in practice isn\u0026rsquo;t accuracy—it\u0026rsquo;s that the transcribed text isn\u0026rsquo;t immediately usable.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=typeless\"\u003eTypeless\u003c/a\u003e positions itself as an AI layer on top of speech recognition, making the output directly practical. This post breaks down several of its core features.\u003c/p\u003e\n\u003ch2 id=\"auto-cleanup-removing-filler-words-and-redundant-expressions\"\u003eAuto-cleanup: removing filler words and redundant expressions\u003c/h2\u003e\n\u003cp\u003eThis is Typeless\u0026rsquo;s most fundamental and practical feature.\u003c/p\u003e","title":"Typeless Core Features Demystified: How AI Makes Voice Input Actually Useful"},{"content":" Slow typing has long been my productivity bottleneck. Writing articles, replying to emails, capturing ideas — it\u0026rsquo;s not that my brain can\u0026rsquo;t keep up, it\u0026rsquo;s my fingers can\u0026rsquo;t.\nUntil I started using Typeless.\nWhat is Typeless Typeless is an AI-powered voice input tool that supports macOS, Windows, iOS, and Android. The core idea is simple: you speak, it writes. Unlike clunky speech recognition from a decade ago, Typeless layers AI on top:\nAutomatically removes filler words — \u0026ldquo;um,\u0026rdquo; \u0026ldquo;uh,\u0026rdquo; \u0026ldquo;you know,\u0026rdquo; \u0026ldquo;I mean,\u0026rdquo; etc. Catches self-corrections (you say \u0026ldquo;tomorrow… wait, the day after tomorrow\u0026rdquo; and it outputs just \u0026ldquo;the day after tomorrow\u0026rdquo;) Auto-formats based on context, detecting lists, steps, and key points Adapts its tone to the app (casual on Slack, formal in Word) How Much Faster Is It Official numbers: keyboard averages 45 WPM, voice input does 220 WPM — nearly 5x faster.\nI tested it myself writing an 800-word technical note:\nTyping: about 25 minutes Typeless voice: about 8 minutes The gap comes from two things: speech is inherently faster than typing, and you never stop to think about spelling or switch input methods.\nMixed Chinese-English Experience This was my biggest concern — and my biggest pleasant surprise.\nI often mix languages heavily when I write, like:\n\u0026ldquo;Running a backtest with Claude Code, I noticed the equity curve\u0026rsquo;s drawdown is getting a bit high — need to tweak the stop-loss parameters.\u0026rdquo;\nTypeless handles this kind of mixed expression flawlessly, with no manual language switching. It supports 100+ languages with auto-detection, switching between them mid-sentence without skipping a beat.\nPrivacy: Audio Stays Local The biggest concern with voice tools is where your recordings go. Typeless is clear: audio never uploads, history stays local, your data doesn\u0026rsquo;t train their model.\nThat\u0026rsquo;s better than a lot of cloud-based speech APIs.\nThe More You Use It, the Better It Gets Typeless has a personal dictionary where you can add proper nouns, brand names, and technical terms. After a while, it learns your speech patterns and accuracy keeps improving.\nAfter adding terms like \u0026ldquo;Panshi,\u0026rdquo; \u0026ldquo;Polaris Strategy,\u0026rdquo; \u0026ldquo;OpenClaw,\u0026rdquo; and \u0026ldquo;Mihomo,\u0026rdquo; recognition got noticeably better.\nSupported Apps 50+ apps have native support, including:\nWriting: Notion, Obsidian, Word, Pages Communication: Slack, Gmail, iMessage, Teams, Outlook Development: VS Code, GitHub (great for writing PR descriptions and commit messages) Other: Telegram, WeChat web, various browser input fields How to Get Started Download from the official site: typeless.com, free to start If you have a referral code from a friend, try K1E9FJX (enter referral code K1E9FJX) After installing, enable microphone permissions and set a hotkey (I use ⌥Space) Start with simple scenarios — meeting notes, dictating Telegram messages Wrap-up Typeless isn\u0026rsquo;t vaporware — it genuinely changed how I input text. Especially recommend it to:\nPeople who write a ton daily (articles, docs, emails) People who mix languages constantly People who want to get ideas out of their head fast Slow typing isn\u0026rsquo;t your problem — your tools just haven\u0026rsquo;t caught up yet.\nDownload Typeless free →\n📷 Cover image · Generated with Flux Schnell AI · Panshi.io brand style\n","permalink":"https://blog.panshi.io/en/posts/typeless-ai-voice-input/","summary":"\u003c!-- hero-image --\u003e\n\u003cp\u003e\u003cimg alt=\"A sleek wireless keyboard paired with a decorative pen on a \" loading=\"lazy\" src=\"/images/typeless-ai-voice-input-hero.jpg\"\u003e\u003c/p\u003e\n\u003cp\u003eSlow typing has long been my productivity bottleneck. Writing articles, replying to emails, capturing ideas — it\u0026rsquo;s not that my brain can\u0026rsquo;t keep up, it\u0026rsquo;s my fingers can\u0026rsquo;t.\u003c/p\u003e\n\u003cp\u003eUntil I started using \u003ca href=\"https://aff.panshi.io/track?id=typeless\"\u003eTypeless\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"what-is-typeless\"\u003eWhat is Typeless\u003c/h2\u003e\n\u003cp\u003eTypeless is an AI-powered voice input tool that supports macOS, Windows, iOS, and Android. The core idea is simple: \u003cstrong\u003eyou speak, it writes\u003c/strong\u003e. Unlike clunky speech recognition from a decade ago, Typeless layers AI on top:\u003c/p\u003e","title":"Typeless Real Test: AI voice input is 4x faster than keyboard typing, seamless Chinese-English mixing."},{"content":"1 Month, $5000 in AI Subscriptions and Tokens.\nI\u0026rsquo;m one person. With Claude Code + Codex + Copilot, I built 18 distinct systems. ~50k lines of code.\nIf you hired 2 full-stack engineers to build this from scratch, it\u0026rsquo;d take 6–12 months and cost ¥300k–600k.\nHere\u0026rsquo;s what I built in each section 👇 (1/7)\n【Quant Trading + Blog Traffic Acquisition】\n🧠 Quant: Polaris strategy versions 1/5/6 live trading, dual-machine hot standby, backtesting lab v2 (Numba JIT + Walk-Forward + Monte Carlo + multi-symbol portfolio), desensitized Mac standby.\n🌐 panshi.io blog: 64 technical articles, active-active AWS HK/US + Cloudflare CDN, 14-channel affiliate tracker with per-article attribution, 64 Flux AI hero images with consistent branding. (2/7)\n【Release Management Web App :9891 · The Most Unique Piece】\nA local web app that independently manages panshi.io publishing:\n10+ admin pages (articles + affiliate attribution + editor + OG preview + image library) 7-step publishing pipeline + 10 scheduled tasks X three modes: short tweet / Premium long-form / thread digest (like this one) That\u0026rsquo;s 2 months of solo engineering work. (3/7)\n【Monitoring / Backup / Scheduled Tasks】\n3-2-1 backup: Mac SSD + iCloud 2TB + S3 Deep Archive Tokyo (¥0.15/month)\n20+ backup jobs + centralized monitoring on :9890 + boot-time catch-up\n34 scheduled tasks on Mac via job_runner + Prometheus + Grafana + Telegram alerts\n13 Grafana dashboards for connection monitoring\nThat infrastructure stack is 3 months of solo engineering. (4/7)\n【Proxies + Security + AI Tooling Ecosystem】\n🛡️ Dual-gateway redundancy + residential proxy 7-node fallback + Surge fail-closed sentinel (auto PF killswitch on crash) + custom Swift menu bar app (NetworkGuard)\n🤖 Claude Code dual-channel switching, Sonnet/Opus/Haiku model mix (60% API cost reduction), cmux multi-session parallelization, 7 independent Telegram bots with division of labor (5/7)\n【Three Truths About Solo AI Development】\n1️⃣ Code is no longer the bottleneck—requirements definition is. Claude can churn out hundreds of lines in one go, but you have to figure out what you want yourself.\n2️⃣ Deployment/monitoring/backup is worth more than initial development—70% of the effort goes there.\n3️⃣ Standardized infrastructure lets AI transfer knowledge across tasks—efficiency grows exponentially.\nIt\u0026rsquo;s not that AI replaces humans—it\u0026rsquo;s that \u0026ldquo;one person who understands the business + knows how to use AI = a whole team from the past.\u0026rdquo; (6/7)\n📖 Complete breakdown of all 18 systems + cost breakdown + development paradigm analysis: https://panshi.io/posts/5000-usd-token-what-i-built/\nDrop your thoughts: what\u0026rsquo;s the most satisfying project you\u0026rsquo;ve shipped with AI? (7/7)\n","permalink":"https://blog.panshi.io/en/posts/5000-usd-token-what-i-built.thread/","summary":"\u003cp\u003e1 Month, $5000 in AI Subscriptions and Tokens.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m one person. With Claude Code + Codex + Copilot, I built 18 distinct systems. ~50k lines of code.\u003c/p\u003e\n\u003cp\u003eIf you hired 2 full-stack engineers to build this from scratch, it\u0026rsquo;d take 6–12 months and cost ¥300k–600k.\u003c/p\u003e\n\u003cp\u003eHere\u0026rsquo;s what I built in each section 👇 (1/7)\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e【Quant Trading + Blog Traffic Acquisition】\u003c/p\u003e\n\u003cp\u003e🧠 Quant: Polaris strategy versions 1/5/6 live trading, dual-machine hot standby, backtesting lab v2 (Numba JIT + Walk-Forward + Monte Carlo + multi-symbol portfolio), desensitized Mac standby.\u003c/p\u003e","title":""},{"content":"👋 Hello I\u0026rsquo;m Panshi, an infrastructure enthusiast and tech tinkerer.\nWhat I\u0026rsquo;m working on:\nSystems Architecture: Multi-gateway, multi-line redundancy, Mihomo fine-grained routing, hybrid egress combining residential and datacenter lines Quant Trading: Running automated strategies on Binance / Pionex—grid trading, arbitrage, and signal tracking AI Workflows: Heavy Claude Code user, embedding AI into daily ops and development This blog documents my real infrastructure lessons learned. No hype, just reproducible stuff.\n📡 Find Me X: @panshi8848 Telegram: @panshi8848 Hit me up on Telegram with technical questions. Happy to discuss quant signals and network architecture.\n💡 About Affiliate Links Some links on this blog are affiliate links. I only recommend products I actually use:\nVPS: DMIT (US / Hong Kong nodes, low latency, stable) Quant: Pionex (free grid trading bot), Binance Residential Proxies: IPRoyal (residential IPs, fair pricing) Hardware Wallet: SafePal Signing up through my links costs you nothing, and I get a small commission to help cover blog hosting costs.\n","permalink":"https://blog.panshi.io/en/about/","summary":"关于磐石 - 系统架构、量化交易、AI 工作流的实践者","title":"About me"},{"content":"","permalink":"https://blog.panshi.io/en/github/","summary":"High-quality open source projects in DevOps / AI / Quantitative Trading / Proxy directions","title":"GitHub Curated"},{"content":"","permalink":"https://blog.panshi.io/en/nav/","summary":"","title":"Navigation"},{"content":"","permalink":"https://blog.panshi.io/en/polaris/","summary":"","title":"Polaris strategy · Live tracking"},{"content":"Everything listed here is something I personally use and only recommend after trying it. Signing up through my links doesn\u0026rsquo;t cost you extra—I get a small commission that helps offset my hosting costs.\nVPS / Servers DMIT ⭐ Top Recommendation Sign up →\nHong Kong nodes with ultra-low latency (20-40ms), CN2 GIA backbone, native IPs, and strong streaming service support. Supports Hysteria2. I\u0026rsquo;ve been using it for over a year and it\u0026rsquo;s the most stable VPS provider I\u0026rsquo;ve tried.\nHong Kong node: 20-40ms (from Guangzhou) US Los Angeles: CN2 GIA, 150-180ms Supported protocols: Xray VLESS + Hysteria2 Tencent Cloud International Sign up →\nJapan node as a backup option, competitively priced with frequent promotions. IP blocks are more common than DMIT, so it works well as a secondary choice.\nAlgorithmic Trading Pionex ⭐ Free Grid Trading Bot Sign up →\nShips with 16 free trading bots, grid trading is completely free, 0.05% trading fees only. Liquidity aggregated from Binance + Huobi. Perfect for beginners who want to get into algo trading without writing code.\nBinance ⭐ Primary Exchange Sign up →\nThe world\u0026rsquo;s largest crypto exchange with the best liquidity and comprehensive API documentation. My main quant strategies run on Binance API. Sign up through my referral link for commission rebates, and with BNB fee discounts you can reduce fees to as low as 0.045%.\n→ See Fee reduction tips · API security setup\nProxy IPs IPRoyal ⭐ Residential IPs Sign up →\nPay-per-GB pricing with no monthly commitment—buy only what you use. Stable quality, IP selection by country/city. Perfect for account registration, data scraping, and similar use cases requiring residential IPs.\nHardware Security SafePal Hardware Wallet Sign up →\nCold storage for crypto assets. If you\u0026rsquo;re holding a significant amount, a hardware wallet for offline key management is worth it. SafePal offers good value and supports multiple chains.\nAI Tools Typeless ⭐ AI Voice Input Download free → · Friend referral code: K1E9FJX\nVoice input is 4x faster than typing (220 WPM vs. 45 WPM), with AI automatically removing filler words, cleaning up formatting, and catching self-corrections. Supports mixed Chinese-English input across 50+ apps including Notion, Obsidian, VS Code, Slack, and Gmail.\nPrivacy-first: Audio stays local, no cloud uploads Gets smarter with use: Learns your vocabulary and speaking style Supports 100+ languages with automatic language detection Platforms: macOS / Windows / iOS / Android → Read my experience with Typeless\nClaude Pro (Anthropic) Subscribe to Claude Pro →\nAnthropic\u0026rsquo;s flagship AI product, Claude Opus 4.6 is one of the most powerful reasoning models available. $20/month includes unlimited use of claude.ai web interface and the Claude Code CLI tool.\n→ Read Claude Code workflow · Sonnet vs. Opus comparison\nGitHub Copilot Pro+ Subscribe to Copilot Pro+ →\nAI coding assistant embedded in your IDE, $19/month includes 1,500 monthly calls to Claude Opus/Sonnet advanced models. Works as a backend for Claude Code and OpenClaw, cheaper than subscribing to Claude API directly.\n→ Read Is Copilot Pro+ worth it?\nOpenClaw A framework for AI to work continuously in the background, controlled via Telegram, with skills for GitHub, Obsidian, weather, and more.\n→ Read my setup guide\nGoogle One AI Premium Friend invite →\nIncludes Gemini Advanced (Google\u0026rsquo;s most powerful AI model), 2TB cloud storage, NotebookLM Plus, and more. Subscribe via referral link and both of us get several months free.\nSupport the Creator ☕ Ko-fi ko-fi.com/panshi →\nOne-time tips or monthly membership—supports credit card and PayPal.\n🎯 Patreon patreon.com/panshi8848 →\nTiered memberships with different perks at each level (Polaris monthly reports, strategy signals, etc.).\nMobile SIM Tello (US MVNO) Sign up →\nRuns on T-Mobile\u0026rsquo;s network, flexible plans starting from $5/month. Ideal for getting a US phone number for account verification (ChatGPT, Claude, US-region signups, etc.). Sign up via referral link and both get $10 account credit.\nLast updated: April 15, 2026\n","permalink":"https://blog.panshi.io/en/tools/","summary":"Tools and services Panshi actually uses, including affiliate links","title":"Recommended tools"},{"content":"This blog is ad-free, and all content is free. But it costs significant money to keep it running each month.\nIf you\u0026rsquo;ve learned something here, or if the /Polaris strategy has been useful to you, please consider buying me a coffee—even a little bit is the greatest encouragement for continued output.\nWays to Support ☕ Ko-fi (Tip / Monthly Membership) ko-fi.com/panshi →\nOne-time tip or monthly membership subscription, supporting credit card / PayPal. Perfect for those who want lightweight support.\n🎯 Patreon (Tiered Membership) patreon.com/panshi8848 →\nSubscribe by tier—different levels come with different benefits (Polaris monthly reports, strategy signal notifications, etc.). Great for those who want deeper engagement.\n₮ USDT (TRC20) Scan or copy address TNesE1mJZ11ogsrPC7tsG2he7UJ7iKSmKn Copy Network: TRON (TRC20) · Token: USDT Monthly Operating Costs Service Purpose Monthly Fee Claude Pro Writing / coding / strategy research $20 Copilot Pro+ × 2 AI-assisted programming $80 AWS × 4 instances Blog servers + live trading infrastructure $60 DMIT US VPS High-speed proxy node $20 Residential proxy (iProyal) AI tools dedicated line $5 Other (domains, CDN, storage…) Infrastructure ~$15 Total ~$200/month This doesn\u0026rsquo;t include labor—debugging strategies, writing articles, maintaining systems takes about 20 hours per week.\nHow Your Support Helps Keep servers and API subscriptions running without interruption Free up more time for in-depth technical articles Continue running live Polaris strategy with real signal records Explore more AI tools and quant strategies, sharing pain points and lessons learned first-hand Thank you to every reader.\nIf sponsoring isn\u0026rsquo;t convenient, sharing articles with friends who might find them interesting is hugely helpful too! Or sign up through my recommended tools — the platforms give me a small commission with zero extra cost to you.\n","permalink":"https://blog.panshi.io/en/sponsor/","summary":"\u003cp\u003eThis blog is ad-free, and all content is free. But it costs significant money to keep it running each month.\u003c/p\u003e\n\u003cp\u003eIf you\u0026rsquo;ve learned something here, or if the /Polaris strategy has been useful to you, please consider buying me a coffee—even a little bit is the greatest encouragement for continued output.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"ways-to-support\"\u003eWays to Support\u003c/h2\u003e\n\u003ch3 id=\"-ko-fi-tip--monthly-membership\"\u003e☕ Ko-fi (Tip / Monthly Membership)\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://aff.panshi.io/track?id=kofi\"\u003eko-fi.com/panshi →\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eOne-time tip or monthly membership subscription, supporting credit card / PayPal. Perfect for those who want lightweight support.\u003c/p\u003e","title":"Support · Buy me a coffee"},{"content":"","permalink":"https://blog.panshi.io/en/stock/","summary":"","title":"VPS Inventory Monitoring"}]