Skip to content

Commit bbc8edd

Browse files
committed
Issues
1 parent 92c3d86 commit bbc8edd

7 files changed

Lines changed: 48 additions & 33 deletions

File tree

Core/Core/Services/SchedulerService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class SchedulerService : IDisposable
3131
public SchedulerService(int count, CancellationTokenSource cleaner)
3232
{
3333
this.cleaner = cleaner;
34+
3435
queue = Channel.CreateBounded<Action>(new BoundedChannelOptions(count)
3536
{
3637
SingleReader = false,

Dashboard/Dashboard/Pages/Futures/Leads.razor.cs

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ public partial class Leads
2323
OrdersComponent OrdersView { get; set; }
2424
PositionsComponent PositionsView { get; set; }
2525
StatementsComponent StatementsView { get; set; }
26-
2726
PerformanceIndicator Performance { get; set; }
28-
2927
Dictionary<string, ScaleIndicator> Scales { get; set; }
3028

3129
Price PreviousLeader { get; set; }
@@ -52,7 +50,7 @@ protected override async Task OnView()
5250

5351
protected override Task OnTrade()
5452
{
55-
var adapter = Adapters["Prime"] = new SimGateway
53+
var adapter = Adapter = new SimGateway
5654
{
5755
Connector = Connector,
5856
Source = Configuration["Documents:Resources"] + "/FUTS/2025-06-17",
@@ -78,7 +76,7 @@ protected override Task OnTrade()
7876
protected override async void OnViewUpdate(Instrument instrument)
7977
{
8078
var price = instrument.Price;
81-
var adapter = Adapters["Prime"];
79+
var adapter = Adapter;
8280
var account = adapter.Account;
8381
var assetX = account.Instruments["ESU25"];
8482
var assetY = account.Instruments["NQU25"];
@@ -110,8 +108,13 @@ protected override async void OnViewUpdate(Instrument instrument)
110108

111109
protected override async Task OnTradeUpdate(Instrument instrument)
112110
{
111+
if (Equals(instrument.Name, "ESU25") is false)
112+
{
113+
return;
114+
}
115+
113116
var price = instrument.Price;
114-
var adapter = Adapters["Prime"];
117+
var adapter = Adapter;
115118
var account = adapter.Account;
116119
var assetX = account.Instruments["ESU25"];
117120
var assetY = account.Instruments["NQU25"];
@@ -123,36 +126,39 @@ protected override async Task OnTradeUpdate(Instrument instrument)
123126
return;
124127
}
125128

126-
var orders = (await adapter.GetOrders(default)).Data;
127-
var positions = (await adapter.GetPositions(default)).Data;
129+
var orders = (await adapter.GetOrders(new() { Source = true })).Data;
130+
var positions = (await adapter.GetPositions(new() { Source = true })).Data;
128131
var performance = await Performance.Update([adapter]);
129132
var scaleX = await Scales[assetX.Name].Update(seriesX);
130133
var scaleY = await Scales[assetY.Name].Update(seriesY);
131134
var priceX = seriesX.Last();
132135
var priceY = seriesY.Last();
133136
var spread = Math.Abs((scaleX.Response.Last - scaleY.Response.Last).Value);
134137

135-
if (orders.Count is 0 && positions.Count is 0 && spread > 0.1)
138+
if (orders.Count is 0)
136139
{
137-
var isLong = scaleX.Response.Last > PreviousLeader.Last && scaleX.Response.Last > scaleY.Response.Last;
138-
var isShort = scaleX.Response.Last < PreviousLeader.Last && scaleX.Response.Last < scaleY.Response.Last;
139-
140-
switch (true)
140+
if (PreviousLeader is not null && positions.Count is 0 && spread > 0.1)
141141
{
142-
case true when isLong: await OpenPosition(adapter, assetY, OrderSideEnum.Long); break;
143-
case true when isShort: await OpenPosition(adapter, assetY, OrderSideEnum.Short); break;
142+
var isLong = scaleX.Response.Last > PreviousLeader.Last && scaleX.Response.Last > scaleY.Response.Last;
143+
var isShort = scaleX.Response.Last < PreviousLeader.Last && scaleX.Response.Last < scaleY.Response.Last;
144+
145+
switch (true)
146+
{
147+
case true when isLong: await OpenPosition(adapter, assetY, OrderSideEnum.Long); break;
148+
case true when isShort: await OpenPosition(adapter, assetY, OrderSideEnum.Short); break;
149+
}
144150
}
145-
}
146-
147-
if (positions.Count is not 0 && orders.Count is 0)
148-
{
149-
var pos = positions.First();
150-
var closeLong = pos.Side is OrderSideEnum.Long && scaleX.Response.Last < scaleY.Response.Last;
151-
var closeShort = pos.Side is OrderSideEnum.Short && scaleX.Response.Last > scaleY.Response.Last;
152151

153-
if (closeLong || closeShort)
152+
if (positions.Count is not 0)
154153
{
155-
await ClosePosition(adapter);
154+
var pos = positions.First();
155+
var closeLong = pos.Side is OrderSideEnum.Long && scaleX.Response.Last < scaleY.Response.Last;
156+
var closeShort = pos.Side is OrderSideEnum.Short && scaleX.Response.Last > scaleY.Response.Last;
157+
158+
if (closeLong || closeShort)
159+
{
160+
await ClosePosition(adapter);
161+
}
156162
}
157163
}
158164

Dashboard/Dashboard/Pages/Options/ShortConvexProtection.razor.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
using Canvas.Core.Shapes;
2-
using Core.Conventions;
32
using Core.Enums;
43
using Core.Indicators;
54
using Core.Models;
65
using Dashboard.Components;
76
using Dashboard.Services;
8-
using Lib = QuantLib;
97
using Simulation;
108
using SkiaSharp;
119
using System;
1210
using System.Collections.Generic;
1311
using System.Data;
1412
using System.Linq;
1513
using System.Threading.Tasks;
14+
using Lib = QuantLib;
1615

1716
namespace Dashboard.Pages.Options
1817
{
@@ -84,7 +83,7 @@ protected override async Task OnView()
8483
protected override Task OnTrade()
8584
{
8685
Performance = new PerformanceIndicator();
87-
Adapters["Prime"] = new SimGateway
86+
Adapter = new SimGateway
8887
{
8988
Connector = Connector,
9089
Source = Configuration["Documents:Resources"],

Dashboard/Dashboard/Pages/Options/ShortDelta.razor.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ protected override async Task OnView()
4545
protected override Task OnTrade()
4646
{
4747
Performance = new PerformanceIndicator();
48-
Adapters["Prime"] = new SimGateway
48+
Adapter = new SimGateway
4949
{
5050
Connector = Connector,
5151
Source = Configuration["Documents:Resources"],
@@ -63,7 +63,7 @@ protected override Task OnTrade()
6363
protected override async void OnViewUpdate(Instrument instrument)
6464
{
6565
var price = instrument.Price;
66-
var adapter = Adapters["Prime"];
66+
var adapter = Adapter;
6767
var account = adapter.Account;
6868
var performance = await Performance.Update(Adapters.Values);
6969

@@ -78,7 +78,7 @@ protected override async void OnViewUpdate(Instrument instrument)
7878
protected override async Task OnTradeUpdate(Instrument instrument)
7979
{
8080
var price = instrument.Price;
81-
var adapter = Adapters["Prime"];
81+
var adapter = Adapter;
8282
var options = await GetOptions(price, new DateTime(price.Time.Value));
8383
var orders = (await adapter.GetOrders(default)).Data;
8484
var positions = (await adapter.GetPositions(default)).Data;
@@ -102,7 +102,7 @@ protected override async Task OnTradeUpdate(Instrument instrument)
102102
/// </summary>
103103
(double, double) UpdateIndicators(Price point, IList<Order> positions)
104104
{
105-
var adapter = Adapters["Prime"];
105+
var adapter = Adapter;
106106
var account = adapter.Account;
107107
var comUp = new ComponentModel { Color = SKColors.DeepSkyBlue };
108108
var comDown = new ComponentModel { Color = SKColors.OrangeRed };
@@ -153,7 +153,7 @@ Order GetUpdate(double basisDelta, double optionDelta)
153153
/// <param name="date"></param>
154154
async Task<IList<Instrument>> GetOptions(Price price, DateTime date)
155155
{
156-
var adapter = Adapters["Prime"];
156+
var adapter = Adapter;
157157
var screener = new Criteria
158158
{
159159
MinDate = date,

Dashboard/Dashboard/Program.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@
55
using Microsoft.Extensions.Configuration;
66
using Microsoft.Extensions.DependencyInjection;
77
using Microsoft.Extensions.Hosting;
8+
using Microsoft.Extensions.Options;
89
using MudBlazor;
910
using MudBlazor.Services;
1011
using Orleans;
12+
using Orleans.Configuration;
1113
using Orleans.Hosting;
1214
using Orleans.Providers;
1315
using Orleans.Serialization;
16+
using System;
1417

1518
namespace Dashboard
1619
{
@@ -34,6 +37,13 @@ public static void Main(string[] args)
3437
options.Host = setup.GetValue<string>("Apps:Dashboard:Host");
3538
});
3639

40+
orleans.Configure<GrainCollectionOptions>(options =>
41+
{
42+
options.CollectionAge = TimeSpan.FromDays(100);
43+
options.CollectionQuantum = TimeSpan.FromDays(1);
44+
options.DeactivationTimeout = TimeSpan.FromDays(1);
45+
});
46+
3747
orleans.ConfigureServices(services =>
3848
{
3949
var converter = new ConversionService();

Gateways/Simulation/Libs/SimGateway.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public override Task<InstrumentsResponse> GetOptions(Criteria criteria)
105105
/// <param name="criteria"></param>
106106
public override Task<OrdersResponse> GetOrders(Criteria criteria)
107107
{
108-
return Component<IOrdersGrain>().Orders(criteria);
108+
return Component<ISimOrdersGrain>().Orders(criteria);
109109
}
110110

111111
/// <summary>

Gateways/Tradier/Libs/Grains/OrderSenderGrain.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using Core.Models;
44
using System.Collections.Generic;
55
using System.Linq;
6-
using System.Security.Principal;
76
using System.Threading;
87
using System.Threading.Tasks;
98
using Tradier.Messages.Trading;

0 commit comments

Comments
 (0)