mcpField
P
primary

primary

github.com/gauss314その他252220 回インストール19 週間前に更新
リポジトリ

primary について

Primary Trading Platform を通じてアルゼンチンの Matba ROFEX 先物・オプション市場に接続する取引 API です。先物、オプション、株式、債券、CEDEARs の市場データ、注文、口座リスク情報を扱う連携機能の開発者向けです。

主な機能

  1. 01市場セグメントと銘柄詳細の一覧
  2. 02リアルタイムスナップショットと過去約定の取得
  3. 03注文の送信、変更、取消、照会
  4. 04WebSocket による注文レポート受信
  5. 05口座ポジションとリスクレポートへのアクセス

活用シーン

  1. 01Matba ROFEX の市場データ連携の構築
  2. 02先物またはオプション注文の発注と追跡
  3. 03口座ポジションと証拠金情報の監視

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gauss314/skills --skill primary

インストール後、Claude Code で/primaryを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
REFERENCE.md
scripts/
check_account.py
check_positions.py
instruments.py
market_data.py
place_order.py
websocket_md.py
websocket_orders.py
websocket_send_order.py

詳細

Primary — Matba ROFEX 取引 API

Primary Trading Platform(PTP)を通じて、アルゼンチン先物・オプション市場(Matba ROFEX)で取引するための API です。先物(ドル、大豆、小麦、トウモロコシ、指数)、先物オプション、株式、債券、CEDEAR に対応しています。

Base URL: https://api.remarkets.primary.com.ar

ドキュメント: github.com/matbarofex — オープンソースのサンプルを含む公式リポジトリです。


認証

認証情報の取得
環境URL説明
REMARKET(デモ)remarkets.primary.venturesペーパートレード用の無料アカウントを作成します
LIVE(本番環境)[email protected] に問い合わせるMPI チームにアクセスを申請します

REMARKET アカウントを作成すると、次の情報を取得できます。

  • ユーザー名:登録したユーザー名
  • パスワード:設定したパスワード
  • アカウント:アカウント番号(通常はユーザー名の末尾の数字に REM を付けたものです)
トークンの取得
import requests

r = requests.post("https://api.remarkets.primary.com.ar/auth/getToken",
    headers={"X-Username": tu_usuario, "X-Password": tu_password})

token = r.headers["X-Auth-Token"]

以降、すべてのリクエストでトークンを X-Auth-Token ヘッダーとして送信します。

⚠️ 認証情報をハードコードしないでください。環境変数または CLI パラメーターを使用してください。

import os
TOKEN = os.getenv("PRIMARY_TOKEN")  # Opcional: cachear token
USER = os.getenv("PRIMARY_USER")
PASS = os.getenv("PRIMARY_PASSWORD")
ACCOUNT = os.getenv("PRIMARY_ACCOUNT")  # Ej: 12345 o REM12345
トークンの更新

401 が返された場合、トークンの有効期限が切れています。/auth/getToken に新しい POST を送信して更新してください。


セグメント

市場はセグメント(取引市場)で構成されています。各銘柄は 1 つのセグメントに属します。

セグメント説明
DDF金融デリバティブ(ドル先物、指数)
DDA農産物デリバティブ(大豆、小麦、トウモロコシ)
DUAL両方の部門に上場している銘柄
MERVMatba ROFEX 外部の市場(BYMA)
MAE電子取引市場
TESTテスト環境
U-DDF、U-DDA、U-DUAL、U-FIN、U-COMM、U-STOCKユーザーのサブセグメント
TIVA、AVSその他のセグメント
セグメントの一覧表示
GET https://api.remarkets.primary.com.ar/rest/segment/all
r = requests.get("https://api.remarkets.primary.com.ar/rest/segment/all",
    headers={"X-Auth-Token": token})
print(r.json()["segments"])

レスポンス:

{"status":"OK","segments":[
  {"marketSegmentId":"DDF","marketId":"ROFX"},
  {"marketSegmentId":"DDA","marketId":"ROFX"},
  ...
]}

銘柄(Securities)

銘柄はシンボルと marketId で識別されます。例:

シンボル説明CFI コード
DLR/JUN262026 年 6 月限ドル先物FXXXSX
SOJ.ROS/MAY262026 年 5 月限ロサリオ大豆先物FXXXSX
DLR/JUN26 1460 Cドル先物のコールオプションOCAFXS
DLR/JUN26 1420 Pドル先物のプットオプションOPAFXS
GGALGrupo Galicia 株式ESXXXX
すべての銘柄
GET https://api.remarkets.primary.com.ar/rest/instruments/all
詳細情報付きの銘柄
GET https://api.remarkets.primary.com.ar/rest/instruments/details

次の情報を返します:symbol、segment、lowLimitPrice、highLimitPrice、minPriceIncrement、minTradeVol、maxTradeVol、tickSize、contractMultiplier、roundLot、maturityDate、currency、orderTypes、timesInForce、cficode。

銘柄の詳細
GET https://api.remarkets.primary.com.ar/rest/instruments/detail?symbol=DLR/JUN26&marketId=ROFX
CFI コード別
GET https://api.remarkets.primary.com.ar/rest/instruments/byCFICode?CFICode=FXXXSX
CFI コード種類
FXXXSX先物
FXXXXX先物(汎用)
OCAFXS先物のコールオプション
OPAFXS先物のプットオプション
OCEFXS先物のヨーロピアン・コールオプション
OPEFXS先物のヨーロピアン・プットオプション
ESXXXX株式
DBXXXX債券
EMXXXXCEDEAR
OCASPS株式のコールオプション
OPASPS株式のプットオプション
DBXXFR交渉可能債券
セグメント別
GET https://api.remarkets.primary.com.ar/rest/instruments/bySegment?MarketSegmentID=DDF&MarketID=ROFX

マーケットデータ

リアルタイム(REST スナップショット)
GET https://api.remarkets.primary.com.ar/rest/marketdata/get
    ?marketId=ROFX
    &symbol=DLR/JUN26
    &entries=BI,OF,LA,OP,CL,SE,OI
    &depth=3
エントリー意味
BIBids(板の買い注文)
OFOffers(板の売り注文)
LALast(直近約定価格)
OPOpening Price(始値)
CLClosing Price(前取引日の終値)
SESettlement Price(清算価格、先物のみ)
HIHigh Price(取引日の最高値)
LOLow Price(取引日の最安値)
TVTrade Volume(約定枚数)
OIOpen Interest(建玉、先物のみ)
IVIndex Value(指数のみ)
EVEffective Volume(BYMA のみ)
NVNominal Volume(BYMA のみ)
ACPAuction Price(当日の終値)
r = requests.get("https://api.remarkets.primary.com.ar/rest/marketdata/get",
    headers={"X-Auth-Token": token},
    params={"marketId": "ROFX", "symbol": "DLR/JUN26",
            "entries": "BI,OF,LA,OP,CL,SE,OI", "depth": 3})
data = r.json()["marketData"]
print(f"Bid: {data['BI']}  |  Offer: {data['OF']}")
print(f"Last: {data['LA']}  |  Settle: {data['SE']}")
履歴(約定)
GET https://api.remarkets.primary.com.ar/rest/data/getTrades
    ?marketId=ROFX
    &symbol=DLR/JUN26
    &dateFrom=2026-06-01
    &dateTo=2026-06-08

パラメーター:marketId、symbol、date(単一の日付)、dateFrom/dateTo(期間)、external(外部市場の場合)、environment(REMARKETS)。

r = requests.get("https://api.remarkets.primary.com.ar/rest/data/getTrades",
    headers={"X-Auth-Token": token},
    params={"marketId": "ROFX", "symbol": "DLR/JUN26",
            "date": "2026-06-05"})
trades = r.json()["trades"]
for t in trades[:3]:
    print(f"{t['datetime']}  {t['price']}  {t['size']}")

注文

注文タイプ
タイプ説明
LIMIT指値注文
MARKET成行注文
STOP_LIMIT指値注文として有効になるストップ注文
MARKET_TO_LIMIT指値注文に変換される成行注文

注:STOP_LIMIT と MARKET_TO_LIMIT は、すべての銘柄で利用できるわけではありません。銘柄の詳細で orderTypes を確認してください。

執行条件(TIF)
TIF説明
DAY当日のみ有効です。取引終了時に失効します
IOC即時約定またはキャンセル
FOK全量約定またはキャンセル
GTD指定日まで有効(expireDate が必要です)
注文の送信(REST)
GET https://api.remarkets.primary.com.ar/rest/order/newSingleOrder
    ?marketId=ROFX
    &symbol=DLR/JUN26
    &side=BUY
    &orderQty=10
    &ordType=LIMIT
    &price=1450.0
    &timeInForce=DAY
    &account=TU_CUENTA
    &cancelPrevious=False
    &iceberg=False

パラメーター:

パラメーター型必須説明
marketIdString✅ROFX
symbolString✅銘柄のシンボル
sideString✅BUY または SELL
orderQtyInteger✅契約数
ordTypeString✅LIMIT または MARKET
priceFloat条件付きLIMIT の場合に必須
timeInForceStringいいえDAY(デフォルト)、IOC、FOK、GTD
accountInteger/String✅口座番号
cancelPreviousBooleanいいえ同一契約・同一売買方向の以前の注文をキャンセルします
icebergBooleanいいえIceberg 注文(デフォルト:false)
displayQtyInteger条件付き表示する数量(Iceberg 注文の場合)
expireDateDate条件付きGTD の場合に必須(形式:YYYYMMDD)

応答:

{"status":"OK","order":{"clientId":"21581341758","proprietary":"PBCP"}}

clientId は、注文の照会やキャンセルに使用する clOrdId(Client Order ID)です。

注文の送信(WebSocket)
{"type":"no","product":{"marketId":"ROFX","symbol":"DLR/JUN26"},
 "price":185,"quantity":23,"side":"BUY","account":"20","iceberg":false}

WebSocket 経由で注文を識別するには、wsClOrdId を含めます:

{"type":"no","product":{"marketId":"ROFX","symbol":"DLR/JUN26"},
 "price":185,"quantity":23,"side":"BUY","account":"20",
 "iceberg":false,"wsClOrdId":"mioid-unico-123"}

WebSocket 応答(Execution Report):

{"type":"or","orderReport":{"orderId":"1128056","clOrdId":"user14545...",
 "status":"PENDING_NEW","text":"Enviada","wsClOrdId":"mioid-unico-123"}}

重要: wsClOrdId は最初の Execution Report にのみ表示されます。それ以降の追跡には、返された clOrdId を使用してください。

注文の変更
GET https://api.remarkets.primary.com.ar/rest/order/replaceById
    ?clOrdId=user144733478280357
    &proprietary=api
    &price=17
    &orderQty=10
注文のキャンセル
GET https://api.remarkets.primary.com.ar/rest/order/cancelById
    ?clOrdId=ajduj3l13ieci2jr4ck
    &proprietary=PBCP
WebSocket によるキャンセル
{"type":"co","clientId":"user114121092035207","proprietary":"PBCP"}
注文ステータスの照会(REST)
エンドポイント説明
GET /rest/order/id?clOrdId=...&proprietary=apiリクエストの最新ステータス
GET /rest/order/allById?clOrdId=...&proprietary=apiリクエストのすべてのステータス
GET /rest/order/byOrderId?orderId=...Order ID によるステータス
GET /rest/order/actives?accountId=10有効な注文(NEW または PARTIALLY_FILLED)
GET /rest/order/filleds?accountId=10全量または一部約定した注文
GET /rest/order/all?accountId=10口座のすべてのステータス
GET /rest/order/byExecId?execId=T1234567Execution ID によるステータス
Execution Reports(WebSocket)

口座を購読します:

{"type":"os","account":{"id":"40"}}

複数の口座:

{"type":"os","accounts":[{"id":"40"},{"id":"4000"}]}

すべての口座:

{"type":"os"}

有効な注文のみ:

{"type":"os","snapshotOnlyActive":true}

Risk API

Risk API はトークンではなく、同じユーザー名/パスワードを使った HTTP Basic Auth を使用します。X-Auth-Token に加えて、Authorization: Basic <base64> ヘッダーが必要です。

import base64
auth = base64.b64encode(f"{user}:{password}".encode()).decode()
headers = {"X-Auth-Token": token, "Authorization": f"Basic {auth}"}
口座のポジション
GET https://api.remarkets.primary.com.ar/rest/risk/position/getPositions/{accountName}
r = requests.get(f"https://api.remarkets.primary.com.ar/rest/risk/position/getPositions/TU_CUENTA",
    headers=headers)
positions = r.json()["positions"]
for p in positions:
    print(f"{p['symbol']}  Buy:{p['buySize']}  Sell:{p['sellSize']}  Diff:{p['totalDiff']}")
詳細ポジション
GET https://api.remarkets.primary.com.ar/rest/risk/detailedPosition/{accountName}

銘柄ごとの内訳を返します。項目は contractType、marketPrice、currency、exchangeRate、contractMultiplier、buyCurrentSize、sellCurrentSize、detailedDailyDiff です。

口座レポート
GET https://api.remarkets.primary.com.ar/rest/risk/accountReport/{accountName}
import base64
auth = base64.b64encode(f"{user}:{password}".encode()).decode()
headers = {"X-Auth-Token": token, "Authorization": f"Basic {auth}"}
r = requests.get(f"https://api.remarkets.primary.com.ar/rest/risk/accountReport/TU_CUENTA",
    headers=headers)
data = r.json()["accountData"]
print(f"Colateral: {data['collateral']}")
print(f"Margen: {data['margin']}")
print(f"Disponible: {data['availableToCollateral']}")
# Saldos por moneda
for moneda, saldo in data['detailedAccountReports']['0']['currencyBalance']['detailedCurrencyBalance'].items():
    print(f"  {moneda}: consumido={saldo['consumed']}  disponible={saldo['available']}")

WebSocket

URL: wss://api.remarkets.primary.com.ar/

WebSocket API は非同期メッセージを受信します。接続時にトークンを ヘッダー として送信します。

import websocket

ws = websocket.WebSocketApp(
    "wss://api.remarkets.primary.com.ar/",
    header=[f"X-Auth-Token: {token}"],
    on_open=on_open,
    on_message=on_message,
    ...
)
ws.run_forever()

メッセージの形式は次のとおりです。

type意味
no新規注文(注文を送信)
co注文取消(注文を取り消し)
or注文レポート(受信した執行レポート)
os注文サブスクリプション(レポートを購読)
smdマーケットデータを購読
Mdマーケットデータ(受信)
WebSocket によるマーケットデータ
{"type":"smd","level":1,"entries":["OF","BI","LA"],
 "products":[{"symbol":"DLR/JUN26","marketId":"ROFX"}],"depth":2}

応答:

{"type":"Md","instrumentId":{"marketId":"ROFX","symbol":"DLR/JUN26"},
 "marketData":{"OF":[{"price":189,"size":21},{"price":188,"size":13}]}}

注文の状態

状態意味
PENDING_NEW市場に送信済みで、まだ処理されていません
NEW承認済みで、板で有効です
PARTIALLY_FILLED一部約定しています
FILLED全数量が約定しています
CANCELLED取り消されました
REJECTED拒否されました(理由は text を確認してください)
PENDING_CANCEL取消処理中です
PENDING_REPLACE置換処理中です
REPLACED置換されました
PENDING_APPROVAL承認待ちです

よくあるエラー

エラー原因解決方法
401 Unauthorizedトークンが無効または期限切れです/auth/getToken で更新します
"No tiene acceso a la cuenta"Account ID が正しくありませんaccountId を確認します
"Product doesn't exist"Symbol が正しくありませんinstruments/all でシンボルを確認します
"Access Denied"エンドポイントを利用する権限がありませんセグメント/メソッドを確認します
"Ruta invalida"エンドポイントが存在しませんURL を確認します
Bid/Offer が空市場が閉まっているか、流動性がありません取引時間中に確認します

サンプルスクリプト

./scripts/ を参照してください。

# Autenticación y token (opcional, los scripts hacen login automático)
export PRIMARY_USER="tu_usuario"
export PRIMARY_PASSWORD="tu_password"
export PRIMARY_ACCOUNT="TU_CUENTA"

# Listar segmentos e instrumentos
python scripts/instruments.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD

# Market data de un futuro
python scripts/market_data.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD \
    --symbol DLR/JUN26 --entries BI,OF,LA

# Ver reporte de cuenta
python scripts/check_account.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD \
    --account TU_CUENTA

# Ver posiciones
python scripts/check_positions.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD \
    --account TU_CUENTA

# Enviar orden (¡cuidado! orden real en live)
python scripts/place_order.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD \
    --symbol DLR/JUN26 --side BUY --qty 1 --type LIMIT --price 1450 --account TU_CUENTA

# WebSocket: Market Data en tiempo real
python scripts/websocket_md.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD \
    --symbols DLR/JUN26 --entries BI,OF,LA --depth 3

# WebSocket: Execution Reports
python scripts/websocket_orders.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD \
    --account TU_CUENTA

# WebSocket: Enviar orden (requiere suscripción a execution reports aparte)
python scripts/websocket_send_order.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD \
    --symbol DLR/JUN26 --side BUY --qty 1 --type LIMIT --price 1450 --account TU_CUENTA

# WebSocket: Cancelar orden
python scripts/websocket_send_order.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD \
    --cancel --clordid user12345... --proprietary PBCP

フィールド用語集

フィールド説明
clOrdIdClient Order ID — 市場へのリクエスト ID
orderIdOrder ID — 市場での注文 ID
execIdExecution ID — 個別の約定 ID
proprietary注文を送信した FIX ユーザー(PBCP または ISV_PBCP)
wsClOrdIdWebSocket で送信された注文 ID(1 回目のレポートのみ)
avgPx約定平均価格
cumQty累計約定数量
leavesQty残数量
lastPx最終約定価格
lastQty最終約定数量
transactTime取引日時
tickSize数量の最小刻み
minPriceIncrement価格の最小刻み(ティック価格)
contractMultiplier契約乗数
maturityDate満期日
priceConvertionFactor単価換算係数
lowLimitPrice価格の下限
highLimitPrice価格の上限

コメント