mcpField
K
Kandle

Kandle

ローカル
kernel-hunter.github.io金融データ21 週間前に更新

Kandle について

Kandleは、暗号資産、株式、外国為替を扱うブラウザ型チャートアプリです。トレーダーやAIエージェント向けで、MCPサーバーを介してエージェントがライブチャートを確認・操作できます。

主な機能

  1. 01暗号資産、株式、外国為替のライブチャート
  2. 02編集可能な36種類のインジケーターと描画ツール
  3. 03カスタムスクリプトと戦略バックテスト
  4. 04アラート、バーリプレイ、最大4画面表示
  5. 05ブラウザー内保存とチャート共有

活用シーン

  1. 01エージェントとローソク足や指標値を確認
  2. 02サポート、レジスタンス、フィボナッチを描画
  3. 03スクリプト戦略を検証して取引履歴を確認
  4. 04価格・指標アラートの設定とバーリプレイ

MCP 対応

`kandle-mcp`サーバーはローカルのWebSocketブリッジで、AIエージェントをKandleのブラウザータブに接続します。チャートデータに加え、銘柄、指標、描画、アラート、スクリーンショット、リプレイ、レイアウト、スクリプト、ウォッチリストを操作するツールを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
mcpbkandle-mcp-0.10.1.mcpb

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

翻訳後に原文が更新されています。最新の内容は原文をご確認ください。

Kandle

暗号資産、株式、外国為替の無料オープンソースチャートです。AI エージェントから操作できます。

インジケーター、描画ツール、独自のスクリプトや戦略のバックテスト、アラート、バーリプレイ、最大4つのチャートを同時に表示できます。アカウント登録も、ペイウォールも、インジケーター数の制限もありません。ブラウザーで動作し、すべてのデータはお使いのマシンに保存されます。

Claude Code、Codex、Cursor、Gemini CLIを使って、チャートを読み取り、サポートラインやレジスタンスラインを描画し、インジケーターを追加し、スクリプトを作成して、アラートを設定できます。すべての操作を画面で確認できます。

ブラウザーでKandleを開く · エージェントを接続する · スクリプトを書く

CI License: MIT

English · 简体中文

BTC/USDT 4Hのチャートに表示されたサポートラインとレジスタンスライン、サポートゾーン、EMAクロススクリプト、RSI

1行でエージェントを接続する

claude mcp add kandle -- npx -y --package=https://github.com/Kernel-Hunter/kandle/releases/download/v0.3.0/kandle-mcp-0.3.0.tgz kandle-mcp

続いてKandleを開き、Agentをクリックして、エージェントから受け取ったペアリングコードを貼り付け、Agent bridgeをオンにします。「BTCの直近のスイング高値と安値に印を付け、その間にフィボナッチ・リトレースメントを描いて」のように依頼してみましょう。ほかのエージェントの設定方法はこちらをご覧ください。

エージェントがBTC/USDTを読み取り、レジスタンスラインとサポートゾーンを描画し、RSIを追加してEMAクロススクリプトを実行

機能

  • Binance、Coinbase、Bybit、OKX、Krakenの公開マーケットデータから暗号資産のローソク足をリアルタイムで取得できます。APIキーは不要です。履歴はREST経由で読み込み、更新データはWebSocket経由で受信します。
  • Twelve Data、Alpaca、Polygonから、米国および世界各国の株式、ETF、外国為替データを取得できます。無料のAPIキーが必要です。データソースをご覧ください。
  • CSVファイルから独自のOHLCVデータを読み込み、ブラウザーに保存できます。CSVのインポートをご覧ください。
  • 選択したデータソースを対象にシンボルを検索できます。暗号資産、株式、ETF、外国為替、指数、CSVのバッジが表示されます。
  • 時間足:1m、5m、15m、1H、4H、1D、1W。左にスクロールすると、過去のデータを読み込めます。
  • 36種類のインジケーターを、チャートに好きなだけ表示できます:MA、EMA、SMA、WMA、HMA、ボリンジャーバンド、ドンチャンチャネル、VWAP、スーパートレンド、パラボリックSAR、一目均衡表、出来高プロファイル、出来高、MACD、RSI、ストキャスティクスRSI、KDJ、ATR、OBV、CCI、DMI/ADX、ウィリアムズ%R、ROC、モメンタム、TRIX、オーサム・オシレーターなど。すべてのパラメーターを編集できます。
  • 最後のローソク足より先まで雲を描画する一目均衡表と、画面上のバーを対象にコントロールポイントおよびバリューエリアを示す出来高プロファイルを利用できます。プロファイルはスクロールやズームに合わせて更新されます。
  • 描画ツール:トレンドライン、レイ、延長線、水平線とレイ、垂直線、平行チャネル、長方形、フィボナッチ・リトレースメント、価格範囲、テキストメモ、価格ラベル。描画を選択して移動または削除できます。オプションのマグネット機能を使うと、ポイントをローソク足の価格に吸着させられます。
  • シンボル、時間足、テーマ、インジケーター、描画(シンボルごとに保存)は、再読み込み後も復元されます。
  • ダークテーマとライトテーマ。
  • ほとんどの操作にキーボードショートカットを利用できます。アプリで?を押すと、すべてのショートカットが表示されます。
  • チャートをPNG画像としてエクスポートできます。
  • スクリプト:Kandle Scriptで独自のインジケーターを作成できます。チャートの下にエディターがあり、14種類のサンプルスクリプトが用意されています。request.securityを使って、ほかの時間足やシンボルのデータを読み込めます。
  • 戦略のバックテスト:戦略スクリプトを作成し、チャート上で取引を確認できます。純利益、ドローダウン、勝率、損益曲線、取引一覧も表示されます。
  • 価格水準、描画したライン、インジケーター値にアラートを設定でき、ブラウザー通知も利用できます。
  • バーリプレイを使って、履歴をローソク足1本ずつ確認できます。
  • 1、2、4つのチャートを同時に表示できます。それぞれのチャートに個別のシンボル、時間足、インジケーターを設定できます。
  • AI エージェントがチャートを読み取り、描画し、アラートを設定し、スクリーンショットを撮影できるMCP サーバー。
  • デスクトップおよびタブレットの画面で動作します。

一目均衡表と表示中のバーの出来高プロファイルを表示したBTC/USDT 4H

キーボードショートカット
キー操作
任意の英字または数字シンボルを検索
/ または Alt+Iインジケーター
Alt+Sスクリプトエディター
Ctrl+Enter または Cmd+Enterチャート上のスクリプトを追加または更新(エディター内)
Alt+1 から Alt+71分足から1週足
Alt+Tトレンドライン
Alt+Rレイ
Alt+H水平線
Alt+V垂直線
Alt+B長方形
Alt+Fフィボナッチ・リトレースメント
Alt+P価格範囲
Alt+Nテキストメモ
Alt+Mマグネットのオン/オフ
Delete選択した描画を削除
Esc現在の描画をキャンセル、またはダイアログを閉じる
Alt+Lライトモードとダークモードを切り替え

AI エージェントと連携する

Kandle には MCP サーバー kandle-mcp が付属しています。エージェントがこれを起動すると、ブラウザーの Kandle タブが 127.0.0.1 上の WebSocket 経由で接続します。エージェントはチャートを読み取り、あなたが見ている間に変更できます。

セットアップ
  1. エージェントにサーバーを追加します(設定例は以下にあります)。
  2. エージェントに Kandle のペアリングコードを尋ねます。エージェントは get_bridge_status を呼び出し、K7QD-9MXR-2HPA のようなコードを表示します。コードは ~/.kandle/bridge-token にも保存されます。
  3. Kandle で、トップバーの Agent をクリックし、コードを貼り付けて Agent bridge をオンにします。エージェントが接続されると、ボタンのドットが緑色になります。

コードはブラウザーと ~/.kandle/bridge-token に保存されるため、ペアリングは一度だけで済みます。

これはホスト型アプリでも、自分で実行するコピーでも動作します。ホスト型アプリでは、ページがローカルネットワーク上のデバイスに接続できるかどうかをブラウザーから尋ねられる場合があります。ページが 127.0.0.1 上の kandle-mcp と通信できるよう、許可してください。

npx は GitHub リリースから kandle-mcp を実行するため、Node.js 22.12 以降があれば十分です。Kandle の新しいバージョンがリリースされたら、URL 内のバージョンを変更してください。アプリのほうがサーバーより新しい場合は、get_bridge_status がエージェントに通知します。代わりにクローンから実行するには、pnpm install && pnpm build を実行し、エージェントに node /path/to/kandle/packages/mcp/bin/kandle-mcp.js を指定してください。

Claude Code:

claude mcp add kandle -- npx -y --package=https://github.com/Kernel-Hunter/kandle/releases/download/v0.3.0/kandle-mcp-0.3.0.tgz kandle-mcp

Codex(~/.codex/config.toml):

[mcp_servers.kandle]
command = "npx"
args = ["-y", "--package=https://github.com/Kernel-Hunter/kandle/releases/download/v0.3.0/kandle-mcp-0.3.0.tgz", "kandle-mcp"]

Cursor(~/.cursor/mcp.json またはプロジェクト内の .cursor/mcp.json)および Gemini CLI(~/.gemini/settings.json):

{
  "mcpServers": {
    "kandle": {
      "command": "npx",
      "args": ["-y", "--package=https://github.com/Kernel-Hunter/kandle/releases/download/v0.3.0/kandle-mcp-0.3.0.tgz", "kandle-mcp"]
    }
  }
}

Claude Desktop: kandle-mcp-0.3.0.mcpb をダウンロードして開き、サーバーをインストールします。

Kandle は io.github.Kernel-Hunter/kandle として MCP Registry にも登録されているため、レジストリを参照するクライアントから見つけることができます。

ツール
ツール機能
get_bridge_status接続状態とペアリングコードを取得します
get_chart_state銘柄、時間足、最後のバー、表示範囲、最新値を含むインジケーター、ID付きの描画、アラート、リプレイ、レイアウトを取得します
set_symbol, set_timeframe市場またはバーのサイズを変更します。取引所に csv を指定すると、インポートしたデータセットが開きます
get_candles本数または期間を指定して OHLCV バーを取得します。バーごとのインジケーター値も指定できます
add_indicator, remove_indicator, list_indicatorsインジケーターを管理し、利用可能な36種類の一覧を取得します
drawトレンドライン、水平線またはレイ、垂直線、レイ、延長線、長方形、フィボナッチ・リトレースメント、テキストメモ、価格範囲を価格と時刻で描画します
remove_drawing, clear_drawings描画を削除します
screenshotチャートの PNG を画像として返します
set_alert, list_alerts, remove_alert価格、描画したライン、インジケーターにアラートを設定します
start_replay, step_replay, stop_replayバーリプレイを操作します
set_layoutチャート数(1、2、4)、同期オプション、チャートごとの銘柄と時間足を設定します
run_scriptKandle スクリプトをメインチャートに追加し、ID と最新のプロット値を返します。エラーの場合は行と列も返します。ストラテジーの場合は、バックテストの概要と直近20件のトレードも返します
get_backtestチャート上のストラテジースクリプトの設定、概要、最大500件のトレードを取得します

複数のチャートが表示されている場合、ほとんどのツールでは任意の pane(1〜4)を指定できます。時刻は ISO 8601 形式の日付、または秒・ミリ秒単位の Unix 時刻で指定できます。入力は検証され、エラーには修正方法が示されます。

skills/kandle/SKILL.md は、サポートとレジスタンス、トレンド、インジケーターの合流、説明を添えたチャートへの注釈付けといったチャート分析のワークフローをまとめたエージェントスキルです。エージェントのスキルフォルダーにコピーしてください(Claude Code の場合は ~/.claude/skills/kandle/)。

エージェントが BTC/USDT に120本分の高値と安値、フィボナッチ・リトレースメント、メモを描画した画面

セキュリティモデル
  • ブリッジがリッスンするのは 127.0.0.1 のみです。他のマシンからアクセスすることはできません。
  • アプリからサーバーに接続します。逆方向の接続はありません。また、接続は Agent bridge を有効にした後に限られます。デフォルトでは無効で、いつでも無効にできます。
  • すべての接続で、最初にペアリングコードを送信する必要があります。コードのランダム性は約59ビットで、比較は定時間で行われます。コードを5回間違えると、サーバーは1分間コードを受け付けません。
  • サーバーは、localhost、127.0.0.1、[::1] 以外から配信されたウェブページからの WebSocket 接続を拒否します。そのため、ポートを推測された場合でも、アクセスしたウェブサイトから接続されることはありません。ホスト版アプリ https://kernel-hunter.github.io も許可されています。独自のホスト版など、他のオリジンを追加するには KANDLE_ALLOWED_ORIGINS を使用します。
  • サーバーは、Host ヘッダーがループバックアドレスでないリクエストを拒否し、DNS リバインディングを防ぎます。
  • エージェントが実行できるのは、ツールで許可された操作のみです。チャートデータの読み取り、銘柄の変更、インジケーター、描画、アラート、リプレイ、レイアウトの操作、チャートのスクリーンショット撮影が可能です。他のタブ、ファイル、ブラウザーのストレージを読み取ることはできません。
  • 同時に接続できる Kandle タブは1つだけです。新しいタブが接続すると、古いタブに置き換えられたことが表示されます。
  • 同じコンピューター上でユーザーとして実行されているプログラムは、~/.kandle/bridge-token を読み取ることができます。これはエージェントと同等の信頼レベルです。

設定:--port または KANDLE_PORT(デフォルトは 7457。ポートを変更する場合は、Agent ダイアログでも同じポートを設定してください)、固定コードには KANDLE_TOKEN、トークンフォルダーには KANDLE_HOME を使用します。

スクリプト

Kandle Scriptを使うと、独自のインジケーターを記述し、戦略をバックテストできます。多くのチャートユーザーがすでに知っているスクリプト言語と互換性があるため、既存のインジケータースクリプトの多くは、ほとんど変更せずに実行できます。

Scriptsをクリックする(またはAlt+Sを押す)と、チャートの下にエディターが開きます。スクリプトを記述するか、Examplesから選び、Ctrl+Enter(MacではCmd+Enter)を押してチャートに追加します。入力中にエラー箇所に下線が引かれ、エディターの下に行、列、メッセージが表示されます。後でスクリプトを変更するには、エディターの左上にあるリストから選択します。

//@version=5
indicator("EMA cross", overlay = true)
fastLen = input.int(9, "Fast", minval = 1)
slowLen = input.int(21, "Slow", minval = 1)

fast = ta.ema(close, fastLen)
slow = ta.ema(close, slowLen)

plot(fast, "Fast", color.orange, 2)
plot(slow, "Slow", color.blue, 2)
plotshape(ta.crossover(fast, slow), "Up", shape.triangleup, location.belowbar, color.green)

overlay = trueを指定したスクリプトは価格チャート上に描画され、それ以外は専用のペインに表示されます。入力項目はIndicatorsダイアログに表示されるため、コードに触れずに変更できます。スクリプトと入力値はレイアウトとともに保存されます。新しいローソク足が追加されたとき、または最後のローソク足が変化したときは、最後のバーだけが再計算されます。一般的なスクリプトであれば、1,500本のバー全体の計算も数ミリ秒で完了します。

インジケーターの例には、移動平均線のクロス、バンド付きRSI、MACD、ボリンジャーバンド、スーパートレンド、VWAPバンド、ストキャスティクス、ATRトレーリングストップ、ドンチャンブレイクアウト、出来高急増、そしてrequest.securityを使う日足EMAトレンドフィルターがあります。戦略の例には、常に市場にポジションを持つEMAクロス、ストップとターゲットを設定したRSI平均回帰、ドンチャンチャネルブレイクアウトがあります。

RSIスクリプトを表示したスクリプトエディターと、チャート上のスーパートレンドおよびボリンジャーバンド

戦略とバックテスト

indicator()ではなくstrategy()を使ってスクリプトを宣言すると、バックテストとして動作します。strategy.entry、strategy.exit、strategy.closeで発注した注文は、チャートに読み込まれたバー上でブローカーエミュレーターによって約定されます。各約定は、シグナル名を付けた矢印として価格チャートに描画され、エントリーから決済までが破線で結ばれます(勝ちは緑、負けは赤)。チャートの下にあるStrategyタブには、次の2つのビューがあります。

  • 概要:純利益、決済済み取引数、勝率、プロフィットファクター、最大ドローダウン、平均取引、シャープレシオ、バイ・アンド・ホールド、バイ・アンド・ホールドと比較したエクイティカーブ、総利益と総損失、平均および最大の利益と損失、支払った手数料をまとめた表を表示します。
  • 取引一覧:各取引の方向、エントリーと決済のシグナル、時刻と価格、数量、利益、累積利益、ランアップ、ドローダウンを表示します。取引をクリックすると、チャートがその取引までスクロールします。
//@version=5
strategy("EMA cross", overlay = true, initial_capital = 10000,
     default_qty_type = strategy.percent_of_equity, default_qty_value = 100,
     commission_type = strategy.commission.percent, commission_value = 0.05)
fast = ta.ema(close, input.int(12, "Fast"))
slow = ta.ema(close, input.int(26, "Slow"))

if ta.crossover(fast, slow)
    strategy.entry("Long", strategy.long)
    // Stop 3% below and target 6% above the signal bar's close.
    strategy.exit("Exit", "Long", stop = close * 0.97, limit = close * 1.06)
if ta.crossunder(fast, slow)
    strategy.close("Long")

plot(fast, "Fast", color.orange)
plot(slow, "Slow", color.blue)

注文の約定方法:

  • スクリプトは各バーの終了時に一度実行されます。バー上で発注された注文は後のバーで約定します。成行注文は次の始値で、指値注文または逆指値注文はバーの値幅が注文価格に達したときに約定します。process_orders_on_close = true の場合、成行注文は発注されたバーの終値で約定します。
  • Kandle はバー内のデータを持たないため、価格は始値から高値または安値のうち近いほうへ動き、次にもう一方へ動いてから終値に達したものと仮定します(両方が同じ距離にある場合は、先に高値へ動いたものとします)。1本のバーで決済注文のストップとターゲットの両方に達した場合、始値に近いほうの価格で約定します。これはあくまで仮定であり、実際の取引ではそのバーで逆の動きになった可能性があります。
  • 指値注文または逆指値注文の価格が始値の時点ですでに通過している場合(ギャップがある場合)、始値で約定します。
  • 指値注文は指定価格で約定します。成行注文と逆指値注文は slippage 分のティックだけ不利な価格で約定します。手数料はすべての新規注文と決済注文で発生します。
  • 反対方向の注文を出すと、保有中のポジションを決済して新しいポジションを建てます。同じ方向の追加注文は pyramiding で指定した数まで可能です(デフォルトの 0 は 1 つまでです)。
  • ティック数で指定する strategy.exit のレベル(profit、loss、trail_points、trail_offset)は、各取引の約定価格を基準に計算されます。新規注文と同じバーで決済注文を出すと、その取引は約定したバーから保護されます。
  • 注文サイズは、qty が指定されていない場合、default_qty_type と default_qty_value に基づいて決まります。現金額とエクイティに対する割合で指定するサイズは、約定価格を使って計算されます。数量はロット単位に丸められず、追証もありません。
  • 新しいデータが到着すると、履歴全体が再計算されるため、結果は常にチャート上のバーと一致します。左にスクロールして過去のバーを読み込むと、バックテストの対象にも追加されます。

数値の算出方法:最大ドローダウンは、以前のピークからバー終値時のエクイティが最も大きく下落した幅です。シャープレシオは各 UTC 日の終値時のエクイティ(1 日足および週足チャートでは各バーのエクイティ)を使用します。リターンの平均を標準偏差で割り、リスクフリーレートを 0 として 365 日換算で年率化します。バイ・アンド・ホールドは、読み込まれた最初の終値から最後の終値までの価格変化を初期資金に適用した値です。未決済損益には、新規注文時にすでに支払った手数料が含まれます。

サポート対象:initial_capital(デフォルトは 100000)、default_qty_type(strategy.fixed、strategy.cash、strategy.percent_of_equity)、default_qty_value、commission_type(strategy.commission.percent、cash_per_contract、cash_per_order)、commission_value、slippage、pyramiding、process_orders_on_close を指定する strategy()。注文:strategy.long と strategy.short を使用する strategy.entry、strategy.order、strategy.exit(profit、limit、loss、stop、trail_offset と組み合わせた trail_price または trail_points、qty、qty_percent、comment_profit、comment_loss、comment_trailing)、strategy.close(qty、qty_percent、immediately を指定可能)、strategy.close_all、strategy.cancel、strategy.cancel_all。状態:strategy.position_size、position_avg_price、equity、netprofit、openprofit、grossprofit、grossloss、max_drawdown、closedtrades、opentrades、wintrades、losstrades、eventrades、initial_capital、および strategy.closedtrades.profit(i) や strategy.opentrades.entry_price(i) などの取引ごとの値。currency と calc_on_every_tick は受け付けますが、無視されます。OCA グループ引数も受け付けますが、モデル化されません。

エージェントでも同じ結果が得られます。run_script はバックテストの概要とストラテジーの直近 20 件の取引を返し、get_backtest は最大 500 件の取引を返します。

BTC/USDT のドンチャン・ブレイクアウト戦略。チャート上に取引が表示され、Strategy タブが開いています

その他のシンボルと時間足

request.security(symbol, timeframe, expression, gaps, lookahead) は、別の時間足、またはチャートのデータソースにある別のシンボルで計算された expression の値を返します。

//@version=5
indicator("Daily EMA trend", overlay = true)
dailyEma = request.security(syminfo.tickerid, "D", ta.ema(close, 20))
ethClose = request.security("ETHUSDT", "60", close)
plot(dailyEma, "Daily EMA", color.orange, 2, plot.style_stepline)
  • symbol には、チャートのシンボルを表す syminfo.tickerid(または syminfo.ticker)、あるいは Binance で BTCUSDT をチャートに表示しているときの "ETHUSDT" のように、同じデータソース上のシンボルを指定します。"BINANCE:ETHUSDT" のようなプレフィックスは、Kandle がそのデータソースに対応している場合はデータソースを指定し、対応していない場合は無視されます。
  • timeframe には "1"、"5"、"15"、"60"、"240"、"D"、"W"("1D"、"1W"、"1h"、"4h" も使用できます)、またはチャート自体の時間足を表す timeframe.period か "" を指定します。
  • シンボルと時間足には定数を指定する必要があります。文字列、または文字列を一度だけ設定した変数を使用してください。Kandle はスクリプトの実行前にデータを読み込むため、それ以外の値を指定すると、入力値も含めて "request.security needs constant symbol and timeframe" というエラーが発生します。スクリプトがリクエストできるシンボルと時間足の組み合わせは最大 5 種類です。
  • expression は、要求されたバー上で独自の履歴を使って実行されます。そのため、"D" のリクエスト内にある ta.ema(close, 20) は 20 日 EMA になります。expression が使用する変数、入力値、関数は、要求されたバー上で再計算されます。var で宣言された変数、:= で変更される変数、関数のパラメーター、ループ変数は使用できません。タプルは使用できます。例:[o, c] = request.security(syminfo.tickerid, "D", [open, close])

デフォルトでは先読みは行われません。lookahead = barmerge.lookahead_off の場合、チャートのバーが終了した時点で、すでに終了している最後のリクエスト対象バーの値が返されます。1 時間足のチャートでは、日次の値は各日の最後の 1 時間足で変わり、それより前のバーには前日の値が表示されます。過去データで後続のデータが参照されることはありません。現在の日が形成中の場合、最新のチャートバーだけに、その日の値が変化する様子が表示されます。

  • lookahead = barmerge.lookahead_on は、チャートのバーを含むリクエスト対象バーを、そのバーが終了する前でも使用します。過去データでは先読みが発生します。たとえば、09:00 のバーにその日の終値が表示されます。request.security(syminfo.tickerid, "D", close[1], lookahead = barmerge.lookahead_on) は、先読みせずに今日の各バーで前日の終値を取得する一般的な方法です。
  • gaps = barmerge.gaps_on は、新しいリクエスト対象バーが終了したチャートバー(lookahead が有効な場合は、各リクエスト対象バー内の最初のチャートバー)を除き、na を返します。
  • 時間足が同じか低い場合、各チャートバーには、その中で終了した最後のリクエスト対象バーの値が返され、lookahead は影響しません。読み込まれるリクエスト対象バーは最大 5,000 本です。そのため、日足チャートで 1 分足をリクエストすると、対象となるのは直近の数日間のみです。

リクエストされた系列は、チャートのデータソースを通じて、同じキャッシュとレート制限を適用して読み込まれます。チャート上の最初のバーより 500 本前から読み込み、過去にスクロールすると追加で読み込みます。キーが不要なデータソースではリアルタイムで更新されます。キーが必要なデータソースでは、無料プランの範囲内に収まるよう数分ごとに更新されます。系列の読み込み中は値が na になり、読み込めない場合はスクリプトにエラーが表示されます。run_script は、データの読み込みが完了するまで待機します。

対応している機能
  • 構文://@version=5 および //@version=6 ヘッダー、コメント、インデントされたブロック、括弧内または演算子の後での行折り返し、var と varip、宣言時の型名(float x = na)、=, := および += -= *= /= %=, ?:, and, or, not, if / else if / else、値の有無を問わない switch、for i = a to b by step、for x in array、for [i, x] in array、while、break、continue、1 行または複数行での関数、デフォルト引数と名前付き引数、タプル([a, b] = f())、ユーザーメソッド(method f(float x) =>)、および values.push(x) などのメソッド呼び出し。
  • 系列:すべての値は履歴を持ち、x[n] で読み取れます。na、na()、nz()、fixnan() に対応しています。var で宣言された変数は、バーごとに値を保持します。関数を呼び出すたびに、それぞれ独自の履歴を保持します。
  • データ:open、high、low、close、volume、hl2、hlc3、ohlc4、hlcc4、time、bar_index、last_bar_index、year、month、dayofmonth、dayofweek、hour、minute、barstate.*、syminfo.ticker、syminfo.mintick、timeframe.period、timeframe.change()。
  • ta.*:sma、ema、rma、wma、vwma、hma、rsi、macd、stoch、atr、tr、bb、bbw、kc、cci、mfi、obv、vwap(アンカーとバンドはオプション)、supertrend、dmi、wpr、change、mom、roc、highest、lowest、highestbars、lowestbars、crossover、crossunder、cross、rising、falling、stdev、variance、dev、cum、valuewhen、barssince、pivothigh、pivotlow、linreg、correlation、percentrank、median。
  • math.*:abs、max、min、avg、sum、round、floor、ceil、sqrt、pow、log、log10、exp、sign、三角関数、pi および e。
  • input、input.int、input.float、input.bool、input.string(options 対応)、input.source、input.color、input.price。
  • color.* 定数、color.new、color.rgb、color.from_gradient、および #RRGGBB または #RRGGBBAA リテラル。
  • str.tostring、str.format、str.length、str.contains、str.upper、str.lower など。float、int、bool、string、color 配列向けの array.*。
  • その他のシンボルと時間足:barmerge.gaps_on、gaps_off、lookahead_on、lookahead_off に対応した request.security。その他のシンボルと時間足 を参照してください。
  • ストラテジー:ストラテジーとバックテスト を参照してください。
  • 出力:title、shorttitle、overlay、format、precision に対応した indicator()、ライン、ステップライン、ヒストグラム、カラム、円、クロス、エリアの各スタイル、バーごとの色、linewidth、offset に対応した plot、plotshape、plotchar、hline、2 つの plot または 2 つの hline 間の fill、bgcolor、barcolor(価格チャートのスクリプトで使用)。

未対応の機能:request.security_lower_tf や request.financial など、request.security 以外の request.* 関数、strategy.risk.*、描画オブジェクト(label、line、box、table)、ユーザー定義型と列挙型、import、matrix、map、グラデーション塗りつぶしです。これらを使用すると、該当行を示す明確な「未対応」エラーが表示されます。

アラート

Alerts をクリックして、メインチャートのシンボルに対するアラートを作成、管理できます。

  • 価格が指定した水準をクロスする、上抜ける、下抜ける、またはタッチする場合。
  • 描画した水平線、水平レイ、トレンドライン、レイ、延長線に価格がクロスまたはタッチする場合。ラインを移動すると、アラートも追従します。
  • RSI や MACD などのインジケーターラインが指定した水準をクロスする場合。

各アラートは 1 回、または毎回(最大で 1 バーにつき 1 回)発生します。アラートが発生すると、ブラウザー通知、アプリ内メッセージ、短いサウンドで通知されます。最初のアラートを作成するときに、Kandle から通知の許可を求められます。アラートはブラウザーに保存され、Kandle のタブが開いている間、リアルタイムデータに対してチェックされます。タブを閉じている間は動作しません。画面上のいずれかのチャートに表示されているシンボルのアラートがチェックされます。

バーのリプレイ

リプレイをクリックし、メインチャート上のバーをクリックします。そのバーより後のバーはすべて非表示になり、インジケーターは表示されているデータだけを使って計算されます。リプレイバーを使って再生、一時停止、1本ずつ進む操作や、1xから10x(1秒あたりのバー数)の速度を選択できます。キーボード操作:スペースキーで再生または一時停止、右矢印キーで1本進む、Escキーで終了します。終了すると、チャートはライブデータに戻ります。シンボルまたは時間足を変更してもリプレイは終了します。リプレイでは取引所の履歴を遡れる範囲まで移動でき、必要に応じてKandleが古いバーを読み込みます。

レイアウト

レイアウトをクリックすると、1つのチャート、横並びの2つのチャート、またはグリッド状の4つのチャートを表示できます。最初のチャートがメインチャートとなり、上部バーと描画ツールを使用します。ほかのチャートには、それぞれ独自のシンボル、時間足、インジケーターが小さなヘッダーに表示されます。同期を有効にすると、クロスヘア、時間足、またはシンボルをチャート間で同じ状態に保てます。レイアウトと各チャートの設定はブラウザーに保存されます。

ロードマップ

  • request.security の引数としての入力(input.timeframe、input.symbol)。
  • インジケーターのダイアログでのストラテジー設定、strategy.risk.*、注文グループ(OCA)。
  • macOS、Windows、Linux向けのデスクトップアプリ。
  • IndexedDBに保存する、より大きなCSVインポート。

ローカルで実行する

Node.js 22.12以降とpnpmが必要です。

pnpm install
pnpm dev

次に、Viteが表示するURLを開きます。通常は http://localhost:5173 です。

その他のコマンド:

pnpm test     # unit tests
pnpm build    # type check, production build in dist/, and build kandle-mcp
pnpm preview  # serve the production build
pnpm mcp      # build and run kandle-mcp (normally your agent runs it)

GitHub Pagesのプロジェクトサイトなど、サブパス向けにビルドするには、BASE_PATHを設定します。

BASE_PATH=/kandle/ pnpm build
プロジェクトの構成
src/
  config.ts          app name and identifiers
  data/              market data adapters behind a DataSource interface, API keys, rate limits
  chart/             chart engine glue, extra indicators, extra drawing tools
  store/             layout persistence
  script/            Kandle Script: lexer, parser, runtime, built-ins, chart renderer
  ui/                symbol search, indicator panel, dialogs
  agent/             agent bridge client, request handlers, Agent dialog
  alerts/            alert evaluation, notifications, alert manager
  replay/            bar replay and the data loader it sits behind
  layout/            multi-chart layouts
  features/          connects the above to the app
packages/mcp/        kandle-mcp, the MCP server
skills/kandle/       agent skill for chart analysis
tests/               unit tests

取引所を追加するには、src/data/types.tsでDataSourceインターフェースを実装し、src/data/sources.tsに登録します。

データソース

上部バーの Data をクリックすると、すべてのデータソースを確認し、キーを追加してテストできます。シンボル検索では、検索結果の上にあるソースを選択します。

ソース市場キーが必要更新頻度
Binance暗号資産いいえライブ
Coinbase暗号資産いいえライブ
Bybit暗号資産いいえライブ
OKX暗号資産いいえライブ
Kraken暗号資産いいえライブ。履歴は各時間足で最新の720本に制限されています。
Twelve Data株式、ETF、外国為替、暗号資産無料キーご利用のプランで配信されるシンボルはライブ、それ以外は1分ごとに更新
Alpaca米国株式およびETF無料のキーIDとシークレットIEXフィードからライブ配信(出来高はIEXの取引のみを対象とします)
Polygon株式、ETF、外国為替、暗号資産、指数無料キー無料プランでは日次データのみで、「遅延」と表示されます
CSV独自のデータいいえ更新されません。CSVのインポートをご覧ください

無料キー:

  • Twelve Data:twelvedata.comで登録してください。無料プランでは、1分あたり8回、1日あたり800回リクエストできます。
  • Alpaca:alpaca.marketsで無料アカウントを開設し(ペーパートレードで十分です)、APIキーを作成してください。無料プランではIEXフィードが使用され、1分あたり200回リクエストできます。
  • Polygon:polygon.ioで登録してください。無料プランでは、過去2年分の日次データを利用でき、1分あたり5回リクエストできます。

Finnhubは含まれていません。無料プランでは過去のローソク足データを利用できないため、チャートを描画できません。

キーの取り扱い:

  • キーはこのブラウザー内に保存されます。ローカルストレージの kandle:apikey:<source> に保存され、各プロバイダーの独自API以外に送信されることはありません。Kandleにはサーバーがありません。
  • プロバイダーが対応している場合、キーはリクエストヘッダーに含まれます。Twelve DataのWebSocketではURLにキーを含める必要がありますが、そのURLはTwelve Dataにのみ送信されます。
  • Dataダイアログで Remove key をクリックすると、ブラウザーからキーが削除されます。

無料プランには厳しい利用制限があるため、Kandleはレスポンスをキャッシュし、各プランの1分あたりの上限に対してリクエスト数をカウントし、プロバイダーが429を返した場合はリクエスト間隔を広げます。上限に達すると、ループして再試行する代わりに、チャートに「無料プランの上限に達しました。N秒後に再試行してください」と表示されます。

株式チャートには取引時間中のローソク足のみが表示されます。夜間、週末、祝日には空のローソク足は追加されず、ローソク足はチャート上で隣り合って配置されるため、時間軸に隙間はできません。

市場データは、各プロバイダーの公式公開APIからブラウザーに直接取得されます。Kandleがデータを保存または再配布することはなく、各プロバイダーの利用規約が適用されます。利用できる取引所は地域によって異なります。Binanceの場合、アプリはまず公開市場データ用ホストを使用します。

OKXチャート上に表示されたデータソースダイアログ

CSV インポート

独自の OHLCV データを読み込むには、銘柄検索または Data ダイアログの CSV カードで Import CSV をクリックしてファイルを選択するか、ファイルをチャートにドロップします。Kandle はブラウザー内でファイルを読み取り、検出した内容を表示します。データセットに名前を付けると、チャートに表示されます。データがアップロードされることはありません。

対応ファイル:

  • 時刻列(time、date、datetime、timestamp、open time のいずれか)、open、high、low、close、および任意の volume を含むヘッダー行が必要です。列の順序や大文字・小文字は問いません。date 列と time 列が別々の場合は結合されます。ヘッダーがないファイルは、time、open、high、low、close、volume の順に読み込まれます。
  • カンマ、セミコロン、タブ区切りに対応しています。セミコロン区切りのファイルでは、小数点としてカンマ(1234,5)を使用できます。
  • 時刻は ISO 8601(タイムゾーン付きの 2024-03-05T14:30:00Z)、YYYY-MM-DD、YYYY-MM-DD HH:mm、YYYY-MM-DD HH:mm:ss(UTC として読み込み)、または Unix 時刻(秒またはミリ秒)に対応しています。
  • 行は時刻順に並べ替えられます。同じ時刻の行が複数ある場合は、後の行が残ります。時刻や価格を読み取れない行、および高値が安値を下回る行はスキップされ、その件数が表示されます。

時間足はバー間隔の中央値から判定されるため、週末を含まない日足の株価データも 1D として扱われます。時間足に合致しないものの、その時間足で割り切れるバー(30 分足など)は、次の時間足(1H)にまとめられます。チャートでは、データセット本来の時間足と、それより長い時間足を表示できます。長い時間足はデータセットのバーから生成されます。短い時間足のボタンは無効になります。

データセットはこのブラウザーのローカルストレージに保存されます(1 件あたり最大 2.5 MB、合計 4 MB、データセットあたり約 40,000 本のバー)。銘柄検索の CSV セクションに CSV バッジ付きで表示され、再読み込み後も利用できます。また、Data ダイアログから削除できます。スクリプト、ストラテジーのバックテスト、上位時間足での request.security、描画、バーリプレイ、マルチチャートレイアウトでも利用できます。データは更新されないため、CSV チャートのアラートは発火しません。エージェントは set_symbol と exchange csv を使ってデータセットを開けます。

週足 EMA スクリプトを適用した、インポート済みの BTC 日足 CSV ファイルと Import CSV ダイアログ

ライセンス

MIT です。LICENSE をご覧ください。

チャートの描画には、Apache-2.0 ライセンスの KLineChart を使用しています。スクリプトエディターには、MIT ライセンスの CodeMirror を使用しています。各ライセンスの通知は public/third-party-notices.txt に記載されています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。