aicoin-freqtrade
Freqtradeに関する戦略作成、バックテスト、最適化、運用切り替え、現在の状況や損益の確認など、ユーザーの質問に対し、環境に合わせて自動でFreqtradeを操作し、必要な情報を提供するSkill。
📜 元の英語説明(参考)
Use when user asks about Freqtrade — strategy creation, backtest, hyperopt, switching strategies / pairs / dry-run mode, querying live bot status / balance / open positions / 盈亏. Trigger words: 'write strategy', 'create strategy', 'backtest', 'switch strategy', 'switch to live', 'open positions', 'P&L', '写策略', '创建策略', '回测', '部署策略', '切策略', '切实盘', '当前持仓', '今天赚多少', '盈亏'. In CoinClaw containers (OpenClaw / Hermes / Claude Code) freqtrade is a supervisord-managed daemon on :8080 — this skill auto-detects engine + paths via lib/coinclaw-env.mjs and never spawns competing freqtrade processes. Outside CoinClaw it falls back to host mode (clone freqtrade + nohup). For prices/charts use aicoin-market. For exchange trading use aicoin-trading. For Hyperliquid use aicoin-hyperliquid.
🇯🇵 日本人クリエイター向け解説
Freqtradeに関する戦略作成、バックテスト、最適化、運用切り替え、現在の状況や損益の確認など、ユーザーの質問に対し、環境に合わせて自動でFreqtradeを操作し、必要な情報を提供するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o aicoin-freqtrade.zip https://jpskill.com/download/16465.zip && unzip -o aicoin-freqtrade.zip && rm aicoin-freqtrade.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/16465.zip -OutFile "$d\aicoin-freqtrade.zip"; Expand-Archive "$d\aicoin-freqtrade.zip" -DestinationPath $d -Force; ri "$d\aicoin-freqtrade.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
aicoin-freqtrade.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
aicoin-freqtradeフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 4
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
AiCoin Freqtrade
Freqtrade 戦略 / バックテスト / デプロイ / リアルタイム制御 — CoinClaw の三つのエンジンを跨いで自動的に適合します。
重要な原則 (読んでから手を動かしてください)
一、CoinClaw コンテナ内の freqtrade は常駐デーモンです
OpenClaw / Hermes / Claude Code の三つのエンジンコンテナはすべて、supervisord を通じて freqtrade を常駐プロセスとして起動し、127.0.0.1:8080 を監視します。デフォルトでは NoOpStrategy (空運転) が実行されます。自分で freqtrade プロセスを起動しないでください — デーモンとポートを奪い合い、ダッシュボードがすぐにオフラインになります。
正しい手順は、戦略ファイルを記述 → ft-deploy.mjs deploy {"strategy":"..."} を呼び出す → スクリプトが config を変更 + デーモンを再起動、です。ダッシュボードは自動的に新しい戦略を表示します。
scripts/ft.mjs + scripts/ft-deploy.mjs には、三つのエンジンの自動識別機能 (lib/coinclaw-env.mjs) が組み込まれており、パス / auth / supervisord socket はすべて自動的に解析されます。エージェントはどのエンジンであるかを気にする必要はありません。
二、常に freqtrade REST API を呼び出してください、"自分で計算" しないでください
| ユーザーからの質問 | 最初に呼び出す必要があるもの |
|---|---|
| 現在どれだけ儲かっているか / 総損益 / 今日どれだけ上がったか | ft.mjs profit (/api/v1/profit) |
| ポジション / 現在開いているポジション | ft.mjs trades_open (/api/v1/status) |
| 残高 / 資金 | ft.mjs balance (/api/v1/balance) |
| 実行中の戦略 / 現在のモード | ft.mjs daemon_info または config |
| 過去の取引 / 決済済み | ft.mjs trades_history |
| 個々の取引ペアのパフォーマンス | ft.mjs profit_per_pair |
ダッシュボードの数値整合性ルール (重要): ユーザーが「どれだけ儲かったか」を尋ねた場合、二つの数値を報告する必要があります。
- 決済済み累積損益 =
profit_closed_coin(USDT) — ダッシュボードのトップバーの累積損益 = これ - 含み損益を含む総損益 =
profit_all_coin(USDT) — 決済済み + 現在のポジションの含み損益
/status のみを呼び出してポジションの含み損益を取得すると、決済済みの部分が抜け落ち、ダッシュボードの数値と一致しなくなります — ユーザーはすぐに気づき、信頼度はゼロになります。
三、戦略の切り替え / 実取引への切り替え / 取引ペアの切り替えは必ずスクリプトを使用してください
config.json はデーモン起動時に一度だけ読み込まれるため、手動で変更しても自動的に有効になりません。以下を使用する必要があります。
| 操作 | コマンド | デーモンの再起動が必要ですか |
|---|---|---|
| 戦略の切り替え | ft.mjs set_strategy {"strategy":"X"} |
再起動が必要 (~30秒) |
| 取引ペアの切り替え | ft.mjs set_pairs {"pairs":[...]} |
再起動不要、reload_config で可 |
| 実取引/模擬取引の切り替え | ft.mjs set_dry_run {"dry_run":false} |
再起動が必要 |
| 設定のリロード | ft.mjs reload |
再起動不要 |
または、すべての変更を一度に完了させる: ft-deploy.mjs deploy {"strategy":"X","pairs":["BTC/USDT:USDT"],"dry_run":false}。
config.json を直接変更する操作 (pair_whitelist / minimal_roi / stoploss などの手動編集を含む) は、変更後すぐに ft.mjs reload を呼び出す必要があります — そうしないと、デーモンはメモリ内の古い設定で実行され、ホワイトリスト/ストップロスなどの変更は有効になりません。reload を忘れることが、最も一般的な「変更したのに効果がない」理由です。
チャットから開始される高リスク操作は、必ず確認を求める必要があります (違反は間違いです)。
適用対象: ユーザーがチャットで「決済」、「実取引」、「売却」、「ポジションを開く」などと言う場合 — エージェントが force_exit / force_enter / set_dry_run を呼び出す操作。
手順:
- 最初にプレビューを表示: どの取引 / ペア / 現在の損益 / 見積損益 / dry_run vs live / 残高状況
- ユーザーが「確認」または「yes」を入力するのを明確に待ってから、
force_exit/set_dry_run/force_enterを実際に呼び出す - ユーザーが断定的 (「決済」、「すぐに切り替え」) であっても、最初にプレビューを表示して確認を待つ必要があります
確認が不要なもの:
- 照会 (ポジション / 損益 / 状態の確認) — 直接読み取る
- freqtrade デーモンが戦略シグナルに基づいて自動的にポジションを開閉する — これはデーモンの本来の仕事であり、ユーザーは実取引に切り替えた時点で許可しています。エージェントはこの経路には関与せず、妨害したり確認したりする必要はありません
- 非破壊的な設定 (
set_pairsで通貨ペアを追加、reload) — 変更リストを表示して直接実行
ルール違反の反例:
- ❌ ユーザーが「決済」と言ったので、
force_exitを直接呼び出して実際のポジションを決済した (K-Live-3 dogfood で見つかった実際のバグ) - ❌ ユーザーが「実取引」と言ったので、.env key / 残高 / リスクを表示せずに
set_dry_run {"dry_run":false}を直接呼び出した - ✅ ユーザーが「決済」と言ったので、「ポジション: BNB/USDT 0.05 +$1.07、このポジションを決済しますか? dry_run=true 模擬取引」と表示し、ユーザーの確認を待った
戦略の作成 + 戦略の切り替えは、二段階に分ける傾向があります (create_strategy が一段階、set_strategy が一段階)。技術的な制限ではなく、UX の選択です。
- 第一段階: 戦略ファイルを記述 → ユーザーに「X.py が生成されました。切り替えますか?」と伝える
- ユーザーが確認した後、第二段階:
set_strategyで戦略を切り替え + デーモンを再起動 (~30秒)
このようにすることで、ユーザーは戦略を切り替える前に生成されたファイルを確認できます。デーモンの再起動に 30 秒かかる間、ユーザーは状態を予測でき、チャットがフリーズしたと誤解することはありません。ユーザーが「一気に完了させてほしい」と明確に言った場合は、一段階で両方のステップを実行することもできますが、デフォルトでは段階的に行います。
四、Freqtrade はグリッド戦略 (grid) をサポートしていません
ユーザーがグリッドについて質問した場合は、制限事項を説明し、トレンド追跡 / レンジ戦略 / グリッドリターンシミュレーターを代替として提案してください。偽のグリッドを無理に作成しないでください。
簡易リファレンス
| タスク | コマンド |
|---|---|
| デーモンの状態 + 設定の確認 | node scripts/ft-deploy.mjs check または ft.mjs daemon_info |
| 戦略リストの確認 | node scripts/ft-deploy.mjs strategy_list |
| 戦略の作成 (クイックジェネレーター) | node scripts/ft-deploy.mjs create_strategy '{"name":"MyStrat","timeframe":"15m","indicators":["rsi","macd","ema"],"aicoin_data":["funding_rate"]}' |
| 戦略をデーモンにデプロイ | node scripts/ft-deploy.mjs deploy '{"strategy":"MyStrat"}' |
| デプロイ + 実取引 | node scripts/ft-deploy.mjs deploy '{"strategy":"MyStrat","dry_run":false}' |
| バックテスト | node scripts/ft-deploy.mjs backtest '{"strategy":"MyStrat","timeframe":"1h","timerange":"20250101-20260301"}' |
| Hyperopt パラメータ調整 | node scripts/ft-deploy.mjs hyperopt '{"strategy":"MyStrat","timeframe":"1h","epochs":100}' |
| 損益の確認 | node scripts/ft.mjs profit |
| ポジションの確認 | node scripts/ft.mjs trades_open |
| 残高の確認 | node scripts/ft.mjs balance |
| 取引ペアの切り替え | node scripts/ft.mjs set_pairs '{"pairs":["BTC/USDT:USDT","ETH/USDT:USDT"]}' |
| デーモンの再起動 | node scripts/ft.mjs restart |
| ログの確認 | node scripts/ft-deploy.mjs logs '{"lines":100}' |
戦略の作成:最初にどのルートを辿るかを判断する
判断ルール:
- ユーザーが漠然とした説明 (「RSI 戦略」、「移動平均線のクロス」、「ボリンジャーバンド回帰」) のみを提供し、具体的なパラメータの詳細を指定していない場合 → A. クイックジェネレーター
- ユーザーが具体的なロジック (カスタムエントリー/エグジット条件、複数期間の共振、複数通貨のローテーション、複合指標、カスタムポジション管理) を提供している場合 → B. Python を直接記述
- A で生成した後、ユーザーが詳細を変更したい場合 → 生成された .py ファイルを直接編集し、create_strategy で上書きしないでください
A. クイックジェネレーター (簡単な戦略)
create_strategy コマンド一つで、実行可能な戦略ファイルを生成します。「まず実行してから調整する」というシナリオに適しています。
node scripts/ft-deploy.mjs create_strategy '{"name":"MACDStrategy","timeframe":"15m","indicators":["macd","rsi","atr"]}'
node scripts/ft-deploy.mjs create_strategy '{"name":"RSILong","timeframe":"1h","indicators":["rsi"],"direction":"long"}'
node scripts/ft-deploy.mjs create_strategy '{"name":"WhaleStrat","timeframe":"15m","indicators":["rsi","macd"],"aicoin_data":["funding_rate","ls_ratio"]}'
選択可能な indicators: rsi, bb, ema, sma, macd, stochastic/kdj, atr, adx, cci, williams_r, vwap, ichimoku, volume_sma, obv.
選択可能な direction: "long" (デフォルト、買いのみ) | "short" (売りのみ) | "both" (両方向)。
ユーザーが「RSI<30 で買い、RSI>70 で売る」と言った場合 → direction="long" (RSI>70 = 買いポジションの決済、売りポジションの開始ではありません)。ユーザーが明確に「売り / 両方向 / 買いも売りも行う」と言った場合にのみ、"both" または "short" を使用します。
選択可能な aicoin_data: funding_rate (ベーシック版), ls_ratio (ベーシック版), big_orders (スタンダード版), open_interest (プロフェッショナル版), liquidation_map (アドバンス版).
ジェネレーターの限界: プリセットされた指標の組み合わせしかできず、複数期間、複数通貨のローテーション、カスタム複合指標はサポートしていません。これらの要件が発生した場合は、直接 B に進んでください。
B. カスタム Python 戦略 (複雑なロジック)
.py ファイルを直接デーモンの strategy ディレクトリに記述します。この方法を使用すると、freqtrade がサポートするあらゆる戦略ロジック (複数期間の informative pairs、カスタムポジション管理、複数指標の複合条件など) を実装できます。
三つのエンジンでこのディレクトリは異なります。daemon_info から取得するか、Write ツールを使用して以下のいずれかのパスに書き込みます (スクリプトは自動的に /api/v1/show_config で検証します)。
| エンジン | strategy ディレクトリ |
|---|---|
| OpenClaw | ~/.openclaw/workspace/strategies/ |
| Hermes | /workspace/strategies/ |
| Claude Code | /workspace/strategies/ |
AiCoin Python SDK (aicoin_data.py, image build 時に上記のディレクトリにコピー済み、create_strategy でもバックアップとしてコピー): を使用します。
from aicoin_data import AiCoinData, ccxt_to_aicoin
ac = AiCoinData(cache_ttl=300)
symbol = ccxt_to_aicoin("BTC/USDT:USDT", "binance") # → "btcswapusdt:binance"
# 無料版
ac.coin_ticker("bitcoin")
ac.kline(symbol, period="3600")
ac.hot_coins("market")
# ベーシック版 ($29/月)
ac.funding_rate(symbol)
ac.funding_rate(symbol, weighted=True)
ac.ls_ratio()
#
(原文はここで切り詰められています) 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
AiCoin Freqtrade
Freqtrade 策略 / 回测 / 部署 / 实时控制 — 跨 CoinClaw 三引擎自动适配。
关键原则(读完再动手)
一、CoinClaw 容器里 freqtrade 是常驻 daemon
OpenClaw / Hermes / Claude Code 三个引擎容器都通过 supervisord 把 freqtrade 起为常驻进程, 监听 127.0.0.1:8080, 默认跑 NoOpStrategy(空跑). 不要自己起 freqtrade 进程 — 会跟 daemon 抢端口, dashboard 立刻 offline.
正确流程是: 写策略文件 → 调 ft-deploy.mjs deploy {"strategy":"..."} → 脚本改 config + 重启 daemon. dashboard 会自动刷出新策略.
scripts/ft.mjs + scripts/ft-deploy.mjs 内置三引擎自动识别(lib/coinclaw-env.mjs), 路径 / auth / supervisord socket 都自动解析, agent 不用关心是哪个引擎.
二、永远先调 freqtrade REST API, 不要"自己计算"
| 用户问 | 必须先调 |
|---|---|
| 现在赚多少 / 总盈亏 / 今天涨了多少 | ft.mjs profit (/api/v1/profit) |
| 持仓 / 现在开了哪些 | ft.mjs trades_open (/api/v1/status) |
| 余额 / 资金多少 | ft.mjs balance (/api/v1/balance) |
| 跑的什么策略 / 当前模式 | ft.mjs daemon_info 或 config |
| 历史交易 / 已平仓 | ft.mjs trades_history |
| 单交易对绩效 | ft.mjs profit_per_pair |
dashboard 数字对齐规则(关键): 用户问"赚了多少"必须报告两个数字:
- 已平仓累计盈亏 =
profit_closed_coin(USDT) — dashboard 顶栏的累计盈亏 = 这个 - 含浮动总盈亏 =
profit_all_coin(USDT) — 已平仓 + 当前持仓的浮动盈亏
只调 /status 拿持仓浮动盈亏会漏掉已平仓部分, 导致跟 dashboard 数字不一致 — 用户立刻发现, 信任度归零.
三、切策略 / 切实盘 / 切交易对必须走脚本
config.json 是 daemon 启动时读一次, 手动改完不会自动生效. 必须用:
| 操作 | 命令 | 是否需要 daemon 重启 |
|---|---|---|
| 切策略 | ft.mjs set_strategy {"strategy":"X"} |
必须重启 (~30s) |
| 切交易对 | ft.mjs set_pairs {"pairs":[...]} |
不重启, reload_config 即可 |
| 切实盘/模拟 | ft.mjs set_dry_run {"dry_run":false} |
必须重启 |
| reload 配置 | ft.mjs reload |
不重启 |
或者一次完成所有变更: ft-deploy.mjs deploy {"strategy":"X","pairs":["BTC/USDT:USDT"],"dry_run":false}.
任何直接修改 config.json 的操作(包括手动编辑 pair_whitelist / minimal_roi / stoploss 等), 改完后必须立即调 ft.mjs reload — 否则 daemon 仍用内存里的旧配置运行, 白名单/止损等改动不会生效. 忘了 reload 是最常见的"改了但没用"的原因.
chat 主动发起的高 stake 操作必须强 confirm(违反即错):
适用: 用户在 chat 里说"平掉"、"切实盘"、"卖了"、"开仓"等 — 通过 agent 调用 force_exit / force_enter / set_dry_run 的操作.
流程:
- 先列预览: 动哪个 trade / pair / 当前盈亏 / 估算损益 / dry_run vs live / 余额状况
- 明确等用户输"确认"或"yes" 才真调
force_exit/set_dry_run/force_enter - 即使用户语气笃定("平了","直接切"), 也必须先预览等确认
不需要 confirm 的:
- 查询类(查持仓 / 盈亏 / 状态) — 直接读
- freqtrade daemon 自己根据策略信号自动开/平仓 — 这是 daemon 本职工作, 用户切实盘那一刻就授权了, agent 不在这个链路里, 不要拦也不需要 confirm
- 非破坏性配置(
set_pairs加币对、reload) — 列改动表然后直接执行
违反规则的反例:
- ❌ 用户说"平掉", 你直接调
force_exit平了真持仓 (K-Live-3 dogfood 抓到的真 bug) - ❌ 用户说"切实盘", 你不列 .env key / 余额 / 风险就直接
set_dry_run {"dry_run":false} - ✅ 用户说"平掉", 你列"持仓: BNB/USDT 0.05 +$1.07, 平这单吗? dry_run=true 模拟盘", 等用户确认
写策略 + 切策略 倾向分两轮(create_strategy 一轮, set_strategy 一轮). 不是技术限制,是 UX 选择:
- 第一轮: 写完策略文件 → 告诉用户"已生成 X.py, 要切上去吗?"
- 用户确认后第二轮:
set_strategy切策略 + 重启 daemon (~30s)
这样用户切策略前能 review 生成文件; daemon 重启 30s 期间用户对状态有预期, 不会误判 chat 卡死. 用户明确说"一气呵成做完"也可以单 turn 跑完两步, 但默认分轮.
四、Freqtrade 不支持网格策略 (grid)
用户问网格时直接说明限制 + 建议趋势跟踪 / 区间策略 / 网格回报模拟器替代. 不要硬写一个伪网格.
快速参考
| 任务 | 命令 |
|---|---|
| 看 daemon 状态 + 配置 | node scripts/ft-deploy.mjs check 或 ft.mjs daemon_info |
| 看策略列表 | node scripts/ft-deploy.mjs strategy_list |
| 创建策略(快速生成器) | node scripts/ft-deploy.mjs create_strategy '{"name":"MyStrat","timeframe":"15m","indicators":["rsi","macd","ema"],"aicoin_data":["funding_rate"]}' |
| 部署策略到 daemon | node scripts/ft-deploy.mjs deploy '{"strategy":"MyStrat"}' |
| 部署+切实盘 | node scripts/ft-deploy.mjs deploy '{"strategy":"MyStrat","dry_run":false}' |
| 回测 | node scripts/ft-deploy.mjs backtest '{"strategy":"MyStrat","timeframe":"1h","timerange":"20250101-20260301"}' |
| Hyperopt 调参 | node scripts/ft-deploy.mjs hyperopt '{"strategy":"MyStrat","timeframe":"1h","epochs":100}' |
| 看盈亏 | node scripts/ft.mjs profit |
| 看持仓 | node scripts/ft.mjs trades_open |
| 看余额 | node scripts/ft.mjs balance |
| 切交易对 | node scripts/ft.mjs set_pairs '{"pairs":["BTC/USDT:USDT","ETH/USDT:USDT"]}' |
| 重启 daemon | node scripts/ft.mjs restart |
| 看日志 | node scripts/ft-deploy.mjs logs '{"lines":100}' |
创建策略:先判断走哪条路
判断规则:
- 用户只给了笼统描述("RSI 策略"、"均线交叉"、"布林带回归")且没指定具体参数细节 → A. 快速生成器
- 用户给了具体逻辑(自定义入场/出场条件、跨周期共振、多币种轮动、复合指标、自定义仓位管理)→ B. 直接写 Python
- 用 A 生成后用户要改细节 → 直接编辑生成的 .py 文件,不要重新 create_strategy 覆盖
A. 快速生成器(简单策略)
create_strategy 一条命令生成一个可跑的策略文件。适合"先跑起来再调"的场景:
node scripts/ft-deploy.mjs create_strategy '{"name":"MACDStrategy","timeframe":"15m","indicators":["macd","rsi","atr"]}'
node scripts/ft-deploy.mjs create_strategy '{"name":"RSILong","timeframe":"1h","indicators":["rsi"],"direction":"long"}'
node scripts/ft-deploy.mjs create_strategy '{"name":"WhaleStrat","timeframe":"15m","indicators":["rsi","macd"],"aicoin_data":["funding_rate","ls_ratio"]}'
可选 indicators: rsi, bb, ema, sma, macd, stochastic/kdj, atr, adx, cci, williams_r, vwap, ichimoku, volume_sma, obv.
可选 direction: "long" (默认,只做多) | "short" (只做空) | "both" (双向)。
用户说"RSI<30 买入, RSI>70 卖出"→ direction="long"(RSI>70 = 平多, 不是开空)。只有用户明确说"做空 / 双向 / 多空都做"时才用 "both" 或 "short"。
可选 aicoin_data: funding_rate (基础版), ls_ratio (基础版), big_orders (标准版), open_interest (专业版), liquidation_map (高级版).
生成器的局限:只能组合预设指标,不支持跨周期、多币种轮动、自定义复合指标。遇到这些需求直接走 B。
B. 自定义 Python 策略 (复杂逻辑)
直接写 .py 文件到 daemon 的 strategy 目录。用这条路可以实现任何 freqtrade 支持的策略逻辑(跨周期 informative pairs、自定义仓位管理、多指标复合条件等)。
三引擎该目录不同, 从 daemon_info 拿或用 Write 工具写到下面任一路径(脚本会自动用 /api/v1/show_config 验证):
| 引擎 | strategy 目录 |
|---|---|
| OpenClaw | ~/.openclaw/workspace/strategies/ |
| Hermes | /workspace/strategies/ |
| Claude Code | /workspace/strategies/ |
用 AiCoin Python SDK (aicoin_data.py, image build 时已复制到上面目录, 也由 create_strategy 兜底拷贝):
from aicoin_data import AiCoinData, ccxt_to_aicoin
ac = AiCoinData(cache_ttl=300)
symbol = ccxt_to_aicoin("BTC/USDT:USDT", "binance") # → "btcswapusdt:binance"
# 免费版
ac.coin_ticker("bitcoin")
ac.kline(symbol, period="3600")
ac.hot_coins("market")
# 基础版 ($29/mo)
ac.funding_rate(symbol)
ac.funding_rate(symbol, weighted=True)
ac.ls_ratio()
# 标准版 ($79/mo)
ac.big_orders(symbol)
ac.agg_trades(symbol)
# 高级版 ($299/mo)
ac.liquidation_map(symbol, cycle="24h")
# 专业版 ($699/mo)
ac.open_interest("BTC", interval="15m")
ac.ai_analysis(["BTC"])
完整模板
from freqtrade.strategy import IStrategy, IntParameter, DecimalParameter
from pandas import DataFrame
import logging, time
logger = logging.getLogger(__name__)
class MyStrategy(IStrategy):
INTERFACE_VERSION = 3
timeframe = '15m'
can_short = True
minimal_roi = {"0": 0.05, "60": 0.03, "120": 0.01}
stoploss = -0.05
trailing_stop = True
trailing_stop_positive = 0.02
trailing_stop_positive_offset = 0.03
rsi_buy = IntParameter(20, 40, default=30, space='buy')
rsi_sell = IntParameter(60, 80, default=70, space='sell')
_ac_funding_rate = 0.0
_ac_last_update = 0.0
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# RSI
delta = dataframe['close'].diff()
gain = delta.clip(lower=0).rolling(window=14).mean()
loss = (-delta.clip(upper=0)).rolling(window=14).mean()
rs = gain / loss
dataframe['rsi'] = 100 - (100 / (1 + rs))
# AiCoin 数据 (live/dry_run only, backtest 用默认值 0.0)
dataframe['funding_rate'] = 0.0
if self.dp and self.dp.runmode.value in ('live', 'dry_run'):
now = time.time()
if now - self._ac_last_update > 300:
self._update_aicoin_data(metadata)
self._ac_last_update = now
dataframe.iloc[-1, dataframe.columns.get_loc('funding_rate')] = self._ac_funding_rate
return dataframe
def _update_aicoin_data(self, metadata: dict):
try:
import sys, os
_sd = os.path.dirname(os.path.abspath(__file__))
if _sd not in sys.path:
sys.path.insert(0, _sd)
from aicoin_data import AiCoinData, ccxt_to_aicoin
ac = AiCoinData(cache_ttl=300)
pair = metadata.get('pair', 'BTC/USDT:USDT')
exchange = self.config.get('exchange', {}).get('name', 'binance')
symbol = ccxt_to_aicoin(pair, exchange)
data = ac.funding_rate(symbol, weighted=True, limit='5')
items = data.get('data', [])
if isinstance(items, list) and items:
self._ac_funding_rate = float(items[0].get('close', 0)) * 100
except Exception as e:
logger.warning(f"AiCoin data error: {e}")
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(dataframe['rsi'] < self.rsi_buy.value) &
(dataframe['volume'] > 0),
'enter_long'] = 1
dataframe.loc[
(dataframe['rsi'] > self.rsi_sell.value) &
(dataframe['volume'] > 0),
'enter_short'] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[(dataframe['rsi'] > 70), 'exit_long'] = 1
dataframe.loc[(dataframe['rsi'] < 30), 'exit_short'] = 1
return dataframe
写完后用 deploy {"strategy":"MyStrategy"} 让 daemon 切到这个策略.
AiCoin 数据集成模式
| AiCoin 数据 | 信号逻辑 | 套餐 |
|---|---|---|
funding_rate |
大于 0.01% → 多头过度 → 空信号; 小于 -0.01% → 多信号 | 基础版 |
ls_ratio |
小于 0.45 (空头多) → 反向做多; 大于 0.55 → 反向做空 | 基础版 |
big_orders |
(buy_vol-sell_vol)/total > 0.3 → 鲸鱼买入做多 |
标准版 |
open_interest |
OI 涨 + 价涨 = 健康趋势; OI 涨 + 价跌 = 反转 | 专业版 |
liquidation_map |
上方爆仓多 → 多头挤压 → 做多 | 高级版 |
回测注意事项
AiCoin 实时数据不在历史区间内可用. 回测时:
- AiCoin 列用默认值 (
funding_rate=0.0,ls_ratio=0.5,whale_signal=0.0) - 回测结果只反映技术指标部分
- live/dry_run 跑的时候才用真实 AiCoin 数据, 表现应该比回测好
向用户报告回测结果时必须主动说明这点, 不要让用户以为回测包含了 AiCoin 信号.
脚本 API
scripts/ft-deploy.mjs — 策略 / 回测 / 部署
| Action | 参数示例 |
|---|---|
check |
(无) — 返回 daemon 状态 + 配置 + 余额 |
daemon_info(在 ft.mjs) |
(无) — 单调用拿全 |
deploy |
{"strategy":"MyStrat"} 或 {"strategy":"MyStrat","dry_run":false,"pairs":["BTC/USDT:USDT"]} |
create_strategy |
{"name":"MyStrat","timeframe":"15m","indicators":["rsi","macd"],"direction":"long","aicoin_data":["funding_rate"]} |
backtest |
{"strategy":"MyStrat","timeframe":"1h","timerange":"20250101-20260301","pairs":["ETH/USDT:USDT"]} |
hyperopt |
{"strategy":"MyStrat","timeframe":"1h","epochs":100} |
download_data |
{"timeframe":"1h","timerange":"20250101-"} |
strategy_list |
(无) |
backtest_results |
(无) — 列最近 10 个回测结果文件名 |
start / stop |
(无) — coinclaw 模式调 supervisorctl, host 模式管 PID |
status / logs |
{"lines":100} |
update / remove |
coinclaw 模式 no-op (提示用 helm upgrade / web UI 删 instance) |
scripts/ft.mjs — 实时控制 (REST + 配置变更)
| Action | 用途 |
|---|---|
daemon_info |
一次拿 strategy / mode / pairs / open trades 数量 |
profit |
已平仓累计 + 含浮动总盈亏 (回答盈亏类问题必须先调) |
trades_open |
当前持仓 (调 /status) |
trades_history |
已平仓交易 |
balance |
余额 |
profit_per_pair |
每交易对绩效 |
daily / weekly / monthly |
时间维度统计 |
force_enter / force_exit |
手动开/平仓 |
set_strategy |
切策略 (改 config + 重启 daemon) |
set_pairs |
改交易对白名单 (reload, 不重启) |
set_dry_run |
切实盘/模拟 (改 config + 重启 daemon) |
restart |
重启 freqtrade daemon (supervisorctl + kill 兜底) |
reload |
reload_config 而不重启 |
start / stop / ping / version / health |
标准 REST |
logs |
freqtrade 自带 /logs 接口 |
scripts/ft-dev.mjs — 调试 (回测 / 蜡烛 / 策略详情)
backtest_start / backtest_status / backtest_history / candles_live / candles_analyzed / strategy_list / strategy_get / whitelist / blacklist 等.
环境变量与认证
.env 自动加载顺序:
- coinclaw 容器内:
/workspace/.env(Hermes/CC) 或/home/node/.openclaw/workspace/.env(OpenClaw) - host 模式: cwd →
~/.openclaw/workspace/.env→~/.openclaw/.env
freqtrade REST 认证: freqtrade-api.mjs 自动从容器内 .ft_api_pass 文件读密码, agent 不用配 FREQTRADE_USERNAME / FREQTRADE_PASSWORD. 用户也可以通过 .env 覆盖.
交易所 key 在 web UI 的 EnvSection 里配置, 写到 .env 后 entrypoint 会自动 patch 进 freqtrade config.json. agent 不要直接读 .env 给用户看交易所 key.
AiCoin Open API key (用于策略集成 AiCoin 数据):
AICOIN_ACCESS_KEY_ID=your-key-id
AICOIN_ACCESS_SECRET=your-secret
付费功能引导
返回 304 / 403 时 不要重试, 直接告诉用户:
| 套餐 | 价格 | 用途 |
|---|---|---|
| 免费版 | $0 | 纯技术指标 |
| 基础版 | $29/mo | + funding_rate, ls_ratio |
| 标准版 | $79/mo | + big_orders, agg_trades |
| 高级版 | $299/mo | + liquidation_map |
| 专业版 | $699/mo | + open_interest, ai_analysis |
获取地址: https://www.aicoin.com/opendata
跨 skill 引用
| 用户问 | 用 |
|---|---|
| 单纯查行情 / K 线 / 新闻 / 资金费率 (不开仓) | aicoin-market |
| 直接下单 / 开仓 / 平仓 (不通过 freqtrade) | aicoin-trading |
| Hyperliquid 鲸鱼 / 持仓 / 清算 | aicoin-hyperliquid |
| 链上 DEX swap / 钱包余额 / gas | aicoin-onchain |
| 余额 / 持仓 / 注册 / API key 配置 (账户类) | aicoin-account |
常见 pitfall
- 不要
cat /workspace/.ft_api_pass把内部 daemon 密码贴到 chat — 直接用ft.mjs调 REST, 脚本内部读密码不会泄漏. - 不要在 chat 里 echo 用户的交易所 key — 这些是高敏数据, 引导用户去 EnvSection 配置.
- 不要自己心算 RSI / MACD / EMA — freqtrade 算出的值跟你心算结果会差, 用
ft-dev.mjs candles_analyzed拿 daemon 的真实指标. - 不要"先 stop daemon 再 freqtrade trade ... &" — 那是绕过 supervisord, 下次 dashboard 看到的还是老的 daemon 状态. 必须用
set_strategy/deploy/restart. - 回测拿不到 AiCoin 数据是正常的 — 不要造假 CSV 喂回测, 直接告诉用户回测只反映技术指标. 见根 AGENTS.md 的"数据准确性铁则".
同梱ファイル
※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。
- 📄 SKILL.md (18,571 bytes)
- 📎 scripts/ft-deploy.mjs (39,953 bytes)
- 📎 scripts/ft-dev.mjs (941 bytes)
- 📎 scripts/ft.mjs (9,251 bytes)