agentsclimarketplace

Trading core

Skill marketcalls/openalgo-claude-plugin/plugins/openalgo-python/skills/trading-core

OpenAlgo Claude Code Plugin Marketplace - Algorithmic trading with 25+ Indian brokers

Install
npx -y skills add marketcalls/openalgo-claude-plugin --skill trading-core

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Core trading operations with OpenAlgo - place orders, smart orders, basket orders, split orders, and order management across 25+ Indian brokers

SKILL.md

8.0 KB, as published. Nobody here has run it

OpenAlgo Trading Core

Execute trading operations using OpenAlgo's unified Python SDK. Supports NSE, BSE, NFO, MCX, and currency derivatives with a single API across 25+ brokers.

Environment Setup

The OPENALGO_API_KEY must be set. Get your API key from your OpenAlgo application.

from openalgo import api

client = api(
    api_key='your_api_key_here',
    host='http://127.0.0.1:5000'  # Your OpenAlgo server
)

Quick Start Scripts

Place Market Order

python scripts/place_order.py --symbol RELIANCE --exchange NSE --action BUY --quantity 1 --product MIS

Place Smart Order (Position-Aware)

python scripts/smart_order.py --symbol TATAMOTORS --exchange NSE --action SELL --quantity 5 --position-size 10

Basket Order (Multiple Symbols)

python scripts/basket_order.py --orders '[{"symbol":"INFY","action":"BUY","quantity":1},{"symbol":"TCS","action":"BUY","quantity":1}]'

Split Order (Large Quantities)

python scripts/split_order.py --symbol YESBANK --exchange NSE --action SELL --quantity 500 --split-size 100

Order Constants

Exchanges

CodeDescription
NSENSE Equity
BSEBSE Equity
NFONSE Futures & Options
BFOBSE Futures & Options
CDSNSE Currency Derivatives
BCDBSE Currency Derivatives
MCXMCX Commodity
NCDEXNCDEX Commodity
NSE_INDEXNSE Indices (for quotes only)
BSE_INDEXBSE Indices (for quotes only)

Product Types

CodeDescriptionUse Case
CNCCash & CarryEquity delivery (hold overnight)
NRMLNormalF&O positions (hold overnight)
MISIntradayAuto square-off at market close

Price Types

CodeDescription
MARKETMarket Order (immediate execution)
LIMITLimit Order (specify price)
SLStop Loss Limit Order
SL-MStop Loss Market Order

Actions

CodeDescription
BUYBuy order
SELLSell order

Core API Methods

1. Place Order

Place a single order with full control over parameters:

response = client.placeorder(
    strategy="MyStrategy",
    symbol="RELIANCE",
    action="BUY",
    exchange="NSE",
    price_type="MARKET",
    product="MIS",
    quantity=1
)
# Response: {'orderid': '250408000989443', 'status': 'success'}

Limit Order Example:

response = client.placeorder(
    strategy="MyStrategy",
    symbol="YESBANK",
    action="BUY",
    exchange="NSE",
    price_type="LIMIT",
    product="MIS",
    quantity=1,
    price=16.50,
    trigger_price=0,
    disclosed_quantity=0
)

Stop Loss Order Example:

response = client.placeorder(
    strategy="MyStrategy",
    symbol="SBIN",
    action="SELL",
    exchange="NSE",
    price_type="SL",
    product="MIS",
    quantity=10,
    price=750,           # Limit price
    trigger_price=752    # Trigger price
)

2. Smart Order (Position-Aware)

Automatically adjusts order quantity based on current position:

response = client.placesmartorder(
    strategy="SmartBot",
    symbol="TATAMOTORS",
    action="SELL",
    exchange="NSE",
    price_type="MARKET",
    product="MIS",
    quantity=1,
    position_size=5  # Desired final position
)
# If current position is 0, sells 5 to reach -5
# If current position is 3, sells 8 to reach -5

Use Cases:

  • Rebalancing: Set position_size to target position
  • Reversal: Set action opposite to current direction
  • Scale-in/out: Adjust quantity dynamically

3. Basket Order

Execute multiple orders simultaneously:

basket_orders = [
    {
        "symbol": "INFY",
        "exchange": "NSE",
        "action": "BUY",
        "quantity": 1,
        "pricetype": "MARKET",
        "product": "MIS"
    },
    {
        "symbol": "TCS",
        "exchange": "NSE",
        "action": "BUY",
        "quantity": 1,
        "pricetype": "MARKET",
        "product": "MIS"
    },
    {
        "symbol": "WIPRO",
        "exchange": "NSE",
        "action": "BUY",
        "quantity": 1,
        "pricetype": "MARKET",
        "product": "MIS"
    }
]

response = client.basketorder(orders=basket_orders)
# Response includes status for each order

4. Split Order

Break large orders into smaller chunks to avoid market impact:

response = client.splitorder(
    symbol="YESBANK",
    exchange="NSE",
    action="SELL",
    quantity=500,
    splitsize=100,  # Each order will be max 100
    price_type="MARKET",
    product="MIS"
)
# Creates 5 orders of 100 each

Response:

{
  "status": "success",
  "split_size": 100,
  "total_quantity": 500,
  "results": [
    {"order_num": 1, "orderid": "123", "quantity": 100, "status": "success"},
    {"order_num": 2, "orderid": "124", "quantity": 100, "status": "success"},
    ...
  ]
}

Order Management

Modify Order

response = client.modifyorder(
    order_id="250408001002736",
    strategy="MyStrategy",
    symbol="YESBANK",
    action="BUY",
    exchange="NSE",
    price_type="LIMIT",
    product="MIS",
    quantity=1,
    price=17.00  # New price
)

Cancel Order

response = client.cancelorder(
    order_id="250408001002736",
    strategy="MyStrategy"
)

Cancel All Orders

response = client.cancelallorder(strategy="MyStrategy")
# Cancels all open and trigger-pending orders

Close All Positions

response = client.closeposition(strategy="MyStrategy")
# Squares off all open positions

Get Order Status

response = client.orderstatus(
    order_id="250408001002736",
    strategy="MyStrategy"
)
# Returns: order_status, average_price, quantity, timestamp

Get Open Position

response = client.openposition(
    strategy="MyStrategy",
    symbol="RELIANCE",
    exchange="NSE",
    product="MIS"
)
# Returns: {'quantity': '10', 'status': 'success'}

Symbol Format

OpenAlgo uses standardized symbol formats across all brokers:

Equity

  • RELIANCE, INFY, TCS, SBIN

Futures

  • Format: [SYMBOL][DDMMMYY]FUT
  • Examples: NIFTY30JAN25FUT, BANKNIFTY30JAN25FUT

Options

  • Format: [SYMBOL][DDMMMYY][STRIKE][CE/PE]
  • Examples: NIFTY30JAN2526000CE, BANKNIFTY30JAN2555000PE

Common Patterns

Intraday Scalping

# Entry
entry = client.placeorder(
    strategy="Scalper",
    symbol="SBIN",
    action="BUY",
    exchange="NSE",
    price_type="MARKET",
    product="MIS",
    quantity=100
)

# Exit with profit target (use limit order)
exit_order = client.placeorder(
    strategy="Scalper",
    symbol="SBIN",
    action="SELL",
    exchange="NSE",
    price_type="LIMIT",
    product="MIS",
    quantity=100,
    price=current_price * 1.005  # 0.5% profit
)

Swing Trading Entry

response = client.placeorder(
    strategy="SwingTrader",
    symbol="TATASTEEL",
    action="BUY",
    exchange="NSE",
    price_type="LIMIT",
    product="CNC",  # Delivery
    quantity=10,
    price=150.00
)

Risk Management - Stop Loss

# Place stop loss immediately after entry
sl_order = client.placeorder(
    strategy="Scalper",
    symbol="SBIN",
    action="SELL",
    exchange="NSE",
    price_type="SL-M",
    product="MIS",
    quantity=100,
    trigger_price=entry_price * 0.995  # 0.5% stop loss
)

Error Handling

response = client.placeorder(...)

if response.get('status') == 'success':
    print(f"Order placed: {response['orderid']}")
else:
    print(f"Error: {response.get('message', 'Unknown error')}")

Notes

  • Always verify OPENALGO_API_KEY is set before trading
  • Use MIS for intraday, CNC/NRML for positional trades
  • Test with small quantities first
  • Use Analyzer mode for paper trading: client.analyzertoggle(mode=True)

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.