mcpField
K
kalshi-trading

kalshi-trading

github.com/newyorkcompute其他942 次安装14 周前更新
代码仓库

关于 kalshi-trading

kalshi-trading 是用于操作 Kalshi 预测市场的技能,涵盖市场查询、持仓管理和交易。它通过交易所 API 提供市场数据查询及认证后的订单操作。

主要功能

  1. 01搜索市场并查看详情
  2. 02查看订单簿与价格
  3. 03查询余额和持仓
  4. 04提交买入和卖出订单

适用场景

  1. 01研究开放的事件合约市场
  2. 02下单前检查市场流动性
  3. 03查看持仓与账户余额
  4. 04提交 Yes 或 No 交易

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/newyorkcompute/kalshi --skill kalshi-trading

安装后在 Claude Code 中输入/kalshi-trading确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

API_REFERENCE.md
AUTHENTICATION.md
scripts/
kalshi-client.ts

详细介绍

Kalshi 交易

在 Kalshi 交易,这是一个受 CFTC 监管的预测市场交易所。此技能可帮助你查询市场、分析概率、管理持仓并执行交易。

类型

interface Market {
  ticker: string;
  title: string;
  status: string;
  yes_bid?: number;
  yes_ask?: number;
  volume?: number;
  close_time?: string;
}

interface Orderbook {
  yes: [number, number][]; // [price_cents, quantity]
  no: [number, number][];
}

interface Balance {
  balance: number; // cents
  payout: number;  // pending settlement
}

interface Position {
  ticker: string;
  position: number; // positive = YES, negative = NO
  market_exposure: number;
}

interface Order {
  order_id: string;
  ticker: string;
  side: "yes" | "no";
  action: "buy" | "sell";
  count: number;
  status: string;
}

快速入门

import * as crypto from "crypto";

const API_BASE = "https://api.elections.kalshi.com/trade-api/v2";

// See AUTHENTICATION.md for full setup
function getAuthHeaders(
  apiKey: string,
  privateKeyPem: string,
  method: string,
  path: string
): Record<string, string> {
  const timestamp = Date.now().toString();
  const message = `${timestamp}${method}${path}`;

  const sign = crypto.createSign("RSA-SHA256");
  sign.update(message);
  const signature = sign.sign(privateKeyPem, "base64");

  return {
    "KALSHI-ACCESS-KEY": apiKey,
    "KALSHI-ACCESS-SIGNATURE": signature,
    "KALSHI-ACCESS-TIMESTAMP": timestamp,
    "Content-Type": "application/json",
  };
}

常见操作

搜索市场
async function searchMarkets(query: string, limit = 10): Promise<Market[]> {
  const url = new URL(`${API_BASE}/markets`);
  url.searchParams.set("status", "open");
  url.searchParams.set("limit", String(limit));

  const response = await fetch(url.toString());
  const data = await response.json();

  // Filter by query in title
  return data.markets.filter((m: Market) =>
    m.title.toLowerCase().includes(query.toLowerCase())
  );
}
获取市场详情
async function getMarket(ticker: string): Promise<Market> {
  const response = await fetch(`${API_BASE}/markets/${ticker}`);
  const data = await response.json();
  return data.market;
}
获取订单簿
async function getOrderbook(ticker: string): Promise<Orderbook> {
  const response = await fetch(`${API_BASE}/markets/${ticker}/orderbook`);
  const data = await response.json();
  return data.orderbook;
}
查询余额(需认证)
async function getBalance(
  apiKey: string,
  privateKeyPem: string
): Promise<Balance> {
  const path = "/portfolio/balance";
  const headers = getAuthHeaders(apiKey, privateKeyPem, "GET", path);

  const response = await fetch(`${API_BASE}${path}`, { headers });
  return response.json();
}
获取持仓(需认证)
async function getPositions(
  apiKey: string,
  privateKeyPem: string
): Promise<Position[]> {
  const path = "/portfolio/positions";
  const headers = getAuthHeaders(apiKey, privateKeyPem, "GET", path);

  const response = await fetch(`${API_BASE}${path}`, { headers });
  const data = await response.json();
  return data.market_positions;
}
下单(需认证)
async function placeOrder(
  apiKey: string,
  privateKeyPem: string,
  ticker: string,
  side: "yes" | "no",
  action: "buy" | "sell",
  count: number,
  price: number // In cents (1-99)
): Promise<Order> {
  const path = "/portfolio/orders";
  const headers = getAuthHeaders(apiKey, privateKeyPem, "POST", path);

  const body = {
    ticker,
    side,
    action,
    count,
    type: "limit",
    ...(side === "yes" ? { yes_price: price } : { no_price: price }),
  };

  const response = await fetch(`${API_BASE}${path}`, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
  });
  const data = await response.json();
  return data.order;
}

核心概念

  • 市场:包含 Yes/No 结果的事件合约(例如,“X 会在 Y 日期前发生吗?”)
  • 价格:以美分报价(1–99),代表概率百分比
  • 持仓:你持有的 Yes 或 No 合约
  • 结算:市场结算为 $1.00(Yes 获胜)或 $0.00(No 获胜)

其他资源

提示

  1. 从市场调研开始:使用 searchMarkets() 探索机会
  2. 检查流动性:下大额订单前查看订单簿深度
  3. 使用限价单:避免使用市价单,以控制成交价格
  4. 监控持仓:定期检查持仓和盈亏

评论

支持 Markdown