mcpField
W
Wickworks

Wickworks

ローカル
github.com/psyb0t金融データ51 週間前に更新

Wickworks について

Wickworksは、トレード分析やデータ処理向けのセルフホスト可能なOHLC分析HTTPサービスです。テクニカル指標とスマートマネーコンセプトのプリミティブを計算し、売買シグナルを生成せず、指定された結果を返します。

主な機能

  1. 01トレンド、モメンタム、ボラティリティ、出来高指標
  2. 02オーダーブロック、ギャップ、相場構造イベント
  3. 03リクエストごとの出力選択とパラメーター設定
  4. 04メタデータカタログとNaN安全なJSON出力
  5. 05OHLC(V)バー向けHTTP API

活用シーン

  1. 01チャート用テクニカル指標の計算
  2. 02オーダーブロックや構造ブレイクイベントの検出
  3. 03独自の戦略コードで指標結果を処理
  4. 04出力フィールドのラベルや説明の確認

MCP 対応

READMEにはMCP機能の説明がありません。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"psyb0t-wickworks": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/psyb0t/wickworks:v0.7.0"
]
}
}
}
起動コマンドdocker run -i --rm docker.io/psyb0t/wickworks:v0.7.0

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocidocker.io/psyb0t/wickworks:v0.7.0

ツール

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

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

詳細

wickworks

CI version license Docker Pulls

愚直なまでにシンプルな OHLC 分析ツールです。HTTP 経由でローソク足を送ると、インジケーターと SMC オブジェクトを返します。それがすべてです。データベースも、キューも、状態も、独自の見解も、「AI を活用したシグナル」も、月額 97 ドルの Discord へのアップセルもありません。基本要素だけです。

世の中にある、いかにも怪しげな TA SaaS はどれも、いつ買うべきかを教えたがります。Wickworks が教えるのは、オーダーブロックが 1.0832 にあり、RSI が 71.4 だということです。「それが何を意味するのか?」は、あなたの戦略が担う部分です。そしてそれは、誰かのペイウォールの向こうではなく、あなたのコードの中にあるべきです。

pandas_ta と smartmoneyconcepts を基盤に、FastAPI サーバーでラップしています。実際の EURUSD ティックを使った閉形式の参照値と出力を照合する 370 件のテストで保護されています。計算のバグが紛れ込んでも、コンテナーをビルドする前にテストスイートが検出します。

目次

内容

カテゴリ基本要素
トレンドSMA/EMA とその他 15 種類の移動平均、傾き、ドンチャンチャネル、一目均衡表
モメンタムRSI、MACD、ストキャスティクス、StochRSI、ADX、MFI、CCI、Williams %R、ROC、MOM、TSI、TRIX、UO、フィッシャー
ボラティリティATR、NATR、ボリンジャーバンド、ケルトナーチャネル、スクイーズ
出来高VWAP(アンカー付き)、VWMA、OBV、AD、ADOSC、CMF、KVO
SMCオーダーブロック、フェアバリューギャップ、BOS/CHoCH、スイング構造、サポート/レジスタンス水準、流動性、リトレースメント、セッション、前期間の高値/安値
サマリーポジション、傾き、モメンタム、出来高レジーム、直近の値幅 — 生系列を事前に投影したデータ

すべての JSON フィールド名は camelCase です。出力は NaN セーフです。NaN は null に変換され、後続のパーサーを壊すリテラルの NaN トークンにはなりません。NumPy/Pandas のスカラーと配列は適切にシリアライズされます(numpy.float64(...) が漏れ出すことはありません)。ローソク足も計算も UTC で、コンテナーは TZ=UTC で動作します。タイムゾーンの面倒はそちらの問題であり、こちらの問題ではありません。

クイックスタート

docker run --rm -p 8000:8000 psyb0t/wickworks:latest

以上です。サービスは :8000 でリッスンします。

docker compose
services:
  wickworks:
    image: psyb0t/wickworks:latest
    ports: ["8000:8000"]
    environment:
      LOG_LEVEL: INFO
      MAX_BARS: "5000"
      MIN_BARS: "50"
ローカル開発コンテナー
make run         # build the dev image and run uvicorn on :8000

API

エンドポイントは 3 つだけです。これが全機能です。

GET /health
curl -s http://localhost:8000/health
{ "ok": true, "version": "0.7.1" }
GET /metadata

すべての出力パスについて、ラベル、説明、単位、カテゴリ、解釈上の注記を含むバージョン管理されたカタログを返します。利用側では、報告された Wickworks のバージョンに対してキャッシュできます。

POST / — 計算

OHLC(V) バーと、必要なインジケーターを送信します。返されるのはリクエストした内容だけです。レスポンスのキーは、送信したキーと一致します。「頼んでいないインジケーターを40個ついでに返す」といったことはありません。

curl -s -X POST http://localhost:8000/ \
  -H 'Content-Type: application/json' \
  -d '{
    "symbol": "EURUSD",
    "timeframe": "H1",
    "bars": [
      { "time": 1700000000, "open": 1.0832, "high": 1.0851, "low": 1.0828, "close": 1.0844, "volume": 1247 },
      ...
    ],
    "indicators": {
      "rsi":         true,
      "rsi21":       { "type": "rsi",   "length": 21 },
      "stochFast":   { "type": "stoch", "k": 5,  "d": 3, "smoothK": 3 },
      "stochSlow":   { "type": "stoch", "k": 21, "d": 7, "smoothK": 5 },
      "macd":        true,
      "orderBlocks": true,
      "fvg":         true
    }
  }'
indicators オブジェクト — ここが要点です

各エントリーでは、出力名(キー)を指定内容に対応付けます。

  • true — デフォルトのパラメーターでインジケーターを実行します。キーがそのままタイプになります。
  • { ...params } — パラメーターオブジェクトです。type がない場合はキーが使われます。
  • { "type": "<name>", ...params } — 既知のインジケーターを、カスタムの出力名で実行します。同じインジケーターを複数重ねて使う場合(異なるパラメーターのストキャスティクスを4つ、異なる期間のEMAを3つなど)に便利です。
"indicators": {
  "rsi":    true,
  "rsi21":  { "type": "rsi",   "length": 21 },
  "stochA": { "type": "stoch", "k": 5,  "d": 3 },
  "stochB": { "type": "stoch", "k": 21, "d": 7 }
}

レスポンスには rsi、rsi21、stochA、stochB が含まれます。それ以外は含まれません。JSON オブジェクトの構築上、出力名が重複することはありません。この API では、どれだけ試しても自分で失敗の原因を作ることはできません。

概念

以下の出力は、繰り返し登場するいくつかのトレードの考え方に対応しています。TradingView 形式のチャートツールを使ったことがあれば、ほとんどはおなじみでしょう。そうでなくても、ここでの簡単な説明を読めば、目的に合った出力を選べます。

系列とイベント。 _系列_出力は入力バーごとに1つの値を返します(ウォームアップ中の位置は null)。チャートに表示できる連続的な数値です。_イベント_出力は、直近に起きた出来事(スイング、ブロック、構造のブレイクなど)を示すオブジェクトの疎な配列です。系列は_状態_を、イベントは_発生した出来事_を示します。

プリミティブのみ — シグナルはありません。 Wickworks は解釈を伴うシグナルを出力しません(ダイバージェンス検出、MA クロスイベント、「買い/売り」タグなどはありません)。返されるものはすべて、生のインジケーター系列、構造上の事実(このバーでオーダーブロックが形成された、価格がこのスイングを超えて終値を付けたなど)、またはそれらを事前に集計したものです。何をすべきかを判断するものではありません。ダイバージェンス、MACD クロスイベント、ゴールデンクロス/デッドクロス、その他の派生シグナルが必要な場合は、ご利用側でそのレイヤーを構築してください。

各インジケーターが答える4つの問い:

  1. トレンドはどうなっていますか? → 移動平均、ADX、スーパートレンド、一目均衡表。
  2. モメンタムはそれを後押ししていますか? → RSI、MACD、ストキャスティクス、MFI。
  3. どれだけ値幅の余地がありますか? → ATR、ボリンジャーバンド、ドンチャン、ケルトナー。
  4. 出来高はそれを裏付けていますか? → OBV、CMF、A/D、KVO、VWAP。

TradingView では見つからない、独自のイベント構成要素:

  • srLevels は最新の最大500本のバーを使用し、異なるタッチの間隔を5本に固定し、ATRの半分以内で少なくとも2回テストされた水準を対象とします。価格の両側で最も近い水準を最大3つ返します。
  • オーダーブロックとFVG は異なる状態を公開します。オーダーブロックには緩和状態と時刻が含まれるため、利用側で独自の鮮度ルールを選べます。FVG の出力には、未緩和のギャップのみが含まれます。
  • BOS と CHoCH は、設定された Smart Money Concepts のスイングアルゴリズムによる分類です。BOS は同じ方向への構造的なブレイクを示します。CHoCH は反対方向へのブレイクを示します。いずれのラベルも、継続や反転を保証するものではありません。
利用可能なインジケーター

ツールやバリデーター向けの正式な仕様が必要ですか?schema.json を参照してください。完全な JSON Schema Draft 2020-12 が記載されています。以下のリファレンスは人向けで、カテゴリ、インジケーターごとの説明、パラメーター表、戻り値の形、使用例を掲載しています。

ほとんどの出力で共通する3種類の系列形式:

  • Series — バーごとに1つの値(number | null)を返し、入力の bars と1対1で対応します。ウォームアップ中の位置は null です。
  • FlagSeries — バーごとに 0/1 の整数を1つ返します。
  • DirectionSeries — バーごとに -1/+1 の整数を1つ返します(1 = 強気/ロング、-1 = 弱気/ショート)。

以下のインジケーターは、パラメーターの形式ではなく、トレーダーに何を伝えるかに基づいて分類されています。各サブセクションでは、まずカテゴリの概要を1段落で説明し、その後にカテゴリ内のすべてのインジケーターを、簡単な「概要/利用場面」の説明とともに列挙します。


移動平均 — トレンドの方向性と動的な水準

価格を平滑化したラインです。それぞれ、反応の速さと遅延のバランスが異なります。新しいローソク足にどれだけ速く反応する曲線にしたいかに応じて選んでください。トレーダーの用途:優勢な方向を定める(価格がMAより上なら強気、下なら弱気)、市場が繰り返し接触する動的なサポート/レジスタンスを特定する、クロスオーバーシグナルを発生させる(短期MAが長期MAをクロスするとトレンドが転換)。

すべて単一の length パラメーターを受け取り、Series を返します。

typedefaultinputs内容
ema21close指数移動平均 — 直近のローソク足に大きな重みを付けます。標準的なトレンドフィルターです。多くのストラテジーでデフォルトのトレンドMAとして使われます。
sma50close単純移動平均 — 均等な重みで平均します。反応は遅く、滑らかで、古典的な手法です。50/200-SMAのクロスは「ゴールデンクロス」/「デッドクロス」と呼ばれます。
hma14closeハル移動平均 — 遅延が少なく滑らかです。同じ期間のEMAに比べてノイズを増やさず、素早く反応します。
wma14close加重移動平均 — 線形の重みを付けます。遅延はSMAとEMAの中間です。
dema10close二重指数移動平均 — 補正項によってEMAより遅延を抑えます。
tema10close三重指数移動平均 — 遅延をさらに抑えますが、もみ合い相場ではダマシが増えやすくなります。
t310closeティルソンT3 — SMAのように滑らかで、EMAのように素早く反応します。視覚的に分かりやすい曲線状の出力を好むトレーダーもいます。
kama10closeカウフマン適応型移動平均 — トレンドでは反応が速くなり、もみ合いでは遅くなります。自動調整されます。
alma10closeアルノー・ルゴー移動平均 — ガウス加重です。ノイズと遅延を抑えます。
linreg14close線形回帰移動平均 — 期間内の最適近似直線を「現在」の値として評価します。統計に基づく平滑化です。
jma7closeジュリック移動平均 — 独自方式で平滑化し、遅延を非常に抑えます。プレミアム感のある曲線です。
zlma10closeゼロラグ移動平均 — EMAに誤差補正を加え、遅延を完全になくすことを目指します。
rma10closeワイルダー平滑化 — RSI/ATRの内部で使われます。重く、反応は遅めです。インジケーター内部の平滑化と同じ意味合いを求める場合に便利です。
fwma10closeフィボナッチ加重移動平均 — フィボナッチ数列に基づいて重みを付けます。
swma10close対称加重移動平均 — 期間の中央で重みが最大になります。
sinwma14close正弦加重移動平均 — 正弦曲線状の重みを付けます。非常に滑らかです。
trima10close三角移動平均 — SMAを二重に平滑化します。SMAより滑らかですが、遅延は大きくなります。
vwma10close + vol出来高加重移動平均 — 出来高の多いローソク足ほど大きな重みを付けます。実際に取引が活発だった価格に近づきます。
"ema":   true,
"ema50": { "type": "ema", "length": 50 }
vwap — セッション起点の VWAP

設定した日次、週次、または月次の起点でリセットされる出来高加重平均価格です。移動平均とは異なり、VWAP は固定された境界から累積します。sessionOffset は UTC の起点を固定の時間分だけずらします。取引所のカレンダーや夏時間の変更は適用されません。

パラメーター型デフォルト説明
anchor"D" | "W" | "M""D"セッションのリセット間隔
sessionOffsetstring | number"0s"セッション開始時刻を UTC の午前 0 時からずらします。Go 形式("-5h"、"1h30m")または秒数。

戻り値: Series。


モメンタムオシレーター — 変化の速さと勢いの衰え

価格水準そのものではなく、価格変化の 速さ を測定します。ほとんどは範囲が限定されている(0~100、またはゼロを中心とする)ため、銘柄や時間足をまたいで数値を直接比較できます。トレーダーは、買われすぎ/売られすぎの極端な水準(平均回帰の機会)を見つけたり、価格とのダイバージェンス(価格が伸びる一方でモメンタムが弱まる場合は、反転の兆候)を確認したり、ゼロライン/中間線のクロスをモメンタム変化のきっかけとして取引したりします。

長さベースの単一ラインオシレーター

仕様は共通です。length パラメーターを 1 つ取り、Series を 1 つ返します。

typeデフォルト入力スケールわかること
rsi14close0–100相対力指数。 代表的なモメンタムオシレーターです。>70 は買われすぎ、<30 は売られすぎです。範囲が限定され、広く研究されており、後続のモメンタムと価格の分析で標準的に使われる入力です。
mfi14h/l/c + vol0–100マネーフローインデックス — 出来高で重み付けした RSI です。価格 と 出来高の両方が一致する必要があるため、より厳格なシグナルになります。
willr14h/l/c-100..0ウィリアムズ %R。 逆向きのストキャスティクスです。-20 ≈ 買われすぎ、-80 ≈ 売られすぎです。反転が速い指標です。
cci14(h+l+c)/3範囲制限なし商品チャネル指数。 移動平均からの乖離を正規化された単位で測定します。±100 は一般的な閾値です。(独自実装です — pandas_ta には既知のバグがあります。)
roc10close%変化率。 N 本のバーにおける変動率です。最も直接的なモメンタム値で、平滑化も正規化もありません。
mom10close価格単位絶対モメンタム: close - close.shift(length)。ROC を価格単位で表した未加工の値です。

cci は追加の c パラメーター(0 より大きい数値、デフォルトは 0.015)を受け取ります。これは、古典的な Lambert の式で使われる定数のスケーリング係数です。

uo — Ultimate Oscillator

Williamsによる短期・中期・長期の3つの時間軸を組み合わせ、0~100の1本のラインにまとめた指標です。レンジ相場で単一期間のオシレーターが出す誤シグナルを減らすことを目的に設計されています。RSIと同様に、ダイバージェンスと30/70の極値に注目します。複数期間による確認が組み込まれています。

ParamTypeDefaultDescription
fastinteger ≥ 17短期期間
mediuminteger ≥ 114中期期間
slowinteger ≥ 128長期期間

Returns: Series(0~100)。

stoch — Stochastic oscillator

「直近の高値から安値までの範囲のうち、終値はどこに位置しているか」を示します。生の位置を表す%Kと、平滑化した%Kである%Dを返します。代表的なシグナルは、%Kが%Dをクロスすることです。両方のラインが80を上回ると買われすぎゾーン、20を下回ると売られすぎゾーンです。RSIより反応が速く、シグナルの頻度が高い一方で、誤検出も多くなります。

ParamTypeDefaultDescription
kinteger ≥ 114生の%Kのルックバック期間
dinteger ≥ 13%Dの平滑化
smoothKinteger ≥ 13%Kの平滑化

Returns: { k, d } — それぞれSeries(0~100)。

stochrsi — Stochastic of RSI

価格ではなくRSIの値にストキャスティクスの計算式を適用します。感度がさらに高く、通常のストキャスティクスよりはるかに頻繁にシグナルを出します。レンジ相場の中で転換点を捉えるのに特に適しています。トレンドフィルターと組み合わせてください。単独で使うと過剰な売買につながります。

ParamTypeDefaultDescription
lengthinteger ≥ 114RSIに適用するストキャスティクスのルックバック期間
rsiLengthinteger ≥ 114RSIの期間(ストキャスティクスへの入力)
kinteger ≥ 13%Kの平滑化
dinteger ≥ 13%Dの平滑化

Returns: { k, d } — それぞれSeries(0~100ではなく、0~1)。

macd — Moving Average Convergence Divergence

短期EMAと長期EMAの差に、その差をシグナルラインで平滑化したものを加えた指標です。3つの視点があります。macdライン(生のモメンタム)、signalライン(平滑化した値)、hist(macd − signal。実際に多くのトレーダーが注目する値)です。ヒストグラムがゼロをクロスするとモメンタムの方向が変化し、ヒストグラムが価格と乖離するとモメンタムの勢いが尽きつつあることを示します。

ParamTypeDefaultDescription
fastinteger ≥ 112短期EMA
slowinteger ≥ 126長期EMA
signalinteger ≥ 19(短期 − 長期)に適用するシグナルラインのEMA

Returns: { macd, signal, hist } — それぞれSeriesです。hist = macd - signal。

tsi / trix / fisher — シグナルラインを伴うモメンタム

すべて同じ形式を返します:{ <name>: Series, signal: Series }。MACD と同様に、ゼロラインのクロスと値とシグナルのクロスに注目してください。

tsi — True Strength Index。価格モメンタムを二重に平滑化します(終値ベース)。MACD より滑らかな一方、反転は遅く、誤ったシグナルが少ない分、遅行します。

ParamTypeDefault
fastinteger ≥ 113
slowinteger ≥ 125
signalinteger ≥ 113

trix — 三重に平滑化した指数 ROC。設計上、length より短い周期を除去するため、長期的なモメンタムの指標です。上位時間足でのトレンド確認には便利ですが、スキャルピングには向きません。

ParamTypeDefaultDescription
lengthinteger ≥ 130三重平滑化に使う EMA チェーンの長さ
signalinteger ≥ 19trix に適用するシグナルラインの EMA

fisher — Ehlers Fisher Transform。価格をガウス分布に近い形に変換することで、RSI よりも極値が明確になり、転換点を見つけやすくします。

ParamTypeDefault
lengthinteger ≥ 19
signalinteger ≥ 11

トレンドの強さとクロスの方向

これらの指標が示すのは価格水準ではなく、現在の市場がどれほどトレンド状態にあるか、またはどちら側が優勢かです。価格ベースのインジケーターと組み合わせてください。トレンドの強さを測ることで、トレンドシグナルを信頼できるかどうかがわかります。

adx — ADX + DMI

Average Directional Index はトレンドの強さのみを測定し、方向は測定しません。どちら側が優勢かにかかわらず、一方が明確に勝っていると adx は上昇します。+DI と -DI のラインは方向性の圧力を表し、+DI > -DI は強気派が優勢であることを示し、その逆も同様です。目安として、adx > 25 はトレンドを捉えやすい市場であり、シグナルに従います。adx < 20 は方向感のない市場であり、トレンド戦略を避け、平均回帰を優先します。

ParamTypeDefault
lengthinteger ≥ 114

戻り値: { adx, diPlus, diMinus } — それぞれ Series です。

aroon

「最高値を付けてから何本のバーが経過したか」と「最安値を付けてから何本のバーが経過したか」を競わせ、0~100 に正規化します。up が 100 に近い場合、最近の値動きで高値更新が続いており(強い上昇トレンド)、down が 100 に近い場合、最近の安値が続いています(強い下降トレンド)。oscillator = up - down は、同じ -100~+100 のスケールで正味の方向性を示します。

ParamTypeDefault
lengthinteger ≥ 114

戻り値: { up, down, oscillator } — up/down は 0~100、oscillator は -100~+100 の範囲です。

vortex

プラス(plus)とマイナス(minus)のトゥルーレンジの値動きを測る 2 本のラインです。トレンド転換のみを検出し、plus が minus を上抜けると強気への転換、その逆は弱気への転換を示します。買われすぎ/売られすぎの概念はありません。

ParamTypeDefault
lengthinteger ≥ 114

戻り値: { plus, minus } — それぞれ Series です。


ボラティリティ

価格変動の方向ではなく、その_幅_を測定します。これらだけでは売買シグナルは生成されません。ストップ位置の設定(ストップを1~2 ATRより狭く設定しない)、ポジションサイズの決定(ボラティリティに反比例してサイズを調整し、各取引のリスク金額を一定にする)、レジームの検出(ボラティリティの上昇=ブレイクアウトレジーム、ボラティリティの収縮=保ち合い。スクイーズに注意)に使う入力値です。

typeデフォルト入力スケールわかること
atr14h/l/c価格単位Average True Range — N本のバーにおける平均レンジを、生の価格単位で示します。汎用的なストップ距離の単位です。
natr14h/l/c価格に対する割合Normalized ATR — 終値に対するATRの割合です。同じ情報を示し、価格水準の異なる銘柄間で比較できます。

出来高/資金フロー

出来高由来のラインは、価格の動きを呼び出し側が選択したアクティビティ系列と比較します。値動きに伴ってアクティビティが増加したか減少したかを示しますが、参加者を特定したり、ブレイクアウトが本物だと証明したりするものではありません。

obv と ad — パラメーター不要の累積ライン

パラメーターはありません。戻り値: Series。

  • obv — オンバランスボリューム。上昇バーでは出来高を加算し、下落バーでは減算します。累積値です。OBVが価格と逆行する(価格は上昇、OBVは横ばいまたは下落)場合、その値動きが出来高に裏付けられていない警告サインです。
  • ad — アキュムレーション/ディストリビューション。バーのレンジ内で終値がどこに位置するかに応じて重み付けします(終値が高値に近い=主に買い、安値に近い=主に売り)。累積値です。バーのレンジが大きい場合、OBVよりも正確です。
cmf — チャイキン・マネー・フロー

A/Dの計算式を、無限に累積するのではなくローリングウィンドウで正規化したものです。-1~+1を返します。正の値はウィンドウ期間における買い圧力、負の値は売り圧力を示します。ゼロラインをレジームフィルターとして使い、CMFが正のときにのみロングポジションを取ります。

パラメーター型デフォルト
length整数 ≥ 120

戻り値: Series。

adosc — チャイキンA/Dオシレーター

A/Dラインを使ったMACDスタイルのオシレーターです。A/Dの短期EMAから長期EMAを差し引きます。蓄積の方向だけでなく、そのモメンタム(加速)の変化を検出します。ゼロラインのクロスは、出来高圧力のレジーム変化を示します。

パラメーター型デフォルト説明
fast整数 ≥ 13A/Dラインの短期EMA
slow整数 ≥ 110A/Dラインの長期EMA

戻り値: Series。

kvo — クリンガー・ボリューム・オシレーター

シグナルラインを伴う出来高フォース指標です。短期的な変動への感度を維持しながら長期的な反転を捉えるよう設計されています。短期/長期の二重期間構造により、主要シグナルとしても確認用のオーバーレイとしても役立ちます。出来高バーが必要です。

パラメーター型デフォルト
fast整数 ≥ 134
slow整数 ≥ 155
signal整数 ≥ 113

戻り値: { kvo, signal } — いずれもSeriesです。


バンドとチャネル — 動的な価格エンベロープ

価格の動きを囲むラインです。トレーダーによる主な用途は3つあります。平均回帰の境界(上側バンドにタッチ=上方向に行き過ぎており、逆張り候補。下側にタッチ=下方向に行き過ぎ)、ブレイクアウトのトリガー(バンドの_外側_で終値が確定=ボラティリティレジームの変化)、スクイーズの検出(バンドが狭まる=拡大に先行する収縮)。以下の3種類は計算方法(標準偏差、ATR、生のレンジ)が異なりますが、役割は同じです。

bbands — ボリンジャーバンド

SMA ± N 標準偏差です。幅は直近のボラティリティに応じて自動調整されます。理論上、2σに触れたローソク足は約95%の確率でバンド内に収まりますが、実際には強いトレンドの中で価格が バンドに沿って推移する ことがあるため、トレンド中にバンドへの接触を安易に逆張りしないでください。

ParamTypeDefaultDescription
lengthinteger ≥ 120SMA の期間
stdnumber > 02.0標準偏差のバンド幅

戻り値: { upper, middle, lower } — それぞれ Series です。

kc — ケルトナーチャネル

ボリンジャーバンドと同様ですが、幅の算出には標準偏差の代わりに ATR を使用します。より滑らかで、単一の外れ値を含むローソク足に対して急激に反応しません。スクイーズ検出器として bbands と組み合わせて使われることがよくあります(下記の squeeze を参照)。

ParamTypeDefaultDescription
lengthinteger ≥ 120EMA/ATR の期間
scalarnumber > 02.0ATR 倍率

戻り値: { upper, middle, lower } — それぞれ Series です。

donchian — ドンチャンチャネル

N 本のローソク足における高値の最大値と安値の最小値をローリング計算します。元祖「タートルトレーダー」のチャネルです。上限を上抜けると、N 本間の高値更新を意味し、トレンドに沿った買いシグナルになります。下限を下抜けると、N 本間の安値更新を意味し、トレンドに沿った売りシグナルになります。非常にシンプルですが、トレンドのある金融商品では驚くほど効果的です。

ParamTypeDefault
lengthinteger ≥ 120

戻り値: { upper, middle, lower } — upper/lower はローリング計算した最大値/最小値で、middle はその中間値です。


トレーリングトレンドシグナル

トレンドに応じて方向が切り替わる、単一ラインのトレンドフィルターです。用途は2つあります。トレンドフィルター(強気のときだけ買い、弱気のときだけ売る)と、トレーリングストップ(トレンドが反転した場合の決済位置をラインの値で示す)です。いずれか1つを使ってください。どれも同じ考え方に基づくバリエーションで、遅行とダマシのトレードオフが異なります。

supertrend

ATR ベースのトレーリングバンドです。価格がバンドより上にあるとき、バンドは下側に位置してトレーリングストップのサポートラインとして機能します。価格がバンドを終値で抜けると、バンドが反対側に移動し、方向が切り替わります。デフォルトの ATR 7×3.0 は、標準的な「TradingView Supertrend」の設定です。

ParamTypeDefaultDescription
lengthinteger ≥ 17ATR の期間
multipliernumber > 03.0ATR 倍率

戻り値: { value, direction, long, short } — value はトレーリングバンド(Series)、direction は DirectionSeries です。long/short はそれぞれの方向の区間でのみバンド値を保持し、それ以外は null です(色の異なる2つの Series をプロットできます)。

psar — パラボリック SAR

Wilder の「ストップ・アンド・リバース」です。トレンド中に価格へ向かって加速するドットが、価格に触れると反対側へ切り替わります。トレーリングストップの中で最もタイトな手法です。ドットはすぐに価格へ近づきます。明確なトレンドでは非常に優れていますが、方向が定まらず頻繁に反転する相場では悲惨な結果になります。

ParamTypeDefaultDescription
afnumber > 00.021本ごとの加速ステップ
maxnumber > 00.2加速係数の最大値

戻り値: { long, short, af, reversal } — long/short はその区間における SAR 値(Series。反対側は null)です。af は現在の加速値(Series)、reversal は FlagSeries(1 = このローソク足でトレンドが反転)です。

chandelierExit

ATR ベースのトレーリングストップです。ルックバック期間内の最高値(ロング側)または最安値(ショート側)に固定されます。supertrend よりも価格から_遠く_離れて追従するため、ストップ幅が広く、反転が少なくなります。トレンドに余裕を持たせたいスイングトレードに適しています。

ParamTypeDefaultDescription
lengthinteger ≥ 122高値/安値のルックバック期間
atrLengthinteger ≥ 122ATR 期間
multipliernumber > 02.0ATR 倍率

戻り値: { long, short, direction } — long/short はそれぞれの側の決済レベル(Series。該当しない場合は null)です。direction は DirectionSeries です。

ichimoku

5 本のラインで構成される日本のトレンドシステムです。「雲」(spanA と spanB の間で、kijun 本先に投影)は重要な判断材料です。価格が雲より上なら強気相場、雲の中なら中立/もみ合いで確信度の高い取引はなく、雲より下なら弱気相場です。tenkan(短期)と kijun(長期)は、クロスオーバーのトリガーに使う中間値のラインです。chikou は後方にずらした終値で、過去の価格と照らし合わせてシグナルを確認するために使います。

ParamTypeDefaultDescription
tenkaninteger ≥ 19転換線 — 高値/安値の短期中間値
kijuninteger ≥ 126基準線 — 長期中間値
senkouinteger ≥ 152先行スパン B の期間

戻り値: { spanA, spanB, tenkan, kijun, chikou } — すべて価格単位の Series です。spanA/spanB は kijun 本分前方に投影されます(雲は未来に位置します)。chikou は終値を kijun 本分後方にずらしたものです。


ボラティリティの収縮/レジーム
squeeze — TTM Squeeze

ボリンジャーバンドがケルトナーチャネルの内側に完全に収まっている状態を検出します。つまり、実現ボラティリティ(BB の幅)が平均ボラティリティ(KC の幅)を下回っています。市場が収縮し、値動きが蓄積している状態です。過去の傾向では、スクイーズの解放後に急激な方向性のある動きが起こります。off が発生したとき(このバーでスクイーズが解放されたとき)は、value が示す方向へブレイクアウトを取引します。

フラグフィールドは、バーごとの状態機械を構成します。

  • on — このバーでスクイーズが継続中です(BB が KC の内側)。市場は値動きが蓄積している状態です。
  • off — このバーでスクイーズが解放された直後です(BB が KC の外に出ました)。トリガーバーです。
  • no — スクイーズなし(デフォルト状態)。
ParamTypeDefault
bbLengthinteger ≥ 120
bbStdnumber > 02.0
kcLengthinteger ≥ 120
kcScalarnumber > 01.5

戻り値: { value, on, off, no } — value は符号付きモメンタム(Series。正はスクイーズ中/解放後の強気モメンタム、負は弱気モメンタム)です。on/off/no は FlagSeries です。

SMC のプリミティブ

Smart Money Concepts は、OHLCV パターンからゾーン、レベル、構造の変化を特定するプライスアクションのフレームワークです。Wickworks は、設定されたアルゴリズムが検出した内容を報告します。機関投資家の注文を観測したり、あるレベルが反応を引き起こすと証明したりするものではありません。

以下の出力で確認できる SMC の主要な概念は次のとおりです。

  • オーダーブロック は、条件を満たす値動きの直前にある、逆方向の最後のローソク足周辺のゾーンをアルゴリズムで検出したものです。一部の SMC 手法ではその後の再テストを監視しますが、この計算は注文を観測したり反応を予測したりするものではありません。
  • Fair Value Gap (FVG) は、1 本目と 3 本目のヒゲが重ならない 3 本のローソク足パターンです。出力には、検出されたギャップとそのミティゲーション状態が記録されます。再訪を予測するものではありません。
  • ミティゲーション は、その後価格がゾーンに戻ることを表します。オーダーブロックにはミティゲーションのフィールドが保持されます。FVG の出力には、未ミティゲーションのギャップのみが含まれます。
  • スイング高値/安値 — 価格構造における局所的なピボットです。SMC のトレンド特定は、スイングの並び(HH/HL=上昇トレンド、LH/LL=下降トレンド)に基づいています。
  • BOS (Break of Structure) は、設定されたアルゴリズムに基づき、スイングレベルを同じ方向にブレイクしたことを示します。
  • CHoCH (Change of Character) は、設定されたアルゴリズムに基づき、逆方向にブレイクしたことを示します。反転を証明するものではありません。
  • 流動性 — イコールハイの上、またはイコールローの下にあると推定される損切り注文のクラスターです。価格は反転する前に「流動性を狩る」傾向があります。
共通オブジェクトの形状

価格ゾーン(orderBlocks と fvg で使用):

{
  "type": "bullish|bearish",
  "top": 1.0892,
  "bottom": 1.0871,
  "candleIdx": 312,
  "time": 1700123400,
  "originAt": 1700123400,
  "confirmedAt": 1700127000,
  "observedAsOf": 1700200000,
  "distancePct": 0.082
}
フィールド型説明
type"bullish" or "bearish"ゾーンの方向です。Bullish はサポート、bearish はレジスタンスを意味します。
topnumberゾーンの上限価格です。
bottomnumberゾーンの下限価格です。
candleIdxinteger ≥ 0送信されたバーのうち、発生元のバーを示す 0 始まりのインデックスです。
timeinteger発生元バーの時刻(UTC 秒)です。
originAtinteger発生元バーの時刻(UTC 秒)です。
confirmedAtintegerゾーンを把握できるようになった最初のバーの時刻です。
observedAsOfintegerスナップショットの作成に使用した、最後に送信されたバーの時刻です。
distancePctnumber基準エッジから現在価格までの絶対距離を価格で割った値です。

orderBlocks は、mitigatedWickAt、mitigatedCloseAt、 mitigatedWick、mitigatedClose、touchCount、touchEvents も返します。FVG の出力には未緩和のギャップのみが含まれるため、これらのフィールドは返されません。

BosChochEvent、SwingLevel、SrLevel、RecentRange:

出力オブジェクトの形状
bosChoch イベント`{ event: "BOS"
swingLevels イベント`{ type: "high"
srLevels イベント`{ level: number, type: "support"
recentRange{ high: number, low: number, periodHigh: number, periodLow: number }

SmcEvent(liquidity、previousHighLow、sessions、retracements で使用):idx と time が常に存在する疎なオブジェクトです。その他のフィールドは、基盤となる smartmoneyconcepts ライブラリからそのまま引き継がれます(ペイロードを小さく保つため、null フィールドは除去されます)。

出力
orderBlocks

送信された履歴全体のオーダーブロックです。ヒゲと終値による緩和状態、緩和時刻、タッチイベントが含まれます。新しいゾーンのみを表示するかどうかは、利用側で判断します。

  • パラメーター: なし。
  • 戻り値: OrderBlock の配列。最大 40 件。|distancePct| の昇順(現在価格に近い順)で並びます。
fvg(別名 fvgs)

未緩和の Fair Value Gap です。共通の価格ゾーンの形状を使用します。一部の SMC メソッドは後のギャップ再訪を監視しますが、Wickworks はギャップの充填や反転を予測しません。

  • パラメーター: なし。
  • 戻り値: OrderBlock と同じ形状のオブジェクトの配列。最大 15 件。距離の昇順で並びます。
bosChoch

設定されたスイングアルゴリズムによって BOS または CHoCH に分類された、最近の構造イベントです。利用側は、イベントの順序を独自のトレンド定義や確認ルールと組み合わせることができます。

  • パラメーター: なし。
  • 戻り値: BosChochEvent の配列。最大 10 件。直近 50 本のバーを対象にスキャンします。
swingLevels

構造解析で確認された直近のスイング高値とスイング安値です。SMC がトレンドを定義する際に使う生の入力です。構造をプロットしたり、その上に独自のブレイク検出ロジックを構築したりするのに役立ちます。

  • パラメーター: なし。
  • 戻り値: SwingLevel の配列。最大 10 件で、直近 50 本のバーを対象にスキャンします。
srLevels

独自のサポート/レジスタンスレベルです。生成には最新の最大 500 本のバーを使用し、7 バーのスイング検出器(sw7)でピボットを取得します。半 ATR 以内で少なくとも 2 回のタッチがあり、タッチ間隔が最低 5 本のバーであることを条件とし、返されるレベル間には 3 ATR の間隔を設け、価格に近い順に各側最大 3 レベルを返します。

  • パラメーター: なし。
  • 戻り値: SrLevel の配列。サポート最大 3 件+レジスタンス最大 3 件。
recentRange

チャートの値幅を簡潔にまとめます。直近 20 本のバーと、送信された全履歴を比較します。「現在価格は直近の高値/安値付近にあるか?」をすばやく把握できます。

  • パラメーター: なし。
  • 戻り値: RecentRange オブジェクト({ high, low, periodHigh, periodLow })。
liquidity

設定された値幅の許容範囲内で、スイングレベルから検出された同値高値および同値安値のクラスターです。一部の SMC 手法ではこれらを流動性エリアと呼びますが、Wickworks は注文を観測せず、流動性の掃き取りや反転を予測することもありません。

パラメーター型デフォルト説明
swingLengthinteger ≥ 110スイング検出の対象期間
rangePercentnumber > 00.01同値高値/同値安値のグループ化における最大距離(%)

戻り値: SmcEvent の配列。

previousHighLow

直前に完了した固定 UTC 集計期間の高値と安値のマーカーです。これは取引所のセッションに基づく計算ではありません。

パラメーター型デフォルト説明
timeFramestring"1D"従来の名前とは異なり、これはチャートの timeframe ではなく、前の値幅を集計する期間を選択します。取引所のセッションではなく、UTC に合わせた固定期間を使用します。標準値:15m、30m、1H、4H、1D、1W、1M。VoidAlpha で使われている既存の表記 15min、30min、1h、4h、1d、1w、1ME も受け付けます。週は月曜日から日曜日までです。

戻り値: SmcEvent の配列。

sessions

固定 UTC の時間帯に含まれるバーにマークを付けます。名前付きの時間帯は取引所のカレンダーを使用せず、祝日や夏時間にも対応しません。

パラメーター型デフォルト説明
sessionstring"London"名前付きの UTC セッション時間帯です。別の時間帯を指定する場合は "Custom" を使用します。
startTime"HH:MM" | nullnull"Custom" の場合に必須となる UTC の開始時刻です。名前付きセッションでは指定できません。
endTime"HH:MM" | nullnull"Custom" の場合に必須となる UTC の終了時刻です。名前付きセッションでは指定できません。

戻り値: SmcEvent の配列。

retracements

直近のスイングを基準とするフィボナッチ・リトレースメントのイベントです。トレーダー向けの用途:有効な値動きに対する標準的なフィボナッチレベル(38.2/50/61.8)を、スイングの始点と終点を選ぶことなく自動的に計算します。

パラメーター型デフォルト説明
swingLengthinteger ≥ 110スイング検出の対象期間

戻り値: SmcEvent の配列。

分析サマリー

これらの出力は、1 回の共有分析パスで計算される最新バー時点のスナップショットです。このパスはリクエストごとに 1 回実行され、結果を保存します。以下の各出力は、キャッシュされた結果からそれぞれの部分を読み取るだけです。6 つすべてをリクエストしても、1 つだけをリクエストする場合とコストは同じです。どれか 1 つでも必要であれば、実質的に無料です。

Series 出力全体をサブスクライブして自分で最後の値だけを読み取るのではなく、チャートの**構造化された「現在の状態」**を一度に確認したい場合に使用してください。

いずれもパラメーターはありません。

出力戻り値トレーダー向けの用途
price数値 — 最新バーの終値(オブジェクトではなく、単一のスカラー値)距離やレベルの計算に使う基準価格です。
levels{ ema21, sma50, sma100, sma200, atr, vwap, donchianUpper, donchianLower, donchianMid } — 各値は number | null標準的な MA、ATR、VWAP、ドンチャンのスナップショットです。「現在の各レベルの位置」を確認できます。
momentum{ rsi, mfi, macdHist, macdLine, macdSignal, adx, stochK, stochD } — 各値は number | nullよく使われるオシレーター全体のモメンタムをひと目で確認できる一覧です。
volume{ volRatio: number|null, obv: number|null, isSpike: boolean } — volRatio > 2.0 の場合、isSpike は true です「現在のバーで出来高が急増しているか」をすばやく確認できます。volRatio は現在の出来高 / 直近の平均出来高です。
positionオブジェクト — {ema21, sma50, sma100, sma200, vwap} のキーがあり、それぞれの値は "above" | "below" です。計算可能な MA のキーのみ表示されます。バイアスマップです。現在、価格が各主要基準線より上か下かを確認できます。
slopeオブジェクト — position と同じキーがあり、それぞれの値は "up" | "down" です。直近 10 本のバーにおける方向を示します。各ライン自体が上昇しているか下降しているかを確認できます。position と組み合わせることで、相場レジームを総合的に判断できます。
リクエストフィールド
フィールド型デフォルト必須説明
barsarray of Bar—はい時系列順の OHLC(V) バー。len(bars) <= MAX_BARS(デフォルトは 5000)。
indicatorsobject—はいoutputKey → spec のマップ。1 件以上必要です。
symbolstring""いいえ呼び出し元が指定する銘柄ラベル。そのまま返されます。
timeframestring""いいえH4 など、不透明なチャートバー間隔のラベルです。Wickworks はこれをそのまま返してサマリーに付加しますが、解析したり、バーを分類するために使用したりはしません。計算には、送信された値とタイムスタンプが使用されます。

バーの形式:

フィールド型デフォルト必須説明
timeinteger—はいUTC の Unix 秒
open、high、low、closenumber—はいOHLC 価格
volumenumber ≥ 0必須はい呼び出し元が選択したアクティビティまたは出来高の系列です。Wickworks は、ベンダー固有の出来高の種類を解釈しません。

indicators の各エントリーに指定する値:

  • true — 出力キーで指定された指標を、デフォルトのパラメーターで実行します。
  • { ...params } — パラメーターオブジェクトです。type がない場合は出力キーが使用されます。カスタム出力名で既知の指標を実行するには、"type" を指定します。
レスポンス
{
  "symbol": "EURUSD",
  "timeframe": "H1",
  "candles": 500,

  "rsi": [null, null, 71.4],
  "rsi21": [null, null, 64.2],
  "stochFast": { "k": [78.4], "d": [72.1] },
  "macd": { "macd": [0.00124], "signal": [0.00098], "hist": [0.00026] },
  "orderBlocks": [
    {
      "type": "bullish",
      "top": 1.0892,
      "bottom": 1.0871,
      "candleIdx": 312,
      "time": 1700123400,
      "distancePct": 0.082
    }
  ],
  "fvg": [
    {
      "type": "bearish",
      "top": 1.0945,
      "bottom": 1.0938,
      "candleIdx": 401,
      "time": 1700152800,
      "distancePct": 0.063
    }
  ],
  "bosChoch": [
    {
      "event": "BOS",
      "direction": "bullish",
      "level": 1.0918,
      "time": 1700125200
    }
  ]
}
フィールド型説明
symbolstringリクエストフィールドの値をそのまま返します
timeframestringリクエストフィールドの値をそのまま返します
candlesinteger ≥ 0処理したバーの数
(任意)さまざまindicators の各出力キーに対応するエントリーです。値の形式は、要求された指標の戻り値です。

要求したキーのみが返されます。加えて、symbol、timeframe、candles が返されます。Series 出力のウォームアップ位置は NaN ではなく、null になります。

エラー
ステータス理由
400空のbars、空のindicators、不明なインジケーターのtype、不正なインジケーター仕様、またはリクエストした1つ以上のインジケーターに対してバーが不足している場合(構造化された本文 — 下記を参照)
413len(bars) > MAX_BARS
422バーのペイロードがPydanticのスキーマ検証に失敗した場合(必須フィールドの欠落、型の不一致など)
500内部計算エラー(通常は発生しません — リクエスト本文を添えてissueを作成してください)

送信したバー数より多くのバーを必要とするインジケーターをリクエストした場合(例:バーが100本でsmaのlength=200を指定)、リクエストは事前に拒否されます — 全要素がnullの系列が黙って返されることはありません。レスポンスには、必要なバー数に達していないすべてのインジケーターがまとめて一覧表示されるため、1回のリクエストでまとめて修正できます:

{
  "detail": {
    "error": "insufficient_bars",
    "message": "insufficient bars: have 30, but: slowSma (type=sma) needs 200, longRsi (type=rsi) needs 51",
    "available": 30,
    "deficits": [
      {
        "outputKey": "slowSma",
        "type": "sma",
        "required": 200,
        "available": 30
      },
      { "outputKey": "longRsi", "type": "rsi", "required": 51, "available": 30 }
    ]
  }
}

インジケーターごとの要件は、全体共通の下限ではなく、パラメーター(length、slow、signalなど)から算出されます。SMCを利用する出力(orderBlocks、fvgs、bosChoch、サマリーなど)は、分析パイプラインが意味のある履歴データを前提とするため、MIN_BARS(デフォルトは50)の下限を共有します。

MCP

POST /で実行できることはすべて、Model Context Protocolでも利用できます — wickworksは同じプロセス内で、/mcpにストリーミング可能なHTTP MCPサーバーをマウントするため、エージェントはRESTクライアントを使わずにJSON-RPC経由で操作できます。ステートレス(stateless_http=True — initializeハンドシェイクはなく、SSEではなくJSONレスポンスを返します)で、ツールはRESTのエンドポイントと1対1で対応します:

ツール引数対応するエンドポイント
health—GET /health
list_indicators—登録済みのインジケータータイプ(computeが受け付けるキー)
metadata—GET /metadata
computebars、indicators、timeframe?、symbol?POST /(同じ形式のレスポンス)
# Native remote MCP (Claude Code, Cursor, … — no bridge needed)
claude mcp add --transport http wickworks http://localhost:8000/mcp

# Raw JSON-RPC — stateless, call tools/call directly
curl -s http://localhost:8000/mcp/ \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"compute","arguments":{
         "bars":[/* ...OHLC... */],"indicators":{"rsi":true}}}}'

MCPトランスポートのDNSリバインディングに対するHostチェックは無効化されているため、どのホスト名やリバースプロキシの背後でもエンドポイントを使用できます — アクセス制御はアプリではなく、プロキシ側で設定してください。ローカルのstdioサーバーにしか対応していないMCPクライアント向けには、@psyb0t/wickworks OpenClawプラグインが、/mcp/へのシンプルなstdio↔HTTPブリッジとして機能します。

エージェント連携

スキルは、.agents/skills/を読み込むあらゆるエージェント(peenなど)で動作し、以下のクライアントにもネイティブにインストールできます。

Claude Code
claude plugin marketplace add psyb0t/agents
claude plugin install wickworks@psyb0t

Claude CodeではwickworksのURLを入力します。また、wickworksの前段にあるリバースプロキシで認証が必要な場合は、ベアラートークンも入力します — トークンはOSのキーチェーンに保存されます。

Codex
codex plugin marketplace add psyb0t/agents
codex plugin add wickworks@psyb0t

マーケットプレイスからインストールすると、スキルは$wickworks:wickworksとして呼び出されます。.agents/skills/を含むリポジトリでは、Codexがスキルを自動的に認識するため、インストールは不要です — この場合は$wickworksとして呼び出されます。

OpenClaw

このスキルはリリースのたびにClawHubに公開されます:

openclaw skills install @psyb0t/wickworks

ローカルstdioに対応するMCPクライアント向けには、@psyb0t/wickworksプラグインがwickworksの/mcpエンドポイントへのブリッジとして機能します:

openclaw plugins install clawhub:@psyb0t/wickworks

続いて、WICKWORKS_URLを設定してください(wickworksの前段にあるリバースプロキシでトークンが必要な場合は、WICKWORKS_TOKENも設定してください)。

設定

すべて環境変数で設定できます。適切なデフォルト値が設定されているため、初回実行時に調整する必要はありません。

変数デフォルト説明
LOG_LEVELINFOPython 標準のログレベルです。
MAX_BARS5000この数を超えるバーを含むリクエストは拒否されます(HTTP 413)。
MIN_BARS50SMC を利用する出力(orderBlocks、fvgs、サマリーなど)の基本的な下限であり、インジケーター別の要件テーブルに明示されていないインジケーターのフォールバック要件です。系列インジケーター(sma、rsi、macdなど)は、パラメーターから独自の最小値を算出します。
WORKERS2uvicorn のワーカー数です。

アーキテクチャ

┌─────────────┐    ┌──────────────────────┐    ┌─────────────────┐
│  Your app   │───▶│  POST /              │───▶│  primitives     │
│  (any lang) │    │  bars in, JSON out   │    │  (camelCase)    │
└─────────────┘    └──────────────────────┘    └─────────────────┘
                              │
                              ▼
                   ┌──────────────────────┐
                   │  pandas_ta + SMC     │
                   │  swing structure     │
                   │  S/R · summaries     │
                   └──────────────────────┘

ステートレスです。データベースもキューも外部呼び出しもありません。バーを入力すると、JSON を出力します。レプリカを追加することで、水平スケーリングできます。2 つのレプリカに同じ入力を与えると、毎回、同じバーから同じバイト列が生成されます。テストスイートでこれを固定しています。

開発

make help          # list all targets
make run           # production-style uvicorn in the dev container
make test          # full suite (unit + docker integration)
make test-unit     # in-process only — fast feedback loop
make test-docker   # docker-in-docker integration tests
make lint          # flake8 + mypy
make format        # isort + black
make check         # lint + tests
パッケージ管理 — サプライチェーン対策

Wickworks は uv の exclude-newer を使用し、固定日以降に公開されたパッケージバージョンを拒否します。この日付は、パッケージを変更する Make ターゲットによって自動的に今日の日付に更新されます。そのため、検出期間中の新たに公開された悪意のあるリリースを誤って取り込むことはありません。

make pkg-add PKG=foo==1.2.3   # bump exclude-newer, then uv add
make pkg-remove PKG=foo       # bump exclude-newer, then uv remove
make pkg-update PKG=foo       # bump exclude-newer, then uv lock --upgrade-package
make pkg-lock                 # refresh the lock using the current exclude-newer cutoff
make pkg-upgrade              # bump exclude-newer + lock --upgrade everything

何をしているのか理解していない限り、[tool.uv].exclude-newer を手動で編集しないでください。変更時に日付を更新する仕組みこそが、要点です。

オプションの ta エクストラ

pandas-ta と smartmoneyconcepts は、互換性のない推移的依存関係を固定します。Dockerfile では、依存関係の解決を行わずにこれらをインストールします。意図的に [project.dependencies] から除外されています。

テストの方針

テストスイートが証拠です。カテゴリは3つあります。

  1. クローズドフォームの数式差分 — 標準的な各インジケーター(RSI、MACD、ATR、Bollinger、Stochastic、Aroon、CCI、Williams %R、ROC、MOM、OBV、Donchian、VWMA、EMA、SMA、MACD…)について、テストスイートは数式をプレーンな numpy/pandas で一から実装し、実際の EURUSD H1 データを使って最終バーの値を wickworks の出力と比較します。許容誤差:rtol=1e-5。pandas_ta や配線にずれが生じた場合、コンテナをリリースする前に差分で検出できます。
  2. smc_fast のパリティ — wickworks には smartmoneyconcepts を numba で高速化した移植版が含まれています。8つのパリティテストにより、同じ入力に対して高速パスが上流ライブラリとバイト単位で同一の結果を生成することを確認します。
  3. パイプラインの契約テスト — 決定性(同じバー → 同じバイト列)、追記安定性(新しいバーが届いても因果的インジケーターの過去の値が変化しないこと)、ウォームアップ領域の None の数、インジケーターの分離(2つ同時に要求した結果 == 個別に要求した結果)、HTTP エラーパス、出来高フィールドの契約。

高速なテストループを実行するには make test-unit を実行してください。現在、370件のテストがあります。7件の Docker-in-Docker 統合テストを含む全377件のテストスイートを実行するには make test を実行してください。

ライセンス

WTFPL — LICENSE を参照してください。好きなようにしてください。

コメント

MCP は初めてですか?

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

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