OpenAlgo.NET 1.0.1

dotnet add package OpenAlgo.NET --version 1.0.1
                    
NuGet\Install-Package OpenAlgo.NET -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OpenAlgo.NET" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OpenAlgo.NET" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="OpenAlgo.NET" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OpenAlgo.NET --version 1.0.1
                    
#r "nuget: OpenAlgo.NET, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OpenAlgo.NET@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OpenAlgo.NET&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=OpenAlgo.NET&version=1.0.1
                    
Install as a Cake Tool

OpenAlgo.NET

OpenAlgo.NET SDK for algorithmic trading - C# client for OpenAlgo API

Installation

To install the OpenAlgo.NET library, use NuGet:

dotnet add package OpenAlgo.NET

Or via Package Manager:

Install-Package OpenAlgo.NET

Compatibility

Framework Version Support
.NET 6.0 LTS (Long Term Support)
.NET 7.0 STS (Standard Term Support)
.NET 8.0 LTS (Long Term Support) - Recommended

The SDK is built using only built-in .NET libraries with no external dependencies.

Get the OpenAlgo apikey

Make Sure that your OpenAlgo Application is running. Login to OpenAlgo Application with valid credentials and get the OpenAlgo apikey

For detailed function parameters refer to the API Documentation

Getting Started with OpenAlgo.NET

First, import the Api class from the OpenAlgo.NET library and initialize it with your API key:

using OpenAlgo.NET;

// Replace 'your_api_key_here' with your actual API key
// Specify the host URL with your hosted domain or ngrok domain.
// If running locally in windows then use the default host value.
var client = new Api(apiKey: "your_api_key_here", host: "http://127.0.0.1:5000");

Examples

Please refer to the documentation on order constants, and consult the API reference for details on optional parameters


Sync API Reference

PlaceOrder example

To place a new market order:

var response = client.PlaceOrder(
    strategy: "Python",
    symbol: "NHPC",
    action: "BUY",
    exchange: "NSE",
    priceType: "MARKET",
    product: "MIS",
    quantity: 1
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"OrderId: {response.OrderId}");

Place Market Order Response

Status: success
OrderId: 250408000989443

To place a new limit order:

var response = client.PlaceOrder(
    strategy: "Python",
    symbol: "YESBANK",
    action: "BUY",
    exchange: "NSE",
    priceType: "LIMIT",
    product: "CNC",
    quantity: 1,
    price: 16,
    triggerPrice: 0,
    disclosedQuantity: 0
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"OrderId: {response.OrderId}");

Place Limit Order Response

Status: success
OrderId: 250408001003813

PlaceSmartOrder Example

To place a smart order considering the current position size:

var response = client.PlaceSmartOrder(
    strategy: "Python",
    symbol: "TATAMOTORS",
    action: "SELL",
    exchange: "NSE",
    priceType: "MARKET",
    product: "MIS",
    quantity: 1,
    positionSize: 5
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"OrderId: {response.OrderId}");

Place Smart Market Order Response

Status: success
OrderId: 250408000997543

OptionsOrder Example

To place ATM options order

var response = client.OptionsOrder(
    strategy: "python",
    underlying: "NIFTY",
    exchange: "NSE_INDEX",
    expiryDate: "30DEC25",
    offset: "ATM",
    optionType: "CE",
    action: "BUY",
    quantity: 75,
    priceType: "MARKET",
    product: "NRML",
    splitSize: 0
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"OrderId: {response.OrderId}");
Console.WriteLine($"Symbol: {response.Symbol}");
Console.WriteLine($"Exchange: {response.Exchange}");
Console.WriteLine($"Underlying LTP: {response.UnderlyingLtp}");

Place Options Order Response

Status: success
OrderId: 25102800000006
Symbol: NIFTY30DEC2526200CE
Exchange: NFO
Underlying LTP: 26215.55

To place ITM options order

var response = client.OptionsOrder(
    strategy: "python",
    underlying: "NIFTY",
    exchange: "NSE_INDEX",
    expiryDate: "30DEC25",
    offset: "ITM4",
    optionType: "PE",
    action: "BUY",
    quantity: 75,
    priceType: "MARKET",
    product: "NRML",
    splitSize: 0
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"OrderId: {response.OrderId}");
Console.WriteLine($"Symbol: {response.Symbol}");

Place Options Order Response

Status: success
OrderId: 25102800000007
Symbol: NIFTY30DEC2526150PE

To place OTM options order

var response = client.OptionsOrder(
    strategy: "python",
    underlying: "NIFTY",
    exchange: "NSE_INDEX",
    expiryDate: "30DEC25",
    offset: "OTM5",
    optionType: "CE",
    action: "BUY",
    quantity: 75,
    priceType: "MARKET",
    product: "NRML",
    splitSize: 0
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"OrderId: {response.OrderId}");
Console.WriteLine($"Symbol: {response.Symbol}");

Place Options Order Response

Status: success
OrderId: 25102800000008
Symbol: NIFTY30DEC2526200CE

OptionsMultiOrder Example

To place Iron Condor options order (Same Expiry)

var response = client.OptionsMultiOrder(
    strategy: "Iron Condor Test",
    underlying: "NIFTY",
    exchange: "NSE_INDEX",
    expiryDate: "25NOV25",
    legs: new List<OptionLeg>
    {
        new OptionLeg { Offset = "OTM6", OptionType = "CE", Action = "BUY", Quantity = 75 },
        new OptionLeg { Offset = "OTM6", OptionType = "PE", Action = "BUY", Quantity = 75 },
        new OptionLeg { Offset = "OTM4", OptionType = "CE", Action = "SELL", Quantity = 75 },
        new OptionLeg { Offset = "OTM4", OptionType = "PE", Action = "SELL", Quantity = 75 }
    }
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Underlying: {response.Underlying}");
Console.WriteLine($"Underlying LTP: {response.UnderlyingLtp}");
if (response.Results != null)
{
    foreach (var leg in response.Results)
    {
        Console.WriteLine($"Leg {leg.Leg}: {leg.Action} {leg.Symbol} - {leg.Status} (OrderId: {leg.OrderId})");
    }
}

OptionsMultiOrder Response

Status: success
Underlying: NIFTY
Underlying LTP: 26050.45
Leg 1: BUY NIFTY25NOV2526350CE - success (OrderId: 25111996859688)
Leg 2: BUY NIFTY25NOV2525750PE - success (OrderId: 25111996042210)
Leg 3: SELL NIFTY25NOV2526250CE - success (OrderId: 25111922189638)
Leg 4: SELL NIFTY25NOV2525850PE - success (OrderId: 25111919252668)

To place Diagonal Spread options order (Different Expiry)

var response = client.OptionsMultiOrder(
    strategy: "Diagonal Spread Test",
    underlying: "NIFTY",
    exchange: "NSE_INDEX",
    legs: new List<OptionLeg>
    {
        new OptionLeg { Offset = "ITM2", OptionType = "CE", Action = "BUY", Quantity = 75, ExpiryDate = "30DEC25" },
        new OptionLeg { Offset = "OTM2", OptionType = "CE", Action = "SELL", Quantity = 75, ExpiryDate = "25NOV25" }
    }
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Underlying: {response.Underlying}");
Console.WriteLine($"Underlying LTP: {response.UnderlyingLtp}");
if (response.Results != null)
{
    foreach (var leg in response.Results)
    {
        Console.WriteLine($"Leg {leg.Leg}: {leg.Action} {leg.Symbol} - {leg.Status} (OrderId: {leg.OrderId})");
    }
}

OptionsMultiOrder Response

Status: success
Underlying: NIFTY
Underlying LTP: 26052.65
Leg 1: BUY NIFTY30DEC2525950CE - success (OrderId: 25111933337854)
Leg 2: SELL NIFTY25NOV2526150CE - success (OrderId: 25111957475473)

BasketOrder example

To place a new basket order:

var basketOrders = new List<BasketOrderItem>
{
    new BasketOrderItem
    {
        Symbol = "BHEL",
        Exchange = "NSE",
        Action = "BUY",
        Quantity = 1,
        PriceType = "MARKET",
        Product = "MIS"
    },
    new BasketOrderItem
    {
        Symbol = "ZOMATO",
        Exchange = "NSE",
        Action = "SELL",
        Quantity = 1,
        PriceType = "MARKET",
        Product = "MIS"
    }
};
var response = client.BasketOrder(orders: basketOrders);
Console.WriteLine($"Status: {response.Status}");
if (response.Results != null)
{
    foreach (var result in response.Results)
    {
        Console.WriteLine($"  {result.Symbol}: {result.Status} (OrderId: {result.OrderId})");
    }
}

Basket Order Response

Status: success
  BHEL: success (OrderId: 250408000999544)
  ZOMATO: success (OrderId: 250408000997545)

SplitOrder example

To place a new split order:

var response = client.SplitOrder(
    symbol: "YESBANK",
    exchange: "NSE",
    action: "SELL",
    quantity: 105,
    splitSize: 20,
    priceType: "MARKET",
    product: "MIS"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Split Size: {response.SplitSize}");
Console.WriteLine($"Total Quantity: {response.TotalQuantity}");
if (response.Results != null)
{
    foreach (var result in response.Results)
    {
        Console.WriteLine($"  Order {result.OrderNum}: Qty {result.Quantity} - {result.Status} (OrderId: {result.OrderId})");
    }
}

SplitOrder Response

Status: success
Split Size: 20
Total Quantity: 105
  Order 1: Qty 20 - success (OrderId: 250408001021467)
  Order 2: Qty 20 - success (OrderId: 250408001021459)
  Order 3: Qty 20 - success (OrderId: 250408001021466)
  Order 4: Qty 20 - success (OrderId: 250408001021470)
  Order 5: Qty 20 - success (OrderId: 250408001021471)
  Order 6: Qty 5 - success (OrderId: 250408001021472)

ModifyOrder Example

To modify an existing order:

var response = client.ModifyOrder(
    orderId: "250408001002736",
    strategy: "Python",
    symbol: "YESBANK",
    action: "BUY",
    exchange: "NSE",
    priceType: "LIMIT",
    product: "CNC",
    quantity: 1,
    price: "16.5"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"OrderId: {response.OrderId}");

Modify Order Response

Status: success
OrderId: 250408001002736

CancelOrder Example

To cancel an existing order:

var response = client.CancelOrder(
    orderId: "250408001002736",
    strategy: "Python"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"OrderId: {response.OrderId}");

CancelOrder Response

Status: success
OrderId: 250408001002736

CancelAllOrder Example

To cancel all open orders and trigger pending orders

var response = client.CancelAllOrder(
    strategy: "Python"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Message: {response.Message}");
if (response.CanceledOrders != null)
{
    Console.WriteLine($"Canceled Orders: {string.Join(", ", response.CanceledOrders)}");
}

CancelAllOrder Response

Status: success
Message: Canceled 5 orders. Failed to cancel 0 orders.
Canceled Orders: 250408001042620, 250408001042667, 250408001042642, 250408001043015, 250408001043386

ClosePosition Example

To close all open positions across various exchanges

var response = client.ClosePosition(
    strategy: "Python"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Message: {response.Message}");

ClosePosition Response

Status: success
Message: All Open Positions Squared Off

OrderStatus Example

To Get the Current OrderStatus

var response = client.OrderStatus(
    orderId: "250828000185002",
    strategy: "Test Strategy"
);
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"Action: {response.Data.Action}");
    Console.WriteLine($"Symbol: {response.Data.Symbol}");
    Console.WriteLine($"Exchange: {response.Data.Exchange}");
    Console.WriteLine($"Order Status: {response.Data.OrderStatus}");
    Console.WriteLine($"OrderId: {response.Data.OrderId}");
    Console.WriteLine($"Quantity: {response.Data.Quantity}");
    Console.WriteLine($"Average Price: {response.Data.AveragePrice}");
    Console.WriteLine($"Timestamp: {response.Data.Timestamp}");
}

OrderStatus Response

Status: success
Action: BUY
Symbol: YESBANK
Exchange: NSE
Order Status: complete
OrderId: 250828000185002
Quantity: 1
Average Price: 18.95
Timestamp: 28-Aug-2025 09:59:10

OpenPosition Example

To Get the Current OpenPosition

var response = client.OpenPosition(
    strategy: "Test Strategy",
    symbol: "YESBANK",
    exchange: "NSE",
    product: "MIS"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Quantity: {response.Quantity}");

OpenPosition Response

Status: success
Quantity: -10

Quotes Example

var response = client.Quotes(symbol: "RELIANCE", exchange: "NSE");
Console.WriteLine($"Status: {response.Status}");
if (response.IsSuccess && response.Data != null)
{
    Console.WriteLine($"Open: {response.Data.Open}");
    Console.WriteLine($"High: {response.Data.High}");
    Console.WriteLine($"Low: {response.Data.Low}");
    Console.WriteLine($"LTP: {response.Data.Ltp}");
    Console.WriteLine($"Ask: {response.Data.Ask}");
    Console.WriteLine($"Bid: {response.Data.Bid}");
    Console.WriteLine($"Prev Close: {response.Data.PrevClose}");
    Console.WriteLine($"Volume: {response.Data.Volume}");
}

Quotes response

Status: success
Open: 1223.05
High: 1231.4
Low: 1214.15
LTP: 1217.15
Ask: 1217.15
Bid: 1217.1
Prev Close: 1222.55
Volume: 4893109

MultiQuotes Example

var response = client.MultiQuotes(symbols: new List<SymbolExchangePair>
{
    new SymbolExchangePair { Symbol = "RELIANCE", Exchange = "NSE" },
    new SymbolExchangePair { Symbol = "TCS", Exchange = "NSE" },
    new SymbolExchangePair { Symbol = "INFY", Exchange = "NSE" }
});
Console.WriteLine($"Status: {response.Status}");
if (response.Results != null)
{
    foreach (var result in response.Results)
    {
        Console.WriteLine($"\n{result.Symbol} ({result.Exchange}):");
        if (result.Data != null)
        {
            Console.WriteLine($"  Open: {result.Data.Open}");
            Console.WriteLine($"  High: {result.Data.High}");
            Console.WriteLine($"  Low: {result.Data.Low}");
            Console.WriteLine($"  LTP: {result.Data.Ltp}");
            Console.WriteLine($"  Volume: {result.Data.Volume}");
        }
    }
}

MultiQuotes Response

Status: success

RELIANCE (NSE):
  Open: 1542.3
  High: 1571.6
  Low: 1540.5
  LTP: 1569.9
  Volume: 14054299

TCS (NSE):
  Open: 3118.8
  High: 3178
  Low: 3117
  LTP: 3162.9
  Volume: 2508527

INFY (NSE):
  Open: 1532.1
  High: 1560.3
  Low: 1532.1
  LTP: 1557.9
  Volume: 7575038

Depth Example

var response = client.Depth(symbol: "SBIN", exchange: "NSE");
Console.WriteLine($"Status: {response.Status}");
if (response.IsSuccess && response.Data != null)
{
    Console.WriteLine($"LTP: {response.Data.Ltp}");
    Console.WriteLine($"Open: {response.Data.Open}");
    Console.WriteLine($"High: {response.Data.High}");
    Console.WriteLine($"Low: {response.Data.Low}");
    Console.WriteLine($"Volume: {response.Data.Volume}");
    Console.WriteLine($"Total Buy Qty: {response.Data.TotalBuyQty}");
    Console.WriteLine($"Total Sell Qty: {response.Data.TotalSellQty}");

    Console.WriteLine("\nTop 5 Bids:");
    foreach (var bid in response.Data.Bids.Take(5))
        Console.WriteLine($"  {bid.Price} x {bid.Quantity}");

    Console.WriteLine("\nTop 5 Asks:");
    foreach (var ask in response.Data.Asks.Take(5))
        Console.WriteLine($"  {ask.Price} x {ask.Quantity}");
}

Depth Response

Status: success
LTP: 827.45
Open: 825.00
High: 829.35
Low: 824.55
Volume: 9362799
Total Buy Qty: 591351
Total Sell Qty: 835701

Top 5 Bids:
  827.40 x 886
  827.35 x 212
  827.30 x 351
  827.25 x 343
  827.20 x 399

Top 5 Asks:
  827.45 x 767
  827.50 x 115
  827.55 x 162
  827.60 x 1121
  827.65 x 430

History Example

var response = client.History(
    symbol: "SBIN",
    exchange: "NSE",
    interval: "5m",
    startDate: "2025-12-20",
    endDate: "2025-12-22"
);
Console.WriteLine($"Status: {response.Status}");
if (response.IsSuccess && response.Data != null)
{
    Console.WriteLine($"Total Candles: {response.Data.Count}\n");
    Console.WriteLine($"{"Timestamp",-22} {"Open",10} {"High",10} {"Low",10} {"Close",10} {"Volume",12}");
    Console.WriteLine(new string('-', 80));
    foreach (var candle in response.Data.Take(5))
    {
        Console.WriteLine($"{candle.Timestamp,-22} {candle.Open,10:F2} {candle.High,10:F2} {candle.Low,10:F2} {candle.Close,10:F2} {candle.Volume,12}");
    }
}

History Response

Status: success
Total Candles: 150

Timestamp                    Open       High        Low      Close       Volume
--------------------------------------------------------------------------------
2025-12-20 09:15:00       827.00     829.35     824.55     826.45       524631
2025-12-20 09:20:00       826.45     827.95     825.50     826.10       198234
2025-12-20 09:25:00       826.05     827.40     825.75     827.20       145892
2025-12-20 09:30:00       827.20     828.00     826.50     827.65       112456
2025-12-20 09:35:00       827.70     828.50     827.00     828.15        98234

Intervals Example

var response = client.Intervals();
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"Days: {string.Join(", ", response.Data.Days ?? new List<string>())}");
    Console.WriteLine($"Hours: {string.Join(", ", response.Data.Hours ?? new List<string>())}");
    Console.WriteLine($"Minutes: {string.Join(", ", response.Data.Minutes ?? new List<string>())}");
}

Intervals Response

Status: success
Days: D
Hours: 1h
Minutes: 10m, 15m, 1m, 30m, 3m, 5m

OptionChain Example

Note : To fetch entire option chain for a expiry remove the strikeCount (optional) parameter

var response = client.OptionChain(
    underlying: "NIFTY",
    exchange: "NSE_INDEX",
    expiryDate: "30DEC25",
    strikeCount: 10
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Underlying: {response.Underlying}");
Console.WriteLine($"Underlying LTP: {response.UnderlyingLtp}");
Console.WriteLine($"ATM Strike: {response.AtmStrike}");
if (response.Chain != null)
{
    Console.WriteLine("\nOption Chain:");
    foreach (var strike in response.Chain.Take(2))
    {
        Console.WriteLine($"\nStrike: {strike.Strike}");
        if (strike.Ce != null)
            Console.WriteLine($"  CE: {strike.Ce.Symbol} ({strike.Ce.Label}) LTP: {strike.Ce.Ltp}");
        if (strike.Pe != null)
            Console.WriteLine($"  PE: {strike.Pe.Symbol} ({strike.Pe.Label}) LTP: {strike.Pe.Ltp}");
    }
}

OptionChain Response

Status: success
Underlying: NIFTY
Underlying LTP: 26215.55
ATM Strike: 26200

Option Chain:

Strike: 26100
  CE: NIFTY30DEC2526100CE (ITM2) LTP: 490
  PE: NIFTY30DEC2526100PE (OTM2) LTP: 193

Strike: 26200
  CE: NIFTY30DEC2526200CE (ATM) LTP: 427
  PE: NIFTY30DEC2526200PE (ATM) LTP: 227.4

Symbol Example

var response = client.Symbol(
    symbol: "NIFTY30DEC25FUT",
    exchange: "NFO"
);
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"Symbol: {response.Data.Symbol}");
    Console.WriteLine($"Name: {response.Data.Name}");
    Console.WriteLine($"Exchange: {response.Data.Exchange}");
    Console.WriteLine($"Instrument Type: {response.Data.InstrumentType}");
    Console.WriteLine($"Lot Size: {response.Data.LotSize}");
    Console.WriteLine($"Expiry: {response.Data.Expiry}");
    Console.WriteLine($"Freeze Qty: {response.Data.FreezeQty}");
}

Symbol Response

Status: success
Symbol: NIFTY30DEC25FUT
Name: NIFTY
Exchange: NFO
Instrument Type: FUT
Lot Size: 75
Expiry: 30-DEC-25
Freeze Qty: 1800

Search Example

var response = client.Search(query: "NIFTY 26000 DEC CE", exchange: "NFO");
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Message: {response.Message}");
if (response.Data != null)
{
    foreach (var symbol in response.Data.Take(2))
    {
        Console.WriteLine($"\n  Symbol: {symbol.Symbol}");
        Console.WriteLine($"  Exchange: {symbol.Exchange}");
        Console.WriteLine($"  Expiry: {symbol.Expiry}");
        Console.WriteLine($"  Lot Size: {symbol.LotSize}");
    }
}

Search Response

Status: success
Message: Found 7 matching symbols

  Symbol: NIFTY30DEC2526000CE
  Exchange: NFO
  Expiry: 30-DEC-25
  Lot Size: 75

  Symbol: NIFTY29DEC2626000CE
  Exchange: NFO
  Expiry: 29-DEC-26
  Lot Size: 75

OptionSymbol Example

ATM Option

var response = client.OptionSymbol(
    underlying: "NIFTY",
    exchange: "NSE_INDEX",
    expiryDate: "30DEC25",
    offset: "ATM",
    optionType: "CE"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Symbol: {response.Symbol}");
Console.WriteLine($"Exchange: {response.Exchange}");
Console.WriteLine($"Lot Size: {response.LotSize}");
Console.WriteLine($"Underlying LTP: {response.UnderlyingLtp}");

OptionSymbol Response

Status: success
Symbol: NIFTY30DEC2525950CE
Exchange: NFO
Lot Size: 75
Underlying LTP: 25966.4

ITM Option

var response = client.OptionSymbol(
    underlying: "NIFTY",
    exchange: "NSE_INDEX",
    expiryDate: "30DEC25",
    offset: "ITM3",
    optionType: "PE"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Symbol: {response.Symbol}");
Console.WriteLine($"Exchange: {response.Exchange}");
Console.WriteLine($"Lot Size: {response.LotSize}");

OptionSymbol Response

Status: success
Symbol: NIFTY30DEC2526100PE
Exchange: NFO
Lot Size: 75

OTM Option

var response = client.OptionSymbol(
    underlying: "NIFTY",
    exchange: "NSE_INDEX",
    expiryDate: "30DEC25",
    offset: "OTM4",
    optionType: "CE"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Symbol: {response.Symbol}");
Console.WriteLine($"Exchange: {response.Exchange}");
Console.WriteLine($"Lot Size: {response.LotSize}");

OptionSymbol Response

Status: success
Symbol: NIFTY30DEC2526150CE
Exchange: NFO
Lot Size: 75

SyntheticFuture Example

var response = client.SyntheticFuture(
    underlying: "NIFTY",
    exchange: "NSE_INDEX",
    expiryDate: "25NOV25"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Underlying: {response.Underlying}");
Console.WriteLine($"Underlying LTP: {response.UnderlyingLtp}");
Console.WriteLine($"ATM Strike: {response.AtmStrike}");
Console.WriteLine($"Synthetic Future Price: {response.SyntheticFuturePrice}");
Console.WriteLine($"Expiry: {response.Expiry}");

SyntheticFuture Response

Status: success
Underlying: NIFTY
Underlying LTP: 25910.05
ATM Strike: 25900
Synthetic Future Price: 25980.05
Expiry: 25NOV25

OptionGreeks Example

var response = client.OptionGreeks(
    symbol: "NIFTY25NOV2526000CE",
    exchange: "NFO",
    interestRate: 0.00,
    underlyingSymbol: "NIFTY",
    underlyingExchange: "NSE_INDEX"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Symbol: {response.Symbol}");
Console.WriteLine($"Spot Price: {response.SpotPrice}");
Console.WriteLine($"Option Price: {response.OptionPrice}");
Console.WriteLine($"IV: {response.ImpliedVolatility}%");
Console.WriteLine($"Days to Expiry: {response.DaysToExpiry:F2}");
if (response.Greeks != null)
{
    Console.WriteLine($"Delta: {response.Greeks.Delta}");
    Console.WriteLine($"Gamma: {response.Greeks.Gamma}");
    Console.WriteLine($"Theta: {response.Greeks.Theta}");
    Console.WriteLine($"Vega: {response.Greeks.Vega}");
}

OptionGreeks Response

Status: success
Symbol: NIFTY25NOV2526000CE
Spot Price: 25966.05
Option Price: 435
IV: 15.6%
Days to Expiry: 28.51
Delta: 0.4967
Gamma: 0.000352
Theta: -7.919
Vega: 28.9489

Expiry Example

var response = client.Expiry(
    symbol: "NIFTY",
    exchange: "NFO",
    instrumentType: "options"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Message: {response.Message}");
if (response.Data != null)
{
    Console.WriteLine($"Expiry Dates ({response.Data.Count}):");
    foreach (var expiry in response.Data.Take(5))
    {
        Console.WriteLine($"  {expiry}");
    }
    if (response.Data.Count > 5)
        Console.WriteLine("  ...");
}

Expiry Response

Status: success
Message: Found 18 expiry dates for NIFTY options in NFO
Expiry Dates (18):
  10-JUL-25
  17-JUL-25
  24-JUL-25
  31-JUL-25
  07-AUG-25
  ...

Instruments Example

var response = client.Instruments(exchange: "NSE");
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"Total Instruments: {response.Data.Count}");
    foreach (var inst in response.Data.Take(3))
    {
        Console.WriteLine($"\n  Symbol: {inst.Symbol}");
        Console.WriteLine($"  Name: {inst.Name}");
        Console.WriteLine($"  Exchange: {inst.Exchange}");
        Console.WriteLine($"  Lot Size: {inst.LotSize}");
    }
}

Instruments Response

Status: success
Total Instruments: 2500

  Symbol: NEOGEN
  Name: NEOGEN CHEMICALS LIMITED
  Exchange: NSE
  Lot Size: 1

  Symbol: ALANKIT
  Name: ALANKIT LIMITED
  Exchange: NSE
  Lot Size: 1

  Symbol: EVERESTIND
  Name: EVEREST INDUSTRIES LTD
  Exchange: NSE
  Lot Size: 1

Telegram Alert Example

var response = client.Telegram(
    username: "<openalgo_loginid>",
    message: "NIFTY crossed 26000!"
);
Console.WriteLine($"Status: {response.Status}");
Console.WriteLine($"Message: {response.Message}");

Telegram Alert Response

Status: success
Message: Notification sent successfully

Funds Example

var response = client.Funds();
Console.WriteLine($"Status: {response.Status}");
if (response.IsSuccess && response.Data != null)
{
    Console.WriteLine($"Available Cash: {response.Data.AvailableCash}");
    Console.WriteLine($"Collateral: {response.Data.Collateral}");
    Console.WriteLine($"M2M Realized: {response.Data.M2MRealized}");
    Console.WriteLine($"M2M Unrealized: {response.Data.M2MUnrealized}");
    Console.WriteLine($"Utilised Debits: {response.Data.UtilisedDebits}");
}

Funds Response

Status: success
Available Cash: 320.66
Collateral: 0.00
M2M Realized: 3.27
M2M Unrealized: -7.88
Utilised Debits: 679.34

Margin Example

var response = client.Margin(positions: new List<MarginPosition>
{
    new MarginPosition
    {
        Symbol = "NIFTY25NOV2525000CE",
        Exchange = "NFO",
        Action = "BUY",
        Product = "NRML",
        PriceType = "MARKET",
        Quantity = 75
    },
    new MarginPosition
    {
        Symbol = "NIFTY25NOV2525500CE",
        Exchange = "NFO",
        Action = "SELL",
        Product = "NRML",
        PriceType = "MARKET",
        Quantity = 75
    }
});
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"Total Margin Required: {response.Data.TotalMarginRequired}");
    Console.WriteLine($"SPAN Margin: {response.Data.SpanMargin}");
    Console.WriteLine($"Exposure Margin: {response.Data.ExposureMargin}");
}

Margin Response

Status: success
Total Margin Required: 91555.76
SPAN Margin: 0
Exposure Margin: 91555.76

OrderBook Example

var response = client.OrderBook();
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"\nOrders:");
    foreach (var order in response.Data.Orders?.Take(2) ?? Enumerable.Empty<OrderBookEntry>())
    {
        Console.WriteLine($"  {order.Action} {order.Symbol} | {order.OrderStatus} | OrderId: {order.OrderId}");
    }
    if (response.Data.Statistics != null)
    {
        Console.WriteLine($"\nStatistics:");
        Console.WriteLine($"  Total Buy Orders: {response.Data.Statistics.TotalBuyOrders}");
        Console.WriteLine($"  Total Completed: {response.Data.Statistics.TotalCompletedOrders}");
    }
}

OrderBook Response

Status: success

Orders:
  BUY RELIANCE | complete | OrderId: 250408000989443
  BUY YESBANK | cancelled | OrderId: 250408001002736

Statistics:
  Total Buy Orders: 2
  Total Completed: 1

TradeBook Example

var response = client.TradeBook();
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"\nTrades:");
    foreach (var trade in response.Data.Take(2))
    {
        Console.WriteLine($"  {trade.Action} {trade.Symbol} @ {trade.AveragePrice} | Value: {trade.TradeValue}");
    }
}

TradeBook Response

Status: success

Trades:
  BUY RELIANCE @ 1180.1 | Value: 1180.1
  SELL NHPC @ 83.74 | Value: 83.74

PositionBook Example

var response = client.PositionBook();
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"\nPositions:");
    foreach (var pos in response.Data)
    {
        Console.WriteLine($"  {pos.Symbol} | Qty: {pos.Quantity} | LTP: {pos.Ltp} | PnL: {pos.Pnl}");
    }
}

PositionBook Response

Status: success

Positions:
  NHPC | Qty: -1 | LTP: 83.72 | PnL: 0.02
  RELIANCE | Qty: 0 | LTP: 1189.9 | PnL: 5.90
  YESBANK | Qty: -104 | LTP: 17.31 | PnL: -10.44

Holdings Example

var response = client.Holdings();
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"\nHoldings:");
    foreach (var holding in response.Data.Holdings ?? new List<HoldingEntry>())
    {
        Console.WriteLine($"  {holding.Symbol} | Qty: {holding.Quantity} | PnL: {holding.Pnl} ({holding.PnlPercent}%)");
    }
    if (response.Data.Statistics != null)
    {
        Console.WriteLine($"\nStatistics:");
        Console.WriteLine($"  Total Holding Value: {response.Data.Statistics.TotalHoldingValue}");
        Console.WriteLine($"  Total P&L: {response.Data.Statistics.TotalProfitAndLoss} ({response.Data.Statistics.TotalPnlPercentage}%)");
    }
}

Holdings Response

Status: success

Holdings:
  RELIANCE | Qty: 1 | PnL: -149 (-11.1%)
  TATASTEEL | Qty: 1 | PnL: -15 (-10.41%)
  CANBK | Qty: 5 | PnL: -69 (-13.43%)

Statistics:
  Total Holding Value: 1768
  Total P&L: -233.15 (-11.65%)

Holidays Example

var response = client.Holidays(year: 2025);
Console.WriteLine($"Status: {response.Status}");
if (response.IsSuccess && response.Data != null)
{
    Console.WriteLine($"Total Holidays: {response.Data.Count}\n");
    Console.WriteLine($"{"Date",-12} {"Description",-35} {"Type",-20}");
    Console.WriteLine(new string('-', 70));
    foreach (var holiday in response.Data.Take(5))
    {
        Console.WriteLine($"{holiday.Date,-12} {holiday.Description,-35} {holiday.HolidayType,-20}");
    }
}

Holidays Response

Status: success
Total Holidays: 15

Date         Description                         Type
----------------------------------------------------------------------
2025-02-26   Maha Shivaratri                     TRADING_HOLIDAY
2025-03-14   Holi                                TRADING_HOLIDAY
2025-03-31   Id-Ul-Fitr (Ramadan)                TRADING_HOLIDAY
2025-04-10   Shri Mahavir Jayanti                TRADING_HOLIDAY
2025-04-14   Dr. Baba Saheb Ambedkar Jayanti     TRADING_HOLIDAY

Timings Example

var response = client.Timings(date: "2025-12-19");
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"\nExchange Timings:");
    foreach (var timing in response.Data)
    {
        var start = DateTimeOffset.FromUnixTimeMilliseconds(timing.StartTime).ToLocalTime();
        var end = DateTimeOffset.FromUnixTimeMilliseconds(timing.EndTime).ToLocalTime();
        Console.WriteLine($"  {timing.Exchange}: {start:HH:mm} - {end:HH:mm}");
    }
}

Timings Response

Status: success

Exchange Timings:
  NSE: 09:15 - 15:30
  BSE: 09:15 - 15:30
  NFO: 09:15 - 15:30
  BFO: 09:15 - 15:30
  MCX: 09:00 - 23:45
  BCD: 09:00 - 17:00
  CDS: 09:00 - 17:00

Analyzer Status Example

var response = client.AnalyzerStatus();
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"Analyze Mode: {response.Data.AnalyzeMode}");
    Console.WriteLine($"Mode: {response.Data.Mode}");
    Console.WriteLine($"Total Logs: {response.Data.TotalLogs}");
}

Analyzer Status Response

Status: success
Analyze Mode: True
Mode: analyze
Total Logs: 2

Analyzer Toggle Example

// Switch to analyze mode (simulated responses)
var response = client.AnalyzerToggle(mode: true);
Console.WriteLine($"Status: {response.Status}");
if (response.Data != null)
{
    Console.WriteLine($"Analyze Mode: {response.Data.AnalyzeMode}");
    Console.WriteLine($"Mode: {response.Data.Mode}");
    Console.WriteLine($"Message: {response.Data.Message}");
    Console.WriteLine($"Total Logs: {response.Data.TotalLogs}");
}

Analyzer Toggle Response

Status: success
Analyze Mode: True
Mode: analyze
Message: Analyzer mode switched to analyze
Total Logs: 2

Async API Reference

All methods have async versions with the Async suffix. For example:

// Async PlaceOrder
var response = await client.PlaceOrderAsync(
    strategy: "Python",
    symbol: "NHPC",
    action: "BUY",
    exchange: "NSE",
    priceType: "MARKET",
    product: "MIS",
    quantity: 1
);

// Async Quotes
var quotes = await client.QuotesAsync(symbol: "RELIANCE", exchange: "NSE");

// Async OrderBook
var orderBook = await client.OrderBookAsync();

// Async with CancellationToken
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30));
var funds = await client.FundsAsync(cts.Token);

Available Async Methods

Sync Method Async Method
PlaceOrder() PlaceOrderAsync()
PlaceSmartOrder() PlaceSmartOrderAsync()
OptionsOrder() OptionsOrderAsync()
OptionsMultiOrder() OptionsMultiOrderAsync()
BasketOrder() BasketOrderAsync()
SplitOrder() SplitOrderAsync()
ModifyOrder() ModifyOrderAsync()
CancelOrder() CancelOrderAsync()
CancelAllOrder() CancelAllOrderAsync()
ClosePosition() ClosePositionAsync()
OrderStatus() OrderStatusAsync()
OpenPosition() OpenPositionAsync()
Quotes() QuotesAsync()
MultiQuotes() MultiQuotesAsync()
Depth() DepthAsync()
History() HistoryAsync()
Intervals() IntervalsAsync()
OptionChain() OptionChainAsync()
Symbol() SymbolAsync()
Search() SearchAsync()
OptionSymbol() OptionSymbolAsync()
SyntheticFuture() SyntheticFutureAsync()
OptionGreeks() OptionGreeksAsync()
Expiry() ExpiryAsync()
Instruments() InstrumentsAsync()
Telegram() TelegramAsync()
Funds() FundsAsync()
Margin() MarginAsync()
OrderBook() OrderBookAsync()
TradeBook() TradeBookAsync()
PositionBook() PositionBookAsync()
Holdings() HoldingsAsync()
Holidays() HolidaysAsync()
Timings() TimingsAsync()
AnalyzerStatus() AnalyzerStatusAsync()
AnalyzerToggle() AnalyzerToggleAsync()

WebSocket Streaming

LTP Data (Streaming Websocket)

using OpenAlgo.NET;
using OpenAlgo.NET.Models.Common;

// Initialize OpenAlgo client
var client = new Api(
    apiKey: "your_api_key",
    host: "http://127.0.0.1:5000",
    wsUrl: "ws://127.0.0.1:8765"
);

// Define instruments to subscribe for LTP
var instruments = new List<Instrument>
{
    new Instrument { Exchange = "MCX", Symbol = "CRUDEOIL16JAN26FUT" }
};

// Connect and subscribe
client.Connect();
client.SubscribeLtp(instruments);

// Wait for data
Thread.Sleep(3000);

// Get cached LTP data
var ltpData = client.GetLtp("MCX", "CRUDEOIL16JAN26FUT");
if (ltpData.ContainsKey("MCX") && ltpData["MCX"].ContainsKey("CRUDEOIL16JAN26FUT"))
{
    var ltp = ltpData["MCX"]["CRUDEOIL16JAN26FUT"];
    Console.WriteLine($"Exchange: {ltp.Exchange}");
    Console.WriteLine($"Symbol: {ltp.Symbol}");
    Console.WriteLine($"Price: {ltp.Price}");
}

// Unsubscribe and disconnect
client.UnsubscribeLtp(instruments);
client.Disconnect();

LTP Response

Exchange: MCX
Symbol: CRUDEOIL16JAN26FUT
Price: 5218.0

Quotes (Streaming Websocket)

using OpenAlgo.NET;
using OpenAlgo.NET.Models.Common;

// Initialize OpenAlgo client
var client = new Api(
    apiKey: "your_api_key",
    host: "http://127.0.0.1:5000",
    wsUrl: "ws://127.0.0.1:8765"
);

// Instruments list
var instruments = new List<Instrument>
{
    new Instrument { Exchange = "MCX", Symbol = "CRUDEOIL16JAN26FUT" }
};

// Connect and subscribe to quote stream
client.Connect();
client.SubscribeQuote(instruments);

// Wait for data
Thread.Sleep(3000);

// Get cached Quote data
var quoteData = client.GetQuotes("MCX", "CRUDEOIL16JAN26FUT");
if (quoteData.ContainsKey("MCX") && quoteData["MCX"].ContainsKey("CRUDEOIL16JAN26FUT"))
{
    var quote = quoteData["MCX"]["CRUDEOIL16JAN26FUT"];
    Console.WriteLine($"Exchange: {quote.Exchange}");
    Console.WriteLine($"Symbol: {quote.Symbol}");
    Console.WriteLine($"Open: {quote.Open}");
    Console.WriteLine($"High: {quote.High}");
    Console.WriteLine($"Low: {quote.Low}");
    Console.WriteLine($"LTP: {quote.Ltp}");
    Console.WriteLine($"Volume: {quote.Volume}");
}

// Unsubscribe and disconnect
client.UnsubscribeQuote(instruments);
client.Disconnect();

Quote Response

Exchange: MCX
Symbol: CRUDEOIL16JAN26FUT
Open: 5124.0
High: 5246.0
Low: 5114.0
LTP: 5218.0
Volume: 14537

Depth (Streaming Websocket)

using OpenAlgo.NET;
using OpenAlgo.NET.Models.Common;

// Initialize OpenAlgo client
var client = new Api(
    apiKey: "your_api_key",
    host: "http://127.0.0.1:5000",
    wsUrl: "ws://127.0.0.1:8765"
);

// Instruments list for depth
var instruments = new List<Instrument>
{
    new Instrument { Exchange = "MCX", Symbol = "CRUDEOIL16JAN26FUT" }
};

// Connect and subscribe to depth stream
client.Connect();
client.SubscribeDepth(instruments);

// Wait for data
Thread.Sleep(3000);

// Get cached Depth data
var depthData = client.GetDepth("MCX", "CRUDEOIL16JAN26FUT");
if (depthData.ContainsKey("MCX") && depthData["MCX"].ContainsKey("CRUDEOIL16JAN26FUT"))
{
    var depth = depthData["MCX"]["CRUDEOIL16JAN26FUT"];
    Console.WriteLine($"Exchange: {depth.Exchange}");
    Console.WriteLine($"Symbol: {depth.Symbol}");
    Console.WriteLine($"LTP: {depth.Ltp}");

    Console.WriteLine("\nBuy Depth:");
    foreach (var level in depth.Buy.Take(5))
        Console.WriteLine($"  Price: {level.Price} | Qty: {level.Quantity} | Orders: {level.Orders}");

    Console.WriteLine("\nSell Depth:");
    foreach (var level in depth.Sell.Take(5))
        Console.WriteLine($"  Price: {level.Price} | Qty: {level.Quantity} | Orders: {level.Orders}");
}

// Unsubscribe and disconnect
client.UnsubscribeDepth(instruments);
client.Disconnect();

Depth Response

Exchange: MCX
Symbol: CRUDEOIL16JAN26FUT
LTP: 5218.0

Buy Depth:
  Price: 5217.0 | Qty: 2 | Orders: 2
  Price: 5216.0 | Qty: 16 | Orders: 8
  Price: 5215.0 | Qty: 12 | Orders: 6
  Price: 5214.0 | Qty: 29 | Orders: 15
  Price: 5213.0 | Qty: 27 | Orders: 11

Sell Depth:
  Price: 5218.0 | Qty: 5 | Orders: 3
  Price: 5219.0 | Qty: 13 | Orders: 7
  Price: 5220.0 | Qty: 22 | Orders: 11
  Price: 5221.0 | Qty: 15 | Orders: 5
  Price: 5222.0 | Qty: 15 | Orders: 6

WebSocket Methods Summary

Method Description
Connect() / ConnectAsync() Connect to WebSocket server
Disconnect() / DisconnectAsync() Disconnect from WebSocket server
SubscribeLtp(instruments, callback) Subscribe to LTP updates
UnsubscribeLtp(instruments) Unsubscribe from LTP updates
SubscribeQuote(instruments, callback) Subscribe to Quote updates
UnsubscribeQuote(instruments) Unsubscribe from Quote updates
SubscribeDepth(instruments, callback) Subscribe to Market Depth updates
UnsubscribeDepth(instruments) Unsubscribe from Market Depth updates
GetLtp(exchange, symbol) Get cached LTP data
GetQuotes(exchange, symbol) Get cached Quote data
GetDepth(exchange, symbol) Get cached Depth data

Error Handling

var response = client.PlaceOrder(
    strategy: "Python",
    symbol: "INVALID",
    action: "BUY",
    exchange: "NSE",
    priceType: "MARKET",
    product: "MIS",
    quantity: 1
);

if (!response.IsSuccess)
{
    Console.WriteLine($"Error: {response.Message}");
    Console.WriteLine($"Error Type: {response.ErrorType}");
}

License

This project is licensed under the MIT License - see the LICENSE file for details.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.
  • net7.0

    • No dependencies.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1 208 12/22/2025
1.0.0 171 12/22/2025