LemonMarketsApiSharp 1.0.1-alpha
dotnet add package LemonMarketsApiSharp --version 1.0.1-alpha
NuGet\Install-Package LemonMarketsApiSharp -Version 1.0.1-alpha
<PackageReference Include="LemonMarketsApiSharp" Version="1.0.1-alpha" />
paket add LemonMarketsApiSharp --version 1.0.1-alpha
#r "nuget: LemonMarketsApiSharp, 1.0.1-alpha"
// Install LemonMarketsApiSharp as a Cake Addin #addin nuget:?package=LemonMarketsApiSharp&version=1.0.1-alpha&prerelease // Install LemonMarketsApiSharp as a Cake Tool #tool nuget:?package=LemonMarketsApiSharp&version=1.0.1-alpha&prerelease
LemonMarketsSharpApi
A C# wrapper around the Lemon Markets Stocks & ETF API (https://docs.lemon.markets/)
Nuget
Get the latest version from nuget.org<br>
Supported Endpoints
Endpoint | Implemented | Tests available |
---|---|---|
MarketData | ✅ | ✅ |
PaperTrading | ✅ | ✅ |
LiveTrading | ✅ | ✅ |
LiveStreaming | ✅ | ✅ |
Usage
Some usage examples.
Create a client
In order to create a LemonMarketsClient
you either can create a new instance of it, or yous the LemonMarketsConnectionBuilder
.
const string api = "demo";
LemonMarketsClient client = new LemonMarketsClient.LemonMarketsConnectionBuilder()
.WithMarketTrading() // The api has an endpoint for trading and market data api. Use one instance per api you want to use
.WithApiKey(apiKey: api) // Keep in mind that you need different api keys for marketdata and trading
.Build();
// Make sure that you check if the server is online first, otherwise no requests will work!
await client.CheckOnlineAsync();
MarketData
Search instruments
The api works with ISIN (International Securities Identification Number). Most known stocks symbols are available with the LemonMarketsSymbols
struct.
However, you also can search the api.
var searchResult = await client.GetInstrumentsAsync("", "BASF");
var results = searchResult.Results; // Holds the results of the search
For missing default symbols, you can commit to the LemonMarketsSymbols
struct file.
Get Venues
var venues = await client.GetVenuesAsync();
var result = venues.Result; // Will hold the found venues
Get Quotes
var quotes = await client.GetQuotesAsync(LemonMarketsSymbols.BASF);
var result = quotes.Result; // Will hold the found quotes
Get OHLC (Open, High, Low, Close)
var ohlc = await client.GetOHLCAsync(LemonMarketsSymbols.BASF, LemonMarketsIntervals.PerDay);
var result = ohlc.Result; // Will hold the result
Get Trades
var trades = await client.GetTradesAsync(LemonMarketsSymbols.BASF);
var result = trades.Result; // Will hold the trades
Trading (Paper and LiveTrading)
With the trading enpoint fetch account infos, bank statements and documents. Moreover you can manage orders, withdrawals and many more.
LemonMarketsAccountInfoRespone accountInfo = await client.GetAccountInformationAsync();
Assert.IsNotNull(accountInfo?.Results);
Please visit the UnitTests for more examples.
LiveStreaming
With LiveStreaming you can subscribe to events. This feature uses the Ably .NET Nuget (https://github.com/ably/ably-dotnet), which is mandatory.
Example
try
{
LemonMarketsClient client = new LemonMarketsClient.LemonMarketsConnectionBuilder()
.WithLiveStreaming()
.WithApiKey(apiKey: api_trading)
.Build();
Assert.IsNotNull(client);
client.Error += (sender, args) =>
{
if (args is UnhandledExceptionEventArgs unhandled)
{
Assert.Fail($"{unhandled.ExceptionObject}");
}
};
await client.CheckOnlineAsync();
Assert.IsTrue(client.IsOnline);
var auth = await client.LiveStreamAuthAsync();
Assert.IsNotNull(auth);
Assert.IsNotNull(auth.UserId);
AblyRealtime ably = client.SetupRealtimeLiveStreamConnection(auth);
Assert.IsNotNull(ably);
List<string> subscribedIsins = new List<string>()
{
"US64110L1061", // Netflix
"US88160R1014", // Tesla
};
ably = await client.SubscribeMessagesAsync(ably, auth, (msg) =>
{
Debug.WriteLine($"Message: {msg.Name} => {msg.Data}");
}, subscribedIsins);
ably = client.SetupMessagingChannel(ably, auth.UserId, (msg) =>
{
Debug.WriteLine($"Message: {msg.Name} => {msg.Data}");
});
CancellationTokenSource cts = new CancellationTokenSource(new TimeSpan(0, 30, 0));
do
{
await Task.Delay(1000);
}
while (!cts.IsCancellationRequested);
}
catch (Exception exc)
{
Assert.Fail(exc.Message);
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. 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 was computed. 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 was computed. 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. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- ably.io (>= 1.2.9)
- RCoreSharp (>= 1.0.8)
- RestSharp (>= 108.0.2)
- System.Memory (>= 4.5.5)
-
net6.0
- ably.io (>= 1.2.9)
- RCoreSharp (>= 1.0.8)
- RestSharp (>= 108.0.2)
- System.Memory (>= 4.5.5)
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-alpha | 152 | 10/18/2022 |
1.0.0-alpha | 108 | 9/29/2022 |