Skip to content

Commit

Permalink
Issue #771 - The initial options multi-legs orders support was added:
Browse files Browse the repository at this point in the history
- Several attributes of order object now marked as nullable for proper multi-leg orders support
  • Loading branch information
OlegRa committed Jan 21, 2025
1 parent 0e25a40 commit 75c6547
Show file tree
Hide file tree
Showing 4 changed files with 163 additions and 16 deletions.
147 changes: 147 additions & 0 deletions Alpaca.Markets/CompatibilitySuppressions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,27 @@
<Right>lib/net462/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_AssetClass</Target>
<Left>lib/net462/Alpaca.Markets.dll</Left>
<Right>lib/net462/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_AssetId</Target>
<Left>lib/net462/Alpaca.Markets.dll</Left>
<Right>lib/net462/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_OrderSide</Target>
<Left>lib/net462/Alpaca.Markets.dll</Left>
<Right>lib/net462/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.LatestDataListRequest.#ctor(System.Collections.Generic.IEnumerable{System.String},Alpaca.Markets.CryptoExchange)</Target>
Expand Down Expand Up @@ -855,6 +876,27 @@
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_AssetClass</Target>
<Left>lib/net6.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_AssetId</Target>
<Left>lib/net6.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_OrderSide</Target>
<Left>lib/net6.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.LatestDataListRequest.#ctor(System.Collections.Generic.IEnumerable{System.String},Alpaca.Markets.CryptoExchange)</Target>
Expand Down Expand Up @@ -1156,6 +1198,27 @@
<Right>lib/netstandard2.0/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_AssetClass</Target>
<Left>lib/netstandard2.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.0/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_AssetId</Target>
<Left>lib/netstandard2.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.0/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_OrderSide</Target>
<Left>lib/netstandard2.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.0/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.LatestDataListRequest.#ctor(System.Collections.Generic.IEnumerable{System.String},Alpaca.Markets.CryptoExchange)</Target>
Expand Down Expand Up @@ -1457,6 +1520,27 @@
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_AssetClass</Target>
<Left>lib/netstandard2.1/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_AssetId</Target>
<Left>lib/netstandard2.1/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.IOrder.get_OrderSide</Target>
<Left>lib/netstandard2.1/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Alpaca.Markets.LatestDataListRequest.#ctor(System.Collections.Generic.IEnumerable{System.String},Alpaca.Markets.CryptoExchange)</Target>
Expand Down Expand Up @@ -1485,6 +1569,69 @@
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>P:Alpaca.Markets.IOrder.AssetClass</Target>
<Left>lib/net6.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>P:Alpaca.Markets.IOrder.AssetId</Target>
<Left>lib/net6.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>P:Alpaca.Markets.IOrder.OrderSide</Target>
<Left>lib/net6.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>P:Alpaca.Markets.IOrder.AssetClass</Target>
<Left>lib/netstandard2.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.0/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>P:Alpaca.Markets.IOrder.AssetId</Target>
<Left>lib/netstandard2.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.0/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>P:Alpaca.Markets.IOrder.OrderSide</Target>
<Left>lib/netstandard2.0/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.0/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>P:Alpaca.Markets.IOrder.AssetClass</Target>
<Left>lib/netstandard2.1/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>P:Alpaca.Markets.IOrder.AssetId</Target>
<Left>lib/netstandard2.1/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0006</DiagnosticId>
<Target>P:Alpaca.Markets.IOrder.OrderSide</Target>
<Left>lib/netstandard2.1/Alpaca.Markets.dll</Left>
<Right>lib/netstandard2.1/Alpaca.Markets.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Alpaca.Markets.AccountActivityType</Target>
Expand Down
8 changes: 4 additions & 4 deletions Alpaca.Markets/Interfaces/IOrder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,19 +70,19 @@ public interface IOrder
/// Gets unique asset identifier.
/// </summary>
[UsedImplicitly]
Guid AssetId { get; }
Guid? AssetId { get; }

/// <summary>
/// Gets asset symbol.
/// </summary>
[UsedImplicitly]
String Symbol { get; }
String? Symbol { get; }

/// <summary>
/// Gets asset class.
/// </summary>
[UsedImplicitly]
AssetClass AssetClass { get; }
AssetClass? AssetClass { get; }

/// <summary>
/// Gets original notional order quantity (with the fractional part).
Expand Down Expand Up @@ -128,7 +128,7 @@ public interface IOrder
/// Gets order side (buy or sell).
/// </summary>
[UsedImplicitly]
OrderSide OrderSide { get; }
OrderSide? OrderSide { get; }

/// <summary>
/// Gets order duration.
Expand Down
16 changes: 8 additions & 8 deletions Alpaca.Markets/Messages/JsonOrder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,14 +44,14 @@ internal sealed class JsonOrder : IOrder
[JsonConverter(typeof(AssumeUtcIsoDateTimeConverter))]
public DateTime? ReplacedAtUtc { get; [ExcludeFromCodeCoverage] set; }

[JsonProperty(PropertyName = "asset_id", Required = Required.Always)]
public Guid AssetId { get; set; }
[JsonProperty(PropertyName = "asset_id", Required = Required.Default)]
public Guid? AssetId { get; set; }

[JsonProperty(PropertyName = "symbol", Required = Required.Always)]
public String Symbol { get; set; } = String.Empty;
[JsonProperty(PropertyName = "symbol", Required = Required.Default)]
public String? Symbol { get; set; }

[JsonProperty(PropertyName = "asset_class", Required = Required.Always)]
public AssetClass AssetClass { get; set; }
[JsonProperty(PropertyName = "asset_class", Required = Required.Default)]
public AssetClass? AssetClass { get; set; }

[JsonProperty(PropertyName = "notional", Required = Required.Default)]
public Decimal? Notional { get; [ExcludeFromCodeCoverage] set; }
Expand All @@ -74,8 +74,8 @@ internal sealed class JsonOrder : IOrder
[JsonProperty(PropertyName = "order_class", Required = Required.Always)]
public OrderClass OrderClass { get; }

[JsonProperty(PropertyName = "side", Required = Required.Always)]
public OrderSide OrderSide { get; set; }
[JsonProperty(PropertyName = "side", Required = Required.Default)]
public OrderSide? OrderSide { get; set; }

[JsonProperty(PropertyName = "time_in_force", Required = Required.Always)]
public TimeInForce TimeInForce { get; set; }
Expand Down
8 changes: 4 additions & 4 deletions Alpaca.Markets/PublicAPI.Shipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -753,8 +753,8 @@ Alpaca.Markets.IOptionSnapshot.Quote.get -> Alpaca.Markets.IQuote?
Alpaca.Markets.IOptionSnapshot.Symbol.get -> string!
Alpaca.Markets.IOptionSnapshot.Trade.get -> Alpaca.Markets.ITrade?
Alpaca.Markets.IOrder
Alpaca.Markets.IOrder.AssetClass.get -> Alpaca.Markets.AssetClass
Alpaca.Markets.IOrder.AssetId.get -> System.Guid
Alpaca.Markets.IOrder.AssetClass.get -> Alpaca.Markets.AssetClass?
Alpaca.Markets.IOrder.AssetId.get -> System.Guid?
Alpaca.Markets.IOrder.AverageFillPrice.get -> decimal?
Alpaca.Markets.IOrder.CancelledAtUtc.get -> System.DateTime?
Alpaca.Markets.IOrder.ClientOrderId.get -> string?
Expand All @@ -770,7 +770,7 @@ Alpaca.Markets.IOrder.Legs.get -> System.Collections.Generic.IReadOnlyList<Alpac
Alpaca.Markets.IOrder.LimitPrice.get -> decimal?
Alpaca.Markets.IOrder.OrderClass.get -> Alpaca.Markets.OrderClass
Alpaca.Markets.IOrder.OrderId.get -> System.Guid
Alpaca.Markets.IOrder.OrderSide.get -> Alpaca.Markets.OrderSide
Alpaca.Markets.IOrder.OrderSide.get -> Alpaca.Markets.OrderSide?
Alpaca.Markets.IOrder.OrderStatus.get -> Alpaca.Markets.OrderStatus
Alpaca.Markets.IOrder.OrderType.get -> Alpaca.Markets.OrderType
Alpaca.Markets.IOrder.ReplacedAtUtc.get -> System.DateTime?
Expand All @@ -780,7 +780,7 @@ Alpaca.Markets.IOrder.Quantity.get -> decimal?
Alpaca.Markets.IOrder.Notional.get -> decimal?
Alpaca.Markets.IOrder.StopPrice.get -> decimal?
Alpaca.Markets.IOrder.SubmittedAtUtc.get -> System.DateTime?
Alpaca.Markets.IOrder.Symbol.get -> string!
Alpaca.Markets.IOrder.Symbol.get -> string?
Alpaca.Markets.IOrder.TimeInForce.get -> Alpaca.Markets.TimeInForce
Alpaca.Markets.IOrder.TrailOffsetInDollars.get -> decimal?
Alpaca.Markets.IOrder.TrailOffsetInPercent.get -> decimal?
Expand Down

0 comments on commit 75c6547

Please sign in to comment.