メインコンテンツへ移動
AIチュートリアル

TypeScriptでPolymarketコピー取引ボットを構築・設定する

Polymarket CodeX CopyTrading Botの設定方法、複数ウォレットのフォロー、固定額または割合ベースの取引額の選択、シミュレーション注文のテスト、ライブ実行の有効化、リスク制限の適用、安全なローカル状態管理について学びます。

TypeScriptでPolymarketコピー取引ボットを構築・設定する

Polymarket CodeX CopyTrading Botの機能

Polymarket CodeX CopyTrading Botは、1つ以上のフォロー対象ウォレットのアクティビティを監視し、対応するPolymarket注文を作成するTypeScriptアプリケーションです。公開Data APIを通じてウォレットのアクティビティを読み取り、@polymarket/clob-client-v2を使用して、Polymarketの中央指値注文帳でライブ取引を行います。

このボットは、固定の米ドル金額またはパーセンテージに基づくサイズ設定で、買い注文と売り注文をコピーできます。また、検出済み取引、生成された注文、約定済みまたはシミュレーション済みの注文、およびトークン保有量の概算をローカルに記録します。

リスク警告: これは取引ソフトウェアです。利益は保証されません。必ず最初にシミュレーションを実行し、すべての設定値を確認してください。ライブ実行を検討する前に、ごく少額で試してください。

主な機能

  • 複数のフォロー対象ウォレットを監視します。
  • 固定金額モードとパーセンテージベースのコピー​​モードに対応します。
  • npm run testによるシミュレーション実行を提供します。
  • npm startによるライブ市場取引を提供します。
  • ボットがローカルで追跡しているポジションを使用して、売りアクティビティを追跡できます。
  • 最小注文額、最大注文額、ポジション、および1日の想定元本の上限を適用します。
  • Fill-and-killおよびFill-or-killの注文動作に対応します。
  • フォロー対象取引の約定価格を基準に、任意で価格保護を適用できます。
  • 状態をローカルのJSONファイルに保存します。

要件

ボットを設定する前に、次のソフトウェアをインストールしてください。

  • Node.js 20.10以降。
  • npm。

プロジェクトのソースを取得し、そのディレクトリでターミナルを開いて、パッケージの依存関係をインストールします。

npm install

このボットは、注文の実行に非ベータ版の@polymarket/clob-client-v2パッケージを使用し、ウォレットアクティビティのポーリングには公開Polymarket Data APIを使用します。

ライブ取引の認証情報を設定する

プロジェクトの.envファイルを作成または編集します。CLOBホスト、PolygonチェーンID、署名タイプ、秘密鍵、入金ウォレットを追加してください。

POLYMARKET_CLOB_HOST=https://clob.polymarket.com
POLYMARKET_CHAIN_ID=137
POLYMARKET_SIGNATURE_TYPE=POLY_1271
POLYMARKET_PRIVATE_KEY=0x...
POLYMARKET_DEPOSIT_WALLET=0x...

実際の秘密鍵や認証情報ファイルをバージョン管理にコミットしないでください。秘密鍵とCLOB認証情報は機密情報として扱ってください。

正しい署名タイプを選択する

POLYMARKET_SIGNATURE_TYPEには次の値を指定できます。

  • EOA
  • POLY_PROXY
  • POLY_GNOSIS_SAFE
  • POLY_1271

プロジェクトのドキュメントによると、POLY_1271は通常、新しい入金ウォレットのユーザーに適しています。外部所有アカウントから直接取引する場合はEOAを選択してください。その場合、POLYMARKET_DEPOSIT_WALLETは省略できます。

既存のL2認証情報を使用する

ボットは起動時に認証情報を導出できます。この手順を避けるには、既存のL2認証情報を.envに指定します。

CLOB_API_KEY=...
CLOB_SECRET=...
CLOB_PASS_PHRASE=...

ライブ実行ではcreateAndPostMarketOrderを使用します。ライブ取引を開始する前に、取引ウォレットに資金があり、必要なPolymarketの承認が済んでいることを確認してください。ボットはウォレットを作成したり、トークン使用を自動承認したりしません。

コピーサイズを設定する

このアプリケーションは2つのコピーモードに対応しています。ボットに取らせたいエクスポージャーの金額に合ったモードを選択してください。

固定モード

固定モードでは、コピーする買いおよび売りアクティビティにあらかじめ定めた米ドル金額を割り当てます。

COPY_MODE=fixed
FIXED_BUY_AMOUNT_USD=5
FIXED_SELL_AMOUNT_USD=5

この例では、コピー対象となる買いと売りのサイズは、設定された5米ドルを使用して決まります。

パーセンテージモード

パーセンテージモードでは、フォロー対象ウォレットのアクティビティから注文サイズを計算します。

COPY_MODE=percentage
COPY_PERCENTAGE=0.10

買いの場合、ボットはフォロー対象取引の米ドル想定元本のうち、設定された割合をコピーします。売りの場合、フォロー対象ウォレットが売却したシェアのうち、設定された割合をコピーします。売り注文は、ボットのローカル状態で現在追跡されているポジションを上限とします。

たとえば、0.10は10パーセントを表します。ただし、実際の注文は設定されたリスク管理を通過する必要があります。

リスク管理を設定する

シミュレーション取引またはライブ取引を実行する前に、.envで注文とエクスポージャーの上限を定義します。

MIN_ORDER_USD=1
MAX_ORDER_USD=25
MAX_POSITION_USD_PER_TOKEN=100
DAILY_MAX_NOTIONAL_USD=250
ORDER_TYPE=FAK
PRICE_PROTECTION_BPS=0
  • MIN_ORDER_USDは、許可される注文金額の下限を設定します。
  • MAX_ORDER_USDは、個々の注文金額に上限を設定します。
  • MAX_POSITION_USD_PER_TOKENは、各トークンの概算エクスポージャーを制限します。
  • DAILY_MAX_NOTIONAL_USDは、1日の想定元本アクティビティ総額を制限します。
  • ORDER_TYPEは約定動作を制御します。
  • PRICE_PROTECTION_BPSは、フォロー対象の約定価格を基準に、任意で実行価格を制限します。

FAK注文とFOK注文を理解する

ORDER_TYPE=FAKの場合、注文は一部だけ約定することがあり、その後、未約定分はキャンセルされます。ORDER_TYPE=FOKの場合、注文全体が約定する必要があり、そうでなければ注文は失敗します。

一部約定を許容できる場合は、FAKが適している可能性があります。FOKはより厳格ですが、十分な流動性がない場合に注文が失敗する可能性が高くなります。

価格保護を適用する

PRICE_PROTECTION_BPS=0の場合、CLOBクライアントは市場で約定可能な最悪価格を推定します。ゼロ以外の値を設定すると、ボットは買いの場合はフォロー対象の約定価格より高く、売りの場合はそれより低い最悪価格の上限を計算します。

価格保護により許容される価格変動を制限できますが、この設定を有効にしても注文が約定することはREADMEで保証されていません。

まずシミュレーションを実行する

プロジェクトのテストコマンドから始めます。

npm run test

このモードでは、実際の市場注文ではなくシミュレーション注文が生成されます。ライブ取引をすぐに発注することなく、ウォレット監視、注文数量の動作、リスク制限、環境設定を検証するために使用してください。

テスト中は、次の点を確認してください。

  1. 意図したウォレットが監視されている。
  2. 買いイベントと売りイベントが正しく正規化されている。
  3. 選択したコピー モードが期待どおりの数量を生成している。
  4. 注文が最小数量、最大数量、ポジション、日次の各制限を遵守している。
  5. 売り数量がローカルで追跡されているポジションを超えていない。
  6. 状態が./data/state.jsonに記録されている。

ライブ取引を開始する

シミュレーション結果、ウォレットの資金、承認、認証情報、すべてのリスク設定を確認した後、次のコマンドでライブ実行を開始します。

npm start

このコマンドにより、実際の市場注文が有効になります。最初はごく小さな数量から始め、ターミナルの出力とPolymarketアカウントの両方を監視してください。シミュレーションの結果が、実際の約定、流動性、価格変動と完全に一致するとは限りません。

ローカル状態を理解する

ボットは次の場所にローカル状態を保存します。

./data/state.json

このファイルには、確認済みの取引、シミュレーションまたは実行済みの注文、概算ポジションが記録されます。これにより、以前に処理したアクティビティが新規として扱われるのを防ぎ、売り追随ロジックに利用可能なポジションのローカルな情報を提供します。

市場注文は部分約定になる可能性があるため、ポジションはあくまで概算です。そのため、ローカル状態が実際のアカウント保有状況と乖離する場合があります。

高度な運用上のヒント

ポジション照合を追加する

本番運用では、READMEは定期的な照合ジョブの追加を推奨しています。このジョブでは、POLYMARKET_DEPOSIT_WALLETのData APIにある/positionsエンドポイントを照会し、返されたポジションとローカル状態を比較します。

これは、部分約定、注文失敗、手動取引、再起動、またはボット外で行われたアクティビティの後に特に重要です。

状態ファイルを保護する

アップグレードや運用変更の前に、./data/state.jsonをバックアップしてください。ボットの実行中は編集しないでください。確認済みのアクティビティと概算ポジションが記録されているため、このファイルを削除または破損させると、重複検出や売り数量の計算に影響する可能性があります。

保守的な制限を使用する

まずはMAX_ORDER_USD、MAX_POSITION_USD_PER_TOKEN、DAILY_MAX_NOTIONAL_USDを低く設定してください。現実的な市場条件でボットを観察してから、必要に応じて引き上げます。リスク制限はエクスポージャーを抑えますが、約定、流動性、市場、ソフトウェアに関するリスクをなくすものではありません。

関連するソースファイルを確認する

リポジトリでは、設定、ポーリング、戦略、実行、状態管理の責務が分離されています。

  • src/config.tsは環境変数の解析と安全性チェックを処理します。
  • src/index.tsにはメインのポーリングループが含まれています。
  • src/polymarket/dataApi.tsは公開Data APIの読み取りを実行します。
  • src/watchers/walletWatcher.tsは複数のウォレットのアクティビティをポーリングします。
  • src/polymarket/tradeParser.tsはアクティビティイベントを正規化します。
  • src/strategy/copyStrategy.tsは固定数量方式と割合方式の数量計算を実装します。
  • src/strategy/riskManager.tsは注文、日次、ポジションの各制限を適用します。
  • src/polymarket/orderExecutor.tsはシミュレーション実行とライブ実行を処理します。
  • src/storage/stateStore.tsはローカルJSON状態を管理します。

ライブ運用前にこれらのファイルを確認すると、特にポーリング動作、安全性チェック、イベントの正規化、注文数量の計算を理解するうえで役立ちます。

まとめ

Polymarket CodeX CopyTrading Botは、複数のウォレットを監視し、固定数量または割合ベースの数量計算で対象となる買いと売りをコピーするTypeScriptワークフローを提供します。認証情報を慎重に設定し、保守的なリスク制限を適用し、npm run testで動作を検証してから、npm startによるライブ取引を利用する前にローカルポジションを照合してください。