Skip to content

Commit d9d1fbf

Browse files
committed
Gateways
1 parent 6087cdf commit d9d1fbf

File tree

8 files changed

+93
-89
lines changed

8 files changed

+93
-89
lines changed

Core/Core.Tests/Core.Common.Tests.csproj

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,18 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="coverlet.collector" Version="6.0.2" />
12-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
11+
<PackageReference Include="coverlet.collector" Version="6.0.4">
12+
<PrivateAssets>all</PrivateAssets>
13+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
14+
</PackageReference>
15+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
1316
<PackageReference Include="Microsoft.Orleans.TestingHost" Version="9.2.1" />
1417
<PackageReference Include="Moq" Version="4.20.72" />
15-
<PackageReference Include="xunit" Version="2.9.2" />
16-
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
18+
<PackageReference Include="xunit" Version="2.9.3" />
19+
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
20+
<PrivateAssets>all</PrivateAssets>
21+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
22+
</PackageReference>
1723
</ItemGroup>
1824

1925
<ItemGroup>

Core/Core/Core.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="FluentValidation" Version="12.0.0" />
10+
<PackageReference Include="FluentValidation" Version="12.1.0" />
1111
<PackageReference Include="Microsoft.Orleans.Sdk" Version="9.2.1" />
1212
<PackageReference Include="Microsoft.Orleans.Serialization.MessagePack" Version="9.2.1" />
1313
<PackageReference Include="Microsoft.Orleans.Streaming" Version="9.2.1" />

Dashboard/Dashboard/Dashboard.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<PackageReference Include="Microsoft.Orleans.Runtime.Abstractions" Version="3.8.0" />
1515
<PackageReference Include="MudBlazor" Version="8.6.0" />
1616
<PackageReference Include="OrleansDashboard" Version="8.2.0" />
17-
<PackageReference Include="QuantLib" Version="1.39.0" />
17+
<PackageReference Include="QuantLib" Version="1.40.0" />
1818
<PackageReference Include="Microsoft.Orleans.Server" Version="9.2.1" />
1919
<PackageReference Include="Microsoft.Orleans.Streaming" Version="9.2.1" />
2020
</ItemGroup>

Gateways/InteractiveBrokers/Libs/Grains/ConnectionGrain.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,18 @@ public interface IInterConnectionGrain : IConnectionGrain
5454
/// <param name="criteria"></param>
5555
Task<InstrumentsResponse> Options(Criteria criteria);
5656

57+
/// <summary>
58+
/// Send order
59+
/// </summary>
60+
/// <param name="order"></param>
61+
Task<OrderResponse> SendOrder(Core.Models.Order order);
62+
63+
/// <summary>
64+
/// Clear order
65+
/// </summary>
66+
/// <param name="order"></param>
67+
Task<DescriptorResponse> ClearOrder(Core.Models.Order order);
68+
5769
/// <summary>
5870
/// Sync open balance, order, and positions
5971
/// </summary>
@@ -342,5 +354,47 @@ public virtual async Task<OrdersResponse> Orders(Criteria criteria)
342354
Data = items
343355
};
344356
}
357+
358+
/// <summary>
359+
/// Send order
360+
/// </summary>
361+
/// <param name="order"></param>
362+
public virtual async Task<OrderResponse> SendOrder(Core.Models.Order order)
363+
{
364+
var descriptor = this.GetDescriptor();
365+
var cleaner = new CancellationTokenSource(state.Timeout);
366+
var contract = Upstream.MapContract(order.Operation.Instrument);
367+
var (orderMessage, SL, TP) = Upstream.MapOrder(connector.Id, order, state.Account);
368+
var ordersGrain = GrainFactory.GetGrain<IOrdersGrain>(descriptor);
369+
370+
await connector.SendOrder(cleaner.Token, contract, orderMessage, SL, TP);
371+
await ordersGrain.Send(order);
372+
await Task.Delay(state.Span);
373+
374+
return new()
375+
{
376+
Data = order
377+
};
378+
}
379+
380+
/// <summary>
381+
/// Clear order
382+
/// </summary>
383+
/// <param name="order"></param>
384+
public virtual async Task<DescriptorResponse> ClearOrder(Core.Models.Order order)
385+
{
386+
var descriptor = this.GetDescriptor();
387+
var cleaner = new CancellationTokenSource(state.Timeout);
388+
var ordersGrain = GrainFactory.GetGrain<IOrdersGrain>(descriptor);
389+
390+
await connector.ClearOrder(cleaner.Token, int.Parse(order.Id));
391+
await ordersGrain.Clear(order);
392+
await Task.Delay(state.Span);
393+
394+
return new()
395+
{
396+
Data = order.Id
397+
};
398+
}
345399
}
346400
}

Gateways/InteractiveBrokers/Libs/InterGateway.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,18 +143,18 @@ public override Task<OrdersResponse> GetTransactions(Criteria criteria)
143143
/// Send order
144144
/// </summary>
145145
/// <param name="order"></param>
146-
public override Task<OrderGroupResponse> SendOrder(Order order)
146+
public override async Task<OrderGroupResponse> SendOrder(Order order) => new OrderGroupResponse
147147
{
148-
return Component<IOrdersGrain>().Send(order);
149-
}
148+
Data = [await Component<IInterConnectionGrain>().SendOrder(order)]
149+
};
150150

151151
/// <summary>
152152
/// Clear order
153153
/// </summary>
154154
/// <param name="order"></param>
155155
public override Task<DescriptorResponse> ClearOrder(Order order)
156156
{
157-
return Component<IOrdersGrain>().Clear(order);
157+
return Component<IInterConnectionGrain>().ClearOrder(order);
158158
}
159159
}
160160
}

Gateways/InteractiveBrokers/Libs/InteractiveBrokers.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="InterBroker" Version="0.0.10" />
10+
<PackageReference Include="InterBroker" Version="0.0.12" />
1111
</ItemGroup>
1212

1313
<ItemGroup>

Gateways/InteractiveBrokers/Libs/Maps/Upstream.cs

Lines changed: 12 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
using Core.Enums;
22
using Core.Models;
33
using IBApi;
4-
using IBApi.Messages;
5-
using System.Collections.Generic;
64
using System.Linq;
75

86
namespace InteractiveBrokers.Mappers
@@ -15,21 +13,18 @@ public class Upstream
1513
/// <param name="orderId"></param>
1614
/// <param name="orderModel"></param>
1715
/// <param name="account"></param>
18-
public static IList<OpenOrderMessage> MapOrder(int orderId, Core.Models.Order orderModel, Account account)
16+
public static (IBApi.Order, double?, double?) MapOrder(int orderId, Core.Models.Order orderModel, Account account)
1917
{
20-
var order = new IBApi.Order();
21-
var action = orderModel.Operation;
22-
var instrument = action.Instrument;
23-
var contract = MapContract(action.Instrument);
24-
var response = new List<OpenOrderMessage>();
25-
26-
order.OrderId = orderId;
27-
order.Action = MapSide(orderModel.Side);
28-
order.Tif = MapTimeSpan(orderModel.TimeSpan);
29-
order.OrderType = MapOrderType(orderModel.Type);
30-
order.TotalQuantity = (decimal)orderModel.Amount;
31-
order.ExtOperator = orderModel.Descriptor;
32-
order.Account = account.Name;
18+
var order = new IBApi.Order
19+
{
20+
OrderId = orderId,
21+
Action = MapSide(orderModel.Side),
22+
Tif = MapTimeSpan(orderModel.TimeSpan),
23+
OrderType = MapOrderType(orderModel.Type),
24+
TotalQuantity = (decimal)orderModel.Amount,
25+
ExtOperator = orderModel.Descriptor,
26+
Account = account.Name
27+
};
3328

3429
switch (orderModel.Type)
3530
{
@@ -44,64 +39,7 @@ public static IList<OpenOrderMessage> MapOrder(int orderId, Core.Models.Order or
4439
var TP = MapBracePrice(orderModel, orderModel.Side is OrderSideEnum.Long ? 1 : -1);
4540
var SL = MapBracePrice(orderModel, orderModel.Side is OrderSideEnum.Long ? -1 : 1);
4641

47-
response = [.. MapBrace(order, SL, TP).Select(o => new OpenOrderMessage(orderId, contract, order, null)
48-
{
49-
Order = o,
50-
Contract = contract
51-
})];
52-
53-
return response;
54-
}
55-
56-
/// <summary>
57-
/// Bracket template
58-
/// </summary>
59-
/// <param name="order"></param>
60-
/// <param name="stopPrice"></param>
61-
/// <param name="takePrice"></param>
62-
public static IList<IBApi.Order> MapBrace(IBApi.Order order, double? stopPrice, double? takePrice)
63-
{
64-
var orders = new List<IBApi.Order> { order };
65-
66-
if (takePrice is not null)
67-
{
68-
order.Transmit = false;
69-
70-
var TP = new IBApi.Order
71-
{
72-
OrderType = "LMT",
73-
OrderId = order.OrderId + 1,
74-
Action = order.Action.Equals("BUY") ? "SELL" : "BUY",
75-
TotalQuantity = order.TotalQuantity,
76-
LmtPrice = takePrice.Value,
77-
ParentId = order.OrderId,
78-
Transmit = false
79-
};
80-
81-
orders.Add(TP);
82-
}
83-
84-
if (stopPrice is not null)
85-
{
86-
order.Transmit = false;
87-
88-
var SL = new IBApi.Order
89-
{
90-
OrderType = "STP",
91-
OrderId = order.OrderId + 2,
92-
Action = order.Action.Equals("BUY") ? "SELL" : "BUY",
93-
TotalQuantity = order.TotalQuantity,
94-
AuxPrice = stopPrice.Value,
95-
ParentId = order.OrderId,
96-
Transmit = false
97-
};
98-
99-
orders.Add(SL);
100-
}
101-
102-
orders.Last().Transmit = true;
103-
104-
return orders;
42+
return (order, TP, SL);
10543
}
10644

10745
/// <summary>

Gateways/Simulation/Tests/Simulation.Tests.csproj

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,18 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="coverlet.collector" Version="6.0.2" />
12-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
11+
<PackageReference Include="coverlet.collector" Version="6.0.4">
12+
<PrivateAssets>all</PrivateAssets>
13+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
14+
</PackageReference>
15+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
1316
<PackageReference Include="Microsoft.Orleans.TestingHost" Version="9.2.1" />
1417
<PackageReference Include="Moq" Version="4.20.72" />
15-
<PackageReference Include="xunit" Version="2.9.2" />
16-
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
18+
<PackageReference Include="xunit" Version="2.9.3" />
19+
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
20+
<PrivateAssets>all</PrivateAssets>
21+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
22+
</PackageReference>
1723
</ItemGroup>
1824

1925
<ItemGroup>

0 commit comments

Comments
 (0)