npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@luxfi/trading

v1.2.1

Published

High-frequency trading SDK with unified liquidity aggregation

Readme

@luxfi/trading - TypeScript SDK

High-frequency trading SDK with unified liquidity aggregation for TypeScript/Node.js.

Features

  • Unified API: Same interface for native LX DEX, CCXT exchanges, and Hummingbot Gateway
  • Smart Order Routing: Automatic best-price execution across venues
  • Aggregated Orderbook: Combined liquidity view from all venues
  • AMM Support: Swap, add/remove liquidity, LP position tracking
  • Execution Algos: TWAP, VWAP, Iceberg, Sniper, POV, DCA
  • Risk Management: Position limits, daily loss limits, kill switch
  • Financial Math: Black-Scholes, Greeks, VaR/CVaR, AMM pricing

Installation

npm install @luxfi/trading

Quick Start

import Decimal from 'decimal.js';
import { Client, Config, NativeVenueConfig, CcxtConfig } from '@luxfi/trading';

async function main() {
  // Build config programmatically
  const config = new Config()
    .withNative('lx_dex', NativeVenueConfig.lxDex('https://api.dex.lux.network'))
    .withCcxt('binance', CcxtConfig.create('binance').withCredentials('key', 'secret'))
    .withSmartRouting(true);

  // Create client and connect
  const client = new Client(config);
  await client.connect();

  // Get aggregated orderbook
  const book = await client.aggregatedOrderbook('BTC-USDC');
  console.log(`Best bid: ${book.bestBid()?.price}`);
  console.log(`Best ask: ${book.bestAsk()?.price}`);

  // Smart order routing - best price across all venues
  const order = await client.buy('BTC-USDC', '0.1');
  console.log(`Filled on ${order.venue} at ${order.averagePrice}`);

  // Or target specific venue
  const order2 = await client.buy('BTC-USDC', '0.1', 'binance');

  // AMM swap
  const trade = await client.swap('LUX', 'USDC', '100', true, 0.01, 'lx_amm');

  await client.disconnect();
}

main();

Configuration

Programmatic

import { Config, NativeVenueConfig, CcxtConfig, HummingbotConfig } from '@luxfi/trading';
import Decimal from 'decimal.js';

const config = new Config()
  // Native LX DEX
  .withNative(
    'lx_dex',
    NativeVenueConfig.lxDex('https://api.dex.lux.network')
      .withCredentials('api-key', 'api-secret')
  )
  // Native LX AMM
  .withNative(
    'lx_amm',
    NativeVenueConfig.lxAmm('https://api.dex.lux.network')
  )
  // CCXT exchange
  .withCcxt(
    'binance',
    CcxtConfig.create('binance')
      .withCredentials('key', 'secret')
  )
  // Hummingbot Gateway
  .withHummingbot(
    'gateway',
    HummingbotConfig.create('lxdex')
      .withWallet('0x...')
      .withEndpoint('localhost', 15888)
  )
  // Settings
  .withSmartRouting(true)
  .withVenuePriority(['lx_dex', 'binance'])
  .withRisk({
    enabled: true,
    maxPositionSize: new Decimal(1000),
    maxDailyLoss: new Decimal(5000),
    maxOpenOrders: 100,
    killSwitchEnabled: true,
    positionLimits: new Map([['BTC', new Decimal(10)]]),
  });

From Object

import { Config, type ConfigData } from '@luxfi/trading';

const data: ConfigData = {
  general: {
    log_level: 'info',
    smart_routing: true,
    venue_priority: ['lx_dex', 'binance'],
  },
  risk: {
    enabled: true,
    max_position_size: 1000,
    max_daily_loss: 5000,
  },
  native: {
    lx_dex: {
      venue_type: 'dex',
      api_url: 'https://api.dex.lux.network',
      api_key: 'your-api-key',
      api_secret: 'your-api-secret',
    },
    lx_amm: {
      venue_type: 'amm',
      api_url: 'https://api.dex.lux.network',
    },
  },
  ccxt: {
    binance: {
      exchange_id: 'binance',
      api_key: 'your-key',
      api_secret: 'your-secret',
    },
  },
};

const config = Config.fromObject(data);

Financial Mathematics

import {
  blackScholes,
  impliedVolatility,
  greeks,
  constantProductPrice,
  volatility,
  sharpeRatio,
  valueAtRisk,
  conditionalVaR,
} from '@luxfi/trading';

// Options pricing
const callPrice = blackScholes(100, 100, 1, 0.05, 0.2, 'call');
const iv = impliedVolatility(10.45, 100, 100, 1, 0.05, 'call');
const g = greeks(100, 100, 1, 0.05, 0.2, 'call');
console.log(`Delta: ${g.delta.toFixed(4)}, Gamma: ${g.gamma.toFixed(6)}`);

// AMM pricing
const result = constantProductPrice(1000000, 1000000, 1000, 0.003);
console.log(`Output: ${result.outputAmount.toFixed(4)}`);

// Risk metrics
const returns = [0.01, -0.02, 0.03, -0.01, 0.02, 0.015, -0.005, 0.008, -0.012, 0.025];
console.log(`Volatility: ${(volatility(returns) * 100).toFixed(2)}%`);
console.log(`Sharpe: ${sharpeRatio(returns).toFixed(2)}`);
console.log(`VaR 95%: ${(valueAtRisk(returns, 0.95) * 100).toFixed(2)}%`);
console.log(`CVaR 95%: ${(conditionalVaR(returns, 0.95) * 100).toFixed(2)}%`);

Execution Algorithms

import Decimal from 'decimal.js';
import { Client, Config, TwapExecutor, VwapExecutor, IcebergExecutor, Side } from '@luxfi/trading';

const client = new Client(config);
await client.connect();

// TWAP - spread order over time
const twap = new TwapExecutor(
  client,
  'BTC-USDC',
  Side.BUY,
  new Decimal(10),
  3600,  // 1 hour
  12,    // 12 slices
);
const twapOrders = await twap.execute();

// VWAP - track market volume
const vwap = new VwapExecutor(
  client,
  'BTC-USDC',
  Side.BUY,
  new Decimal(10),
  new Decimal(0.1),  // 10% participation
  3600,
);
const vwapOrders = await vwap.execute();

// Iceberg - hide large order
const iceberg = new IcebergExecutor(
  client,
  'BTC-USDC',
  Side.BUY,
  new Decimal(100),
  new Decimal(5),
  new Decimal(50000),
);
const icebergOrders = await iceberg.execute();

Risk Management

import Decimal from 'decimal.js';
import { RiskManager, RiskError, Side, createMarketOrder } from '@luxfi/trading';

const risk = new RiskManager({
  enabled: true,
  maxPositionSize: new Decimal(100),
  maxOrderSize: new Decimal(10),
  maxDailyLoss: new Decimal(1000),
  maxOpenOrders: 50,
  killSwitchEnabled: true,
  positionLimits: new Map([['BTC', new Decimal(5)]]),
});

// Validate before placing order
const request = createMarketOrder('BTC-USDC', Side.BUY, new Decimal(1));

try {
  risk.validateOrder(request);
} catch (e) {
  if (e instanceof RiskError) {
    console.log(`Order rejected: ${e.message}`);
  }
}

// Update after trade
risk.updatePosition('BTC', new Decimal(1), Side.BUY);
risk.updatePnl(new Decimal(-50)); // Loss

// Check status
console.log(`BTC position: ${risk.position('BTC')}`);
console.log(`Daily PnL: ${risk.getDailyPnl()}`);
console.log(`Kill switch active: ${risk.isKilled}`);

Supported Venues

Native

  • LX DEX (CLOB)
  • LX AMM

CCXT (100+ exchanges)

Hummingbot Gateway

  • Any Gateway-supported DEX

API Reference

Client

class Client {
  // Connection
  connect(): Promise<void>
  disconnect(): Promise<void>
  venue(name: string): VenueAdapter | undefined
  listVenues(): VenueInfo[]

  // Market Data
  orderbook(symbol: string, venue?: string): Promise<Orderbook>
  aggregatedOrderbook(symbol: string): Promise<AggregatedOrderbook>
  ticker(symbol: string, venue?: string): Promise<Ticker>
  tickers(symbol: string): Promise<Ticker[]>

  // Account
  balances(): Promise<AggregatedBalance[]>
  balance(asset: string, venue?: string): Promise<Balance>

  // Orders
  buy(symbol: string, quantity: Decimal | number | string, venue?: string): Promise<Order>
  sell(symbol: string, quantity: Decimal | number | string, venue?: string): Promise<Order>
  limitBuy(symbol: string, quantity, price, venue?: string): Promise<Order>
  limitSell(symbol: string, quantity, price, venue?: string): Promise<Order>
  placeOrder(request: OrderRequest): Promise<Order>
  cancelOrder(orderId: string, symbol: string, venue: string): Promise<Order>
  cancelAllOrders(symbol?: string, venue?: string): Promise<Order[]>
  openOrders(symbol?: string): Promise<Order[]>

  // AMM
  quote(baseToken, quoteToken, amount, isBuy, venue): Promise<SwapQuote>
  swap(baseToken, quoteToken, amount, isBuy, slippage, venue): Promise<Trade>
  poolInfo(baseToken, quoteToken, venue): Promise<PoolInfo>
  addLiquidity(baseToken, quoteToken, baseAmount, quoteAmount, slippage, venue): Promise<LiquidityResult>
  removeLiquidity(poolAddress, liquidityAmount, slippage, venue): Promise<LiquidityResult>
  lpPositions(venue: string): Promise<LpPosition[]>
}

Links