https://github.com/bigbuildbench/arjunvachhani_order-matcher

https://github.com/bigbuildbench/arjunvachhani_order-matcher

Science Score: 13.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (8.5%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

Basic Info
  • Host: GitHub
  • Owner: BigBuildBench
  • License: mit
  • Language: C#
  • Default Branch: master
  • Size: 2.24 MB
Statistics
  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created over 1 year ago · Last pushed over 1 year ago
Metadata Files
Readme License Code of conduct

README.md

order-matcher

order-matcher is a simple and fast library to build crypto-currency exchange, stock exchange or commodity exchange. order-matcher matches buy and sell orders using price-time priority algorithm. order-matcher supports multiple order types and able to excecute upto 1 million messages per seconds.

  • Support multiple order types
    • Limit
    • Market
    • Stop Loss
    • Stop Limit
      • Supports multiple options on order
    • Book or Cancel
    • Immediate or Cancel(IOC)
    • Fill or kill(FOK)
    • Iceberg
    • Good till Date(GTD)
    • Self Trade Prevention

1 Million orders per seconds on AWS c6a.xlarge instance

Supports integer & real numbers/decimal for price and quantity

Hand written serializer faster than any serializer. x15 times faster than JSON, x5 times faster than messagepack

Documentation

home

1. Terminology

2. Order

3. Frequently Asked Questions(FAQ)

Project Development Status : Actively maintained.

Community

Questions and pull requests are welcomed.

Are you building spot crypto exchange?

Chat with me on telegram at https://t.me/Arjun_Vachhani, I may be able to help you.

Code

```csharp

class Program { static void Main(string[] args) { //timeProvider will provide epoch var timeProvider = new TimeProvider();

    //create instance of matching engine.
    MatchingEngine matchingEngine = new MatchingEngine(new MyTradeListener(), new MyFeeProvider(), new Quantity(0.0000_0001m), 8);

    Order order1 = new Order { IsBuy = true, OrderId = 1, OpenQuantity = 0.01m, Price = 69_000 };
    //push new order engine.
    var addResult = matchingEngine.AddOrder(order1, timeProvider.GetSecondsFromEpoch());
    if (addResult == OrderMatchingResult.OrderAccepted)
    {
        // matching engine has accepted order
    }

    //cancel existing orders
    var cancelResult = matchingEngine.CancelOrder(1);//pass orderId to cancel
    if (cancelResult == OrderMatchingResult.CancelAcepted)
    {
        // cancel request is accepted
    }
}

}

//create a listener to receive events from matching engine. pass it to constructore of MatchingEngine class MyTradeListener : ITradeListener { public void OnAccept(OrderId orderId, UserId userId) { Console.WriteLine($"Order Accepted.... orderId : {orderId}"); }

public void OnCancel(OrderId orderId, UserId userId, Quantity remainingQuantity, Amount cost, Amount fee, CancelReason cancelReason)
{
    Console.WriteLine($"Order Cancelled.... orderId : {orderId}, remainingQuantity : {remainingQuantity}, cancelReason : {cancelReason}");
}

public void OnOrderTriggered(OrderId orderId, UserId userId)
{
    Console.WriteLine($"Stop Order Triggered.... orderId : {orderId}");
}

public void OnTrade(OrderId incomingOrderId, OrderId restingOrderId, UserId incomingUserId, UserId restingUserId, bool incomingOrderSide, Price matchPrice, Quantity matchQuantiy, Quantity? askRemainingQuantity, Amount? askFee, Amount? bidCost, Amount? bidFee)
{
    if (bidCost.HasValue)
    {
        // buy order completed
    }
    if (askRemainingQuantity.HasValue)
    {
        // sell order completed
    }

    Console.WriteLine($"Order matched.... incomingOrderId : {incomingOrderId}, restingOrderId : {restingOrderId}, executedQuantity : {matchQuantiy}, exetedPrice : {matchPrice}");
}

}

class MyFeeProvider : IFeeProvider { public Fee GetFee(short feeId) { return new Fee { TakerFee = 0.5m, //0.5% taker fee MakerFee = 0.1m, //0.1% maker fee }; } } ```

Owner

  • Name: BigBuildBench
  • Login: BigBuildBench
  • Kind: organization

abbr. B3, benchmarking the repo-level understanding capability of your LLMs by reconstructing project build-file.

GitHub Events

Total
  • Create event: 4
Last Year
  • Create event: 4

Dependencies

.github/workflows/dotnetcore.yml actions
  • actions/checkout master composite
  • actions/setup-dotnet v2 composite
OrderMatcher/OrderMatcher/OrderMatcher.csproj nuget
OrderMatcher/OrderMatcher.Performance/OrderMatcher.Performance.csproj nuget
OrderMatcher/OrderMatcher.Tests/OrderMatcher.Tests.csproj nuget
OrderMatcher/OrderMatcher.Types/OrderMatcher.Types.csproj nuget