Compare commits

...
Author SHA1 Message Date
John Colvin 4826fc9237 build: Remove dependency on Newtonsoft.Json (in DataStreamCore)
Replace with System.Text.Json (official dotnet)
2026-02-23 13:03:49 -05:00
John Colvin c3341ec29f refactor: Replace a few more DataPacket refs with IDataPacket 2026-02-23 12:56:27 -05:00
John Colvin eb88052c7e chore: Add Metadata prop to IDataPacket
To give it parity with DataPacket
2026-02-23 12:55:23 -05:00
John Colvin 74332f9944 fix: Pass IMarketDataClient to PrimitiveManager to enable md streams
In DataStreamQueryAnalyzer and Spark Api Server
2026-02-23 11:24:33 -05:00
John Colvin 54c97b5610 fix: Set buffer Position to 0 when deserializing pubsub echo payload 2026-02-21 16:36:53 -05:00
John Colvin 5c05afd9b3 fix: Only fire stream update if there are actually changes
In other words, don't fire if addedRows and deletedRows are both empty.
2026-02-21 16:36:53 -05:00
John Colvin dcbba39e4a fix: Add null check in BlueDataUtility.build_dp_inc 2026-02-21 16:36:53 -05:00
John Colvin d09f22007e fix: Ensure PubSubTagHandlerFactory uses correct config
* Add this service as part of the PubSubClient services for dep
  injection (it is needed by PublisherCore)

* Get rid of PublisherCore's default constructor, so dep injection
  treats the tag handler factory as a required param (fails if it isn't
  available)
  - Replace the default ctr with a static "Create" fn, so code that
    hasn't been updated to use dependency injection can still use that.
  - Use PubSubConfig.Instance (runtime) instead of compile time Default

* Fix compile time Default config
  - In fallback handler config, change Tag from "" to ".*" and move it
    from the beginning of the list to the end (it should be the last
    resort, not the other way around).
2026-02-21 16:36:53 -05:00
John Colvin a07e7ea6b8 fix: Don't call MasterWorker/vsd doWork on DSQA ui thread
Now that we use dependency injection, this is handled by a dedicated
service (MasterWorkerService). As a side effect, stream updates aren't
necessarily fired on the ui thread, so we refresh the grid on a form
timer callback.
2026-02-21 16:36:47 -05:00
John Colvin 4da52ff724 fix: Replace DataPacket w/ IDataPacket in DSQA 2026-02-21 14:49:39 -05:00
John Colvin 05c7a32fc5 refactor: Add parameterless ctr to PubsubEchoTestStream
So it's quick/easy to check in DSQA (less typing required)
2026-02-21 14:23:51 -05:00
John Colvin 404d3073f9 ui: Unhide PubsubHeartbeatStream (pss_hb) from DSQA 2026-02-21 14:11:46 -05:00
John Colvin 7f1154d70c cleanup: Fix indentation in PubsubHeartbeatStream.cs 2026-02-21 14:10:11 -05:00
John Colvin 5bc2e29096 fix build: Only check "dsqa" flag when building on windows
The --dsqa opt isn't defined when running on linux.
2026-02-21 17:55:12 +00:00
John Colvin f5731a184c fix: Actually disable Spark in default DSQA config 2026-02-20 11:08:33 -05:00
John Colvin 120fe8e5c6 vscode: Add DSQA debug config to skip build 2026-02-20 10:44:19 -05:00
John Colvin 137fdc537d refactor: Move DSQA config to appsettings.json 2026-02-20 10:43:13 -05:00
John Colvin a605e57bee build: Add dsqa toggle to build_data_stream.py
Windows only
2026-02-20 02:33:38 -05:00
John Colvin 3ca4bf784c ui: Remove bts.BlueOrb namespace filter for DSQA streams 2026-02-20 02:13:17 -05:00
John Colvin 6c3b7ebdaf refactor: Use dependency injection in DSQA 2026-02-20 02:13:17 -05:00
John Colvin 2fbb6fe563 Disable Spark in default DSQA config 2026-02-20 02:13:17 -05:00
John Colvin 9ea33ac110 ui: Unhide PubSubServerStateStream (pss_state) from DSQA 2026-02-20 02:13:17 -05:00
John Colvin 0bc021912a fix: Replace more DataPacket references with IDataPacket 2026-02-20 02:13:17 -05:00
John Colvin fa017bd9ff fix build: Remove old ViewStream.rows references from dsqa
The 'rows' prop no longer exists
2026-02-20 02:13:17 -05:00
John Colvin 57b59215e6 fix build: Don't echo parenthesis in .cmd if block
It's not allowed (because windows).
2026-02-18 02:54:25 -05:00
arham 210768e391 fix: handle badrequests in websocket api 2026-02-18 05:40:27 +00:00
arham f01e8a578d Add: enter synthetic spreader orders through 2026-02-18 05:36:02 +00:00
arham 528a00cf98 Add: config for okx_bin_sim 2026-02-18 05:31:18 +00:00
arham 96a04a7c84 Fix: side and status to json in orderrecodtuple 2026-02-18 05:30:28 +00:00
arham abaf48beb4 Add: other fields to tosjon for security.cs 2026-02-18 05:29:03 +00:00
John Colvin 08fcae94c0 Update externals (moved emumba deribit deb to bitbucket cloud) 2026-02-17 18:16:22 +00:00
John Colvin 30814a2ed6 fix build: Fix Bts.Extensions.Hosting projref path 2026-02-15 16:48:02 +00:00
John Colvin 3c61de5f13 devcontainer: Install Rakurai deb
Download from bitbucket cloud.
2026-02-14 18:43:07 +00:00
John Colvin 771c58d4ad devcontainer: Move emumba deb to bitbucket cloud
I just learned that Bitbucket offers per-repo cloud storage for arbitary
files (the "Downloads" section on the web gui). Doing this before adding
another third-party deb to our build (rakurai), which is quite large at
140MB. We don't want to pack that into our repo.
2026-02-14 18:42:03 +00:00
John Colvin 5db5d40a99 devcontainer: Fix CMake NO_PUBLIC_KEY warning 2026-02-14 18:29:28 +00:00
John Colvin 020ec9c6bf build: Replace proj refs w/ internal nugets when packing 2026-02-03 16:57:32 +00:00
John Colvin 4e28835bbd vscode: Add tools/py to shell PYTHONPATH 2026-02-03 16:57:32 +00:00
John Colvin 6985fbb090 refactor: Move CompressionUtilities into separate csproj
It was nested in PubSub. The new csproj is named Bts.IO.Compression.
2026-02-03 16:57:32 +00:00
John Colvin 2f42311220 build: Update a few python packages
* protobuf         4.21.12 -> 6.33.4
* pybind11         2.13.6 --> 3.0.1
* pybind11-stubgen 2.5.3 ---> 2.5.5
2026-02-03 16:57:32 +00:00
John Colvin 3842efcef1 build: Define build py requirements in separate files
No need to install backend build deps when building the front-end, and
vice versa. The build scripts (build_spark.cmd, build_sparkd.sh, etc.)
automatically install only the necessary requirements now.

Note: We'll keep the monolith requirements.txt file around (at least for
now), as it includes more than just build deps (e.g., numpy, pandas, and
jupyter for data analysis; pybit for bybit plugins, etc.).
2026-02-03 16:57:32 +00:00
John Colvin 635107eb68 cleanup: Remove unused py code 2026-02-03 05:20:29 +00:00
John Colvin 1b9a49b924 cleanup: Add missing files and env vars to sparkd config profiles 2026-02-03 05:20:29 +00:00
John Colvin ead35389d5 build: Make PubSub packable 2026-02-03 05:20:29 +00:00
John Colvin 22b44845fb build: Update Microsoft.AspNetCore.Cors to 2.3.9 2026-02-03 05:20:29 +00:00
John Colvin 8ab26f3e1d build: Remove dependency on Newtonsoft.Json
Replace with System.Text.Json (official dotnet)
2026-02-03 05:16:21 +00:00
John Colvin 01c61bb16d fix build: Publish spark_api_server csproj instead of the sln
There's a version conflict with System.Data.Common when publishing the sln.
2026-01-22 05:50:49 +00:00
John Colvin e09e49ce56 fix build: Add Bts.Net to Spark.Api.Server.sln
It seems like the dep is automatically detected on windows, but not
linux (so we need to add it explicitly).
2026-01-21 15:06:00 -05:00
John Colvin e6cc20858b build: Honor "UseProjectRefs" in spark_websocket, spark_api_server 2026-01-21 14:28:48 -05:00
John Colvin 2eb80082d8 refactor: Move Bts.Extensions.Hosting, Bts.Net to cs dir
They aren't exclusively used by DataStream csprojs
2026-01-21 14:20:39 -05:00
John Colvin d55ef854ba fix build: Don't actually copy files when building with --dry-run 2026-01-21 14:03:01 -05:00
John Colvin b1417ece5d fix build: Fix cmake windows preset in publish_api_server.py
Changed from 'spark' -> 'spark-windows'
2026-01-21 14:03:01 -05:00
John Colvin f6ae219a72 build: Add a few toggle opts to publish py scripts
--(no-)cpp           Enable/disable cpp build
--(no-)cs            Enable/disable csharp build
--(no-)csproj-refs   Depend on csproj refs, or locally built nugets
2026-01-21 14:03:01 -05:00
John Colvin 1e4b9cf833 Add new StartWithOnTimeout ext fn for IObservable
Ophir wanted this functionality for data in the sdk
2026-01-19 10:44:51 -05:00
John Colvin 228931dd2a cleanup: Fix indentation in launch.json
Also rename launch task "(gdb) Attach" -> "Sparkd Attach"
2026-01-19 10:44:51 -05:00
John Colvin f5b4b36ea1 Move devcontainer Dockerfile to bluetradingsystems/linux_dotnet8_dev
We now host it on dockerhub under that name
2026-01-19 10:44:51 -05:00
arham f19d2d695b Fix: Updated path so that profiles work 2026-01-16 06:55:09 +00:00
John Colvin d4b9b6bcba fix: Dispose subscription in TopOfBookQuoter demo 2026-01-14 10:35:42 -05:00
John Colvin 84d74a7873 refactor: Actually implement IDisposable in MarketDataClient 2026-01-14 10:35:42 -05:00
John Colvin 8c34280d75 fix: Init PriceTicker Security to avoid null ref in Equals impl 2026-01-14 10:35:42 -05:00
John Colvin 474d96ced4 feat: Add PriceStats/Ticker to ISimpleSparkClient (cs sdk) 2026-01-14 10:35:42 -05:00
John Colvin 1432692a26 refactor: Make PriceStats/Ticker record structs
Also rename props in PascalCase
2026-01-13 13:57:47 -05:00
arham 1dde5c3ac2 add: trades aggressor side works in the recorder 2026-01-13 18:25:56 +00:00
arham 1cc31e0d2d add: databento datahandler reads cme recorded files with time delay 2026-01-13 18:00:43 +00:00
arham edbd0d2a7b add: conf for es weekly 2026-01-13 17:59:25 +00:00
arham 56a4ec94a2 Fix: glbx config to use databento as marketdata src 2026-01-13 17:55:13 +00:00
arham e3e3d42972 fix: removed double call to std::move 2026-01-13 17:52:16 +00:00
arham 1b9dff3a83 Add: low tick high tick to genereal marketdata listener 2026-01-13 17:51:43 +00:00
John Colvin 8521a98445 ui: Add Tag column to OrderBook window 2026-01-12 10:45:00 -05:00
John Colvin 10eb1ecf1e feat: Add order tag param to ISimpleSparkClient (cs sdk) 2026-01-12 10:44:59 -05:00
John Colvin 88beb0f148 fix: Avoid null ref ex in DiffStream 2026-01-11 15:15:13 -05:00
John Colvin 0f70ae5da2 fix: Fix 'future' -> 'spread' typo in LiveFuturesContractStream 2026-01-11 15:15:13 -05:00
John Colvin bcd207f89e cleanup: Fix more build warnings in DataStreamSuite
Alot more
2026-01-11 15:15:13 -05:00
John Colvin 989d103eef fix: Properly store and dispose md subscription in BBOStream 2026-01-11 15:15:12 -05:00
John Colvin aacd22d496 refactor: Move Exception utils to Spark.Core.Diagnostics ns 2026-01-11 15:15:12 -05:00
John Colvin 5d318b6422 refactor: Rename PropertyNotNull -> MemberNotNull
Because it can be used to null check any member (including fields and
method returns), not just properties.
2026-01-11 15:15:11 -05:00
John Colvin d89164c0ff refactor: Move CollectionExtensions to Spark.Core.Collections namespace 2026-01-11 15:12:33 -05:00
John Colvin cbddb3ae28 fix: Avoid potential race bug in c# OrderPool 2026-01-11 11:20:40 -05:00
John Colvin 2aa25d4085 refactor: Rename ExceptionAssert.not_null -> NotNull 2026-01-11 11:20:40 -05:00
John Colvin cd34f9b1cb cleanup: Tidy up SecondStream, move ThrottleStream to own file
There actually already was a file called "ThrottleStream", but since it
didn't have the ".cs" extension it wasn't getting built.
2026-01-11 11:20:40 -05:00
John Colvin 5f689dbd8e cleanup: Tidy whitespace and using statements 2026-01-11 11:20:40 -05:00
John Colvin 03a8f4e9c0 refactor: Replace DataPacket w/ IDataPacket in many places 2026-01-11 11:20:40 -05:00
John Colvin 49a952fb32 refactor: Generate a few row types with new t4 templates
* PubSubHeartbeatRow
* PubSubRouteRow
* PubSubServerStateRow
* PubSubServerTagStatsRow
* TableMetadataRow
2026-01-10 12:59:14 -05:00
John Colvin a1c6e0ccab build: Add t4 templates to generate c# row types
Produces classes/structs that implement IBlueRow with strongly typed
properties for each column.
2026-01-10 12:59:14 -05:00
John Colvin 63a3eb968c diag: Assert DataStream updates are incremental
In debug builds
2026-01-10 12:59:14 -05:00
John Colvin 9de4b27003 refactor: Ensure stream subscriptions only disposed once
In the debugger, I noticed a few streams were unhooking their internal
onChange callbacks unnecessarily (when they were already unhooked).
2026-01-10 12:59:14 -05:00
John Colvin 849c6c28e5 fix: Don't fire empty updates in MutableAppendStream 2026-01-10 12:59:14 -05:00
John Colvin bf3a8f076f fix: Change DSQA config pubsub port to 22019
The port PubSubServer runs on by default
2026-01-10 12:59:14 -05:00
John Colvin 44749739b9 build: Define centralized SparkVersion prop
All csprojs should be on the same version. At the very least, it
is a sensible default.
2026-01-10 12:59:14 -05:00
John Colvin ddf16bcd5c fix: Add missing LiveMarketDataStream attribute to InstrumentsStream
Otherwise PrimitiveManager returns null for that stream type
2026-01-10 12:59:14 -05:00
John Colvin cfe7d43770 fix: Initialize ViewStreamDatabase.instance in DSQA 2026-01-10 12:59:14 -05:00
John Colvin bb5ea19f69 refactor: Get rid of ViewStream.rows prop
It was causing weird side effects in debugger
2026-01-10 12:59:14 -05:00
John Colvin 327665b4c3 fix: Add null check in ProximityJoinStream 2026-01-08 14:24:27 -05:00
John Colvin 2843638386 fix: Only start Stopwatch when actually doing work 2026-01-08 14:24:27 -05:00
John Colvin 915322927a fix: Dispose md subscription in InstrumentsStream 2026-01-08 14:23:09 -05:00
John Colvin 9905216131 fix: Format PubSub and DSQA config json in PascalCase
Matches what's in appsettings.json files
2026-01-08 14:22:57 -05:00
John Colvin f88915a940 fix build: Add --spark-version opt in build_data_stream.py 2026-01-07 02:34:56 -05:00
John Colvin c5ea913e27 fix: Shutdown application when user closes login dialog
Previously, it would hang until you manually killed the process.
2026-01-06 14:02:10 -05:00
John Colvin 7719aaa2b3 fix: Add EnvironmentVariables config provider to HostBuilder 2026-01-06 14:02:10 -05:00
John Colvin ad3a8a7544 fix: Add json config sources before env vars and cmd line sources
So environment variables override json files (if there is a conflict),
and command line args override everything else.
2026-01-06 02:34:36 -05:00
John Colvin 75d3ba1d59 fix: Support cross-type numeric comparisons in ArgumentComparer
For example, so we can compare ints with doubles. Also adds support for
DateTime and TimeSpan cross-type comparisons.
2026-01-05 13:36:07 -05:00
John Colvin 0ebe9a876c fix: Apply MarketDataClientConfig to MDSource
For throttle intervals, etc.
2026-01-05 13:26:29 -05:00
John Colvin ac1cbaa985 deploy: Add ophir_demo config profile for sparkd 2026-01-05 00:04:57 +00:00
John Colvin e861835690 deploy: Change sparkdata dir to ~/.local/share/bts/spark
In docker scripts (Dockerfile, compose.yaml)
2026-01-04 23:35:04 +00:00
John Colvin 10752257cc vscode: Build sparkd as prelaunch task
Must have been removed by accident
2026-01-04 21:19:00 +00:00
John Colvin 8e67bd45d9 improve: Add 'file' and 'start_date' props to md replay config 2026-01-04 21:19:00 +00:00
John Colvin 140e5bb5ee fix build (sparkd): Disable warnings specifically for clang >= 18
The build was broken for clang < 18 (and gcc) because we were blindly disabling
warnings as errors specific to clang 18, without checking the compiler version.
Namely, "-Weffc++" and "-Wenum-constexpr-conversion".
2026-01-04 21:19:00 +00:00
John Colvin 9ebc282ba5 fix: Use AtomicGate to make TableUpdate Select ext thread-safe 2026-01-04 21:19:00 +00:00
John Colvin 549529aa60 tool: Add script to add BTS github nuget source
Where we host the BTS sdk nugets
2026-01-04 21:19:00 +00:00
John Colvin 5ed4a5c1c5 feat: Add tag property to OrderDefinition 2026-01-04 21:19:00 +00:00
John Colvin 8c458d48bb feat: Add server side csharp sdk
For Ophir
2026-01-04 21:19:00 +00:00
John Colvin bb1e7c30c8 build: Add msbuild flag to reference projs or local nugets
So we can use project refs for dev builds, and package refs for releases.
2026-01-04 21:19:00 +00:00
John Colvin 6568c29ad4 cleanup: Remove unnecessary ProjectReference 2026-01-04 21:19:00 +00:00
John Colvin e5e67e1a01 build: Optionally launch console with Spark exe 2026-01-04 21:19:00 +00:00
John Colvin 4f34e57194 refactor: Move Bus code into Bts.Spark.Core 2026-01-04 21:19:00 +00:00
John Colvin 59b1aead62 refactor: Use HostBuilder to launch spark w/ streams 2026-01-04 21:19:00 +00:00
John Colvin 49a4c65f3b build: Define custom "main" (entry point) for Spark exe
This is a prelude to integrating streams into spark. The plan is to use
an ms HostBuilder to instantiate stream services/dependencies alongside
the spark Application object.
2026-01-04 21:19:00 +00:00
John Colvin cf4158b34c refactor: Consolidate ShellBootstrapper and base class into one 2026-01-04 21:19:00 +00:00
John Colvin db0e0d4311 cleanup: Get rid of stunnel code
This looks like it hasn't been hooked up for years...it would only start
if a stunnel.conf file was detected, which hasn't been around for a very
long time.
2026-01-04 21:19:00 +00:00
John Colvin 50788f8828 fix: Only create mutex if spark app is NOT running in vs designer
I accidentally droped the '!' in a cleanup commit 4 years ago
2026-01-04 21:19:00 +00:00
John Colvin a515468e37 refactor: Rename TableUpdate props to PascalCase
Makes the sdk look more polished, professional
2026-01-04 21:19:00 +00:00
John Colvin 1f68f47b42 build: Propagate py exit codes back to the shell
* publish_spark.cmd
2026-01-04 21:19:00 +00:00
John Colvin 84f6d3d9fe cleanup: Fix build warnings pre-emptively before compiler upgrade
For clang>=18
  * non-constant-expression cannot be narrowed from type 'uint32_t' (aka 'unsigned int')
    to 'float' in initializer list [-Wc++11-narrowing-const-reference]
  * -Wenum-constexpr-conversion
2026-01-04 21:19:00 +00:00
John Colvin 4bc1a4c833 build (qol): Add opts to only build cpp or cs
Usually, we're only working in one language or the other, and don't need
to rebuild both.
2026-01-04 21:19:00 +00:00
John Colvin c50a006d7d deploy: Update dotnet7 -> dotnet8 in docker images 2026-01-04 21:19:00 +00:00
John Colvin 2031f536d6 build: Pack Bts.Spark.Core with libspark 2026-01-04 21:19:00 +00:00
John Colvin 69e4ed84c1 build: Generate version info via git cli in build scripts
Instead of GitVersion.MsBuild nuget
2026-01-04 21:18:58 +00:00
John Colvin 2a284b1e9c cleanup: Remove unused Protobuf.cmake script 2026-01-04 21:08:13 +00:00
John Colvin 4d5d0f8573 build: Consolidate cmake presets 2026-01-04 21:08:13 +00:00
John Colvin c4a6b4591d cleanup: Remove last vestiges of spark proto config from DataStreamCore 2026-01-04 21:08:13 +00:00
John Colvin 8f3fa18bca refactor: Rename spark_api csproj Bts.Spark.Api
This follows the conventional naming practices, where the project shares its
name with the namespace. Doing this in anticipation of the csharp sdk we are
about to release (for Ophir).
2026-01-04 21:08:13 +00:00
John Colvin f60782915c refactor: Rename spark_core csproj Bts.Spark.Core
This follows the conventional naming practices, where the project shares its
name with the namespace. Doing this in anticipation of the csharp sdk we are
about to release (for Ophir).
2026-01-04 21:08:13 +00:00
John Colvin 3565f78be8 cleanup (build): Remove redundant csproj refs
For example, projects that reference spark_api don't need an explicit reference
to spark_core, since spark_api already references it. The same goes for projects
that reference DataStream and DataStreamCore.
2026-01-04 21:08:13 +00:00
John Colvin 41ad7b96f4 build: Only expose spark_core internals to spark and spark_test csprojs 2026-01-04 21:08:13 +00:00
John Colvin c338d26b82 build: Define project specific metadata props for nuget pack 2026-01-04 21:08:13 +00:00
John Colvin 319f054a0c build: Define global company info build props for csprojs
* Authors - Blue Trading Systems
* Company - Blue Trading Systems
2026-01-04 21:08:13 +00:00
John Colvin 389bf6e130 refactor: Rename DictionarySetWrapper -> DictionaryKeySet 2026-01-04 21:08:12 +00:00
John Colvin ded28c23d7 diag: Preserve file and line number in "log_at" ext fn 2026-01-04 21:08:12 +00:00
John Colvin 04acba409f dev qol: Add local appsettings, configurations to gitignore 2026-01-04 21:08:12 +00:00
John Colvin 67f7124ed5 build: Remove DSQA from DataStreamSuite.sln
Because it doesn't build on linux
2026-01-04 21:08:12 +00:00
John Colvin 322794434a fix build: Copy libspark to "net8.0" dir (was net7.0) 2026-01-04 21:08:12 +00:00
John Colvin fbcba118ac fix build (api server): Fix typo DOTNET_BINARY_DIR cmake var (path)
This is the dir into which libspark (c++) is copied for dotnet (c#) exes.
2026-01-04 21:08:12 +00:00
John Colvin 1c579ee063 refactor: Change namespace to Bts.DataStreamCore for a few types
Since they're in the DataStreamCore csproj
2026-01-04 21:08:12 +00:00
John Colvin 7508fa0b7f dev qol: Mark ExceptionAssert 'name' param w/ CallerArgumentExpression 2026-01-04 21:08:12 +00:00
John Colvin 1f18ec4198 refactor: Replace if/else with switch cases 2026-01-04 21:08:12 +00:00
John Colvin 81d7820cca fix: Ensure IDGenerator instance is created before deref 2026-01-04 21:08:12 +00:00
John Colvin e125be1f85 fix: Emplace MDConsumerHandle instead of copy assign 2026-01-04 21:08:12 +00:00
John Colvin 040c8cab59 cleanup: Remove unnecessary code
Trim includes as well
2026-01-04 21:08:12 +00:00
John Colvin 32a12cf1f7 cleanup: Remove redundant macro def 2026-01-04 21:08:12 +00:00
John Colvin db604fbed0 improve: Abort md rec loop if nothing configured to record 2026-01-04 21:08:12 +00:00
John Colvin cc0a3ea15f cleanup: Trivial whitespace cleanup in Protobuf.cmake 2026-01-04 21:08:12 +00:00
John Colvin 4066cd50ce build: Clean up data_files cmake proj (support --target clean) 2026-01-04 21:08:12 +00:00
John Colvin f1ccff9134 build: Resolve app data dir and shared mem prefix at runtime
We can't define them at compile time anymore since we build multiple exes that
depend on libspark in the same dir (e.g., api-server, pubsub, sparkd, etc.),
and each one needs its own shared memory and app data filespaces.

For shared memory:
  * Prefix all shm files with the proc name and an environment variable,
    BTS_SHARED_MEMORY_PREFIX (if defined). The env var is only necessary
    when 2 exe's with the same name run simultaneously.

For app data:
  * On linux, the default is:
    /home/<user_name>/.local/share/bts/<proc_name>
  * On windows, the default is:
    /User/<user_name>/AppData/Roaming/bts/<proc_name>
  * This path can be overridden in the environment variable:
    <proc_name>__APPDATA
    - For example, SPARKD__APPDATA, PUBSUB__APPDATA, etc.
2026-01-04 21:08:12 +00:00
John Colvin 51ab182b2f Don't log "initializing spark config" if it has already been initialized 2026-01-04 21:08:12 +00:00
John Colvin 856cd552eb refactor: Add Api Server service modules for Dependency Injection
* Part of a broader paradigm shift towards Dependency Injection and
  Factory Pattern.
* Adds "api-server" service to docker compose
* Replaces MarketDataClient w/ IMarketDataClient in a few streams
* Replaces ViewStreamDatabase w/ IWorkScheduler in a few streams
2026-01-04 21:08:12 +00:00
John Colvin 997647e917 refactor: Add handy WebsocketExtensions
* IsSocketStateOpen
* IsClosedProperly
2026-01-04 21:08:12 +00:00
John Colvin 687a9741db fix: Don't assert on exception in BooleanExpression.evaluate
Bugs (fixed):
  * DataStream WebApp Server sometimes crashes when the user enters a
    bad query.
2026-01-04 21:08:12 +00:00
John Colvin 7faa0ade24 diag: Assert that local ip address is successfully obtained 2026-01-04 21:08:12 +00:00
John Colvin 4d6d68aff6 improve: Resolve hostnames when comparing ip addrs
So we can to configure pubsub routes by hostname or ipv4 (ipv6 hasn't
been tested yet...so we should assume it doesn't work).
2026-01-04 21:08:12 +00:00
John Colvin dcf291d6b2 diag: Assert TcpConnection endpoint matches expected 2026-01-04 21:08:12 +00:00
John Colvin a6b83988e7 diag: Catch exceptions on AsyncTCPConnector_AsyncWrapper bg thread
Since it spawns a new thread on each attempt, uncaught exceptions were
previously undetected, and caused silent failures down the pipe. This
should make it easier to track such bugs down.
2026-01-04 21:08:12 +00:00
John Colvin 2c097500f4 fix: Format PubSubRoute as json in log msgs
It was previously using the default ToString, which simply returns the type name
2026-01-04 21:08:12 +00:00
John Colvin 81a212e7a3 build: Upgrade packages (deps) in DataStreamTests 2026-01-04 21:08:12 +00:00
John Colvin 449453625c vscode: Add PubSubServer debug cfg to skip build 2026-01-04 21:08:12 +00:00
John Colvin 5058187d5b cleanup: Remove reference to spark protobuf Config in ViewStream
In general, we should keep BlueOrb dependencies on spark/sparkd to a minimum.
The dotnet dependency injection architecture provides a robust config framework
we can use instead, based on json files, environment variables, and command-line
arguments.
2026-01-04 21:08:12 +00:00
John Colvin 0253a0f60f refactor: Run RemoteQueryManager as an IHostedService
This paradigm more accurately represents the RemoteQueryManager as a
Service that can be started/stopped.
2026-01-04 21:08:12 +00:00
John Colvin 6986cb5e8e fix: Ensure spark config init and login are only performed once
As a static function that could be called from anywhere in the code
(directly or indirectly), 'Configuration.Initialize' was vulnerable to
race bugs. The "Configuration.get<T>()" method, whose calls are
ubiquitous in our code, would initialize config if it hadn't been done
so already. Without a reference to the configServer param, this param
would effectively be ignored/overridden with null.

It's important that login only be performed once, for obvious reasons
(our exes that connect to sparkd are generally designed to process data
for a single user). Furthermore, not every routine that requires a
successful login has a reference to the credentials needed to do it. To
address this, we now pass the ISparkdLoginService singleton to these
routines so they can wait until the singular login task has completed
before they begin.
2026-01-04 21:08:12 +00:00
John Colvin 35a45c35ba refactor: Move position model to spark_api
So we can use it in the new sdk (c# server-side api) for Ophil
2026-01-04 21:08:12 +00:00
John Colvin 970555d2a1 diag: Assert ViewStreamDatabase.instance is only created once
The instance must be initialized via ViewStreamDatabase.SetGlobalInstance
2026-01-04 21:08:12 +00:00
John Colvin 1d46ea061a cleanup: Remove unused code from ViewStreamDatabase 2026-01-04 21:08:12 +00:00
John Colvin 4bd12dc465 fix: Define BoooleanConstant before StringConstant
Otherwise the former masks the latter and prevents it from matching
2026-01-04 21:08:12 +00:00
John Colvin ad1d404314 cleanup: Remove unnecessary deps from csprojs 2026-01-04 21:08:12 +00:00
John Colvin a7b6da27ae fix: Catch exception when creating TcpClient 2026-01-04 21:08:12 +00:00
John Colvin de4a55b34c fix: Make SystemSubscriptionMapPublisher threadsafe
The PubSubState.onTagMapChanged event may not be invoked on
the same thread as doWork.
2026-01-04 21:08:12 +00:00
John Colvin 2e14598667 fix: Add a few null checks
* TimeBasedFilter
* TableAccumulator2
* NonIncGroupByStream
2026-01-04 21:08:12 +00:00
John Colvin 3038d9154f improve: Reduce task wait/timeout code in AsyncTCPConnector 2026-01-04 21:08:12 +00:00
John Colvin 5805758187 diag: Assert System publishers 'doWork' is always called on same thread 2026-01-04 21:08:12 +00:00
John Colvin 2c1b7b95a4 improve: Propagate DataStream exceptions via ErrorChanged event 2026-01-04 21:08:12 +00:00
John Colvin 60af47c4eb cleanup: Remove unused PubSubConfig props 2026-01-04 21:08:12 +00:00
John Colvin b0d0594e3d fix: Always call 'handle_internal_pubs' in PubSubMessageReactor main loop 2026-01-04 21:08:12 +00:00
John Colvin b29b2a0adb fix: Fix a few column types in in PubSubServerTagStatsStream
* total_bytes      (int      -> long)
* last_update_time (DateTime -> long)
2026-01-04 21:08:11 +00:00
John Colvin 76fa35382e refactor: Add DataStream service modules for Dependency Injection
Namely, in DataStreamPublisher and PubSubServer. This is part of a broader
paradigm shift towards Dependency Injection and Factory Pattern.

https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection-guidelines

* Use interfaces to decouple services:
  - Decouple ManagedSubscriber from ISubscriberCore impl
  - Decouple PubTableBroker from IPublisherCore impl
  - Decouple RemoteQueryManager from IManagedSubscriber, IPubTableBroker impl

* Rename Publishers -> PublisherNodes in DataStreamPublisherConfig
* Model config profiles after dotnet appsettings
  - Rename Configurations/<name>.json -> appsettings.<name>.json
  - Make json fields match corresponding csharp props verbatim
    * The Dependency Injection framework doesn't support JsonPropertyName
      attributes. Config class props must match json fields verbatim.

* Move reusable startup code into new Bts.Extensions.Hosting proj
* Add pubsub and md-publisher services to compose.yaml
2026-01-04 21:08:11 +00:00
John Colvin 716bc92394 refactor: Only support 1 tag type in IPubSubServerTagHandler 2025-12-30 11:42:23 -05:00
John Colvin 3a6141f3ae refactor: Change Configuration.initialize to be async
Tweak SparkCoreServices to synchronize Configuration.init globally
2025-12-30 11:42:20 -05:00
John Colvin be2368f95a refactor: Add Spark service modules for Dependency Injection 2025-12-30 11:38:21 -05:00
John Colvin 7e32ac9e06 cleanup: Remove unused pubsub tag handler code
* Removed 'IPubSubServerTagHandler.register'
  - All implementations of this function were empty
* Removed 'IPubSubServerTagHandler.supportedTagTypes'
  - This property wasn't referenced anywhere
* Remove IWorker inheritance from IPubSubServerTagHandler
  - No reason these interfaces have to be tied together
2025-12-30 11:38:21 -05:00
John Colvin 8fc4df1427 refactor: Rename CloudStreamManager.cs -> RemoteQueryManager.cs
This matches the file name
2025-12-30 11:38:21 -05:00
John Colvin 2020ebed2d cleanup: Change pub sub schema prefix 'bluto://' -> 'bts-cloud://'
In config json files (not actual code change)
2025-12-30 11:38:20 -05:00
John Colvin cc483ca4b5 diag: Fix typos in log msgs
* Bad string interopolation syntax
2025-12-30 11:38:20 -05:00
John Colvin aae7356dc7 vscode: Add DataStreamPublisher debug cfg to skip build 2025-12-30 11:38:20 -05:00
John Colvin 8d6e94384c cleanup: Fix benign typos in build scripts
Change BUILD_SPARK_PY var name to BUILD_PY (these scripts build other
projects than 'spark').
2025-12-30 11:38:20 -05:00
John Colvin 7d6e4efa4f cleanup: Fix numerous build warnings in DataStreamSuite
Nearly all warnings were due to nullability issues, since the concept of
nullable reference types did not exist when the DataStream code was
originally written.

* Compression related files
  - BZip2InputStream  (disable nullability warnings)
  - BZip2OutputStream (disable nullability warnings)
  - DeflaterHuffman   (disable nullability warnings)
  - Inflater          (disable nullability warnings)
  - InflaterDynHeader (disable nullability warnings)
  - ParallelJoinTest  (disable nullability warnings)
  - TarHeader
  - TarInputStream    (disable nullability warnings)
  - ZipEntry
  - ZipFile
  - ZipInputStream

* AsyncTCPConnection_APM
* AsyncTCPConnection_APM
* InflaterHuffmanTree
* ManagedSubscriber
* ManagedTCPMessageHub
* MapStream
* PubSubClientMessage
  - Normalize indentation/whitespace
  - Fix some typos
  - Address nullability issues to fix build warnings
  - Modernize code
* PubSubMessageReactor
* PubSubServerManagedTCPConnection
* PubSubSingleTagStateEvent
* PubSubState
* PublisherCore
* PubsubDeserializationController
* RemoteMessage
  - make 'message' nullable to resolve warnings elsewhere (in calling code)
* SharedStreamConfig
* SingleTagData
* SubscriberCore
* SuperMapStream
* SystemHeartbeatPublisher
* SystemStatsPublisher
* SystemSubscriptionMapPublisher
* ThreadSafeQueue
* TradeBarsStream

Only use Registry on windows.
2025-12-30 11:38:20 -05:00
John Colvin 02f566a970 cleanup: Modernize PubSubRoute code, json parsing 2025-12-30 11:38:20 -05:00
John Colvin d0d05a5c18 cleanup: Remove unused DateTime grammar from exp parser 2025-12-30 11:38:20 -05:00
John Colvin 3fafeca9ad cleanup: Remove empty file (clearly added by accident) 2025-12-30 11:38:20 -05:00
John Colvin f5a4e7c410 fix: Remove query from literal error stream
The parser can't handle colons in the expression (it throws/crashes)
2025-12-30 11:38:17 -05:00
John Colvin a0b2a8b186 chore: Add async SQLiteEnumerator to read table as IBlueRowCollection 2025-12-30 11:36:35 -05:00
John Colvin 35a207e234 chore: Add various collection classes
These will be useful in stream operators, row indexing, etc:
  * AggregateList
  * CircularBuffer
  * DeltaList
  * DictionarySetWrapper
  * ImmutableOrderedDictionary
  * ImmutableOrderedSet
  * IMutableCollectionFacade
    - inherits IReadOnlyCollection<T> and ICollection<T>
    - throws NotSupportedException in default impls for mutation ops
  * IMutableListFacade
    - inherits IReadOnlyList<T> and IList<T>
    - throws NotSupportedException in default impls for mutation ops
  * IndexDependentSelectorList
  * MergedSortedList
  * OffsetList
  * OrderedDictionary
  * ReverseArrayList
  * SliceList
  * StepList

More notes:
  * Renames ExceptionAssert.is_valid ExceptionAssert.Index.IsValid.
    - Like the 'ExceptionAssert.Argument' class, which provides methods to throw
      ArgumentException if a condition isn't satisfied, this class throws
      IndexOutOfRange exceptions.
2025-12-30 11:36:35 -05:00
John Colvin 2069c64864 chore: Support mutations in AggregateDictionary (optionally) 2025-12-30 11:36:35 -05:00
John Colvin 9a29606fc1 style: Use standard c# capitalization rules
* Use 'PascalCase' for public members (instead of 'snake_case')
* Use 'camelCase' for private members (instead of '_snake_case')
2025-12-30 11:36:34 -05:00
arham e69012a5ad fix: sanitized dsl in websocket 2025-12-03 13:35:08 +00:00
arham 4237d58f76 Add: metadata to dsl callback 2025-12-03 13:34:37 +00:00
arham 1c75f4a53f Add: get last n lines of log for websocketserver 2025-12-03 12:24:16 +00:00
arham aabf1490eb Fix: Trycatch on base program.cs to prevent crash 2025-12-03 12:21:03 +00:00
arham 14a79b6352 Add:: cross exchange arb stream 2025-12-02 15:21:06 -05:00
arham f69b517f83 add: f10 to stop dsqa 2025-12-02 13:05:39 -05:00
arham 2d0d33028a fix: bug fix to rowbasedappendstream 2025-12-02 12:58:22 -05:00
arham f953b3bb8a change: change UnionStream name to AppendStream 2025-12-02 12:47:36 -05:00
arham 73672276f3 Add: add year to datetimexpander stream 2025-12-02 12:46:49 -05:00
John Colvin 10bb90c731 fix: Use IDictionary.GetEnumerator explicitly to iterate keyvals
We really need to replace these old non-generic collections with generic ones.
BlueRow's IDictionaryEnumerator implementation iterates over values when passed
to a foreach loop, not key value pairs.
2025-11-19 23:55:35 -05:00
John Colvin 0746b27a40 cleanup: Remove docker submodules again
I lost count of the number of times they have been deleted long ago.
Taha, please remove them from your repo so they don't come back :)
2025-11-19 10:33:31 -05:00
John Colvin 3a3c3d45d3 cleanup: Change default DSQA sparkd config server to 127.0.0.1 2025-11-19 10:33:31 -05:00
John Colvin 2014931653 feat: Add live bbo stream 2025-11-19 10:33:31 -05:00
John Colvin aa740e786c refactor: Automatically add id column in BlueTableSchemaBuilder 2025-11-19 00:36:56 -05:00
John Colvin 12c6b367f4 fix (preemptive): Avoid StackOverflow in md client securities fn
One of the 'securities_incremental' fns was calling back into itself instead of
the other overload. This is a 'preemptive' fix because the problematic code path
wasn't running in practice (though it was a ticking time bomb).
2025-11-19 00:36:56 -05:00
John Colvin 5080960b97 refactor: Replace DataPacket w/ IDataPacket in stream handlers
This commit also renames BlueTableSchemaAdaptor to BlueTableSchemaAdapter,
and makes it implement IBlueTableSchema.
2025-11-19 00:36:56 -05:00
John Colvin 770e14752a chore: Add json facilities for DataStream websocket api 2025-11-19 00:36:56 -05:00
John Colvin e24b877e58 Add gen purpose blue row/table utils for data streams
* Add BlueRowReflection<T> so ViewStream implementations can use
  strong row types without needing to implement IBlueRow
* Add default implementations for IDictionary members in IBlueRow to make
  implementing IBlueRow less tedious
2025-11-19 00:31:53 -05:00
Taha Afzal 09abe4a432 Added RowBasedAppendStream 2025-11-18 03:10:30 +00:00
Taha Afzal 66c0baa150 Adding meta data to DataPacket, NLStream adds nl -> dsl as a name value pair in the meta data. Also removing windows ref from DataStreamStudio.sln 2025-09-24 13:16:28 +00:00
arham 5305b32c04 Fix file path didnt work in linux 2025-09-17 04:28:25 +00:00
arham e6304609f8 changes to make streams run on linux 2025-09-16 15:38:21 +00:00
arham 91d6f80b45 streams ws defaults to nl 2025-09-16 15:33:58 +00:00
arham 21d84d811d simple changes to make stream work with wbesite 2025-09-02 17:17:43 +00:00
arham 77e542efa9 Fix: websocket code 2025-09-02 17:17:43 +00:00
Taha 6b28fc4779 Lot of BlueOrb stream changes 2025-09-02 17:17:43 +00:00
John Colvin c0602ceb93 fix (api server linux): Add missing deps to fix crash on start
The api server likely broke when we reorganized cpp with stuttering dirs.

* Link Catch2 and ssh2
* Add a few .cpp files to the build
2025-09-02 14:06:08 +00:00
John Colvin 6f5d89cceb fix build (api server linux): Trivial cmake changes
* Get rid of old 'cfg_defaults' param in get_proto_sources impl for linux client
  builds
* Make libfmt dep header-only
* Use CMAKE_SHARED_LIBRARY_PREFIX if "PREFIX" is undefined when copying libspark
  to dotnet bin dirs
2025-08-29 19:54:39 +00:00
arham 7baaafbeeb sasalgo local pos working 2025-08-29 15:50:43 +00:00
Adeel Khan 8569b02f5c cleanup: spread websocket. 2025-08-25 11:45:57 +00:00
Adeel Khan 8f0784e6c2 cleanup: logs. 2025-08-25 11:31:28 +00:00
Adeel Khan c15968e17e ADD: py_spread.h.. 2025-08-25 07:51:04 +00:00
John Colvin 0e331229d4 fix build: Add missing constructors for SecuritiesEventLog 2025-08-25 06:07:30 +00:00
John Colvin 45c85310e7 hotfix: Remove 0 qty check in ExecutionReport validation fn
This (hopefully) fixes part of a compounding error where 1) the SprayAndSkewAlgo
sends 0 lot orders, which are rejected by the exchange. Then 2) the REJECT exe
report fails a misguided "validation" check due to its 0 qty, and is never
propagated to the rest of the system.
2025-08-25 05:53:36 +00:00
John Colvin 7b41dbb19a diag: Reduce "Waiting for request" log level to diag in py bridge
It's too noisy for Info
2025-08-24 17:45:21 +00:00
Adeel Khan e6a3116327 FIX: Minor recorder fixes. 2025-08-21 22:12:03 +00:00
Adeel Khan 86ce16790a FIX: Changed log level. 2025-08-21 22:12:03 +00:00
Adeel Khan 897cf10be6 ADD: Support for bbo in MDRecorder & Config support. 2025-08-21 22:12:03 +00:00
Adeel Khan ca27903f63 ADD: Support for Spreads on Bybit. Gateio fixes. 2025-08-21 22:12:03 +00:00
Adeel Khan 1b5f1bfb27 UPDATE: Added back Spots to Bybit MD. 2025-08-21 22:12:03 +00:00
John Colvin 217db51cbc fix: Propagate error message to ExecutionReport in bybit gw
Specifically, the 'rejectReason' field in order update json.
2025-08-21 13:52:57 +00:00
John Colvin c08a893ecf change: Hardcode PostOnly flag for Limit/GTC orders in bybit gw
'PostOnly' is a TimeInForce flag that we don't have in our system. It makes it
so Limit orders that would be filled on entry are rejected. Ali's SprayAndSkew
algo needs this to avoid taker fees.
2025-08-21 13:31:37 +00:00
John Colvin a022f08b49 fix: Don't log error when positions are empty in bybit gw
This particular error log was intended for failed position requests. Since an
empty list evaluates to false in python, we were incorrectly interpreting an
empty result as a failed request.
2025-08-20 15:08:25 +00:00
John Colvin 5af98658d8 fix: Fix typos in bybit_execution_gateway.py
* Change 'new_req' -> 'req'
* Change 'self.exe_report_callback' -> 'self.bridge.on_execution_report'

...this is what you get when you take shortcuts and copy/paste code.
2025-08-18 22:14:55 +00:00
John Colvin 933511f430 fix: Reset last filled qty to 0 on updates with no fills in bybit gw
For example, on status change updates.
2025-08-18 18:54:38 +00:00
John Colvin 63291d7374 fix: Buffer req on ws closed exception just like normal disconnect in bybit gw 2025-08-18 18:31:58 +00:00
John Colvin 30276066f8 cleanup: Remove redundant code 2025-08-18 18:24:05 +00:00
John Colvin 809a66323d fix: Guarantee unique tx id for bybit exe reports
Use a version counter instead of 'time.time_ns' (the latter probably would have
been fine in practice, but the former is better).
2025-08-18 15:54:22 +00:00
John Colvin 5c4ee1a262 fix: Insulate algos from bybit disconnect/reconnect
* Buffer incoming requests while reconnecting
* Sync orders upon reconnect and fire execution reports to account for diff
2025-08-18 15:54:22 +00:00
John Colvin 504f441d2e fix: Count fills correctly in bybit exe gw plugin
* Round fill price and qty to 7 digits in bybit gw plugin
* Remove erroneous line of code that reset filled_quantity to 0 on each
  update (it was causing partial fills to be overcounted)
2025-08-18 15:51:11 +00:00
John Colvin fd51025b00 diag: Increase waiting for admin data log throttle to 5s
This log is particularly noisy if the configured account isn't in the system. It
logs continuously until the account is added via the Risk webapp.
2025-08-18 15:51:11 +00:00
John Colvin f4afd92db2 diag: Get sec name from py_sec instead of var that was std::moved 2025-08-18 15:51:11 +00:00
John Colvin b1fe5b52f6 diag: Change bybit_dev exe gw console level to INFO
I found myself constantly changing it from WARN to INFO while developing/testing.
This is a 'dev' config profile, so it should be tuned for development.
2025-08-18 15:45:43 +00:00
John Colvin 164ca306f5 hotfix: Reject new orders when bybit gw not in READY state 2025-08-15 13:42:33 +00:00
John Colvin a6d23ef4ef devcontainer: Add python extension 2025-08-15 04:00:25 +00:00
John Colvin c0f4090d70 fix: Add error_msg to PyExecutionReport json fmt 2025-08-14 03:54:33 +00:00
John Colvin 63c94e09e7 diag: Add bybit order ticket webapp for testing purposes 2025-08-13 21:39:21 +00:00
John Colvin fc94ec4d46 feat: Automatically reconnect in bybit exe gw plugin
Previously, the plugin would just throw an exception and assert crashed
when this happened (the exception would bubble up to the c++ bridge).
2025-08-13 21:39:21 +00:00
John Colvin e2fdb569c6 feat: Fire position snapshots in bybit exe gw plugin 2025-08-13 21:39:21 +00:00
John Colvin 804c27eb49 fix: Stop bybit websocket stream ping timer on disconnect 2025-08-13 21:39:21 +00:00
John Colvin 6448b4cf90 diag: Add support for custom json formatter in JsonElement
The JsonElement class is primarily used for structured logging, as it provides a
means to format objs as json via printf style formatting outside the "hot" path.
2025-08-13 21:39:21 +00:00
John Colvin e01a825aff fix: Create parent dirs if necessary for py plugin log files 2025-08-13 21:39:21 +00:00
John Colvin 00649e0c14 chore: Hook up py execution gw position callback
Refactor the py bridge placeholder function to accept a vector of position
objs (instead of a single one) to more accurately reflects its c++ counterpart.
It also allows us to pass the account's entire position (for all securities) in a
single call.
2025-08-13 21:39:21 +00:00
arham ae1e9ecb29 Removing docker submodules 2025-08-11 17:03:26 -04:00
John Colvin ff65acba05 fix: Gracefully handle missing column settings in pnl win
Pnl window settings are stored with the workspace on the server (like all shell
window settings), and may originate from an older version of Spark with a
different set of columns. We shouldn't crash if this happens.
2025-08-07 14:33:55 -04:00
John Colvin dc08945719 fix: Check proto HasPrice/QuantityDisplay before accessing props 2025-08-07 14:02:10 -04:00
John Colvin a739ca9a75 fix build: Disable warning in cs Timestamp struct
It is initialized from data stored in shared memory (not a normal struct). The
cs build emits a warning because it detects a field that "is never written to
and will always have a default value of 0."

This code hasn't changed for years. It suddenly becoming a warning-as-error is
likely related to a recent Visual Studio update.
2025-08-07 13:39:21 -04:00
John Colvin ed7b187876 feat: Add ExportToCsv button to fills win 2025-08-07 13:01:06 -04:00
John Colvin 53e1e92a6a fix: Keep existing items in SettingsPersistenceModel filtered sub
Bugs (fixed):
  * SettingsPersistenceModel drops items after initial update in filtered
    subscriptions.

    Cause: The SettingsPersistenceModel subscribe fn only publishes the "added"
    items in each update, and omits pre-existing items. From the observer's
    perspective, pre-existing items appear deleted.
2025-08-05 16:23:02 -04:00
John Colvin eee7af494a fix (fills ui): Preserve sort order during incremental update
Binary search is used to add, remove, and change rows in response to
incremental updates. Needless to say, if the rows become unsorted,
everything breaks.

Bugs (fixed):
  * The fills window crashes sometimes, possibly related to client
    reconnecting to server.

    Cause: This was a 2 part bug.
      1) Changes to existing rows are applied BEFORE the new sort index
         is determined via binary search. If the change affects a
         property in the current sorting criteria, the rows could
         become unsorted and thus invalidate the binary search.

      2) When an existing row is changed so that its new sort index is
         greater than its current one, the new index is not decremented
         by one (it must be since the row is removed before it is
         re-inserted).
2025-08-05 13:47:06 -04:00
Taha Afzal 91a7c35edf Registering Pingpong algo 2025-08-05 15:59:43 +00:00
Taha Afzal 3eaef1a1b6 PingpongAlgo scaffolding 2025-08-05 15:22:53 +00:00
arham 4a70b4910d config: test algos 2025-07-28 13:07:15 +00:00
arham 7697f73ada Fix: change order of plugin loading 2025-07-28 13:03:45 +00:00
arham 029875e0a0 Add: SASALGO 2025-07-28 13:03:26 +00:00
John Colvin 9dc7611c0a fix build: Forgot to add NullableWrapper.cs a few commits back
When I made the change to format min order qty/notional cols with sec
ticks
2025-07-21 17:07:52 -04:00
John Colvin 782cdd7430 ui (orderbook): Use dark theme font color in Algo State grid
It was barely legible to against the dark background (must have been
overlooked when we originally implemented dark theme).
2025-07-21 10:02:38 -04:00
John Colvin 4184278d94 fix: Fix typo in weighted_average fn
Was multiplying distance from x by wrong weight

Bugs (fixed):
  * Pnl window avg cost is wrong when there are both start and day
    positions
2025-07-18 09:54:17 -04:00
John Colvin 0b3fa813f1 tool: Add script to dump structured logs to console 2025-07-17 16:25:23 +00:00
John Colvin e60f2159e1 fix: Prevent python plugins from intercepting kill sig
So the process actually terminates on ctrl+c
2025-07-17 16:25:23 +00:00
John Colvin 610861be20 diag: Shorten BookLevel json field names
To reduce log file size and improve readability
2025-07-17 16:25:23 +00:00
John Colvin 1787460c35 refactor: Rewrite binance usds futs md without ccapi 2025-07-17 16:25:23 +00:00
John Colvin 588b86710f refactor: Rename lib_binance_execution lib_binance
Implementing md and execution for the same exchange in separate projects
has proven to be messy and impractical. I'm renaming this project in
advance of a binance md rewrite which will join md and execution
together in the same lib.
2025-07-17 16:25:23 +00:00
John Colvin 3022a25a10 Add config toggle to batch subscribe binance ufuts md 2025-07-17 16:25:23 +00:00
John Colvin cf30649dd2 fix: Fix elapsed check in ConcurrentQueue waiter 2025-07-17 16:25:23 +00:00
John Colvin afb8444815 diag: Use structured logging in gen md listener 2025-07-17 16:25:23 +00:00
John Colvin fc59247958 cleanup: Remove redundant if check in gen md listener 2025-07-17 16:25:23 +00:00
John Colvin 14c417eeec refactor: Use core::TimeStamp::to_ll in gen md listener
Working towards unifying TimeStamp code
2025-07-17 16:25:23 +00:00
John Colvin 62a6e4340f chore: Add to_ll fn to core::TimeStamp
One step closer to unifying TimeStamp code
2025-07-17 16:25:23 +00:00
John Colvin cce85e45b7 chore: Make a few domain types fmt formattable
So we can pass them directly to LOG statements

* Book
* BookSide
* TradeRecord
2025-07-17 16:25:23 +00:00
John Colvin ff584ee19a refactor: Make pretty enum formatting more performant 2025-07-17 16:25:23 +00:00
John Colvin f146859677 diag: Disable frame_header/payload logs in ws client
They're useless noise. Worse than that, the messages are byte strings
that cause text searches to omit matches (via grep, less, etc.).
2025-07-17 16:25:23 +00:00
John Colvin cf55e4bc1d refactor: Make domain::Security default ctr constexpr 2025-07-17 16:25:23 +00:00
John Colvin a0b1078572 chore: Move a few inlined fns to .cpp 2025-07-17 16:25:23 +00:00
Taha afd229b7c7 Merging 2025-07-15 17:51:28 -04:00
John Colvin bfc7615c9a ui: Add "Is Aggressor" column to fills grid 2025-07-15 14:48:44 -04:00
John Colvin 0023574905 build: Add data stream projs to spark_client.sln
They're already built with the solution as dependencies, so it seems
appropriate to include them. This also fixes intellisense issues in
those projs when you have spark_client.sln loaded.
2025-07-15 10:22:23 -04:00
John Colvin 7e79a21cd4 Add some nifty DataPacket/TableUpdate IObservable utils 2025-07-15 10:13:53 -04:00
John Colvin 6b0030559b fix build: Fill in transaction fee prop getter
TODO: Actually implement maker/taker fee. For now, just return 0.
2025-07-15 10:13:53 -04:00
John Colvin 77caef2640 fix build: Add missing name to fn arg 2025-07-15 10:13:53 -04:00
Adeel Khan edb8a9d516 FIX: Removed Commented Out Code. 2025-07-14 22:35:36 +00:00
Adeel Khan 153631191a FIX: Removed fallbacks(not needed). 2025-07-14 22:35:36 +00:00
Adeel Khan 026a8af893 FIX: Removed Normalize Contract Function-Not Needed. 2025-07-14 22:35:36 +00:00
Adeel Khan 3739532947 FIX: Reduced REST calls. 2025-07-14 22:35:36 +00:00
Adeel Khan 0cb3cadc11 FIX: Added filter to exclude InverseFutures--MD not freezing. 2025-07-14 22:35:36 +00:00
Adeel Khan 36db69dc67 FIX: bybit_md_provider.py works with default symbol format in py_bybit_md_provider.json.--MD Freezes on InverseFutures. 2025-07-14 22:35:36 +00:00
Adeel Khan c7c755a964 ADD: Added support for Linear USDC channel-py_bybit_md_provider.json takes full security names. 2025-07-14 22:35:36 +00:00
Adeel Khan 0e460353a7 ADD: BYBIT MD support for USDC Margined Perps. 2025-07-14 22:35:36 +00:00
Adeel Khan 5198236b45 ADD: BYBIT MD support for Spots and Linear USDT Margined Perps/Futures. 2025-07-14 22:35:36 +00:00
Taha 767fa25d61 Adding comments 2025-07-14 15:18:03 -04:00
Taha 0858eaac23 Polishing BlueOrb streams 2025-07-13 21:21:10 -04:00
Taha Afzal 593601551d Adding FillAggressorFlag o ExecutionReport 2025-07-13 22:43:19 +00:00
John Colvin 036df46b1c deploy: Copy algo plugins from config to runtime dir
So we can deploy algos by uploading them to the config dir on the
server, then bouncing sparkd.
2025-07-07 17:24:13 +00:00
John Colvin 84697a6d65 dev qol: Add slim requirements.txt to binance_dev cfg profile
So it doesn't needlessly install every package in our dev venv when it
builds the container, which can take several minutes.
2025-07-07 16:34:29 +00:00
John Colvin bb550d3f88 fix (deploy): Add PYTHON_REQUIREMENTS docker arg to base image
Docker args must be redeclared in each build stage that uses them.
2025-07-07 16:34:29 +00:00
John Colvin 85bd2da414 cleanup: Remove security from StoredFillEvent
It created an unnecessary dependency
2025-07-07 16:02:42 +00:00
John Colvin cc55fe1acf ui: Format min order qty/notional cols with sec ticks 2025-07-07 12:00:39 -04:00
John Colvin bb64760c62 fix (mview): Add switch case for Venue column comparer
Bugs (fixed):
  * In mview, venue column sorting is broken
2025-07-07 12:00:39 -04:00
John Colvin 8b9525f503 dev qol: Add python.env for plugin intellisense 2025-06-26 04:25:43 +00:00
John Colvin eccfd1ee30 fix: Disable ccapi md provider if venue has empty symbols config
Previously, ccapi exchanges (e.g., binance) would subscribe to EVERYTHING if
symbols config was empty. There are way too many symbols for that.
2025-06-26 04:20:08 +00:00
John Colvin 7b933026bb refactor: Only import fake_md_bridge if running plugin standalone 2025-06-25 16:33:30 +00:00
John Colvin ffe859703a fix: Forgot to add fake_md_bridge.py
Needed to run py md plugins as standalone apps
2025-06-25 16:30:44 +00:00
John Colvin 4756e243fa chore: Add DUCK and MILK to bybit_dev config profile 2025-06-24 19:57:44 +00:00
John Colvin 0133159296 fix: Support integer ticks in sparkd, py plugins
Bugs (fixed):
  * sparkd crashes if DUCK is added to bybit symbols

  Cause: DUCKUSDT qty tick is 10 (previously, we only supported qty
  ticks <= 1)
2025-06-24 18:09:20 +00:00
John Colvin 38afd3055f diag: Add sec name, venue, and type to PyBook json 2025-06-24 18:08:27 +00:00
John Colvin 4f184c2566 feat: Support running bybit_md_provider as standalone app
HACK: I changed it so numpy is imported AFTER python_interop_module to
avoid a strange segfault that only happens when running standalone app.
2025-06-24 18:08:27 +00:00
John Colvin f608497094 fix: Propagate min notional value from py plugins sparkd
It was getting lost in the translation from PySecurity ->
domain::Security -> FixedSecurity.
2025-06-24 15:27:13 +00:00
John Colvin 9035b95612 fix: Propagate newly deleted synths in MDDaemon
There was a typo when determining "deletes" and "undeletes" on synth
changes (i.e., when deleted changes false -> true, and true-> false
respectively).
2025-06-24 10:48:42 -04:00
John Colvin 7483665b5a chore: Set min notional value for secs in bybit md provider 2025-06-24 10:48:42 -04:00
John Colvin 5f141a8030 chore: Add missing TimeInForce enum vals in py 2025-06-24 10:48:42 -04:00
John Colvin 83f1b5b567 dev qol: In envsource.fish, split PATH vars into list
Assume they are semi-colon delimited.
2025-06-24 10:48:42 -04:00
John Colvin 06ad3a1d9e dev qol: Add trade_client_cli.py to test md/exe plugins
Independent of sparkd
2025-06-24 10:48:42 -04:00
John Colvin 01de13bb43 refactor: Pass sec id instead of ptr to FilledPositionEvent
Then we don't need to resolve the security in order to fire the event.
This removes a noisy log that would happen when the security resolution
fails as a byproduct.
2025-06-24 10:48:42 -04:00
John Colvin 155a396af5 fix: Round tick base to power of 10 in default case
Bugs (fixed):
  * Bybit execution gw throws on MILKUSDT orders due to bad price tick.

    Cause: rounding error when converting the small price tick (0.00001)
    to "tick factors" (1/10000). The denominator is computed as
    1/0.00001 = 99999.9...
2025-06-24 10:48:42 -04:00
John Colvin 399f9e61e2 chore: Add security type to py reqs
Venue and sec name alone don't always identify a unique security.
2025-06-24 10:48:42 -04:00
John Colvin 1f67456cc5 cleanup: Remove unused code 2025-06-24 10:48:42 -04:00
John Colvin 9ff7821b59 fix: Propagate bybit gw conn status change to bridge 2025-06-24 10:48:42 -04:00
John Colvin c598f831d0 ui: Change default TimeInForce to GTC
The old default, "Day" orders, isn't supported at crypto exchanges, it
doesn't apply (there is no "end of day").
2025-06-24 10:48:42 -04:00
John Colvin 3ca4cedf54 ui (mview): Add min order qty/notional value columns 2025-06-24 10:48:42 -04:00
John Colvin d919ec5474 fix (mview): Bind cpp column filter to correct prop in vm
Was bound to "currency_filter" (prob a typo due to lazy copy/paste job)
2025-06-21 01:24:04 -04:00
John Colvin 98c2d738b2 fix: Set timeInForce in bybit order reqs 2025-06-20 20:17:01 +00:00
John Colvin cf3f7e6862 fix: Don't send unlisted/fake bybit securities to sparkd
Securities that aren't listed in the instrument-info response from the
exchange shouldn't be in our system.
2025-06-20 16:37:47 +00:00
John Colvin ae868ab74d fix: Use default cash-per-point of 1 at bybit 2025-06-20 16:37:47 +00:00
John Colvin bd22f4779d fix: Request all "pages" of instrument info (not just first) 2025-06-20 16:37:47 +00:00
John Colvin 27cbd51b1c fix: Fire reject report if order ack has errors
Rejects are ONLY observable in the order ack, not the execution report
stream from which all other updates are observed. While the pybit sdk
does expose ack callbacks, it doesn't invoke them on rejects/errors.
2025-06-20 16:37:47 +00:00
John Colvin 02626ce35c chore: Copy a few pybit modules into our code for tweaking
No tweaks have been made (yet). I'm copying the files verbatim first
to give us a frame of reference. Then, when the tweaks are committed,
we'll be able to view them in terms of the diff with the sdk.
2025-06-18 18:39:18 +00:00
John Colvin d219804caf fix: Prepend plugin dir to py path, rather than append
So our modules win import-name conflicts with system/third party ones.
This became a problem when I copied a couple files from the pybit sdk
into our plugins dir in order to apply tweaks.
2025-06-18 18:18:35 +00:00
John Colvin 1e0ec5bb46 chore: Bind __str__ fns for py interop list types
The default __str__ for these list types shows item addresses (not the
items themselves)...a bit of a headscratcher considering the lists'
element types have proper __str__ functions.
2025-06-18 18:14:45 +00:00
John Colvin c281bc49b5 improvement: Set bybit exe gw websocket timeout to 5s
The default (1s) is too strict in practice.
2025-06-17 17:49:52 +00:00
John Colvin b3566155a3 fix: Fix rounding error when creating tick factors 2025-06-16 15:52:09 +00:00
John Colvin a4e39afbb9 ui: Add cash-per-point col to mview 2025-06-16 15:52:09 +00:00
John Colvin efce01d28e vscode: Replace net7 w/ net8 in tasks.json 2025-06-16 15:52:09 +00:00
John Colvin d362022b89 Add c# SyntheticBookCalculator 2025-06-16 15:52:09 +00:00
John Colvin e7d751fb68 refactor: Remove unnecessary constraint on MathUtils.lcm params
Not sure why T ever needed to implement IMultiplyOperators<T, int, T>
2025-06-16 15:52:09 +00:00
John Colvin 50eefc65d4 cleanup: Remove unnecessary py_module.cpp files
We used to have separate modules for md and execution. I forgot
to remove these after unifying them to a single module.
2025-06-16 15:52:09 +00:00
John Colvin 8770de4a87 diag: Reduce book log noise in md plugins
They're too noisy for Info level.
2025-06-16 15:52:09 +00:00
John Colvin e799b6e24b diag: Optimize logging in bybit exe gw plugin
* Format params as json (not python pseudo json)
* Format params lazily
2025-06-16 15:52:09 +00:00
John Colvin 69e338c1ca fix: Use lock_guard instead of lock/unlock calls
I just noticed it was technically possible for the "work thread" (in py
plugin manager) to be started twice, due to improper lock/unlock calls.
2025-06-16 11:08:59 -04:00
John Colvin e8bb64a80f Increase sleep time in bybit_md_provider keep-alive loop
This thread's only job is to stay alive until "stop" is called. It
doesn't need to be particularly fast/responsive. Longer sleep intervals
reduce contention with the "hot" thread that receives market data.
2025-06-16 11:08:59 -04:00
John Colvin 8e2ede596f diag: Add security to assert msg when qty tick deduction fails 2025-06-16 11:08:59 -04:00
John Colvin 9772d0eb77 deploy: Add alphaworx_zen_hk_live-preview configuration 2025-06-16 11:08:59 -04:00
John Colvin 687e2477c0 fix: Assert that acc name length < max_size (not size)
Since we changed the account field from std::array -> bts::core::SmallString
2025-06-16 11:08:59 -04:00
John Colvin 1bd0ba9950 deploy: Install python requirements in docker
No point in using a virtual environment. These containers have one
purpose: run sparkd with a constant, predetermined set of py plugins.
2025-06-16 11:08:59 -04:00
John Colvin ddabc744f2 chore: Update alphaworx_zen_hk_live init.py to query new secret
I decided to put all alphaworx api keys in one secret. It's easier this way.
2025-06-16 11:08:58 -04:00
John Colvin 74b88b003e fix: Fix config dir env var in bybit_dev profile 2025-06-16 11:08:58 -04:00
John Colvin aaf1be09c2 fix: Fix SmallString numeric parsing, make more robust
* Fix by parsing numbers from left to right instead of right to left
  (previously, would parse "17" to 71)
* Support leading +/- signs
* Throw if unexpected char encountered
* Unit tests
2025-06-16 11:08:58 -04:00
John Colvin e3bd9a457c fix: Change thread_id type to size_t (not int64_t) 2025-06-16 11:08:58 -04:00
John Colvin 59f62b6ec9 cleanup: Remove unnecessary signal handler in bybit_md_provider.py
We handle them properly in sparkd now
2025-06-16 11:08:58 -04:00
John Colvin b46e75f7d7 cleanup: Sort gateio symbols in symbols.conf 2025-06-16 11:08:58 -04:00
John Colvin 3f100feaca chore: Add config json for py plugins
Support overrides per venue in a separate file, so symbols can be
changed after deployment using arham's widget.
2025-06-16 11:08:58 -04:00
John Colvin 093da2a938 fix: Init shared_ptr w/ default obj (not null)
Prob a typo
2025-06-16 11:08:58 -04:00
John Colvin 2f17c2b8c5 chore: Fix path in .env file (server/sparkd -> app_sparkd) 2025-06-16 11:08:58 -04:00
John Colvin 33bfdc517a fix build: Remove include of non-existent header
I created the file locally, but ended up not using it and forgot to remove an
include before I pushed.
2025-06-16 11:08:58 -04:00
John Colvin d17be48e6d fix build: Always return value in non-void fn 2025-06-16 11:08:58 -04:00
John Colvin cbaa1df641 fix: Don't compare size_t to -1 in SmallString num parsers 2025-06-16 11:08:58 -04:00
John Colvin 8c23665d65 refactor: Manage all py plugins (md and exe) in one class
All calls to/from python are performed on one thread via a simple
message queue (necessary because of the global interpreter lock).
2025-06-16 11:08:58 -04:00
John Colvin c7db105533 chore: Add pybit to py venv 2025-06-16 11:08:58 -04:00
John Colvin 3f9923239e diag: Log incoming books at Info level in bybit_md_provider 2025-06-16 11:08:58 -04:00
John Colvin 9ae9451359 chore: Add bybit execution config to bybit_dev profile 2025-06-16 11:08:58 -04:00
John Colvin c33e5ddb02 chore: Add numpy to py venv
This is needed for md plugins
2025-06-16 11:08:58 -04:00
John Colvin 54388d3b92 fix: Include fill id in format str for ExecutionReport 2025-06-16 11:08:58 -04:00
John Colvin 17ada3c57c dev qol: Bind PySecurity __format__ to fmt::formatter impl 2025-06-16 11:08:58 -04:00
John Colvin 046f412ec4 refactor: Change floats to doubles in py bridge types
Getting rounding errors with floats
2025-06-16 11:08:58 -04:00
John Colvin c94d11f525 refactor: Use SmallString instead of std::array in ExchangeFillID 2025-06-16 11:08:57 -04:00
John Colvin 2b69846381 Add py bybit exe config to bybit_dev profile 2025-06-16 11:08:57 -04:00
John Colvin bdd5e08b60 refactor: Consolidate all py interop into single lib
It was just too hard trying to make it work with separate libs. The
main issue was getting the python md and execution modules to
recognize PySecurityList and other types defined in the core module.
2025-06-16 11:08:57 -04:00
John Colvin 7c9330650d refactor: Move tick fns into gen-purpose tick_utils.h 2025-06-16 11:08:57 -04:00
John Colvin 98fca5ad7f Change bybit_dev symbols.conf to list bybit futs (not spots) 2025-06-16 11:08:57 -04:00
John Colvin 8a0fcce90d fix: Actually use configured logger in bybit_md_provider.py 2025-06-16 11:08:57 -04:00
John Colvin 112527f9ed dev qol: Reduce noisy logs in PositionServicePNLHelper 2025-06-16 11:08:57 -04:00
John Colvin fc1e20538d build: Add cmake script to sym link py module and plugins
We have several of these (python_core, python_md, python_execution),
so the repetative boilerplate code was starting to pile up.
2025-06-16 11:08:57 -04:00
John Colvin 83acbecf55 deploy: Install/activate py venv in sparkd container 2025-06-16 11:08:57 -04:00
John Colvin 06c494291c dev qol: Add pyrightconfig.json for type hints in py/c++ bridge 2025-06-16 11:08:57 -04:00
John Colvin fe74aed048 Tweak py to get rid of false positive type hint warns 2025-06-16 11:08:57 -04:00
John Colvin b94cdb561e feat: Support python execution plugins 2025-06-16 11:08:57 -04:00
John Colvin 06bd8791c0 refactor: Move py security (and related types) to python_core lib
So the execution gw plugins can use it (as well as the md plugins).
2025-06-16 11:08:57 -04:00
John Colvin b5850cdb02 fix: Add missing switch cases for bybit & gateio 2025-06-16 11:08:57 -04:00
John Colvin 545d76142f fix: Initialize bybit secs as perp futs (not spots) 2025-06-16 11:08:57 -04:00
John Colvin edc2cea60e dev qol: Add wait/notify functionality to ConcurrentQueue 2025-06-16 11:08:56 -04:00
John Colvin e6466f8309 chore: Add CANCEL_ORDER op to binance.env 2025-06-16 11:08:56 -04:00
John Colvin 501be8d6a5 dev qol: Add ConcurrentValueStore, with notify/wait functionality
Uses std::condition_variable
2025-06-16 11:08:56 -04:00
John Colvin 7dea9b3792 fix: Don't raise ex if var isn't defined in req path 2025-06-16 11:08:56 -04:00
John Colvin a3f49b1ce8 dev qol: Add gen-purpose validation fns for execution gws 2025-06-16 11:08:56 -04:00
John Colvin 765237d701 build: Use new gen-purpose python cmake fns in py md proj
Significantly simplifies CMakeLists.txt
2025-06-16 11:08:56 -04:00
John Colvin 97c52410a2 build: Add gen-purpose InitPythonModule, InitPythonPlugin cmake scripts 2025-06-16 11:08:56 -04:00
John Colvin 8b43d93e26 dev qol: Add fn to make Stopwatch and start it at once 2025-06-16 11:08:56 -04:00
John Colvin 14baa7d62e chore: Use same log format as sparkd in py md plugins 2025-06-16 11:08:56 -04:00
John Colvin a054f4cc63 improvement: Set PyBook data in single call to reduce interop overhead 2025-06-16 11:08:56 -04:00
John Colvin 5311128607 Reduce log noise in py md providers 2025-06-16 11:08:56 -04:00
John Colvin 075acdc8eb doc: Improve py md readme
* Put examples in a table
* Show command to create symlinks for intellisense
2025-06-16 11:08:56 -04:00
John Colvin e1fdf6306b refactor: Redesign py md so it doesn't lock the global interpreter
We can only embed one interpreter in the sparkd process, so all py
plugins need to share it.

* Move core py interop code to new lib_python_core. We're about to add a
  new lib for py execution, so it needs to be accesible from both
  execution and md libs
* Fix typo for type hint in py_md_utils.py
* Run py md providers on background thread
* Rename MdSink -> MdBridge
2025-06-16 11:08:56 -04:00
John Colvin 3b9fb2759b build: Add lib_spark subdir first (all others depend on it) 2025-06-16 11:08:56 -04:00
John Colvin 3f89d3b7f7 dev qol: Add to_chrono fns to TimeSpan 2025-06-16 11:08:56 -04:00
John Colvin a6dd0d842d dev qol: Add -> operators to ValueWrapper for convenience
So we can type "foo->" instead of "foo.value()" (much shorter!)
2025-06-16 11:08:56 -04:00
John Colvin d050d2d19a build: Link against system installed ssl to support py interop
Unless we want to build python packages ourselves, the underlying clibs
they use link to the system installed ssl. Notably, the requests module.
2025-06-16 11:08:56 -04:00
John Colvin 942d00a8b1 chore: Add pybind11, pybind11-stubgen to py venv 2025-06-16 11:08:56 -04:00
John Colvin 31cb25ac2e improvement: Generate py stubs for md providers
Provides intellisense for the python_md_module
2025-06-16 11:08:56 -04:00
John Colvin cbb43a22de cleanup: Get rid of unecessary namespace prefixes 2025-06-16 11:08:55 -04:00
John Colvin 9e7b4849f0 cleanup: Get rid of "PyList" classes, bind to stl vector instead
I wasn't aware this was possible until recently.
2025-06-16 11:08:55 -04:00
John Colvin 6e72890153 refactor: Move SimpleOrderKeyMap from binance_execution to lib_spark
It provides basic functionality that will be useful in other execution gateways.
2025-06-16 11:08:55 -04:00
John Colvin c238fce057 chore: Add smart parse and pretty name fns for proto enums
Mainly to ease the pain of representing enums as strings in python md
and execution plugins
2025-06-16 11:08:55 -04:00
John Colvin b8f5db4ee2 refactor: Move ErrorList from binance_execution to lib_spark
It provides basic functionality that will be useful elsewhere
2025-06-16 11:08:55 -04:00
John Colvin 87c8b9862a refactor: Use SmallString std::array in AccountName 2025-06-16 11:08:55 -04:00
John Colvin fbc2d8633d refactor: Use SmallString instead of std::array in ExchangeOrderID 2025-06-16 11:08:55 -04:00
John Colvin d12d798fa5 Add our own "SmallString" class for fixed cap strings
This will replace the std::array<char, N> we use in ExecutionReport, etc.
among other things
2025-06-16 11:08:55 -04:00
John Colvin e75be2da2f refactor: Move ExecutionReportStore to lib_spark
From lib_binance_execution
2025-06-16 11:08:55 -04:00
Adeel Khan 3ae3a7094e CLEANUP: BYBIT Symbols.conf. 2025-06-16 11:08:55 -04:00
Adeel Khan bafa2f71ba ADD: BYBIT MD Working, NaN's also Added. 2025-06-16 11:08:55 -04:00
Adeel Khan 63bd29a49e ADD: BYBIT Securities showing up on frontend. Default Contract Spec 2025-06-16 11:08:55 -04:00
Adeel Khan 5fdc9ca48b ADD: GATEIO md_provider with dynamic contract specs using Batch REST call 2025-06-16 11:08:55 -04:00
Adeel Khan a19e7bc7b4 ADD: GATEIO md_provider with dynamic contract specs 1 REST call per Contract 2025-06-16 11:08:55 -04:00
Adeel Khan 04b0a89644 ADD: GATEIO md_provider with default contract specs 2025-06-16 11:08:55 -04:00
John Colvin 363a43cb8b Add gateio_dev config profile for Adeel 2025-06-16 11:08:55 -04:00
John Colvin c9f9c5f0f6 cleanup: Remove unused spark.conf file
Originally, this spark.conf was hardcoded into compose.yaml, and copied
into the sparkd container on each deploy. It hasn't been used since
config profiles were introduced.
2025-06-16 11:08:54 -04:00
John Colvin ab84a05644 Add py_dummy_md config profile to test py md plugin 2025-06-16 11:08:54 -04:00
John Colvin 4681f22e71 deploy: Move configurations to new stutter dir "app_sparkd" 2025-06-16 11:08:54 -04:00
John Colvin a25e055e35 Add protos for gateio 2025-06-16 11:08:54 -04:00
John Colvin 2386612b51 Add protos for bybit 2025-06-16 11:08:54 -04:00
John Colvin 3606dac145 build: Move onix fix adapter to its own lib
We should keep order execution dependencies out of lib_spark.
2025-06-16 11:08:54 -04:00
John Colvin bf936c9d13 fix build: Move OnixsUtils to from lib_spark to app_sparkd
They're only needed MDP3Main.cpp and ICEMain.cpp. We're one step closer
to removing lib_spark's dependency on onixs.
2025-06-16 11:08:54 -04:00
John Colvin 1aeeb7170e cleanup: Remove unnecessary onixs include from TrafixOrderStateHandler.h 2025-06-16 11:08:54 -04:00
John Colvin 78ad8a3aed feat: Support python md plugins 2025-06-16 11:08:54 -04:00
John Colvin 5ca8dbafaf Add "clear" fn to Book & BookSide
Prelude to python market data bindings
2025-06-16 11:08:54 -04:00
John Colvin b464b9466e Add "smart" parse fns for a couple proto enums
Prelude to python market data bindings. Unlike the normal parse fns, the
"smart" variants aren't case sensitive, and can match strings with or
without TYPE_NAME_ prefixes.
2025-06-16 11:08:54 -04:00
John Colvin 7a5c676e99 build: Move okx execution to its own lib 2025-06-16 11:08:54 -04:00
John Colvin 1e8d699dd1 cleanup: Remove unnecessary onixs include from IDGenerator.h 2025-06-16 11:08:53 -04:00
John Colvin aadd2dd594 cleanup: Remove unnecessary includes from MDP3Listener.h 2025-06-16 11:08:53 -04:00
John Colvin 5163ca4cae refactor: Organize libspark proj w/ stuttering include
This new structure provides several benefits:

* Allows us to install multiple CMake projects in the same destination
  dir (without include path conflicts).
  - This makes shipping the trading algo sdk a trivial excercise. Simply
    copy the lib and include dirs from the install dest. That's it!
* Puts us in a position to break up the monolithic libspark into smaller
  modules, which are easier to manage.

Windows specific notes:

* Get rid of unnecessary script vs_filters.cmake
* Define WebsocketConnectionGateway directly in cs (instead of proto)
  - The proto would no longer be in the include path passed to protoc.
    Moving it to c# because there wasn't a compelling reason for it to
    be a proto in the first place.
* Set spark output prefix to "lib" on windows
  - So we get "libspark.dll" instead of "spark.dll", which conflicts
    with the csharp lib, "Spark.dll".
* Copy libspark.dll to net8.0 & net8.0-windows in a single cmake build
  target

fix build: Copy libspark to both dirs net8.0, net8.0-windows
2025-06-16 11:08:53 -04:00
John Colvin b5d520d568 cleanup: Move TradeSummarySignalDispatcher to libspark
It is needed by TradeSummarySignal, which is in libspark. This prevents a
circular dependency from libspark -> sparkd.
2025-06-16 11:08:51 -04:00
John Colvin 83e4465a3b build: Clean up protobuf cmake scripts
Make them more flexible, reusable. This is a precursor to porting over
python md provider code from another branch.
2025-06-16 11:08:51 -04:00
John Colvin 54cfb343a8 build: Rename external path vars w/ "EXTERNAL_" prefix in cmake
The old "SPARK_" prefix felt like a misnomer.
2025-06-16 11:08:51 -04:00
John Colvin 4e9b360e23 Add a few arithmetic ops to TimeSpan 2025-06-16 11:08:51 -04:00
John Colvin 16bc93b1a0 diag: Log time it takes to start md sources
So we can detect bottlenecks
2025-06-16 11:08:50 -04:00
John Colvin f56d4d9062 refactor: Split MarketDataGateway up into providers/sources
MarketDataGateway still exists, but is greatly simplified. It creates
several `IMarketDataProvider`s, each of which generates a list of
`IMarketDataSource`s. The market data sources provide market data to an
`IMarketDataListener`.

* EmumbaMarketDataProvider
* CCApiMarketDataProvider
* PyMarketDataProvider
* OnixsMarketDataProvider
* ReplayMarketDataProvider

As a side effect, individual py market data sources are now explicitly
limited to a single venue (it probably should have been this way all
along, since the shared memory writers do not expect updates to involve
multiple venues).
2025-06-16 11:08:50 -04:00
John Colvin 36cc186626 cleanup: Remove dependency on quickfix for string to_lower
We shouldn't depend on external libs for trivial things like converting
strings to lower case.
2025-06-16 11:08:50 -04:00
John Colvin 2e78af1756 fix build: Upgrade IronPython to 3.4.2
All csprojs need to be on same version (Spark.csproj was on 3.4.1, while
DataStream.csproj was on 3.4.2)
2025-06-16 11:08:50 -04:00
Taha 70fae06a30 BlueOrb streams and MLP 2025-06-08 21:52:38 -04:00
John Colvin 07b59559a2 dev qol: Reduce md log level in config profile 2025-06-03 02:23:59 +00:00
John Colvin cd1709563b fix: Generate reject exe reports from ack at binance
This only applies to "new" order acks. In all other cases, exe reports
are generated from the order update stream. New order rejects are the
exception because they're not visible in the stream. Presumably, they're
never actually entered into binance's order system (they're "rejected"
before that happens).
2025-06-03 02:21:18 +00:00
arham 94f22ddf40 Update: changed url for okx ws exe in config 2025-05-30 12:59:26 +00:00
arham 7f6c08f956 Fix: positions now go through dispatch incoming 2025-05-29 16:26:05 +00:00
arham 1d737cdf82 Fix: change time to 5s for pos update okx 2025-05-23 16:12:12 +00:00
arham b645192355 Add: OKX position turned on 2025-05-23 15:33:11 +00:00
John Colvin 5ad7755b28 tool: Make open orders symbol param optional in binance.env 2025-05-20 20:08:34 +00:00
John Colvin df4ca124c3 cleanup: Remove redundant script get_binance_md.sh
I should have removed this when I added binance_rest_client.sh
2025-05-20 20:08:34 +00:00
John Colvin 2c8b9ee288 tool: Add envsource.fish to load .env files in fish 2025-05-20 20:08:34 +00:00
John Colvin f02f28e347 tool: Add a few vars to binance.env 2025-05-20 20:08:34 +00:00
John Colvin c8a89c1e8d cleanup: Rename get_binance_md.py -> binance_client.py
This is a more appropriate name (it's not just md anymore).
2025-05-20 20:08:34 +00:00
John Colvin 7ae9e07a30 tool: Use binance.env file in python client
Like the bash impl (binance_rest_client.sh), it gets urls, params
(templates), and api credentials from env vars.
2025-05-20 20:08:34 +00:00
Taha a130e47218 Arb Scoring stream 2025-05-20 00:24:17 -04:00
John Colvin a377f6de7f improvement (ui): Use sec qty display settings in rec report 2025-05-19 12:35:25 -04:00
John Colvin 855373c9e6 cleanup: Remove unnecessary code 2025-05-19 15:57:35 +00:00
John Colvin e1b535b633 feat: Sync exch positions in binance usds futs gw 2025-05-19 15:57:35 +00:00
John Colvin 3b9ac71460 refactor: Abstract out start/stop state machine for gen use
* From binance usds futures gateway
* Thread-safe
* Handles re-entrancy gracefully
2025-05-19 15:57:35 +00:00
John Colvin 9a5075daaf improvement: Use recursive_mutex in ws client to prevent deadlocks 2025-05-19 15:57:35 +00:00
John Colvin 4e7fe811a8 Add ConcurrentUnorderedMap (c++) 2025-05-19 15:57:35 +00:00
Taha 0a6733180d Added SpreadStatsStream 2025-05-18 01:10:33 -04:00
Taha f2169c6bd4 Adding more data to SpreadPerformanceStream 2025-05-16 01:42:32 -04:00
Taha 23ef478391 Spread analytics streams 2025-05-15 15:01:27 -04:00
John Colvin 236a5a9362 fix: Format binance order price up to 5 decimal places
Bugs (fixed):
  * Binance JELLYUSDT order prices get rounded to 4 decimal places, even
    though the price tick is 0.00001
2025-05-13 15:02:02 +00:00
John Colvin cb560bbe33 fix: Sum realized & unrealized pnl correctly in header rows 2025-05-08 14:13:02 -04:00
John Colvin 248f2644ca deploy: Automatically restart "sparkd-symbols" service
This is what we deploy to the alphaworx-zen-hk-live server
2025-05-07 14:49:53 +00:00
arham b87d86f4d6 FIx: okx exe user cancel should be cxl not rjct 2025-05-07 08:38:28 +00:00
arham 8515196dcb Add: okx exe fok orders working 2025-05-07 08:08:40 +00:00
Taha Afzal e5e042f016 Spreader in RH mode now fires FOK, and hedges only whne the FOK is completely filled (ie not as we we might get partial fills) 2025-05-07 06:12:48 +00:00
John Colvin da3593326d Enable FOK orders at binance 2025-05-06 22:20:46 +00:00
John Colvin 313d3a2377 Enable FOK in EMNativeOrder.cpp
This class was originally designed for Emumba execution at deribit
(hence the "EM" prefix), but now serves all crypto exchanges.
2025-05-06 22:19:11 +00:00
Taha Afzal 22f0e126d0 Adding FillOrKill (FOK) to TimeInForce 2025-05-06 19:39:40 +00:00
arham c76b061e20 fmt: okx exe 2025-05-02 09:00:00 +00:00
arham 0107b65281 add code for okx exe position updates 2025-05-02 08:59:46 +00:00
Taha Afzal 6b5496b799 OrderStore does not eleted all orders at sparkd boot-time now 2025-05-02 00:10:48 +00:00
arham 42f9daf9cb Add: okx cancel all after code, not turned on for now 2025-05-01 09:48:06 +00:00
arham bc5ddade7f Add: okx exe small changes to maybe make ping better 2025-05-01 09:42:54 +00:00
arham d8d198f7f4 Add: OKX only handle orders from this session 2025-05-01 09:41:20 +00:00
John Colvin af9eb670c1 build: Update build scripts to target dotnet 8 2025-04-30 12:06:28 -04:00
John Colvin d91837c377 improvement (pnl ui): Get qty display params from sec proto
Instead of config
2025-04-30 03:06:04 -04:00
John Colvin 7725ae33ef fix: Fix total realized/unrealized pnl calc 2025-04-30 01:35:22 -04:00
John Colvin 9f56abaa38 vscode: Replace net7 w/ net8 in launch.json 2025-04-30 01:15:34 -04:00
John Colvin 95444d4a4c fix: Exclude nans from pnl sum 2025-04-30 00:47:49 -04:00
John Colvin a7e1c18fe2 diag: Improve trace logs in binance usds futures gw 2025-04-29 19:49:33 +00:00
John Colvin d11fd23cb0 refactor: Drop "_" suffix in private vars (cpp)
It just looks ugly, and unnecessary with modern tooling. Plus it's ugly.
2025-04-29 19:35:15 +00:00
John Colvin 8499ac0dfb diag: Clean up structured logging in binance order store 2025-04-29 19:35:15 +00:00
John Colvin f4afe348e6 fix: Update timestamps in binance order store when orders change 2025-04-29 19:35:15 +00:00
John Colvin 096424b60b refactor: Use WebsocketClient fn run_in_background in binance gws 2025-04-29 19:35:15 +00:00
John Colvin b4f5e66466 fix: Set okx perp exp to year 2100
Because the year 3000 is too big for signed int64
nanosecond timestamp
2025-04-29 19:35:15 +00:00
John Colvin 69a0bcc9cd fix: Request binance fut md on ccapi dispatcher thread 2025-04-29 19:32:21 +00:00
John Colvin d72ebdf421 perf: Send Binance Usds Futs md rest reqs on background thread 2025-04-29 19:32:21 +00:00
John Colvin 8e93856767 fix: Send exchangeInfo req via our HttpClient instead of ccapi
For binance usds futs (we already did this for spots)

Bugs (fixed):
  * We get a boost beast exception about the read limit being exceeded
    when requesting securities from Binance prod url (testnet works).
2025-04-29 19:32:21 +00:00
John Colvin 19dae6cd34 fix build (cpp release): Don't return reference to local var 2025-04-29 19:32:21 +00:00
John Colvin 24f42550dd fix build (cpp release): Explicitly cast int64 -> uint64 2025-04-29 19:32:21 +00:00
John Colvin c2150ae450 refactor: Move BinanceUsdsFuturesFilterTuple fns to cpp file 2025-04-29 19:32:21 +00:00
John Colvin 40dbfaa068 improvement: Support both key types in binance spots gw
Namely, ED25519 and HMAC-SHA256. Only the former can be used
to login over websocket, which eliminates the need to sign requests
after that.
2025-04-29 19:32:21 +00:00
John Colvin 3756a8a8b7 Add api key type enum to binance exe gateway config
ED25519 keys offer performance benefits over the HMAC-SHA256
keys when using the websocket api, as you can log in on the websocket
connection to avoid signing each request.
2025-04-29 19:32:21 +00:00
John Colvin 46c8dcb18f fix: Add binance spot order newOrderResp type to json/query params 2025-04-29 19:32:21 +00:00
John Colvin 024480f32e improvement: Send binance usds fut orders via websocket api
Unlike the previous implementation, which sent REST requests, this won't
block the dispatch thread waiting for a response.
2025-04-29 19:32:21 +00:00
John Colvin ba525372bb cleanup: Move a few types from orderman_utils to their own headers
So they can be included without depending on OrderService.pb.h
2025-04-29 19:24:41 +00:00
John Colvin 8aa0f1b674 refactor: Move binance state machine out of "spots" dir
So it can be used in the implementation for all binance apis (usds futs,
cross margin, etc.)
2025-04-29 05:24:04 +00:00
John Colvin fc14215d9b fix: Don't assert-crash if ord key isn't found for outgoing req
The i/o is asynchronous, so it's possible for the gateway to receive
a terminal ack from the exchange, remove the order from its index,
then receive a cancel/modify req from an algo that submitted the
req before it knew the order reached a terminal state.
2025-04-29 05:24:04 +00:00
John Colvin 091ed5a327 fix: Don't fire exe report for internal rejections
Internal rejections don't mean the order isn't "working". Only
rejections from the exchange mean that.
2025-04-29 05:24:04 +00:00
John Colvin 30bb9d0837 fix: Make SpotsOrderStore threadsafe 2025-04-29 05:24:04 +00:00
John Colvin 9cb2c580d6 diag: Use structured logging in binance spots gw 2025-04-29 05:24:04 +00:00
John Colvin 2e2150ac1a refactor: Send binance spot orders through websocket api
This offers performance benefits over the REST api, since we don't have
to sign each request.

Note: I consolidated the UserDataSubscription code into SpotsGateway
because it was cleaner than trying to share a single websocket
connection between the two classes (UserDataSubscription and
SpotsGateway).
2025-04-29 05:24:04 +00:00
John Colvin 21d9435a67 Add run_in_background fn to WebsocketClient (cpp) 2025-04-29 05:24:04 +00:00
John Colvin e7e334fb5a Add continous ping function to WebsocketClient (cpp) 2025-04-28 17:12:59 +00:00
John Colvin 61f04c4605 fix: Implement state machine for binance cxl/replace 2025-04-28 17:12:59 +00:00
John Colvin 24fb2e1e39 refactor: Remove 'get_internal_key' delegate from exe report store
It made constructing the exe report store awkward, and smelled like poor
design.
2025-04-28 17:12:59 +00:00
John Colvin ece141c448 Add dedicated types for structured logging 2025-04-28 17:12:59 +00:00
John Colvin 617bac8e74 cleanup: Move CancelOrderMsg impl to .cpp 2025-04-28 17:12:59 +00:00
John Colvin ab217401eb cleanup: Move CreateOrderMsg impl to .cpp, get rid of unused code 2025-04-28 17:12:58 +00:00
John Colvin 77e5c1481b Add security_id/name fns to ExecutionReport for convenience
So callers don't need to check if security is a nullptr
2025-04-28 17:12:58 +00:00
John Colvin a0f77f92a3 cleanup: Move ExecutionReport impl to .cpp
Also add using aliases to get rid of repetitive namespace prefixes
2025-04-28 17:12:58 +00:00
John Colvin 0acdcb150d fix: Format price & qty w/ 6 decimals in binance modify order json 2025-04-28 17:12:58 +00:00
John Colvin ac2f3b9bc6 Add ConcurrentQueue (c++) 2025-04-28 17:12:58 +00:00
John Colvin 0e522f90e5 refactor: Add line num suffix to var name in LOCK_GUARD macro
Rename to "BTS_LOCK_GUARD" while we're at it to avoid potential naming conflicts
2025-04-28 17:12:58 +00:00
John Colvin 40ad1f1b48 Update binance websocket endpoints
The api just changed, and old urls will be retired in May 2025
2025-04-28 17:12:58 +00:00
John Colvin 1cb75d399f devcontainer: Update dotnet7 -> dotnet8 2025-04-28 17:12:58 +00:00
John Colvin cddecc0543 cleanup: Fix benign typo in websocket_client.h
The open_handler fn return type should be "OpenHandler", not
"CloseHandler" (obviously).
2025-04-28 17:12:58 +00:00
John Colvin 484e36b330 refactor: Make timestamp internal value to signed (int64)
I am sick of casting uint64 -> int64. The latter is a much more
common argument type than the former.
2025-04-28 17:12:58 +00:00
John Colvin 8a9c22fa2a vscode: Add Python Debugger entry to launch.json 2025-04-28 17:12:58 +00:00
John Colvin a6e8853cb9 fix build (warns): Account for nullable ref types 2025-04-28 17:12:58 +00:00
John Colvin dafa193283 fix build (windows): Update externals to fix catch include path
I couldn't get the build to work with the new catch2 on windows, though
it does work on linux. Rather than revert the catch -> catch2 include
path changes (again, which do build on linux), I decided to rename the
old windows catch include dir 'catch2'.
2025-04-28 17:12:58 +00:00
John Colvin 23651970c9 fix: Fix improper 'OfType' linq cast
Previously, animations were expressed through polymorphism (derived from the
base class CellAnimation), but the new impl uses composition. This 'OfType' call
was leftover from the polymorphism implementation, an attempt to linq cast
elements of base class (CellAnimation) to BackgroundAnimation.
2025-04-28 17:12:58 +00:00
John Colvin 043efab5a2 build: Upgrade c# to net8.0 2025-04-28 17:12:58 +00:00
John Colvin 5476466d55 Fetch secrets for config profiles with new aws sso config 2025-04-28 17:12:58 +00:00
John Colvin 54cb5a2ab2 tool: Add script to configure aws sso 2025-04-28 17:12:58 +00:00
John Colvin 29bf7d8d7e deploy (fix): Update okx urls
Their aws domain has been retired.
2025-04-28 17:12:58 +00:00
John Colvin 855d2fd790 build: Update vcpkg 2025-04-28 17:12:58 +00:00
John Colvin 8a6a652882 fix build: Get rid of databento's internal nlohmann-json
** Migrate nlohmann-json over to vcpkg in the process **

Make it so databento is built with the same nlohmann-json lib that our
code is built with. Recently, I started getting undefined symbol errors
in databento code from nlohmann headers - presumably a conflict between
their nlohmann dep and ours.
2025-04-28 17:12:58 +00:00
John Colvin 3f288704bf build (linux): Migrate openssl to vcpkg, update to 3.5.0
Databento, as of version 0.32.0, requires openssl >= 3.0

https://github.com/databento/databento-cpp/releases/tag/v0.32.0
2025-04-28 17:12:58 +00:00
John Colvin 98bc78463d build (linux): Migrate catch2 dep to vcpkg (from externals) 2025-04-28 17:12:58 +00:00
John Colvin 6d271ad7cd build (linux): Manage fmt dep with vcpkg 2025-04-28 17:12:58 +00:00
John Colvin 2a17d656a5 fix: Dump json to str in LOG statements
The nlohmann::json obj isn't formattable (i.e., doesn't have a
fmt::formatter<T> specialization)
2025-04-28 17:12:58 +00:00
John Colvin 10436f0f3b tool: Rename binance_orders_client.sh -> binance_rest_client.sh
It supports md and order/trade requests
2025-04-28 17:12:58 +00:00
arham 86b19f0ef0 Add: okx exe treats all cancelations except ioc as rejections 2025-04-26 05:35:46 +00:00
Taha Afzal 502024dd10 Removing an overzealous assert in the spreader, which was being false if the spread_book was not received once 2025-04-23 04:40:16 +00:00
John Colvin 623012b0b0 deploy: Add "sparkd_symbols" image to Dockerfile
Normally, we bake spark config into the image, which is simpler and less
error prone than managing separate configurations per host machine
and/or container. The sparkd_symbols deployment breaks the mold. Config
is mounted to a dir on the host machine so symbols can be added/removed
via config (i.,e., spark.conf) when we bounce sparkd.
2025-04-17 05:53:05 +00:00
John Colvin 5859f0f2d1 deploy (fix): chown bts for whole sparkdata dir in sparkd-symbols
Unlike normal deploys, the config dir isn't copied directly into the image
2025-04-16 13:48:24 +00:00
John Colvin eeffb735ae deploy (fix): Override existing values when loading env files 2025-04-16 13:48:24 +00:00
John Colvin b602997f3a deploy: Build sparkd if any service starts with "sparkd"
Previously, we only built sparkd for the "sparkd" service (i.e., exact match)
2025-04-16 13:48:24 +00:00
Taha Afzal 3530a77b38 Fixing the situation where an IOC cancels, cancels the spreader 2025-04-16 04:26:50 +00:00
arham afdf635b31 fix: changes spread_book_tick_sz from int to double to fix low tick being zero for reverse hedge orders 2025-04-11 07:31:03 +00:00
John Colvin 4d4aefc0a7 fix: Bind SpreaderType dropdown to all algo types in synth ladder
Bugs (fixed):
  * The SpreaderType dropdown only works for plain spreader orders. It
    doesn't work for icebergs, leans, etc.
2025-04-10 16:16:43 -04:00
arham 960a8af77a Fix: OKX futures working now 2025-04-10 05:06:17 +00:00
Taha Afzal 89828659a4 Reducing loggging on reverse hedge evaluation 2025-04-09 20:05:48 +00:00
John Colvin 76f83fd7f5 Revert "Set irrelevant spreader params to null in ladder"
This reverts commit 924386084b.
2025-04-09 15:52:00 -04:00
Taha Afzal d4e40948d2 Changing the logic to determine if a leg is a quoting leg or not 2025-04-09 19:29:50 +00:00
arham 912ab512d2 Add: ioc orders to okx exe 2025-04-09 19:00:24 +00:00
Taha Afzal 5d3eb92175 Spreader gets the spread ticks from the right source now (it was hard coded at 0.1 earlier) 2025-04-09 18:42:06 +00:00
John Colvin 924386084b Set irrelevant spreader params to null in ladder
Depending on the SpreaderType enum value (treat it like a oneof case)
2025-04-09 10:29:15 -04:00
Taha Afzal acab3ac392 Reversehedging fixed 2025-04-09 09:42:47 -04:00
arham d06a62f6ee Format: ran clang format on file 2025-04-09 09:42:47 -04:00
arham 14e3eee0bc Add: config changes to make server controller work and set up hk zen server 2025-04-09 09:42:47 -04:00
Taha Afzal 7277bf52f5 Fixing build: 2025-04-09 09:42:47 -04:00
Taha Afzal b81dc7f5cf Fixing a bug, where the spreader was isidentifying the quoting leg 2025-04-09 09:42:47 -04:00
John Colvin b1a4635345 ui: Enable IOC for Iceberg orders
Previously, it was only enabled for Limit orders.
2025-04-08 13:22:09 -04:00
John Colvin 7c7c689170 fix build: Don't cast to unsigned int when checking bytesRead < 0 2025-04-04 15:36:55 -04:00
John Colvin 116506c8da fix build: Lock databento version to v0.31.0
Previously, we were simply fetching HEAD. This was fine until they
released v0.32.0 (on 04/02/2025), which introduced a new dependency
requirement that broke our build: OpenSSL >= 3.0.
2025-04-04 15:36:55 -04:00
Adeel Khan 3feda49ef1 Fix: Taifex Time Conversion 2025-04-04 15:36:54 -04:00
Adeel Khan 10318be7bc FIX: Taifex Crash Fixed, Added Diag Logs 2025-04-04 15:36:54 -04:00
Adeel Khan f7d525a527 ADD: TBBO & Symbol wise Naming in Recorder 2025-04-04 15:36:54 -04:00
Adeel Khan d2fe9f167a ADD: TWSE Code Complete 2025-04-04 15:36:54 -04:00
Adeel Khan 696d91a5af ADD: TWSE to WebApp 2025-04-04 15:36:54 -04:00
Adeel Khan d575ba0ea8 ADD: TWSE throughout Sparkd 2025-04-04 15:36:54 -04:00
Taha 058b131760 Cleaning up some streams,new prompt etc 2025-04-04 15:36:52 -04:00
John Colvin 57f8f3ff58 ui: Add Sniper and Reverse Hedge controls 2025-04-04 00:19:38 -04:00
John Colvin 775df2850d Add Sniper and Reverse Hedge params to spreader proto 2025-04-04 00:19:38 -04:00
Taha Afzal cb2b15f10b Adding IOC to SimExecution 2025-04-03 23:24:30 +00:00
Taha Afzal 60362a4c95 Adding reverse-hedge to spreader 2025-04-03 23:24:30 +00:00
John Colvin c6d7a8f38c ui (pnl): Use dark theme fg in "Selected" and "Total" labels
Previously, it was black and hard to read since the background is dark.
2025-03-26 14:46:44 -04:00
John Colvin 7931c62b46 ui (pnl): Hide "Override Cpp" menu item
The overrides aren't respected in (new) pnl calcs.
2025-03-26 14:35:23 -04:00
John Colvin 58518451c8 ui (pnl): Show realized/unrealized pnl in row group totals 2025-03-26 14:31:04 -04:00
John Colvin e3bad78aef fix (pnl ui): Get cash per point from security
Previously, it was hardcoded to 1.
2025-03-24 16:54:37 -04:00
John Colvin 8e9ab8f2eb fix: Don't apply cme cpp overrides to non-cme securities
Bugs (fixed):
  * The cash per point for many securities is wrong. For example, it is
    5 for all BTC securities (which is wrong).

    Cause: cpp override config that should be specific to cme is applied
    to ALL securities.
2025-03-24 20:20:53 +00:00
John Colvin 8512f414d6 fix: Don't duplicate animations when migrating pnl window settings 2025-03-24 14:53:09 -04:00
John Colvin 513fc353cf ui (pnl): Increase default width for a few columns
I noticed some data was truncated when connected to Alphaworx prod
server.
2025-03-24 14:39:40 -04:00
John Colvin 4a04beafd2 cleanup: Consoildate order extension methods 2025-03-24 11:19:51 -04:00
John Colvin 79a3251f26 fix: Make security comparison deterministic again 2025-03-24 11:19:51 -04:00
John Colvin 8785e0fecd fix: Bootstrap all observers w/ snapshot on first update
Previously, the Subscribe impl only bootstrapped the first observer
(i.e., only in first call to Subscribe).

Bugs (fixed):
  * The ladder crashes if there are working orders when the
    ticks-per-row setting is changed.

    Cause: The ladder viewmodel resubscribes to order updates each time
    the ticks per row setting changes (as this determines the size of
    the price buckets into which orders are grouped). The IObservable
    "Bootstrap" extension fn doesn't properly clean up state leftover
    from the previous subcsription when this happens.
2025-03-24 11:17:04 -04:00
John Colvin 04251c96b6 ui (pnl): Compute pnl as sum of realized + unrealized
This addresses a subtle inconsistency in the pnl window.

The old "start_pnl" and "day_pnl" values (from IPNLUnit) are computed
with respect to the mid market for both long and short positions, while
the new "unrealized" pnl values are computed with respect to the side of
the market needed to close the position (i.e., bid market for long pos,
ask for short). Consequently, the combined pnl columns weren't equal to
the sum of realized and unrealized pnl.
2025-03-24 10:13:24 -04:00
John Colvin c2d400af1a fix (pnl ui): Don't overwrite menu display settings w/ defaults 2025-03-24 10:13:24 -04:00
John Colvin 133cc16628 ui: Add menu item to open mview from pnl
Populated with the same securities as the pnl window
2025-03-24 10:13:24 -04:00
John Colvin 16f7aede93 fix: Add case for Synthetic sec type in proto conversions 2025-03-24 10:13:24 -04:00
John Colvin 2b9488faff ui: Make pnl default settings pretty
* Make profit (green) and loss (red) easier to read against dark bg
* Hide 'SOD' and 'Day' columns (just show totals)
2025-03-24 10:13:24 -04:00
John Colvin 51b6d592d3 fix (pnl ui): Negate short avg cost when translating to avg price 2025-03-23 15:17:41 -04:00
John Colvin 1eb4ceba0a ui: Add columns for long/short avg pnl
When looking at avg cost, you often really want to know the difference
between it and the current market. These columns provide that information
so you don't need to do the arithmetic in your head.
2025-03-23 15:17:41 -04:00
John Colvin dbf5cadb44 ui: Add columns for realized/unrealized pnl 2025-03-23 15:17:41 -04:00
John Colvin 90f1bb0851 refactor: Move PNL data types to spark_api csproj 2025-03-23 13:08:46 -04:00
John Colvin 547d83e1b8 cleanup: Remove unused pnl enum WaterfallPriceFlags 2025-03-23 13:08:41 -04:00
John Colvin e888149c41 Add order msg throttle to sparkd config profiles 2025-03-20 17:29:43 +00:00
John Colvin b944c3980f Show 6 decimals in spreader order log
So we can better track those rascally iceberg orders w/ small fractional
quantities
2025-03-20 14:30:35 +00:00
Taha Afzal c2a8266106 merging 2025-03-20 01:23:05 +00:00
Mohammad Arham 4277ba61b9 Fix: Okx execution only sends 2025-03-19 13:26:57 -04:00
Mohammad Arham 35cfe9533b Add filter for okx er we that were caused by orders from outside the system 2025-03-19 13:26:39 -04:00
John Colvin d49efef93d Increase ram to 8gb in alphaworx_prod config
The previous value of 4gb wasn't enough, as the container would
occasionally crash with a SIGKILL interrupt.
2025-03-19 15:26:14 +00:00
John Colvin 502ed13456 fix: Round IcebergAlgo remaining quantity
Bugs (fixed, 2nd attempt):
  * Iceberg orders w/ fractional quantities can get into a state where
    they send an infinite stream of orders w/ 0 qty
2025-03-19 14:43:24 +00:00
John Colvin 716c4dd674 tool: Add script to dump sparkd logs to sqlite db 2025-03-19 14:41:23 +00:00
John Colvin 4a2b189a07 diag: Format Price and Quantity w/ up to 6 decimal places 2025-03-17 13:00:15 +00:00
John Colvin a42edaf9fa diag: Trivial fix for log msgs in SpreaderOrder
* Format qty with fractional part
* Remove redundant log
2025-03-17 13:00:15 +00:00
John Colvin cbc142ab15 fix: Account for rounding error in IcebergAlgo fills
Bugs (fixed):
  * Iceberg orders w/ fractional quantities can get into a state where
    they send an infinite stream of orders w/ 0 qty

    Note: I also changed the number of decimal places used when rounding
    order quantities from 6 to 7 (the level of precision guarenteed by
    IEEE 754).
2025-03-17 13:00:15 +00:00
John Colvin 3980f2d030 Add order msg throttle to alphaworx_prod config 2025-03-17 13:00:15 +00:00
John Colvin 00f6d269c9 fix: Set binance routing record "operator_id" to username (not account)
Must have been a typo
2025-03-17 00:51:54 +00:00
John Colvin 10b2d38de8 tool: Add cmd to tail sparkd log file using docker compose 2025-03-17 00:51:54 +00:00
John Colvin 6d4d8f6ac1 fix: Disable ccapi order book cross check for Binance md
When enabled, the checks fail regularly (usually more than once per
hour). Sometimes many of them happen in rapid succession before sparkd
crashes. I'm disabling them in the hopes that the crosses are benign,
and this will stop the crashes.
2025-03-17 00:51:54 +00:00
John Colvin 5db89e1e8d diag: Tone down noisy order management logs
* EMNativeOrder
* OrderRouter - only log routing record result if there are errors
* OrderServiceServer
* OrderStore - also avoid calling pb::to_string twice per change (it's
  expensive)
* ServiceBridge
2025-03-17 00:51:47 +00:00
John Colvin 379a46afa2 Add order msg throttle to sim_dev config 2025-03-15 20:07:14 +00:00
John Colvin d9eff37184 fix: Don't let rounding error accumulate in mview order summarizer
Bugs (fixed):
  * Sometimes mview shows that a security has working orders when it
    doesn't. It appears to be rounding-related as the price and qty of
    the phony working orders is NaN and 0, respectively.

  Cause: Rounding error accumulates in the order summarizer. If it gets
  bad enough, the working quantity (which is computed incrementally as
  orders transition to/from a working state) may still be non-zero after
  all orders become non-working.
2025-03-15 15:21:56 -04:00
John Colvin 3d055de139 cleanup: Rename _tick_factors -> _qty_tick in mview order summarizer
It is specifically for quantity (not price).
2025-03-15 15:21:56 -04:00
John Colvin 648be7dd97 improvement: Don't resort orderbook on every order update
This causes performace issues when the orderbook is sufficiently large
(noticeable when around 20k orders).
2025-03-15 15:21:56 -04:00
John Colvin 2cac9affe4 fix: Use consistent price comp in ladder order stream
Bugs (fixed):
  * The ladder occasionally crashes when orders are changing.

    Cause: Subtle differences between the ordinal and equality comparers
    made it possible for 2 prices to be considered equal by the former,
    and not equal by the latter. Since the ladder indexes orders by
    price, a "Key not found" exception could be thrown if the equality
    comparer detected a price change that the ordinal comparer did not.
2025-03-15 15:21:55 -04:00
John Colvin 30ff3ba707 Add some null checks in LadderGridHost 2025-03-15 15:21:55 -04:00
John Colvin 9d3afd68aa ui: Format Perp and Spot exps as "Perp" and "None" 2025-03-15 15:21:55 -04:00
John Colvin 8c3de1789b fix: Apply leg price mults when computing synth book
This is necessary to support synths with BTC-USDC-SWAP legs at Okx
(because 1 "contract" == 0.01 BTC).

Bugs (fixed):
  * Price multiplier has no effect in synthetic book
2025-03-14 19:32:04 +00:00
John Colvin b251e1d47e build: Generate semantic version header from git
Dump it to console and log file when sparkd runs
2025-03-14 16:00:06 +00:00
arham 6ccd48a8ba Fix, 1e-5 orders working okx 2025-03-13 17:49:14 +00:00
John Colvin 41d84f7f73 Change externals submodule url from ssh to https 2025-03-13 17:08:04 +00:00
John Colvin 795062864d fix: Fix typo in permission filter comparison (change == to !=)
Bugs (fixed):
  * The orderbook and ladder blink/flicker when orders change if logged
    in as non-bts user.

    Cause: The permission filter acted as if the predicate itself
    changed everytime an order changed. As a result, it would fire one
    update to cleared all values, then fire another to add items that
    pass the "new" predicate.
2025-03-13 10:39:33 -04:00
John Colvin 1ff72e9444 fix (ui): Show fractional order qty in activity log
Also fix formatting - change "price @ qty" to "qty @ price"
2025-03-13 10:39:33 -04:00
John Colvin e13b5066a3 fix: Preserve fractional qty when modifying existing order in ticket 2025-03-13 10:39:33 -04:00
Mohammad Arham 5ba7901258 Fix: undo special case for btc swap and add ccp for swaps 2025-03-12 20:47:44 +00:00
Mohammad Arham bc6eb59110 Fix: Change cttype from optional to string 2025-03-12 20:45:27 +00:00
John Colvin 5ae5a5dcbf fix: Add switch case for PositionSide::BOTH in binance futs gw
In this case, the position is signed (unlike LONG and SHORT).
2025-03-12 14:55:56 +00:00
John Colvin 7966bcce77 fix: Change trade id from uint32 to int64 2025-03-12 04:27:54 +00:00
Mohammad Arham ff86b10895 Fix: temp fix to move okx btc swap to config for min tick 2025-03-11 20:35:24 +00:00
John Colvin ea3c0717d8 fix: Remove erroneous assert from binance usds futs gateway 2025-03-11 19:48:11 +00:00
John Colvin d0abca3fd9 Fix symbols and account alphaworx_prod config 2025-03-11 19:47:34 +00:00
John Colvin 7895fe7357 Remove taifex and glbx from NotSimExecution in conf profiles 2025-03-11 15:24:08 +00:00
Mohammad Arham 6f5f4f5cc2 Fix: okx excution working now 2025-03-11 14:25:42 +00:00
John Colvin 066a0ba693 ui: Use dark theme foreground in mini orderbook, fills popups
It was black in a couple places before, making it hard to read.
2025-03-10 14:47:58 -04:00
John Colvin c2b67b4813 fix: Check for null in orderbook root algo type filter 2025-03-10 14:47:58 -04:00
John Colvin ecad456a2d fix: Apply exp filter to popup grids in pnl window 2025-03-10 14:47:58 -04:00
Taha Afzal 2cb3cfdcdd Spreader's orders were hardcoded to be DAY, now it gets it from the parent 2025-03-10 17:22:08 +00:00
Taha Afzal 0ebc8e5b4b Orders in DB are deleted on server bounce 2025-03-10 15:42:12 +00:00
John Colvin 2072105c0f cleanup: Add using aliases to make code more concise 2025-03-10 14:53:07 +00:00
John Colvin d663c86aa0 improvement: Only load synth metadata from disk once in md dumper
Instead of every time a synth is dumped (i.e., do it lazily, outside the
loop body)
2025-03-10 14:53:07 +00:00
John Colvin 4a2dfa46a1 improvement: Print delimiter line when dumping secs to console 2025-03-10 14:53:07 +00:00
John Colvin 6e35db6a24 improvement: Apply filter to shared mem secs in md dumper
Previously, filter only applied to db securities (i.e., when --db flag
was used)
2025-03-10 14:52:39 +00:00
John Colvin b45dc3bc2d fix: Preserve create time when order is updated
Bugs (fixed):
  * Order create time mirrors last update time (it should never change).
2025-03-10 05:24:49 +00:00
John Colvin a1912907b8 Add brief readmes for sparkd config profiles 2025-03-10 05:24:49 +00:00
John Colvin b1b3dcdeb8 Add sim_dev config profile for sparkd 2025-03-10 05:24:49 +00:00
John Colvin 03dc8ef767 Add boto3 to py venv, so we can retrieve secrets from aws 2025-03-10 05:24:49 +00:00
John Colvin 975bf56c2a fix: Don't spam binance w/ listen key requests
Sleep for a few seconds before trying again on failure.
2025-03-10 05:24:49 +00:00
John Colvin 3f58c2ce84 Add script to install aws cli
The aws cli can be used to configure credentials in the shell in order
to retrieve secrets (e.g., production api keys for alphaworx, etc.).
2025-03-10 05:24:49 +00:00
John Colvin 96f28acf91 Add dev config profile for sparkd 2025-03-10 05:24:49 +00:00
John Colvin c2c2658e21 Add alphaworx_prod config profile for sparkd 2025-03-10 05:24:49 +00:00
John Colvin d6b8e359cd Expand environment vars in binance gw config 2025-03-10 03:05:59 +00:00
John Colvin 84a0850d95 Tweak binance_dev config profile
* Factor out repeated symbol list into SymbolLists entry
* Change "binance_dev" account to "BINANCE_DEV" in exe gw json
* Adjust log level
* Remove unused config:
  - ExchangeSubAccounts
  - JetFIX_Connection.max_order_msgs_per_window
2025-03-10 03:05:59 +00:00
John Colvin 4effdc4160 diag: Log when http buffers are resized in binance exe gws 2025-03-10 03:05:59 +00:00
John Colvin b9fe39f6e3 refactor: Make MDRecorder join the run thread in destructor
This wasn't broken, but detached threads bother me.
2025-03-10 03:05:59 +00:00
John Colvin b555850015 build: Package & deploy sparkd with docker compose 2025-03-10 03:05:59 +00:00
John Colvin 23794fa30d devcontainer: Add docker in docker
Also remove default port bindings in devcontainer (so the "docker in
docker" sparkd can use them). It's easy enough to manually bind ports
in vs code.
2025-03-08 05:20:08 +00:00
John Colvin 90b5a309a3 cleanup: Make a couple fns const
Probably a typo, since these fns don't mutate anything.
2025-03-08 05:20:08 +00:00
John Colvin 07beda3fc6 fix: Support fractional show qty in iceberg orders 2025-03-07 20:42:24 +00:00
Taha Afzal e3c1ea70f2 Spreader orders can now be entered in fractional qty 2025-03-07 05:24:39 +00:00
Mohammad Arham 93b93969f5 Add: config to control databento md better 2025-03-06 02:44:40 +00:00
Mohammad Arham 0a10111846 Small changes to make cboe md work 2025-03-06 02:44:07 +00:00
John Colvin eee00cc407 diag: Integrate websocketpp with our logging system
* Unifies log message structure for improved readability
* Grants us runtime control over log levels via config
2025-03-05 20:48:14 +00:00
John Colvin 0eb58eaba8 fix (preemptive): Pass websocket io_context to PImpl ctr
The 'io_context' member var is accessed in the constructor (it must be
initialized before that happens).
2025-03-05 20:42:50 +00:00
John Colvin 12f6733d1e cleanup: Remove unnecessary account mapping in binance_dev conf 2025-03-05 18:04:04 +00:00
John Colvin 93a0984ed1 Filter out non usdc/usdt spots in binance_dev conf 2025-03-05 18:04:04 +00:00
John Colvin b7e9c393a0 fix: Don't sign binance listen key requests
The spots and usds futures apis ignore the unnecessary signature params,
but the cross margin api responds with an error.
2025-03-05 18:04:04 +00:00
John Colvin aa602b3fd6 tool: Add cross margin reqs to binance.env 2025-03-05 18:04:04 +00:00
John Colvin b4b8cabdae tool: Add listen key reqs to binance.env 2025-03-05 18:04:04 +00:00
John Colvin cfe06869b3 tool: Support empty query params in binance_orders_client.sh 2025-03-05 18:04:04 +00:00
John Colvin b177ed1cc0 fix: Include listenKey param in listen key refresh req (binance)
The cross margin api requires this. Spots and futures apis don't, but
including it for them is harmless. I also changed the response json impl
to treat the 'listenKey' field as optional (it's omitted in the cross
margin api).
2025-03-05 18:04:04 +00:00
John Colvin ff17a64933 cleanup: Remove unnecessary includes 2025-03-05 18:04:04 +00:00
John Colvin 81a1fe11f6 feat: Add binance gw for cross margin orders
Spots only
2025-03-05 18:04:04 +00:00
John Colvin ad5bf88fcf refactor: Rename user_data_streams dir, ns without plural 's'
There is one user data stream for Binance Spots, and another for Usds
Futures. We model both of these user data streams in separate folders,
so each "user_data_stream" dir represents a single stream.
2025-03-05 18:04:04 +00:00
John Colvin e15f155ac9 refactor: Abstract out common binance gw code
For all sub-venues to use
2025-03-05 18:04:04 +00:00
John Colvin 6d6822cd65 refactor: Rename binance exe gw filenames so they are unique
The debugger gets confused when a particular lib contains multiple
source files with the same name (in different dirs).
2025-03-05 18:04:04 +00:00
John Colvin ace0c70516 fix: Trim account name string when converting to Fill proto 2025-03-05 18:04:04 +00:00
John Colvin e9e5059bc2 fix: Disable CURLOPT_FAILONERROR to always get response body
Even when the http error code indicates failure. The payload may contain useful
information about the error.
2025-03-05 18:04:04 +00:00
John Colvin cde72f51a0 Improve logging/error reporting in binance execution gw
In the process, consolidate binance exe report stores into single class.
2025-03-05 18:04:04 +00:00
John Colvin e1fd49ae32 cleanup: Specify bts account directly in binance gw config
This eliminates the need for an ExchangeSubAccountResolver.
2025-03-05 16:00:43 +00:00
John Colvin 274f3f98e4 cleanup: Replace includes w/ fwd declares in header 2025-03-05 16:00:43 +00:00
John Colvin a4b7d84318 fix: Reject orders w/ invalid TimeInForce at binance
Do this internally (before sending them to the exchange)
2025-03-05 16:00:43 +00:00
John Colvin be17205094 fix: Report internal reject msgs to ExecutionReport
For Binance execution gateways (spots and usds futures)
2025-03-05 16:00:43 +00:00
John Colvin 6ef9bee8e4 Add reconnect behavior to WebsocketClient 2025-03-05 16:00:43 +00:00
John Colvin 2c8b3563f1 cleanup: Perform basic init in WebsocketClient ctr 2025-03-05 16:00:43 +00:00
John Colvin 71f7e64ccb Move config profiles dir to server/sparkd 2025-03-05 16:00:43 +00:00
John Colvin c31b44ecfb diag: Log when config server starts and show url 2025-03-03 19:32:16 +00:00
John Colvin 19efb77e07 tool: Add some usds futures requests to binance.env 2025-02-24 15:12:45 +00:00
John Colvin 76de640421 diag: Show Binance sub-venue in log message prefix
Otherwise it's hard to tell which Binance venue the log is about (e.g.,
spots, usds futures, etc.).
2025-02-24 06:16:22 +00:00
John Colvin fb030742d3 Clean up binance_orders_client.sh a bit, add docs 2025-02-24 06:06:15 +00:00
John Colvin 73608f1b45 perf: Run each ccapi md session on its own thread 2025-02-24 06:04:52 +00:00
John Colvin 58aebe7002 diag: Reduce log noise in CCApiMarketDepthAdaptor 2025-02-24 06:04:52 +00:00
John Colvin 299cb0b29e diag: Log when curl_global_init/cleanup is called
It should only happen once for the whole app (so it shouldn't be noisy).
2025-02-23 20:08:52 +00:00
John Colvin 06663f711e improvement: Only call curl_global_init/cleanup once
Avoids unnecessary overhead (plus their docs say it only needs to be
done once for the whole app). These fns have "global" in their name for
a reason.

https://curl.se/libcurl/c/curl_global_init.html
2025-02-23 20:08:52 +00:00
John Colvin 51479f4885 fix: Disable signal handling in curl
This avoids a strange stack corruption bug related to set/longjmp.

https://stackoverflow.com/questions/9191668/error-longjmp-causes-uninitialized-stack-frame
2025-02-23 20:08:50 +00:00
John Colvin 5b520ba241 cleanup: Get rid of custom fmt::formatter for security proto
Security proto objects are large, so we shouldn't pass them by value to
the log system. The custom formatter's presence makes this easy to do by
accident.
2025-02-23 19:05:42 +00:00
John Colvin f0651a5341 tool: Add flag to roll logs without running sparkd 2025-02-23 15:36:10 +00:00
John Colvin 897e0990a2 diag: Improve logging in SecurityCache 2025-02-23 15:36:10 +00:00
John Colvin 30e1ae5c3c Add Binance execution to config profile 2025-02-23 15:36:10 +00:00
John Colvin efe83f81ec fix: Index live securities (as well as db ones) in SecurityCache 2025-02-23 15:36:10 +00:00
John Colvin 5fb21ada97 diag: Add sec id to PositionMap log 2025-02-23 15:36:10 +00:00
John Colvin 58edd07f6b fix: Check for empty string in strn fns 2025-02-23 15:36:10 +00:00
John Colvin 9d81354c3a Add binance_orders_client.sh for quick/easy troubleshooting 2025-02-23 15:36:10 +00:00
John Colvin 0f37be89a4 Fix typos in binance.env 2025-02-23 15:36:10 +00:00
John Colvin f6586fe636 Activate ccapi exchanges according to md config at runtime
Previously, the list of exchanges ccapi would activate was determined at
build time.
2025-02-23 15:36:08 +00:00
John Colvin 7827ccc0e7 Update externals to get ccapi v6.12.0 2025-02-23 15:35:35 +00:00
John Colvin af6a2acc0a perf: Send Binance md rest reqs on background thread 2025-02-23 06:10:36 +00:00
John Colvin 84abf59a55 feat: Add binance spots execution 2025-02-23 06:10:36 +00:00
John Colvin 2fc1d30bf1 Add binance_usds_futures_testnet config profile
To activate this config profile, run:

tools/sparkd_profile.sh binance_usds_futures_testnet
2025-02-23 06:10:36 +00:00
John Colvin 4dcd5d63a1 tool: Add script to easily switch between spark.conf profiles 2025-02-23 06:10:36 +00:00
John Colvin 63e5697b20 Unify conf and conf_json dirs
Put all files (.conf and .json) in sparkdata/conf. This allows us to
implement config profiles via symlink.
2025-02-23 06:10:36 +00:00
John Colvin 8e5cb100a7 fix: Assign BTS account to ExecutionReport
Not external exch account
2025-02-23 06:10:36 +00:00
John Colvin 938bee1817 Validate ExecutionReport before invoking callback 2025-02-23 06:10:36 +00:00
John Colvin d48af15480 diag: Log warning if ExecutionReport acct not same as order def 2025-02-23 06:10:36 +00:00
John Colvin e3b2e98cd9 fix build: Add JsonReader.cpp to client & api server builds 2025-02-20 00:55:48 -05:00
John Colvin ee53fb854c ui: Make buy/sell button bg darker in order ticket
The buttons looked washed out; too bright, yet pale.
2025-02-20 00:49:59 -05:00
Taha d36e2d61f6 Fixing PNL for both crypto and non crypto 2025-02-19 19:06:12 -05:00
John Colvin bfff3ea5fe fix (preemptive): Check for null sec in ExecutionReport::to_string
I don't think it's ever a nullptr in practice, but if that changes, this
fn shouldn't seg fault.
2025-02-19 23:14:18 +00:00
John Colvin 059c03d289 cleanup: Removing docker submodules again
...they're back. It's like Night of the Living Dead submodules!
2025-02-19 22:50:29 +00:00
John Colvin 8c561f7886 improvement: Pass account/order updates by move (not value) 2025-02-19 22:50:29 +00:00
John Colvin 288567d1eb cleanup: Pass JetFIX cfg directly to binance usds futs exe gw 2025-02-19 22:50:29 +00:00
John Colvin ecfc5405fe refactor: Move macro defined json fns to cpp file
Some fns are big (shouldn't be inlined); plus its best to avoid exposing
macros in headers.
2025-02-19 22:50:29 +00:00
John Colvin 8db34a2a11 Add json & fmt formatters for order & sec protos 2025-02-19 22:50:29 +00:00
John Colvin 91094c4d84 refactor: Make parse_uint support generic char iterator 2025-02-19 22:50:29 +00:00
John Colvin dae8c85d73 fix: Check strlen when making order/fill keys
Although the string data is stored in a fixed size array, it isn't
necessarily the full length.
2025-02-19 22:50:29 +00:00
John Colvin abdd98082f Move BrokerProxy do_work fn to cpp
Doesn't make sense to inline; it's too big.
2025-02-19 22:50:29 +00:00
John Colvin 2f6aa785ab Use object_pool wrapper to count allocations and assert if too many 2025-02-19 22:50:29 +00:00
John Colvin 7acf1f7043 diag: Improve logging in PositionMap 2025-02-19 22:49:30 +00:00
John Colvin 1c3c7a078a diag: Improve logging in binance usds futures exe gateway
Also propagate error msgs through the execution report (so we can see
them in the front end).
2025-02-19 22:49:30 +00:00
John Colvin 93ace52bfa diag: Periodically log ActorThread work cycle speed
So we can better detect slowness, blockage, etc.
2025-02-19 22:49:30 +00:00
John Colvin b5d97c0b1b refactor: Consolidate ExecutionGatewayProvider/Factory code
It's easier to read and manage code when you're not constantly jumping
to and fro across a bunch of files.
2025-02-19 22:49:30 +00:00
John Colvin 284aa53ad4 Add script to run sparkd and roll over log w/ timestamp suffix
So each run gets its own log file
2025-02-19 22:49:30 +00:00
John Colvin 8a9952f52d diag: Improve logging in ServiceBridge 2025-02-19 22:49:30 +00:00
John Colvin 748aafaab3 cleanup: Remove unnecessary includes 2025-02-19 22:49:30 +00:00
John Colvin 3ba30c70de cleanup: Normalize indentation in orderman_cfg.conf
It was all over the place before; unreadable
2025-02-19 22:49:30 +00:00
John Colvin e72f465999 diag: Improve logging in OrderManager 2025-02-19 22:49:30 +00:00
John Colvin f3d93f7749 fix leak: Replace object pool raw ptrs w/ shared ptrs 2025-02-19 22:49:30 +00:00
Mohammad Arham 8d142b8a74 Fix: forgot to push a file 2025-02-19 03:36:14 +00:00
Mohammad Arham 8210b9f35f Fix: change onix exe so it uses dispatch fix msgs 2025-02-19 03:33:00 +00:00
Mohammad Arham 12b20b05ce Fix: OKX executions sends er only when dispatch called 2025-02-18 16:02:10 +00:00
Mohammad Arham 72efbccdbd Fix: USDC swaps md working for okx 2025-02-14 23:02:49 +00:00
Mohammad Arham 33643e9eab Fix: make log resize work again 2025-02-14 22:59:35 +00:00
Mohammad Arham 0f6dc6f40b Fix: Typo in Okx execution 2025-02-13 23:38:27 +00:00
Mohammad Arham 8c778f5e41 Fix: Added tdmode to config for okx execution 2025-02-13 23:32:53 +00:00
Mohammad Arham f308654200 Fix: okx execution fix large spreader orderd 2025-02-13 23:27:32 +00:00
Mohammad Arham bdf5b980fc Add: config for sim trading 2025-02-13 22:06:23 +00:00
Mohammad Arham 914ac597cd Vesrsion: Update to v2.2.5 deploying to jame prod 2025-02-13 14:40:27 +00:00
Mohammad Arham 4aa6a77680 Fix: OKX execution works as long as spreader not to big 2025-02-13 06:09:43 +00:00
Mohammad Arham 6b59dd84ee Fix: Ordermanager will not try to remake orders from er after restart 2025-02-13 06:09:01 +00:00
Mohammad Arham 4e2c5f2d17 Fix: Okx USDT perps fix re added 2025-02-13 06:08:27 +00:00
Mohammad Arham 9a1b94a1b0 Add: fill id to okx execution report 2025-02-13 01:13:50 +00:00
Mohammad Arham 13b3c55771 Change: lst msg only entered if error 2025-02-12 23:13:59 +00:00
Mohammad Arham d0a6fcdb9c Add: Stricter Assert if websocket goes down okx execution 2025-02-12 22:23:53 +00:00
John Colvin 1eb13028c1 ui: Get qty display settings from md instead of config 2025-02-12 15:59:51 -05:00
John Colvin 424e5ff16b Get Spark version at runtime via reflection
So it doesn't need to be hardcoded per release
2025-02-12 15:59:51 -05:00
John Colvin bed389885b Support qty tick size 10e-9
Some spots at OKX need this (e.g., BTC-AED)
2025-02-12 20:42:28 +00:00
John Colvin 85cf25a57a fix: Get min qty and min increment from correct fields in okx json
"lotSz" represents min qty, and "minSz" represents min qty increment. We
had them backwards before.
2025-02-12 20:36:40 +00:00
John Colvin 61471d4675 diag: Show qty info fields in FixedSecurity json 2025-02-12 20:34:48 +00:00
John Colvin d83435d49d Move FixedSecurity to_json fn to cpp
Doesn't make sense to inline; it's too big.
2025-02-12 20:34:47 +00:00
John Colvin 582fc10dce Add get_binance_md.sh for quick/easy troubleshooting 2025-02-12 20:34:47 +00:00
John Colvin 5969985d24 cleanup: Remove unnecessary includes 2025-02-12 20:34:47 +00:00
John Colvin fabe7d665c devcontainer: Install clang-format extension 2025-02-12 20:34:47 +00:00
John Colvin 7ce75bb8e7 devcontainer: Increase ram and shared mem
In order to support large symbol sets for Alphaworx
2025-02-12 20:34:47 +00:00
Mohammad Arham b8e1c3cd60 Add: Fix build Issue 2025-02-12 19:48:52 +00:00
Taha 4909944694 Fixing PNL for perps (its base don mid market now) 2025-02-12 11:20:55 -05:00
Mohammad Arham 7258af09b4 Add: Basic Okx execution working 2025-02-12 11:55:50 +00:00
Mohammad Arham 7f2ce6c1a9 Add: Okx execution cfg 2025-02-12 11:06:45 +00:00
Mohammad Arham 4835725e1c Add: diag logging to gttp client 2025-02-12 11:06:09 +00:00
Mohammad Arham 6a9e8de475 Deployment: Updating version numbers 2025-02-11 05:06:21 +00:00
Taha Afzal 4639951acc Fixing Sprader's reportin of its filled qty 2025-02-11 03:04:30 +00:00
Taha d8de211aac Front end does NOT filter nay CBOE or CME expirations 2025-02-10 17:49:14 -05:00
John Colvin 87394bc60b ui: Increase Currency col width so filter icon isn't clipped 2025-02-10 15:31:31 -05:00
John Colvin beba30f65c fix (ui): Remove temp hack that assumed synth qty always notional 2025-02-10 15:31:31 -05:00
John Colvin 2d58424d8f ui (mview): Hook up currency filter in vm
Make it a discrete values filter (listbox) while we're at it. This seems
more practical than regex.
2025-02-10 15:31:31 -05:00
John Colvin d1bbfa3791 Revert batch subscribe change in Binance 2025-02-10 19:59:42 +00:00
John Colvin aab17f460f cleanup: Remove docker submodules again
They just keep coming back.
2025-02-10 19:59:32 +00:00
John Colvin 461ef53322 devcontainer: Clean up and simplify
* Remove mounted dirs (the repo is automatically persisted in a volume)
* Remove user specific shell env initialization scripts (they're more
  trouble than they're worth, often break the devcontainer build)
* Remove redundant settings already defined in settings.json
2025-02-10 16:55:53 +00:00
Taha Afzal 2486bc90b2 Spreader is hooked to the priceCal dropdown while creating the spreader 2025-02-10 03:10:11 +00:00
John Colvin 1c5cbaf60b Change: Update version to 2.2.4-1 2025-02-08 13:19:41 -05:00
John Colvin b8de447cfb fix (pnl ui): Assume rows w/ exp DateTime.MinValue are Spots
Not the most elegant fix, but it'll do for now.

Bugs (fixed):
  * The Pnl window groups perpetual futures with spots
2025-02-08 13:18:27 -05:00
Mohammad Arham 8bfc2d40f9 Update: V2.2.4 pnl working now 2025-02-08 12:43:13 -05:00
Taha c09fd71c94 Fixing PNL for spots 2025-02-08 06:55:07 -05:00
Mohammad Arham f3b037553e Add: Batch subs in binance sub 2025-02-08 06:44:10 +00:00
Taha Afzal d386d93166 SpreaderChildOrder::on_order_udpate, changing an asserrt to an error lgo to monitor condition 2025-02-07 15:06:16 +00:00
Mohammad Arham 5217742c71 Add: SendingTime tag to cboe execution 2025-02-07 12:26:11 +00:00
Taha c59ec95460 Sheets and spreadbox theos can now optionally be set to market mid 2025-02-06 17:42:12 -05:00
Mohammad Arham 70f01583ec ADD: CBOE TIME and SALES working 2025-02-06 20:42:58 +00:00
Mohammad Arham 66d2f9eb63 Add: Quote algo updates, theos removed 2025-02-06 03:08:46 +00:00
John Colvin 4625bed8b8 Change: Update version to v2.2.3-1 2025-02-05 17:01:11 -05:00
John Colvin f18fb332b5 fix (orderbook): Make ColumnKeys enum 64bit
We rely on bit flags to indicate "dirty" columns in the vm. Need to do
this now that we have > 31 columns.
2025-02-05 17:01:11 -05:00
John Colvin 8746a6f5ca fix (orderbook): Refresh Notional Value view when it changes in vm 2025-02-05 16:30:13 -05:00
John Colvin 702d47abb5 fix (orderbook): Fix typos in default settings for Notional Value 2025-02-05 16:29:29 -05:00
John Colvin bf2a54717c ui (orderbook): Add Filled Notional Value column 2025-02-05 16:13:34 -05:00
John Colvin 9db779fb25 fix (hack): Assume synth quantities are always notional values 2025-02-05 16:07:07 -05:00
Mohammad Arham f55ddec708 Add: Vesrion logs to bothserver and client 2025-02-05 09:50:33 -05:00
Mohammad Arham 6e942dd2d4 Change: Updated version to v2.2.3 2025-02-05 08:38:31 -05:00
Mohammad Arham 142310a17a Add: SPXW to default for cboe 2025-02-05 12:16:47 +00:00
John Colvin 7f99a89a95 ui (fills): Add notional value column 2025-02-05 00:00:41 -05:00
John Colvin bfce663b4b fix (orderbook): Hook up notional val filter in vm, persist settings 2025-02-04 23:42:58 -05:00
John Colvin 33c743643d fix (orderbook): Include fractional qty in notional val 2025-02-04 23:34:47 -05:00
Taha Afzal 858e0a389b Fixed the issue where a notioanal quoter would send a 0 qty order 2025-02-05 04:16:53 +00:00
Taha Afzal 9c3bb85674 Notional qty handling in spreader 2025-02-05 04:16:53 +00:00
Taha Afzal f4930e8cd4 Added notional to PriceCalc type for the sprader, added code to compute notional books in SpreaderUtils 2025-02-05 04:16:53 +00:00
John Colvin f21e7f3602 ui (orderbook): Show synth notional value in terms of first leg 2025-02-04 16:54:37 -05:00
John Colvin b56c35aca4 ui (ladder): Show synth notional value in terms of first leg 2025-02-04 16:54:37 -05:00
John Colvin e6ac83196e fix (benign): Actually dispose _vm_sub in LadderGridHost 2025-02-04 16:54:37 -05:00
John Colvin 7b6f74fc4a cleanup: Get rid of 'mimic tt' ladder config
This config was leftover from custom DJ work. We no longer need it.
2025-02-04 16:54:37 -05:00
John Colvin f754953fac cleanup: Remove duplicate equality check 2025-02-04 16:54:37 -05:00
Taha 2dd1143d9f Fixed spx spreadbox theos 2025-02-04 16:31:17 -05:00
Mohammad Arham e1ee3275d8 Add: Filter secs upto n months databento 2025-01-31 21:46:11 +00:00
John Colvin 2549e406f3 fix: Compute notional value correctly when ticks per row > 1
It's the sum of price * qty for each level in the row. Previously, we
were multiplying the total qty by the same price (smallest in the row).
2025-01-29 16:28:28 -05:00
John Colvin d5024f1858 fix build: Don't check if unsigned int < 0 2025-01-28 20:20:06 +00:00
John Colvin 3623ac96db fix: Multiply array size by sizeof(T) 2025-01-28 20:19:51 +00:00
John Colvin 19834625f9 fix: Don't fall through switch case 2025-01-28 19:59:32 +00:00
John Colvin c8fc649b6b fix build: Pass config arg to cmake --build
For Ninja Multi-Config builds (i.e., api server and data streams)
2025-01-28 19:59:09 +00:00
John Colvin 6b1fc1c413 cleanup: Remove unused code 2025-01-28 19:59:09 +00:00
John Colvin 6f086532ac cleanup: Convert co2::TradeMessage in DomainSecurityUtils
Instead of domain::TradeRecord constructor. The domain types should have
minimal dependency on protos.
2025-01-28 19:59:09 +00:00
John Colvin dc66282225 cleanup: Rename UINT32 -> VALUE in qty macro names
Should have done this when we changed qty primitive from uint32 to float
2025-01-28 19:59:09 +00:00
John Colvin e2c74c0bb3 cleanup: Don't redefine CONTAINS macro 2025-01-28 19:59:09 +00:00
John Colvin e89d50eec1 cleanup: Move large fns from header to cpp 2025-01-28 19:59:08 +00:00
John Colvin 8bebbc278d cleanup: Get rid of 'using namespaces'
In headers, this is an objectively bad practice, since the type aliases
leak into dependent code and can cause unexpected naming conflicts. In
source files, it is debatable, but I prefer explicit aliases of the form
'using Foo = Bar'. The intentions are clear, and the resulting code is
naturally resistent to naming conflicts.
2025-01-28 19:59:08 +00:00
John Colvin 2e6d12c9c1 cleanup: Remove unnecessary includes 2025-01-28 19:59:08 +00:00
John Colvin 102a5e23ea vscode: Add Tests Sparkd entries to tasks.json 2025-01-28 19:59:08 +00:00
John Colvin 582dc791db vscode: Add Run Sparkd (Skip Build) entry to tasks.json 2025-01-28 19:59:08 +00:00
John Colvin afb35d8c25 Compute synth book qty in terms of first leg 2025-01-28 19:59:08 +00:00
John Colvin 3a32ed5fe6 Fix BookSide equality operators 2025-01-27 16:35:22 +00:00
John Colvin 4e01697327 Add equality and output operators to BookLevel 2025-01-27 16:25:32 +00:00
John Colvin 22032c1742 Add fmt::formatter for domain::Side
So we can pass it to LOG macros, etc.
2025-01-27 16:25:15 +00:00
John Colvin 0a9bce317c Add contract qty info to security proto (and FixedSecurity)
We should get this kind of security metadata from the exchange rather
than config.
2025-01-25 20:41:47 +00:00
Mohammad Arham 40e44db597 Fix: Added GCHandle in attempt to fix ui crash 2025-01-22 02:15:55 -05:00
Mohammad Arham 4a447e44e1 Add: Version to first log 2025-01-22 02:14:19 -05:00
John Colvin b1f4654b3c Fix benign typo in publish_spark.py 2025-01-21 17:28:50 -05:00
John Colvin 9d350334c0 fix build (installer): Fix install path typo in publish_spark.py 2025-01-21 17:28:05 -05:00
John Colvin ac597f505f fix build (installer): Set CMAKE_INSTALL_PATH for spark preset 2025-01-21 17:19:15 -05:00
John Colvin 147d9ceb1f ui: Enable net change price display for synths in ladder 2025-01-21 13:11:16 -05:00
John Colvin 377804dfb9 fix (ui): Don't crash on bad regex in grid filters
Wrap Regex construction in try/catch. This is from user input, so of
course we can't assume it will be valid.
2025-01-21 09:26:37 -05:00
John Colvin 0d26401961 fix: Preserve tick_factors in TickDisplaySettings "with" ext
Not sure this was a bug in practice, but it was definitely wrong.
2025-01-21 01:24:23 -05:00
John Colvin 889e226151 feat: Add setting to show notional values in ladder 2025-01-21 01:24:23 -05:00
John Colvin 986d53f4e0 ui: Make ladder size format text editable
This is the best of both worlds: the user can choose from one of the
canned presets in the dropdown, or specify a custom string format.
2025-01-21 01:24:23 -05:00
Taha d13ba2968a DateTimeExpanstionStream col name changes 2025-01-20 15:34:11 -05:00
John Colvin 1a192c8117 feat: Add setting to show ladder prices in basis pts from mid 2025-01-20 14:15:49 -05:00
John Colvin 5e36d4801c cleanup: Remove redundant if/else code 2025-01-20 13:31:41 -05:00
John Colvin 2cf6411ca7 fix: Send exchangeInfo req via our HttpClient instead of ccapi
Bugs (fixed):
  * We get a boost beast exception about the read limit being exceeded
    when requesting securities from Binance prod url (testnet works).
2025-01-19 14:21:11 +00:00
John Colvin e99df129d5 cleanup: Remove erroneous include 2025-01-18 22:54:06 +00:00
John Colvin d07c01bd17 ui: Support ladder ticks-per-row setting for synths
The ticks-per-row control was likely hidden by accident in the first
place. I'm guessing the original intent was to only hide the Price Terms
control for synthetics. At the time, there were no other controls in the
group box, so it made since to hide the whole thing. Some time later, we
added the ticks-per-row setting to the same group box, and forgot to
make the groupbox visible again.
2025-01-17 13:11:09 -05:00
Taha Afzal d69673c524 Previous change was not setting the create time for orders, fixing that + changign one log level to Dag 2025-01-17 07:00:57 +00:00
Taha Afzal 4ee595cdaf Fixing the issue were fractional fills on a working order could result in overfills being reported (it was only a reporting issue) 2025-01-17 06:38:38 +00:00
Mohammad Arham 6fcaf07df0 Fix: binance execution working on sim 2025-01-17 00:59:22 +00:00
Taha Afzal 492d48d886 Added qty_multiplier to spreader.proto 2025-01-16 20:18:26 +00:00
Taha Afzal b6a56e768b Adding config boolan config publish_boostrap_books_only to MarketDataReplayConfig which allows MDReplayer to only publish the bootstrap of all the books 2025-01-16 20:18:26 +00:00
Taha Afzal 3e2b5976a8 Minor changes and ocmments, to allow for fractional qtys 2025-01-16 20:18:26 +00:00
Mohammad Arham edd3f6cbd6 FIX: Orderbook quantity display fixed 2025-01-15 14:47:09 -05:00
John Colvin 2e9347341b fix: Don't throw ex just because leg qty is 0
ContractLegEnumerable shouldn't be responsible for security validation.
2025-01-14 12:58:58 -05:00
John Colvin 2061e38349 fix: Hook up mview venue filter in vm 2025-01-13 00:11:43 -05:00
Mohammad Arham 650dd57b6d FIX: increase max symbo count from 32 to 1024 2025-01-13 04:42:13 +00:00
Mohammad Arham 82747f7dc0 Fix: OKX perp swaps are same as futures now 2025-01-13 04:41:29 +00:00
John Colvin 04b26904a3 ui: Sort exchanges in grid filter dropdown 2025-01-12 15:10:20 -05:00
John Colvin f123e4c72c ui: Add Exchange col to mview 2025-01-12 15:10:20 -05:00
John Colvin b887cbebab fix: Actually capture emumba deribit cfg obj by value
The previous "fix" didn't actually work because, although the lambda
captured the obj by value, the thread captured the lambda by reference!
2025-01-09 16:53:22 +00:00
John Colvin 14e975bc7e vscode: Add Spark (Skip Build) entry to tasks.json 2025-01-09 11:23:30 -05:00
John Colvin 064f557057 ui: Sort accounts in ladder/ticket dropdown 2025-01-09 11:23:30 -05:00
John Colvin 4d106b5e6c ui: Fix alignment issues in order ticket 2025-01-09 11:23:30 -05:00
John Colvin 9fbeaf0d68 ui: Make TickUpDown style match default (dark) Button
* Set BorderThickness to 0
* Use same mouse-hover background as Button
2025-01-09 11:23:30 -05:00
John Colvin 4018ac8b78 ui: Add tooltips to order ticket 2025-01-09 11:23:30 -05:00
John Colvin 81c9503300 ui: Apply dark theme to order ticket buttons 2025-01-09 11:23:30 -05:00
John Colvin 477210926d ui: Fix text color in algo popup 2025-01-09 11:23:29 -05:00
John Colvin 0aa48a79a9 ui: Remove single quotes from tooltip
It looked busy
2025-01-09 01:38:26 -05:00
John Colvin 9e71c7af02 ui: Add tooltips to ladder 2025-01-09 01:38:26 -05:00
John Colvin 4647751409 vscode: Add Spark Test entry to launch.json, tasks.json 2025-01-09 01:03:33 -05:00
John Colvin a3087b874b cleanup: Remove unused code 2025-01-09 01:03:32 -05:00
John Colvin 5b2f5c5c8f Don't throw/catch type exception needlessly 2025-01-09 01:03:32 -05:00
John Colvin 479227090e ui: Remove overly rigid validation for "ticks per row" setting 2025-01-09 01:03:32 -05:00
John Colvin 2dfcf320f5 fix: Refresh ladder levels when "ticks per row" changes 2025-01-09 01:03:32 -05:00
John Colvin b4c7213cb2 fix: Refresh ladder prices in view when they change
Bugs (fixed):
  * Sometimes the prices in the left panel of the ladder get stale
2025-01-09 01:03:32 -05:00
John Colvin c7dfd69b90 Consolidate tick rounding functions
Too many functions were performing essentially the same service:
rounding ticks. It was confusing.
2025-01-09 01:03:32 -05:00
John Colvin 4fdc866485 build: Propagate py script exit codes back to the shell
I noticed the build cmds were broken on Windows because the debugger
would still start even when the preLaunchTask (build) failed!
2025-01-09 01:03:32 -05:00
John Colvin f5d5ca9a1c ui: Use appropriate colors in font picker control
We must have missed this when we switched to dark theme.
2025-01-09 01:03:32 -05:00
John Colvin cfafcf77b9 ui: Use appropriate text color in ladder settings dialog
We must have missed this black text when we switched to dark theme.
While we're at it, freeze the brushes it uses, since they are stored in
a StaticResource which could potentially be shared by multiple controls.
2025-01-09 01:03:32 -05:00
John Colvin 8ebe783139 fix: Clear low/high lines in ladder when scrolled out of view 2025-01-09 01:03:32 -05:00
John Colvin 1851a96a58 vscode: Add Spark (Skip Build) entry to launch.json 2025-01-09 01:03:32 -05:00
John Colvin 0b334ef870 fix: Remove erroneous early exit condition in Ladder render
Bugs (fixed):
  * The ladder doesn't always render ask prices
2025-01-09 01:03:32 -05:00
John Colvin ee811a729a ui: Make ladder price line colors match button text 2025-01-09 01:03:32 -05:00
John Colvin cb15be276d ui: Show bid, ask, mid lines in ladder by default 2025-01-09 01:03:32 -05:00
John Colvin 7d5af6729b ui: Show bid, ask, mid prices in ladder left panel 2025-01-09 01:03:31 -05:00
John Colvin e5679cf082 ui: Make ladder price links prettier
* Change them from hyperlinks to buttons
* Add mouse hover animation
* Align text to the right (so decimal places line up)
2025-01-09 01:03:31 -05:00
John Colvin 98f89b9ad4 fix: Capture emumba deribit cfg by value in thread body
Bugs (fixed):
  * Sparkd occasionally assert crashes on startup because it fails to
    read emumba deribit config.

    Cause: This is a simple race bug. The config obj isn't captured by
    value, so it can be destructed before the thread references it.
2025-01-08 19:03:01 +00:00
John Colvin ba4f8f67e3 fix: Disable binance usds futs symbol filter config
This was a premature optimization, and has become a burden now that we
need to subscribe to large symbol sets for Alphaworx.
2025-01-06 05:00:04 +00:00
John Colvin 9c78380490 fix build (gcc rel): Don't fallthrough switch cases 2025-01-06 03:52:25 +00:00
John Colvin f6166f0674 fix: Show iceberg show qty in algo params grid
Bugs (fixed):
  * In the ladder, you can't view/edit the iceberg show quantity.

  Cause: No view template was defined for nullable double params. Most
  likely, we changed the show qty in the vm from double to nullable
  double at some point, and forgot to reflect this change in the view.
  An easy mistake to make as it would not have broken the build.
2025-01-05 15:58:29 -05:00
John Colvin 6334a902e7 fix: Reclaim keyboard focus when mview popup is clicked 2025-01-05 15:29:11 -05:00
John Colvin 082ca62fff fix: Focus price textbox when mview order ticket popup opens 2025-01-05 15:18:46 -05:00
John Colvin 9dbd8dd7c6 fix: Set focus through FocusScope element if one exists 2025-01-05 15:18:46 -05:00
John Colvin 8f7a4d0df6 Fix typo in AutoFocusTargetProvider dependency prop 2025-01-05 15:18:46 -05:00
John Colvin f372dd56b3 fix: Return synthetic name in get_security_desc
If the security is a synthetic (of course).

Bugs (fixed):
  * Changing limits in the risk ui causes sparkd to assert crash
2025-01-05 20:15:10 +00:00
John Colvin 86eba20d61 build: Make compiler/build type case insensitive 2025-01-05 06:25:11 +00:00
John Colvin 35a985280d fix: Run heartbeat timer in MarketDataGateway
This is why we were getting those heartbeat asserts. Previously, only
ExchangeSimApplication would start this timer. Since MarketDataGateway
doesn't share its MDProducer with ExchangeSimApplication, it must start
one itself.
2025-01-03 16:59:07 +00:00
John Colvin f5e1b3319c cleanup: Don't write to cout in SparkDataDirectory
Don't need that noise.
2025-01-03 16:59:07 +00:00
John Colvin 65c3948e4f cleanup: Remove unused code 2025-01-03 16:59:07 +00:00
John Colvin 002bdff9a3 fix: Don't parse non-existent json files in SparkDataDirectory
Bugs (fixed):
  * Sparkd assert crashes if binance_usds_futures_execution.json file
    doesn't exist
2025-01-03 16:59:07 +00:00
John Colvin bb6e5dd548 diag: Fix sparkd log path in show_last_run.sh 2025-01-03 16:59:07 +00:00
John Colvin 7c1aed3339 fix build (api server): Remove old cpps from source file list 2025-01-03 16:59:07 +00:00
John Colvin 22ae51fb99 build: Clean up build py scripts 2025-01-03 16:59:07 +00:00
John Colvin a53d347f81 fix build (warns): Update cmake min version to 3.10
Versions < 3.10 will soon be deprecated (we just started getting
warnings about it).
2025-01-03 16:59:07 +00:00
John Colvin 838dbcd886 build: In py build scripts, exit with code 1 on failure
Previously, they would exit with 0 no matter what happened.
2025-01-03 16:59:07 +00:00
John Colvin 5ed2309d22 fix: Add switch case for VENUE_BTS in VenueIndex 2025-01-03 16:59:07 +00:00
John Colvin 4d41704dd2 build: Configure admin webapp build entirely in CMakeLists
Get rid of build_admin_web_app.py
2025-01-03 16:59:07 +00:00
John Colvin bd1000e518 build: Get rid of explicit "targets" in CMakePresets for sparkd
So we don't have to worry about keeping it synchronized with the actual
targets in the build (just one more thing that can break). You can build
specific targets via the cmake cli anyways.
2025-01-03 16:59:07 +00:00
John Colvin dd4aa3c2ed build: Update fable in dotnet-tools.json 2025-01-03 16:59:07 +00:00
John Colvin fee9d3f597 build: Update webpack-cli in admin webapp 2025-01-03 16:59:07 +00:00
John Colvin 416f9aef31 vscode: Add Sparkd Test to launch.json 2025-01-03 16:59:07 +00:00
John Colvin 48f5e4c201 vscode: Fix sparkd launch.json 2025-01-03 16:59:07 +00:00
John Colvin 4438b4ca8d feat: Support fractional quantities in synthetic book 2025-01-03 16:59:07 +00:00
John Colvin 73356e0d61 cli: Add cmd to print security info from the db to console
Usage: sparkd md dump --db
2025-01-03 16:59:07 +00:00
John Colvin 4a285fa581 cleanup: Make fn const 2025-01-03 16:59:07 +00:00
John Colvin cfa82c2177 cleanup: Remove erroneous fwd declared class 2025-01-03 16:59:07 +00:00
John Colvin 0410a0431a fix: Encode exp in valid date int when storing in sqlite
The strange bit shifting we were doing before doesn't support large
dates.

Bugs (fixed):
  * Synthetics with Binance perpetual future legs don't appear on the
    front end after sparkd restarts.

  * Cause: Exp dates for Binance perpetual futures aren't properly
    encoded in the database. As a result, when loaded from disk, they
    are mistakenly identified as expired, along with any synthetics that
    have them as legs.
2025-01-03 16:59:07 +00:00
John Colvin 02843f14ff cleanup: Get rid of trivial fn that's only used in one place
Move the logic into the function that used to call it.
2025-01-03 16:59:07 +00:00
John Colvin f1f1d4259c diag: Add logs around security discovery in MDConsumer
This is multi-threaded event driven code. Without descriptive logs in
the right places, diagnosing problems is difficult and tedious.
2025-01-03 16:59:07 +00:00
John Colvin 71fc43af68 cleanup: Flatten nested if blocks with continue statements
Easier to read
2025-01-03 16:59:07 +00:00
John Colvin 350144ffd5 fix: Use security desc to get unique id (along with venue, type)
I'm guessing this typo went unnoticed because it didn't break the build
(another arg of the same was being used instead).
2025-01-03 16:59:07 +00:00
John Colvin da227a5550 Support synths at Binance, Binance USDS Futures, Deribit, and Okx 2025-01-03 16:59:07 +00:00
John Colvin 0c92cf3a87 Add double ops to IntPrice 2025-01-03 16:59:07 +00:00
John Colvin 1188af391e Add trivial fns to TimeStamp for convenience
* += and -= operators
* 'date' fn
* 'to_date_int' fn
2025-01-03 16:59:07 +00:00
John Colvin 0bb85cf915 refactor: Change month and day params from uint32 to uint8
They only need to hold values 1-12 and 1-31, respectively. A single byte
is more than sufficient. Also add ymdhms TimeStamp constructor.
2025-01-03 16:59:07 +00:00
John Colvin d77f5996fe cleanup: Make a couple TimeStamp fns const 2025-01-03 16:59:07 +00:00
John Colvin 940c41a274 Add int32 arithmetic operators to domain::Price 2025-01-03 16:59:07 +00:00
John Colvin e671960dc3 Add double arithmetic operators to domain::Price 2025-01-03 16:59:07 +00:00
John Colvin 8fa34b6b39 fix: Multiply additive factors by exponent in domain::Price
We must not have been using these operators because the implementation
was very broken (yet it doesn't seemed to have caused any bugs).
2025-01-03 16:59:07 +00:00
John Colvin f9d5429b5b cleanup: Remove unused code 2025-01-03 16:53:05 +00:00
Mohammad Arham 2c342482eb Merge branch 'development.crypto' of bitbucket.org:bluetradesys/spark into development.crypto 2025-01-02 15:30:13 -05:00
Mohammad Arham 3aefac26c2 fix: Timer condition was incorrect 2025-01-02 20:15:38 +00:00
John Colvin 1554594cdd diag: Throttle noisy log in Ladder 2025-01-02 12:15:22 -05:00
John Colvin 727a0f38b5 fix: Prevent arithmetic overflow when converting long to int in Ladder 2025-01-02 12:13:58 -05:00
John Colvin 7a0e8cdb26 fix: Properly format spread/synth leg qty in generated desc 2025-01-01 13:12:17 -05:00
John Colvin a4e97b04d7 fix: Don't propagate security criteria changes to other windows
Bugs (fixed):
  * Security criteria changes in mview and time/sales propagate to other
    windows of the same type.
2024-12-31 11:06:24 -05:00
John Colvin 463980a6ef Fix typo in get_binance_md.py 2024-12-29 18:37:54 +00:00
John Colvin 9b25857042 fix: Ensure "earliest_expiration" fn actually returns min exp
Previously, it assumed the first leg would have the earliest exp. While
this may be true for most securities, it isn't guarenteed by our data
model.
2024-12-29 13:26:44 -05:00
John Colvin ef19e7d76b fix: Don't assume all securities have expirations in pnl vm
Bugs (fixed):
  * PNL window crashes if data has Spots (i.e., securities without exps)
2024-12-29 13:17:17 -05:00
Taha Afzal 471faec2cb Added more etsts for fractional qtys 2024-12-28 08:31:16 +00:00
Taha Afzal ce96d42db8 Merging 2024-12-26 07:01:30 +00:00
Mohammad Arham 187894ca84 FIX: makes gateway factory work 2024-12-24 17:56:49 +00:00
John Colvin 63492c4575 fix: Remove erroneous assert in LadderRender 2024-12-21 23:24:52 -05:00
John Colvin e150c611f6 fix: Round fractional order qty to 6 decimal places
It was previously rounding to 2 decimal places, which isn't enough for
many crypto currencies (e.g., BTCUSDT at Binance)
2024-12-21 23:17:52 -05:00
John Colvin bb837d6c26 fix build: Trivial changes in DatabentoDataHandler 2024-12-22 04:00:23 +00:00
John Colvin 965e541ac8 Fix json structures and endpoints for Binance USDS Futures md 2024-12-22 04:00:23 +00:00
John Colvin 1b232aa610 feat: Add Binance USDS Futures execution 2024-12-22 04:00:23 +00:00
John Colvin 25439b094a improvement: Perform sec lookup in const time 2024-12-21 20:08:19 +00:00
John Colvin f927ef2c5e Add conf_json dir to spark data file tree
So we don't have to add proto files to the build for trivial config.
2024-12-21 20:08:19 +00:00
John Colvin d42389b75a Don't needlessly download cme config xml
When we aren't subscribing to cme md (i.e., no glbx symbols in spark
conf).
2024-12-21 20:08:19 +00:00
John Colvin 671cbcf03a Fix bts::Quantity string fmt so it includes fractional qty 2024-12-21 20:01:55 +00:00
John Colvin e589e23f41 Add py script to get md at binance
For quick/easy troubleshooting (much easier than doing stuff in c++)
2024-12-21 20:01:55 +00:00
John Colvin 11fadc0a3e Expose "run" fn in WebsocketClient
So it doesn't have to be hidden in a background thread
2024-12-21 20:01:55 +00:00
John Colvin b8c2d93866 Add ping/pong facilities to WebsocketClient 2024-12-21 20:01:55 +00:00
John Colvin 67a23dd196 Add open/close callbacks to WebsocketClient 2024-12-21 20:01:55 +00:00
John Colvin ff22c4eb5f diag: Change WebsocketClient log category to "Http"
A better fit than "Gen"
2024-12-21 20:01:55 +00:00
John Colvin 5addff4c50 cleanup: Remove redundant fn HttpRequest::perform
This was doing the same thing as HttpClient::send. I likely refactored
this function during development, then forgot to remove it.
2024-12-21 20:01:55 +00:00
John Colvin 142e1bd2da Add HttpMethod "DELETE"
In Binance's REST api, orders are canceled via DELETE requests.
2024-12-21 20:01:55 +00:00
John Colvin d05d91bbe7 diag: Log Http requests 2024-12-21 20:01:55 +00:00
Mohammad Arham 3a90ca9cb5 Add: Johns changes to sec oracle 2024-12-17 14:47:37 +00:00
John Colvin 85a46727be Improve c++ http client facilities 2024-12-11 19:28:36 +00:00
Mohammad Arham 624fd2c976 FIX: BUILD Error 2024-12-09 01:34:29 +00:00
Mohammad Arham 16d599d2d6 Add: OKX execution gateway connected 2024-12-08 20:14:16 -05:00
John Colvin c00e4fcb6b feat: Add Binance Coin Futures market data 2024-12-06 00:39:41 +00:00
John Colvin 03e19afe1d Fix qty display conf for BTC/ETH futs at Binance
Need to show 3 decimal places (qty tick size is 0.001)
2024-12-05 21:05:53 +00:00
John Colvin 058e11eadc fix build: Fix install path for sparkd 2024-12-05 18:31:36 +00:00
John Colvin 6ff52e7107 fix build: Add onixs libs again
Taha accidentally reverted externals
2024-12-04 16:56:46 +00:00
John Colvin ee4c28ed41 Port ws client over from cme-websocket-connector
Need this to implement execution at crypto exchanges (beginning with
Binance and OKX)
2024-12-04 16:56:46 +00:00
Mohammad Arham 50d26f0060 Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2024-12-03 09:52:09 -05:00
Mohammad Arham 36378e6074 Add:: Recording md to sql 2024-12-03 14:51:32 +00:00
John Colvin 8cde8ee6e1 build: Add script to publish the api server
This will build the app as a self-contained executable here:
build/Release/bin/net7.0/linux-x64/publish
2024-11-28 16:35:21 +00:00
John Colvin 4f8fad444e fix build: Add missing csproj deps to Spark.Api.Server.sln 2024-11-28 16:35:20 +00:00
John Colvin 832c645a30 build: Map cmake install dir to associated preset
Cpp bins are now installed to "install/<cmake_preset>/bin". For example,
"install/sparkd-release-gcc/bin", "install/spark-api-server-linux/bin", etc.
2024-11-28 16:35:20 +00:00
John Colvin 691343d9b6 feat: Add datastreams to spark api server 2024-11-28 06:14:00 +00:00
Taha 461cbad338 Adding FakeBBO stream 2024-11-27 13:36:14 -05:00
Taha fecbcbb6b6 Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2024-11-26 22:33:31 -05:00
Taha aab8e83543 Some rewrite of streams that fetch bars, and making the other business streams thin wrapper over stream primitives 2024-11-26 22:33:26 -05:00
Mohammad Arham 420b46741e ADD: Config for sql writer in mdrecorder 2024-11-24 19:14:45 +00:00
Mohammad Arham e8f65f95bd Wrapped proto write in function in mdrecorder 2024-11-24 19:13:36 +00:00
Mohammad Arham 0e893b9b5d Fix: Multiple Exchange data sources work without timee 2024-11-20 23:48:50 +00:00
Mohammad Arham 0593ae0320 Fix: Logging path was incorrect 2024-11-20 23:48:24 +00:00
Mohammad Arham 960149b9c5 Fix: Stupid bug on sleep time 2024-11-20 22:49:22 +00:00
Mohammad Arham b5f5f2f3d5 Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2024-11-20 17:21:45 -05:00
John Colvin bd8c97244a refactor: Return row id in IStore::retrieve_one
This is a prerequisite to synchronizing security ids stored via IDGenerator
(the "new" way to store ids, added when we implemented Deribit), and
SecurityDB (the original way from spark days). The problem was that these
2 implementations were using separate databases. We need to unify the
interfaces between these storage services to avoid breaking existing code.
2024-11-20 22:17:08 +00:00
John Colvin cb187e6997 Interpret db strng param as name or path in SqliteStore ctr 2024-11-20 22:17:08 +00:00
John Colvin 4004ed2267 refactor: Normalize sec key indexing for old md sources
Now both old and new (domain) md sources index securities by
the same string format.
2024-11-20 22:17:08 +00:00
John Colvin a00347ac3f Add ostream operator for Venue 2024-11-20 22:17:08 +00:00
John Colvin c4d08840bd Add ostream operator for SecurityType 2024-11-20 22:17:08 +00:00
John Colvin 84c0684b63 refactor: Normalize sec key indexing for new (domain) md sources
This is part of a larger effort to unify the way we index securities in order
to generate unique ids. Older md sources (e.g., MDP3Listener) use
SecurityIDRecorder to generate ids, which uses a different database and
different key-string formatting than the IDGenerator used by the newer md
sources (e.g., GeneralMarketDataListener and various ccapi-based sources).
2024-11-20 22:17:08 +00:00
Mohammad Arham bca8df6d99 Fix: Release Crash fixed still has timer 2024-11-20 22:14:48 +00:00
Mohammad Arham 98f8e58f3f Add optional tags to config 2024-11-20 22:12:06 +00:00
Mohammad Arham 76f18f3443 Fix: typo in fixed securities 2024-11-20 20:17:29 +00:00
Mohammad Arham b67d748ba1 removed: moved onix glbx to main controler thread 2024-11-20 06:58:14 +00:00
Mohammad Arham 0113721355 Add: Config for marex reconnect attemps 2024-11-20 06:29:41 +00:00
Mohammad Arham 715f7f7c70 Fix: Race condition causes crash not sure if fixed 2024-11-20 06:17:28 +00:00
Mohammad Arham 89955597c1 Add: Onix/Marex fix adapter, listener, and state handler 2024-11-20 06:16:58 +00:00
Mohammad Arham 96d9aae048 Add: IFIXGenericAdapter 2024-11-20 04:45:36 +00:00
Mohammad Arham f28d32946f Add: General Execution Gateway (between system and IFIXAdapter ) 2024-11-20 04:39:43 +00:00
Mohammad Arham 924efb2c3f Add: Added proto for marex fix config 2024-11-20 04:26:39 +00:00
Mohammad Arham 50abb1d784 Fix: Refactored to Switch Statement instead of if and aadded cboe 2024-11-20 04:24:51 +00:00
Mohammad Arham b5ef39ee4b Fix: Change default tick_config for taifed 2024-11-20 04:18:58 +00:00
Mohammad Arham 5b61b4fe69 Add: Accounts for CBOE Execution, subaccounts dont work 2024-11-20 03:22:18 +00:00
Mohammad Arham 2d8523ae67 FIX: Order cancel now working in emnative order 2024-11-20 03:18:31 +00:00
Mohammad Arham f0eef447d3 Add: Exchange parameter added to EMNAtive Order 2024-11-20 03:18:04 +00:00
Mohammad Arham 8604d5672c ADD: Comments for CME execution for later 2024-11-20 03:11:54 +00:00
Mohammad Arham 30822fb1f1 Fix: move start glbx onix to seperate thread 2024-11-20 03:09:07 +00:00
Mohammad Arham 826bbf76a9 Add: load_reference_data config for databento 2024-11-20 02:53:19 +00:00
John Colvin eb8c97a1b7 fix: Detect integer ticks of all sizes (not just 1)
Also don't divide by zero!

Bugs (fixed):
  * Spark crashes when opening a ladder with integer tick size of 5.
    This was first observed with TAIFEX futures.

    Cause: The ladder throws a DivideByZero exception when calculating
    the number of ticks per dollar. It isn't caught until it bubbles up
    to the scope in which 'Dispatcher.Run' was called. The catch handler
    then deliberately assert crashes.
2024-11-12 16:15:47 -05:00
John Colvin 5517c58724 fix (ui): Display trade time w/ microsecond precision
Was only showing milliseconds before
2024-11-12 11:42:23 -05:00
John Colvin e9bcdd0c65 fix build: Update Newtonsoft.Json to 13.0.3 in Spark.csproj 2024-11-12 10:35:51 -05:00
Taha 83b37c6661 Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2024-10-30 13:36:33 -04:00
Taha 6163887cd3 Bunch of CME queries are now working 2024-10-30 13:36:23 -04:00
Mohammad Arham 214641aa1e Add: cpp tp sec_common 2024-10-25 07:02:46 +00:00
Mohammad Arham 06bc7af232 FIx: Taifex md working 2024-10-25 06:59:52 +00:00
Mohammad Arham 36b6168dec Taifex State working 2024-10-18 21:13:56 +00:00
Taha f9aa9dd982 Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2024-10-15 23:48:34 -04:00
Taha 22f1ab44f9 Basic set of streams that can talks ot the LLM and get DSL back from few-shot prompt 2024-10-15 23:38:49 -04:00
John Colvin e4c87c267d Fix DateTimeConstant token regex for DataStreams
The previous regex was overly ambitious (and needlessly complex as a
result). The new regex is simpler, and doesn't impose bounds on month
and day ints, aside from requiring 1-2 digits.

Bugs (fixed):
  * The DataStreamExpressionInterpretter fails to parse certain date
    constants, such as "8/30/2024"
2024-10-15 11:46:58 -04:00
Mohammad Arham 86899a6ff0 FIX: TAifex state working 2024-10-14 17:19:03 +00:00
Adeel Khan 2324fd3ad2 CHANGE: Taifex State Mgmt 2024-10-14 20:59:34 +05:00
Taha 288b7712db Added and modified more streams to address teh CME NL queries 2024-10-09 13:59:01 -04:00
Mohammad Arham 8850bf4903 Remove: Assert in taifex code 2024-10-09 14:53:20 +00:00
Mohammad Arham 11112b41d1 Add: Missing config entry databento 2024-10-09 02:36:35 +00:00
Adeel Khan 2a98889b67 UPDATE: TaifexDataGateway 2024-10-09 02:18:28 +00:00
Adeel Khan 8060518a28 FIX: Removed Taifex Bugs 2024-10-08 21:29:44 +00:00
Mohammad Arham 68440d3df3 ADD: Config for one year security filter 2024-10-08 13:50:38 +00:00
Mohammad Arham 7d775afc4c Add: Taifex after hours ip change config 2024-10-08 13:49:36 +00:00
Mohammad Arham 50c7764ef7 Add: Databento security filter 2024-10-07 20:33:38 +00:00
Mohammad Arham fb8b2d28f3 Fix: DATABENTO live working 2024-10-07 20:05:38 +00:00
Mohammad Arham bcc2c4a514 CHANGE: Taifex Refactored 2024-10-07 16:26:12 +00:00
Mohammad Arham 9352298be0 Add: Taifex statehandler 2024-10-07 08:51:55 +00:00
Mohammad Arham 180bd11740 FIX: Taifex replay types of files handled 2024-10-06 21:31:34 +00:00
Mohammad Arham 57ea841381 ADD: i084 taifex 2024-10-06 20:31:07 +00:00
Mohammad Arham 7d9d176fa2 Change: Rename taifex files 2024-10-06 18:38:36 +00:00
Mohammad Arham a8f4ec07c8 Change: moved file paths to config for taifex file replay 2024-10-06 08:29:27 +00:00
Mohammad Arham 58c5be268f Add: Refactored taifex code to break it down 2024-10-06 08:01:22 +00:00
Mohammad Arham bf4859a2a9 Change: Refactored read binary file taifex 2024-10-06 07:28:12 +00:00
Adeel Khan db1cf93994 Add: Incremental Books 2024-10-04 23:23:54 +05:00
Adeel Khan ecb1c4fea0 Add: Taifex Trades 2024-10-04 23:23:41 +05:00
Mohammad Arham a513933044 Add: Exceptions handling for databento 2024-10-04 13:06:56 +00:00
Mohammad Arham 764d65b595 Remove: code to remove secuties 2024-10-03 12:06:55 +00:00
Mohammad Arham bc0d606252 Add: code to connect to Live databento 2024-10-03 12:03:48 +00:00
Mohammad Arham ceb8a68902 Add: databento repllay filename to cofig 2024-09-27 03:20:20 +00:00
Mohammad Arham 0b3183fd30 Add: added onix fix to lib to build dir 2024-09-26 16:23:19 +00:00
Mohammad Arham b6dbe37818 Add: entry for onix fix 2024-09-24 13:41:45 +00:00
Mohammad Arham c78b8bc8e1 Add databento to external 2024-09-24 13:37:57 +00:00
Taha Afzal 314f3e3715 Adding comments 2024-09-23 18:40:06 +00:00
Taha Afzal 26a1d5fc03 Creating scaffolding for incremental book updates in GeneralMarketDataListener 2024-09-23 18:39:12 +00:00
John Colvin 37e5003cf9 Merge remote-tracking branch 'origin/development.ps_linux' into development 2024-09-19 05:40:59 +00:00
John Colvin 07f3868ffc Add CBOE to spark admin webapp 2024-09-18 19:03:43 +00:00
John Colvin 46f0b17138 Add TAIFEX to spark admin webapp 2024-09-18 19:03:43 +00:00
Taha 33a8e06a3a Fixing implied vols for SPX (market data was getting divide dby the fwd) 2024-09-17 22:17:31 -04:00
John Colvin 74afdde8de fix build: Add ".list" to SymbolLists config
For new exchanges, TAIFEX and CBOE
2024-09-17 13:01:05 +00:00
John Colvin 0a92ad2eb1 fix (build): Add break statement to new venue switch cases
Namely, TAIFEX and CBOE
2024-09-17 13:00:14 +00:00
John Colvin 56d207c3f1 fix: Preserve vs exp sec type (Option) when computing implied vol
Because the exp keys in the data map have sec type Option.
2024-09-16 13:46:53 -04:00
John Colvin 9172e752e3 ui: Highlight launcher buttons when selected
Namely, the expandable menu buttons in Analytics shell module
2024-09-16 13:46:53 -04:00
John Colvin adc9f2acfc Replace trivial refs to ThreadedBlackboard w/ IBus 2024-09-15 23:45:15 -04:00
John Colvin 41d17e67d2 fix: Move accounts subscription to dispatcher thread
We update a collection that is bound to the view in the callback (mutation
ops throw if performed on a different thread).
2024-09-15 23:45:15 -04:00
John Colvin 5cacff073b fix: Check 'HasTimestamp' before accessing prop in man fill row
Pending adds (i.e., unpersisted new rows) don't have timestamps.
In such cases, the 'Timestamp' getter throws an exception.
2024-09-15 23:45:15 -04:00
John Colvin c8da92c250 Cache/index options for faster lookups in SystemContractData 2024-09-15 23:45:15 -04:00
John Colvin c4e76076e3 fix: Include venue w/ symbol when publishing interp greeks 2024-09-15 23:45:14 -04:00
John Colvin 6a715b9a68 Fix typo in comment 2024-09-15 23:45:11 -04:00
John Colvin 1f28940c95 fix: SelectorList.RemoveAt doesn't need 'convert_back' delegate
So don't throw an exception if it is null.
2024-09-15 23:45:11 -04:00
John Colvin ebff40b88f fix: Don't assume venue is in spread def string
Pass it as an argument to the parse fn. This should be fine for now, but
obviously a singular venue param won't work for cross exchange spreads.
2024-09-15 23:45:11 -04:00
John Colvin a6d14a3ac3 improvement: Move system contracts sub off of dispatcher thread
Also add 200ms throttle. Contracts shouldn't change that often, so we don't need
lightening speed here. Furthermore, such changes may trigger expensive cpu ops.

Note: this change also replaces refs to ThreadedBlackboard w/ IBus (the
former is somewhat tethered to the dispatcher thread, particularly by
its timer_callback).
2024-09-15 23:45:11 -04:00
John Colvin af96bcb9e3 fix: Pass symbol/venue from vs usage cfg to AnalyticsService proto 2024-09-15 23:28:59 -04:00
John Colvin 619702cb04 cleanup: Remove unused code 2024-09-15 23:28:59 -04:00
John Colvin 5baec19aff refactor: Index vol and theos data by symbol/venue tuple
Rather than just symbol, to avoid conflicts when the same symbol exists
at multiple exchanges
2024-09-13 10:50:23 -04:00
John Colvin 39ef30c1e3 cleanup: Remove redundant type VolSurfaceSymbolStructure
There is an identical type (in terms of prop types and corresponding proto indices)
called VolSurfaceSymbolRelationship that is used in more places.
2024-09-13 10:50:23 -04:00
John Colvin c2f2d28914 Move nested vm classes into own files
VolSurfaceSettingsEditor has too much code (still). It is hard to
navigate.
2024-09-13 10:50:23 -04:00
John Colvin e06bc3bdf5 Simplify driver symbol structure in vs settings vm
The code was confusing and difficult to follow.
2024-09-13 10:50:23 -04:00
John Colvin e19c19c013 fix: Raise prop changed event when is_selected changes 2024-09-13 10:50:23 -04:00
John Colvin 8f324bc507 Add venue to vs calc fns 2024-09-13 10:50:23 -04:00
John Colvin 12107c42ce fix: Provide venue param w/ symbol when computing fut slide 2024-09-13 10:50:23 -04:00
John Colvin 91c6fb4e52 diag: Log added/removed exps when syncing vs input w/ system exps
This shouldn't happen often, but if it does, we should know about it.

PS: We recently fixed a bug caused by inequalities between
VolSurfaceExpirations in vs input, and in SystemContractData. User
inputs to the vs grid would be immediately reverted, as the exps
associated with the inputs were not found in the SystemContractData.
This bug would have been easier to track down with this logging in
place.
2024-09-13 10:50:23 -04:00
John Colvin 7044355547 Add venue to VolSurface(DisplayGrid)Expiration
So we can handle symbol/exp date conflicts for securities that differ
only by venue (exchange)
2024-09-13 10:50:23 -04:00
John Colvin 583ae65fb2 Clean up VolSurfaceExpiration
* Enable nullable lang feat
* Use file-scoped namespace
* Sort members
* Include sec type in Compare impl
2024-09-13 10:50:22 -04:00
John Colvin 552fec0edc Add null check in SelectorList ctr 2024-09-13 10:50:22 -04:00
John Colvin fcf6927fbf cleanup: Remove unused code 2024-09-13 10:50:22 -04:00
John Colvin 23f6d827d5 refactor: Replace ThreadedBlackboard w/ IBus
In SingleVolSurfaceCommittedOutputRetriever
2024-09-13 10:50:22 -04:00
John Colvin f083d0abab Clean up VolSurfaceTimeParameters
* Enable nullable lang feat
* Use file-scoped namespace
* Implement ICloneable
2024-09-13 10:50:22 -04:00
John Colvin a895e36922 cleanup: Remove unnecessary ternary op 2024-09-13 10:50:22 -04:00
John Colvin 59d7a72288 fix: Actually use (sec) type arg in to_security_expiration 2024-09-13 10:50:22 -04:00
John Colvin 7731f2f4d1 fix: Check security_type in vs exp Equals impl 2024-09-13 10:50:22 -04:00
John Colvin 41ae5897c0 fix: Maintain sec type when converting SecurityExpiration to vs exp
Avoids data loss
2024-09-13 10:50:22 -04:00
John Colvin c7949ccfba refactor: Get rid of sec type 'Option' default (magic const)
Better to be explict
2024-09-13 10:50:22 -04:00
John Colvin 567af79c7f Fix selection binding issues in vs settings editor
This specifically addresses issues in the driver symbol grids.
Unfortunately, we can't bind directly to ComboCheckBox.SelectedItems
because the view is contained in TabControl. When the selected tab
changes, the previously selected tab clears its ItemsSource (and
consequently the SelectedItems) as a side effect of being unloaded.
2024-09-13 10:50:22 -04:00
John Colvin 6bb4a7b25c refactor: Enable nullable (ref types) in ImmutableListExtensions 2024-09-13 10:50:22 -04:00
John Colvin bc7cef4c34 Fix typo in namespace bts.collection -> bts.collections 2024-09-13 10:50:22 -04:00
John Colvin ab9dc361d6 fix: Use ComboCheckBoxItem.IsSelectedProperty
Instead of Selector.IsSelectedProperty. Unlike ComboBoxItem, ComboCheckItem's
IsSelectedProperty isn't linked to Selector.IsSelectedProperty.
2024-09-13 10:50:21 -04:00
John Colvin 39da0a4dde Add currency column to mview 2024-09-13 10:50:21 -04:00
John Colvin 44e864d697 fix: Use SetCurrentValue instead of SetValue
So we propagate values to/from the binding data source,
rather than overwrite the data source itself.
2024-09-13 10:50:21 -04:00
John Colvin 0a02da3aba Add venue, sec type dropdown filters to exp params ui 2024-09-13 10:50:21 -04:00
John Colvin 836771a7f0 fix: Add null check in ComboCheckBox.SelectedItemsCollectionChanged 2024-09-13 10:50:21 -04:00
John Colvin f386badcfb fix: Disconnect old INotifyCollectionChanged source when dp changes 2024-09-13 10:50:21 -04:00
John Colvin 1d43a484db fix: Index opt/fut exps by venue in vs analytics 2024-09-13 10:50:21 -04:00
John Colvin 91042cb41e fix: Support multiple exchanges in exp params view/vm 2024-09-13 10:50:21 -04:00
John Colvin 10c0e4247d cleanup: Remove unused 'option_symbol' param from compute_atm_data 2024-09-13 10:50:21 -04:00
John Colvin 8e34264e6d fix: Filter by exch when getting atm data for sheets
This is necessary now that we support exchanges with overlapping securities
2024-09-13 10:50:21 -04:00
John Colvin 0a840d256b fix: Remove sec id prop from SecurityExpiration
This class isn't designed to represent a particular contract; it's
basically a key to get option theos.
2024-09-13 10:50:21 -04:00
John Colvin 8a69c51cac refactor: Add 'onDispatcher' param to 'ThreadedBlackboard.subscribe'
This will allow us to gradually move subscriptions off of the dispatcher
(render) thread. When the render thread is pegged, the ui is laggy and
unresponsive. The new param defaults to true, so it won't change
anything until we explicitly set it to false in 'subscribe' calls.
2024-09-13 10:50:21 -04:00
John Colvin 0262fd40bc fix: Remove redundant SparkTimer threads
This addresses some slowness on the front end. Prior to this commit,
each ThreadedBlackboard would start its own timer thread. Since multiple
ThreadedBlackboard run concurrently, this multiplied the frequency of
the SparkTimer callbacks by the number of active ThreadedBlackboards.

The fix is to start this thread in an IShellDaemon rather than the
ThreadedBlackboard. This avoids duplicate threads because the former is
guarenteed to be instantiated only once, via dependency injection.
2024-09-13 10:50:21 -04:00
John Colvin 859dfe3544 refactor: Simplify FakeMDDaemon code that delays post
Use Task.Delay/ContinueWith instead of subscribing to the SparkTimer tag.
2024-09-13 10:50:21 -04:00
John Colvin 9c624a2f79 refactor: Use IBus instead of ThreadedBlackboard
This should address some slowness/mouse lag in the front end (recently
reported by Brandon at Immutable Cap)
2024-09-13 10:50:20 -04:00
John Colvin dec1061b40 fix: Detect and log ccapi depth msg parse errors
This fixes a crash that would happen if a depth item's price or quantity
were an empty string (now we log an error and keep going).
2024-09-13 10:50:20 -04:00
John Colvin be4895faa6 fix: Actually store currency in shared mem
This field has always been in the Security proto, though it until now it
had been omitted from the shared memory representation (FixedSecurity).
2024-09-13 10:50:20 -04:00
Mohammad Arham 3c9755f0dd ADD: Added delay to databento file reader 2024-09-12 15:10:34 +00:00
Mohammad Arham 61ed847d7d Add: Replay speed added to mdreplayer 2024-09-11 06:50:37 +00:00
Mohammad Arham fc9094fea8 Added: CBOE working on databento 2024-09-11 06:17:26 +00:00
Mohammad Arham e36c0efc4b Added: GLBX working on databento 2024-09-11 06:16:42 +00:00
Mohammad Arham 4158a14cff Added: option to send timestamp in onbook IMDListener 2024-09-11 06:15:40 +00:00
Mohammad Arham 201a45cba0 taifex deo 2024-09-05 00:59:00 +00:00
Mohammad Arham ab31b9b253 Add: Multiple files working taifex 2024-09-03 15:15:55 +00:00
Adeel Khan 780ddc79a7 Add: Taifex I083 Message 2024-09-03 20:06:48 +05:00
Mohammad Arham d5a2adaed6 fix: removed errernous code 2024-09-03 13:09:54 +00:00
Mohammad Arham 008ab3f068 Merge branch 'development.new_exchanges' of bitbucket.org:bluetradesys/spark into development.new_exchanges 2024-09-02 16:31:14 -04:00
Mohammad Arham 7d926f588d FIX: typo, changed date to day 2024-09-02 16:31:10 -04:00
Mohammad Arham 707cd07876 Add: CBOE L1 books and contracts working 2024-08-28 16:22:51 +00:00
Mohammad Arham f7ecb9090c add: code to start working on cboe 2024-08-27 12:33:23 +00:00
Mohammad Arham a19e8a7315 change: changes to make taifex work 2024-08-27 07:45:59 -04:00
John Colvin cf189ecf81 refactor: Start cboe and taifex md 'start_databento'
Similar to how we start all ccapi implemented exchanges in "_start_cc"
(in MarketDataGateway)
2024-08-26 19:13:59 +00:00
John Colvin 4405b7adcb refactor: Rename cc_md_listeners -> venue_listeners
They are general purpose, not specific to ccapi.
2024-08-26 19:09:57 +00:00
John Colvin e51ee7b7b9 refactor: Wrap IDGenerator and IMarketDataListeners in shared_ptrs
Our various market data providers (ccapi, emumba, replay, onixs)
dereference pointers to common instances of these types concurrently on
different threads. Although we've correctly managed memory ownership
thus far, we really should be using smart pointers (this is why they
were made).
2024-08-26 19:03:29 +00:00
John Colvin dfaa74f426 build: Add databento dep via FetchContent
Now we actually build libdatabento in the devcontainer along with our
code (as we do with the vcpkg deps, though this is not part of vcpkg)
2024-08-26 17:13:51 +00:00
Mohammad Arham 1d2ce59009 add: added taifex entries 2024-08-22 23:13:05 +00:00
Adeel Khan 3602cc05bb added: TaifexDataHandler, temp 2024-08-23 02:06:47 +05:00
Adeel Khan ac88a81ac6 Security Extensions 2024-08-23 01:42:24 +05:00
Adeel Khan 01fa8e0c63 added: files for Taifex, Cboe 2024-08-23 00:57:40 +05:00
Taha 322c06bfbe Fixing build relted to BCG vs bts namespace 2024-08-21 16:24:22 -04:00
Taha b68fceb362 Cleaning up FileStreams 2024-08-21 16:11:57 -04:00
John Colvin 59547e0f37 fix build: Lock fmt version to 10.2.1 in vcpkg
This fixes the front-end (Windows) libspark build
2024-08-21 13:45:43 -04:00
John Colvin 3ce100a9cf build: Add databento to sparkd
* Install databento deps in docker
  - libzstd-dev
* Add databento cmake module to externals
2024-08-21 13:49:53 +00:00
John Colvin 6513fb0cd5 cleanup: Remove unused include 'date.h' from MDSource
This was an external header, and may interfere with a dependency in the
databento lib (which we are about to add).
2024-08-21 13:49:24 +00:00
Taha Afzal fd0fb1f760 Adding incremental book updates to IMarketDataListener 2024-08-12 22:49:27 -04:00
Taha Afzal 5db586c4d3 spaces, newlines? 2024-08-12 21:27:43 -04:00
Taha 31df1a3827 Added benzinga streamd to MDPub's test config 2024-07-17 14:32:57 -04:00
Taha 7e219aec7c Merging 2024-07-17 02:06:17 -04:00
Taha 37f8b98df9 Icomplete SharedStreamsConfig was breaking build, fixing 2024-07-17 02:03:43 -04:00
Taha f06beff22f Added new benzinga streams 2024-07-17 02:02:01 -04:00
Taha Afzal 6aa39a716a PubSubSingleTagState is not needed any more 2024-07-16 01:15:51 +00:00
Taha Afzal 5088b5ebe0 Fixing problems where PSS's client socket's IP was different than what the client was sending in PubSubClientSubscription 2024-07-08 23:09:53 +00:00
Taha Afzal 010dd3a26f Fixing PubsubEchoTestStream 2024-07-07 06:13:22 +00:00
Taha Afzal 1a18755176 Added pss_echo() 2024-07-06 06:53:35 +00:00
Taha Afzal 233e2576af Merging 2024-07-05 21:21:27 +00:00
Taha Afzal 543c655bca src/DataStreamSuite/PubSub/ManagedTCP/AsyncTCPConnection_AsyncWrapper.cs 2024-07-05 21:13:36 +00:00
Taha 050e21e22b Adding TableMetaDataStream 2024-07-04 23:39:04 -04:00
Taha Afzal 672ad6d237 Cleaning Config 1.0 (not completely done) 2024-06-30 23:17:20 -04:00
Taha 0a8f6e866f Added pubsub routes to the Title of DSQA 2024-06-27 14:04:07 -04:00
Taha b177ffef04 Fixing the bug where messages were being sent by the pubsubserver out of order 2024-06-27 00:17:22 -04:00
Taha 393f304be4 some buf gixes + cleanup 2024-06-26 00:23:19 -04:00
Taha 151816bf5e PubSuMessageReactor empties the message queue (instead oif one elem ata a time) in the main loop 2024-06-24 02:29:28 -04:00
Taha 5cf7eacd82 Fixing the extra .0 in the default pubsub server routeplusfixing acorner cae issue of gettign a fast streaming data cakback after an unsubscribe 2024-06-24 00:28:07 -04:00
Taha 87b6a2044c PubSubServer's linux issues fixed 2024-06-23 21:13:37 -04:00
John Colvin 087d8ab8c9 Set text=auto in gitattributes
Otherwise git can cause files to show as "permanently modified" when you
apply changes from the index (e.g., by running 'git rebase', or 'git
stash pop')
2024-06-11 17:39:12 +00:00
John Colvin b69b7b3350 vscode: Use '\' dir separator in show_last_run.cmd
This script only runs on Windows
2024-06-08 15:08:25 -05:00
John Colvin 5620f33524 vscode: Add task to view logs for last PubSubServer run 2024-06-08 14:42:13 +00:00
John Colvin f3e33fa390 vscode: Add task to run PubSubServer without building 2024-06-07 16:41:42 +00:00
John Colvin 3b631e0d5f Fix a couple more typos in logs 2024-06-07 16:35:06 +00:00
John Colvin f93d28ee76 vscode: Add task to view logs for last DSQA run 2024-06-07 11:34:36 -05:00
John Colvin 23d7d3775d cleanup: Delete unused files 2024-06-07 10:40:34 -05:00
John Colvin 4940771166 fix: Don't login to sparkd from DSQA 2024-06-07 10:02:42 -05:00
John Colvin c1967a8f6a vscode: Add tasks to edit Spark, DataStream config 2024-06-06 11:12:56 -05:00
John Colvin 8c797ee76b Fix typo in log msg 2024-06-06 09:21:01 -05:00
John Colvin ce80957d07 DSQA shouldn't connect to sparkd by default 2024-06-06 09:21:01 -05:00
John Colvin c60018b59e DataStreamPublisher shouldn't connect to sparkd by default
It only needs to connect to sparkd if it's publishing market data
2024-06-06 09:21:01 -05:00
John Colvin 3a27af87d1 PubSubServer shouldn't download config from sparkd by default
As far as I know, it only needs spark/protobuf config to initialize the
c++ logging system. Eventually, we should get rid of that dependency and
use builtin Microsoft Logging facilities for c# instead. In the
meantime, PubSubServer will load config from local files by default
(i.e., spark.conf).
2024-06-06 09:21:01 -05:00
John Colvin 068c1c6973 cleanup: Remove erroneous comment 2024-06-06 09:21:01 -05:00
John Colvin 645a58c97d vscode: Add launch.json 2024-06-06 09:21:01 -05:00
John Colvin b7f455b29a vscode: Remove launch/tasks.json from gitignore 2024-06-06 09:21:00 -05:00
John Colvin 4a2735839e Change line endings to crlf in a few cs files 2024-06-06 09:21:00 -05:00
John Colvin d2e9fe8237 Change line endings to crlf in a few cs files 2024-06-06 09:21:00 -05:00
John Colvin cfc60766d8 Change line endings to crlf in a few cs files 2024-06-06 09:21:00 -05:00
John Colvin b03fec7f79 Change line endings to crlf in a few cs files 2024-06-06 09:20:59 -05:00
John Colvin fb8e7c5b81 Ensure crlf line endings for cs files 2024-06-06 09:20:05 -05:00
John Colvin e44601d1b1 fix merge: Bring back few fns that SchemaGuesserStream needs
* BlueDataUtility.get_typed_schema
* BlueDataUtility.get_typed_table
2024-06-06 09:20:05 -05:00
Taha 07bade53c0 Fixing AsyncTCPCOnnection_APM's double partial messages for messages > 100 MB 2024-06-06 09:20:05 -05:00
Taha fac0a9c25b RemoteQueryStream 2024-06-06 09:20:05 -05:00
John Colvin 1d1de3dd18 Ensure proper line endings for sh, cmd scripts
Via new gitattributes file
2024-06-06 09:20:05 -05:00
John Colvin cfcbf004ba vscode: Use consistent naming conventions in tasks.json 2024-06-06 09:20:05 -05:00
John Colvin 78c7dadbbe vscode: Add parameterless task variants
This allows us to build as a 'preLaunchTask' when debugging (without
requiring users to redundantly specify 'Debug' as the build type).
2024-06-06 09:20:01 -05:00
John Colvin 7b5a6031af build: Use consistent naming conventions in CMake presets
We'll use similar naming conventions for our (vscode) tasks
2024-06-06 09:15:17 -05:00
John Colvin c13a7782c8 build: Name sparkd binary dirs after cmake preset
All other builds follow this pattern. Given the fact that we have so
many different builds now (spark, sparkd, data-streams, api-server,
etc.), it behooves us to adopt consistent naming conventions.
2024-06-06 09:15:17 -05:00
John Colvin 45f02391d1 cleanup: Remove sparkd login creds from PubSubServerConfig
It only needs a Sparkd url to download logging config. TBH, we can probably
get rid of that too, and simply read the local spark.conf.
2024-06-06 09:15:17 -05:00
John Colvin a3ca06addc Reduce 'internal_publish' log level to Diag
It was a bit noisy for the Info level
2024-06-06 09:15:17 -05:00
John Colvin 32869e54ec fix: Fix typos in c# Logs
Prefix a few msgs with '$' so vars in curly braces are expanded via
interpolation
2024-06-06 09:15:17 -05:00
John Colvin ca73220a2e Add new PubSub cfg to DSQA
At least the server address (port) needs to be exposed
2024-06-06 09:15:17 -05:00
John Colvin 9fc3c2618e cleanup: Remove unnecessary reference to SharedStreams
From DataStreamPublisher
2024-06-06 09:15:17 -05:00
John Colvin e72e0c0a30 fix: Make PubSubServer actually use sparkd url in config 2024-06-06 09:15:17 -05:00
John Colvin a5bfc75278 cleanup: Fix a few nullability warnings in DSQA 2024-06-06 09:15:17 -05:00
John Colvin 261a184d25 refactor: Replace legacy Crono type w/ dotnet Stopwatch 2024-06-06 09:15:16 -05:00
John Colvin 54e96a06cb build: Build DSQA on Windows in build_data_stream.py
It was only building DataStreamSuite.sln before, which is crossplatform
now so it no longer includes DSQA.
2024-06-06 09:15:16 -05:00
John Colvin 17e60df32b cleanup: Remove unused file PubSub3Config.cs 2024-06-06 09:15:16 -05:00
John Colvin c99d5fe24c Add support for core PubSub config via json 2024-06-06 09:15:16 -05:00
John Colvin 6049826e90 build: Make build_data_stream.py cross platform
Previously it only worked on Windows
2024-06-06 09:15:16 -05:00
John Colvin 672149dd89 Add more descriptive logs (via stdout) during initialization
The C++ configure/initialize routines were particularly opaque
2024-06-06 09:15:16 -05:00
John Colvin 8c99147f04 build: Build cmake presets in distinct binary dirs
It may use more disk space, but we really don't have a choice. CMake
projects with different parameters, preprocessors, source files, etc.
are not designed to share binary dirs. For example, the libspark.so file
that the Spark front-end is supposed to use is not necessarily the same
as the libspark.so file the Api Server is supposed use.
2024-06-06 09:15:16 -05:00
John Colvin 4d4b0b7ae3 build: Give api server distinct shm prefix 2024-06-06 09:15:16 -05:00
John Colvin 1a7955c1b1 build: Remove unnecessary cache var/macro for api server
* BUILD_API_SERVER (cmake cache var)
* SPARK_ENABLE_API_SERVER (preprocessor defined conditionally w/ BUILD_API_SERVER)

They were originally added to control whether or not MD Consumer extern
fns were built. They have been made redundant by the more appropriately
named EXPORT_MD_CONSUMER cache var/macro (both have same name now).
2024-06-06 09:15:16 -05:00
John Colvin f8fc2a1d96 cleanup: Remove static service Locator class
It relied on a static singleton 'ServiceContext'. Replace references
with a properly scoped (i.e., non-static) ServiceContext
2024-06-06 09:15:16 -05:00
John Colvin 9a7b3cb77c refactor: Reduce code (simplify) in BTS.init
Remove the 'args' parameter, since the cmd line can be obtained from
Environment.GetCommandLine anyways
2024-06-06 09:15:16 -05:00
John Colvin 8a3e4edb4d Dispose connections in SimpleTCPServer.Dispose 2024-06-06 09:15:15 -05:00
John Colvin e59183bb1e improvement: Allow app data dir to be overriden w/ env var
Historically, this has been hardcoded to ~/sparkdata on Linux, and
%APPDATA%/bts on Windows.
2024-06-06 09:15:15 -05:00
John Colvin dd4d4e8dc6 fix: Expand path vars in cmake presets at runtime
The binaries should be portable to other machines (paths shouldn't
be fixed to the user's home dir at compile time).
2024-06-06 09:15:15 -05:00
John Colvin f1744450ca build: Add script to build api server 2024-06-06 09:15:15 -05:00
John Colvin 3a7827a75b build: Automatically load vs dev prompt for win builds 2024-06-06 09:15:15 -05:00
John Colvin 8d22e91c0d fix build: Remove references to HighPerformanceTimer
An old custom timer class from Edge that we no longer need. We're
replacing it w/ a dotnet builtin timer class called 'Stopwatch'.
2024-06-06 09:15:15 -05:00
John Colvin c425145fc9 Remove mongo stream from MarketDataPublisher.json
It doesn't work unless you have mongodb running (a bit of a burden when you
just want to publish market data)
2024-06-06 09:15:15 -05:00
John Colvin 4855935ae0 improvement: Get PubSubRoutes from config (json)
Previously, we were using hardcoded default routes.
2024-06-06 09:15:15 -05:00
John Colvin 65f412ec9f fix: Fix myLoadAllTypes impl
* Fix lowercase typo in hardcoded assemblies (case matters now that we
  run on Linux)
* Fix resolution to full path (previous impl used deprecated functions,
  and incorrectly appended relative paths)
2024-06-06 09:15:15 -05:00
John Colvin 40681c6093 Add MaybeNullWhen(false) attribute to TryGetFirst result
So callers can assume non-null when it returns true (for IEnumerables of
non-null ref types)
2024-06-06 09:15:15 -05:00
John Colvin ab2d36e523 vscode: Add tasks.json
This provides a good base of operations to build/launch our now numerous
projects
2024-06-06 09:15:09 -05:00
John Colvin b1ab3a66d2 build: Fix old build_sparkd.py script
Things have become a lot simpler since it was originally written.
2024-06-05 15:44:36 +00:00
John Colvin 5e7e7e8ef4 test: Add FilterStreamTests 2024-06-05 15:44:35 +00:00
John Colvin 9291d30ae9 build: Add cmake opt to export MDConsumerInterop fns
Now that we have all these different builds (sparkd, spark, api server,
data streams) - many of which are cross platform - we need a proper
toggle for this (relying on 'IF WIN32' preprocessors doesn't cut it)
2024-06-05 15:44:35 +00:00
John Colvin 549708fcc2 fix: Use ".dll" file ext when loading assemblies by path 2024-06-05 15:44:35 +00:00
John Colvin 1d5551f301 build: Add cmake preset to build data streams on linux 2024-06-05 15:44:35 +00:00
John Colvin 283db0f9ea build: Define shm prefix and app data dir in CMakePresets
It's more organized this way, with the input variables for each
configuration defined in one place.
2024-06-05 15:44:35 +00:00
John Colvin 9fb04b2db9 cleanup: Remove unused cmake preset 'spark-api-server-base'
This was a hidden preset designed for common Linux/Windows config.
Neither Linux nor Windows configs were inheriting it.
2024-06-05 15:44:35 +00:00
John Colvin ceca96e10a Add build_data_stream.sh script for Linux 2024-06-05 15:44:35 +00:00
John Colvin fc48cc64af fix build (webapp): Add --include=dev arg to npm install
The apt repo finally updated npm from 8.X.X to 10.8.0. This broke the
Spark.Admin.WebApp build because the new version doesn't install dev
dependencies by default.
2024-06-05 15:44:35 +00:00
John Colvin 015d846941 feat: Add Pandas(Script)Stream 2024-06-05 15:44:35 +00:00
John Colvin e39108bbda fix build (sparkd): Fix typo
'git' was appended to a type name. I suspect a keyboard focus conflict
between vs code editor/terminal panes.
2024-06-03 13:46:51 +00:00
John Colvin 6240d89a08 Map PubSubServerConfig json to historic PubSub3Config 2024-06-03 13:46:51 +00:00
John Colvin c76700e5e5 cleanup: Remove unused PubSubRoute array from DSQA 2024-06-03 13:46:51 +00:00
John Colvin a8a0e8dea0 cleanup: Remove unused PubSubConfigureForm 2024-06-03 13:46:51 +00:00
John Colvin d65a2d6ed6 test: Add DataPacketBuilderTests
This tests somes facilities used in the new MongoCollectionStream
2024-06-03 13:46:51 +00:00
John Colvin 1824d5f9a4 feat: Add [incremental] MongoCollectionStream 2024-06-03 13:46:51 +00:00
John Colvin d3eb29087b refactor: Impl IDictionary<int, IBlueRow> in BlueTable 2024-06-03 13:46:51 +00:00
John Colvin d6fae238f9 Add IObservable ViewStream wrapper 2024-06-03 13:46:51 +00:00
John Colvin 44b46033e3 cleanup: Remove HighPerformanceTimer 2024-06-03 13:46:51 +00:00
John Colvin 5741ec9ab2 cleanup: Remove unnecessary usings (namespaces) 2024-06-03 13:46:51 +00:00
John Colvin 596975b309 style: Apply modern formatting to Crono 2024-06-03 13:46:51 +00:00
John Colvin 9050318ceb refactor: Replace HighPerformanceTimer w/ Stopwatch
This is needed to build DataStreamSuite on Linux.

'Stopwatch' is a platform independent timer class included with the
System.Runtime library in modern dotnet. 'HighPerformanceTimer' is a BTS
class that predates Stopwatch, and is NOT platform independent as it
relies on Windows kernel32.dll QueryPerformanceCounter/Frequency fns.
2024-06-03 13:46:51 +00:00
John Colvin 7ee6933789 refactor: Add formal config classes for prepublish streams
They can be passed to command line via --config <json_file>
2024-06-03 13:46:51 +00:00
John Colvin 306c572b53 improvement: Polish clis in DataStreamSuite
Specifically PubSubServer, DataStreamPublisher and DSQA

* Use CommandLineParser (nuget pkg)
* Clean up csproj files a bit while we're at it
2024-06-03 13:46:51 +00:00
John Colvin 63306173b1 refactor: Reorganize NumericComparer, support all types
Get rid of redundant UniversalNumericComparer while we're at it
2024-05-25 15:37:33 +00:00
John Colvin df1b45ca3e cleanup: Remove leftover legacy files 2024-05-25 15:37:33 +00:00
John Colvin c31a1f1bf3 cleanup: Switch assert statements to 'constraint model'
This gets rid of a few more build warnings in DataStreamSuite
2024-05-25 15:37:33 +00:00
John Colvin e95997ea17 cleanup: Chip away a few nullability warnings in DataStreamSuite
This is a start, but there're still > 700 of them!
2024-05-25 15:37:33 +00:00
John Colvin 12a070fd8d build: Remove DSQA from DataStreamSuite.sln to its own sln
So we can build DataStreamSuite.sln on Linux (DSQA depends on WinForms)
2024-05-25 15:37:33 +00:00
John Colvin e0459c54fd build: Fix 'pubsub' -> 'PubSub' typo in csproj ProjectReferences
Now all DataStream projects build on Linux (except DSQA, which is a winforms app)
2024-05-25 15:37:33 +00:00
John Colvin 15262a5a95 build: Move winform deps from BlueRegistry.csproj to DSQA
So we can build all DataStream projects (except DSQA) on Linux
2024-05-25 15:37:33 +00:00
Taha Afzal 90ec64d25c deleting old serializers 2024-05-25 15:37:33 +00:00
Taha Afzal 061481419e Streams can be published and subscribed now 2024-05-25 15:37:33 +00:00
Taha Afzal 8035255868 Cleaned up the cashe held by PublisherCore 2024-05-25 15:37:33 +00:00
Taha Afzal 7feaf869dc Stream serialization revamp, all tests pass (TestsStream.s) 2024-05-25 15:37:33 +00:00
Taha Afzal 7104e90fc9 Adding tests for stream serialization 2024-05-25 15:37:33 +00:00
Taha Afzal 52c1e500e6 Re-fixing PubSubserver exception caused by null server in internal tags 2024-05-25 15:37:33 +00:00
Taha Afzal 07274f897a Pubsub stats 2024-05-25 15:37:33 +00:00
Taha Afzal f626e53415 CPublisherCore, SubscriberCore, PubsubMessageReactor claned 2024-05-25 15:37:33 +00:00
Taha Afzal 5a7b2965be PubUBState cleaned up and modernized 2024-05-25 15:37:33 +00:00
Taha Afzal 0aab1628bc removing old handlers from PubsubMessageReactor 2024-05-25 15:37:33 +00:00
Taha Afzal b9649e1d8e Clearing up PubSubMessageReactor 2024-05-25 15:37:33 +00:00
Taha Afzal 3bc9bf2207 Starting the server cleanup work 2024-05-25 15:37:33 +00:00
Taha Afzal 888c06262b PublisherCore cleaned up 2024-05-25 15:37:33 +00:00
Taha Afzal 03e80dabcb CHanging member names from old style 2024-05-25 15:37:33 +00:00
Taha Afzal 54184d0875 Cleaning up ISubscriberCore to use ne PubSubClientMssage class 2024-05-25 15:37:33 +00:00
Taha Afzal 90bcf5a455 Adding testss for PubSubMessages 2024-05-25 15:37:33 +00:00
Taha Afzal d32d5ef40c Cleaning up PubSubMessages, as types messages instead of PubSubMetaData untypes dictionary 2024-05-25 15:37:33 +00:00
Taha Afzal 2e0e0658c6 Fixing merging 2024-05-23 10:34:40 -04:00
Taha Afzal bbdb50a41e FIX bridge for Trafix 2024-05-23 10:34:40 -04:00
John Colvin 90705cac83 Integrate theos into Algo Testing Framework
(For Laguna)
2024-05-13 14:28:16 +00:00
John Colvin b91cdd6d91 Expose get/set test secs fn for Algo Testing Framework
Laguna needs this. Historically, the test securities were extracted from
coconut md replay files. Eventually, we'll extract them from the new
replay file format, but until then, this gives Laguna a way to manually
set securities for algo tests (I hardcoded 1 ES sec for convenience by
default).
2024-05-13 14:23:31 +00:00
Mohammad Arham 64f2bd7a88 removed quoting algo so can be loaded dynamically 2024-04-04 20:38:15 -04:00
Mohammad Arham 3e32f684e3 removed redundant code 2024-04-03 16:56:31 -04:00
Mohammad Arham ff73756a55 removed assert if delete order that is completed 2024-04-03 16:55:29 -04:00
Mohammad Arham 1e64811d93 changed error code 2024-04-03 16:54:51 -04:00
John Colvin 2488597cf2 fix build (linux api server): Remove srcs that moved to sparkd 2024-04-02 16:25:13 +00:00
John Colvin 2d8047ba80 build: Tidy up build/publish_spark scripts
In preparation for the first deployment of the "development" branch.
2024-04-02 01:47:47 -05:00
John Colvin 3cb602b77e dev: Remove irrelevant comment from devcontainer.json
It was added by accident
2024-04-02 06:10:25 +00:00
John Colvin 51e1005e79 dev: Fix compile-commands-dir in devcontainer.json
It should be '${workspaceFolder}/build/clang/debug'
2024-04-02 06:01:14 +00:00
John Colvin ef7ea64973 dev: Add -y to 'apt install libpcap' in Dockerfile
Fixes the docker build
2024-04-02 05:57:03 +00:00
Mohammad Arham 0267c16e5a Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2024-04-01 19:02:32 -04:00
Mohammad Arham ca40e278ff quoting crash fix and comments 2024-04-01 19:01:27 -04:00
John Colvin 1c5da7ad48 cleanup: Tidy up hdrs included in cpp algo sdk 2024-04-01 10:09:35 -04:00
John Colvin 9bb3d5c569 refactor: Move ChildOrder defs to cpp file
So deps can be omitted in header
2024-04-01 10:09:35 -04:00
John Colvin 92ba43bfad refactor: Move ccapi logger into its own file 2024-04-01 10:09:35 -04:00
John Colvin ddeb5e59f0 fix: Add missing exchs to risk webapp 2024-04-01 10:09:35 -04:00
John Colvin 6b0b3e31cc cleanup: Move nested Trade class into its own file
Cut down on dep clutter
2024-04-01 10:09:35 -04:00
John Colvin 3f6c904ccc cleanup: Get rid of redundant SecurityKey def
Make bts::Security an alias for bts::md::Security instead
2024-04-01 10:09:35 -04:00
John Colvin d433919f1b refactor: Move OrderBuilder defs to cpp file
So impl deps don't leak into the sdk through headers
2024-04-01 10:09:35 -04:00
John Colvin 75da9af39d improvement: Add fmt impl for SecurityKey 2024-04-01 10:09:34 -04:00
John Colvin 22eff44926 cleanup: Tidy up Book.h 2024-04-01 10:09:34 -04:00
John Colvin cd6a052d0c cleanup: Tidy up IAlgoOrder, add fmt impl for ChildState
Part of a larger effort to polish the sdk for laguna
2024-04-01 10:09:34 -04:00
John Colvin 3b6cf0b187 cleanup: Remove unnecessary includes 2024-04-01 10:09:34 -04:00
John Colvin c170dd7a9e refactor: Include ostream in EnumMacros.h
So it doesn't need to be explicitly included to support ENUM_CLASS_DEF
2024-04-01 10:09:34 -04:00
John Colvin 154775bc70 refactor: Move misplaced code from libspark to sparkd
This will reduce the dependency load on libspark and the c++ algo sdk.
This has been on the backburner for a while; we're doing it now so we
can deliver a clean sdk to Laguna.

Migrating the following code:
  * general server-side md utils (MarketDataGateway, etc.)
  * emumba dependent code, including md impl for:
    - deribit
  * ccapi dependent code, including md impl for
    - binance
    - binance_us
    - binance_usds_futures
    - ftx
    - coinbase
    - okx
    - deribit
  * md recording

Note: I first began this migration to eliminate the c++ algo sdk's
wependency on emumba. There seemed to be a conflict related to ssl
versions (the build in the sdk docker would fail with unresolved
external symbols for OPENSSL macros)
2024-04-01 10:09:34 -04:00
John Colvin 7f936f3ba9 fix: Inline defs in hdr file 2024-04-01 10:09:24 -04:00
John Colvin 9b30a947a8 fix build: Add a few includes, suppress some werrors
Not sure how this slipped through the cracks, but I'm guessing the build
broke when we upgraded the cpp compilers (to clang 17 and gcc 13).

* Include <cstdint> in a few places
* Suppress -Wstringop-overflow in sparkd-gcc-release build
* Change const char * param to explicit std::string for proper type
  deduction in call to 'std::make_tuple'. For some reason, the gcc build
  was failing with an array-bounds werror (changing the arg fixed it).
2024-04-01 10:09:24 -04:00
John Colvin 2ee58d8f99 dev: Add devcontainer.json (for linux) 2024-04-01 10:09:24 -04:00
John Colvin 0537b3e9c7 cleanup: Remove mongodb.js file that was added by accident 2024-04-01 10:09:24 -04:00
John Colvin 8ae940bcbc fix: Change "init" call to "initAsync" in spark_api_server main
WebsocketDataSync.init was refactored to initAsync
2024-04-01 10:09:23 -04:00
Mohammad Arham 966ccb5f2c fixed order entry 2024-04-01 07:48:36 -04:00
Mohammad Arham fae9c3e59e quantity connected, fills reported, limit set as default 2024-04-01 07:46:36 -04:00
Mohammad Arham cb1dfb257d updated defaults to have max_order_msgs_per_window 2024-03-29 16:00:36 -04:00
Mohammad Arham 76c3fe86c2 quote algo quantity hooked 2024-03-29 14:42:15 -04:00
Mohammad Arham 7e3b1de70f bug fix 2024-03-29 00:38:33 -04:00
Mohammad Arham 2a07e3cf3c custom orders working on api 2024-03-29 00:37:04 -04:00
Mohammad Arham 6d0249825d quotingalgo working 2024-03-29 00:35:49 -04:00
Mohammad Arham 63810e3966 build fix 2024-03-26 18:07:48 -04:00
Mohammad Arham 4c013a8886 reorganise code 2024-03-26 18:07:01 -04:00
Mohammad Arham 9509818978 set theos 2024-03-26 18:06:07 -04:00
Mohammad Arham 4fdf3b8b60 just cleaner code 2024-03-26 02:10:06 -04:00
Mohammad Arham ee9a58486d cleaner code same logic 2024-03-25 02:52:51 -04:00
Mohammad Arham 75d6939c8b added new rules for onix decode ticks 2024-03-25 01:48:22 -04:00
Mohammad Arham fb1697b571 spelling fix 2024-03-24 23:17:02 -04:00
Mohammad Arham 4080d606d8 fixed get trades 2024-03-24 23:16:38 -04:00
Mohammad Arham 7655fd47dd fixed spelling 2024-03-24 23:14:11 -04:00
Taha Afzal d029b0fce7 SimExecution works with GLBX now 2024-03-18 23:54:19 -04:00
John Colvin 60df5b2a68 refactor: Move OrderDataHelper to spark_api.csproj
So it can be called from the websocket api server to parse
CustomOrderDefinitions
2024-03-13 12:45:17 -05:00
Taha Afzal bada5dc961 Fixing SimExecution for CME 2024-03-06 14:11:02 -05:00
Taha Afzal 4510e120ab enabling some streams like max, that were dependent on AddCOlumns (thta John fixed in the last commit) 2024-02-12 13:21:28 -05:00
Taha Afzal da2af06ee6 Merging 2024-02-08 15:48:51 -05:00
John Colvin 9212c6d097 Line ending changes in yacc/lex generated code
I recently upgrade the YaccLexTools nuget to 1.2.2, perhaps these new
line endings are related to that.
2024-02-08 14:28:36 -06:00
John Colvin 8660dea85a build: Downgrade new DataStream code from net8 -> net7
The AddColumnsStream, SortStream, and requisite yacc/lex grammar were
originally added to a new branch, off of development, which is on net8.
I forgot to change it to net7 when I cherry-picked the commits for the
regular development branch.

It's wasn't quite as simple as flipping net8 -> net7 in csproj files,
because I was eager to use new language features only available in net8!
Namely, primary constructors and collection expressions.
2024-02-08 14:24:31 -06:00
Taha Afzal 8c1342230b RowDiff added 2024-02-08 14:11:10 -05:00
John Colvin d0ddc1d57b Resurrect SortStream
Add ColumnSortExpressions grammar (lex/yacc)
2024-02-08 10:04:53 -06:00
John Colvin fe1e953030 Resurrect AddColumnStream
Add ColumnExpressions grammar (lex/yacc)
2024-02-08 10:04:53 -06:00
John Colvin dab17af5a9 build: Upgrade YaccLexTools to 1.2.2 2024-02-08 00:51:16 -06:00
Taha Afzal 8dd2775092 Added volatility to trade bars 2024-02-04 23:22:52 -05:00
John Colvin 7fb7b1e4af Fix PriceStatsStream
* Store subscription IDisposable in class (we need to control the life of the subscription)
* Flip typo '_dirty = false' -> '_dirty = true'
2024-02-04 22:14:00 -06:00
Taha Afzal 8966b73ac9 Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2024-02-04 18:04:06 -05:00
Taha Afzal ddb2a91763 Adding TradBar stream 2024-02-04 18:03:51 -05:00
John Colvin bc5bcbf11e fix: Bootstrap MarketDataClient.price_ticker/stats w/ init state
Bugs (fixed):
  * MarketDataClient.price_ticker, and price_stats streams don't fire update
    with initial state (they only tick as subsequent changes are observed)
2024-02-04 15:33:20 -06:00
Taha Afzal 287ee291cc Adding a stream that send a TCP packet to the echo server and monitors the n_sends and n_recvs 2024-01-25 13:37:41 -05:00
Taha Afzal 2bceda01ae Added code in BlueDataUtility to create schema from data 2024-01-22 16:28:23 -05:00
John Colvin c39a270115 fix: Support all exchs in QueryServer::get_names 2024-01-17 11:15:01 -05:00
Taha Afzal 6e3f9f99c0 Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2024-01-17 10:08:17 -05:00
John Colvin b53d9d7d4c refactor: Remove 'Platform' (md source) config
Good riddance. Improper 'PlatformMap' config was often the reason market
data mysteriously wouldn't show up in the client. Especially with new
exchanges. We should keep all md source/connection configuration in one
place (one proto message), to avoid any confusion.
2024-01-17 01:42:57 -05:00
Taha Afzal cc3e289345 KeyValueToRelationalStream added 2024-01-16 19:08:40 -05:00
John Colvin 60a8b4f8c7 Gitignore all .tmp dirs (at any level) 2024-01-15 13:34:35 -05:00
John Colvin c5e0a93869 Gitignore all .venv* dirs (at any level) 2024-01-15 13:33:05 -05:00
John Colvin 3a3216421b Remove unnecessary file temp.cpp 2024-01-15 13:33:05 -05:00
Taha Afzal 8cbbbc6da3 Merging 2024-01-13 23:45:51 -05:00
John Colvin 25117c5bb7 Append application name to "logging" dir
So we can run datastream procs alongside sparkd on the same machine without
log file conflicts
2024-01-12 14:22:02 -05:00
John Colvin 8c95b43524 devcontainer: Name mount dir w/ 'devcontainerId'
To ensure it is unique on the main host (i.e., outside the container). Get rid
of devcontainer_initialize.sh, all it did was run "mkdir". Something this
trivial can be inlined in the devcontainer.json (less indirection this way).
2024-01-12 11:41:40 -05:00
John Colvin 1324e2aad1 Gitignore the '.devcontainer' dir (not the json file)
We actually do track a 'devcontainer.json' file (to keep as a template). We
just don't keep it in the '.devcontainer' dir, for the same reason we don't
track the '.vscode' dir: so devs can tailor it to their specific needs.
2024-01-12 11:41:40 -05:00
John Colvin 6fad8b754b docker: Install kitware-archive-keyring to keep key in sync (for cmake) 2024-01-12 11:41:40 -05:00
Taha Afzal f872fe9d56 AsyncTCPConnection_APM.cs now send onData with Disconnection if it detects teh other side has ShutDown 2024-01-11 17:02:41 -05:00
Taha Afzal d50e8cda50 Adding AsyncTCPConnectionAcceptor_APM and AsyncTCPConnector_APM to create ITCPConnection 2024-01-11 16:10:51 -05:00
Taha Afzal 694f8b8d11 AsyncTCPConnection_APM works now 2024-01-09 14:34:15 -05:00
Taha Afzal 047267ad1b AsyncTCPConnection_APM completed (not hooked yet) 2024-01-06 11:34:46 -05:00
Taha Afzal 5b4b41d4eb Adding MongoDB astream integration 2024-01-02 00:44:52 -05:00
Taha 3e25b4918f Adding 3 AsyncTCPCOnnections for APM, TAP, and SocketAsyncEventArgs 2024-01-02 00:43:40 -05:00
Taha Afzal 1ceea4af5a Changing TCPUtils to use SocketAsyncEventArgs instead of TAP functions, simple client<->server works with echoing messages 2023-12-20 11:32:53 -05:00
Taha Afzal cdc7da8c59 Adding sec_name col to bbo 2023-12-18 12:57:04 -05:00
Taha Afzal f1e26b984a Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2023-12-18 12:42:35 -05:00
Taha Afzal a7189628b1 Adding EMA, SMA and RenkoStreams 2023-12-18 12:42:14 -05:00
John Colvin 32433577ec fix build (client): Move a few includes inside 'if' ppd 2023-12-14 11:31:31 -05:00
John Colvin ed5ef1b7c4 fix build: Remove a few RequiresPreviewFeatures attrs
Features which are now standard in .Net
2023-12-14 11:16:19 -05:00
Mohammad Arham ac7c38d0e2 Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2023-12-13 21:06:41 -08:00
Mohammad Arham b887f90b99 added book levels to mdrecorder 2023-12-13 21:06:19 -08:00
John Colvin 9a0ef90700 fix build (windows): Update fmt to v10.1.1
Manage this dep with vcpkg now (instead of externals)
2023-12-13 13:27:29 -05:00
John Colvin 5086e81578 build: Add vcpkg as submodule 2023-12-13 12:34:14 -05:00
Mohammad Arham 2230f8d748 emty string can also be default linfopath 2023-12-11 06:49:34 -08:00
Mohammad Arham 1fa66f4815 defaults updated to make glbx work on onix 2023-12-11 06:47:49 -08:00
Mohammad Arham e5d19ceb8d assert if channerls per thread < 1 2023-12-11 06:47:03 -08:00
Mohammad Arham edda571509 added glbx config just to enable glbx 2023-12-11 06:45:36 -08:00
Mohammad Arham 55f20e5a09 Added entry for cme/onix in mdgateway 2023-12-11 06:43:05 -08:00
Taha Afzal 619b49ee6c Changing the stream subscription structure 2023-11-15 12:30:43 +00:00
Taha Afzal ab32055416 Adding C++ stream tables (and tests) 2023-11-14 21:53:54 +00:00
Taha Afzal 2ae3ded65e src/DataStreamSuite/DataStream/Primitives/FileStreams/PlaybackStream.cs 2023-11-14 18:15:53 +00:00
Taha Afzal 4acb1e268a Merging 2023-11-14 18:14:18 +00:00
Mohammad Arham d45c79c44b Merge branch 'development' of bitbucket.org:bluetradesys/spark into development 2023-11-02 07:46:49 -07:00
John Colvin cba32be99d fix build: Use relative path in csproj references
The build was broken because Spark.csproj was looking for SharedStreams
at some hardcoded path on taha's comp
2023-10-26 14:37:56 -04:00
John Colvin 292fa54dda fix: Get rid of hardcoded path to dll
Use Assembly.Location instead

Bugs (fixed):
  * PubSubServer throws an exception on startup because it can't find
    dll at hardcoded path
2023-10-26 14:31:20 -04:00
John Colvin 3b059ebdfa fix: Format arguments properly in DataStream code gen
Previously, all arguments were formatted as "Bts.DataStream.Argument"
(from the default ToString)
2023-10-26 14:24:32 -04:00
John Colvin d0d3c9de4e feat: Allow line-comments in DataStream parser
Supports c#/c++ style line comments (i.e., that begin with '//')

TODO: block comments
2023-10-26 12:59:44 -04:00
John Colvin 633163518a fix: Fix divide token typo (should be fwd slash) 2023-10-26 12:59:44 -04:00
John Colvin 0a466052e0 cleanup: Remove old submodules (again)
* docker/linux
* docker/windows
2023-10-26 10:52:15 -04:00
John Colvin 7e139ddf0a cleanup: Remove old submodule docker\linux (again) 2023-10-26 10:48:47 -04:00
John Colvin dcac260efe fix (hack): Pass lines as array to cloud stream
Rather than a single multi-line string. This hack will have to do
until we implement multi-line strings in the parser.
2023-10-25 17:42:59 -04:00
Taha 81ea106ce3 Fixing the DSQA query box font color 2023-10-23 15:18:44 -04:00
Taha 88bf04e5f1 TimeSeries and TimeBucketStreams, Stream offloading etc 2023-10-23 14:18:31 -04:00
Taha 33030b1212 Market data streams work now 2023-10-16 00:01:29 -04:00
Taha 140c0c4152 MDStream uses MarketDataClient instead of MDConsumer now 2023-10-03 18:35:23 -04:00
Taha 7d63718602 MDStream uses MarketDataClient instead of MDConsumer now 2023-10-03 18:35:23 -04:00
John Colvin 9cb94fabdb fix: Add cross-type NumericComparer for BooleanExpressions
Bugs (fixed):
   * FilterStream throws exception when comparing numeric arguments
2023-10-02 22:02:35 -04:00
John Colvin e37a39f9fc chore: Add SharedStreams to default loaded assemblies cfg 2023-10-02 21:03:54 -04:00
John Colvin 7e307504cb chore: Remove redundant reference from csproj 2023-10-02 20:53:26 -04:00
John Colvin d01809e49c refactor: Move ProtoHelper to spark_api
So it can be used by other csprojs (was previously stuck in Spark)
2023-10-02 20:45:32 -04:00
John Colvin 292ed2dc0e refactor: Convert WebsocketServerParams to proto 2023-10-02 20:45:32 -04:00
John Colvin 623fce6e8f build: Enable nullable in proto generated cs 2023-10-02 20:45:32 -04:00
John Colvin 7d6d4c03b0 build: Update IronPython to v3.4.1 2023-10-02 20:45:32 -04:00
John Colvin 4962556a6c build: Update protobuf-net to v3.2.26
Also update System.Collections.Immutable to v7.0.0 to new deps
2023-10-02 20:45:32 -04:00
John Colvin 5ad9d9a0e6 build: Update System.Reactive to v6.0.0 2023-10-02 20:45:12 -04:00
John Colvin a091a95f50 build: Add .cmd wrapper script for build_data_stream.py 2023-10-02 19:38:38 -04:00
John Colvin 0bd06da929 build: Upgrade Google.Protobuf to 3.24.3
Now all csprojs are on the same Google.Protobuf version. Previously,
DataStreamSuite projs were on this (newer) version, while Spark projs
were on 3.21.12
2023-10-02 19:38:38 -04:00
Taha af9dd0c1fe PubSub Streams to get list of tags etc 2023-10-02 19:38:38 -04:00
John Colvin fd9eaa65ed build: Add script to build DataStreamSuite and cpp deps 2023-09-30 13:54:58 -04:00
John Colvin 1c744329e5 chore: Add SharedStreams.csproj bones 2023-09-30 13:08:03 -04:00
Taha f8c9148609 Adding tests 2023-09-30 12:59:02 -04:00
Taha fa4da63c24 Streams can be published across PubSub now 2023-09-30 12:59:02 -04:00
Taha 7bb7f1a5e2 PubSub is working now 2023-09-30 12:53:51 -04:00
Taha 3fa37397d9 AsyncTCPCOnnection2 done 2023-09-30 12:52:37 -04:00
Taha d75f97ba1f Both SImpleTCPClient and SimpleTCPServer use non async calls now 2023-09-30 12:52:37 -04:00
Taha 404698152e Merging, and adding test project 2023-09-30 12:52:37 -04:00
John Colvin 9311c27f47 feat: Resurrect DataStream primitives
They were originally commented out because the expression parsing utils
weren't ready (now they are).
2023-09-29 13:10:50 -04:00
John Colvin 1dfc028554 fix (temp): Comment out TestPublisher in Program.Main 2023-09-29 13:10:50 -04:00
John Colvin 931c681174 fix build (DataStreamSuite): Change path sep to '\' in Build.targets
Csharp protobuf generation was failing, albeit inconsistently, with a
mysterious error message about normalizing relative/absolute paths.
2023-09-29 13:10:50 -04:00
John Colvin f4568c3bb7 docker: Fix typo in README 2023-09-29 13:10:50 -04:00
John Colvin 126e3571df docker: Restructure/clean up Dockerfile
Break up large RUN steps (where many apt pkgs are installed at once) to
smaller incremental ones. If 'docker build' fails on a particular RUN
step, it can be re-run from the last successful step, so smaller steps
better preserve progress.
2023-09-29 13:10:49 -04:00
John Colvin 6759ce3a2d docker: Install latest cmake & node
The versions in the default apt repo are too old (need cmake >= 3.23,
node >= 16.0.0)
2023-09-29 13:10:49 -04:00
John Colvin 300a9b4eff docker: Use ubuntu:latest instead of transient 22.10
'latest' guarentees we're on an LTS release
2023-09-29 13:10:49 -04:00
John Colvin 52bb54252d gitignore: Add *.Generated.cs, *.lst
The Yacc code generator emits these files
2023-09-29 13:10:49 -04:00
John Colvin b416209ca7 refactor: Add DataStream cfg protos
Translated from Edge config
2023-09-29 13:10:49 -04:00
John Colvin bcd8aa3d80 refactor: Return fake data from myGetAllTagsStream
Until we port the actual impl from Edge
2023-09-29 13:10:49 -04:00
John Colvin ed0be9162b refactor: Move PrimitiveManager to DataStreamCore
So DSQA can reference it
2023-09-29 13:10:49 -04:00
John Colvin 54a6dca401 chore: Clean up leftover DataStreamGrammar dir 2023-09-29 13:10:49 -04:00
John Colvin 248e37577f feat: Add DataStreamExpressions
All lex/yacc scanners/parsers are now generated with a proper dotnet
nuget pkg, YaccLexTools.

* Implements BooleanExpressionFilter with the new Parser.
2023-09-29 13:10:49 -04:00
John Colvin ac1ede5986 refactor: Move a few low-level DataStream types to DataStreamCore
So the lex/yacc generators can reference them
2023-09-29 13:10:49 -04:00
John Colvin d1f5ae86fd chore: Get rid of BooleanExpressionsInterpreter csproj 2023-09-29 13:10:49 -04:00
John Colvin 094ea67e43 feat: Impl BooleanExpressions 2023-09-29 13:10:49 -04:00
John Colvin ca95ab7a24 feat: Add ArithmeticExpressions csproj 2023-09-29 12:54:14 -04:00
John Colvin e4f276be2a refactor: Consolidate redundant HighPerformanceTimer classes
Move the one in Spark csproj to spark_core, and reference spark_core
in all the DataStreamSuite csprojs that need it.
2023-09-21 23:48:57 -04:00
John Colvin a18521674e fix: Only init static DataStreamLoadFileConfig once 2023-09-21 23:48:57 -04:00
John Colvin d366ccc9c9 fix: Add simple null check 2023-09-21 23:48:57 -04:00
John Colvin 92e4b0a793 feat: Open gui when DSQA runs 2023-09-21 23:48:57 -04:00
John Colvin 56f7518186 chore: Uncomment DataStream Primitives code
It builds now that all the deps are in place
2023-09-21 23:48:57 -04:00
John Colvin 99ff8ac8dd chore: Comment out refs to PublishedTagsStream
For the DataStream port

TODO: Port PublishedTagsStream from edge
2023-09-21 23:48:57 -04:00
John Colvin 0754b48d44 chore: Comment out refs to SitesCfg
For the DataStream port

TODO: Translate SitesCfg to protobuf to integrate w/ modern config
2023-09-21 23:48:57 -04:00
John Colvin 081e96bca6 build: Add GuiUtilities csproj
For the DataStream port (DSQA depends on this proj)
2023-09-21 23:48:57 -04:00
John Colvin 8665bfc2d2 fix build (wip): Disambiguate HighPerformanceTimer ref 2023-09-21 23:48:57 -04:00
John Colvin 725471a238 fix build: Add using System.Runtime to fix TimeSpan ref
This Windows type must have moved namespaces since the Edge days
2023-09-21 23:48:57 -04:00
John Colvin d09c6ba543 refactor: Replace outdated DataGrid refs w/ DataGridView
Windows replaced the former with the latter in dotnet core 3.1
2023-09-21 23:48:57 -04:00
John Colvin 80c4542942 refactor: Replace old BlueEventLog w/ (Spark) Log 2023-09-21 23:48:57 -04:00
John Colvin 4446eb0412 chore: Get rid of redundant DataPacket.cs 2023-09-21 23:48:57 -04:00
John Colvin 71f642aef5 chore: Progress twds building DSQA 2023-09-21 23:48:57 -04:00
John Colvin 700bc45998 chore: Add DSQA (work-in-progress) 2023-09-21 23:48:57 -04:00
John Colvin 7cc7dd652f chore: Add missing DataStreamExpression.parser(.cs) 2023-09-21 23:48:57 -04:00
John Colvin 9fdffdc648 chore: Remove redundant init calls 2023-09-21 23:48:57 -04:00
John Colvin a3406279f9 fix build: Don't inherit build props/targets in WebApp build
The Directory.Build.props/targets files were recently moved up to the
'src' dir (from 'src/client') for the new DataStreamSuite sln. Evidently
this broke the WebApp build.
2023-09-18 05:03:11 +00:00
John Colvin 3ccda24e20 fix: Add missing venue cases in AdminWebApp
Coinbase and OKX
2023-09-18 05:02:12 +00:00
John Colvin 10085a4976 fix build: Don't copy 'sparkd.lic' in cmake install tgt
This was a license file for the emumba-deribit lib. We don't need it now
that the license check has been disabled.
2023-09-17 21:20:50 +00:00
John Colvin 78f41127fe chore: Remove artifact from old web build (added by accident) 2023-09-17 20:09:59 +00:00
John Colvin 8c35d63ab8 chore: Remove empty dirs (added by accident) 2023-09-06 18:24:04 +00:00
Taha 797816be7e Merging changes 2023-09-04 16:25:40 -04:00
John Colvin c4216d2272 build: Configure DataStreamSuite cpp to only build on Windows 2023-09-03 14:16:33 -04:00
John Colvin 431dad7551 fix: Init logging/config in DataStreamPublisher entry pt 2023-09-03 14:16:33 -04:00
John Colvin 7a5025d9d9 build: Add spark_core and spark_api to DataStreamSuite sln
Although outside of the DataStreamSuite dir, they should be included
because some csprojs in the sln depend on them.
2023-09-03 13:53:07 -04:00
John Colvin cc2959249e build: Add lexer/parser.cs files to src ctrl
Move all lexer/parser files into a single dir, DataStreamGrammar, for
organizational purposes and to avoid dependency conflicts when
generating code. Note that we'll only need to regen cs if we modify the
parser/lexer files, which seems unlikely.
2023-09-03 13:53:07 -04:00
John Colvin 86a1695286 Add update-synth-strategy fn to SyntheticSecurityClient 2023-09-01 23:24:35 -04:00
John Colvin 4c1cbbe8fe build: Remove unnecessary WorkingDirectory attrs
From the GenerateLexer/Parser targets
2023-09-01 12:48:18 -04:00
John Colvin 5081153db9 fix build: Don't explicitly include generated parser/lexer cs files
Since the files are generated in the source dir (not the build dir),
they are automatically included in the build. This removes a few
warnings abt duplicate symbols.
2023-09-01 12:46:21 -04:00
John Colvin 846ed05f76 chore: Remove redundant props in nested Directory.Build.props 2023-09-01 12:40:08 -04:00
John Colvin 3e9afea40a refactor: Rename DataStream ExpressionSyntax/Parser -> Boolean
The DataStream name was causing confusion. The lexer/parser are both
part of BooleanExpressions csproj, so the Boolean name is appropriate.
2023-09-01 12:38:27 -04:00
John Colvin cfa35fb5ce fix build: Add dummy classes for DataStreamSuite 2023-09-01 01:39:15 -04:00
John Colvin 9e221cabc3 build: Add BooleanExpressionsInterpreter csproj
For the DataStream port

* Add Lexer/Parser build targets
* Update externals w/ lexer/parser generator deps
2023-09-01 01:28:40 -04:00
John Colvin 23c83c0fb6 fix: Skip 1st arg (exe-path) when parsing cmd line
This only applies to Spark.exe, where the args are obtained via
Environment.GetCommandLineArgs, rather than directly from a 'main' fn.
The former prepends the [Spark] exe path to the argv array from 'main',
which the CommandLine parser does not expect.
2023-08-29 00:31:02 -04:00
John Colvin 5368f25ed8 feat: Generate rich version w/ GitVersion.MsBuild pkg
Run one of our dotnet exes w/ '--version' to print info to console
2023-08-29 00:21:54 -04:00
John Colvin bee76289ca chore: Format csproj & fsproj files 2023-08-28 12:25:47 -04:00
John Colvin 1fcfc2886c chore: Add displayName, description to cmake preset 2023-08-24 14:40:54 +00:00
John Colvin 83c35f55a3 build: Make DataStreamSuite build cross-platform 2023-08-24 14:40:15 +00:00
John Colvin 2f9f0108ef build: Rename cmake scripts by platform client/server spec
Now that we've added another cmake preset (data-stream-suite) some
scripts (GetLinuxClient*.cmake) are shared by multiple presets.
2023-08-24 14:32:44 +00:00
John Colvin 75a1165923 build: Remove dotnet build tgt from CMakeLists
Calling 'dotnet build' from CMakeLists doesn't feel natural; it's
simpler to just run it from the cmd line, or in a script.
2023-08-24 04:22:40 +00:00
John Colvin 2d394b77f4 chore: Remove redundant flags from CMakeLists
They're already defined in CMakePresets
2023-08-24 04:22:40 +00:00
John Colvin 59e5727f71 fix build (api serv linux): Use cmake shared lib suffix var
This Makes code platform independent. The build was broken because it
 was trying to copy a ".dll" file on Linux.
2023-08-24 04:22:40 +00:00
John Colvin f5d2e98d4f fix build (api serv linux): Fix cfg in CMakePresets
The api server linux config shouldn't inherit the spark (windows)
config; no reason to tether them together.
2023-08-24 04:11:47 +00:00
John Colvin 481f33c462 fix build (api serv linux): Fix link lib typo 'fmt' -> 'fmtd' 2023-08-24 04:04:39 +00:00
John Colvin 513bbeeaae fix build (api serv linux): Revert primary ctr syntax
This is a new feat in cs lang version 12, which is only in preview mode.
Reverting the syntax change bc I couldn't get it to build on Linux.
2023-08-24 04:04:39 +00:00
John Colvin 0cade21f1d build: Remove libspark from spark_client.sln
Libspark's inclusion in the sln file has become redundant now that
its bins are copied to the dotnet build dir as part of the CMake build
process. Unlike msbuild, dotnet doesn't integrate nicely with c++. It
seems better to keep c++ projects out of the sln.
2023-08-23 02:41:35 -04:00
John Colvin 7b284b40f7 fix build: Remove problematic generator expression
Just copy libspark.dll over to the dotnet build dir for now.
TODO: additionally copy pdb file for debug builds
2023-08-23 02:39:43 -04:00
John Colvin e1b6971667 build: Greatly simplify build_spark.py
Make it a thin wrapper around dotnet/cmake clis
2023-08-23 00:46:21 -04:00
John Colvin ecbae62d07 feat: Add bones for DataStreamSuite
TODO (Taha): Migrate source files from edge
2023-08-22 15:04:08 -04:00
John Colvin 8182b4b289 dev: Simplify sparkd build instructions
Restructure in style similar to Spark and Api Server build instructions
2023-08-22 14:38:39 -04:00
John Colvin a644174601 dev: Add instructions to build spark in README 2023-08-22 14:38:39 -04:00
John Colvin cf34c13f03 build: Replace build_api_server.py w/ cmake/dotnet clis
Add instructions to build the Api Server in README
2023-08-22 14:38:39 -04:00
John Colvin 126e84e4e8 build: Remove 'jobs' arg from CMake build presets
Modern CMake uses an appropriate number of jobs by default (I believe
the number of cores on the cpu)
2023-08-22 14:38:39 -04:00
John Colvin 5ffc83a237 build: Init SPARK_ENABLE_API_SERVER reguardless of platform 2023-08-22 14:38:39 -04:00
John Colvin 3082f5c8d9 build: Only build Admin Web App on Linux 2023-08-22 14:38:39 -04:00
John Colvin f1cde451d8 build: Copy libspark to dotnet bin dirs in CMakeLists 2023-08-22 14:38:39 -04:00
John Colvin 6f0e0e5172 build: Add Spark.Api.Server to CMakePresets 2023-08-22 01:29:45 -04:00
John Colvin b2d5ab5e03 chore: Add SyntheticSecurityClient to WebsocketDataSync
TODO (Arham): Integrate SyntheticSecurityClient w/ the websocket api
2023-08-21 15:35:03 -04:00
John Colvin c3e098e27d feat: Add SyntheticSecurityClient (for websocket api) 2023-08-21 15:05:37 -04:00
John Colvin a930d2165a refactor: Move SyntheticTuple to spark_api proj
Also clean struct up a bit and rename 'SyntheticSecurityTuple'
2023-08-21 15:05:37 -04:00
John Colvin 05cdfce9ce fix: Add null checks to account for bad analytics exp params
The Spark client was throwing null ref exs after merging prod to
developement, likely because the param protos stored in db were invalid.
2023-08-11 11:42:29 -04:00
John Colvin 61c9d6b2d6 fix build: Sand rough edges after merge 2023-08-05 00:09:16 -04:00
John Colvin 7545d3fd5c Merge remote-tracking branch 'origin/spark_crypto.prod' into development 2023-08-04 13:40:04 -04:00
John Colvin 04e0297e86 refactor: Simplify 'render_piq' by using common code
No need to re-invent the 'render_cells' wheel
2023-07-31 14:50:44 -04:00
John Colvin 562706b968 fix: Don't assume ladder row-data is sorted by price
Bugs (fixed):
   * Ladder assert-crashes when rendering volume-at-price

   Cause: The render routine expected items to be sorted by price, and
   asserted as much (indirectly). In hindsight, this expectation placed
   an unnecessary burden on the caller.
2023-07-31 14:20:08 -04:00
John Colvin 4195207a71 fix: Replace non-existent StaticResource w/ BTSColor
Bugs (fixed):
   * The Activity Log window crashes immediately opened.

   Cause: WPF throws an Exception because it fails to resolve the
   StaticResources 'TextBox.BackgroundBrush', and
   'TextBox.ForegroundBrush', as they are defined in Colors.xaml, which
   is not imported by LogViewer.xaml.

   I replaced the StaticResources w/ BTSColor extension (rather than
   include Colors.xaml), because it is less error prone, and allows us
   to keep colors organized in 1 place: BTSColors.cs.

   I'm not sure how long the bug was around. It likely slipped through
   the cracks because the ActivityLog window isn't used often.
2023-07-28 14:16:46 -04:00
John Colvin 71eb89b6a1 fix: Check 'HasQuantityDisplay' before accessing prop
Bugs (fixed):
   * The PNL Summary window throws a null ref ex when the first row is
     populated.

     Cause: The SecurityMetadataImmutable's internal QuantityDisplay is
     null. In other words, the mutable SecurityMetadata obj around which
     it wraps has a null QuantityDisplay, which is not allowed since
     Immutable protos (such as 'QuantityDisplayImmutable') must be
     constructed w/ a non-null instance of their mutable counterpart.

* Implement same fix (pre-emptively) in ManualFillRow, and
  OrderCompletedEventPredicate.
2023-07-28 14:01:57 -04:00
John Colvin 94e4a0b725 fix: Change bus data type to nullable immutable
Bugs (fixed):
   * The InterpTheosServerPublisher throws a null ref during startup when it
     accesses 'UsageList' from the VolSurfaceUsageTag data.

     Cause: Immutable protos instantiated w/ the default ctr have an
     invalid state, because the mutable (reference type) instance around
     which they wrap is null. Since an immutable type's props are trivial
     wrappers for this mutable instance, they throw a null ref if the
     mutable instance is null.
2023-07-28 12:02:50 -04:00
John Colvin 40d1fe20e3 diag: Add detailed error logs to notification serv order handler
Maintain a circular buffer of the last N updates. Then if/when an
exception occurs, log the update sequence that led up to it.
2023-07-26 15:30:55 -04:00
John Colvin 2ed23159ca style: Clean up jenkins build script
* Get rid of double backslashes in quoted paths to improve readability
* Call 'activate.bat' instead of 'activate' (official python docs say to
  use the former)
* Add docs
2023-07-26 15:26:30 -04:00
John Colvin faa8438adf build: Make jenkins build script independent of working dir
This alleviates an unneccessary burden on callers (previously, it had to
be run from the repo root dir).
2023-07-26 11:59:03 -04:00
John Colvin 0b35c2ccde fix: Add lock, try/catch in notification serv order handler
Brandon has been experiencing a crash on startup. The stack trace shows
this handler is throwing a duplicate-key ex on 'dictionary.Add' (unclear
why).
2023-07-26 00:55:50 -04:00
John Colvin 98eea0ef09 chore: Remove unused iface member 2023-07-26 00:13:22 -04:00
John Colvin 4bf237aebe fix (pre-emptive): Guard against null/empty prices in LadderRender 2023-07-25 14:27:13 -04:00
John Colvin da927adef4 fix: Check price is within ladder's range before rendering
Bugs (fixed):
  The render routine was indirectly asserting that each item's price was
  >= the ladder's min price. That seems like an inappropriate burden to
  put on the caller. Now we filter these items out in the routine.
2023-07-25 14:24:16 -04:00
John Colvin cf587e26d5 fix: Remove bad assert abt tickdiff in LadderRender
* The test condition was wrong in the first place
* Instead of assert/crashing, log a warning
2023-07-25 14:22:15 -04:00
John Colvin 9e4354fb55 fix buid: Don't goto ERROR just bc venv already exists
This seems like a typo
2023-07-18 23:40:18 -04:00
John Colvin e6bb4c73a8 fix build (jenkins): Upgrade pip via 'python -m pip'
For some reason 'pip install --upgrade pip' works on my laptop, but fails on
the Jenkins box.
2023-07-18 22:53:32 -04:00
John Colvin e43a2a4818 build: Add build script for new Jenkins (on aws) 2023-07-18 22:25:56 -04:00
John Colvin cde0f44b7d build: Default to Release cfg for 'publish' target 2023-07-18 22:25:06 -04:00
Taha b07a1e2c74 Fixing the issues, where the theos are only published out by the vol surface owner 2023-07-18 20:40:59 -04:00
Taha Afzal 8376fce5fe Merge branch 'spark_crypto.prod.vol_order' into spark_crypto.prod 2023-07-14 17:01:29 +00:00
Taha Afzal d9e5c846c2 Adding more logs to VolAlgo 2023-07-14 16:57:55 +00:00
Taha Afzal 65736c13ef VolAlgo completed 2023-07-14 03:54:14 +00:00
Taha Afzal 071c28e925 VolAlgo reflects its state correctly now 2023-07-10 03:20:05 +00:00
Taha Afzal 8355e3e1be VolAlgo code complete - need to test 2023-07-09 04:21:42 +00:00
John Colvin f9a6e0963c chore: Remove Spark.Admin.WebApp
These files were added by accident (leftover from switching branches
from development -> spark_crypto.prod)
2023-07-06 14:52:57 +00:00
John Colvin b2879837c6 chore: Remove devcontainer.json 2023-07-06 12:26:48 +00:00
John Colvin 0d03ddb009 Merge remote-tracking branch 'origin/spark_crypto.prod' into spark_crypto.tick_hotfix 2023-07-06 12:26:28 +00:00
John Colvin a6dfa4ae80 fix: Don't show decimal BTC Futs/Spd qtys
They tick in multiples of 10, so decimal precision isn't needed
2023-07-05 18:20:53 -04:00
John Colvin e66ec82ba8 hotfix: Setup default cfg for new Deribit price ticks 2023-07-05 18:19:49 -04:00
John Colvin 9ce5e971c6 fix: Fix typos in BTSColor paths in xaml 2023-07-05 18:11:40 -04:00
John Colvin 3e7cc49ebb hotfix: Format text w/ RegionalTickFactors in PriceEntryControl 2023-07-05 18:11:40 -04:00
John Colvin d07e68b6e2 hotfix: Use 1st leg's min price tick rule for Deribit combos 2023-07-05 18:11:40 -04:00
John Colvin 619ece2313 refactor: Consolidate impl for 'round_to_tick' overloads
Also add a 'decimal' overload for RegionalTickFactors. This is more work
for Deribit tick hotfix.
2023-07-05 18:11:40 -04:00
John Colvin 1dda9566f3 hotfix: Use '.' separator if tick unit is multiple of base 2023-07-05 18:11:06 -04:00
Taha 3704d1ed16 InterptheosServerPublisher is now opulated the newly added vol field in the PrecomputedTheoPoint proto 2023-07-05 14:41:31 -04:00
John Colvin a524ca02a5 refactor: Change tick arithmetic to use int64
The tick count is "price / tick_size" and tick_size is usually < 1, so
the extra bits may be needed to avoid arithmetic overflow
2023-07-05 12:02:28 -04:00
John Colvin 3c97f2552b fix build: Don't use libfmt or ranges in win cpp
I can't deal with this anymore. My build is suddenly broken on Windows
(for spark_crypto.prod branch). I assume they updated the compiler
in a way that isn't backwards compatible. Thanks Windows.
2023-07-05 11:58:14 -04:00
John Colvin 15b1d55ef1 fix build: Disable Binance md code on win 2023-07-05 11:58:14 -04:00
John Colvin 4e42c9f01b test: Refactor tick tests for RegionalTickFactors
Gives us some peace of mind about the dynamic ticks hotfix for Deribit
2023-07-05 11:58:14 -04:00
John Colvin 76775f821a hotfix: Support dynamic ticks in order ticket 2023-07-05 11:58:14 -04:00
John Colvin e7088f6b1c hotfix: Support dynamic ticks in ladder
Deribit now provides dynamic price ticks (a list of ticks per range).

https://www.deribit.com/kb/4-july-2023
https://www.deribit.com/kb/deribit-on-screen-options-tick-size-reduction
2023-07-05 11:58:14 -04:00
Taha Afzal f2c3ff4be6 Adding vol to PrecomputedTheoPoint 2023-07-05 15:16:45 +00:00
Taha 1fb42ade59 Adding perf logs on the front end 2023-07-05 10:50:13 -04:00
Taha 129650e9d4 Only the skew owner publishes theos to the server 2023-07-05 10:50:13 -04:00
John Colvin 170a44ac04 fix: Check sign to tick in correct direction
Don't assume it's positive and blindly tickup
2023-07-03 22:34:46 -05:00
Taha Afzal 7e04f02327 Merge branch 'spark_crypto.prod.autofit' into spark_crypto.prod 2023-07-04 03:21:28 +00:00
Taha Afzal abda2dbf97 VolSurfaces and achived theo history size is not mantained at runtime 2023-07-04 03:13:46 +00:00
Taha Afzal ad1a45cf49 ArchivedTheos are truncated on a server start 2023-07-04 03:13:46 +00:00
John Colvin e9abdd0ff2 chore: Remove unused fn 'gen_prices' 2023-07-03 12:30:03 -05:00
John Colvin 9254002318 fix: Check HasPrice/QuantityDisplay before accessing prop 2023-07-03 12:24:20 -05:00
John Colvin 596780b7f4 chore: Remove unused 'unit_quantity' prop 2023-07-03 12:22:37 -05:00
John Colvin 7ba061ac20 hotfix: Add cfg to account for new deribit tick format 2023-07-02 16:58:53 -05:00
John Colvin f8e6b73714 fix: Add missing venues to switch statement 2023-06-26 17:34:52 +00:00
John Colvin c01593d119 fix (ui colors): Cherry-pick synth editor dark theme from dev 2023-06-26 12:26:38 -04:00
John Colvin dd53c149c0 fix: Fix typo in default cfg 'SPOT' -> 'SECURITY_TYPE_SPOT' 2023-06-26 15:39:47 +00:00
John Colvin 04b4efe1e1 Update externals
Addresses more trivial build errors after upgrading to C++ 20
2023-06-26 15:24:46 +00:00
John Colvin 81bafbe68d fix build: Address trivial werrors after upgrading to C++ 20
All werrors were about implicit 'this' captures in lambdas
2023-06-26 15:24:46 +00:00
John Colvin 7ee95c55ab build: Upgrade CLI11 to v2.3.2 2023-06-23 15:35:06 +00:00
John Colvin 87d67feff4 build: Upgrade (Linux) c++ to stdlib 20 2023-06-23 15:33:40 +00:00
John Colvin d21ceddbb6 build: Upgrade (Windows) c++ to stdlib 20 2023-06-23 15:33:40 +00:00
John Colvin 4434df3d09 fix: Account for duplicate sec keys in 'normalize_drivers' 2023-06-23 15:33:40 +00:00
John Colvin 35916881c8 fix: Invalidate 'My Windows' module content on open (hover)
Bugs (fixed):
  * My Windows module popup is always empty

    Cause: The list of favorite windows is only evaluated on startup
    (before the list has been properly initialized). Furthermore, even
    if the list was initialized, it must be re-evaluated to account for
    newly added/removed windows.
2023-06-23 15:33:40 +00:00
John Colvin 5230d6bab5 build: Clean up build_spark.py 2023-06-23 15:33:40 +00:00
John Colvin 68c3418c04 build (refactor): Upgrade libfmt from ~8.0.1 to 10.0.0 2023-06-23 15:33:40 +00:00
John Colvin 7bce9f8a7f fix: Fix typo 'groups' -> 'currencies' 2023-06-21 11:07:47 -04:00
John Colvin a5b988738f chore: Add 'requests' module to py venv
This module is used to download files. It is required for the new
'install_fmt.py' script in externals.
2023-06-21 11:07:47 -04:00
John Colvin 53a4b61884 chore: Remove unused cmake var 2023-06-21 11:07:47 -04:00
John Colvin 7be111dc36 refactor: Use upper case http method name in ccapi params 2023-06-21 11:07:47 -04:00
John Colvin 0c5bd66cca refactor: Improve logging sec parsing logs (binance futs) 2023-06-21 11:07:47 -04:00
John Colvin b699c5a310 refactor: Simplify json impl w/ macros 2023-06-21 11:07:46 -04:00
John Colvin af8850f4c0 fix: Gracefully handle REQUEST_STATUS msgs (from ccapi) 2023-06-21 11:07:46 -04:00
John Colvin 10e359d6b5 refactor: Remove unnecessary template param 2023-06-21 11:07:46 -04:00
John Colvin b360881b8b chore: Impl 'descriptor' switch case for all exchs 2023-06-21 11:07:46 -04:00
John Colvin b250dc31d3 chore: Subscribe to BTC/USDC currencies in deribit md cfg 2023-06-21 11:07:46 -04:00
John Colvin 995df189ae chore: Add OKX to symbols.conf 2023-06-21 11:07:46 -04:00
John Colvin 93739e7010 improvement: Show Venue/SecType names in logs (not numeric val) 2023-06-21 11:07:46 -04:00
John Colvin bc42498d61 fix build: Disable ccapi/ftx
It appears that ccapi's ftx execution management code is broken (not that
it really matters, bc it's ftx). We prob should have already disabled this
disgraced exchange anyways.
2023-06-21 11:07:46 -04:00
John Colvin 2b95507c49 build: Better organize CMakeLists per-platform/project 2023-06-21 11:07:46 -04:00
John Colvin ca8c3a18d7 build: Generate only necessary cs files for protos
Prior to this commit, proto files were added to csprojs via the Proto3
target. This target generated 4 files per proto:
  .cs, .immutable.cs, .client.pb.cs, and server.pb.cs
For the (many) proto files that don't define services (just normal messages),
the .client/server.pb.cs files were unnecessary.

This commit splits proto-generation into 2 targets:
  * ProtoService - same as the old 'Proto3' target (generates 4 files per
    proto as described above).
  * Proto - a new target that generates only .cs, and .immutable.cs files
2023-06-21 11:07:46 -04:00
John Colvin e49066ffa7 fix build: Fix cacheVariables in CMakePresets 2023-06-21 11:07:45 -04:00
John Colvin e3cd910acd build: Use CMakePresets in build_spark.py 2023-06-21 11:07:45 -04:00
John Colvin cb47177b8e build: Remove unused 'link_build_dir' arg 2023-06-21 11:07:45 -04:00
John Colvin fba00c9d51 fix build: Remove unused fn 'notnulld'
This fn broke the Spark release build due to an '#if DEBUG' ppd
2023-06-21 11:07:45 -04:00
John Colvin af0b7d9146 fix build: Set cmake policy CMP0076 before target_sources
* Removes warning when configuring build on Windows
* Moves 'vs_filters.cmake' to 'cmake' dir (w/ other cmake scripts)
2023-06-21 11:07:45 -04:00
John Colvin e0a8c476f6 build: Increase sparkd parallel jobs to 8 2023-06-21 11:07:45 -04:00
John Colvin 5acb8100de devcontainer: Define env var 'XDG_CONFIG_HOME' 2023-06-21 11:07:45 -04:00
John Colvin 1c133e87e7 Update externals to get ccapi v5.45.2 2023-06-21 11:07:45 -04:00
John Colvin 8a8419576d build: Add 'Debug (ccapi diag)' configuration preset
Simply a clang debug build w/ ccapi log level set to 'Trace' (instead of
'Debug')
2023-06-21 11:07:45 -04:00
John Colvin 4a28723adb chore: Organize ccapi compile defs in CMakeLists 2023-06-21 11:07:45 -04:00
John Colvin e482408f29 fix: Add 'notional' filter class to model binance md json 2023-06-21 11:07:45 -04:00
John Colvin 4dcc98ab1f improvement: Check for empty str when parsing numbers (json) 2023-06-21 11:07:45 -04:00
John Colvin ace0fc35a2 refactor: Don't log error in Price::from_json
These logs get noisy fast
2023-06-21 11:07:45 -04:00
John Colvin c7d1eb00dc refactor: Add TimeSpan, TimeStamp arithmetic 2023-06-21 11:07:45 -04:00
John Colvin 949c8e0a32 build: Enable boost-beast for ccapi 2023-06-21 11:07:45 -04:00
John Colvin c2419b491a fix: Ensure ccapi log filenames aren't deallocated
Logs are committed asynchronously, and since ccapi log filenames are
passed by value, we must store them somewhere
2023-06-21 11:07:45 -04:00
John Colvin 786322f397 feat: Add Okx md (ccapi) 2023-06-21 11:07:45 -04:00
Taha 09e2a1764f Only the user with control over the volsurface can save it 2023-06-15 11:44:34 -04:00
John Colvin a780668bce fix: Ensure tick up/down values are within min/max bounds 2023-06-15 11:43:58 -04:00
John Colvin 5b79aeaa14 ui: Enforce min auto-fit period (30 secs) 2023-06-15 11:37:18 -04:00
John Colvin 049c006b5f ui: Disable driver/atm pts moved auto-fit ui 2023-06-15 11:37:18 -04:00
John Colvin 6fdc344472 feat: Add 'acquire ownership' button to vs context menu 2023-06-15 11:37:18 -04:00
John Colvin cb09b93553 chore: Rename ns bts.reactive -> Spark.Core.Reactive 2023-06-15 11:37:18 -04:00
John Colvin 21447d32e5 fix (vs ui): Only log 'is_dirty' changes for editable cols 2023-06-15 11:37:18 -04:00
Taha 28b03e1cd2 Only the user with control over the volsurface can save it 2023-06-14 22:23:45 -04:00
Taha a7acb89c15 Fixing merge conflict 2023-06-14 15:57:42 -04:00
John Colvin 35289710ba fix: Ensure tick up/down values are within min/max bounds 2023-06-14 14:20:47 -04:00
Taha 4677acfb39 Merge branch 'spark_crypto.prod.autofit' of bitbucket.org:bluetradesys/spark into spark_crypto.prod.autofit 2023-06-14 13:55:03 -04:00
Taha ac05d0d69e AutoFitter reads the settings from the settings now 2023-06-14 13:54:53 -04:00
John Colvin 25a9b6b433 fix: Ensure tick up/down values are within min/max bounds 2023-06-14 13:49:49 -04:00
John Colvin b78713ad0d ui: Enforce min auto-fit period (30 secs) 2023-06-14 12:59:40 -04:00
John Colvin 1f3d0e879c ui: Disable driver/atm pts moved auto-fit ui 2023-06-14 12:59:39 -04:00
John Colvin baad4dc68e feat: Add 'acquire ownership' button to vs context menu 2023-06-14 12:22:57 -04:00
John Colvin ef7c0c7a30 chore: Rename ns bts.reactive -> Spark.Core.Reactive 2023-06-14 11:39:06 -04:00
Taha 3b3c4a2a35 Merge branch 'spark_crypto.prod.autofit' of bitbucket.org:bluetradesys/spark into spark_crypto.prod.autofit 2023-06-14 10:21:55 -04:00
John Colvin ef9fc66a31 fix (vs ui): Only log 'is_dirty' changes for editable cols 2023-06-14 09:44:42 -04:00
John Colvin 212d9c853b fix: Init auto fit vals in vs settings editor 2023-06-14 09:09:34 -04:00
Taha 7815b18b6b Merge branch 'spark_crypto.prod.autofit' of bitbucket.org:bluetradesys/spark into spark_crypto.prod.autofit 2023-06-13 22:34:12 -04:00
Taha 05126074d4 Enabling AutoFit 2023-06-13 22:34:07 -04:00
John Colvin 3611d2c1f3 fix: Enable tick up/down buttons for nullable uint32 ctrl 2023-06-13 15:43:33 -04:00
John Colvin b5ad4b8104 feat: Add auto-fit ui for vs settings 2023-06-13 15:43:33 -04:00
Taha 43d7c0a2b5 Comments 2023-06-12 13:43:42 -04:00
Taha 12e361cec7 AutoFit based on a timer works now 2023-06-11 21:59:46 -04:00
John Colvin a4b0f026f4 style: Don't use implicit ptr -> bool conversion
Check 'ptr == nullptr' instead.
2023-06-07 13:16:22 -04:00
John Colvin 59f65c32d8 refactor: Change if/else blocks to switch expression 2023-06-07 13:16:22 -04:00
John Colvin ccec77f7d1 refactor: Fix typo 'uitilities' -> 'utilities' 2023-06-07 13:16:22 -04:00
John Colvin 1deeb85d22 improvement: Filter Deribit instrument reqs by regex cfg 2023-06-07 13:16:21 -04:00
John Colvin 648a32147a refactor: Eliminate SecurityID dependency on JsonReader
It's a fundamental type, included by many source files. The fewer
dependencies the better.
2023-06-07 13:16:21 -04:00
John Colvin 806ddfc156 Update externals so ccapi Deribit sends heartbeats 2023-06-07 13:16:21 -04:00
John Colvin 05b5f22204 fix: Capture cfg by value in thread lambda
Bugs (fixed):
  * A race crash occurs during startup, seems related to starting emumba
2023-06-07 13:16:21 -04:00
John Colvin 4f09d2cff1 refactor: Move Emumba deribit cfg to own proto 2023-06-07 13:16:21 -04:00
John Colvin e1234fe583 fix: Fix typo in log helper script 'show_last_run.sh'
So it actually applies the 'num_lines' override arg
2023-06-07 13:16:21 -04:00
John Colvin aa64dacd65 fix: Abort '_add_spread' if any leg secs missing
Bugs (fixed):
  * Sparkd crashes occassionally during startup. The last logs suggest
    it is related to adding Deribit spreads to shared mem.
2023-06-07 13:16:21 -04:00
John Colvin 10b062ebce fix build: Fix typo in CMakePresets cfg profiles 2023-06-07 13:16:21 -04:00
John Colvin e057057173 chore: Add replay/recording cfg to md_dev/prod profiles 2023-06-07 13:16:21 -04:00
John Colvin 82cec2672a fix build: Fix typo in Venue enums in default confs 2023-06-07 13:16:21 -04:00
John Colvin 50184cd6ff docker: Add hostRequirements, shm to devcontainer
The shm-size should be more than sufficient for general market data (the
default size of 64MB wasn't cutting it)
2023-06-07 13:16:21 -04:00
John Colvin e64dc49a64 fix build: Respect cfg path order in gen'd defaults
The path order represents the value-inheritance hierarchy. This way,
values from files earlier in the path take precedence over those from
later files.
2023-06-07 13:16:21 -04:00
John Colvin 010bd53723 fix: Include 'id' member in equals impl 2023-06-07 13:16:20 -04:00
John Colvin 50ae7ca7f9 feat: Add Deribit md (ccapi) 2023-06-07 13:16:20 -04:00
John Colvin 995bbef878 refactor: Add currencies to SecurityCriteria proto 2023-06-07 13:16:20 -04:00
John Colvin 8c325e30be improvement: Validate SecurityCriteriaClause proto
To ensure 'SecurityCriteriaClause::include' calls are reasonably cheap
2023-06-07 13:16:20 -04:00
John Colvin 6bb9b24210 feat: Add 'name_regexps' to SecurityCriteriaClause
This will allow us to filter out securities (instruments) at Deribit
(and likely other venues) BEFORE requesting their metadata. This
will be particularly useful when reacting to instrument state changes
(i.e., when a new instrument is added), which occur one instrument at
a time, and only provide the instrument's name.
2023-06-07 13:16:20 -04:00
John Colvin df1c558c33 refactor: Shorten SecurityCriteriaClause var names
* Drop 'security_' prefix (considering the class name, it is redundant)
* Change 'descs' -> 'names'
2023-06-07 13:16:20 -04:00
John Colvin 357d245a4c fix: Use JsonReader::read rather than nlohmann::get
The former is a more robust solution (logs exceptions, primitive string
conversion, etc.)
2023-06-07 13:16:20 -04:00
John Colvin d43863ab59 refactor: Change BoolName cstrings to strings 2023-06-07 13:16:20 -04:00
John Colvin 89188acc7d refactor: Define 'fmt' fns for a few md types 2023-06-07 13:16:20 -04:00
John Colvin 86a9fc0c83 chore: Add 'fmt' impl for domain::Security
This allows us to pass domain::Security to the LOG macro.
2023-06-07 13:16:20 -04:00
John Colvin 15579acd2a fix build (web): Add missing Venue switch cases 2023-06-07 13:16:19 -04:00
John Colvin 411009c996 Update externals to get ccapi v5.45.1 2023-06-07 13:16:19 -04:00
John Colvin 17a4cce68b refactor: Change 'Currency' from enum to string
It is an unnecessary burden to ensure the enum represents the union set
of currencies available at all suppported venues. The benefits of using
an enum are slim to none (it is practically unreferenced in code), so
the burden isn't justified.
2023-06-07 13:16:19 -04:00
John Colvin adb36795a8 chore: Rename a few .conf files to snake case 2023-06-07 13:16:19 -04:00
John Colvin 691545b71a refactor: Remove redundant sec type field
The Security class already has a 'type' fn that treats the type as a
function of the security variant. This is better than the 'type' field
in SecurityCommon, because it's naturally in sync with the variant.
2023-06-07 13:16:19 -04:00
John Colvin 31c7fa4f2c fix (pre-emptive): Return 'UNSPECIFIED' if sec-type variant empty 2023-06-07 13:16:19 -04:00
John Colvin 86009c3cdb refactor: Reduce Binance US dependency on Binance
There is some common code, but it seems like a good idea to keep
exchange-specific md impls modular/independent
2023-06-07 13:16:19 -04:00
Taha Afzal c9392dd306 Adding multiple accounts to CCAPIExecutionGateway 2023-06-06 18:30:38 +00:00
Taha Afzal ac8a6094fb Cleaning up corrid generation 2023-06-06 18:30:38 +00:00
Taha Afzal 6dbe497013 Bug fixes 2023-06-06 18:30:38 +00:00
Taha Afzal 274aa9b17d Error on order entry handled 2023-06-06 18:30:38 +00:00
Taha Afzal d47e61ca57 CCAPISingleOrderManager state machine fixed 2023-06-06 18:30:38 +00:00
Taha Afzal 3078b918d2 CLeaning up 2023-06-06 18:30:38 +00:00
Taha Afzal 95e9a6e8aa Sending RFQs now (combo creation not done) 2023-06-06 18:30:38 +00:00
Taha Afzal 1a3cf1dbea OpenOrders are reported bck now 2023-06-06 18:30:38 +00:00
Taha Afzal 0d705eed1f PositionRequest cleaning up and consolidating multiple messages (corresponding to different currencies) into one 2023-06-06 18:30:38 +00:00
Taha Afzal 1d28526792 Querying Positions and passing them to the client now 2023-06-06 18:30:38 +00:00
Taha Afzal 3ecf3dd048 OpenPositions and WorkingOrders queried from Deribit now 2023-06-06 18:30:38 +00:00
Taha Afzal 64ff79a38d Passing config to connection config to CCAPIDeribitOrderMux 2023-06-06 18:30:38 +00:00
Taha Afzal aba478f3dc Adding meaningful correlation ids 2023-06-06 18:30:38 +00:00
Taha Afzal 1025881ec8 Stable CCAPI based Deribit execution using per instrument subscription - improvements needed 2023-06-06 18:30:38 +00:00
Taha Afzal 6d95a645e3 Deribit's option position request hooked up 2023-06-06 18:30:38 +00:00
Taha Afzal 4769f66eea Adding some logs to SharedMemory and SharedList 2023-06-06 18:30:38 +00:00
John Colvin 82c126362d fix build: Fix a few path errors in publish target 2023-05-31 22:13:52 -04:00
Taha fd2ba70031 Culling the logs 2023-05-29 11:35:49 -04:00
Taha ab410c339f Order Tickets from the sheets are defaulted correctly now 2023-05-29 10:32:29 -04:00
Taha Afzal 9093c72646 Merge branch 'temp_arham' into spark_crypto.websocket-api.ccapi 2023-05-09 03:56:35 +00:00
arhamGIT 3a220b8320 Merge branch 'temp_arham' of bitbucket.org:bluetradesys/spark into temp_arham 2023-05-08 23:40:44 -04:00
arhamGIT ac20f7c9dd front end changes to make coinbase work 2023-05-08 23:40:28 -04:00
Taha Afzal 578146905e coinbase working 2023-05-09 03:31:20 +00:00
arhamGIT 7f07f5a69b Merge branch 'temp_arham' of bitbucket.org:bluetradesys/spark into temp_arham 2023-04-26 12:33:50 -04:00
arhamGIT 3dd7d0999e merge 2023-04-26 12:33:32 -04:00
Taha Afzal 5076770d15 coinbase sec names showing in shrd mem 2023-04-26 16:27:34 +00:00
Taha Afzal 791446c514 changed to merge proto updates 2023-04-25 15:38:37 +00:00
Taha Afzal 66370bd541 Merge branch 'spark_crypto.websocket-api.ccapi' of bitbucket.org:bluetradesys/spark into spark_crypto.websocket-api.ccapi 2023-04-24 23:24:25 +00:00
Taha Afzal cce8973e87 temp changes to make binance work 2023-04-24 23:19:15 +00:00
John Colvin 37dcd32c6b fix (cli): Fix config --query output indentation
There are 2 spaces per indent level
2023-04-20 00:46:23 -04:00
John Colvin d772958272 diag: Show file/line in Config logs 2023-04-20 00:46:23 -04:00
John Colvin c85e221e9f build: Automatically run build_spark.py in venv 2023-04-20 00:46:23 -04:00
John Colvin 28e95df5c6 refactor: Rename 'STOCK' -> 'SPOT' 2023-04-20 00:46:23 -04:00
John Colvin 8d84355d57 chore: Add Binance BTC qty formatting to default conf 2023-04-20 00:46:23 -04:00
John Colvin 5c25f9a3e5 refactor: Rename Venue/SecType enums according to conventions
https://protobuf.dev/programming-guides/style/#enums
2023-04-20 00:46:23 -04:00
John Colvin c0980809c5 chore: Format .conf files
* Indent with 2 spaces
2023-04-20 00:46:23 -04:00
John Colvin e946c6427e chore: Rename Ports.conf -> ports.conf
This is consistent with proto file naming conventions recommended by
Google (snake_case)
2023-04-20 00:46:23 -04:00
John Colvin 58ccbe2b19 chore: Consolidate default md conf into one file 2023-04-20 00:46:22 -04:00
John Colvin 7519c0b63a build: Update dotnet fable to 4.0.6 2023-04-20 00:46:22 -04:00
John Colvin 947c071cee build: Remove unused cmake def 2023-04-20 00:46:22 -04:00
John Colvin 54018fcce7 refactor: Clean up 'PlatformLoader'
* Rename 'SymbolLoader'
* Consolidate complicated filter logic into one 'load' overload

refactor: Get rid of unnecessary PlatformConfig
2023-04-20 00:46:22 -04:00
John Colvin 4b85eb33f8 chore: Remove redundant Symbols.conf file 2023-04-20 00:40:56 -04:00
John Colvin 592cf54e94 chore: Remove irrelevant test for config fallback url
The 'fallback url' was removed from config a few months ago (this test should
have been removed with it)
2023-04-20 00:40:56 -04:00
John Colvin b8368bf9fa chore: Remove unused args/code
* Removes several 'if' blocks whose predicates were effectively compile-time
  constants (i.e., unnecessary).
2023-04-20 00:40:50 -04:00
John Colvin 7d19ea84ab chore: Remove redundant fn 'get_thread_name' 2023-04-18 23:57:24 -04:00
John Colvin 14651341c4 fix: Fix 'Replace' fn so it ONLY replaces val if key exists
Bugs (fixed):
  * Spark (client) crashes anytime an order is canceled. Other changes
    to existing orders can cause the crash as well, but cancelling does
    so every time.

  * Cause: The IObservable<Update<T, TKey>> 'Naggle' ext fn was broken.
    Specifically, the KeyedValueCollection.Replace fn that 'Naggle' uses
    was broken. Instead of only replacing values with existing keys, it
    would add new keys as well.
2023-04-18 10:36:46 -04:00
John Colvin 681fbc6915 fix: Add 'spot' to sec type filter for preset algos 2023-04-18 00:12:46 -04:00
John Colvin 37d7f51d19 fix: Fix color-name typo in xaml 2023-04-17 23:53:51 -04:00
John Colvin 48eb0a2c9b fix: Use qty display settings in order ticket bbo header 2023-04-16 12:53:04 -04:00
John Colvin 6d2cd54deb fix: Init config w/ (optional) server arg in cli 2023-04-16 00:29:31 -04:00
John Colvin 2ec956b430 fix: Normalize cfg url path sep to '/' on Windows
Bugs (fixed):
  * All client config overrides are ignored (even the '-configserver'
  cli arg). Config overrides on the server appear to work, but they
  aren't forwaded to the client.

  Cause: cURL doesn't like the Window's path separator '\'
2023-04-16 00:13:42 -04:00
John Colvin 4f22ae04fe diag: Add verbose logs during config init 2023-04-16 00:13:42 -04:00
John Colvin 7da82d8444 cli (spark): Add 'sparkd' opt, integrate w/ CommandLineParser
This replaces the old '-configserver' arg, which will continue to be
supported for backwards compatabilty.
2023-04-14 15:16:32 -04:00
John Colvin d8611536ee fix build script: Fix venv path 2023-04-14 15:16:32 -04:00
John Colvin c94ffd1a56 cli: Add spark.console.cmd (alias for Spark.Console.exe) 2023-04-14 15:16:32 -04:00
John Colvin cddf081e19 fix (cli): Read %~dp0 before SHIFT
I just discovered that, when SHIFT is run (the first time), the value of
%~dp0 changes from the script's parent dir to the current working dir
2023-04-14 13:18:28 -04:00
John Colvin 94071b4889 refactor: Move Spark cmd opts to own file 2023-04-14 13:18:28 -04:00
John Colvin d7518cffe1 fix: Don't round ccapi book qtys to int 2023-04-14 17:07:25 +00:00
John Colvin fa26ecaf67 fix: Fix typo 'BINANCE' -> 'BINANCE_US' 2023-04-14 17:07:25 +00:00
John Colvin c2eaf00aaa improvement (cli): Add spot & option to sec type choices 2023-04-14 17:07:25 +00:00
John Colvin 74be3ec9b9 improvement (cli): Dump md json via nlohmann/json
This is much easier to read than previous json format, which we
generated ourselves, though a bit more verbose.
2023-04-14 16:55:29 +00:00
John Colvin 967e3100d2 fix (cli): Fix shared mem dump path 2023-04-14 16:55:29 +00:00
John Colvin b1d1243eae refactor: Change lib::domain::Book qty type to float 2023-04-14 16:55:29 +00:00
John Colvin 72edd99cb0 chore: Get rid of old/unused code from Spartan 2023-04-14 16:55:29 +00:00
John Colvin a512460396 diag: Log when quickbus starts/stops
Something is broken wrt port config on sparkd, and possibly spark
(client) as well. This might help track down the bug.
2023-04-14 16:54:17 +00:00
John Colvin 48ff593c2e chore: Remove unused fns
Also stop exporting PlatformLoader type since it isn't used outside of cpp
2023-04-13 13:59:14 +00:00
John Colvin d8fc99bca4 chore: Remove CMakeDeps that were accidentally added back 2023-04-13 13:59:13 +00:00
Taha Afzal 6a04759fe8 Merge branch 'spark_crypto.websocket-api.ccapi' of bitbucket.org:bluetradesys/spark into spark_crypto.websocket-api.ccapi 2023-04-12 10:28:44 -05:00
Taha Afzal 2cc07b71bd Added some documentation to order_flow.txt 2023-04-12 14:21:27 +00:00
Taha Afzal 40bf117f6c Execution config fixed 2023-04-12 02:34:37 +00:00
Taha Afzal 20209ef429 Merge branch 'spark_crypto.websocket-api.ccapi' of bitbucket.org:bluetradesys/spark into spark_crypto.websocket-api.ccapi 2023-04-11 16:38:47 +00:00
Taha Afzal c30a7a29fd Merging sim_execution 2023-04-11 15:34:20 +00:00
Taha Afzal c6ae2ea038 temp changes to make ws work 2023-04-11 14:16:40 +00:00
Taha Afzal f95715beec Merge branch 'spark_crypto.websocket-api.ccapi' of bitbucket.org:bluetradesys/spark into spark_crypto.websocket-api.ccapi 2023-04-10 15:57:38 +00:00
Taha Afzal 0e85f4b9d5 Merge branch for 'spark_crypto.websocket-api.linux' into spark_crypto.websocket-api.ccapi 2023-04-10 15:55:46 +00:00
John Colvin ab78ae867a dev: Add docs for building/intellisense in VS Code
TODO: Add docs for building Spark on Windows
2023-04-10 11:55:13 -04:00
John Colvin 5e60f38b9b build: Change CMakePresets build/install dirs to historic paths
<build|install>/<clang|gcc>/<debug|release>
2023-04-10 11:10:37 -04:00
John Colvin 8f4b4be6db build: Fix CMakePresets build
Also drop 'spark_' in 'spark_admin_web_app_bundle' target. It's just too
long
2023-04-10 11:10:37 -04:00
John Colvin 696195aefd docker: Rename repo 'bluetradingsystems/sparkd-dev'
The previous name, 'johncolvin/bluetradingsystems', was chosen in a
misguided effort to adhere to a naming convention recommended by Docker
Hub (https://docs.docker.com/docker-hub/repos/create/). In hindsight,
this convention isn't well suited to our use case. Our images are shared
by multiple users (e.g., sparkd dev users all use the same sparkd-dev
image), so it doesn't make sense to name the repository after an
arbitrary user.
2023-04-08 12:18:39 -05:00
John Colvin 36f0a544e9 fix (pre-emptive): Include <map> in header that uses std::map
The build wasn't broken, so any deps on members that use map must have
included 'map' themselves
2023-04-08 00:52:23 -04:00
John Colvin f23242b18c improvement: Only prepend venv to PATH once per shell
Even if build_spark.cmd is called repeatedly from the same shell. This
prevents PATH from growing too long (w/ repeating venv path entries)
2023-04-08 00:46:07 -04:00
John Colvin 75dd6d659b chore: Remove old config defaults dir 2023-04-08 00:07:29 -04:00
John Colvin a23d8228b4 chore: Remove unused spark_server.sln 2023-04-07 23:58:24 -04:00
John Colvin 59f3d54597 docs: Fix typo in readme 2023-04-07 23:57:44 -04:00
John Colvin 8b3166582d refactor: Rename run_spark.cmd -> spark.cmd, add build-type arg 2023-04-07 23:55:12 -04:00
John Colvin fd13316b8e dev: Add c_cpp_properties.json and README for intellisense on win 2023-04-07 12:14:49 -04:00
John Colvin 5991ab03ec Removing docker/windows submodule (was accidentally added back) 2023-04-07 12:14:49 -04:00
John Colvin b9bc6184d4 diag: Add sym/type/exch to invalid sec channel log 2023-04-07 12:14:49 -04:00
John Colvin aab3e836c3 fix: Add Spot -> Stock sec type conversion switch case 2023-04-07 12:14:49 -04:00
John Colvin ed0fc60900 build: Clean up build_spark.py a bit 2023-04-07 12:14:48 -04:00
John Colvin 6764ae268e Removing docker/linux submodule (was accidentally added back) 2023-04-07 12:14:48 -04:00
John Colvin 6d3d9ddacf fix build: Fix merge errors (mostly trivial stuff) 2023-04-07 12:13:44 -04:00
Taha ccd76ec284 Symbols.conf 2023-04-06 21:48:34 -04:00
Taha Afzal d52ea0e997 Adding macro to stop MarketDataConfigUtils from building into windows 2023-04-07 01:41:06 +00:00
John Colvin 15e23fe486 fix: Remove 'run_emumba' from md/Run.cpp
MarketDataGateway manages emumba/deribit connections now

Bugs (fixed):
  * An spdlog exception is thrown because the run_emumba thread spawns a
    2nd emumba_logger.

    Cause: The first emumba logger is spawned by the EmMDListener
    instantiated in MarketDataGateway. We shouldn't be starting emumba
    connections in 2 places.
2023-04-06 15:26:19 -04:00
John Colvin d9e5b11026 fix: Disable MDPublisher thread (at least for now) 2023-04-06 15:07:46 -04:00
John Colvin 21c19c94c2 fix: Fix typo in config defaults 2023-04-06 14:58:59 -04:00
John Colvin c31d9d6c72 Merge remote-tracking branch 'origin/spark_crypto.dev' into spark_crypto.websocket-api.linux 2023-04-06 14:44:22 -04:00
John Colvin a7e89b075b Merge remote-tracking branch 'origin/spark_crypto.ccapi' into spark_crypto.websocket-api.linux 2023-04-06 12:55:53 -04:00
arhamGIT c0bb26e56f Merge branch 'spark_crypto.websocket-api.linux' of bitbucket.org:bluetradesys/spark into spark_crypto.websocket-api.linux 2023-04-06 08:36:12 -04:00
arhamGIT 1e3e57b990 misc color changes 2023-04-06 08:35:46 -04:00
John Colvin f50430e9e2 fix: Fwd ports in start_docker script 2023-04-06 00:02:53 -04:00
John Colvin 4891250959 docs: Add directions to create container from terminal 2023-04-06 00:02:53 -04:00
John Colvin ad1b89ff88 docs: Add links to dev container docs in README 2023-04-05 23:50:38 -04:00
John Colvin 49053d31c2 chore: Remove docker build script
It's just as easy to run the docker build cmd manually
2023-04-05 23:05:50 -04:00
John Colvin 651ebdbb41 docs: Remove unnecessary sample code in README 2023-04-05 23:04:03 -04:00
arhamGIT 0b50d5b5f0 dark theme in create synthetic 2023-04-05 13:52:45 -04:00
John Colvin 9e3f16d8bc fix build: Update externals so prod builds in new docker 2023-04-05 11:45:24 -04:00
John Colvin a3f194d708 build (web): Upgrade web build to net7.0 2023-04-05 11:39:37 -04:00
John Colvin d21de803f6 docker: Check if aliases.fish exists before sourcing it 2023-04-04 23:52:10 -04:00
John Colvin bb81151392 docker: Remove unused opt from build script 2023-04-04 23:52:10 -04:00
John Colvin 2b277b84a2 docker: Improve devcontainer_post_create.sh
* Create fish config dir if it doesn't exist
* Ensure git is run from a dir inside the repo
* Add basic logs
2023-04-04 23:52:10 -04:00
John Colvin 2bf4502d06 docker: Add set_user/start_docker scripts
Leave the image's default user as 'root' so we can modify the non-root user's
uid/gid. This is a common technique used in containers to gain file permissions
in mounted dirs.

The default user's uid/gid can't be changed because a bash process runs under
their ownership as long as the container is up. A user's uid/gid cannot be
changed while that user owns a process (at least not via 'usermod').
2023-04-04 23:52:10 -04:00
John Colvin 94d1b9d784 improvement: Fwd ports in devcontainer, don't stop on close 2023-04-04 00:30:04 -04:00
John Colvin ceee66d5f2 fix build: Add compile def 'SHARED_MEMORY_PREFIX' for win build 2023-04-03 19:30:14 -04:00
Taha Afzal 2e9a968752 Merge branch 'spark_crypto.websocket-api.linux' of bitbucket.org:bluetradesys/spark into spark_crypto.websocket-api.linux 2023-04-03 11:14:30 -05:00
John Colvin 6c2989b139 refactor (docker): Replace usermod cmds w/ opts in 'useradd' 2023-04-03 11:52:19 -04:00
John Colvin 6c2bfee616 fix (docker): Set default user without specific group
Bugs (fixed):
  * The default user does not have sudo permission in the container,
    unless the user is specified explicitly in the 'docker exec' cmd
    (via -u <user>).

    Cause: When the default user is specified with a specific group
    (in this case, its namesake 'bts'), it is excluded from all other
    groups, including 'sudo'.
2023-04-03 11:43:37 -04:00
John Colvin 30c5ea7fb2 chore: Name devcontainer scripts after associated json prop 2023-04-03 10:49:58 -04:00
John Colvin a6831b5548 chore: Add devcontainer.json to bootstrap devcontainers 2023-04-03 10:49:58 -04:00
John Colvin b42943fe8d chore: Rename Docker image 'spark-dev' -> 'sparkd-dev'
This is a more accurate and appropriate name than 'spark-dev' because
the image is designed to build/run Sparkd and the Spark Api Server (both
of which are daemons, hence the appropriateness of the 'd' suffix). It
isn't designed to build/run the front-end desktop application, Spark.
2023-04-03 10:28:51 -04:00
John Colvin 06c833e96c fix: Use correct prefix in md cleanup
Bugs (fixed):
  * Assert crash in MDSource.h "Marketdata heartbeats are bad..."

  Cause: The MD cleanup procedure, which is supposed to delete md files
  from shared memory (from previous runs), wasn't deleting anything.
  The file globbing pattern it was using (to determine which files to
  delete) never produced any matches because it had the wrong prefix. As
  a result, market data would often be loaded with a stale heartbeat
  timestamp from a previous run.

  Note: This occurred as a side effect of making the shared memory prefix
  configurable when we ported the api server over to Linux (so the api
  server and sparkd could run on the same container/machine whilst
  maintaining independent shared memory files).
2023-04-03 10:28:51 -04:00
John Colvin 9aff02b225 chore: Remove unused docker scripts 2023-04-03 10:28:51 -04:00
John Colvin 4229a523a8 docker: Init devcontainer bashrc and config.fish 2023-04-03 10:28:51 -04:00
John Colvin 82e9e6b6bf docker: Change default docker_user to "bts"
This way we can all use the same dev image. It also means one less
variable in our containers that paths/scripts need to account for.
VS Code can automatically update the remote user's uid in the container
to avoid permission issues in mounted dirs.
2023-04-03 13:48:43 +00:00
John Colvin 904a6db1d0 fix: Add Mercury default conf
The quickbus was essentially broken when running on the 'default'
defaults, for lack of a better word, because the ingoing/outgoing queues
in BrokerProxy would be initialized with size 0.
2023-04-03 13:48:16 +00:00
John Colvin 2a9f03741e chore: Move docker files into main repo
Changes to Docker-related files/configuration don't occur in a vacuum.
They are made in coordination with changes to the main repository, so it
doesn't make sense to track them separately.

Note: Removing the 'windows' Docker files completely. No one has has
used them in a long, long time. The client build would be broken in
there anyways, the image is based on .NET Framework 3.5!
2023-04-03 13:48:16 +00:00
John Colvin fd3de056c1 style (cli): Clean up 'key-code' cmd
* Rename 'key-code' -> 'key' (better grammar for the sub cmds)
* Rename 'key-gen' -> 'gen'

Now the 'key' cmds are 'sparkd key gen/encrypt/decrypt'
2023-03-31 05:00:07 +00:00
John Colvin 978a1e8566 dev: Integrate Docker w/ VS Code devcontainers
Hopefully this resolves all of the trouble/confusion in setting up
sparkd Docker containers
2023-03-31 04:59:58 +00:00
Taha Afzal 36e1771579 Merge branch 'spark_crypto.websocket-api.linux' of bitbucket.org:bluetradesys/spark into spark_crypto.websocket-api.linux 2023-03-28 16:05:06 -05:00
John Colvin 0d23fd50f5 improvement: Indent protos in sparkd config cmd
So proto values are indented relative to the key, which is the type name
2023-03-28 10:45:03 -04:00
John Colvin 367c9c1c7c chore: Include metrics.h in MDSource.h
This file was broken, as it defines methods that depend on metrics.h.
However, the build wasn't broken because references to such methods
are in files that happen to include metrics.h themselves.
2023-03-28 00:45:07 -04:00
John Colvin 78f5526ce7 refactor: Add spark_test, Spark.Console to Spark.Api.Server sln 2023-03-28 00:45:07 -04:00
John Colvin a1d7ebd260 improvement: Lower 'finit_spark_lib' log level to Diag 2023-03-28 00:45:07 -04:00
John Colvin 3fda1cb369 improvement: Add null check for rule_desc in cfg lookup
It is possible rule_desc is null given an inappropriate field_name arg
2023-03-28 00:45:07 -04:00
John Colvin 2c2a68022b improvement: Spruce up 'config' cli
It's naturally a bit messy because we expose the c++ cli to csharp, so
it can be invoked via Spark.Console (cs) or sparkd
2023-03-28 00:45:07 -04:00
arhamGIT bb321926bc names wkng in subs, examples working 2023-03-27 11:40:51 -05:00
John Colvin 45c35ba1b2 fix build: Fix install path issues in cmake 2023-03-26 13:44:25 -04:00
John Colvin 77c61d5e3f fix build: Run dotnet tool restore when building webapp 2023-03-26 13:44:25 -04:00
John Colvin 12962ed5ca Update docker/linux, and externals
* Fixes a few build dep issues
* Adds [docker] user in container, rather than image
* Automatically installs emumba libs when creating/starting new docker
  containers
* Binds sparkd ports to the host so containers don't need to share the
  host's network stack (allows us to run sparkd in containers in WSL)
* Adds flag to start_docker.sh to allow mounting existing dirs
* Improves start_docker.sh help text
2023-03-26 13:44:22 -04:00
John Colvin f472db002c feat (sparkd cli): Bring back 'web' cmd 2023-03-25 11:46:23 -04:00
John Colvin 6939f32f69 refactor: Rename 'web' -> 'Admin.WebApp' in CMakeLists 2023-03-25 11:43:29 -04:00
John Colvin 0107d934e5 fix: Resolve req paths correctly in Admin WebApp 2023-03-25 11:00:45 -04:00
Taha Afzal ce9880a9b1 changed samples 2023-03-21 12:44:43 -04:00
Taha Afzal 317f17d7da added examples 2023-03-21 12:39:58 -04:00
Taha Afzal 7da128da6b removed allow all headers 2023-03-21 01:16:02 -04:00
Taha Afzal f603866860 changed config to make on titan 2023-03-21 01:14:56 -04:00
John Colvin dc2d525955 fix build: Reorder link libraries
For some reason, it the previous order of link libs caused an unresolved
external symbol related to open ssl (looks like a version macro)
2023-03-20 13:26:44 -04:00
John Colvin e97335189a refactor: Rename Spark.Admin.Console -> WebApp
This is a more appropriate name (it is a web app after all), especially
now that we've renamed sparkcmd -> Spark.Console (a literal console
app). The old name implies a parallel between the two apps that doesn't
exist.
2023-03-20 13:26:44 -04:00
John Colvin 81ce58268f improvement: Clean up Spark.Console
* Reword cli verbs, opts, and help text
* Rename files, folders, and namespaces
* Run code formatter
2023-03-20 13:26:44 -04:00
John Colvin 7dace3fc1d refactor: Rename sparkcmd -> Spark.Console
This is a more conventional name for a companion console app
2023-03-20 13:26:44 -04:00
John Colvin f4794bea33 improvement: Add sparkd (config-server) opt to configcheck cli 2023-03-20 13:26:44 -04:00
John Colvin b044ff3b2a chore: Transcribe more proto2 defaults to .conf files
After upgrading to proto3
2023-03-20 13:26:44 -04:00
John Colvin cd7856c46e fix build (spark): Add DeploymentType proto to spark_core 2023-03-20 13:26:44 -04:00
John Colvin 3be0ee6072 refactor: Move LazyObservable to Spark.Core.Reactive 2023-03-20 13:26:44 -04:00
John Colvin 198d26fda1 refactor: Move ObservableExtensions to Spark.Core.Reactive 2023-03-20 13:26:44 -04:00
John Colvin 8b26ac4456 chore: Remove unused code 2023-03-20 13:26:44 -04:00
John Colvin d6f172e953 refactor: Move KeyedValueSet to Spark.Core.Collections
Also rename to 'KeyedValueCollection'
2023-03-20 13:26:44 -04:00
John Colvin 91ee9b739a refactor: Move ChangeDictionary to Spark.Core.Collections 2023-03-20 13:26:44 -04:00
John Colvin b568128180 improvement: Set sys cfg build_type to release (if not debug)
For completeness sake
2023-03-20 13:26:44 -04:00
John Colvin 53a87530ee refactor: Remove erroneous 'qualifier' field from SystemConfig 2023-03-20 13:26:44 -04:00
John Colvin 450de301a9 build: Generate tsconfig file in the build dir
It never should have been dumped in the source directory in the first
place.
2023-03-20 13:26:44 -04:00
John Colvin 462b0f4eda build: Get rid of redundant py CMake utils 2023-03-20 13:26:44 -04:00
John Colvin 17402ce94a refactor: Replace os::bts_data_path w/ SystemConfig::data_path 2023-03-20 13:26:44 -04:00
John Colvin b7fae8a6f5 fix: Init quickbus node cfg w/ proper defaults 2023-03-20 13:26:44 -04:00
John Colvin 4058a98290 refactor: Rename .conf files w/ snake_case
To be consistent w/ corresponding .proto files
2023-03-20 13:26:44 -04:00
John Colvin 06d7693ed6 fix: Set hardcoded defaults for quickbus cfg
Remove these hardcoded vals once config defaults have been properly
refactored
2023-03-20 13:26:44 -04:00
John Colvin 2b01f3d902 fix: Ensure shared mem block size isn't 0 2023-03-20 13:26:44 -04:00
John Colvin d231ee50b7 chore: Fill in tedious defaults for jetfix cfg 2023-03-20 13:26:43 -04:00
John Colvin 815546d5ab fix build: Link appropriate libs for api server build 2023-03-20 13:26:43 -04:00
John Colvin 3fda0e4427 build: Add api server (dotnet) build tgt to CMakeLists 2023-03-20 13:26:43 -04:00
John Colvin a1eec029ac build: Only add sparkd related tgts if BUILD_SPARKD is true 2023-03-20 13:26:43 -04:00
John Colvin 2bbe92dbab build: Add option to enable/disable building docs
We only need to build the docs for proper releases
2023-03-20 13:26:43 -04:00
John Colvin b3d0040faa build: Replace CMAKE_BUILD_TYPE refs w/ generator expressions
To support multi-config generators (e.g., Ninja MultiConfig)
2023-03-20 13:26:43 -04:00
John Colvin c3e924be17 build (sparkd): Build server_layout target by default
The 'server_layout' was recently excluded from the default build target,
'all', because it depends on sparkd. The was done so we could optionally
configure cmake to build libspark without sparkd, as the new websocket
api server only depends on the former.
2023-03-20 13:26:43 -04:00
John Colvin dc5574e660 build: Use generator expression in tsconfig path
This is the modern CMake way. It makes the code cleaner, and supports
multi-config generators
2023-03-20 13:26:43 -04:00
John Colvin 5c19b391b1 chore: Add 'bin' dir to gitignore
The IDE (vscode) generates a 'bin' dir in the Spark.Admin.Console proj.
Presumably, this happens because the out dir is specified as a command
line arg, rather than defined in a proj file, as is the case w/ the
Spark client build.
2023-03-20 13:26:43 -04:00
John Colvin 79cb3162f2 build: Stop tracking CMakeDeps files
Not sure why these files were tracked in the first place, but cmake
automatically detects changes to the source file glob. Perhaps they were
originally added because it didn't work on some older version of CMake.
2023-03-20 13:26:43 -04:00
John Colvin e49254356a chore: Update 'tsconfig.g' path in .gitignore
Should've done this when the 'src/web' was renamed 'Spark.Admin.Console'
2023-03-20 13:26:43 -04:00
John Colvin 3192ef5561 build: Link cmake out dir to dotnet out dir
So dotnet intellisense knows where to find generated source files
2023-03-20 13:26:43 -04:00
John Colvin 8158bcb4f3 fix: Remove symlink reguardless of source path's existence 2023-03-20 13:26:43 -04:00
John Colvin b03cb94d60 build: Fix typo in msbuild prop 2023-03-20 13:26:43 -04:00
John Colvin 0f968c65b6 Fix client build after porting api server to linux 2023-03-20 13:26:43 -04:00
John Colvin 6b92773e87 build: Add quiet_exec.sh to build deps
This script probably won't ever change. Nevertheless, it is a dependency
of the admin console build.
2023-03-20 13:26:43 -04:00
John Colvin 870e1b7301 build: Use webpack mode equiv for debug/release build types 2023-03-20 13:26:43 -04:00
John Colvin 477a2f6da3 build (refactor): Rename build_web -> build_admin_console 2023-03-20 13:26:43 -04:00
John Colvin 85fe84406d chore: Clean up build_web.py a bit 2023-03-20 13:26:43 -04:00
John Colvin e8096a4db9 refactor (build): Consolidate web build into Spark.Admin.Console sln 2023-03-20 13:26:43 -04:00
John Colvin e68e673835 refactor (build): Remove redundant CWD class 2023-03-20 13:26:43 -04:00
John Colvin 53274e865a fix (pre-emptive): Fix CWD pop_path default value
In Python, default param values are evaluated once (not each time the fn
is called). This meant that, unless 'pop_path' was explicitly specified
in the CWD ctr, it wasn't necessarily the current working directory.
2023-03-20 13:26:43 -04:00
John Colvin 64df20cb36 refactor: Remove unused config-fallback path
This seems to have been here since the dawn of Spark. It is only
initialized via the -ConfigFallback option in the sparkd cli, an option
that no one ever uses (the cli provides no documentation for it either).
2023-03-20 13:26:43 -04:00
John Colvin 1977ad8ad4 build (web): Upgrade web build to net7.0 2023-03-20 13:26:43 -04:00
John Colvin a7e63d02e9 refactor: Use 'preferred_separator' when normalizing path
So callers don't have to provide the platform-dependent separator arg
2023-03-20 13:26:43 -04:00
John Colvin 593be8d069 diag: Log error on login fail 2023-03-20 13:26:43 -04:00
John Colvin f7e173f902 refactor: Enable MDConsumerInterop for api server build 2023-03-20 13:26:43 -04:00
John Colvin 7eefae4c42 diag: Add config logs
This may be temporary, but we should keep them until we know the new
proto3 configs are solid
2023-03-20 13:26:43 -04:00
John Colvin 7bb0951169 feat: Add dump-books/securities cmds to api server cli 2023-03-20 13:26:43 -04:00
John Colvin 787fb879d2 refactor: Make TickUtils public 2023-03-20 13:26:43 -04:00
John Colvin c23dafcb89 refactor: Overload subscription fns w/ filter delegate
Makes the impl more robust, as there is no reason the filter must be
tied to a specific type of filter object
2023-03-20 13:26:43 -04:00
John Colvin 111278b63b refactor: Make SecurityCriteriaExtensions public 2023-03-20 13:26:43 -04:00
John Colvin 2008478378 fix (pre-emptive): Fix typo (check val == 1, not 0)
Bugs (fixed):
   The IObservable.StopAfter ext fn never actually stops the sequence
   (even after the timeout expires).
2023-03-20 13:26:43 -04:00
John Colvin d5de60bc21 refactor: Move TableFormatter into spark_core 2023-03-20 13:26:43 -04:00
John Colvin 76172d0a5f fix: Align first item with others in TableUpdate description 2023-03-20 13:26:43 -04:00
John Colvin 1893df1f5c improvement: Lookup key rather than iterate through items 2023-03-20 13:26:43 -04:00
John Colvin a07fa26bfe fix: Pass BlitUserSymbol by val to cpp
This is a csharp/cpp interop method. The csharp delegate, which is passed
to and eventually invoked from cpp, accepts this param by value already,
but for some reason the corresponding cpp delegate accepts that same
param by ref. While working to enable the api server build on Linux, I
discovered this delegate was receiving bogus data from cpp. The problem
went away when I changed the cpp delegate param to be passed by value,
rather than ref.
2023-03-20 13:26:43 -04:00
John Colvin 41447067a2 fix: Pass non primitive args by ptr in native interop 2023-03-20 13:26:43 -04:00
John Colvin 1dd3d39a21 fix: Add nullcheck in FlattenTableSeries 2023-03-20 13:26:43 -04:00
John Colvin 4f772a1d57 build: Don't explicitly set GENERATED True for gen'd protos
CMake does this automatically now (as of version 3.20). Also, for some
reason unbeknownst to me, cmake doesn't clean the generated proto files
when they are explicitly marked as such.
2023-03-20 13:26:43 -04:00
John Colvin 97bd49d221 fix (py): Ensure 'PathOrNone.path' is actually Path or None 2023-03-20 13:26:43 -04:00
John Colvin b4374cec6b build: Add script to build api server 2023-03-20 13:26:43 -04:00
John Colvin 7e5c1218a3 build: Make app-data, shared mem paths configurable via CMake
This allows sparkd and the api server to run simultaneously in the same
docker, w/ independent data (on disk)
2023-03-20 13:26:43 -04:00
John Colvin 475970659c fix: Rename Logging.conf lowercase to match .proto
Now that we run csharp on Linux, case sensitivity matters
2023-03-20 13:26:43 -04:00
John Colvin e0706dde01 refactor: Move DeploymentType cfg to its own file 2023-03-20 13:26:43 -04:00
John Colvin 986ea74e63 fix: Call Enumerable.FirstOrDefault explicitly in overload
Bugs (Fixed):
  * StackOverflow ex is thrown in EnumerableExtensions.FirstOrDefault
    (custom overload by us) when the 'predicates' param is empty

   Cause: Our FirstOrDefault overload was calling itself (recursively),
   rather than System.Linq.Enumerable.FirstOrDefault
2023-03-20 13:26:43 -04:00
John Colvin fa0e6f7c10 fix: Get rid of 'Press any key to cancel' prompt
Console.Read throws an exception when running on linux. Furthermore, the
process can still be killed w/ ctrl+c so this doesn't remove any
functionality.
2023-03-20 13:26:43 -04:00
John Colvin ea5156122c refactor: Init ServiceContext & login outside of data sync
The login process is asynchronous, so it doesn't really fit in the
(synchronous) 'WebsocketDataSync.init' fn. This also reduces some state
in WebsocketDataSync, which is always a good thing, as it makes the
ServiceContext member readonly, and allows it to assume the user is
already logged in.
2023-03-20 13:26:41 -04:00
John Colvin 97b974a31f refactor: Clean up ServiceContext a bit 2023-03-20 13:23:49 -04:00
John Colvin ef98682620 refactor: Add IServiceProvider interface to Spark.Api
Designed to resemble Microsoft's well-known interface,
System.IServiceProvider
2023-03-20 13:23:49 -04:00
John Colvin d70eb158c4 build: Upgrade Google.Protobuf to v3.21.12 2023-03-20 13:23:49 -04:00
John Colvin 6fc34e922a build: Remove unused msbuild Item Proto3Excel 2023-03-20 13:23:49 -04:00
John Colvin fe65554c7a build: Add linux/windows OS conditions to msbuild props 2023-03-20 13:23:49 -04:00
John Colvin 78d9b678a8 build: Consolidate Proto3 output paths to OutDir & CSName
Unf, CSName is necessary because protoc converts .proto filenames to
TitleCase when generating .cs files. The other generated files
(client.pb.cs, server.pb.cs and immutable.pb.cs) don't have this problem
because they are generated with our own custom plugin.py, which gives us
control over the generated filename.
2023-03-20 13:23:49 -04:00
John Colvin 88302c9470 build: Upgrade TargetFramework to net7.0
We've been using several net7.0 preview features for a while now. Now that a
stable net7.0 release is available, it is time upgrade officially. This also
aids the effort to build csharp on Linux, where these preview features didn't
work out of the box. Lastly, trying to make these preview features work would
be a waste of time, as namespaces/interfaces in the official release have
changed in a way that isn't backwards compatible w/ the preview features.
2023-03-20 13:23:49 -04:00
John Colvin ac6c9e5c46 fix: Fix typo (make prop static) 2023-03-20 13:23:49 -04:00
John Colvin b1de323151 build: Use lower case exts in msbuild Directory.Build files
This is necessary now that we are building csharp on Linux, where, unlike
Windows, paths are case-sensitive.
2023-03-20 13:23:49 -04:00
John Colvin 24e57872ce build: Add Spark.Api.Server sln
This sln contains the csprojs needed to run the websocket api server on
linux. Like the spark_client sln, it also depends on libspark.
2023-03-20 13:23:49 -04:00
John Colvin ddd3f301b3 chore: Remove obsolete proto messages 2023-03-20 13:23:49 -04:00
John Colvin 7007fc9d6b chore: Remove obsolete proto option 'cc_enable_arenas' 2023-03-20 13:23:49 -04:00
John Colvin 7ca407fc42 chore: Translate proto2 default vals to .conf files
All proto2 config was just upgraded to proto3, which doesn't support
default values
2023-03-20 13:23:49 -04:00
John Colvin 5217e8801e Update externals to get new proto v21.12 (windows) 2023-03-20 13:23:48 -04:00
John Colvin ddd50cd916 build: Remove unused build prop 'protogen'
This was only needed to generate proto2 csharp classes, which were all
just upgraded to proto3
2023-03-20 13:23:48 -04:00
John Colvin 9ae3ababfa build: Remove proto2 target/props from cs build
Don't need them now that all cfgs have been upgraded to proto3
2023-03-20 13:23:48 -04:00
John Colvin 753cac0e7a refactor: Make proto-generated c# classes public
Two partial class defs are generated per proto. While the 'main' def was
already public, the shorter one in 'immutable.cs' was not.
2023-03-20 13:23:48 -04:00
John Colvin 6c3c9ebbcb refactor: Convert ui cfg to proto3 2023-03-20 13:23:48 -04:00
John Colvin 3aaa25a3e8 refactor: Convert toggles cfg to proto3 2023-03-20 13:23:48 -04:00
John Colvin 3fc0bce1de chore: Remove unused file 2023-03-20 13:23:48 -04:00
John Colvin fdb4544cb5 refactor: Convert various proto2 cfgs to proto3 2023-03-20 13:23:48 -04:00
John Colvin f5741d8095 refactor: Convert system/logging cfg to proto3 2023-03-20 13:23:48 -04:00
John Colvin 539d1cfeae build: Add option to use clang-13 explicitly 2023-03-20 13:23:48 -04:00
John Colvin c1ed79757c Upgrade linux protobuf from 3.19 -> 4.21.12 2023-03-20 13:23:48 -04:00
John Colvin c37727f482 Update externals to get emumba-deribit v3.3.1 2023-03-20 13:23:48 -04:00
John Colvin b25cd39481 fix build (linux): Update externals to support clang13, gcc12
Fixes the Release build (Debug was okay)
2023-03-20 13:23:48 -04:00
arhamGIT 5f93bed074 order update working 2023-03-20 16:13:50 -04:00
John Colvin bf87c46fcd fix build: Remove inappropriate ThreadStatic attr
This has likely been incorrect for a while. The problem surfaced after
upgrading to net7.0, as the new framework emits a warning (CA2259) when the
attribute is associated with a non-static field.
2023-03-07 16:30:59 -05:00
John Colvin 222d4b266e build: Disable warning cs8981
This is a new warning, introduced in net7.0, that disallows lowercase
class names. Our spark_crypto.prod branch currently uses protoc v3.19.1,
which is incompatible with this new warning, as it generates
classes with lowercase names. We can re-enable the warning when we
upgrade protoc to 3.21.12 (this has been done in the api server branch).
2023-03-07 16:25:21 -05:00
John Colvin d593eaf058 build: Upgrade TargetFramework to net7.0
We've been using several net7.0 preview features for a while now. Now that a
stable net7.0 release is available, it is time upgrade officially. This also
aids the effort to build csharp on Linux, where these preview features didn't
work out of the box. Lastly, trying to make these preview features work would
be a waste of time, as namespaces/interfaces in the official release have
changed in a way that isn't backwards compatible w/ the preview features.
2023-03-07 16:17:39 -05:00
arhamGIT ef9502c81b order entry working 2023-03-03 17:17:23 -05:00
arhamGIT 4b2c2de990 id changed to string 2023-03-02 10:32:08 -05:00
arhamGIT 79dc76c5df added entry point for taha 2023-02-28 10:14:28 -05:00
Taha Afzal eaa6493ce1 Deribit production markets can work with SimExecution 2023-02-27 20:54:43 -05:00
Taha Afzal 9fd0df2a13 SimExecution can be turned on from config now 2023-02-27 15:44:58 -05:00
arhamGIT fdbc64dfc5 basic order(lim/mark/ib) entry/deletion working 2023-02-27 13:45:45 -05:00
Taha Afzal d272612c6c Removed SimExecutionGateway's dependency on MDClient 2023-02-26 23:04:08 -05:00
Taha Afzal 77408c8c5e Fixed Self matching 2023-02-26 22:29:10 -05:00
Taha Afzal 09958eb333 SimExecutionGateway can not reflect the trades permenantly in the books 2023-02-24 11:06:26 -05:00
Taha Afzal fdb7bbdac2 SimExecutionGateway can now deal with books with 0 qty levels 2023-02-23 15:51:36 -05:00
Taha Afzal a7f24e84e4 Fills are now generated for SimExecutionGateway 2023-02-23 14:21:07 -05:00
Taha Afzal 7e5c71f337 SimExecutionGateway almost working 2023-02-23 13:43:09 -05:00
arhamGIT 62c20c96b4 forgot one file from last commit 2023-02-21 09:21:55 -05:00
arhamGIT 6b491ec209 strig list working 2023-02-21 09:16:43 -05:00
arhamGIT d009deea0e added list comprehension 2023-02-20 09:15:41 -05:00
Taha Afzal bed6feae3f Simplified SimExecutionGateway by combining order actions and matching into one 2023-02-19 00:49:30 -05:00
Taha Afzal d508d34a3a Completed books/order matching tests for SimExecutionGateway 2023-02-14 23:17:49 -05:00
Taha Afzal 5904bab03e Fixing bug with order crossing market in SimExecutionGateway 2023-02-14 16:21:57 -05:00
Taha Afzal fc9519cde3 Tests completed for working orders in the book (for SimExecution) 2023-02-14 10:06:53 -05:00
Taha Afzal 2dc823a6ac Added all the stateless book/order matching functions, and a few test cases 2023-02-13 20:09:47 -05:00
arhamGIT 390d901463 hooked subscriptions up 2023-02-13 11:50:27 -05:00
Taha Afzal ae9366f44a Adding comments and cleaning SimExecutionGateway 2023-02-12 21:27:54 -05:00
Taha Afzal db344656e5 Adding matching logic to SimExecutionGateway 2023-02-09 22:45:58 -05:00
Taha Afzal ac31deed5b Fixed Jetfix conf, and added some logs to SimExecutionGateway 2023-02-08 14:08:38 -05:00
John Colvin a0bd207d93 feat (internal): Add price stats to md client 2023-02-08 00:33:10 -05:00
John Colvin d62f88691c feat (internal): Add price ticker to md client 2023-02-08 00:23:41 -05:00
John Colvin b7c018b664 chore: Remove generated csproj file that was added by accident 2023-02-08 00:23:41 -05:00
John Colvin 55d021ccb1 fix build (publish): Copy libspark.dll to publish dir
Bugs (fixed):
  * Spark.exe generated by the installer crashes immediately on launch because
    it cannot find the libspark.dll.

  Cause: Sure enough, libspark.dll isn't in the install folder
  (AppData\Roaming\bts\Spark)

* Build libspark explicitly
* Fix libspark.dll copy src path
2023-02-07 16:41:11 -05:00
Taha Afzal 60cde0712f Streamlining MarketDataGateway further - all sources are started independently of each other now, with their own GeneralMarketDataListener 2023-02-07 11:59:11 -05:00
arhamGIT 83127523b9 Merge branch 'spark_crypto.websocket-api' of bitbucket.org:bluetradesys/spark into spark_crypto.websocket-api 2023-02-07 10:51:40 -05:00
arhamGIT 86c824e28d changed made to make js client work 2023-02-07 10:51:29 -05:00
arhamGIT 0349ff95bf book subscription working 2023-02-07 10:51:09 -05:00
Taha Afzal c20f017069 Simplified MarketDataGateway to deal with multiple market data producers as start-and-forget 2023-02-06 21:27:41 -05:00
John Colvin f62c867a20 feat (internal): Add trades md client 2023-02-06 19:42:43 -05:00
John Colvin b403cacb93 refactor: Simplify TradesSource SecurityCriteria filter 2023-02-06 19:42:43 -05:00
John Colvin 4499a3751f refactor: Move TradesSource to spark_api
So it can be used in the new websocket api
2023-02-06 19:42:43 -05:00
John Colvin 6d887cb72f refactor: Get rid of redundant Product struct 2023-02-06 19:42:43 -05:00
John Colvin 10e13dd51d refactor: Rename 'market_data' -> 'books' 2023-02-06 18:18:53 -05:00
Taha Afzal 5122038d21 Fixing windows side build 2023-02-06 15:21:51 -05:00
Taha Afzal 3039df56a0 Hooking up SimExecutionGateway to GeneralMarketDataListener 2023-02-06 14:04:57 -05:00
arhamGIT 85edf68ff0 secuirties working 2023-02-06 09:43:47 -05:00
arhamGIT 259ac99cdd books working 2023-02-06 09:25:12 -05:00
arhamGIT 39c3a34158 Merge branch 'spark_crypto.websocket-api' of bitbucket.org:bluetradesys/spark into spark_crypto.websocket-api 2023-02-06 09:21:04 -05:00
arhamGIT dde8223052 books working 2023-02-06 09:05:32 -05:00
Taha Afzal 4dc675eb9c Getting rid of Jetfix's platform, using Security.proto's exchange 2023-02-05 20:24:29 -05:00
John Colvin 2548f27527 feat (internal): Add manual fills to orders client 2023-02-04 10:36:31 -05:00
John Colvin ff03f092f5 chore: Remove useless white space 2023-02-04 10:36:31 -05:00
John Colvin 53ef67869b refactor: Support null filters in orders client 2023-02-04 00:35:43 -05:00
John Colvin d48f34d109 feat (internal): Add fills to OrdersClient 2023-02-04 00:35:42 -05:00
John Colvin a2d9c39325 feat (internal): Add securities to md client 2023-02-04 00:32:29 -05:00
John Colvin 0c4f684036 improvement: Include qty display w/ BookTuple
This is needed to properly format json for websocket api
2023-02-04 00:09:24 -05:00
John Colvin e587c8dbd7 refactor: Rename IncrementalMarketDataClient w/out Incremental 2023-02-04 00:09:24 -05:00
John Colvin 069ab45164 improvement: Provide order updates w/ corresponding root order 2023-02-04 00:09:24 -05:00
John Colvin 7b7de6f8fc refactor: Move long 'RootDependent' lambda into own class 2023-02-04 00:09:23 -05:00
John Colvin 9ed3b2aecb refactor: Return IConnectableObservable in TableUpdate.Cache
We were hiding the fact that an IConnectableObservable was being used
internally. Even worse, we were discarding the IDisposable returned from
its 'Connect' fn.
2023-02-04 00:09:23 -05:00
John Colvin ecf3f922df refactor: Replace OrderSecurity refs w/ OrderRecordTuple
The latter type was introduced to support the websocket server. Unlike
the old 'OrderSecurity' types, it has no wpf deps, and can thus be built
on Linux
2023-02-04 00:04:43 -05:00
John Colvin 1aa283fc8c chore: Make AlgoID type public
It's referenced by outside projects, namely Spark. The build would have
been broken were it not for the 'InternalsVisibleTo' attribute.

TODO: Remove all 'InternalsVisibleTo' attributes (they smell hacky)
2023-02-04 00:04:43 -05:00
John Colvin bfbf640986 refactor: Move AccountSecurityKey to spark_api 2023-02-04 00:04:43 -05:00
John Colvin b6cd470ca6 refactor: Move AlgoDefinitionMetadata to spark_api
Part of larger effort to move deps from Spark to linux compatible projs
2023-02-04 00:04:43 -05:00
John Colvin d826cff9d7 chore: Remove unused code 2023-02-04 00:04:42 -05:00
John Colvin ff65a5ca5b refactor: Get rid of old MarketDataClient in sdk examples 2023-02-04 00:04:42 -05:00
arhamGIT 9e012a2b3a Merge branch 'spark_crypto.websocket-api' of bitbucket.org:bluetradesys/spark into spark_crypto.websocket-api 2023-02-02 11:29:04 -05:00
arhamGIT a6f1c51539 changes suggested by john for sub hdlr 2023-02-02 11:27:13 -05:00
John Colvin 655f27543b refactor: Include security w/ book data 2023-02-01 15:16:08 -05:00
John Colvin 762baca586 improvement: Add Errors enum mapped to exit code 2023-02-01 15:16:08 -05:00
John Colvin ec769b49f6 feat (internal): Add expirations to SecurityCriteria 2023-02-01 15:16:08 -05:00
John Colvin 5153e8725c refactor: Replace terse null/empty checks w/ is_null_or_empty 2023-02-01 15:16:08 -05:00
John Colvin f79f2cc5b9 chore: Add NotNullWhen(false) attr to 'is_null_or_empty' 2023-02-01 15:16:08 -05:00
John Colvin cdf4f341d4 fix: Consider SecurityCriteria 'defined' if callputs non-empty 2023-02-01 15:15:04 -05:00
John Colvin f649c26304 chore: Remove superfluous fn 2023-02-01 15:14:23 -05:00
John Colvin 3a8d759a26 refactor: Move OrderFactory to own file, merge w DynamicOrderHelper 2023-02-01 15:14:23 -05:00
John Colvin 29ca6e98fb refactor: Replace ShowOrderTicket tag's anon tuple w/ proper type 2023-02-01 15:14:22 -05:00
John Colvin 328dd9b2d3 feat (internal): Add OrdersClient 2023-02-01 15:14:22 -05:00
John Colvin a1e58e5498 feat (internal): Add AdminClient 2023-02-01 15:14:22 -05:00
John Colvin ef43aebc5d refactor: Remove misplaced admin-related fns from OrderFactory 2023-02-01 15:14:22 -05:00
John Colvin 9a3304201e refactor: Consolidate sync_with/never_duplicate fns 2023-02-01 15:14:22 -05:00
John Colvin cd88710385 refactor: Move order utils from spark to spark_api
This is part of a larger effort to decouple business logic from windows
and the ui. Some utils are immediately needed for the websocket api.
2023-02-01 10:07:43 -05:00
John Colvin 2b3e4a4579 refactor: Move DisplayNameHelper to spark_core 2023-02-01 10:07:43 -05:00
John Colvin 05731cb9a2 refactor: Add OrderPriceComparer spark_api proj 2023-02-01 10:07:42 -05:00
arhamGIT 01eeadaf42 added changed suggested by john 2023-02-01 03:29:22 -05:00
arhamGIT b4721882ec log.notnull instead of customs, removed helpers 2023-02-01 00:15:11 -05:00
arhamGIT 3e894d0e27 used LoggerContext instead of custom task 2023-02-01 00:08:07 -05:00
arhamGIT 4e42125398 changed Programs.cs to use task.wait 2023-01-31 23:58:11 -05:00
arhamGIT 664cc37a03 fixed small bug 2023-01-31 23:46:51 -05:00
arhamGIT f4a0da3518 code for book subcription building 2023-01-30 09:11:54 -05:00
Taha Afzal cc8c181728 Establishign the connection bw listener and sim execution 2023-01-27 17:13:06 -05:00
John Colvin 5339d4ff93 refactor: Impl 'market_data' fn w/ SecurityCriteria filter 2023-01-27 14:36:38 -05:00
John Colvin a31368f08d refactor: Make 'subscribe_md' fn criteria param nullable
It was already checking for null, just needed to add the '?' to convey
this to callers. Also improve the method by checking if SecurityCriteria
'is_defined' before applying the filter.
2023-01-27 14:36:38 -05:00
John Colvin 136938ba1e refactor: Add NotNullWhen attr to 'is_defined' ext
So static analysis tools recognize that the 'criteria' param must be
non-null when 'is_defined' returns true
2023-01-27 14:36:38 -05:00
John Colvin 09316b630d refactor: Make SecurityCriteria/Clause public 2023-01-27 14:36:38 -05:00
John Colvin 99a661089f refactor: Move Book into own file 2023-01-27 13:48:19 -05:00
arhamGIT f26cb80e5f changes for marketdataclient 2023-01-27 13:47:15 -05:00
Taha Afzal dde8524ecb Renaming some general classes and moving them out of cc 2023-01-26 23:22:36 -05:00
Taha Afzal cda3d18838 Simulted Exchange base classes added 2023-01-26 20:02:10 -05:00
arhamGIT fae0325e87 added dummy function 2023-01-26 14:21:14 -05:00
Taha Afzal 118ca7248d Merge branch 'spark_crypto.ccapi' of bitbucket.org:bluetradesys/spark into spark_crypto.ccapi 2023-01-25 17:01:51 -05:00
Taha Afzal afa194ac54 Fixing the live vs replay priority (In short, if an exchange is configured for both live and replay, live gets precedence. Also, replay market data is not recorded 2023-01-25 17:01:32 -05:00
John Colvin 3538712692 fix (mview): Raise prop changed for qty '_text' props
Bugs (fixed):
  * Quantities for Deribit futures are all 0

    Cause: The row wasn't refreshing qty '_text' props when the quantities
    changed
2023-01-24 23:24:37 -05:00
Taha Afzal 604c34384c Adding Deribit to the default MarketDataConfigs 2023-01-24 22:01:33 -05:00
Taha Afzal c18f1baafa Merge branch 'spark_crypto.ccapi' of bitbucket.org:bluetradesys/spark into spark_crypto.ccapi 2023-01-24 21:08:56 -05:00
Taha Afzal 8e04920ab9 Starting Deribit from MarketDataGateway 2023-01-24 21:08:24 -05:00
arhamGIT aa3147a4a6 Merge branch 'spark_crypto.dev' of bitbucket.org:bluetradesys/spark into spark_crypto.dev 2023-01-24 13:34:19 -05:00
arhamGIT f7ab968e1b added flow comments 2023-01-24 10:32:44 -05:00
arhamGIT 5ce3d9d1a9 updated datasync 2023-01-24 10:32:43 -05:00
arhamGIT e2a9c91d3f added comments 2023-01-24 10:32:43 -05:00
arhamGIT 78a8652e7a separated logic into three classes needs comments 2023-01-24 10:32:43 -05:00
arhamGIT e9c536df96 sockethandler done, need to give cons back to gtwy 2023-01-24 10:32:43 -05:00
arhamGIT 94429a1fbc merged trydisconnecting with other function 2023-01-24 10:32:43 -05:00
arhamGIT f2728dcf78 thread safe socket added 2023-01-24 10:32:43 -05:00
John Colvin cbfd18c371 ui (orderbook): Use qty display cfg in right panel 2023-01-24 00:51:54 -05:00
John Colvin 60a31eb102 chore: Remove unnecessary BTS_EXPORTs 2023-01-24 00:51:54 -05:00
John Colvin 7c1e95d35d ui (mview): Only show merged qty by default
Hide direct/implied qty cols
2023-01-24 00:51:54 -05:00
John Colvin 90a046d539 feat (ui): Use fractional qtys in md
Changing quantities from ints to floats introduces new rounding/display issues
(unlike with ints, we can't just call 'ToString()' and expect consistent
formatting). Formatting settings are needed, such as num-decimal-places and
display-multiplier, and they must be configurable per SecurityCriteria.

Fortunately, such configuration already exists in the form of SecurityMetadata
config (we tackled the same issue for order-entry). In order to integrate this
(newer) config with market data, references to the (older)
SymbolUIConfiguration (used once upon a time for DJ work), had to be replaced.
2023-01-24 00:51:53 -05:00
John Colvin 935a6f846c fix build (client): Disable cpp that isn't needed on win 2023-01-24 00:51:44 -05:00
John Colvin b02f814c65 fix (ui): Remove context menu items that do nothing
They were accidentally brought over from Edge. Their functionality
hasn't been implemented in Spark.
2023-01-23 01:34:55 -05:00
John Colvin 8c42aa93a2 chore: Remove unused code 2023-01-23 01:34:55 -05:00
John Colvin 357bc5ad44 fix (ui): Format perp futs 'Perp' suffix (not bogus exp) 2023-01-23 01:34:55 -05:00
John Colvin 07fb9e8eb7 ui (pnl): Use 'default_text' foreground in popup titles
Previously, the foreground for some popups was a hardcoded dark gray,
which became hard-to-read following the Dark Theme changes.
2023-01-23 01:34:55 -05:00
Taha Afzal d641eba252 Removing some unused headers from includes 2023-01-22 18:38:31 -05:00
John Colvin 9f9fc4c8ab fix (analytics-exps): Wait for sym list before loading selection
Bugs (fixed):
   * The selected symbols aren't restored with the workspace

   Cause: The selected symbols were getting loaded once, in the ctr, before the
   list of symbols had been properly initialized. The view automatically
   deselects items that aren't in the ItemsSource.
2023-01-22 12:23:03 -05:00
John Colvin 2aef052398 ui (pnl): Use gray font color when pnl is zero 2023-01-22 12:23:03 -05:00
John Colvin 1c2027506a refactor: Clean up NullableColor/FontWeightProto 2023-01-22 12:23:03 -05:00
John Colvin c3274b2008 refactor: Rename argb_color -> to_uint
This is a more appropriate name
2023-01-22 00:11:28 -05:00
John Colvin 99aef9e86e refactor: Get rid of redundant prop 'NullableColorProto.argb'
It was a relic of the past. Although different fns are called in the props'
getters ('rgb_color' vs 'argb_color'), both ultimately return the same value.
2023-01-22 00:09:38 -05:00
Taha Afzal 77697f4312 Fixing windows C++ build 2023-01-21 22:16:35 -05:00
Taha Afzal 247d8b7ee8 Merging 2023-01-21 20:57:59 -05:00
Taha Afzal 06bed8747f Adding Replay to MarketDataGateway 2023-01-21 20:38:37 -05:00
John Colvin 8e9233022e fix (mini-ob): Return root element in CancelColumn.view_factory
Bugs (fixed):
  * Mini Orderbook crashes immediately when opened

  Cause: The (cell) view_factory fn wasn't returning the cell's root
  element, and was instead returning the root's child element.
  As a result, when the row attempted to add this element to its visual
  tree, the following exception was thrown:

    System.ArgumentException: Specified Visual is already a child of
    another Visual or the root of a CompositionTarget.
2023-01-21 13:41:04 -05:00
John Colvin 954dc582dc fix build: Make non-class fns in cpp files static
The build was broken bc a fn w/ signature 'eq(double, double)' was
defined twice, in TaskingEyeAlgo.cpp and CCAPISingleOrderManager.cpp.
2023-01-20 15:08:21 -05:00
John Colvin df510f0e3b Merge origin/spark_crypto.ccapi.fractional_qty_md 2023-01-20 15:08:19 -05:00
Taha Afzal ef9b3b0544 Adding config protobuf for MD Replay 2023-01-20 11:35:58 -05:00
Taha Afzal b8b3a57e8e Putting recording behind config 2023-01-19 23:09:28 -05:00
Taha Afzal d18020a45c Merging spark_crypto.md_recording 2023-01-19 15:31:36 -05:00
Taha Afzal e652c1cd24 Fixing the build (as per John) 2023-01-18 13:11:25 -05:00
Taha Afzal 8f5d6ccd51 Organized the common md recording functions 2023-01-17 23:36:04 -05:00
Taha Afzal cbe4a488b9 Adding error handling for file based replay 2023-01-17 22:09:17 -05:00
Taha Afzal 8ce3ef69d0 Odds and Ends with replay 2023-01-17 17:09:02 -05:00
Taha Afzal ab9fab13d9 Merging from spark_crypto.cme 2023-01-17 11:25:23 -05:00
Taha Afzal 309b0e64b2 Adding better logs 2023-01-16 21:46:27 -05:00
arhamGIT a6324a9aa2 added flow comments 2023-01-16 13:19:39 -05:00
arhamGIT 64417a6867 updated datasync 2023-01-16 03:21:42 -05:00
arhamGIT 8e16dcde0d added comments 2023-01-16 02:25:18 -05:00
Taha Afzal 2d8f6df0e2 Adding SimExecutionGateway, its not implemented yet 2023-01-15 19:09:21 -05:00
Taha Afzal 10199fb7ad Adding spread support in replay 2023-01-13 16:20:33 -05:00
arhamGIT 6f6ac2866c separated logic into three classes needs comments 2023-01-13 07:21:10 -05:00
arhamGIT 46837facbf sockethandler done, need to give cons back to gtwy 2023-01-13 05:55:12 -05:00
John Colvin 4916211301 refactor: Add BTS_FATAL macros
Essentially just shorthand for 'bts_assert(false)'
2023-01-12 12:50:29 -05:00
John Colvin 1d8c4a0954 chore: Add various MarketDataConfig.conf profiles 2023-01-12 12:50:28 -05:00
John Colvin 64601914b2 feat: Add Binance US market data 2023-01-12 12:50:28 -05:00
John Colvin b3ca5f133e build: Add config profiles to override generated defaults 2023-01-12 12:50:28 -05:00
John Colvin 9c3397d367 build (web): Upgrade node packages
As of now (2022-01-03), only 1 package isn't up-to-date: 'protobufjs'.
It remains locked at version 6.11.3. Anything newer breaks the web build
with mysterious webpack errors that suggest various imports aren't
properly resolved.
2023-01-12 12:50:28 -05:00
John Colvin b3dfce9f91 build (web): Automatically generate protos in venv
Finally, the server can be built outside of the venv (all dependent
build steps activate it automatically)
2023-01-12 12:50:28 -05:00
John Colvin 590d0028c2 chore: Add '!=' operator for Book
The '==' operator had already been defined. Presumably, the '!='
operator was omitted by mistake.
2023-01-12 12:50:28 -05:00
John Colvin 67cf817aa9 chore: Impl to/from_json for domain/md types
So objects of these types can be readily logged in a format that is
comprehensive, familiar, and consistent
2023-01-12 12:50:28 -05:00
John Colvin 35811512a4 chore: Remove FTX from default md conf
FTX is no more
2023-01-12 12:50:28 -05:00
John Colvin c13c85ed44 refactor: Rename 'num_book_levels' -> 'num_depth_levels'
This seems to be a more common nomenclature
2023-01-12 12:50:28 -05:00
John Colvin 5c85dabad8 fix (ccapi logging): Store filename strings in buffer
So they don't point to bogus memory when the log is persisted (async)
2023-01-12 12:50:28 -05:00
John Colvin c134b0f5ca refactor: Move 'AllSameType' to its own header 2023-01-12 12:50:28 -05:00
John Colvin d92ad7e2b6 build: Make ccapi log level configurable via cmake cache var
Default to 'Debug' for debug builds, and 'Warn' for release builds
2023-01-12 12:50:28 -05:00
John Colvin 4547d8cec1 refactor: Add runtime cfg for exch urls
CCApi otherwise harcodes them as pre-processor definitions (compile time).
We can use this runtime cfg to switch between test/prod urls without rebuilding
2023-01-12 12:50:28 -05:00
John Colvin 402a1f50f2 chore: Clean up Symbols.conf a bit 2023-01-12 12:50:28 -05:00
John Colvin bada16ade7 chore: Add documentation for TimeStamp 2023-01-12 12:50:28 -05:00
John Colvin 9794465d88 fix build (gcc): Mark a few constexpr fns inline instead
The gcc compiler correctly detected the impls weren't constant expressions
2023-01-12 12:50:28 -05:00
John Colvin 1f163615c5 style: Run formatter on CMakeLists 2023-01-12 12:50:28 -05:00
John Colvin 4304d7f786 diag: Add output op & fmt impl for SecurityMarketDataStatistics 2023-01-12 12:50:28 -05:00
John Colvin 38a5d95df9 refactor: Change md config to support multiple venues at once 2023-01-12 12:50:28 -05:00
John Colvin 4897195629 feat: Add Binance USDS Futures market data 2023-01-12 12:50:28 -05:00
John Colvin 1416f05fbd chore: Remove unused protos 2023-01-12 12:50:28 -05:00
John Colvin ac1f64c3f5 fix build (sparkd): Add '-g' to cxx debug flags
Technically, the build wasn't broken, just the legacy script 'build_sparkd.py'.
The latest build procedure, which uses CMakePresets, doesn't have this problem.
2023-01-12 12:50:28 -05:00
John Colvin 8fa82840be feat: Add Binance market data
Restructure build configurations so 'dev' builds target venue test urls,
while 'prod' builds target production urls (technically, there is only
one prod build at the moment; it's compiled w/ gcc/release). This is
necessary because the urls ccapi uses are defined at compile time (all
seem to be pre-processor directives defined in ccapi_macro.h).
2023-01-12 12:50:28 -05:00
Taha Afzal af92b8922f MD Recording and Replay is almost done, some cleanup needed - mainly organizing config, better logs and some code comments 2023-01-12 09:59:01 -05:00
arhamGIT f3d1569cb3 merged trydisconnecting with other function 2023-01-12 09:45:59 -05:00
arhamGIT da41a23c0e thread safe socket added 2023-01-11 06:32:07 -05:00
Taha Afzal e79aebbc8a MDRecorder cleanup: 2023-01-09 23:20:46 -05:00
Taha Afzal fcd6038d5d Added implied market data to MDRecorder 2023-01-09 13:36:28 -05:00
Taha Afzal d1fe0a03b5 MDRecorder almost done, need record implied and RFQ requests, as well as exit after an alloted time of recording 2023-01-09 09:38:03 -05:00
Taha Afzal cfdca08cfe CME Template 8 2023-01-06 11:52:30 -05:00
John Colvin d400bf6263 refactor: Rename spartan 'FMT' macro 'TO_STRING'
Avoids conflict with new 'FMT' macro, which is an alias for 'fmt::format'
2023-01-04 13:35:38 -05:00
John Colvin fa438db001 style: Add 'ReflowComments: false' to clang-format
So clang-format doesn't make pretty doxygen comments ugly (it doesn't
seem to know how to format them properly).
2023-01-04 13:35:38 -05:00
John Colvin 31dd34522f chore: Add sec_descs to SecurityCriteria (cpp)
Corresponds to the 'names' field in SecurityCriteria proto
2023-01-04 13:35:38 -05:00
John Colvin f5221910c8 fix: Support Spots in security sort impl 2023-01-04 13:35:38 -05:00
John Colvin 6e7e1980f5 fix (temp): Skip duplicate sec-exp keys in old edge code
It wasn't designed to support multiple exchanges, so Futures with the same
sym/exp from different exchanges yield duplicate sec-exp keys.
2023-01-04 13:35:38 -05:00
John Colvin 11e884e166 fix build (win): Build files in 'core' dir 2023-01-04 13:35:38 -05:00
John Colvin 88943f0857 refactor: Pass ostream to LiveLadderPrinter (don't hardcode cout) 2023-01-04 13:35:38 -05:00
John Colvin a5459a3aff improve: Optimize BookSide::is_sorted 2023-01-04 13:35:38 -05:00
John Colvin e8fa4f23c6 refactor: Move ProtoReader/Printer to 'bts::io' ns 2023-01-04 13:35:38 -05:00
John Colvin df82c0790b fix: Remove leftover test-code flag
It was preventing securities from being propagated to shared memory
2023-01-04 13:35:38 -05:00
John Colvin 81f1d91f5b style: Run clang-format on lib/md dir 2023-01-04 13:35:38 -05:00
John Colvin abf0d45784 improvement: Refactor mdgw/ftx to use SecurityCriteria
So we can subscribe to depth for "FTX Options" or "FTX BTC Futures",
rather than having to list each security explicitly.

This commit also unhooks binance from MarketDataGateway. A new paradigm
is emerging with the FTX impl, and it'll be easier to redo Binance than
try to make the existing impl fit the new mold.

Unfortunately, ccapi doesn't provide all the security metadata we need, such as
the security type and expiration date/time, so we get the list of FTX
securities directly from the exchange.
2023-01-04 13:35:38 -05:00
John Colvin 556e2ab99e refactor (chore): Clean up domain::Security a bit
* Rename 'min_quantity_increment_ammount' -> 'min_quantity_increment' to fix typo
* Remove old 'min_quantity_increment' member (it wasn't referenced anywhere)
* Initialize SecurityCommon w/ reasonable defaults (skipping initialization seems
like a premature performance optimization)
* Add a few members to verbose 'to_string' result
2023-01-04 13:35:38 -05:00
John Colvin 4b60fb5141 chore: Add nifty EnumMacros to replace boilerplate code 2023-01-04 13:35:38 -05:00
John Colvin 5eb9c57ba1 refactor: Use core::TimeStamp instead of chrono in TradeRecord 2023-01-04 13:35:38 -05:00
John Colvin e08b80afee chore: Make AggressorSide implicit convert from 'Value' 2023-01-04 13:35:38 -05:00
John Colvin 9b8e5896a2 chore: Remove unnecessary include 2023-01-04 13:35:38 -05:00
John Colvin 55e8c60a0b chore: Move ContainsKey macro to lib/collections 2023-01-04 13:35:38 -05:00
John Colvin a30b026c9d chore: Tone down IDGenerator logging to Diag 2023-01-04 13:35:38 -05:00
John Colvin cb79cbeb45 chore: Move SecurityCriteria classes into libspark 2023-01-04 13:35:38 -05:00
John Colvin 0e101aaf8b improvement: Show sid in LiveLadderPrinter book output 2023-01-04 13:35:38 -05:00
John Colvin e8244595f3 chore: Add to_string fn to Security
For diagnostic purposes (esp while we integrate more exchanges)
2023-01-04 13:35:38 -05:00
John Colvin 37512eb8d6 chore: Add some basic functionality to core::TimeStamp 2023-01-04 13:35:38 -05:00
John Colvin 567db063f3 fix: Create string in FMT_IMPL macro so it's compatible w/ LOG
Otherwise variables which aren't copied by default become corrupt when they go
out of scope (which happens bc our logging system is async).
2023-01-04 13:35:38 -05:00
John Colvin cc1484a81e chore: Move OSTREAM_FMT_IMPL.h into lib/core 2023-01-04 13:35:38 -05:00
John Colvin 0dc278eed5 chore: Support timezones when parsing iso dates
This is needed because FTX (and perhaps other exchanges) format
expirations with timezones
2023-01-04 13:35:38 -05:00
John Colvin 43ba30365a fix: Update OSTREAM_FMT_IMPL macro
This macro defines 2 template specialization fns, 'parse' and 'format'.

* Change 'format' to be a const method
* Declare return type w/ 'decltype' (per latest official example from fmtlib)
2023-01-04 13:35:38 -05:00
John Colvin 02ac95404d chore: Remove unused files 2023-01-04 13:35:38 -05:00
John Colvin 8388bdf1ec chore: Add missing huobi & binance venues to 'Venue' proto 2023-01-04 13:35:38 -05:00
John Colvin 019c3dd8db chore: Replace magic strings w/ CCAPI macros
These come from ccapi, so the code should never break due to an update
(not necessarily the case with the magic strings).
2023-01-04 13:35:38 -05:00
John Colvin 481380f883 chore: Assign asset & group when parsing ccapi securities 2023-01-04 13:35:38 -05:00
John Colvin 7c66260ff1 chore: Rename 'security_type' -> 'type'
For convenience (it's shorter)
2023-01-04 13:35:38 -05:00
John Colvin ad465b593f chore: Add fns to access SecurityCommon fields from Security
Bc I'm lazy and don't want to write 'security_common' everytime I need to access
these fields
2023-01-04 13:35:38 -05:00
John Colvin 00d702f998 chore: Remove accidental include 2023-01-04 13:35:38 -05:00
Taha Afzal 872f55d6c3 Reducing the logs and couts that were put while interfacing with CC 2023-01-04 13:35:38 -05:00
Taha Afzal 84f4c38336 Enabling spot market dtaa in the UI 2023-01-04 13:35:38 -05:00
Taha Afzal b9b907490a Enabling spot market data 2023-01-04 13:35:38 -05:00
Taha Afzal 8c6835a919 Merging 2023-01-04 13:35:38 -05:00
Taha Afzal 3a6bda4e08 Removing temporary security creation from CCMarketDataListener 2023-01-04 13:35:38 -05:00
Taha Afzal 60f76344c2 UI changes in SecurityExtensions to accomodate FTX 2023-01-04 13:35:38 -05:00
Taha Afzal 1fff7d5bcd Removing #include of a deleted generated header 2023-01-04 13:35:38 -05:00
Taha Afzal d77d3ab6c7 Merging CCListener work from a different branch 2023-01-04 13:35:35 -05:00
arhamGIT 4c91538f22 base websockets working 2023-01-04 04:34:44 -05:00
Taha Afzal 2eca4f7f14 Fixing the build, unused variable 2023-01-03 14:53:03 -05:00
John Colvin 053fa461a2 chore: Remove unnecessary includes 2023-01-03 14:53:03 -05:00
John Colvin aa997466f0 chore: Remove unused files CCApiRequestor.h/cpp 2023-01-03 14:53:03 -05:00
John Colvin fdf4fce5fa refactor: Return error if md cfg invalid rather than assert/crash 2023-01-03 14:53:00 -05:00
Taha Afzal 5746460e8d QueryServer while handling mic's use switch for exchange instead of ifs 2023-01-02 18:44:59 -05:00
John Colvin 569ac8e3e0 fix: Fix typo in 'MarketDataRegistrationError' type name
The 'Registration' part was misspelled 'Regstration'
2023-01-02 18:44:59 -05:00
Taha Afzal d9efbb879d IDGenerator is a thread-safe singleton now 2023-01-02 18:44:59 -05:00
John Colvin 92ff4198ef refactor: Hook up ccapi 'on_securities' callback
Clean up ccapi md code while we're at it
2023-01-02 18:44:59 -05:00
John Colvin 48bd3ab49a chore: Remove Binance-specific md impl from MarketDataGateway
It was creating needless clutter, as it was written before we knew about
ccapi. The new plan is to use a simple adaptor to interface with ccapi
for every exchange md.

Note: There are a handful of files related to the historic Binance impl
in the folder /lib/md/binance. I'm keeping them around for now, since
they are generally independent/isolated, and aren't causing clutter or
compromsing other code. Some of the utils there may come in handy down
the road.
2023-01-02 18:44:59 -05:00
John Colvin 9c7fc000e5 refactor: Replace FTX ccapi impl w/ exchange agnostic one 2023-01-02 18:44:59 -05:00
John Colvin d2454b6b85 chore: Include <string> in MarketDataRegistrationError
Apparently <string> was included in all source files that referenced
MarketDataRegistrationError by coicidence (else the build would have been broken)
2023-01-02 18:44:59 -05:00
John Colvin b4cda81535 build: Add -g to CMAKE_CXX_FLAGS_DEBUG
This flag tells compilers (both clang and gcc) to produce debug info
2023-01-02 18:44:59 -05:00
John Colvin 2d0fae0cbe chore: Sort includes 2023-01-02 18:44:59 -05:00
Taha Afzal 5515404062 CCMarketDataListener now listens to CC and writes data to shared memory 2023-01-02 18:44:57 -05:00
John Colvin 24c4dc1861 fix build (g++-12 rel): Add '-Wnomaybe-uninitialized' flag
For some reason, this warning isn't suppressed in ccapi_date.h, which is
included as a system header (like all headers in externals). According to GCC's
documentation, compiler warnings shouldn't be emitted from system headers.

Disabling the warning for now so we can focus on bigger fish.
2023-01-02 18:42:39 -05:00
John Colvin 3b1a2357cc fix build (client): Change 'WIN32' macros to '_WIN32'
Not sure exactly how this broke, but the WIN32 macro is no longer defined.
2023-01-02 18:42:39 -05:00
John Colvin 35371fe971 refactor: Remove redundant optional.h
It was from a time when Windows std didn't provide the 'optional' header
2023-01-02 18:42:39 -05:00
John Colvin 365394f28b build: Fix build_spark.py (broken since CMakePresets introduced)
Pass additional cmake opts through cli. Specifically, those that were
moved from CMakeLists.txt to CMakePrests.json
2023-01-02 18:42:39 -05:00
John Colvin 88c70a3ea0 build (refactor): Add cmake_utils.py in py/core
So it can be referenced by both client/server build scripts
2023-01-02 18:42:39 -05:00
John Colvin b0eb1175c1 Update docker/linux for ubuntu 22.10 image 2023-01-02 18:42:39 -05:00
John Colvin e90d627125 build (web): Update npm packages 2023-01-02 18:42:39 -05:00
John Colvin c1190d4ef9 build (refactor): Remove unused cmake var SPARK_PYTHON 2023-01-02 18:42:39 -05:00
John Colvin 67487415ad build (refactor): Change some cmake cache vars to options 2023-01-02 18:42:39 -05:00
John Colvin dcf80d7067 build: Fix build_sparkd.py (broken since CMakePresets introduced)
Pass additional cmake opts through cli. Specifically, those that were
moved from CMakeLists.txt to CMakePrests.json
2023-01-02 18:42:39 -05:00
John Colvin 99a778811a fix build: Update externals
Disables a few warnings-as-errors in btree source files
2023-01-02 18:42:39 -05:00
John Colvin eb76f0a6c5 fix build (gcc-12, clang>=11): Update externals
Disables a few warnings-as-errors in catch2 source files
2023-01-02 18:42:39 -05:00
John Colvin b8de813859 build: Replace setup_builds w/ CMakePresets.json
Clean up CMakeLists a bit in the process:
   * Define more cmake vars in CMakePresets
   * Split linux/windows presets into separate files
2023-01-02 18:42:39 -05:00
John Colvin 6b480afd43 build (sparkd): Automatically create py venv in build script 2023-01-02 18:42:39 -05:00
John Colvin 40d21542ae build (sparkd): Pipe 'eval' cmd stdout/err back to shell
So we can actually see the build output
2023-01-02 18:42:39 -05:00
John Colvin a8af5d2523 fix build: Compile with gcc/g++ (version agnostic)
We don't really need a strict dependency on a compiler version, though
best practice is to use the latest gcc (12).
2023-01-02 18:42:39 -05:00
John Colvin bfd12aed63 tools (log): Fix 'pretty' script & rename 'show_last_run' 2023-01-02 18:42:39 -05:00
John Colvin 76936ea50d fix build (gcc): Disable warning stringop-overread
This warning (as error) was introduced with g++ 12
2023-01-02 18:42:39 -05:00
John Colvin 6947aea35e diag: Log emumba cfg parse error code 2023-01-02 18:42:39 -05:00
John Colvin 34be51c648 refactor: Include <limits> in sane_algorithm.h
Although the build was fine, many methods in this header file depend on 'limits'
so it is appropriate to include it. Presumably all references to such methods are
made from source files that include <limits> by coincidence.
2023-01-02 18:42:39 -05:00
John Colvin 56b68b9a24 fix build (gcc): Don't let switch case fall through
Even if the case is simply 'bts_assert(false)'
2023-01-02 18:42:38 -05:00
John Colvin 84e6f010d7 build: Benign changes to remove errors in gcc 12 2023-01-02 18:42:38 -05:00
John Colvin b360f953db build: Benign changes to remove errors in clang 15 2023-01-02 18:42:38 -05:00
Taha Afzal 320427c9c5 Merge branch 'spark_crypto.dev' of bitbucket.org:bluetradesys/spark into spark_crypto.dev 2022-12-25 16:17:12 -05:00
Taha Afzal 5e8543902e Sheet theos change colors for contracts that are in a task 2022-12-25 16:17:01 -05:00
John Colvin edae3c9ab7 build (refactor): Remove 'zip' opt from publish_spark
The slight convenience afforded by this opt doesn't seem worth the
additional complexity. This script produces a self-contained application
folder. Decisions on what to do with that folder (whether or not to zip
it, etc.) are best left upstream.
2022-12-23 11:40:35 -05:00
John Colvin fd9892c6b6 fix: Prevent raw_pb_callback premature garbage collection
Bugs (fixed):
   * Startup crash w/ error message: "A callback was made on a garbage
     collected delegate of type ApiNativeMethods.raw_pb_callback"

   Cause: The callback is only referenced in unmanaged c++. Without references
   in managed code, the Garbage Collector deems the delegate eligible for
   collection before the callback has finished execution.

   Note: The original solution forced a reference in managed code by storing it
   in a class-member 'keepalive' dictionary, whose life isn't bound to the
   [synchronous] scope of the 'send' method. The callback would then remove
   itself from the dictionary in its last line of code. While this reduced the
   chance of such an error occurring, occassional crashes persisted
   (particularly in low-bandwidth environments). I suspect the frequency at
   which garbage-collector threads run is inversely related to the frequency
   at which data arrives from the server, as the latter triggers execution of
   higher-priority threads.

   Steps to repro:
      1. Insert a Thread.Sleep statement (1000 ms should be sufficient) after
         the call that removes the last reference to the delegate (i.e., make
         the thread sleep for a significant amount of time in the callback
         AFTER it becomes eligible for garbage collection).

      2. Build, run, and observe crash on startup.

   Solution: Wrap the callback in another class, and store the wrapper
   in the dictionary rather than the callback itself. The reason why this
   works isn't totally clear, however its effectiveness has been verified
   with the repro (described above).
2022-12-23 11:25:07 -05:00
Taha Afzal 51c89fb8cc Merge branch 'spark_crypto.prod' into spark_crypto.cme 2022-12-21 20:38:42 -05:00
Taha Afzal 45668baaf8 Adding code to Main 2022-12-20 12:17:51 -05:00
Taha Afzal 305cc0e01c Adding simple concrete classes 2022-12-20 12:00:46 -05:00
Taha Afzal f0f365538b Initial check in for Websocker skeleton 2022-12-19 23:45:52 -05:00
Taha Afzal f9bba0baed Merge branch 'spark_crypto.dev' of bitbucket.org:bluetradesys/spark into spark_crypto.dev 2022-12-19 17:41:38 -05:00
John Colvin 306c18065a chore: Add csproj bones for websocket api 2022-12-19 14:25:37 -05:00
Taha Afzal ded674d87c Enabling CME market data, and adding some new logs to track initialization of resources 2022-12-19 14:15:04 -05:00
John Colvin c64c71c98c fix build (sparkd install): Copy plugins to install dir 2022-12-15 12:47:35 -05:00
John Colvin 7de87c1c25 ui (refactor): Consolidate (Repeat)Button colors to one class
The only difference between a RepeatButton and a regular Button is in
the click-behavior (they should look identical).
2022-12-15 12:47:35 -05:00
John Colvin 12716bb6e1 fix: Add a couple null checks 2022-12-15 12:47:35 -05:00
John Colvin 8e68d573ff ui (volsurface): Update oxyplot to get rid of 'dummy' win 2022-12-15 12:47:35 -05:00
Taha Afzal dd66e94bfd Merge branch 'spark_crypto.prod' of bitbucket.org:bluetradesys/spark into spark_crypto.prod 2022-12-09 16:59:50 -05:00
Taha Afzal d399f75648 Decreasing the log rate on the server 2022-12-09 16:59:08 -05:00
John Colvin 937173dd2f ui (volsurface): Update oxyplot to get rid of 'dummy' win 2022-12-09 13:23:44 -05:00
Taha Afzal f1f7a40fba Changing some Sheet UI Defaults 2022-12-09 01:53:08 -05:00
Taha Afzal 5522d364d4 Fixing Sheets and SpreadBox colors 2022-12-09 00:47:47 -05:00
John Colvin 3a218d246e ui: Style ListBoxEx w/ dark theme colors
This control used in grid filters (multi-select)
2022-12-08 13:52:14 -05:00
John Colvin bafc28e3bc ui: Touch up orderbook panel (dark theme) 2022-12-08 13:52:14 -05:00
John Colvin 6d1eb474c4 ui (grid settings): Align column-list cell params
The [vertical] alignment issue was only noticeable in the pnl settings dialog
(its cell params section is taller than those in other settings dialogs), where
the shorter columns list was center aligned with the taller cell params.
2022-12-08 13:52:14 -05:00
John Colvin d172f4ffab ui: Touch up grid settings dialogs (dark theme) 2022-12-08 13:52:13 -05:00
John Colvin c527b6e84f ui: Touch up AlgoStudio (dark theme) 2022-12-08 13:51:55 -05:00
John Colvin b8c7abd6b3 ui: Style TickUpDown ctrls w/ dark theme colors 2022-12-08 13:30:55 -05:00
John Colvin fea8e184c1 style: Sort tag attributes in xaml
* Put attached props before regular (i.e., not attached) props
* Sort alphabetically, with exceptions for props that are logically
  grouped together. For example Width/MinWidth/MaxWidth may be
  adjacent, as they are all 'width' props.
2022-12-08 13:30:55 -05:00
John Colvin 44a7bc0de9 style: Format large xaml files
* Improves readability
* Adds new lines to make navigating through the tags easier
* Mostly just white space changes

fix add empty lines

fix empty lines (reword commit to 'white space changes')

fix white space
2022-12-08 13:30:55 -05:00
arhamGIT 4bad9ef183 ladder lines 2022-12-08 13:30:55 -05:00
arhamGIT 590835c627 ladder changed 2022-12-08 13:30:54 -05:00
arhamGIT 997766df92 partial PNL header fix 2022-12-08 13:30:54 -05:00
arhamGIT cdbf66cd6c grid fixed with new row colors 2022-12-08 13:30:54 -05:00
arhamGIT 4c90eed59e bunch of changes for dark theme 2022-12-08 13:30:54 -05:00
John Colvin d260f8ce2c ui: Hardcode dark theme 2022-12-08 13:30:54 -05:00
Taha Afzal 12d0afb215 Merge branch 'spark_crypto.tasking_eye' of bitbucket.org:bluetradesys/spark into spark_crypto.tasking_eye 2022-12-06 15:21:46 -05:00
Taha Afzal a9040f5f8f For TaskingEye, side is not a part of the algo any more. Therefore selecting the bids and starting an eye, makes it go shoot at the bid, and vice verca for the asks 2022-12-06 15:21:37 -05:00
Taha Afzal 6e6acb5a71 Fix for TaskingEyeAlgo with empty security lists (ie when algo is launched from the ladder) 2022-12-06 15:17:54 -05:00
Taha Afzal 256697d5b0 Side is a parameter of TaskingEyeAlgo, it is inferred from the OrderDefinition (like other algos) 2022-12-06 11:06:44 -05:00
Taha Afzal be9067b22e AlgoWrapper was not publishing the filled fractional qtys, fixed now 2022-12-05 22:59:59 -05:00
Taha Afzal a5874a59f0 AlgoWrapper was not reporting fractional qty fills, this fixes it now via using the get_quantity function in orderman_common.h 2022-12-05 21:56:50 -05:00
Taha Afzal e8405e5638 OrderServiceServer starts calling ServiceBridge's do_work only once it gets the ready signal from ServiceBridge 2022-12-05 14:33:04 -05:00
Taha Afzal ab70c9dfb1 Fixing problem with TaskingEye for fractional shot qtys 2022-12-04 23:21:23 -05:00
Taha Afzal 1e4d8584c7 Merge branch 'spark_crypto.tasking_eye' of bitbucket.org:bluetradesys/spark into spark_crypto.tasking_eye 2022-12-04 20:36:25 -05:00
Taha Afzal 29eef77099 ServiceBridge now periodically publishes the TheoEvent (with a flag indicating such). This helps the algos get the theos without waiting for the next update 2022-12-04 20:36:10 -05:00
Taha Afzal c50e89ae78 Merge branch 'spark_crypto.tasking_eye' of bitbucket.org:bluetradesys/spark into spark_crypto.tasking_eye 2022-12-03 00:28:12 -05:00
Taha Afzal 89917713d6 Tasking eye UI work in the sheets 2022-12-03 00:28:00 -05:00
Taha Afzal 1e0ac46e07 Account name is part of the Tasking Eye Algo now 2022-12-02 23:18:06 -05:00
Taha Afzal 6279b8f5f5 Securities (string of sec_ids unfortunately) is a parameter in Tasking Eye Algo now 2022-12-02 15:44:25 -05:00
Taha Afzal 4007c87e20 Merge branch 'spark_crypto.tasking_eye' of bitbucket.org:bluetradesys/spark into spark_crypto.tasking_eye 2022-12-01 09:50:47 -05:00
Taha Afzal ec0f42e76c Adding timer for the theo publishing time 2022-12-01 09:50:37 -05:00
Taha Afzal 99f63c2a6f Fixed a big with the shot throttle 2022-11-30 21:42:54 -05:00
Taha Afzal 12ac20f756 TaskingEyeAlgo code complete, it is firing orders and correctly (needs more testing and ui integration) 2022-11-30 15:39:00 -05:00
Taha Afzal 9d36d74005 TaskingEyeAlgo correctly subscribes and receives driver books 2022-11-29 13:42:15 -05:00
Taha Afzal da2cc977a0 TaskingEyeAlgo hooked up to theos 2022-11-29 00:11:04 -05:00
Taha Afzal 84e7bdb586 Adding TaskingEyeAlgo 2022-11-28 16:57:12 -05:00
Taha Afzal b062a229c8 Added on_theos to IAlgoOrder, and hooked up the plumbing 2022-11-28 10:54:38 -05:00
Taha Afzal 8680b3d815 Publishing the interp theos to the server is almost done 2022-11-25 22:20:08 -05:00
Taha Afzal 6ab0e4c5a7 Merge branch 'spark_crypto.tasking_eye' of bitbucket.org:bluetradesys/spark into spark_crypto.tasking_eye 2022-11-25 16:36:34 -05:00
Taha Afzal 867bcf97d0 Added InterpTheosServerPublisher, which allows to publish precomputed theos to the server 2022-11-25 16:36:26 -05:00
Taha Afzal 360bf9b37e Added get_driver_sec to ITheoCalculator 2022-11-25 16:22:10 -05:00
Taha Afzal 4d85106fbf Added server method to publish precomputed theos, feed it into a calculator, and publish the calculator as an event 2022-11-23 12:52:01 -05:00
Taha Afzal 64a253b581 Fixed the vol change in day bug (difference of uint64s was being assigned to an int32) 2022-10-26 09:37:25 -04:00
Taha Afzal 5f379c1356 SpreadBox minor button display fixes 2022-10-13 07:32:03 -04:00
Taha Afzal 76c80383ce Merge branch 'spark_crypto.dev' into spark_crypto.prod 2022-10-13 00:55:11 -04:00
Taha Afzal e5a6ea80f0 Making the SpreadBox button click more obvious (ToolStripButtons do not have the button like feel of a click) 2022-10-13 00:54:13 -04:00
Taha Afzal b921e644df Merge branch 'spark_crypto.dev' into spark_crypto.prod 2022-10-13 00:13:42 -04:00
Taha Afzal 1c3fb8c192 Merge branch 'spark_crypto.dev' of bitbucket.org:bluetradesys/spark into spark_crypto.dev 2022-10-13 00:00:40 -04:00
Taha Afzal d530d86a30 Merge branch 'spark_crypto.prod' of bitbucket.org:bluetradesys/spark into spark_crypto.prod 2022-10-12 23:57:08 -04:00
Taha Afzal 9d9229ef56 Merge branch 'spark_crypto.spread_creation' into spark_crypto.dev 2022-10-12 23:43:11 -04:00
Taha Afzal 6f6f3c0800 RFQ qty and sides, sent from the client, are now sent over to Deribit 2022-10-12 23:39:44 -04:00
Taha Afzal 7b234044f6 Added controls in the spreadbox that allow for specifying qty and side for an RFQ 2022-10-12 20:08:24 -04:00
John Colvin d46c82f34c feat (ladder): Add side/qty inputs for rfqs 2022-10-12 15:41:57 -04:00
Taha Afzal 4d5af610f0 Added an 'RFQDialog' tag to SparkTags, that launches athe RFQDialog window 2022-10-12 11:55:19 -04:00
Taha Afzal 1e94466f24 RFQ for new spreads are now routed to emumba's create_combo method 2022-10-11 15:55:55 -04:00
Taha Afzal 3210c0bce4 Combo creation at Deribit is turned on from the UI now (it was disabled with a boolean switch prior to this commit) 2022-10-11 10:53:09 -04:00
Taha Afzal 849f4ac579 Merge branch 'spark_crypto.prod' of bitbucket.org:bluetradesys/spark into spark_crypto.prod 2022-10-10 15:14:40 -04:00
John Colvin 6d56f67697 feat: Add volsurface graph settings dialog
A lot of the vm code was already there, but I cleaned it up a bit. The view was
ported over from edge and also cleaned up/tweaked a bit.
2022-10-10 14:46:34 -04:00
John Colvin c0289719e7 fix (pre-emptive): Add null check in 'DisposeAll' fn
Bugs (fixed):
  * The volsurface graph settings dialog crashes when you click OK/Apply

    Note: This fix is 'pre-emptive' because I saw the bug while working on the
    vs graph settings dialog. That feat will be added shortly in a subsequent
    commit (I wanted to commit the fix first so the bug wouldn't be in the
    official 'feat' revision/commit).

    Cause: A null ref ex is thrown in DisposeAll, because the List of IDisposables
    to dispose contains null items.

    Another way to fix the bug would have been to make sure null items aren't
    added to these Lists in the first place. However, that places the burden (to
    check for null) on the callers' shoulders, and leaves open the potential for
    this bug in every place where 'DisposeAll' is called.
2022-10-10 14:35:29 -04:00
John Colvin a32e969b39 fix (ui): Fix ColorPickerControl/Popup SelectedColor binding
There were a few issues here:
  * The ColorPickerPopup was binding it's own SelectedColor prop to the internal
    ColorPickerControl's SelectedColor prop. The SelectedColor prop is typically also
    bound to some (external) viewmodel's 'color' prop. This is problematic as
    Dependency Properties can only be associated with one 'Write' binding.

  * The code designed to keep various sub-color properties in sync with the
    result color was confusing, and didn't seem to work. For example, the ARGB
    sliders' values didn't match those of the 'result' color.
2022-10-10 14:22:34 -04:00
John Colvin f5899e7781 fix (vs graph): Bind series vm color to correct OxyPlot prop
Bugs (fixed):
  * The VolSurface graph colors don't reflect the settings. They appear to be
    randomly generated.

   Cause: The series vm's color prop was bound to 'TextColor' in the model; it
   should have been bound to 'Color'
2022-10-10 11:17:17 -04:00
John Colvin ed07c956a7 ui: Remove quotes around 'Enter' in col filter prompt
Looks cleaner this way, and isn't clipped given the current width
2022-10-10 11:15:14 -04:00
Taha Afzal 2022ee5a07 Completing Deribit execution test 2022-10-10 11:01:59 -04:00
Taha Afzal a0bc1e8691 Spreader can handle options now 2022-10-09 23:56:38 -04:00
Taha Afzal c1951ac49a Added ability to view md/theo in USD, in the sheets 2022-10-08 21:45:57 -04:00
John Colvin e159e0e77b ui (man fills): Add 'Time Entered' column 2022-10-07 15:04:36 -04:00
John Colvin 6bbd4134ec ui (man fills): Use foreground to indicate buy/sell 2022-10-07 15:04:35 -04:00
John Colvin 8a72b2150a ui (rec rep): Use font weight to indicate price/qty discreps 2022-10-07 15:04:35 -04:00
John Colvin e4d5d1eeb2 ui (rec rep): Use foreground to indicate long/short pos 2022-10-07 15:04:35 -04:00
John Colvin 6bf2726b63 ui (rec rep): Filter out system spread positions
The exchange splits spread positions into the individual legs
2022-10-07 14:50:10 -04:00
Taha Afzal a63af0cb46 Manual tests for Deribit order execution 2022-10-06 22:37:39 -04:00
John Colvin b2a7e1d2ed feat: Add 'Send RFQ' button to ladder 2022-10-05 13:35:00 -04:00
John Colvin 32a38b3b5a refactor: Remove unused code 2022-10-05 13:35:00 -04:00
John Colvin 8533bcf0a7 style: Format LadderView.xaml
It's a big file. Irregular formatting/spacing makes it difficult to navigate.

* Use max line width of 100
* Add empty line after multiline tags
* Trim trailing white space
* Rename terse xml namespaces:
   - 'converters' -> 'cv'
   - 'spark' -> 'sp'
   - 'mbts' -> 'u'

fix fmt ladder
2022-10-05 13:34:39 -04:00
John Colvin e00eae1129 refactor (ui): Enable auto-refresh in column-text filters
feat (mview): Enable auto-refresh in security filter

This behavior is (more) consistent with other modern search uis
2022-10-05 01:05:24 -04:00
John Colvin 95595c4cbf fix: Arrange Adorner by target's RenderSize (not Desired)
Bugs (fixed):
  * The Adorner that is used to render a text prompt on top of text boxes appears
  clipped; it doesn't span the width of the TextBox.
2022-10-05 01:05:24 -04:00
John Colvin aad36a4972 fix (mview): Prevent icon flicker when selection changes
Observe changes to MarketViewVM.current_row' rather than
'MarketViewVM.selected_rows'. The latter (collection) is momentarily empty when
the selection switches from one row to another, during which time the buttons
are disabled, hence the flicker.
2022-10-05 01:05:24 -04:00
Taha Afzal cc03f47d70 SpreadBoxes can be brought up from MV 2022-10-04 22:17:46 -04:00
Taha Afzal 5c5e5c23ef SpreadDisplayForm's start location is not tied to the launching window now 2022-10-04 21:31:30 -04:00
John Colvin 4b531a2a1a feat: Add 'Send RFQ' button to mview 2022-10-04 18:07:30 -04:00
John Colvin 35530bec0b refactor: Remove unused variable 2022-10-04 16:42:50 -04:00
John Colvin 5853bb2436 refactor: Make RFQSend tag data immutable
It's safer this way. The data doesn't need to be mutated.
2022-10-04 16:39:01 -04:00
John Colvin bfdf45d30d fix (ui): Fix typo so spreads' qty metadata comes from 1st leg 2022-10-04 15:33:11 -04:00
Taha Afzal a330bc5020 MV and Ladder use GreekTuple.normalized_theo now 2022-10-03 23:20:48 -04:00
Taha Afzal 66f68ef3ec Fixing the spread filled price (EMNativeOrder needed to ignore spread_leg like the GLBX and ICENativeOrders 2022-10-03 23:19:10 -04:00
Taha Afzal d6e651129b RFQs are fully hooked up 2022-10-03 14:54:09 -04:00
Taha Afzal d4a59b8253 UI sends RFQ requests (and almost combo creations) 2022-10-03 00:04:55 -04:00
Taha Afzal 569f1460a4 Wiring up RFQ sending 2022-10-03 00:04:55 -04:00
Taha Afzal 2f369dbd57 RFQ wiring complete 2022-10-02 22:20:44 -04:00
Taha Afzal 444e486862 Changing RFQ Proto 2022-10-01 22:15:05 -04:00
Taha Afzal b42504d827 RFQ work to identify the spreads 2022-09-30 15:26:22 -05:00
Taha Afzal 18ac85a454 SpreadBox can identify listed spreads, shows the market data as well as allows orders (through ladder) and RFQs 2022-09-30 15:26:22 -05:00
Taha Afzal 788a1a06c5 Greeks for Spreads and Futures are added to bus's Greeks 2022-09-30 15:26:22 -05:00
John Colvin 787b485bce fix (ladder): Init qty input to null (not nan)
Bugs (fixed):
  * The ladder qty box defaults to 'NaN' when opened
  * Cannot change qty input via keyboard until 'NaN' is cleared
2022-09-28 22:57:36 -05:00
John Colvin 788df0e888 fix build (gcc-11): Include optional 2022-09-28 21:22:47 -05:00
Taha Afzal 916532f7c5 Fixing formatting of Deribit spreads 2022-09-28 21:22:47 -05:00
Taha Afzal 3c511bb177 RFQ hooked up on the server side 2022-09-28 21:22:47 -05:00
Taha Afzal 49f13755c6 Adding RFQ to OrderService interface 2022-09-28 21:22:47 -05:00
Taha Afzal dcb4b1ae7e Spread leg fills at Deribit now have the correct prices 2022-09-28 21:22:47 -05:00
Taha Afzal 2152b48fe2 Spread execution is almost done, leg prices are not correct 2022-09-28 21:22:47 -05:00
John Colvin b6f2f99f21 improve: Get spread qty metadata from first leg 2022-09-28 21:22:47 -05:00
John Colvin c44df8ec06 style: Add documentation to ContractLegEnumerable 2022-09-27 17:03:58 -05:00
John Colvin 493f082d6d fix (mview): Apply sec price format to theo & driver 2022-09-27 16:01:49 -05:00
John Colvin bbe76b2709 feat (ladder): Show theo, delta, vega in left panel 2022-09-27 15:53:22 -05:00
John Colvin ce8eda24fc refactor: Make vm prop changed subs more performant 2022-09-27 10:53:39 -05:00
John Colvin 9f9113bf9a refactor: Clean up LadderSettingsVM a bit
* Add readonly modifiers
* Declare 1 member per statement (don't separate members of same type by commas)
2022-09-26 13:34:50 -04:00
John Colvin a199595938 feat (part): Add 'Spread Box' menu item in mview
It posts the selected securities to the 'SpreadBox.ShowSecurities' tag.

TODO: Hook up handler to launch spread boxes in response to the
'SpreadBox.ShowSecurities' tag
2022-09-22 23:51:51 -04:00
Taha Afzal 83de5fac75 Deribit spread market data is now written to shared memory 2022-09-22 23:51:48 -04:00
Taha Afzal c688657d53 Vol surfaces are curtailed to the newest 500 at server startup 2022-09-22 23:51:41 -04:00
John Colvin a5c62c66b1 refactor (ladder): Get theos from Greeks tag
The old tag, KeyedTheos, is redundant and will be removed soon
2022-09-22 22:04:44 -04:00
John Colvin 6d595d18ee fix: Fix typo in requirements.txt ('=' -> '==') 2022-09-21 01:55:28 -04:00
John Colvin 946e8f1c47 Update externals
* Removes no-longer necessary node_modules dir
2022-09-21 00:17:31 -05:00
John Colvin b765c3756d chore: Remove arbitrary [vscode] 'tasks.json'
Vscode json files (settings, tasks, launch, etc.) should be tracked in the
dev/<name> dirs
2022-09-21 00:17:31 -05:00
John Colvin 54dc7bf6c3 fix (webapp): Add method without 'set_' prefix in generated js
We already do this for 'get_' prefixes
2022-09-21 00:17:31 -05:00
John Colvin 6142a08db6 build (client): Copy libspark.dll to 'publish' dir
This dll isn't automatically copied when 'dotnet publish' is executed, because
dotnet core isn't really integrated with cpp
2022-09-21 00:17:31 -05:00
John Colvin ca59976e00 fix build (cpp win): Use explicit void template arg in memcpy 2022-09-21 00:17:31 -05:00
John Colvin 7f7a160916 fix build (cpp win): Disable ccapi code in windows 2022-09-21 00:17:31 -05:00
John Colvin c8eb51c303 build (refactor): Move web build scripts to tools/py
Even though they're specific to the web CMakeLists proj, it's good to have all
build scripts in one place
2022-09-21 00:17:31 -05:00
John Colvin 4160233a58 build: Get rid of redundant setup_builds.sh
The new build_sparkd.py script handles both configuration and actual build
2022-09-21 00:17:31 -05:00
John Colvin c5f79f754b build: Compile sparkd w/ newer gcc v11 2022-09-21 00:17:31 -05:00
John Colvin 5f568d681a Update docker/linux to get gcc v11 2022-09-21 00:17:28 -05:00
John Colvin 83a2147428 build (sparkd): Enable Binance for ccapi 2022-09-21 00:14:38 -05:00
John Colvin 9dd2cee6d9 refactor: Repurpose ccapi ftx-impl for general use 2022-09-21 00:14:38 -05:00
Taha Afzal 57365013bd CCMarketDataListener is mostly complete, error handling and RFQs/state remains 2022-09-21 00:14:38 -05:00
Taha Afzal 3d55ef075b CCMarketDataListener writes its security to shared memory now 2022-09-21 00:14:38 -05:00
Taha Afzal 14da6461b1 Constructor added to CCMarketDataListener 2022-09-21 00:14:38 -05:00
Taha Afzal e84d3df024 Adding skeleton 2022-09-21 00:14:38 -05:00
John Colvin ed38fe0ce9 fix build (web): Install webpack-cli 2022-09-21 00:14:38 -05:00
John Colvin b5daee3bcf build (web): Replace deprecated fn copy_tree w/ copytree 2022-09-21 00:14:38 -05:00
John Colvin f5c8c29f5a build: Migrate web build to net6.0
Clean up the web build process a bit while we're at it
* Add 'custom_commands' to run npm install in CMakeLists
* Generate tsconfig files for CMake preset configurations
* Rename local variables to _snake_case in CMakeLists
2022-09-21 00:14:38 -05:00
John Colvin 89fa2eae50 build: Enable web build in wsl
Not sure why this was disabled in the first place
2022-09-21 00:14:38 -05:00
John Colvin 41b8c9238c build: Remove server/sparkd from libspark include path 2022-09-21 00:14:38 -05:00
John Colvin 28b66306da chore (linux build): Add benign changes to satisfy gcc11 2022-09-21 00:14:38 -05:00
John Colvin 0bdbc1897a chore (linux build): Add benign changes to satisfy clang13 2022-09-21 00:14:38 -05:00
John Colvin c3d9443a89 build: Automate venv activation in server build 2022-09-21 00:14:38 -05:00
John Colvin 400db13a78 build: Update cmake-min-version to 3.12
Several 'add_compile_definitions' calls were added to the root
CMakeLists.txt as part of the ccapi_cpp lib integration (3.12 is the
version in which that call was introduced)
2022-09-21 00:14:38 -05:00
John Colvin 1d7d5858d5 build: Add script to build sparkd (server)
Similar to the py script used to build spark (client), 'build_spark.py'.
2022-09-21 00:14:38 -05:00
John Colvin 8792f24c5d refactor (build): Move '_exit' to common module logging
Also rename 'exit_msg' since 'exit' is already a builtin fn
2022-09-21 00:14:38 -05:00
John Colvin 76d35b16eb refactor (build): Change SparkPaths to return Path objs 2022-09-21 00:14:38 -05:00
John Colvin 81f7fe72ab refactor (build): Move CWD & SparkPaths to common module file_utils 2022-09-21 00:14:38 -05:00
John Colvin 649ba11edb Update docker/linux 2022-09-21 00:14:32 -05:00
John Colvin 2fc6d7c262 Update externals
* Upgrade ccapi to v5.31.2
* Upgrade emumba to v3.0.6
* Update emumba license (good til 2023-08-01)
2022-09-19 17:50:40 -05:00
John Colvin 45421eedce chore: Move 'CME' specific script to 'cme' dir 2022-09-19 17:50:40 -05:00
John Colvin 8ecb3118e4 refactor (script): Use Path type rather than str 2022-09-19 17:50:40 -05:00
John Colvin 3fdb10890d chore: Rename scripts w/ consistent grammar 2022-09-19 17:50:40 -05:00
John Colvin 2a6224c88d chore: Move py scripts/utils into 'py' dir 2022-09-19 17:50:40 -05:00
John Colvin 8d6ddc8250 chore: Remove unused legacy scripts 2022-09-19 17:50:40 -05:00
John Colvin 6cc8590a1c build: Use venv python to execute buildspark.py
Previously, the virtual environment was activated in the Proto3 build target.
Since the proto3 build target is executed once per proto file, and 91 proto
files are processed during the client cs build, this added significant time to
the build. For example, on [John's]my laptop, activating the venv takes ~0.15s,
which amounts to ~9.55 secs per build.
2022-09-19 17:50:40 -05:00
John Colvin 063d908775 build: Remove unused legacy build script 2022-09-19 17:50:40 -05:00
John Colvin 93565f0ebf fix (jenkins): Update jenkins build procedures for spark-crypto 2022-09-19 17:50:40 -05:00
John Colvin 1d7fcf5d18 build: Move ':create_venv' fn to its own cmd script
So jenkins scripts can reference it as well as buildspark.cmd
2022-09-19 17:50:40 -05:00
John Colvin 897d20f12f build: Refactor buildspark.py so 'build' fn can be imported
This way, jenkins build/deploy py scripts can import 'buildspark.build', and thus
don't have to than re-invent the 'build' wheel
2022-09-19 17:50:40 -05:00
John Colvin a928925252 build: Add 'publish' target to build script for jenkins 2022-09-19 17:50:39 -05:00
John Colvin 4088affa15 fix (sparkd clang): Use 'clang' c compiler w/ 'clang++'
Otherwise cmake picks 'cc' by default

Bugs (fixed):
  * Sparkd crashes due to strange runtime error related to multithreaded access
    of std::promise in clang builds
2022-09-19 17:50:39 -05:00
Taha Afzal 7def6aacd2 MergedMDDaemon has a timer that can periodically remove expired contracts (not enabled right now) 2022-09-16 09:51:27 -04:00
Taha Afzal 94ae1780cd Expired contracts are filtered out from the risk report 2022-09-16 09:51:27 -04:00
John Colvin 2c65c4376b fix (orderbook): Invalid row view when qty display changes
Bugs (fixed):
  * Orderbook qty formatting is inconsistent across Orderbook instances. Within
    one Orderbook, the formatting does seem to be consistent.
2022-09-15 16:02:34 -04:00
John Colvin 68bb3dbfa1 refactor: Remove redundant member 'filled_quantity_text'
It is redundant since another prop, 'display_filled_quantity_text', returns the
exact same value. Eventually we should bring this prop back and replace the
'display_' one. The latter is a legacy prop, from the time before we had proper
Security metadata config. Removing the former for now because having both of
them causes needless confusion.
2022-09-15 15:58:23 -04:00
John Colvin 82a73693a6 fix: Post keyed theos to bus
They were already being created, just not published (perhaps due to a bad merge)
2022-09-15 15:39:38 -04:00
John Colvin 612cd4a4c8 fix: Remove refs to invalid 'default' SecurityImmutable
It's most (probably all) cases where a static 'default' SecurityImmutable is
used, a Nullable<SecurityImmutable> would more accurately represent the state,
which could likely (probably always) be described as "waiting for my real
security from an asynchronous source."

Bugs (fixed):
  * [Race] When Fills window opens, an exception is thrown if the sec-filter's
    items are sorted with a 'default' SecurityImmutable.

    Cause: The static default SecurityImmutable doesn't have an underlying sec
    type (i.e., ContractOneofCase == None). The compare fn doesn't support
    this.

    TODO (maybe): It might be a good idea to 'fix' the compare fn as well
    (i.e., make it support 'None' sec types)

TODO (probably): Remove remaining references to the static default
SecurityImmutable
2022-09-15 15:39:38 -04:00
John Colvin b3828dfc53 refactor: Add lazy param factory logic to SparkCommand
Some SparkCommands convert their parameter to another object that is posted to
the bus when the command is executed. The lazy param factory logic allows those
SparkCommands to hold off on converting the parameter until just before execution.
Thus, these SparkCommands naturally avoid passing invalid parameters to the
delegate (assuming the 'can_execute' evaluates to false for invalid parameters).
2022-09-15 15:39:38 -04:00
John Colvin 01f26567ed refactor: Get rid of SecurityGrid base class
It was pretty old code, and needed to be removed due to its dependence on
non-null SecurityImmutables. The 'default' SecurityImmutable object is invalid,
and throws in its property accessors since the underlying Security object is null.
2022-09-15 15:27:35 -04:00
John Colvin 90d21c9c15 refactor (synth man): No need to support vm reassignment
This was over-engineering..it made things complicated for zero benefit
2022-09-15 15:27:35 -04:00
John Colvin 6351c1340e refactor: Rename SelectManyInSeries -> SelectSeries
Shorter is better in this case
2022-09-15 15:27:35 -04:00
John Colvin 18cdddf76d git: Remove phantom submodule
Can't recall why 'deribit-crypto-connector-demo-application' was added as a
submodule in the first place. It has no actual corresponding files in the main
repository, just an entry in the '.gitmodules' file. Removing it now because
it's causing jenkins builds to fail (jenkins attempts to clone all submodules
in the .gitmodules file, and it doesn't have access permission on this one).
2022-09-08 22:07:05 -04:00
John Colvin b14c8bb1ac Update docker/linux
* Get ccapi deps again (after rebasing the 'ccapi deps' commit in
  docker/linux)
* Upgrade dotnet from a mixture of v2 & 3 to v6.0
2022-09-04 14:37:59 -04:00
John Colvin ceff286120 fix build (server w/ ccapi-disbaled): Add ifdef SPARK_ENABLE_CCAPI ppds 2022-09-02 11:48:12 -04:00
John Colvin 59aa4677e8 Update docker/linux
To get rapidjson-dev (ccapi dep)
2022-09-02 11:31:58 -04:00
John Colvin 996cd4c856 fix (ladder settings ui): Init 'use_self_security' properly
When loading settings obj
2022-09-02 10:30:08 -05:00
John Colvin 9287149c26 refactor: Clean up 'bts.api.core.Result<T>'
Impl ToString while we're at it
2022-09-02 10:14:02 -05:00
John Colvin 306b56a999 fix (hopeful): Make sure callback disposed after subscription
Hopefully this fixes the 'Garbage Collected callback' crash on login
2022-09-02 09:45:02 -05:00
John Colvin 812cf0a43f fix (man fills ui): Remove erroneous extra ladder button 2022-09-02 09:42:25 -05:00
John Colvin 2c539fd833 ui (ladder settings): Select self in sec-picker by default
For pre-existing fair value lines (this behavior's already implemented for new
fair value lines)
2022-09-01 11:07:51 -04:00
John Colvin 334295ed67 fix (ladder settings ui): Fix typo in binding
Resolve discrepancy between between xaml/cs

Bugs (fixed):
  * Color palette section is empty in Fair Value Line color picker
2022-09-01 01:25:58 -04:00
John Colvin c157b9cdfd ui (ladder): Add 'Use Self Security' checkbox to settings ui
Incorporate it into the settings protobuf by making the security_key field
nullable and allowing 'null' to mean 'Use Self Security'
2022-09-01 01:21:09 -04:00
Taha Afzal 8280b7a815 Fixing Deribit order minor issues that were causing the spreader to cancel its child orders 2022-08-31 15:17:35 -04:00
Taha Afzal fb7f982c65 Improving the logs 2022-08-31 15:17:35 -04:00
John Colvin 75b50d93e8 feat (orderbook): Add button to launch Ladder 2022-08-31 01:13:42 -04:00
John Colvin 865bdac9df refactor: Enable nullable in LadderWindow.cs 2022-08-31 01:13:42 -04:00
John Colvin ebe5f468d7 feat (open orders): Add button to launch Ladder 2022-08-29 22:54:48 -04:00
John Colvin 1bc8d886f4 fix: Don't reopen window on synchronous shutdown
Even if 'e.Cancel' is true, as the initial 'Closing' event is always canceled
to allow for asynchronous teardown
2022-08-29 22:54:48 -04:00
John Colvin 38e352e0d3 feat (man fills): Add button to launch Ladder 2022-08-29 22:54:48 -04:00
John Colvin f6079e7031 refactor: Clean up ManualFillsWindowFactory
After refactoring the shell window logic into new 'ManualFillsWindow' class
2022-08-29 22:54:48 -04:00
John Colvin 8c51488190 refactor: Make proper ManualFillsWindow class
Instances of this class are generated instead of 'anonymous' shell windows.
This makes for cleaner code, better stack traces, etc.
2022-08-29 22:54:48 -04:00
John Colvin 9aad08ada6 feat (day fills): Add button to launch Ladder 2022-08-29 22:54:48 -04:00
John Colvin 2d3d11ba59 fix (ui): Set disabled animation KeyTime to 0
Bugs (fixed):
  * The disabled button animation in SparkMenu (toolbar) is laggy
2022-08-29 22:54:47 -04:00
John Colvin 6087953185 feat (fills): Add button to launch Ladder 2022-08-29 22:54:47 -04:00
John Colvin 851654c8a5 feat (rec rep): Add button to launch Ladder 2022-08-29 22:54:47 -04:00
John Colvin 57a4745e29 feat (ladder): Add 'Theo' fair value line 2022-08-28 14:13:10 -05:00
John Colvin 32cd00895e fix: Add null check in ContractPickerVM
The ContractPickerPopup's SecurityMap binding source may produce null values
during normal operations (esp when opening/closing the popup, as the binding
source may depend on visuals that are initialized/destroyed when the popup
opens/closes).
2022-08-28 13:51:04 -05:00
John Colvin dee5f2684f fix: Add 'IsEnabledForegroundConverter' to ResourceDictionary
Bugs (fixed):
  * Client crashes when ladder settings dialog is opened
2022-08-28 13:21:27 -05:00
John Colvin f639a526cf refactor: Consolidate Co2 & md dirs into MarketData dir 2022-08-28 11:16:56 -05:00
Taha Afzal d168d8712e Added Keyed Theos that can be used to get theos from security ids 2022-08-25 11:58:54 -05:00
John Colvin 78a9605383 Update docker/linux
To get latest cmake
2022-08-24 01:34:38 -05:00
John Colvin a713b1018e fix (preemptive pnl): Actually use eq_comparer member
To determine when value changes occur (when to raise prop-changed event, etc.)
2022-08-23 16:54:31 -04:00
John Colvin 9f626dd10c ui (launcher): Use consistent margin between buttons 2022-08-23 16:54:31 -04:00
John Colvin 8ec7fdd60a ui (launcher): Remove pointless separator bar 2022-08-23 16:54:17 -04:00
John Colvin ffb2245ae6 refactor: Clean up immutable.pb.cs code-gen template a bit more
So the generated code more closely follows our formatting practices
2022-08-23 16:54:17 -04:00
John Colvin 21051c9a0b fix (pnl): Support Exp group popups filtering 2022-08-23 16:54:17 -04:00
John Colvin 1c8bd34144 ui (launcher): Remove pointless Help button 2022-08-23 02:29:05 -04:00
John Colvin f614fb7e7d ui (pnl): Indicate 'has day trades' w/ check mark
Instead of 'Yes/No'
2022-08-22 17:10:03 -04:00
John Colvin b222cd3e55 ui (pnl): Drop border between group/section headers
It needlessly clutters the ui, since the contrasting backgrounds already
illustrate the distinction
2022-08-22 16:55:18 -04:00
John Colvin 4f2be64813 ui: Rename 'P&L' -> 'P&L Summary', 'Day P&L' -> 'P&L Day Fills' 2022-08-22 16:43:31 -04:00
John Colvin bfb73ffc5a refactor: Add 'Freeze' prop to BTSBrushExtension 2022-08-22 16:08:40 -04:00
John Colvin 9bb7025752 fix: Don't share nonfrozen Brushes across threads
Bugs (fixed):
  * Grid settings dialogs crash when multiple are opened on diff threads

  Cause: Brushes (and all Freezables) that haven't been frozen throw an ex when
  any Dependency Properties are accessed from a thread that isn't associated
  with their Dispatcher (i.e., the thread on which they were created).
2022-08-22 16:08:40 -04:00
John Colvin bbfbd0b691 ui (launcher): Drop 'Reports' from buttons in Analytics module
Also change 'Vol Surfaces' -> 'Vol Surface' to be consistent (dropping
'Reports' from the other buttons made them singular)
2022-08-22 11:41:10 -04:00
John Colvin 5628e96a90 ui: Speed up expand/collapse animation in settings dialogs 2022-08-22 10:03:28 -04:00
John Colvin ef517b7554 ui: Reduce column resize-grip width
It blocks too much of the column filter's clickable area
2022-08-22 01:46:01 -04:00
John Colvin ba06af327d ui (slide, combo): Drop ':' in last trade desc 2022-08-22 01:30:31 -04:00
John Colvin b8b03172bc ui (slide): Display vol save & update times adjacently 2022-08-22 01:30:31 -04:00
John Colvin fb5c3c1e6e fix (orderbook-panel): Stretch visible items to fill dead space
Clean up the OrderBookView's VisualState's a bit in the process. Set each
item's visibility to 'Collapsed' by default, and flip to 'Visible' in the
VisualStates
2022-08-22 01:30:31 -04:00
John Colvin faaa7b11d4 fix (orderbook-ladder): Auto scroll to selected order
This used to work, not sure when it broke
2022-08-22 01:30:31 -04:00
John Colvin 92a0467e1e fix (orderbook-ladder): Detect LadderVM changes w/ default Equals
Bugs (fixed):
  * OrderBook ladder doesn't show orders
  * OrderBook ladder doesn't allow user to scroll beyond initial price range

  Cause: Both bugs occur because the LadderVMContainer doesn't detect LadderVM
  instance changes unless LadderVM.security has changed
2022-08-22 01:30:31 -04:00
John Colvin 3bb2025ea2 fix (ladder): Make sure price-range 'busy' is flipped back to false
Once the async price-range-shift op is completed
Bugs (fixed):
  * Can't scroll beyond initial price range in orderbook ladder

  Cause: The LadderGridHost's price-range-shift 'busy' flag gets stuck to false
2022-08-22 01:30:31 -04:00
John Colvin f2730ff0d7 doc: Add documentation for Task.ignore ext 2022-08-22 01:30:31 -04:00
John Colvin 7fcff9e5b4 refactor: Clean up MarketViewAnimation code a bit 2022-08-22 01:30:31 -04:00
John Colvin 51f83f4880 refactor: Rename 'HashCode.with' -> 'with_values'
Repurpose 'with' to accept a single value
2022-08-22 01:30:31 -04:00
John Colvin 88cb510aea refactor: Remove the ulong 'lldatetime' ext
It's too esoteric. Most ulongs don't represent an 'LLDateTime'
TODO: Consider removing the uint 'argb' extensions for same reason
2022-08-22 01:30:14 -04:00
John Colvin 452c642af0 refactor: Rename TryFirst ext FirstOrNull
Also move to it from APIExtensions to EnumerableExtensions
2022-08-22 00:05:08 -04:00
John Colvin 3fafc5004e refactor: Clean up LazySubscription, move to Spark.Core.Disposables ns 2022-08-22 00:05:07 -04:00
John Colvin fd8e502140 refactor: Lock private obj (not 'this')
'Lock(this)' is generally bad practice. It's better to use an explicitly named
var that is minimally accessible to outside callers to reduce risk of deadlocks.
2022-08-22 00:05:07 -04:00
John Colvin b499a5c38b refactor: Move IDisposable utils to Spark.Core.Disposables ns
* Move Anonymous/FinalizableDisposable to own file
* Rename DisposableCombo -> ImmutableDisposable and move it to its own file
* Clean up IDisposable utils impl, but keep changes to calling code minimial
2022-08-22 00:05:04 -04:00
John Colvin 2320383b16 refactor: Remove DisposableContainer class
It's innately antithetical to the Dispose pattern, as it can never truly be
disposed
2022-08-22 00:03:11 -04:00
John Colvin 59b3e73330 fix: Assign IDisposable to _dispose member (not local var)
So it is properly disposed, and not just eventually collected by GC
2022-08-22 00:03:11 -04:00
John Colvin 9d9a1b86c4 fix: Fix typo in 'init_auto_login'
The 'SubscribeClosed' call should be executed immediately, and the returned
IDisposable disposed when 'login_hooks' is disposed (prior to this commit, it
wasn't calling 'SubscribeClosed' until login_hooks was disposed)
2022-08-22 00:03:11 -04:00
John Colvin 21cc2cefbf refactor: Un-nest SelectorWrapper class, rename SelectorList 2022-08-22 00:03:11 -04:00
John Colvin 904df4260d fix (preemptive): Fix typo in SelectorWrapper list
Bugs (fixed):
  * [preemptive] SelectorWrapper.IsReadOnly is wrong

  Details: The fix is considered 'preemptive' because this prop is almost
  certainly not referenced. Nevertheless, the impl ought to be correct.
2022-08-22 00:03:11 -04:00
John Colvin af785d5d0b fix: Make sure ThreadSafeEvent uses same lock as owner 2022-08-22 00:03:11 -04:00
John Colvin 1d796856ca refactor: Make spark_api depend on spark_core (not other way around) 2022-08-22 00:03:11 -04:00
John Colvin 35f0d5a53f refactor: Split (Equality)Comparer utils up into modular classes 2022-08-22 00:03:10 -04:00
John Colvin 2b2fdd2b94 refactor: Remove borderline useless TaskExtensions
There were few references to these extensions, and many weren't referenced at all
2022-08-22 00:03:10 -04:00
John Colvin 9e4539a902 refactor: Remove unused code 2022-08-22 00:03:05 -04:00
John Colvin a76c8ffd98 fix: Fix typo 'is not null' -> 'is null'
Bugs (fixed):
  * Window size isn't restored if window has multiple tabs

  Cause: The typo flips the bool arg that indicates whether or not a window
  should be measured and fit to size (as happens when a window is opened for
  the first time)
2022-08-18 16:17:22 -04:00
John Colvin d7474cb8da fix (ui): Await settings-save before disposing IShellWindow
Bugs (fixed):
  * Can't reopen Fills windows via undo/redo in the BookMarks module

  Details:
    * Only applies to Fills windows closed via the tab-close 'x' button (not
      the window-close 'x' button)

    * Doesn't cause a crash, nor exhibit any side effects (aside from breaking
      undo/redo)

  Cause:
    * ISlow/SharedWindows (i.e., shell windows that run on bg threads) are
      disposed before the ISettingsCollector retrieves their state via
      'IShellWindow.SaveState'. The FillsWindow sets its _vm member to null
      when it is disposed, leading to a null-ref ex in its SaveState getter.
      This ex is caught (synchronously) and logged as an error, which explains
      the lack of side effects.
2022-08-18 13:57:44 -04:00
John Colvin 890a23a537 refactor: Rename AsyncEvent.invoke -> Invoke
To be syntactically consistent w/ csharp delegates (and the wpf Dispatcher,
which has Invoke/InvokeAsync methods)
2022-08-18 12:39:57 -04:00
John Colvin ab17eee260 refactor: Remove unused code 2022-08-18 12:39:57 -04:00
Taha Afzal acadc3bd7c Fixing merge conflict 2022-08-17 20:26:23 -04:00
Taha Afzal 8701fb7132 Fixing qty in ExchangeOpenOrders for fractional qty orders 2022-08-17 14:12:23 -04:00
Taha Afzal 89fcb3092b Fixing merge conflict 2022-08-17 12:54:27 -04:00
John Colvin c9856b96ae fix build (client): Remove erroneous using statement 2022-08-16 21:12:49 -04:00
John Colvin 04477a4b7c refactor: Don't copy strings 2022-08-16 21:08:53 -04:00
John Colvin 99371a2ead feat: Add Open Orders window 2022-08-16 17:25:03 -04:00
John Colvin 70487a8ef7 ui: Make 'B/S' the standard header for 'Side' cols
Until now, this header was hardcoded in OrderBookSettings
2022-08-16 17:25:03 -04:00
John Colvin 44c419fdaf refactor: Move bool-check converter from rec rep to common place
Will be used in the new Open Orders window
2022-08-16 17:25:03 -04:00
John Colvin 5eb151f9a0 refactor: Move common orderbook col headers to shared place
Specifically, col headers that will be used in the new Open Orders window, for
consistency's sake
2022-08-16 17:25:03 -04:00
John Colvin 855a939c51 refactor: Return obj from Log.not/isnull fns
For convenience, so these calls may be used in a chain like manner, etc.
2022-08-16 17:25:03 -04:00
John Colvin 7071d9b961 refactor: Add Not/MaybeNull attributes to Log.not/isnull fns
So the compiler recognizes these methods guarentee a particular result of
the expression 'obj is null'
2022-08-16 17:25:03 -04:00
John Colvin adf14491bc refactor: Check if obj is of type 'T' in Optional<T>.Equals 2022-08-16 17:25:03 -04:00
John Colvin 7e0e8f2801 refactor: Clean up Optional<T> 2022-08-16 17:25:02 -04:00
John Colvin 4a37e2d6a6 refactor: Implement IKeyedData in generated cs pbuf types
For convenience, so we don't have to pass key-selector lambdas all over the
place when dealing w/ IObservable<TableUpdate>s from the pbuf services
2022-08-16 17:25:02 -04:00
John Colvin 12b2371a69 style: Clean up api code-gen template immutable.pb.cs 2022-08-16 17:25:02 -04:00
John Colvin c19d173983 refactor: Move SecurityStore to spark_core, rename Resolver 2022-08-16 17:25:02 -04:00
John Colvin 203164f372 fix (preemptive): Init default UserSettings.day_fills_grid
This fix is preemptive because the hardcoded Day Fills defaults are automatically
used when the UserSettings.day_fills_grid member is null
2022-08-16 17:25:02 -04:00
John Colvin 6f69f1c2e2 fix (preemptive): Apply Day Fills settings migration rules
This is a preemptive fix bc as of now (8/14/2022), there are no Day Fills
migration rules
2022-08-16 17:25:02 -04:00
John Colvin ad1a585b5c refactor: Move Optional into Spark.Core 2022-08-16 17:25:02 -04:00
John Colvin f29e367ec7 refactor: Clean up ObservableSortedCollection
* Enable nullability
* Run formatter
* Add readonly specifiers where possible
* Improve documentation
2022-08-16 17:25:02 -04:00
John Colvin 18127383f0 refactor: Make IObservableCollection inherit IReadOnly 2022-08-16 17:25:02 -04:00
John Colvin b450c757c9 refactor: Move ObservableSortedCollection to Spark.Core.Collections 2022-08-16 17:25:02 -04:00
John Colvin 836683bcbe refactor: Move IObservableCollection to Spark.Core.Collections 2022-08-16 17:25:02 -04:00
John Colvin c271af30d8 refactor: Get rid of non-generic InsertRange ext 2022-08-16 17:25:02 -04:00
John Colvin 31fab94208 refactor: Get rid of non-generic AddRange ext
Most references to this fn were by generic IList<T>s. This resulted in error
prone, misleading code as such calls subtly bypass the compile-type type
constraints provided of the generic impl.
2022-08-16 17:25:02 -04:00
John Colvin a9b5067d7a refactor: Move fns from GlobalExtensions to less vague classes 2022-08-16 17:25:01 -04:00
John Colvin 7a31b025a2 refactor: Add 'ms' suffix to exch-open-order timestamp fields
Just to make it clear that they are milliseconds (not nanos, micros, etc.)
2022-08-16 17:24:52 -04:00
John Colvin 31897a1b2e refactor: Change exch-open-order record_id to auto-incremented int
To insulate ourselves from potential duplicate-id bugs at the exchange
2022-08-16 16:46:47 -04:00
John Colvin f93bc592cb fix: Set RetrievedExchangeOpenOrder.exchange_order_id
Bugs (fixed):
  * The 'exchange order id' field is empty in open orders data received
    by client
2022-08-16 13:22:38 -04:00
John Colvin 6ca2753951 fix (vs): Use precison in terms of actual data for eq comp
Bugs (fixed):
  * The tick up/down buttons have no effect for vol input cells

  Cause: The cell vm ignores some value updates because the equality
  comparer incorrectly considers the new value equal to the current one
  (because it doesn't use enough decimal places in the comparison)
2022-08-11 01:33:43 -04:00
Taha Afzal 470ca0093e Adding more logging helpers to VolSurfaceTroubleshootingFunctions 2022-08-10 20:54:10 -04:00
John Colvin 7e1715964f fix (vs): Pass the vm's 'current_grid' to the model
Bugs (fixed):
  * Cannot edit volsurface cell values (they are immediately reverted)

  Cause: The vm was passing the model's grid back to itself before, effectively
  undoing manual edits in cells
2022-08-10 18:27:41 -04:00
John Colvin 39e929a614 fix: Actually use eq-comp member in Property vm 2022-08-10 18:17:58 -04:00
John Colvin a9aa06f275 fix (vs): Actually use coulmn comparer in cell vm 2022-08-10 18:11:27 -04:00
John Colvin 54510c9e59 refactor (vs grid): Supress recalc reqs while processing update 2022-08-10 14:26:28 -04:00
John Colvin cb56429f04 refactor: Rename 'execute' -> 'Invoke'
To be consistent and interchangeable w/ System.Action
2022-08-10 14:26:28 -04:00
John Colvin ac8147cc0f refactor: Add 'implicit operator T(Optional<T>)' for convenience 2022-08-10 14:26:28 -04:00
John Colvin 82ac189ac9 refactor: Strip 'Wrapper' from 'DeferrableActionWrapper' name 2022-08-10 14:26:27 -04:00
John Colvin 5721ff78b6 fix (vs): Only request recalc when input changes (not output)
Bugs (fixed):
  * The volsurface grid can get into an endless loop of recalc requests
2022-08-09 15:56:05 -04:00
John Colvin 7afd2947f1 refactor: Clean up vs grid vms a bit
* Split vs-cell-vm classes up into own files
* Rename classes by changing 'VolGrid' prefix to 'VolSurface'
* Remove unused struct VolSurfaceCellState
* Enable nullable
* Run formatter
2022-08-09 15:55:40 -04:00
John Colvin c3e3862c5f refactor: Update vs cell 'is_dirty' synchronously when vals change 2022-08-09 02:57:35 -04:00
John Colvin bf2dc9ecca fix (vs grid): Account for nan & rounding error
Bugs (fixed):
  * The volsurface grid starts flasing is_dirty borders all over the place. The
    repro is inexact, but it seems to happen after inputs are changed a few
    times (perhaps from loading a previous volsurface).

  * The volsurface grid flashes is_dirty borders just from clicking on an input
    cell (even if no change is entered).
2022-08-09 02:57:35 -04:00
John Colvin e0e188a02c refactor: Enable NaN identity equality in tick_equals 2022-08-09 02:57:35 -04:00
John Colvin 79ba1654d3 fix: Fix typo in tick_equals fn 2022-08-09 02:57:35 -04:00
Taha Afzal 2aab0d18a5 Formatting slide exp, to look like PNL's 2022-08-08 23:45:02 -04:00
John Colvin 312c8ded11 fix (ui pnl): Add greek props to group row vm
Bugs (fixed):
  * Greek sums still aren't visible in group rows (though they are visible in
    Selected/Total header rows)
2022-08-08 16:11:25 -04:00
John Colvin 3f86779da6 ui (launcher): Move PNL menu items to Analytics module 2022-08-08 16:11:25 -04:00
John Colvin 716d3b8482 ui (day fills): Make title & icon consistent w/ PNL win 2022-08-08 16:11:25 -04:00
John Colvin 24f6dbc4f0 ui (day fills): Convert fill_time utc to local 2022-08-08 16:11:25 -04:00
John Colvin 3e943fa35e refactor (pnl): Add 'PNL' prop to Icons class
To make it clear which icon belongs to which window
2022-08-08 16:11:25 -04:00
John Colvin 457f878b41 ui (pnl): Change win title to 'P&L' to match launcher menu item 2022-08-08 16:11:25 -04:00
John Colvin ac2b2d042a refactor: Split WorkspaceProtos up into 1 class/file 2022-08-08 16:11:25 -04:00
John Colvin 829d2cdbf6 refactor: Provide ICloneable impl in IProtobuf<T> 2022-08-08 16:11:25 -04:00
John Colvin 3cd9693b36 diag (vs): Log cell vm 'is_dirty' changes 2022-08-08 16:11:25 -04:00
John Colvin 2b52ecf2ef perf (vs): Supress repeated 'is_dirty' updates
Before the updates reach the dispatcher thread
2022-08-08 16:11:25 -04:00
John Colvin faab60cbc1 ui (vs): Convert NaN to 0 when users clicks tick up/down 2022-08-08 16:11:25 -04:00
John Colvin b6be0d649d fix (vs): Don't throw ex if parse_double input is null
Bugs (fixed):
  * Previous vol surfaces may have missing data, which can lead to an assert
    crash in the parse_double fn
2022-08-08 16:11:25 -04:00
Taha Afzal 2a65c45d21 Theos/Greeks are still produced if AW2 window is not loaded 2022-08-08 16:00:48 -04:00
Taha Afzal dc6ae2ac29 Removing P from the names of greek columns in Day PNL 2022-08-08 11:53:56 -04:00
Taha Afzal df4250c33a Hooking AW2 populate empty exps 2022-08-07 22:03:50 -04:00
John Colvin 53504ef6f0 ui (pnl): Improve default settings 2022-08-07 15:18:16 -04:00
John Colvin 10afb1af06 ui (pnl): Show greek sums in group/header rows 2022-08-07 14:59:00 -04:00
John Colvin a9149dfa87 refactor: Clean up PNLNormalizedData
* Use new lang feats: nullable, and 'init' prop setters
* Group 'sod', 'day', and 'working' members in respective groups
* Run formatter
2022-08-07 14:39:44 -04:00
John Colvin 5afa6695e7 fix (pnl view): Enforce min height for 'Selected' header row 2022-08-07 13:51:55 -04:00
John Colvin d2a6d54090 refactor (pnl): Replace dyn resources w/ Bindings in xaml
Traditional Bindings are more performant than DynamicResources, and make for
cleaner code
2022-08-07 13:51:55 -04:00
John Colvin 794ac25c01 log: Change 'Begin/End' tags to 'BEG/END' in log_op ext
Improves readability of log_op logs

* Gives the 'BEG/END' tags a uniform width, so their msg bodies will align
* All caps makes the tags stand out

Improves readability by providing uniform width to the BEG/END tags
2022-08-07 13:51:55 -04:00
John Colvin 37214e9480 refactor: Make msg body param optional in 'fn' logger exts 2022-08-07 13:51:55 -04:00
John Colvin 90ab551778 ui (day fills): Format dates in exp col filter 2022-08-07 13:51:54 -04:00
John Colvin 9a4ec46440 fix: Don't begin shutdown til after workspace saved (async)
Bugs (fixed):
   * Seems like only one window's settings are restored w/ workspace
2022-08-07 13:51:54 -04:00
John Colvin c86d283755 fix: Supress empty TableUpdates in 'distinct_on'
Bugs (fixed):
  * Discrete values column filters (i.e., multi-selector views) that are driven
  by 'distinct_on' IObservable<TableUpdate> deselect items when the main
  grid data changes

  Cause: When processing updates from the input IObseravble, the 'distinct_on'
  ext doesn't check if the new/old results are equal. This in turn causes the
  selector-view to remove, then re-add items that didn't actually change.
  Exhibiting reasonable behavior, the view deselects items when they are removed
  from the ItemsSource.
2022-08-07 13:51:54 -04:00
John Colvin 941956c1b5 fix: Actually supress false changes in 'to_table_checked' ext 2022-08-07 13:51:54 -04:00
John Colvin 67e3d22104 style: Fix typo in param name '_selector' -> 'selector' 2022-08-07 13:51:54 -04:00
John Colvin 7e41c93f9a refactor: Rename PNLFilterStates -> PNLFilterSettings 2022-08-07 13:51:54 -04:00
John Colvin 086ccbb3fa refactor: Weaken T constraint for is_within_range ext
There is no reason T has to implement IFloatingPoint<T>
2022-08-07 13:51:54 -04:00
John Colvin 329ddc576d ui (day fills): Add (groupable) exp column 2022-08-07 13:51:54 -04:00
John Colvin 1faef425ab refactor: Consolidate format_expiration fns into single fn 2022-08-07 13:51:54 -04:00
John Colvin bb068cf6b2 fix (preemptive): Add 'Option' case to exp switch expr 2022-08-07 13:51:54 -04:00
John Colvin f7cade41c6 ui (day fills): Fmt qty cols w/ sec-meta display settings 2022-08-07 13:51:54 -04:00
John Colvin 47afd3a911 ui (day fills): Hide bid/ask cols by default 2022-08-07 13:51:54 -04:00
John Colvin ef80d2a41d ui: Shorten a few default column widths
Namely: Account, Exchange, and Symbol
2022-08-07 13:51:53 -04:00
John Colvin 44ef080e9f ui (day fills): Format theo and driver w/ 4 dec places
With the caveat that future fills' drivers are formatted according to their own
tick factors (i.e., same as the "price" column). This should be good/reasonable
behavior because in rare cases where futures don't drive themselves, they are
most likely driven by a neighboring expiration with the same price display.
2022-08-07 13:51:53 -04:00
John Colvin fef8d2c413 ui (day fills): Format price w/ sec's tick factors 2022-08-07 13:51:53 -04:00
John Colvin 201746e561 fix (day fills): Init column models w/ settings
Bugs (fixed):
  * Day fills column settings are not restored with workspace

  Cause: This is a kind-of re-entrancy bug.  When the SimpleGridSettingsManager
  attempts to load the initial column settings, it assigns props in the column
  views. When the width prop is set, the column view forwards the new width to
  the model, which causes the model to fire a settings_changed event, which
  pipes the model's settings (which have not been fully initialized) back to
  the view.
2022-08-07 13:51:53 -04:00
John Colvin 8e375a0b7f ui (day fills): Use qty fg to indicate fill side
Rather than using the row bg, this gives the win a subtler, more modern look
2022-08-07 13:51:53 -04:00
John Colvin 045f3dc060 chore: Move ValueConverter into own file 2022-08-07 13:51:53 -04:00
John Colvin 6b6012236d ui (day fills): Add pnl, delta foreground triggers 2022-08-07 13:51:53 -04:00
John Colvin 9cee798939 chore: Set ModalStateDefinition ContentProperty
For convenience in xaml (so ModalStateDefinition.Source can be defined without
explicit tag)
2022-08-07 13:51:53 -04:00
John Colvin c79bdb12e0 refactor: Make ActivityLogCategories readonly props 2022-08-07 13:51:53 -04:00
John Colvin bce77d65de fix: Add null check in OptionsView
Bugs (fixed):
  * If an Options View window is launched w/ "incomplete" security criteria
    (i.e., not a tuple of Exch, Type, Sym), a null ref crash happens when the
    window is restored with the workspace.
2022-08-07 13:51:53 -04:00
John Colvin 0db814ef2d fix (rec rept): Use tick-factors to avoid rounding errors
Bugs (fixed):
  * Reconcile Report can show false positive price mismatch

  Cause: The epsilon const (1E-12) used in the price comparison too small.
  Evidently, the Deribit-position prices provided to the Reconcile Report are
  only accurate up to 9 decimal places.
2022-08-07 13:51:53 -04:00
John Colvin 31b5ec4bd3 fix (fills view): Change side col base class row type to the vm
Bugs (fixed):
  * In the Fills window, side column cells are empty
2022-08-07 13:51:52 -04:00
John Colvin e15cdfd76e refactor: Add get bg/fg delegates to RenderColumnBase
These colors are frequently functions of the rows; now such cases don't require
implementation in classes that derive from RenderColumnBase
2022-08-07 13:51:52 -04:00
John Colvin eb150ba82c chore (ui): Hook up background setting in OrderTypeColumn 2022-08-07 13:51:52 -04:00
John Colvin d763275179 fix (ui preemptive): Bind horiz align setting to horiz content align
Bugs (fixed)
  * (preemptive) The OrderTypeColumn root border doesn't span the width of the
    column.  This would happen if the column's background was a
    non-transparent brush, and horizontal alignment wasn't stretched.
2022-08-07 13:51:52 -04:00
John Colvin 2b96a8a5c4 ui: Enable grid background setting in all windows
And remove bool props that were used to toggle this behavior
2022-08-07 13:51:52 -04:00
John Colvin 31866c76b7 chore (vs graph): Add tick_line_color setting 2022-08-07 13:51:52 -04:00
John Colvin a2da946e03 fix (vs graph): Actually use axis_line_color setting in vm
Bugs (fixed):
  * The vs graph axis line color setting is ignored
2022-08-07 13:51:52 -04:00
John Colvin 528bab34e7 chore: Show color name in ColorNotFoundException msg 2022-08-07 13:51:52 -04:00
John Colvin 776b9e4f94 chore: Remove '_color' and '_brush' props from BTSColors
The BTSColor props are implicitly convertible to both System.Windows.Media.Color
and Brush
2022-08-07 13:51:52 -04:00
John Colvin 168d328e97 chore: Clean BTSColorExtension 2022-08-06 23:54:15 -04:00
John Colvin f871dbd230 chore: Add 'Pure' attr to is_null_or_empty ext 2022-08-06 23:54:15 -04:00
John Colvin 1662b56ea0 refactor: Clean up ReflectionHelper a bit
* Rename '(static_)property_delegates_of_type' -> '(static_)property_getters',
  and include name w/ prop getters
* Rename 'FindApplicableConstructor' -> 'get_constructor'
* Remove unused fns
2022-08-06 23:54:15 -04:00
John Colvin f3302dbac0 fix (ui): Validate width/height before updating DragRectAdorner 2022-08-06 23:54:15 -04:00
John Colvin 181072f3e7 chore: Clean up ui settings classes
* Move most settings files into new dir 'Model/Settings'
* Conform code style to our current practices
2022-08-06 23:54:15 -04:00
John Colvin f654312123 chore (refactor): Move synth mgmt settings classes into sep files 2022-08-05 13:41:37 -04:00
John Colvin c46d97646a fix: Gather individual win settings on dispatcher thread
In practice, window-states live on their respective dispatcher threads.
Window settings factories shouldn't be expected to be thread-safe.
2022-08-05 13:41:37 -04:00
John Colvin 41742359e9 fix (vs ui): Don't clip vs time sched ui 2022-08-05 13:41:37 -04:00
John Colvin 024723925e ui (vs grid settings): Constrain window height 2022-08-05 13:41:37 -04:00
John Colvin 76b834768e style: Clean up spark.csproj 2022-08-05 13:41:37 -04:00
John Colvin 89284bea87 build: Upgrade csharp nuget pkgs 2022-08-05 13:41:37 -04:00
John Colvin 532154640b refactor: Replace PNLCellAppearance ctr w/ 'init' props 2022-08-05 13:41:36 -04:00
Taha Afzal ab8468d498 Added function in VolSurfaceDisplayModel to populate empty exps 2022-08-04 18:42:15 -04:00
Taha Afzal 84b0332778 Better logs for the case when Deribit's open orders's security can not be resolved 2022-08-03 23:53:57 -04:00
Taha Afzal 20b601f290 Fixed the crash related to querying Deribit for open orders 2022-08-03 16:57:10 -04:00
Taha Afzal 47002cae4c This PNL fix change was accidentally merged out 2022-08-03 08:47:50 -04:00
John Colvin eaaffe369a Fix typo typeof(HyperlinkCell) -> typeof(TextCell) 2022-08-03 00:07:39 -04:00
John Colvin 7292a31c00 fix (rec rep): Save grid settings w/ workspace 2022-08-03 00:07:39 -04:00
John Colvin 389d762a93 ui (launcher): Drop "2" in "P&L 2" menu item
It was leftover from the transition to the "new" pnl window (which hasn't been
new since 2019)
2022-08-03 00:07:39 -04:00
John Colvin 9704ebf096 style: Move ReconcileReportModel into rec rep dir 2022-08-03 00:07:39 -04:00
John Colvin de320338ca ui (launcher): Group 'Fill' menu items together 2022-08-03 00:07:39 -04:00
John Colvin 668dfd9130 feat (ui): Add Day Fills win 2022-08-03 00:07:39 -04:00
John Colvin a2960b23a8 refactor (ITradeLogRow): Rename trader -> user, add user_id
Use consistent nomenclature throught the sys
2022-08-03 00:01:02 -04:00
John Colvin 55744edc25 refactor: Move SecurityDataHelper.Defaults into Security class 2022-08-02 13:24:48 -04:00
John Colvin 7ece5d18cb refactor: Move sec 'key_fn' into Security class 2022-08-02 12:37:46 -04:00
John Colvin 8005ac8635 refactor: Name top_of_book tuple items bid/ask 2022-08-01 21:56:07 -04:00
John Colvin c00a71fdfa chore: Add fill_kind to ITradeLogRow 2022-08-01 11:14:29 -04:00
John Colvin 197c915968 Remove erroneous font_size binding in xaml
Each cell's font size comes from its associated column object (not the cell vm)
2022-08-01 11:14:29 -04:00
John Colvin 6d77a07bbe fix: Load grid-level settings in pnl window
Font family/size/weight, foreground, background
2022-08-01 11:14:29 -04:00
John Colvin adfb560dd1 chore: Post users-map on the bus 2022-08-01 11:14:29 -04:00
John Colvin 508d20e4e0 refactor: Rename ITradeLogRow.trade_key -> order_key
This is what it actually is; the trade_key misnomer was ported from edge
2022-08-01 11:14:29 -04:00
John Colvin 72457619f7 chore: Move IPositionModel to Spark.Trading ns 2022-08-01 11:14:29 -04:00
John Colvin 18d5b83a95 chore: Replace anon pnl win w/ proper PNLWindow class
The PNL window is too complex/terse to be nested anonymously in the
PNLWindowFactory class.  This makes the code cleaner/easier to read.
2022-08-01 11:14:29 -04:00
John Colvin 653362b947 chore: Make 'Safe' IEnumerable exts accept nullable ref types 2022-08-01 11:14:29 -04:00
John Colvin b7477b8f93 fix (fills ui): Add back 'Fill Status' col
Not sure when/why it went missing
2022-08-01 11:14:29 -04:00
John Colvin 105f1fceaf ui (pnl): Increase sec column default width 2022-08-01 11:14:29 -04:00
John Colvin cb65489ab7 fix (combo vm): Fix typo when assigning swipe_sum net/calls/puts
Bugs (fixed):
  * The swipe sum net/puts are swapped in combo status bar
2022-08-01 11:14:29 -04:00
John Colvin 96772727df fix (exp params): Ensure auto-picked driver has right sym 2022-08-01 11:14:29 -04:00
John Colvin 960a618fe1 fix: Bind pnl account col to AccountTuple
Bugs (fixed):
  * The group-row pnl cell hyperlinks don't open anything when clicked

  Cause: An InvalidCastException is thrown when the code that creates the fills
  vm (for the popup) casts 'PNLRowCollectionViewGroup.Name' to an AccountTuple,
  as said 'Name' member is bound to the 'account_name' (of type string).
2022-08-01 11:14:29 -04:00
John Colvin 505cd37225 chore: Assert that PositionPriceSize.GetHashCode isn't invoked
Impl doesn't guarentee equal objects produce the same hash
2022-08-01 11:14:28 -04:00
John Colvin a5f66b8ac6 feat: Add greeks cols to pnl view (for options) 2022-08-01 11:14:28 -04:00
John Colvin 2021f29f62 feat: Support options in pnl view 2022-08-01 11:14:28 -04:00
John Colvin 9ccf3e0f87 chore: Remove UTF-8 BOM from pnl files 2022-08-01 11:14:28 -04:00
John Colvin 7cfc53eba8 refactor: Make sum_real ext generic (IFloatingPoint<T>)
Also add bool param 'nan_if_none' (to return NaN instead of 0 when values
contains no real numbers)
2022-08-01 11:14:28 -04:00
John Colvin f9d269c750 chore: Add account_id to ITradeLogRow, IPNLUnit 2022-08-01 11:14:28 -04:00
John Colvin 67d5161fd1 chore: Dispose _pnl_calc in ReportDaemon.Dispose
This wasn't causing any problems in practice (this class is instantiated once
on startup and never gets disposed).  However, since it implements IDisposable,
might as well do it correctly.
2022-08-01 11:14:28 -04:00
Taha Afzal d6e9bbce71 Something funky, not sure why it is showing as touched 2022-08-01 11:14:28 -04:00
John Colvin 76ec2c0fa2 fix: Pass key_fn to TableUpdate Operate ext
Bugs (fixed):
  * PNL window crashes immediately when opened

    Cause: The 'Operate' ext fn aggregates an IObservable of TableUpdates w/
    another IObservable of any T.  If the latter fires before the former, an
    'empty' TableUpdate is passed to the aggregate fn.  When this happens, a
    null ref ex is thrown in the 'empty' TableUpdate's ctr because the key
    param is null.
2022-08-01 11:14:28 -04:00
Taha Afzal e82a2c9402 Added Day PNL trades to PNLData 2022-08-01 11:14:28 -04:00
Taha Afzal 60ce106e24 Fixing a PNL crash which was caused by options for a symbol being temporarily null 2022-08-01 11:14:28 -04:00
Taha Afzal 1eb4952422 Added Control Keys to sheets, Ctrl + right click always brings up the context menu, Ctrl + market always brings up the ladder 2022-08-01 11:14:28 -04:00
Taha Afzal 3043582889 Improved some log messages 2022-08-01 11:14:28 -04:00
Taha Afzal f604db6517 Reorganized PNL calculator and associated types 2022-08-01 11:14:28 -04:00
Taha Afzal f95b0c19d7 Added PNL Calculation code 2022-08-01 11:14:28 -04:00
taha afzal 655bf87e92 Fixing open orders callback (was firing intermittent callbacks) 2022-07-22 16:36:52 -04:00
taha afzal 6d06a1920d OrderServiceServer now publishes open orders 2022-07-22 15:16:03 -04:00
taha afzal 70af51e163 ExchangeOpenOrders are now routed all the way to OrderServiceServer 2022-07-21 20:36:17 -04:00
taha afzal 2c17fe334e Added Exchange Open Orders function to IExecutionGateway 2022-07-21 00:38:15 -04:00
taha afzal 5eca2cd3ac Exchange Open orders are routed all the way to EMExecutionGateway 2022-07-20 20:13:56 -04:00
taha afzal 4b5ff8cad4 Adding AsyncRequestHelper to EmMDListener, that allows code to be shared bw positions and open_orders request 2022-07-20 15:29:25 -04:00
taha afzal 89d5b25cc7 For EmMDListener, added a limit of 5 pending calls for positions, after which the counter is reset is positions are re-requested 2022-07-12 17:03:19 -04:00
Taha Afzal 3e10d403b4 Combo Report now listens to the sectups in the report configuration 2022-07-12 09:35:42 -04:00
Taha Afzal 1ebf06d49a Slide report filters the securities based on the security tuples passed in the report 2022-07-12 09:35:42 -04:00
Taha Afzal 2be857a851 Forcing qty's to be rounded to 2 2022-07-12 09:35:42 -04:00
John Colvin 1de22a82e8 fix (combo settings ui): Refresh 'result' when sec criteria changes
Bugs (fixed):
   * In Combo settings dialog, security criteria changes aren't committed to
     server if they are the last prop changed before OK click
2022-07-12 01:00:51 -04:00
John Colvin f275308cc8 build (client cpp): Remove ZERO_CHECK.vcxproj from spark_client.sln
The new cmake generates ZERO_CHECK.proj instead, which doesn't need to be
included in the sln. I think this change was introduced in v 3.22.

Devs: This won't break the build for older versions of cmake, although you may
need to manually touch "CMakeLists.txt" when you add/remove build src files
2022-07-12 01:00:44 -04:00
taha afzal 79de0dd4d8 Removed exchange from sub acocunt config 2022-07-11 21:13:05 -04:00
taha afzal 5cedf74406 Merge branch 'spark_crypto.multiple_accounts' into spark_crypto.dev 2022-07-11 17:44:02 -04:00
taha afzal e5de6b4ad7 Changed the relationship of internal account to sub account to simple 1:1 2022-07-11 17:28:53 -04:00
John Colvin e467195de1 chore (combo vm): Let end observer call OnDispatcher
This behavior could arguably be coupled with a Subscribe call, since its whole
purpose is to ensure subscription callbacks occur on the dispatcher thread.
2022-07-11 17:22:44 -04:00
John Colvin 913a5b4a7e ui (combo settings): Show contract picker 2022-07-11 17:22:44 -04:00
John Colvin feb8bd9b79 ui (slide settings): Show contract picker 2022-07-11 16:55:23 -04:00
taha afzal 846ecfa776 Fixed the reconcile issue where if the security existed in multiple accounts it was getting surpressed in one 2022-07-11 13:27:10 -04:00
taha afzal d98fb399a8 Exchange Positions can now be obtained for multiple sub accounts 2022-07-09 01:40:28 -04:00
taha afzal 4a1c1d023a Changes to accomodate the EM API change for mulitple accounts 2022-07-06 16:42:04 -04:00
taha afzal 43cba548f4 Adding some details to the logs to track order flow 2022-06-24 15:05:15 -04:00
taha afzal 772910ffe5 Fixing filled qty's fractional part not being filled on the server 2022-06-23 14:38:57 -05:00
John Colvin 767179caf7 chore (man fills): Format qty w/ sec metadata config 2022-06-23 14:38:57 -05:00
John Colvin ee4a9150b8 refactor (man fills): Rename 'size' members 'quantity' 2022-06-23 14:24:04 -05:00
John Colvin 58914fa703 chore: Replace remaining refs to uint 'filled' fn w/ double impl 2022-06-23 14:24:04 -05:00
John Colvin ba40e7044a fix (ladder, preemptive): Fix typo in _fmt_mkt_depth_item
Bugs (fixed):
   * The _fmt_mkt_depth_item fn potentially will return the result of the
     delegate.ToString(), instead of invoking the delegate and returning the
     result
2022-06-23 14:10:15 -05:00
John Colvin 010d0073fe chore: Set BTC qty display config defaults 2022-06-23 02:05:23 -05:00
John Colvin 40210ce42e chore: Remove unnecessary price_display config default 2022-06-23 01:35:22 -05:00
John Colvin 59cdafba21 fix: Don't cast manual fill qty to uint 2022-06-23 01:22:09 -05:00
John Colvin fe6226baa5 ui (reconcile rep): Match all undefined positions
Now, all positions without real non-zero quantities are considered matches
2022-06-23 01:19:27 -05:00
John Colvin 45987c7652 feat: Show fractional qty in orderbook Filled col 2022-06-22 16:04:24 -05:00
John Colvin a18ce97fb4 feat (ui): Support fractional qtys for order entry 2022-06-22 15:38:38 -05:00
John Colvin 13d5080bbc refactor: Shorten modify/revert cmd prop names
Also consolidate modify_price/qty fns into single modify_order fn
2022-06-22 15:38:38 -05:00
John Colvin 9f07a36d1d refactor: Move order-update-desc fn into OrderUtils for gen use 2022-06-22 15:38:38 -05:00
John Colvin bc2e7f428a chore: Add formal/consistent numeric exceptions/messages 2022-06-22 15:38:38 -05:00
John Colvin 53bfbdd349 fix: Sync 'has_value' prop for qty param
Bugs (fixed):
   * Can't tick qty up/down in the orderbook right panel (clicking the
   button has no discernible effect)
2022-06-22 15:38:38 -05:00
John Colvin 174eac9a59 refactor: Move OrderParamsVM into own file
OrderBookVM.cs was (and frankly still is) massive.  Too massive
2022-06-22 15:38:38 -05:00
John Colvin 3775b86d9e refactor: Rename 'size_' props 'quantity_' to be consistent 2022-06-22 15:38:38 -05:00
John Colvin 5e1c6d6209 fix build (windows): Don't include stdint-uintn.h on windows 2022-06-22 15:38:37 -05:00
taha afzal 0d0fb036ab EmMDListener now get_open_orders and logging the open orders 2022-06-22 15:38:37 -05:00
taha afzal f8668802ab Fixing oder updates on fractional quantity orders (just a few lines) 2022-06-22 15:38:37 -05:00
taha afzal c22a1382a1 Fractional qtys now work on the server (need some client side work) 2022-06-22 15:38:37 -05:00
Taha Afzal 941a0d91cc Enabled Combo report to show fractions (ITradeLow had size of type int) 2022-06-13 20:01:47 -04:00
taha afzal 60456e4225 Deribit market data is blanked out now if the connection to Deribit is lost 2022-06-10 09:54:22 -04:00
John Colvin 440e28489a build: Update libspark CMakeDeps_win 2022-06-09 13:49:55 -04:00
John Colvin 3da0f4eedc ui: Indicate price discrep w/ subtler visual than qty discrep 2022-06-09 13:49:55 -04:00
Taha Afzal 497abfb443 Fixing Futures PNL in slide 2022-06-09 00:15:23 -04:00
Taha Afzal 7b04a7849b Future delta fixed in Slide 2022-06-08 15:56:24 -04:00
taha afzal e14b1e0b07 Limiter does not use StaticLimiter anymore because Deribit and Options are included in Risk enforcement now 2022-06-08 15:55:24 -04:00
John Colvin 2121ce2841 fix build (server gcc): Remove noexcept specifier from copy/move ops
The gcc compiler was deleting the copy/move operators declared in the
MarketDataSubscription class.  This behavior was appropriate, as those
operators were declared with the 'noexcept' specifier, while the
copy/move operators of one of its members, params_ (of a proto-generated
type), lacked the 'noexcept' specifier.
2022-06-08 13:43:12 -04:00
John Colvin c22e99941e fix build: Disable ccapi dependent code on windows
It seems the ccapi lib doesn't support windows.  External market data
subscription code only needs to be built on the server anyways.
2022-06-08 11:42:10 -04:00
John Colvin 3da646dc8a fix build: Remove unnecessary import from binance-md proto
This removes an 'unused import' warning on build
2022-06-08 11:12:13 -04:00
John Colvin fca675d43f feat: Add option/deribit params to risk ui 2022-06-07 23:20:59 -04:00
John Colvin a30523744d feat: Implement ftx md subscription
Run 'sparkd ladder-demo' to check it out
2022-06-07 23:20:59 -04:00
John Colvin 80f5117c34 chore: Add is_empty fn to BookLevel
This pre-emptively fixes the BookSide::is_sorted fn, as it references
the previously non-existent BookLevel::is_empty fn
2022-06-07 23:07:33 -04:00
John Colvin f77f73ec36 fix: Fix typo in MarketDataError type param 2022-06-07 23:07:33 -04:00
John Colvin 2385cf0d1b refactor: Add add/remove fns to composite listener for convenience 2022-06-07 23:07:33 -04:00
John Colvin bc778ad5bb refactor: Rename CompositeListener -> CompositeMarketDataListener
Obviously a better, more descriptive name, and it matches the filename
(the oldname must have been an accident)
2022-06-07 23:07:33 -04:00
John Colvin acb9c35d3b logging: Add ccapi log adaptor 2022-06-07 23:07:33 -04:00
John Colvin b8473e2632 Update externals to get ccapi lib 2022-06-07 23:07:33 -04:00
John Colvin 61b4696574 fix: Don't print bogus level in LadderLivePrinter
This is used when running 'sparkd ladder-demo'

Bugs (fixed):
  * Sometimes it prints a bogus level

  cause: The 'last_ask' iterator is pointing just after the last element
  (i.e,. asks.end(), a bogus value)
2022-06-07 23:07:33 -04:00
John Colvin 91a79a5d96 refactor: Simplify md gateway/binance subscription
* Temporarily get rid of the register_listener fn, and just use
  subscribe/unsubscribe to immediately connect/disconnect listeners to
  exchange feeds. The 'register, then subscribe per sec-id' paradigm is
  tricky to implement without access to security ids.
2022-06-07 23:07:33 -04:00
John Colvin 23927edf46 fix: Add missing log msg param 2022-06-07 22:44:33 -04:00
John Colvin 6c03e605b8 refactor: Consolidate md listener management into MarketDataGateway
This responsibility was awkwardly split between MarketDataGateway and
BinanceDepthStreamSite before, which made code confusing/hard to follow.
2022-06-07 22:44:33 -04:00
John Colvin 2e201159d8 refactor: Move BinanceDepthStreamParams into own file 2022-06-07 22:44:33 -04:00
taha afzal 5d56a8e440 Added some comments and imporves the logs 2022-06-06 17:27:08 -04:00
taha afzal 7097c85555 Fixing the SQLite error on archive_theos that was crashing the server on a duplicate key assertion 2022-06-06 15:14:57 -04:00
John Colvin bf4c8e252f Add install dir to gitignore 2022-06-03 22:41:16 -04:00
John Colvin 866cf33cd4 build: Set CMAKE_INSTALL_PREFIX (for deployment)
Run 'cmake --build <path_to_build> --target install' to create a self-
contained executable sparkd in the 'install' dir at the root of the repo
2022-06-03 22:35:44 -04:00
John Colvin 4561560b46 Remove redundant 'build' items in gitignore 2022-06-03 22:32:07 -04:00
John Colvin bbadbf8e16 build: Move .cmake files to cmake dir (from tools) 2022-06-03 10:42:32 -04:00
John Colvin 68d8659115 fix (ui/slide): Fix greek tick-display formatting
Rather than fix the format fn for the old type, TickDisplaySettingsTuple,
convert params to the newer type, TickDisplaySettings, then call that type's
formatting fn (which isn't broken).
2022-06-03 01:16:03 -04:00
John Colvin dd008962a7 ui (slide/vs settings): Adjust expand/collapse durations 2022-06-03 00:42:05 -04:00
John Colvin e856e7e58f style: Add 'at_most/least' aliases for min/max ext fns
Also add documentation (for completeness sake)
2022-06-03 00:41:04 -04:00
John Colvin 634d8e1aeb fix (pre-emptive): Add null check in SecurityFormatter 2022-06-02 17:44:38 -04:00
John Colvin eaa9376577 fix (pre-emptive): Add some null checks in ContractLegEnumerable
And clean up the code a bit while we're at it
2022-06-02 17:44:38 -04:00
John Colvin 3fb70fd645 fix (contractpicker): Don't init SecurityMap w/ empty dict
Bugs (fixed):
  * The create-synth dialog crashes when picking a new leg's security
2022-06-02 17:44:38 -04:00
John Colvin b793c75aa8 Add some null checks to LegSpreaderParamsTuple 2022-06-02 17:44:38 -04:00
John Colvin cb26b9af39 fix (contractpicker): Remove SecurityMap CoerceValueCallback
This was breaking the binding so that the view had a different
security-map instance than the vm
2022-06-02 17:44:38 -04:00
John Colvin f8059cc87e build: Add verbosity opt to buildspark.py 2022-06-02 17:44:38 -04:00
John Colvin 07fe19ecdc build: Symlink emumba license in build dir
So we don't have to do it manually
2022-06-02 02:15:14 -04:00
John Colvin a292fe87e1 build: Set up cmake 'install' build target
The 'install' build target creates a self-contained (deployable) sparkd
package. It copies the sparkd executable and its dependencies into a
single directory (no symlinks), which can then be copied/deployed to
another machine.

Run `cmake --build . --target install` to install sparkd in the
directory defined by the CMAKE_INSTALL_PREFIX variable.
2022-06-02 01:32:17 -04:00
John Colvin 03d915b55c Update externals to get emumba deribit lib 2.2.8 2022-06-02 00:47:42 -04:00
John Colvin cc318535e9 fix (slide settings ui): Add show_commas prop to GreekDisplayVM
Bugs (fixed):
  * The 'show commas' check box doesn't do anything in slide settings ui

    Cause: The view is bound to a non-existent prop in the vm
2022-06-01 19:28:13 -04:00
John Colvin 9d245f3243 ui (vs settings): Wrap body in scrollviewer 2022-06-01 19:02:42 -04:00
John Colvin 6d7f95ac8e ui (vs settings): Change radio buttons to dropdown
The radio buttons take up too much space
2022-06-01 19:02:42 -04:00
John Colvin 9d9df76f4e refactor: Clean up KeyedTemplateSelector
* Use new lang feats
* Run formatter
* Split up classes into separate files
* Move into Controller dir (per the MVCVM paradigm)
2022-06-01 19:02:42 -04:00
John Colvin a850082f44 refactor: Move StringExtensions to ns Spark.Core 2022-06-01 19:02:42 -04:00
John Colvin 521150a73b refactor: Clean up StringExtensions
* Use new lang feats
* Run formatter
2022-06-01 19:02:42 -04:00
John Colvin ed5f3fe740 ui (slide settings): Change param validation msgs
Change 'Specify' to 'Choose'
2022-06-01 19:02:41 -04:00
John Colvin fd6fdd9768 Refresh radio-button-member 'IsChecked' when member-val changes 2022-06-01 19:02:41 -04:00
John Colvin 73bf104e9f fix: Add null check
Also use null coalesce syntax to clean up existing null checks
2022-06-01 19:02:41 -04:00
John Colvin 24640e65b1 fix (pre-emptive): Add null check 2022-06-01 19:02:41 -04:00
John Colvin eadfc38a69 refactor: Use nullability feat in ExceptNull, DisposeAll fns 2022-06-01 19:02:41 -04:00
John Colvin 098ee36c3a fix: Init NotifyCollectionChangedEventArgs w/ correct args
Bugs (fixed):
  * The ObservableAggregateCollection.Aggregator.Insert fn causes an
    ArgumentException if the collection to be inserted is non-empty. This seems
    to happen because the NotifyCollectionChangedEventArgs is improperly
    constructed (the collection-tuple is passed as the 'changedItem' arg).

  * The ObservableAggregateCollection.Aggregator.Insert fn appends existing
    items to the end of the aggregate collection (instead of inserting them in
    the appropriate index).
    Note: This bug was only revealed after the first bug was fixed.
2022-06-01 19:02:41 -04:00
John Colvin f4ed4d38f1 refactor: Change collection aggregator to use IReadOnlyList
It was previously accepting IReadOnlyCollection args, but the
ObservableCollection paradigm generally uses indexed lists
2022-06-01 19:02:41 -04:00
John Colvin 2ed3eaa325 refactor: Check if list already instantiates IList<T>
Before creating a new MutableWrapper<T>
2022-06-01 19:02:41 -04:00
John Colvin 3a7a02244b refactor (ui): Use ExpandedContentSelector in vs win 2022-06-01 19:02:41 -04:00
John Colvin 79258b9404 fix (slide): Observe IObservables OnDispatcher 2022-06-01 10:11:26 -04:00
John Colvin 6376802d04 ui (slide): Use ExpandableContentSelector 2022-06-01 10:11:26 -04:00
John Colvin 2784e7652d ui (control): Add ExpandedContentSelector for modal section-expansion 2022-06-01 10:11:26 -04:00
John Colvin 5b3925fae0 fix: Set GridSettings.enable_background_color in settings vm 2022-06-01 10:11:26 -04:00
John Colvin 077f6050f3 ui (login): Add F5 'refresh' cmd to retry connecting to server 2022-06-01 10:11:26 -04:00
John Colvin 791dd62b67 fix (ui): Fix typos in vs settings editor xaml
* Remove non-existent xmlns

* Change element-name 'curve_ops_gb' to 'StandardCurveOpsView'.  The _gb suffix
  doesn't make sense bc the element is no longer a GroupBox, and the new name
  is stylistically consistent with the other section-view element-names

* Change 'Market Fit View' to 'Market Fit'
2022-06-01 10:11:15 -04:00
John Colvin 2364cda362 ui: Tweak expand/collapse animation
Use shorter duration for collapsing, and longer for expanding
2022-06-01 00:00:57 -04:00
John Colvin aca4365e8d fix (pre-emptive): Add null check 2022-05-31 16:43:22 -04:00
taha afzal cac857a3a7 Busted fills filtered out of the PositionService position calculations 2022-05-30 15:38:08 -04:00
John Colvin ed38ce958d build: Resurrect web build 2022-05-28 11:40:45 -04:00
Taha Afzal ed4b9b7426 Added is_active to ITradeLogRow, and changed Combo and Slide to use that 2022-05-26 19:31:13 -04:00
Taha Afzal e4468f056d Filtering out busted fills in Slide 2022-05-26 19:17:23 -04:00
Taha Afzal 4b580b407e Adding FillStatus to ITradeLogRow and filtering the busted fills out in Combo 2022-05-26 19:08:47 -04:00
taha afzal b575612b07 Fixing Busting of fills on ResetPositions 2022-05-26 18:39:19 -04:00
John Colvin b506b971a4 feat: Init order ticket w/ default account from ladder profiles 2022-05-26 15:44:02 -04:00
John Colvin c50f322dc1 refactor: Remove 'where class' constraint from FirstAsyncTask
The constraint didn't seem to serve a purpose
2022-05-26 12:57:02 -04:00
John Colvin 3a61f4d81d ui: Add default-background control to grid settings dialog 2022-05-26 12:57:02 -04:00
John Colvin a2b2de9783 feat: Reconcile Report 2022-05-25 14:28:58 -04:00
John Colvin b2a6927b4b Enable all column settings in mview (for all cols) 2022-05-25 14:28:57 -04:00
John Colvin 80dec4e1e2 ui: Fix typo to enable column background in GridSettingsView 2022-05-25 14:28:57 -04:00
John Colvin 77c7802496 Set cell-view's DIYGrid.Column when syncing w/ column geometry 2022-05-25 14:19:04 -04:00
John Colvin cec2687085 ui: Increase default 'Security' col width
Many Deribit securities are wider than the previous col width
(particularly options)
2022-05-25 14:19:04 -04:00
John Colvin ac118993d5 refactor: Change ManualFill.quantity to double 2022-05-25 14:19:04 -04:00
John Colvin 7634ecf730 refactor: Break up massive file Update.cs
Into one file per class
2022-05-25 14:19:04 -04:00
John Colvin 309d1fa287 refactor: Remove LegacyTableUpdate class 2022-05-25 14:19:04 -04:00
John Colvin 9231a91fb4 Fix typo in Update.merge fn
Bugs (fixed):
   * When merging updates, a new ChangeDict is always instantiated
   (sometimes unnecessarily).  This was causing a performance hit, but
   not actual bad/incorrect behavior, so it went unnoticed for years
2022-05-25 14:19:04 -04:00
John Colvin f6f928a693 refactor: Move MarketDataAuxiliaryModel into Model dir 2022-05-25 14:19:03 -04:00
John Colvin 467216439b refactor: Move PositionModel classes into own files 2022-05-25 14:19:03 -04:00
John Colvin c63e73ab7c refactor: Move SparkObservableExtensions into own file
And rename class ReactiveObservableExtensions
2022-05-25 14:19:03 -04:00
John Colvin 74fcacd800 Clear 'raw' (unfiltered) table changes on filter-updates
Otherwise, it would repeat the changes from the last data-update, and
break the incremental sequence
2022-05-25 14:19:03 -04:00
John Colvin c1c46f01ab refactor: Use DispatcherObservable class to avoid op chains 2022-05-25 14:19:03 -04:00
John Colvin 77083a1fa6 fix: Don't bypass Dispatcher.InvokeAsync in OnDispatcher ext
Otherwise the updates may not be received in order
2022-05-25 14:19:03 -04:00
John Colvin 5303f290b1 refactor: Move sec metadata utils into SecurityMetadataStore 2022-05-25 14:19:03 -04:00
John Colvin 895871c94b refactor: Move SecurityCriteria classes into spark_core
Also move IBus there bc some SecurityCriteriaExtensions depend on it
(and spark_core seems more appropriate for IBus anyways)
2022-05-25 14:19:03 -04:00
John Colvin 3bff50b764 diag: Add TableUpdate.description ext
For diagnostic logging/tracking down bugs
2022-05-25 14:19:03 -04:00
John Colvin 86b7802b3b Use RadioButtonGroupManager.Value prop instead of DataContext
This more clearly defines the behavior
2022-05-25 14:19:03 -04:00
John Colvin 4ff9aaf037 refactor: Clean up DIYGridFilterModel 2022-05-25 14:19:03 -04:00
John Colvin 99f7827e7e refactor: Clean up RadioButtonGroupManager/Map 2022-05-25 14:19:03 -04:00
John Colvin b67ac5c849 Simplify slide settings view by using RadioButtonGroupManager (not map) 2022-05-25 14:19:03 -04:00
John Colvin 0777f01607 fix: Remove il-advised SelectedItem(Binding) dp
It doesn't make sense to try to normalize the binding for different
groups into a single binding in the group manager
2022-05-25 14:19:03 -04:00
John Colvin 222dbf5443 refactor: Move RadioButtonGroupManagerMap into own file 2022-05-25 14:19:03 -04:00
John Colvin 9434f61030 fix: Make GroupManagerMap an Attached dp
It always should have been attached (analagous to a static prop)
2022-05-25 14:19:03 -04:00
John Colvin 9199594756 fix: Add null check for put/call_points in VolSurfaceDataFunctions 2022-05-25 14:19:03 -04:00
John Colvin fc9318a831 ui: Refine vs settings dialog
Make it look more like combo/slide settings dialogs
2022-05-25 14:19:03 -04:00
John Colvin e3fc28f082 fix: Wrap algometadata proto list in single class
Bugs (fixed):
   * An exception is thrown when deserializing
     AlgoDefinitionPersistedMetadata array
2022-05-25 14:19:03 -04:00
John Colvin 9cb7b84f57 Only recreate TViews when necessary in RXCollection 2022-05-25 14:19:03 -04:00
John Colvin 2689ed806d fix: Add null check in VolSurfaceDataFunctions.get_symbols 2022-05-25 14:19:03 -04:00
John Colvin 5999e7856f fix: Add null check for sec metadata in MDDaemon 2022-05-25 14:19:03 -04:00
John Colvin 96ad67b020 fix: Ensure ShellModuleVM.MenuContent is created at most once 2022-05-25 14:19:03 -04:00
John Colvin 47d5b95e13 ui (exp params): Add 'Set Driver to Nearest Exp' menu item 2022-05-25 14:19:02 -04:00
John Colvin 12108e6046 fix: Fix typo in 'abs' ext (should accpet INumber<T>) 2022-05-25 14:19:02 -04:00
John Colvin 021bdb8c23 Add ObservableHashSet 2022-05-25 14:19:02 -04:00
John Colvin 470f6c0988 Add Opacity option to ColorExtension (for xaml) 2022-05-25 14:19:02 -04:00
John Colvin c8b87b4f79 Remove the ill-advised FontFamily enum
The library of potential font families to choose from is endless, so it
doesn't make sense to limit a user's options to a small set of arbitrary
presets
2022-05-25 14:19:02 -04:00
John Colvin 9d7e16fbf7 refactor: Move FontFamily exts into own file
This resolves some nagging namespace conflicts w/ FontFamily (in
System.Windows.Media and mbts.ui.utility.text)

TODO: Get rid of mbts.ui.utility.text.FontFamily (it was an ill-advised
enum to begin with)
2022-05-25 14:19:02 -04:00
John Colvin 5a45d5e12a fix: Ensure AlgoData IObservable fires at least once
Bugs (fixed):
   * The algo dropdown in ladder/ticket is empty
   Note: this bug was exposed as side effect of a recent change to
   prevent the TableUpdate Filter ext from firing empty TableUpdates
2022-05-25 14:19:02 -04:00
John Colvin c793ec78a2 Don't send empty updates in TableUpdate Filter ext 2022-05-25 14:19:02 -04:00
John Colvin 7b2b7c5854 refactor: Get rid of 'semi_transparent' brushes in BTSColors
Doesn't seem worth the clutter
2022-05-25 14:19:02 -04:00
John Colvin 327615c9ac refactor: Move 'position' utils from OrdersModel to PositionModel
OrdersModel contains way too much "miscellaneous" code.  This will
reduce at least some of the clutter.
2022-05-25 14:19:02 -04:00
John Colvin 8e5d94b5e7 refactor: Move TickDisplayConverter into mbts.ui.converters ns
This is where all the other IValueConverter classes are defined
2022-05-25 14:19:02 -04:00
John Colvin bd76a1f260 ui: Only expand one section at a time in slide settings dialog 2022-05-25 14:19:02 -04:00
John Colvin 1df2695f50 refactor: Clean up FillsVM 2022-05-25 14:18:57 -04:00
John Colvin 67d33a3315 Add null-check when disposing ObservableAutoWrapper item-hooks 2022-05-25 14:07:21 -04:00
John Colvin c49cd3a06e refactor: Clean up DIYGridRowsManager and related files/types
* Rename class suffix 'Manager' -> 'Model'
* Move classes into own files
* Put column-related classes in columns dir
* Enable nullable
* Run formatter
2022-05-25 14:07:21 -04:00
John Colvin 6c0545f566 fix: Don't deserialize AlgoDefinitionMetadata[] w/ length prefix
Bugs (fixed):
   * AlgoDefinitionMetadata[] deserialization fails
2022-05-25 14:07:21 -04:00
John Colvin f0eee365f9 fix: Catch & log deserialization exceptions
Rather than silently catching the exception upstream
2022-05-25 14:07:21 -04:00
John Colvin 274db506a9 Clean up DiscreteValuesFilterVM 2022-05-25 14:07:21 -04:00
John Colvin 1e5c56f3a7 refactor: Make key param optional in TableUpdate Filter ext 2022-05-25 14:06:49 -04:00
John Colvin 871c7a131f refactor: Move Position extensions to own file in spark_api 2022-05-24 12:25:16 -04:00
John Colvin 7642d73f39 Add join_table fn to SecurityStore 2022-05-24 12:25:16 -04:00
John Colvin ef69dfa646 refactor: Add 'table' subscription fns to generated proto services
* Provides a simple convenience, as nearly all api subscriptions made on the
  front-end are converted to TableUpdates anyways

* Can help reduce overhead by instantiating TableUpdate subscriptions
  lazily, and by using one internal TableUpdate subscription to provide
  notifications to all observers
2022-05-24 12:25:16 -04:00
John Colvin 377be5030f style: Clean up pb.cs templates (generated code) 2022-05-24 12:25:16 -04:00
taha afzal 896af55e79 Added commented to document flow of ExchangePosition 2022-05-24 12:24:47 -04:00
Taha Afzal b9a4a2c148 Added right click context menu item in the sheets to launch ladders 2022-05-23 15:36:49 -04:00
Taha Afzal e9f6d096cf Disabling tasking context menu items from the sheet 2022-05-23 14:46:47 -04:00
taha afzal 25d4c54284 Added account_id to ExchangePosition 2022-05-23 11:51:10 -04:00
taha afzal e4291e1c51 Adding account to ExchangePosition 2022-05-19 18:16:46 -04:00
taha afzal 5c11708728 Fixing assert on_get_all_position callback from EM 2022-05-18 17:56:06 -04:00
taha afzal 73a301192f Fixing ExchangePosition's qty (unsigned uint related bug) and exchange 2022-05-18 17:14:39 -04:00
Taha Afzal d972564d34 Clip defaults changed 2022-05-18 01:16:39 -04:00
taha afzal e66a2d4663 Rejected orders now show up in the Orderbook UI 2022-05-18 00:42:00 -04:00
Taha Afzal f92e13d898 Logging the key of the placed order 2022-05-16 16:03:46 -04:00
John Colvin 3d0698b326 task: Set ManualFill.FillType to 'AdminDay' 2022-05-16 15:57:28 -04:00
Taha Afzal 1e0ab86a24 MD entitlements turned off temporarily until we can add the settings to Risk Admin (web) 2022-05-12 18:02:22 -04:00
Taha Afzal caa29b9513 Reducing market data related logging 2022-05-12 16:21:42 -04:00
Taha Afzal c793768918 Bug with VolSurfaceUsage fixed 2022-05-12 00:09:37 -04:00
John Colvin 0132a0cff6 ui (exp params, combo): Format exps with month abv & day
This formatting is consistent with the rest of the system.  Furthermore, it
ensures all sym/exp combinations have unique string reps (some symbols can have
multiple exps in one month, such as ETH).
2022-05-11 15:19:50 -04:00
John Colvin f83b6ee898 ui (slide): Prevent last-trade & swipe-sum from overlapping 2022-05-10 13:38:36 -04:00
John Colvin dc071dfa56 fix: RaisePropertyChanged when vm 'HasErrors' changes 2022-05-10 13:34:29 -04:00
John Colvin fbfd601270 ui: Refine slide settings dialog
* Unify greeks configuration/display settings into one section
* Replace tabs with modal expandable sections (like in the analytics
shell module view)
2022-05-10 13:34:29 -04:00
John Colvin 9b5aea2458 refactor: Abstract out modal expand/collapse animation/behavior
From the analytics module view (so it can be used by other windows)
2022-05-10 13:31:57 -04:00
taha afzal 904ef92ece Added reset_position to PositionService 2022-05-09 14:40:44 -04:00
John Colvin 74e950d459 ui: Don't filter manual fills 2022-05-07 17:51:44 -04:00
John Colvin e99caef2dc ui: Change 'Show Expanded' to 'Expand Symbols' in slide/combo 2022-05-07 16:42:15 -04:00
John Colvin 855e4a6ed8 ui: Change combo 'expand' icon to chevron right
It expands to the right (not down)
2022-05-07 16:40:16 -04:00
John Colvin 311b956461 Set manual fills' FillType to ADMIN_DAY (when creating) 2022-05-07 16:19:10 -04:00
John Colvin b3b308cd9d ui (fix): Set DIYGridLineAdorner.IsHitTestVisible to false
Otherwise it prevents click events from reaching the grid
2022-05-07 14:02:51 -04:00
John Colvin a8480a34ba fix: Detach DIYGridLineAdorner on dispose 2022-05-07 14:02:46 -04:00
John Colvin 3312637b8d dev/john: Add vscode json files for windows/client 2022-05-07 13:57:49 -04:00
John Colvin e6f7a82fb1 dev/john: Move 'vscode' json files into vscode/linux
They've always been specific to the linux/server code.  Moving them as such
to make room for windows/client specific settings files.
2022-05-07 13:57:49 -04:00
John Colvin 5b934de69a Add redundant checks to ensure readonly cells aren't copy/pasted in vs grid 2022-05-07 13:57:49 -04:00
John Colvin 0f78982f57 fix: Support copy/pasting in vs grid on readonly cell click
Only the option to copy the individual column value should be
hidden/disabled for readonly cells
2022-05-07 13:57:49 -04:00
John Colvin 18abbfc502 fix: Use vs grid's context menu rather than those of individual rows
Bugs (fixed):
   * Crash when copy/pasting in volsurface grid
2022-05-07 13:57:49 -04:00
John Colvin c3ae4c6dc5 refactor: Make VolSurfaceColumn.model readonly
It's never reassigned; should have been readonly to begin with
2022-05-07 13:57:09 -04:00
John Colvin 9b012649cd fix: Add nullcheck for hscrollbar in grid line adorner
Bugs (fixed):
   * A silent ArgumentNullException is thrown when opening volsurface windows
   during startup
2022-05-07 13:57:09 -04:00
Taha Afzal c126091155 VolSurfaceUsage is not read from config 2022-05-06 14:41:40 -04:00
taha afzal c2fee56496 Adding temporary vol surface usage to config (simplifying it to only have symbol because SecTup had serialization issues in C#) 2022-05-06 13:55:44 -04:00
taha afzal 5461dc77aa Added default config based risk limits for Deribit symbols 2022-05-05 20:39:47 -04:00
taha afzal 1b2a1c3fe3 Limiter can optionally get its value from config 2022-05-05 20:39:47 -04:00
Taha Afzal a83a4fdd4f UIOverrides for slide are ignored in the calcultor (were already disable din the UI for now) 2022-05-05 13:53:16 -04:00
Taha Afzal 4d4ee1f57c TC2 is constructed on the correct options now 2022-05-04 15:11:24 -04:00
John Colvin 2bec4ae09f ui: Hide position analysis filters in slide win
At least until they're actually implemented in model/calculation code
2022-05-04 15:07:14 -04:00
John Colvin e3b91909a6 Hook up combo conf vm ErrorsChanged callback once (in ctr) 2022-05-04 14:58:57 -04:00
John Colvin 116ba3f629 Add venue component to report risk-terms/opt-equiv params 2022-05-04 14:56:43 -04:00
John Colvin 0ce6f8e6a2 style: Enable nullable in ComboReportFuturesGrid 2022-05-04 14:53:44 -04:00
John Colvin 9447cb67d2 fix: Populate exps list used to generate cols in combo futs grid
Bugs (fixed):
   * Future positions aren't showing in combo report
2022-05-04 14:53:44 -04:00
John Colvin 92dacc5c3c ui: Use consistent sorting in risk terms/opt equiv dropdowns 2022-05-04 14:53:44 -04:00
John Colvin 766dfe9dd3 ui: Hide security criteria param in slide settings win 2022-05-04 14:53:44 -04:00
John Colvin 84ecb54efd ui: Change 'Volsurface' -> 'Vol Surface' in slide settings win 2022-05-04 14:53:44 -04:00
John Colvin 6ff8855dba refactor: Change report security list to SecurityCriteria 2022-05-04 14:53:44 -04:00
John Colvin 7f349cfa71 ui: Use converter to generate 'pretty name' for sec criteria clause 2022-05-04 14:53:44 -04:00
John Colvin 948b23addc fix: Don't add duplicate securities in slide config vm
Bugs (fixed):
   * Slide settings dialog shows duplicate security items in dropdown
2022-05-04 14:53:44 -04:00
John Colvin 7031bb6fbe fix (ui): Fix typo in slide settings dialog ok/apply cmd binding 2022-05-04 14:53:44 -04:00
John Colvin 15a04a1870 build: Temporarily disable web build
Until we can fix integration with dotnet 6
2022-05-04 09:23:32 -04:00
John Colvin 741c6d360a fix: Refresh slide-settings vm 'result' when included syms change 2022-05-02 17:32:32 -04:00
John Colvin c4f3ca26ef ui: Use new spark menu toggle style in combo win/vm 2022-05-02 17:29:30 -04:00
John Colvin 3403adc1ff fix: Hook up expanded/collapsed toggle in slide
Bugs (fixed):
   * Changing the view-format in slide doesn't do anything
2022-05-02 17:29:30 -04:00
John Colvin 410d3aaf20 ui: Use opacity to indicate 'checked' state in spark menu 2022-05-02 17:29:30 -04:00
John Colvin 34905f6053 Fix benign typo in exp params win menu item init 2022-05-02 17:29:29 -04:00
John Colvin 6a16d419af ui: Use checkmark icon for 'Checkable' items in spark win context menu 2022-05-02 17:29:29 -04:00
John Colvin cd23c1a5a1 fix (ui): Use 'opacity' to indicate enabled/disabled in spark menu
Bugs (fixed):
   * SparkMenuItems sometimes look disabled when they aren't (esp in
   AnalyticsExpirationParameters win)

In wpf, VisualStates in different VisualStateGroups shouldn't adjust
common properties.  A visual element can only be in 1 visual state at a
time.  When a visual element transitions to a new visual state, all
depepdency property changes associated with the transition to the
previous state are cleared.
2022-05-02 17:29:29 -04:00
John Colvin 18793f8cd9 ui: Add 'Swipe Sum' tooltip in slide 2022-05-02 17:29:29 -04:00
John Colvin c008147674 ui: Use DayMonthAbvDiff2000 format for last trade exp in combo/slide 2022-05-02 17:29:29 -04:00
John Colvin 47323c51c3 ui: Use normal font size of grid in combo 2022-05-02 17:29:29 -04:00
John Colvin 91f58620ac ui: Make '|' separator in combo consistent w/ those in slide 2022-05-02 17:29:29 -04:00
John Colvin 91aeccb2ae ui: Use normal font size outside of grids in slide 2022-05-02 17:29:29 -04:00
John Colvin 82864a609d ui: Make '|' separator consistent in slide status bars (upper/lower) 2022-05-02 17:29:29 -04:00
John Colvin 828b1ca0c2 ui: Add '|' separators in slide status bar 2022-05-02 17:29:29 -04:00
John Colvin 6b740ece39 ui: Use common IValueConverter for last_trade in slide/combo wins 2022-05-02 17:29:29 -04:00
John Colvin 84f18288e0 fix: Fix typo 'call' -> 'put' in ComboReportOptionCellView 2022-05-02 17:29:29 -04:00
John Colvin cf9e5862ed fix: Invalidate 'measure' when ShowCallPut in combo opt cell
Bugs (fixed):
   * combo report does not show call/put when 'Show Call/Put' is checked
2022-05-02 17:29:29 -04:00
John Colvin 4ca2b5f4d2 fix: Add missing 'ExpirationTextConverter' resource in ComboReportView 2022-05-02 17:29:29 -04:00
John Colvin da2894512d fix: Fix typo 'ComboReport' -> 'ComboReportView' 2022-05-02 17:29:29 -04:00
John Colvin 55e9487203 fix: Sync strikes and exps in combo on_data callback 2022-05-02 17:29:29 -04:00
John Colvin 19fb08e7ff fix: Add nullcheck in TradeLogRow ctr 2022-05-02 17:29:29 -04:00
John Colvin 193b1025ad style: Clean up ReportDaemon 2022-05-02 17:29:29 -04:00
John Colvin 8fa2a925cd refactor: Use ToggleCommand/SparkMenuItemToggleModel in slide win 2022-05-02 17:29:29 -04:00
John Colvin 526daa9647 ui: Use 'candidate' icon for 'Use Candidate Vol' menu item 2022-05-02 12:29:03 -04:00
John Colvin 43bcc9fe02 Add 'candidate' icon
Even though not in use atm, it was hard to parse out the individual
candidate from the svg, and might come in handy down the road.  Seems worth
keeping
2022-05-02 12:29:03 -04:00
John Colvin 51d6066420 fix: Add nullcheck in get_vs_price_map 2022-05-02 12:29:03 -04:00
John Colvin 0b11b83eb5 ui: Refine slide win
* dock account/risk terms to the left
2022-05-02 12:29:03 -04:00
John Colvin a53dfd14b1 ui: Refine combo win
* make call/put toggle a spark menu item (in the toolbar)
* dock account/risk terms to the left
* hide account/risk terms labels (show them as tooltips instead)
2022-05-02 12:29:02 -04:00
John Colvin cc0380d8f1 Add ToggleCommand type and related infrastructure 2022-05-02 12:29:02 -04:00
John Colvin 0a01d22e72 refactor: Rename 'UseCandidateVol' icon -> 'vol_curve' 2022-05-02 12:29:02 -04:00
John Colvin e9f1c72198 refactor: Refine 'create_checked_icon' code/logic
Clean up code a bit, and add some parameters to custom fit/position the
check mark with any given Drawing
2022-05-02 12:29:02 -04:00
John Colvin 14af8823ed refactor: Rename SparkCommandVM -> SparkMenuItemVM
Also move to 'ViewModels' dir
2022-05-02 12:29:02 -04:00
John Colvin 5900ce7d12 Fix windows build after moving FileUtils to lib 2022-05-02 12:29:02 -04:00
John Colvin 33e0a6bb46 Generate new keycodes for default config
These won't expire until 2032
2022-05-02 12:29:02 -04:00
John Colvin ca3bc5059e Read public key from config (for login/auth) 2022-05-02 12:29:02 -04:00
John Colvin bd108dfe35 cli (server): Add key-code subcommand to sparkd 2022-05-02 12:29:02 -04:00
John Colvin 8a96c7441e refactor: Clean up KeyCode 2022-05-02 12:29:01 -04:00
John Colvin 4eea3194fd Remove unused args from key-code subcmds 2022-05-02 12:29:01 -04:00
John Colvin dace332ac5 refactor: Move FileUtils into lib 2022-05-02 12:29:01 -04:00
John Colvin af816bb905 fix: Don't cast numeric types via boxing
This is illegal
2022-05-02 12:29:01 -04:00
John Colvin 195c24ffef refactor: Move SingleValueList to own file 2022-05-02 12:29:01 -04:00
John Colvin 92ad17aa19 fix: Save slide report before closing settings dialog
Bugs (fixed):
   * Slide report configuration doesn't save on OK click (does save on Apply
   click though)
2022-05-02 12:29:01 -04:00
John Colvin eabc4bee4c fix: Save combo report before closing settings dialog
Bugs (fixed):
   * Combo report configuration doesn't save on OK click (does save on Apply
   click though)
2022-05-02 12:29:01 -04:00
John Colvin 0ed9142cf0 test: Add HierarchicalDictionaryTest 2022-05-02 12:29:01 -04:00
John Colvin 1639683b43 fix: Set _value_count to 0 when HierarchicalDictionary is Cleared 2022-05-02 12:29:01 -04:00
John Colvin 05afb08c5d fix: Ensure HierarchicalDictionary nodes in sync w/ parent data 2022-05-02 12:29:01 -04:00
John Colvin c674e44c60 refactor: Enable nullable in EnumerableExtensions 2022-05-02 12:29:00 -04:00
John Colvin e104c78471 fix (preemptive): Fix typo in Sum ext
This fix is preemptive only bc this fn isn't referenced atm
2022-05-02 12:29:00 -04:00
John Colvin 3d8ec63bd7 ui: Condense text/controls in top of Slide win 2022-05-02 12:29:00 -04:00
John Colvin 99670c9d28 ui: Move last update time down to status bar in Slide win 2022-05-02 12:29:00 -04:00
John Colvin 56126e19a7 refactor: Clean up SlideReportView.xaml.cs 2022-05-02 12:29:00 -04:00
John Colvin 05e8363504 ui: Change 'Use Candidate Vol' icon to look sort of like vol-curve 2022-05-02 12:29:00 -04:00
John Colvin 884741062b ui: Add expand/collapse toggle menu item to Combo win 2022-05-02 12:29:00 -04:00
John Colvin 63c77966fa ui: Add menu-orientation menu-item to Slide win 2022-05-02 12:29:00 -04:00
John Colvin 31745d9f0d ui: Add menu-orientation menu-item to Combo win 2022-05-02 12:29:00 -04:00
John Colvin 78897ed608 refactor: Clean up SparkMenu
* use visual states instead of triggers for mouse-state-transition animation
* use new lang feats
* run formatter
2022-05-02 12:29:00 -04:00
John Colvin 5712bcdc57 Add PressedAnimationDuration prop to MouseStateDefinition
This provides a way to ensure that 'Pressed' animations, which takes a
non-zero amt of time, always run to completion (before animation for the
next state begins)
2022-05-02 12:28:59 -04:00
John Colvin 8e0a027584 style: Add documentation to ProjectToVector ext 2022-05-02 12:28:59 -04:00
John Colvin 12f88b5303 test: Add unit test for ProjectToVector ext 2022-05-02 12:28:59 -04:00
John Colvin b119cad8a9 ui: Remove 'Focus' animation from SparkMenuButton
Not sure why this was here in the first place..it's identical to the
MouseOver animation
2022-05-02 12:28:59 -04:00
John Colvin f30210e4e1 refactor: Move SparkMenu style/xaml to own file 2022-05-02 12:28:59 -04:00
John Colvin a8d6a104c3 refactor: Clean up OptionDriverPriceMap 2022-05-02 12:28:59 -04:00
John Colvin 13df0c8638 Spruce up AnalyticsShellModuleView 2022-05-02 12:28:59 -04:00
John Colvin fb70aa6514 fix (ui): Set combo report settings dialog title to string literal
Previously, it was bound to the report-name.  However, the binding was broken.
Furthermore it doesn't seem appropriate to bind the title to the name since the
user can edit the name in the settings dialog
2022-05-02 12:28:59 -04:00
John Colvin 37fd1d424e refactor: Rename (SlideReportSettings)View -> Dialog
This is more consistent with our name conventions, and dialog is more
precise description of the type
2022-05-02 12:28:59 -04:00
John Colvin bdbbcb05dc ui: Animate AnalyticsShellModule window-section expand/collapse 2022-05-02 12:28:59 -04:00
John Colvin 9cd5d0890f ui: Add large-flat button style 2022-05-02 12:28:59 -04:00
John Colvin 7b1fa849ef fix (preemptive): Curry 'Member' to DataContextChanged callback
Bugs (fixed):
   * [preemptive] potential InvalidCastException in
   RadioButtonGroupManager.DataContextChanged callback
2022-05-02 12:28:59 -04:00
John Colvin a8b5cf81ee fix (ui): Set combo report settings dialog title to string literal
Previously, it was bound to the report-name.  However, the binding was
broken; furthermore it doesn't seem appropriate to bind to the name
since the user can edit the name in the settings dialog
2022-05-02 12:28:58 -04:00
John Colvin bc62d4b359 refactor: Rename (ComboReportSettings)View -> Dialog
This is more consistent with our naming conventions, and 'dialog' is a
more precise description of this type.
2022-05-02 12:28:58 -04:00
John Colvin 4413580212 feat: Support modifying combo report 'name' after it is created
The csharp vm infrastructure was already in place, so this was just a matter of
adding the 'name' field to the settings view
2022-05-02 12:28:58 -04:00
John Colvin 8b653ef133 feat: Add volume col to TimeAndSales 2022-05-02 12:28:58 -04:00
John Colvin b1f8ac7e22 refactor: Make Optional<T> a struct
It's a trivial, readonly type, so struct seems more appropriate than class

Bugs (fixed):
   * [preemptive] greeks_tuple param potential null-ref exception in TradeInfo
   'with' ext
2022-05-02 12:28:58 -04:00
John Colvin a11c23d718 refactor: Enable nullable in TimeAndSales(Filter)Settings 2022-05-02 12:28:58 -04:00
John Colvin 9feceb9fdb fix: Create new instance of ContextMenu on each open
Bugs (fixed):
   * the volsurface grid context menu items' col/super header names don't stay
   in sync with clicked cell (the names never change once the menu item becomes
   visible for the first time)
2022-05-02 12:28:58 -04:00
John Colvin bad6464fe9 refactor: Clean up VolSurfaceRowContextMenuVM
* use new lang feats
* run formatter
2022-05-02 12:28:58 -04:00
John Colvin a6007ca362 refactor: Sync symbols in vs row context menu when vis-exps changes
Also, rename SymbolFilter -> SymbolItemVM
2022-05-02 12:28:58 -04:00
John Colvin 05348b01ae refactor: Clean up VolSurfaceRowVM
* use new lang feats
* run formatter
2022-05-02 12:28:58 -04:00
John Colvin abfabe3e21 Remove unused file VolSurfaceRowControl.cs 2022-05-02 12:28:58 -04:00
John Colvin 83e0da446a refactor: Rename VolSurfaceRowContext -> VolSurfaceRowVM 2022-05-02 12:28:58 -04:00
John Colvin 85a48e71d1 refactor: Move vs row context menu vm to own file & unnest class 2022-05-02 12:28:57 -04:00
John Colvin 0671117660 refactor: Move sync_with ext to ListExtensions 2022-05-02 12:28:57 -04:00
John Colvin 654c5b3074 refactor: Rename 'command' members 'cmd' in VolSurfaceRowContext 2022-05-02 12:28:57 -04:00
John Colvin aee5e54c14 refactor: Clean up VolSurfaceVM
* use new lang feats
* rename 'command' members 'cmd'
* sort members
2022-05-02 12:28:57 -04:00
John Colvin e5df037992 refactor: Remove redundant LastOrDefault ext fn 2022-05-02 12:28:57 -04:00
John Colvin 06b9586eb6 refactor: Consolidate tick up/down fn pairs into singular tick fns
With 'is_up' params
2022-05-02 12:28:57 -04:00
John Colvin 79716dfdba refactor: Add NotNullWhen attrs to tick up/down out params 2022-05-02 12:28:57 -04:00
John Colvin 02b6b5d078 fix: Handle nan qty gracefully on ladder qty button click
Just set the value to that of the clicked button (since you can't add
anything to NaN)
2022-05-02 12:28:57 -04:00
John Colvin 403e8d2947 ui: Change TickUpDownNullable control to reset null -> 0 on tick click 2022-05-02 12:28:57 -04:00
John Colvin 25e9c37987 refactor: Change props to generic T in TickUpDownNullableNumeric
Accidentally left several members defined as type double (this
now-generic class was refactored from TickUpDownNullableDouble)
2022-05-02 12:28:57 -04:00
John Colvin 99b58cf2bf refactor: Clean up LadderVM
* use new lang feats
* sort members
* run formatter
2022-05-02 12:28:56 -04:00
John Colvin 78155cfbdf refactor: Clean up LadderOrderVM
* use new lang feats
* sort members
* run formatter
2022-05-02 12:28:56 -04:00
John Colvin 1ba980d69f refactor: Accept tuples with non-uniform types in 'Sum' ext 2022-05-02 12:28:56 -04:00
John Colvin ef155aaedf Remove redundant bootstrapping code from TableUpdateDemuxer 2022-05-02 12:28:56 -04:00
John Colvin 22c4b528cb fix: Actually propagate updates to Subject nodes in TableUpdateDemuxer
Bugs (fixed):
   * Working orders are not showing in ladder
2022-05-02 12:28:56 -04:00
John Colvin fd71c6ac7a Set ShowDecimalPart to false in default qty display settings 2022-05-02 12:28:56 -04:00
John Colvin 019fa134cb fix: Use valid defaults for price/qty display in SecurityMD 2022-05-02 12:28:56 -04:00
John Colvin 4a40bd3364 refactor: Move SecurityDataHelper to spark_api proj 2022-05-02 12:28:56 -04:00
John Colvin 68229b2474 build (server): Update CMakeDeps 2022-05-02 12:28:56 -04:00
John Colvin 8727ed6ccd Upgrade server to dotnet-sdk 6
* upgraded externals to install dotnet-sdk-6.0 in docker
* rewound the sdk version specified in global.json to 6.0.200 (latest
available in the apt repository)
* updated some fs code that wasn't backwards compatible (namely the
builtin 'TryParse' methods)
2022-05-02 12:28:56 -04:00
John Colvin 8ee3d5b8ad web: Add tsconfig for clang release build
Not sure why this file was absent in the first place, as similar
tsconfig files were already present for clang debug, and gcc
debug/release
2022-05-02 12:28:55 -04:00
John Colvin 98ee43aa27 ui: Add spark menu items to toggle auto-copy-rolls/rates 2022-05-02 12:28:55 -04:00
John Colvin 92291e3f9f refactor: Clean up AnalyticsParametersManager
* replace ThreadedBlackboard w/ IBus
* use new lang feats
* run formatter
2022-05-02 12:28:55 -04:00
John Colvin 1abb41a0d5 ui: Change sec-type abbrev to be all caps 2022-05-02 12:28:55 -04:00
John Colvin 0993195f03 fix: Use CollectionViewSource to workaround wpf bug
Bugs (fixed):
   * Some dropdowns in exp params grid are empty
2022-05-02 12:28:55 -04:00
John Colvin c2a7c6f994 fix: Set result to null if conversion to nullable<T> fails
Was setting the result to default(T) before

Bugs (fixed):
   * Various exceptions stem from failed conversions to nullable types
   when the underlying type doesn't have a valid default state.  For
   example, default instances of immutable protobufs throw exceptions in
   property accessors for reference type members.
2022-05-02 12:28:55 -04:00
John Colvin 48900cf5a0 ui: Use BTSColors.input_dirty_border in exp params
This makes the 'dirty' color consistent with the rest of the system (was
using hardcoded Red before)
2022-05-02 12:28:55 -04:00
John Colvin 57fbb36808 feat: Add TimeWeightedInterpolated driver to analytics exp params 2022-05-02 12:28:55 -04:00
John Colvin 5c45384c34 refactor: Clean up AnalyticsExpirationParametersRowVM
* use new lang feats
* run formatter
2022-05-02 12:28:55 -04:00
John Colvin f9aa162e2a refactor: Clean up AnalyticsExpirationParametersVM
* use new lang feats
* run formatter
2022-05-02 12:28:55 -04:00
John Colvin 013d17c386 refactor: Enable nullable in AnalyticsExpirationParametersView.xaml.cs 2022-05-02 12:28:55 -04:00
John Colvin ad250c3883 fix: Include sec-type str in ExpirationTextConverter
Bugs (fixed):
   * ExpirationTextConverter.Convert doesn't include the sec-type part
   when 'ShowType' is true
2022-05-02 12:28:55 -04:00
Taha Afzal 2c9e0012e2 Cleaning up VolSurfaceRiskCalculator vs VolSurfaceSlideCalculator 2022-04-29 12:57:35 -04:00
Taha Afzal 2516f23e37 TC2 gets its list of symbols form the settings the rightway now 2022-04-29 12:43:34 -04:00
Taha Afzal d3a7bd48c2 Account setting in Slide is being respected now 2022-04-28 18:37:07 -04:00
Taha Afzal 4aeb7490e3 Slide calculates now if the caculation mode is set for Live Theo or Position update 2022-04-28 17:11:03 -04:00
Taha Afzal 265beef715 Slide is working (showing data, not verified the data though 2022-04-27 19:34:13 -04:00
Taha Afzal a58bf83a9a Added Combo computing code (temporarily brought old VoLSurfaceRiskCalculator back 2022-04-25 17:56:24 -04:00
John Colvin 9da1a4a2de fix: Remove CharSet.Unicode' from 'Logger_log' DLLImport attr
Bugs (fixed):
   * csharp logs only include the first char of the log message

Omnisharp recommended this be specified in the attribute after upgrading to
dotnet 6.  They were wrong.
2022-04-20 12:48:37 -04:00
John Colvin 8a98e38e73 Include opts (and futs) in manual fills sec popup 2022-04-20 02:42:35 -04:00
John Colvin 3044f4a0b1 ui: Sort accounts in dropdown in slide settings dialog 2022-04-20 02:12:14 -04:00
John Colvin 5104ae1742 ui: Set ComboReportWindow.MinWidth to 500
The default width was too narrow, and caused some labels to overlap
2022-04-20 01:47:47 -04:00
John Colvin 987ec14da2 Remove redundant call to _validate in combo conf vm 2022-04-20 01:39:52 -04:00
John Colvin 24c6e0df97 fix: Refresh combo report-result prop when risk-terms-name changes 2022-04-20 01:39:21 -04:00
John Colvin 23d5d18b28 fix: Set report.Id when saving combo report
Bugs (fixed):
   * When ok/apply is clicked in combo report settings, a new report is created
   with those params, instead of modifying the existing report
2022-04-20 01:38:22 -04:00
John Colvin 0a38c241af refactor: Rename ComboVM -> ComboReportVM 2022-04-20 00:36:53 -04:00
John Colvin 5b0d79ad17 refactor: Move ObservantAsyncCommand into ns Spark.ViewModel.Commands 2022-04-19 11:42:44 -04:00
John Colvin 833187559d refactor: Move AsyncCommand to ns Spark.ViewModel.Commands 2022-04-19 11:42:44 -04:00
John Colvin 527066e4c8 refactor: Move IRaiseCanExecuteChangedCommand to ns Spark.ViewModel.Commands 2022-04-19 11:42:44 -04:00
John Colvin bad30a49bf Open options-view with security-picker
TODO: translate the SecurityCriteria into NMSheetsSettings so the
selected criteria is actually used in the window
2022-04-19 11:42:44 -04:00
John Colvin 24f40dd652 ui: Hide strikes/callput fields in contract-picker 2022-04-19 11:42:44 -04:00
John Colvin dce61183dd fix (preemptive): Unhook callbacks when contract-picker controller disposed 2022-04-19 11:42:44 -04:00
John Colvin aeb81a9e86 fix (preemptive): Init contract-picker controller when datacontext changes 2022-04-19 11:42:44 -04:00
John Colvin 81aea15988 ui: Use qty display settings in fills 2022-04-19 11:42:44 -04:00
John Colvin 3e393208ab ui: Use qty display settings in orderbook 2022-04-19 11:42:44 -04:00
John Colvin 0674accd05 Set initial qty to NaN (not 0) in ladder
This makes the initial state consistent with the state after clicking
'Clear'
2022-04-19 11:42:44 -04:00
John Colvin 0f0d8df572 fix: Set init val through display-translator in SizeCalculator
The init val was being passed to the erroneous `UserProperty<T?> _value` field,
which should have been deleted when the _display_translator was introduced.

Bugs (fixed):
   * the ladder-view's initial size field is null when
2022-04-19 11:42:44 -04:00
John Colvin 0afd06be9c feat: Support double qty input in order ticket 2022-04-19 11:42:44 -04:00
John Colvin 1539bfa8b1 feat: Support double quantity input in Ladder 2022-04-19 11:42:43 -04:00
John Colvin a2336be143 fix: Check if _settings is null in LadderGridHost._refresh_prices
Bugs (fixed):
   * NullReferenceException is thrown when the right-panel-ladder (in
   OrderBook) is opened with no selected rows
2022-04-19 11:42:43 -04:00
John Colvin 7d65befc7e refactor: Overload detect_property_changes w/ eq comp params 2022-04-19 11:42:43 -04:00
John Colvin 916b28bc16 refactor: Clean up LadderVMContainer 2022-04-19 11:42:43 -04:00
John Colvin fb3447a6b4 refactor: Consolidate TickUpDownNullable classes into generic impl 2022-04-19 11:42:43 -04:00
John Colvin 2fa9b2e0e5 refactor: Rename TickUp/DownParameter TickUp/DownCommandParameter 2022-04-19 11:42:43 -04:00
John Colvin a66d3fb28a refactor: Return bool indicating whether object was disposed 2022-04-19 11:42:43 -04:00
John Colvin 6be017d35b fix: Make new instances of arrow icons instead of sharing
Bugs (fixed):
   * 'Freezable cannot be frozen' exception thrown when opening
   multiple windows (on diff threads) that use the same arrow icons
2022-04-19 11:42:43 -04:00
John Colvin ef24e5164f refactor: Change uint qty members to doubles 2022-04-19 11:42:43 -04:00
John Colvin a7f36b2361 refactor: Support generic numerics in tick-utils 2022-04-19 11:42:43 -04:00
John Colvin 3d404002a0 refactor: Make QuantityConversionData generic for numeric T 2022-04-19 11:42:43 -04:00
John Colvin 1922a1b49c refactor: Make MathUtils/NumericExtensions generic 2022-04-19 11:42:43 -04:00
John Colvin ca4ec7025c Add price/quantity display config to SecurityMD 2022-04-19 11:42:43 -04:00
John Colvin 7dcfa709d5 Add SecurityMetadata (proto3) config
Immediate Purpose:
   * Add security-based config for 'unit-quantity'
2022-04-19 11:42:43 -04:00
John Colvin aa254142e8 Add client-side support for proto3 config 2022-04-19 11:42:42 -04:00
John Colvin b00b12bed2 refactor: Clean up MDSource/Daemon and deps 2022-04-19 11:42:42 -04:00
John Colvin dd7168a687 Add SecurityMetadata pbuf to client build 2022-04-19 11:42:42 -04:00
John Colvin 97b665733a Add SecurityCriteria pbuf type to client build 2022-04-19 11:42:42 -04:00
John Colvin 4a6d3e3042 Add bts/api/domain to proto search path for config 2022-04-19 11:42:42 -04:00
John Colvin f65cf43e21 refactor: Rename bts.api.domain.SecurityType.INDEX -> SPOT 2022-04-19 11:42:42 -04:00
John Colvin f971d4db51 Add SYNTHETIC to bts.api.domain.SecurityType 2022-04-19 11:42:42 -04:00
John Colvin 8cd79c0372 Add BTS and SIM to bts.api.domain.Venue 2022-04-19 11:42:42 -04:00
John Colvin 9bc346e84a refactor: Clean up SecurityCriteria
* move SecurityCriteriaClause into own file
* convert fields to props
* sort members
* use new lang feats
* run formatters
2022-04-19 11:42:42 -04:00
John Colvin 88d2e1756f refactor: Rename config.cs -> Configuration.cs 2022-04-19 11:42:42 -04:00
John Colvin dc09c45330 refactor: Clean up config.cs
* use new lang feats
* specify CharSet.Unicode in DLLImports (avoids warning ca2101)
* sort members
* run formatter
2022-04-19 11:42:42 -04:00
John Colvin 47e5b57789 style: Clean up SecurityMD
* sort members
* use new lang feats
* run formatter
2022-04-19 11:42:42 -04:00
John Colvin c1ad8ed4b2 style: Clean up AnalyticsService.proto 2022-04-19 11:42:42 -04:00
John Colvin 3589b5c9a8 build: Upgrade MEF pkgs in spark proj
Also remove unneccessary pkg 'Microsoft.Extensions.DependencyInjection'
2022-04-19 11:42:42 -04:00
John Colvin fbaf15ad34 fix: Export shared inst for IWindowManager/Interop
Bugs (fixed):
   * 2 WindowManager instances are created on startup!  This causes many
   problems (for ex, 'IShellWindow.thread_init' is called twice for each
   shell window)
2022-04-19 11:42:42 -04:00
John Colvin ee1d02991c feat: Port combo report over from edge 2022-04-19 11:42:42 -04:00
John Colvin 2450cb028e Fix BTSOxyGraph background binding 2022-04-19 11:42:42 -04:00
John Colvin ec1182f059 Impl IEquatable in SparkTag
This is a pre-emptive fix.  Without it, we are susceptible to potential hash
collision bugs in the bus
2022-04-19 11:42:41 -04:00
John Colvin 7797d8255f fix: Avoid duplicate entries in cpp list 2022-04-19 11:42:41 -04:00
John Colvin a4780ecac7 refactor: Make 'within_range' param order consistent 2022-04-19 11:42:41 -04:00
John Colvin 32643990ee refactor: Use generic math in MathUtils/NumericExtensions 2022-04-19 11:42:41 -04:00
John Colvin 5746e6267a Check equality in BoundColumn prop setters
Only call 'RaisePropertyChanged' when value actually changes
2022-04-19 11:42:41 -04:00
John Colvin 501ec81405 build: EnablePreviewFeatures for cs build
Namely, to enable generic math to allow for generic use of numeric
binary operators
2022-04-19 11:42:41 -04:00
John Colvin 714f4fe995 refactor: Drop 'Single' in SingleComboReportCalculator 2022-04-19 11:42:41 -04:00
John Colvin ead71a5618 style: Move ComboFuture/StrikeData into own files 2022-04-19 11:42:41 -04:00
John Colvin eaf6e4ba28 refactor: Clean up VolSurfaceUtilityFunctions
* use new lang feats
* remove redundant ported functionality (refactor w/ impls in spark)
* run formatter
2022-04-19 11:42:41 -04:00
John Colvin bef2c9310e Add 'Fill' list ext fn 2022-04-19 11:42:41 -04:00
John Colvin 7b3e0d4a59 refactor: Clean up SecurityTuple/Expiration/Strike
* use new lang feats
* sort members
* run formatter
2022-04-19 11:42:41 -04:00
John Colvin ea0705e7e4 fix: Avoid dupl keys when stripping exch from SecurityExpiration 2022-04-19 11:42:41 -04:00
John Colvin 7b9310f595 refactor: Repl IDict w/ IReadOnlyDicts in vs risk calc 2022-04-19 11:42:41 -04:00
John Colvin a31f775de8 refactor: Simplify change_vol_dervs_to_percentages 2022-04-19 11:42:41 -04:00
John Colvin f061630789 refactor: Clean up VolSurfaceRiskCalculator
* Use new lang feats
2022-04-19 11:42:41 -04:00
John Colvin 5d442125b0 refactor: Use switch case for is_delta_greek impl 2022-04-19 11:42:41 -04:00
John Colvin e600f444f8 refactor: Clean up Slide/VolSurfaceRisk calcs
* Gather related 'out params' into new SecurityPositionData struct
* Break up long compute_and_fire fn in SlideReportCalculator into several fns
* Use new log_op fn to eliminate messy timer code sections
* Run formatter
2022-04-19 11:42:41 -04:00
John Colvin a8ae4d6655 Add create, append, to_comparer fns for ComparerBuilder 2022-04-19 11:42:41 -04:00
John Colvin a885fa7065 Add LoggerExtensions to record (time) ops 2022-04-19 11:42:41 -04:00
John Colvin 65665dc384 Add HierarchicalDictionary
A useful abstraction for nested dictionaries
2022-04-19 11:42:40 -04:00
John Colvin a8992edf88 fix: Check report type when converting to Report pbuf 2022-04-19 11:42:40 -04:00
John Colvin 1b7dd28c2f fix: Use key/value comparer args when creating SetMap
This is a pre-emptive fix, as this fn isn't currently referenced
2022-04-19 11:42:40 -04:00
John Colvin ae692432a2 fix: Use sec type arg when converting vsexp to securityexp
Bugs (fixed):
   * duplicate items in slide report expirations dropdown

In code recently ported from edge, the security type was [assumed to be]
implied by the symbol's capitalization: futures begin with upper-case letters,
while options begin with lower-case.  This assumption has become unreliable (at
deribit, both futures and options are all upper-case).
2022-04-19 11:42:40 -04:00
John Colvin c779b31a90 refactor: Clean up [csharp] co2 classes
* Move all [non-nested] classes/structs into own files
* Sort members
* Fix naming convention violations
* Use new lang feats
* Run formatter
2022-04-19 11:42:40 -04:00
John Colvin cb4bf8f5f4 Remove unused class TimeAndSalesModel 2022-04-19 11:42:40 -04:00
John Colvin 96cd807720 Add fake slide report data 2022-04-19 11:42:40 -04:00
John Colvin 07c3150d2a refactor: Change abstract TradeLogRow class to interface 2022-04-19 11:42:40 -04:00
John Colvin c66a405e6d refactor: Enable nullable (lang feat) on some Slide files 2022-04-19 11:42:40 -04:00
John Colvin 0558381bcb Add DataTemplates ResourceDictionary to TimeFilterControl
So callers aren't required to include it themselves
2022-04-19 11:42:40 -04:00
John Colvin 1db47684b7 refactor: Remove redundant ImmutableWrapper for list 2022-04-19 11:42:40 -04:00
John Colvin e16abd2e8b Check AdornerLayer not null when adding drag adorner
Bugs (fixed):
   * Opening slide report settings dialog causes crash
2022-04-19 11:42:40 -04:00
John Colvin f7adc84f0e feat: Port slide report over from edge 2022-04-19 11:42:40 -04:00
John Colvin 3acd51b247 refactor: Replace non pbuf ReportParameters with pbuf Report 2022-04-19 11:42:40 -04:00
John Colvin 6caab9c017 refactor: Make tags create/activate reports type-agnostic 2022-04-19 11:42:40 -04:00
John Colvin 97c61d2a4f refactor: Rename SingleSlideReportCalculator SlideReportCalculator 2022-04-19 11:42:40 -04:00
John Colvin 4f6a0061fe refactor: Clean up ObservableDemuxer
* Move to spark_core
* Split classes into sep files
* Use new lang feats
* Run formatter
2022-04-19 11:42:40 -04:00
John Colvin 5b201069e8 Add Bootstrap ext fn for IObservables 2022-04-19 11:42:39 -04:00
John Colvin 8b5d79847f Add 'Select' ext fns for Update/TableUpdate 2022-04-19 11:42:39 -04:00
John Colvin 2d112a86af refactor: Remove LegacyTableUpdate (repl w/ TableUpdate) 2022-04-19 11:42:39 -04:00
John Colvin 8806a62af7 refactor: Clean up ReflectionHelper/ObjectSnapshot
* Consolidate as much code as possible in ReflectionHelper (spark_core)
* Sort members
* Run formatter
2022-04-19 11:42:39 -04:00
John Colvin 01748ee847 Remove ExpirationTemplate from DataTemplates.xaml
It isn't general purpose enough to justify its presence in this global
resource file
2022-04-19 11:42:39 -04:00
John Colvin 6f1fb24a31 refactor: Move ExpTextConverter into own file
Also rename it "ExpirationTextConverter"
2022-04-19 11:42:39 -04:00
John Colvin c30459115e Post accounts-map on the bus 2022-04-19 11:42:39 -04:00
John Colvin 7cdfcbf6dc Support changes to icon in SparkMenuItem 2022-04-19 11:42:39 -04:00
John Colvin acf140e670 Add ObservableValue to spark_core 2022-04-19 11:42:39 -04:00
John Colvin df4a18e887 refactor: Clean up ComparerBuilder
* Implement IList<IComparer<T>>
* Use new lang feats
* Run formatter
2022-04-19 11:42:39 -04:00
John Colvin dc3836065a refactor: Move pbuf clone exception handling into 'try_clone' 2022-04-19 11:42:39 -04:00
John Colvin 3df7ab194c refactor: Clean up ProtobufSerializationHelper
* Use new lang feats
* Rename clone_protobuf -> clone
* Run formatter
2022-04-19 11:42:39 -04:00
John Colvin c0af8460a2 refactor: Move ProtobufSerializationHelper into spark_core 2022-04-19 11:42:39 -04:00
John Colvin 85d94a84a8 Add Chevron icons (right and down) 2022-04-19 11:42:39 -04:00
John Colvin 6ad6a361f9 Execute async command in try/catch
Purpose: treat both completed and canceled tasks as "finished."

Previously, the AsyncCommand waited endlessly for "canceled" tasks to finish.
As a result, if the command disallowed concurrent execution, the 'CanExecute'
flag would never be flipped back to true, and any buttons associated with that
command would be permanently disabled.
2022-04-19 11:42:39 -04:00
John Colvin 2a5dcab60f refactor: Move UserSymbol into own file 2022-04-19 11:42:39 -04:00
John Colvin 02b97d594f Add ReportExtensions 2022-04-19 11:42:38 -04:00
John Colvin 5e1cac251b fix: Actually copy untracked files in git-save.py 2022-04-19 11:42:38 -04:00
John Colvin 3639638bf2 refactor: Clean up AnalyticsShellModule a bit 2022-04-19 11:42:38 -04:00
John Colvin e255e054d4 refactor: Split analytics module/viewmodel into sep classes 2022-04-19 11:42:38 -04:00
John Colvin 8c9d8e7089 refactor: Move Commands dir into ViewModel 2022-04-19 11:42:38 -04:00
John Colvin f0e069d348 Add IProtobuf 2022-04-19 11:42:38 -04:00
John Colvin 4f32c8469e refactor: Clean up DateFormatter
* move DateFormat enum into sep file
* sort members
* use new lang feats
* run formatter
2022-04-19 11:42:38 -04:00
John Colvin b2679ecb60 Clean up old (recently ported) slide/report code 2022-04-19 11:42:38 -04:00
John Colvin e0537267a2 Add max_name_length field to EnumDescriptor 2022-04-19 11:42:38 -04:00
John Colvin 3440afd0d6 refactor: Split log-related classes into sep files 2022-04-19 11:42:38 -04:00
John Colvin cab65a0aaf refactor: Clean up TimeFilterVM
* Move ITimeFilterVM into separate file
* Use new lang feats
* Sort members
* Run formatter
2022-04-19 11:42:38 -04:00
John Colvin 910908b43e Add some handy Array utils 2022-04-19 11:42:38 -04:00
John Colvin cf1c1e6df1 refactor: Clean up ArrayUtils 2022-04-19 11:42:38 -04:00
John Colvin ff9b4f5b2f build: Upgrade dotnet core 5.0 -> 6.0 2022-04-19 11:42:38 -04:00
John Colvin 01899428e3 ui: Bind alignment props in ComboCheckBox template 2022-04-19 11:42:37 -04:00
John Colvin ff75ade140 fix build (client): Change 'uint' -> 'uint32_t'
Apparently the includes don't define 'uint' on windows
2022-04-19 11:34:28 -04:00
taha afzal 25d5f36645 Exchange positions are periodically published by OrderServices 2022-04-19 10:33:45 -04:00
Taha Afzal 5c5f042cac Logging in the Bus and threadedBlackboard classes adjusted 2022-04-18 13:16:16 -04:00
Taha Afzal 7da0b32838 SpreadSpec changes are handled rightaway (instead of being put on a timer) 2022-04-18 13:16:16 -04:00
Taha Afzal 389896be07 Retiring some SpreadBox superflous settings 2022-04-18 13:16:16 -04:00
Taha Afzal f55323afca SpreadBox settings cleaned up (partially) 2022-04-18 13:16:16 -04:00
Taha Afzal 0d5313d263 SpreadCalculationSynchronizer checks SpreadValue changes before posting them to the bus 2022-04-18 13:16:16 -04:00
Taha Afzal bc676b9731 Cleaning up the SpreadBox calculation code 2022-04-18 13:16:16 -04:00
Taha Afzal 0313a90196 Cleaned up SpreadManager 2022-04-18 13:16:16 -04:00
Taha Afzal fca1c62a55 Filtering expired contracts in the UI 2022-04-18 13:16:16 -04:00
Taha Afzal 2dcb0d6177 Fixed PriceControlGUI so that the price coule br overriden (locked) based on the consturctor arguments. For TC2 it does notallow overrides whereas for SpreadBoxes it does 2022-04-18 13:16:16 -04:00
Taha Afzal e2eea4bca7 Deleting unused SpreadBox spread types 2022-04-18 13:16:15 -04:00
Taha Afzal 9218184ef1 SpeadBox theo default formatting set to 4 dec places 2022-04-18 13:16:15 -04:00
Taha Afzal a9ec9e87be SpreadBox added 2022-04-18 13:16:15 -04:00
taha afzal f650ff3ccf Modfified IEMOrderMux interface 2022-04-16 20:38:02 -04:00
taha afzal b2640d2203 Updading interface for Emumba 2.2.5 2022-04-16 00:54:03 -04:00
taha afzal c3b05d27f1 EMNativeOrders clean up (this is partially done, reporting and limiter reporting needs cleaning up) 2022-04-15 01:22:51 -04:00
taha afzal 9b3a706328 Cleaned up EMExecutionGateway 2022-04-13 17:16:03 -04:00
taha afzal 290392553e EMNativeOrder does not mark all recovered orders as errors 2022-04-13 17:16:03 -04:00
taha afzal 07838553a6 Added Exchange Positions stream to OrderService 2022-04-13 17:16:03 -04:00
taha afzal 824ce8b172 ExchangePosition routed all the way to OrderServer 2 2022-04-13 17:16:03 -04:00
taha afzal 6ecccdee7f Routing ExchangePosition to OrderServiceServer 2022-04-13 17:16:03 -04:00
taha afzal 96d58942d0 Added all open orders query to IEMOrderMuxer 2022-04-13 17:16:03 -04:00
taha afzal 9c33405383 Added position enquiry function to (and asycn callback) to IEMOrderMuxer 2022-04-13 17:16:03 -04:00
taha afzal a8a5fc3672 Stopgap fix for order final state not being reached, by piggybacking on the trades callback 2022-04-13 17:16:03 -04:00
taha afzal 0178716b01 Orders API now supports fractional quantites 2022-04-13 17:16:03 -04:00
John Colvin 9c6327160d fix: Set response-success to true in delete report
Bugs (fixed):
   * When a report is successfully deleted, the response from the server
   indicates failure
2022-04-08 12:37:58 -04:00
Taha Afzal 5975e1bfb1 Adding algo dropdown to the ladder for options 2022-03-31 14:58:13 -04:00
taha afzal 5a0c70c301 Removing some unused protos 2022-03-31 14:57:40 -04:00
taha afzal b21c6f45b7 Putting Deribit securities in config 2022-03-31 14:34:29 -04:00
taha afzal 73596546bf Moving Deribit symbols from SIM to Deribit 2022-03-31 14:34:29 -04:00
taha afzal 6bf83c9e72 Removing the temporary file based order entry mechanism in EmMDListener 2022-03-31 14:34:29 -04:00
taha afzal 9385176bb5 Cleaning up IEMOrderMuxer 2022-03-31 14:34:29 -04:00
taha afzal 64240c5f3b Deribit orders (mostly) work 2022-03-31 14:34:29 -04:00
taha afzal 32c4d05106 NativeOrder and ExecutionGateway for EM via Deribit 2022-03-31 14:34:29 -04:00
taha afzal 65afb81f33 Added an order interactor that can read fro the file and secd/update/cancel orders 2022-03-31 14:34:29 -04:00
John Colvin 21a4673a1f Fix typos in ReportParams pbuf 2022-03-21 13:11:59 -04:00
Taha Afzal 03c13e37db Time calculation now considers time of expiration, however the time to expire is hard coded for Deribit options 2022-03-06 21:23:45 -05:00
taha afzal e8dfbe1d01 AnalyticsServiceServer's archive vol request now respects the symbol in the arguments 2022-03-04 19:01:51 -05:00
Taha Afzal cd576793f7 Straddle is normalized for the fwd 2022-03-03 22:36:24 -05:00
Taha Afzal 736cb21e4d Changed the tag/data to request archived vols 2022-03-03 16:25:05 -05:00
Taha Afzal d32efe90b9 Changed the ArchivedVol Request type to match the service call type 2022-03-03 16:25:05 -05:00
Taha Afzal f873675628 VolSurfaceUsage and Sheet launch hard coded value changes for ETH 2022-03-03 16:25:05 -05:00
Taha Afzal 65cb5e434b VolSurface Usage cleaning up 2022-03-03 16:25:05 -05:00
Taha Afzal 272fd35699 Archived vols now contains the SecTups that are part of the vols 2022-03-03 16:25:05 -05:00
Taha Afzal 838546b497 Saving vols with vol change and showing vol change in sheets 2022-03-03 16:25:05 -05:00
Taha Afzal a17fcb50c4 Adding call to save theos 2022-03-03 16:25:04 -05:00
John Colvin 70def3ce72 Multiply delta and vol by 100 in time/sales ui 2022-03-03 15:24:26 -06:00
John Colvin 627d307781 Split time/sales 'Edge' col into Buy/Sell Edge cols 2022-03-03 15:24:21 -06:00
John Colvin b96cdafc71 fix: Divide theo & delta by driver to normalize them
Bugs (fixed):
   * Theo and delta are wrong in time/sales
2022-03-03 11:39:40 -05:00
John Colvin f9f6fa6233 fix: Prevent time/sales vertical scrollbar clipping 2022-03-02 23:27:01 -05:00
John Colvin d8dd9ce4a2 Skip hidden cols when computing time/sales win width 2022-03-02 23:27:01 -05:00
John Colvin 07a349e0d2 refactor: Clean up TimeAndSalesWindow/Factory 2022-03-02 23:27:01 -05:00
John Colvin 65e23373cd Init grid settings in TimeAndSales default settings 2022-03-02 23:27:00 -05:00
John Colvin 6698188e00 Allow null 'can execute' delegate in SparkCommand.create 2022-03-02 23:27:00 -05:00
John Colvin 0242d964b2 feat: Add greeks to Time/Sales 2022-03-02 23:27:00 -05:00
John Colvin c1d2fc6ead Add IReadOnlyList wrapper impl for IList
Useful for lazily preserving the Count/indexer features when converting
IList to IReadOnlyList
2022-03-02 23:17:43 -05:00
John Colvin 74bb094582 Filter out empty updates in trades IObservable 2022-03-02 23:17:43 -05:00
John Colvin 9e14595458 Add fn to merge IObservable trades with greeks
Also clean up up TradesSource a bit
2022-03-02 23:17:43 -05:00
John Colvin fdb90a689a refactor: Clean up TimeAndSalesSettings
* Use new lang feats
* Run formatter
2022-03-02 23:17:43 -05:00
John Colvin a1b3fbf3e9 refactor: Clean up TimeAndSalesVM
* Use new lang feat feats
* Run formatter
2022-03-02 23:17:43 -05:00
John Colvin fccaa23d1f refactor: Rename TimeAndSalesView.Columns -> TimeAndSalesColumnType 2022-03-02 23:17:43 -05:00
John Colvin df789fed2e refactor: Don't copy trade_key in TimeAndSalesRowVM 2022-03-02 23:17:43 -05:00
taha afzal c254b982a2 Removing the hardcoded BTC 2022-03-02 18:38:36 -05:00
taha afzal 78adea7bcb Added SecTup to VolSurfaceUsage 2022-03-02 13:59:45 -05:00
John Colvin 5085874b86 fix: Invalidate DIYGrid row view in Loaded callback
Bugs (fixed):
   * Some grids are showing blank rows (esp Time/Sales, mview)
2022-03-01 16:58:05 -05:00
John Colvin 8631b85e42 style: Add documentation to ConnectableObservableSelector 2022-03-01 16:58:05 -05:00
taha afzal f9449f5fa6 Implemented get_archived_theos in AnalyticsServiceServer 2022-02-28 19:29:55 -05:00
taha afzal 0cef0ce4e5 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-28 14:36:43 -05:00
taha afzal bac62f99ea in AnalyticsService ArchiveTheo now has the key istead of the Security 2022-02-28 14:36:27 -05:00
John Colvin 017a788933 refactor: Clean up Ladder
* Create an official LadderWindow class (previously, ladder windows were
  instantiated as `AnonymousShellWindow`s in a terse, hard-to-read creation fn)
* Run formatter
2022-02-28 14:29:12 -05:00
John Colvin 224b518a60 fix: Set width/height for new shell windows
Bugs (fixed):
   * The ladders open tiny like the tiny balls (in vs graph)
2022-02-28 14:29:12 -05:00
John Colvin f98f6380c4 Add ThreadSafeEvent and SpinLockExtensions 2022-02-28 14:29:12 -05:00
John Colvin 9a8b156443 Add observe_title fn to ShellWindowBase
This impl handles some tricky threading issues
2022-02-28 14:29:12 -05:00
John Colvin a269b8efe1 Fix duplicate protomember ids in UserSettings 2022-02-28 14:29:12 -05:00
John Colvin b609a290db Add nifty IObservable KeyResolver util 2022-02-28 14:29:12 -05:00
John Colvin ccdc033c60 build (client): Activate py venv before generating cpp protos
Finally, the client can be built from a shell outside of the venv
2022-02-28 14:21:31 -05:00
John Colvin ed864cae5d style: Format cmake files 2022-02-28 14:21:31 -05:00
John Colvin 1dec925c73 Fix typo in 'ticks-per-row' rounding logic for ladder 2022-02-28 14:21:31 -05:00
John Colvin 9c5856f247 Link against 'fmtd' if building debug 2022-02-28 14:21:31 -05:00
John Colvin 024572c35c Update externals to get openssl and fmt release lib fixes 2022-02-28 14:21:30 -05:00
John Colvin 4e6ae49f26 style: Remove old/useless comments in spark_sdk.csproj 2022-02-28 14:21:30 -05:00
John Colvin 1aa57a2f6f Fix typo net471 -> net5.0 in spark_sdk.csproj 2022-02-28 14:21:30 -05:00
John Colvin 33e2f4b6ff build: Use appropriate debugtype arg for debug/release 2022-02-28 14:21:30 -05:00
taha afzal 44603c0b4c Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-28 13:30:09 -05:00
taha afzal f9c79d5b44 Added vol/theo archiving to AnalyticsService 2022-02-28 13:29:57 -05:00
Taha Afzal 771258eeb7 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-28 09:05:21 -05:00
Taha Afzal d37e82d200 Exp Params' old exps are deleted at save time 2022-02-28 09:05:10 -05:00
taha afzal fb2fd21417 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-26 23:06:19 -05:00
taha afzal 98362c7eb9 Fixing the deribit connection drop issue 2022-02-26 23:05:47 -05:00
Taha Afzal 128bc3c391 Fixing the crash with expired drivers 2022-02-24 15:36:23 -05:00
John Colvin c294406934 dev/john: Update/format docker scripts 2022-02-23 15:07:50 -06:00
John Colvin 3825ce80eb dev/john: Update repo path in johns docker 2022-02-23 15:05:12 -06:00
John Colvin 01d6731929 dev/john: Cleanup (and fix) setup_builds.fish 2022-02-23 15:05:12 -06:00
John Colvin dff088fe37 Fix typo in include directive
Must have missed this in the protobuf-cleanup commit,
884a79e13a
2022-02-23 15:05:12 -06:00
Taha Afzal 2c4a203109 Bug with saving exp params 2022-02-21 23:59:02 -05:00
John Colvin c1b717d8de refactor: Split ScatterSeries color into 'fill' and stroke'
Previously, 'color' was simply an alias for 'fill.'  The new stroke property
provides some useful functionality, as it:
   * can can be used to set the marker shape's outline color
   * makes it possible to use 3 marker shapes that were thought to be broken
     (Cross, Plus, and Star). These shapes were never actually broken, they
     were merely invisible because they were colored [only] with the stroke
     property
2022-02-21 14:46:16 -05:00
John Colvin 5fb5a67210 style (ui): Make implied vol balls bigger 2022-02-21 14:24:46 -05:00
John Colvin 72ca24de18 refactor: Remove unused ctr from ScatterSeriesSettings 2022-02-21 13:46:10 -05:00
John Colvin dbb3cfc7cc refactor: Post exp params to bus in an ImmutableList
Previously, they were posted in an IEnumerable and thus created lazily.
which seemed ill-advised as the bus is multithreaded
2022-02-21 13:17:45 -05:00
John Colvin 2229abdc36 fix: Set vs window title to vs name in main win
Was only doing this in the 'dummy' window before
2022-02-21 12:58:25 -05:00
John Colvin 552836eafc style (ui): Add some padding around cells in vs grid 2022-02-21 12:00:56 -05:00
John Colvin 17af19661c fix: Never insert duplicate columns in vs grid
Bugs (fixed):
   * Volsurface window crashes sometimes when columns are changing
2022-02-21 12:00:56 -05:00
Taha Afzal 6bd2d9cd90 Fixing the build 2022-02-21 11:24:59 -05:00
Taha Afzal d5c3c64a18 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-21 11:11:18 -05:00
Taha Afzal f27fa7de8e Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-21 11:10:32 -05:00
Taha Afzal f568691731 Adding report API to analytics server 2022-02-21 11:10:15 -05:00
John Colvin 7506576138 fix: Constrain order ticket header width
Bugs (fixed):
   * Order ticket is not showing the X to dismiss the window
2022-02-21 00:01:07 -05:00
John Colvin 60fa83273c feat (ui): Add graph lines in vs window 2022-02-20 23:12:35 -05:00
John Colvin 0f6ee88075 fix: Load/save all settings props in [vs] AxisVM
Bugs (fixed):
   * When the vs window is restored (with a workspace):
      * Both axes lack titles
      * Values aren't formatted as percentages in y axis
2022-02-20 22:56:36 -05:00
John Colvin 99b1241fdb ui: Add row padding in vs grid 2022-02-20 22:01:24 -05:00
John Colvin 6ffc3d4cad fix: Maintain vs grid row sorting when selected exps change 2022-02-20 22:01:24 -05:00
John Colvin 4b2eda6a24 Add ObservableSortedCollection 'bind' ext fn 2022-02-20 22:01:24 -05:00
John Colvin 1a72533934 diag: Add Trace fn for ToggleButton 2022-02-20 22:01:24 -05:00
John Colvin f539a533e6 ui: Give TLC to exp params window 2022-02-20 22:01:24 -05:00
John Colvin 1e693af08f Add some Tuple ext fns for convenience 2022-02-20 22:01:24 -05:00
John Colvin 7916417b71 Add some IObserver utils/ext fns for convenience 2022-02-20 22:01:24 -05:00
John Colvin 46c38a0ff7 refactor: Clean up CompositeObserver
* Implement IList<IObserver<T>>
* Add static 'create' fns to support template type inference
* Sort members
* Run formatter
2022-02-20 22:01:23 -05:00
John Colvin 9d8f65adc0 Fix typo in ObservableAutoWrapper.connect overload
Previously, it wasn't passing the on_removed param to the other overload
2022-02-20 22:01:23 -05:00
John Colvin 1618784c0f refactor: Remove unused UISettings.proto 2022-02-20 22:01:23 -05:00
John Colvin 6b0f87bd31 ui: Host HeaderContent in ToggleButton in ComboCheckBox
Bugs (fixed):
   * HeaderContent in ComboCheckBox overlaps expander arrow
2022-02-20 22:01:23 -05:00
John Colvin e754ce0ec4 refactor: Begin renaming DelegateCommand to Command
This renaming makes ICommand creation less terse.  For now, leave
DelegateCommand in place, as its references are ubiquitous

TODO: Replace all remaining references to DelegateCommand w/ Command
2022-02-20 22:01:23 -05:00
Taha Afzal 38caa7f892 PNL calculator pushed in 2022-02-17 20:54:15 -05:00
Taha Afzal dd1d9b5df8 Adding slide calculator 2022-02-17 18:41:09 -05:00
Taha Afzal cb8a23c73f Adding combo report classes (1) 2022-02-17 17:38:12 -05:00
Taha Afzal 41a072d4d2 Started importing Risk 2022-02-16 23:32:21 -05:00
Taha Afzal 0905ea8c26 Removing the log in the VolSurfaceMDUnit which wa sporving to be very expensive 2022-02-16 19:41:49 -05:00
Taha Afzal a0ca0e5fd0 Removing more unused TC2 code 2022-02-16 15:48:07 -05:00
Taha Afzal e00015dccf Removing unused TC2 classes 2022-02-16 15:32:34 -05:00
Taha Afzal 865a12213c Theos can optionally be displayed as normalized by fwd 2022-02-16 15:20:42 -05:00
Taha Afzal b779014c13 Order ticket launch, setting for fwd normalized theos (both TC2) 2022-02-16 14:49:50 -05:00
Taha Afzal 4c04a78c79 cleaning unused code in TC2 2022-02-15 21:17:30 -05:00
Taha Afzal 32b769bdaa TC2 settings can now be restored 2022-02-15 18:20:54 -05:00
Taha Afzal 4c507aae4e Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-15 13:03:58 -05:00
John Colvin 8a17adb49d refactor: Overload OnDispatcher w/ Dispatcher param
By default, this param is assigned Dispatcher.CurrentDispatcher. This follows
the overload pattern in SubscribeOnDispatcher
2022-02-15 12:58:52 -05:00
John Colvin 09aeef03a6 fix: Use calling thread's Dispatcher in SubscribeOnDispatcher 2022-02-15 12:56:58 -05:00
John Colvin e020cca9d2 fix: Don't await dispatcher op in OnDispatcher notify impl
Bugs (fixed):
   * Crash on shutdown if OptionsView window is open, due to an unhandled
     TaskAborted exception in the OnDispatcher ext fn
2022-02-15 12:56:57 -05:00
Taha Afzal f86ba4f8fd Removed the expired exps from the sheets 2022-02-15 00:16:24 -05:00
Taha Afzal d6e724a47a Interp'd drivers are now showing in TC2 2022-02-14 23:45:35 -05:00
Taha Afzal a64a794a97 Hiding driver freeze and headers at the top 2022-02-14 20:31:35 -05:00
Taha Afzal 9d5202c49c Default columns visibility is better now 2022-02-14 18:30:02 -05:00
Taha Afzal cea0591a77 Settings were not taking affect when they were being set, Theo Acceptance button hidden 2022-02-14 18:18:19 -05:00
John Colvin 927ee4626e Set vs window title to vs name 2022-02-14 14:31:14 -05:00
John Colvin 47a0649de3 Add OptionsViewWindow (tc2) to MarketShellModule 2022-02-14 14:19:45 -05:00
John Colvin 2a50990849 refactor: Clean up SparkTags 2022-02-14 14:01:52 -05:00
John Colvin 03d89de6b9 Add ShellWindowBase class
This is in anticipation of the special winforms shell window for tc2
(eventually, SparkWindow should derive from this class as well)
2022-02-14 14:01:52 -05:00
John Colvin 884a79e13a refactor: Clean up protobuf files
* Rename files to snake_case (per Google style guide)
  https://developers.google.com/protocol-buffers/docs/style
* Prohibit single line functions in clang-format for proto files
* Run clang-format
2022-02-14 14:01:52 -05:00
John Colvin 47ce487162 refactor: Use IBus to remove vs win (not IWindowManager) 2022-02-14 14:01:51 -05:00
John Colvin 957172f282 refactor: Add 'hide_window' tag so wins can be removed via bus 2022-02-14 14:01:51 -05:00
John Colvin 8d081e0c45 refactor: Clean up shell window infrastructure classes
Cleans up: WindowManager, FloatingWindow, ShellWindowVM, a few IShellModule
implementations

* Sort members
* Use new lang feats
* Make code style more consistent with rest of code base
* Ensure FloatingWindow interactions occur on the Application Dispatcher thread
* Run formatter
2022-02-14 14:01:51 -05:00
John Colvin 991822bede refactor: Rename CheckInvokeAsync to snake_case
Also add documentation
2022-02-14 14:01:51 -05:00
John Colvin 8b7b76a337 refactor: Move vs ui files into new module dir 2022-02-14 14:01:51 -05:00
John Colvin af12d5bba1 refactor: Rename VolSurfaceModule -> AnalyticsModule 2022-02-14 14:01:51 -05:00
John Colvin c2c80271a3 ui (style): Stretch ComboCheckBox Header ContentPresenter
This gives users the ability to control header content alignment via the header
content template (previously it was always aligned Top-Left)
2022-02-14 14:01:51 -05:00
John Colvin 110faefc96 feat: Add axis-fit behavior setting for vs graph 2022-02-14 14:01:51 -05:00
John Colvin 4cf8959b13 ui: Refine vs exp header col style 2022-02-14 14:01:51 -05:00
John Colvin e3b6c9829a diag: Impl ToString for Series(Set)VM 2022-02-14 14:01:50 -05:00
John Colvin ffdd0fcff7 fix: Remove item from vis series when removed from series 2022-02-14 14:01:50 -05:00
John Colvin 527cea74d3 ui: Use Visibility.Collapsed to hide vs r/w cell content
This prevents unneccessary white space as Collapsed visuals, unlike
Hidden ones, don't occupy space
2022-02-14 14:01:50 -05:00
John Colvin 1fcd19c029 refactor: Clean up DIYGrid.HighPerformanceRow 2022-02-14 14:01:50 -05:00
John Colvin 6bf2c297d7 style: Clean up RecycleBin 2022-02-14 14:01:50 -05:00
John Colvin 2489a2ce0c Impl IReadOnlyDictionary in VisualDictionary 2022-02-14 14:01:50 -05:00
John Colvin 6d5e9eb94e style: Use switch expression in vs col view_factory 2022-02-14 14:01:50 -05:00
John Colvin 7ff2850b2d ui (style): Right-align vs grid cell content 2022-02-14 14:01:50 -05:00
John Colvin f70c2d4653 feat: Add grid lines to volsurface ui 2022-02-14 14:01:50 -05:00
John Colvin d7a91bed10 refactor: Clean up DIYGrid super headers 2022-02-14 14:01:49 -05:00
John Colvin f7178f3fa7 fix: Always Invalidate column layout on horizontal scroll
Previously, was only doing this when the [main grid] horizontal scroll
change triggered a similar scroll change in the column headers
2022-02-14 14:01:49 -05:00
John Colvin 77060841cb diag (refactor): Default all params in WPFTracer ctr 2022-02-14 14:01:49 -05:00
John Colvin 701649cb9b diag: Add trace fn for ScrollBar 2022-02-14 14:01:49 -05:00
John Colvin 3a598479fc refactor: Remove redundant event handler 2022-02-14 14:01:49 -05:00
John Colvin 4ca3f6b2f2 refactor: Move DIYGridExtensions into own file 2022-02-14 14:01:49 -05:00
John Colvin f30f0876a9 refactor: Replace DataContextHooks class w/ static fn 2022-02-14 14:01:49 -05:00
John Colvin 5c04f52be9 Don't overwrite shortheader in DIYGrid ctr 2022-02-14 14:01:49 -05:00
John Colvin 0c4cafcf87 Remove unused fns from DIYGridSortHelper 2022-02-14 14:01:49 -05:00
John Colvin d72e9ad2a6 refactor: Add id prop to DIYGridSuperHeader 2022-02-14 14:01:49 -05:00
Taha Afzal c0f7c28bda Deleting mor eunused code 2022-02-14 13:57:36 -05:00
Taha Afzal 511955c173 Removing unused TC2 classes 2022-02-14 13:50:45 -05:00
Taha Afzal 20c914492e NMSheetBBODataSource had a stub for threaded bb compatibility, removing it 2022-02-14 12:56:59 -05:00
Taha Afzal 1807e02416 Removed the Pair class from TC2 2022-02-14 12:50:43 -05:00
Taha Afzal 04b1b0ce4e Thinned up the ThreadedBB further, can one day be easily replaced by the IBus 2022-02-14 11:58:54 -05:00
Taha Afzal de2eb433b6 Unplugging the logic for a bunch of TC2 data (position, rolover vol, presaved values etc) 2022-02-13 23:53:32 -05:00
Taha Afzal cb10a5e99e Old bb and threaded bb are out from TC2 2022-02-13 23:41:43 -05:00
Taha Afzal 133034ad07 Removing 2 older methods in ThreadedBB 2022-02-13 22:00:04 -05:00
Taha Afzal 29f43464fa Removing TC2's dependence on Blackboard 2022-02-13 21:30:00 -05:00
Taha Afzal 0b7902029a Removing all untyped tags from TC2 2022-02-13 13:11:50 -05:00
Taha Afzal d514f9ed15 Getting rid of old blackboard - 1 2022-02-13 12:35:55 -05:00
Taha Afzal 5b0a056183 Removing more unused tags 2022-02-12 20:07:19 -05:00
Taha Afzal 7f3c7ed376 Cleanup continues 2022-02-12 11:14:04 -05:00
Taha Afzal 09760d29d5 Option md for TC2 fixed 2022-02-12 01:46:29 -05:00
Taha Afzal d5574ad90f Cleaning out TC2 tags 2022-02-12 00:31:50 -05:00
Taha Afzal 354984404a Cleaning up of TC2 tags 2022-02-11 17:42:12 -05:00
Taha Afzal 45b41a9ab8 Removing TC2's HighPerformanceTimer 2022-02-11 13:10:37 -05:00
Taha Afzal fddcb58555 Getting rid of the TheoPoint that got moved over with TC2 2022-02-11 12:03:44 -05:00
Taha Afzal 614552fdad Fixing a crash related to multiple representation of the same symbol in volsurface relationships 2022-02-11 09:57:33 -05:00
Taha Afzal 552b7dda0a Comments to make sense of the TC2 Sheets 2022-02-11 09:42:50 -05:00
Taha Afzal 3da7741f24 TC2 is part of Spark now - we will rule the crypto options space 2022-02-10 22:38:32 -05:00
Taha Afzal a08dd1e22d Cleaned up unused namespaces in these 2 classes 2022-02-09 18:17:03 -05:00
Taha Afzal 27399b3dbe interpolating for option expirations for whome the drivers are not set 2022-02-09 17:40:08 -05:00
Taha Afzal 4d9e7ca6e8 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-08 17:35:05 -05:00
Taha Afzal 2f2abe840a Added interp type in the analytics service proto 2022-02-08 17:34:48 -05:00
Taha Afzal 3506c65895 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-08 15:05:27 -05:00
Taha Afzal 5d185c51ba Using fixing price for marked price in SystemContractData 2022-02-08 15:05:04 -05:00
Taha Afzal b1e7865904 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-08 14:58:30 -05:00
Taha Afzal cc3e769afe QueryServer was not copying the Fixing price over (used as a proxy for Mark price) 2022-02-08 14:58:20 -05:00
Taha Afzal d9cc74cc78 Abstracting out driver retreival from VolSurfaceMDUnit 2022-02-08 13:51:17 -05:00
Taha Afzal 887a39da1a Disabled the SingleVolSurfaceTheoSource (which showed the before after theos) 2022-02-08 12:49:17 -05:00
Taha Afzal 8b384849f5 Double comparison was not accounting for both double vales NaN's 2022-02-07 21:51:05 -05:00
Taha Afzal 1a66fcafb5 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-07 21:43:48 -05:00
Taha Afzal a39fba8042 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-07 21:06:00 -05:00
Taha Afzal 9f61999ce9 changing the deribit exps to listen to (until the connection drop is fixed) 2022-02-07 21:05:49 -05:00
Taha Afzal 1a0d2e59ab Throttling the driver prices for performance 2022-02-07 20:50:06 -05:00
Taha Afzal 7d66d7847f Adding perf stats log 2022-02-07 17:46:48 -05:00
Taha Afzal b4c65bdde3 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-07 14:48:00 -05:00
Taha Afzal 8bd003d21e Perf logs added, plus GreekTuple initialization fixed 2022-02-07 14:47:55 -05:00
John Colvin 11bb41bbb6 Fix typo in mview row vm (delta prop was returning theo) 2022-02-07 12:28:48 -05:00
Taha Afzal ebefc65b69 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-02-07 11:43:18 -05:00
Taha Afzal 045029bfb4 Taing logging 2022-02-07 11:43:03 -05:00
Taha Afzal f66ab59f0d Added mark price for Deribit 2022-02-06 18:49:51 -05:00
John Colvin 4c608eec0e feat: Hide vs dummy window 2022-02-06 15:09:47 -05:00
John Colvin 2d6864b191 fix: Remove vs dummy win from win manager on main thread 2022-02-06 14:49:10 -05:00
Taha Afzal 1545458c76 Adding mark prices to VOlSurfaceMDUnit 2022-02-05 19:39:11 -05:00
Taha Afzal d23a390bf6 File name change 2022-02-05 19:08:52 -05:00
John Colvin 9e34cb3d61 feat: Add Vol and Driver cols to mview 2022-02-05 14:40:30 -05:00
John Colvin 170f526617 fix: Add greeks col filters to mview settings 2022-02-05 14:40:30 -05:00
John Colvin 17e0b37882 feat: Add greek col comparers to mview 2022-02-05 14:40:30 -05:00
John Colvin cbe3c1939e refactor: Clean up mview
* Rename members with shorter names (mainly to reduce the width of various
  calls, esp those that add columns in the MarketViewVM constructor)
* Move mview settings classes into own files
* Run formatter
2022-02-05 14:40:23 -05:00
Taha Afzal 251b014604 Added vs removal code to the service + adjusted to emumba's interface change 2022-02-04 18:52:49 -05:00
John Colvin fe416e726a fix: Make mview columns implement ISortableDIYGridColumn
Bugs (fixed):
   * mview column sorting is broken
2022-02-04 17:42:04 -05:00
John Colvin 4dcf296af2 Fix re-entrancy bug in PNLWindow when cols are changing
* Log column collection change events for diagnostic purposes
* Clean up code a bit
2022-02-04 17:41:32 -05:00
John Colvin 0a8a3bf6f2 refactor: Get rid of DoubleUtil
* Consolidate functionality in MathUtils and NumericExtensions
* Define gui-related epsilons in WPFHelper and HighDpiExtensions
2022-02-04 17:41:32 -05:00
John Colvin 174a7baaf4 refactor: Move numeric-extensions into own class 2022-02-04 17:41:32 -05:00
John Colvin 0e41b88bdf refactor: Clean up MathUtils
* Fix name violations
* Make lcm and gcd fns more efficient
* Use modern language features
* Run formatter
2022-02-04 17:41:32 -05:00
John Colvin 822dc0794a fix: Don't consider infinity a real number 2022-02-04 17:41:32 -05:00
John Colvin f644a3392b feat: Hook up (repair) vs grid settings editor
The vs grid settings editor code had already been ported over, but never
actually worked
2022-02-04 17:41:32 -05:00
John Colvin 8634386862 refactor: Return bool indicating whether AddOrUpdate adds item 2022-02-04 17:41:32 -05:00
John Colvin e4a84d343a Fix typo to correct insertion-idx-bug 2022-02-04 17:41:32 -05:00
John Colvin 7b0a7f7107 refactor: Change sync_with_never_duplicate param to IList
This makes the param more flexible, and thus broadens the fn's usability
2022-02-04 17:41:32 -05:00
John Colvin 11f345f3cd fix: Use IEqualityComparer arg in sync_with_never_duplicate 2022-02-04 17:41:32 -05:00
John Colvin 17f10b2450 refactor: Make DIYGrid.Columns type IReadOnlyList
This allows viewmodels to take advantage of IReadOnlyList<out T> covariance and
use more strongly typed column elements
2022-02-04 17:41:31 -05:00
John Colvin 18e26515de refactor: Support mutations in MutableWrapper list
Previously, this class was used to alias IReadOnlyList as an IList, and
each mutation fn would throw a NotSupportedException.  Now
mutations are supported if the source list implements IList (in
addition to IReadOnlyList)
2022-02-04 17:41:31 -05:00
John Colvin ee9d68c0e7 style: Flip if condition to dedent big code block 2022-02-04 17:41:31 -05:00
John Colvin f019163b35 Add AllowNaN and NaNText props to TickUpDownDouble 2022-02-04 17:41:31 -05:00
John Colvin b86b9b474f Fix display_name binding in vs grid settings view 2022-02-04 17:41:31 -05:00
John Colvin a7372fdcf6 Add ProtoMember attrs to TickDisplaySettings props 2022-02-04 17:41:31 -05:00
John Colvin 59c5fd1256 refactor: Impl ICloneable<GridSettings> in GridSettings 2022-02-04 17:41:31 -05:00
John Colvin 8fc55951eb Fix typo in tick parse fn
The parsed result was being multiplied by the display_multiplier where it
should have been divided by it. The parse fn is the inverse of the format fn,
which multiplies by the display_multiplier
2022-02-04 17:41:31 -05:00
John Colvin 1e60c2fc78 Fix rounding error in tickup/down fns
This bug went unnoticed until now bc these particular tickup/down fns
were never called in practice.  However, their use is imminent in the
volsurface ui (namely the grid)
2022-02-04 17:41:31 -05:00
John Colvin b6256244d3 refactor: Add driver to GreeksTuple 2022-02-04 17:41:31 -05:00
John Colvin e872106c5c refactor: Make GreeksTuple.with fn params nullable
This makes it possible to replace GreeksTuple fields with NaN
(previously, NaN indicated that an arg should be ignored)
2022-02-04 17:41:31 -05:00
John Colvin fc18d58681 refactor: Default GreeksTuple args to nan in ctr 2022-02-04 17:41:31 -05:00
John Colvin 7845b3fdc1 refactor: Clean up TickExtensions 2022-02-04 17:41:31 -05:00
John Colvin 4b27bbe490 Add handy utils to TickFactors/DisplaySettings
* Add static TickFactors presets
* Add TickDisplaySettings default
* Make TickFactors implement ICloneable<TickFactors>
* Add 'with' ext fn

TODO:
   * Replace instantiations of TickDisplaySettings that rely on inlined
   default values with the TickDisplaySettings.Default prop
2022-02-04 17:41:30 -05:00
John Colvin 3cd0c4073e refactor: Clean up TickFactors
* Get rid of _equals fn that assumes non-null args
* Use modern language features
* Run formatter
2022-02-04 17:41:30 -05:00
John Colvin a7803877e9 refactor: Rename RoundFractionalUnits to snake_case 2022-02-04 17:41:30 -05:00
John Colvin 0c4010baab refactor: Rename SafeContains ext fn to snake_case 2022-02-04 17:41:30 -05:00
John Colvin c6a1b7bc0d refactor: Rename EmptyIfNull ext fn to snake_case 2022-02-04 17:41:30 -05:00
John Colvin ee74548daa refactor: Rename NullIfEmpty ext fn to snake_case 2022-02-04 17:41:30 -05:00
John Colvin e6c5afa8b2 refactor: Rename IsNullOrEmpty ext fn to snake_case 2022-02-04 17:41:30 -05:00
John Colvin 260d5ddbbe refactor: Remove unused tick utils (fns and IValueConverters) 2022-02-04 17:41:30 -05:00
John Colvin ec53038042 refactor: Move safe_equals ext fns to spark_api 2022-02-04 17:41:29 -05:00
John Colvin 3dfbc2635a build: Set CMP0076 explicitly to remove warning 2022-02-04 17:41:29 -05:00
John Colvin 293fc233f7 Add git-save script to backup changed files 2022-02-04 17:41:29 -05:00
John Colvin a99f95853a refactor: Abstract out argparse/file utils from buildspark.py 2022-02-04 17:41:29 -05:00
John Colvin a3378a188a refactor: Fix typo criterion -> criteria 2022-02-04 17:41:29 -05:00
John Colvin 7d7ccc67e0 build: Fix typo in buildspark.py
* Replace literal '2022' w/ var 'year'
2022-02-04 17:41:29 -05:00
John Colvin 1fa17d63a2 refactor: Rename MarketViewView.Columns -> MarketViewColumnType 2022-02-04 17:41:29 -05:00
Taha Afzal a743500a37 Cleaning up SingleVolSurfaceMarketImpliedVolSource 2022-02-04 15:53:25 -05:00
Taha Afzal 0a6f2d5adb Normalizing options market data form coins to USD 2022-02-04 12:39:26 -05:00
Taha Afzal 96e6c0dfb5 In anticipation of the 'mark price' cleaned up the option driver tags 2022-02-03 16:03:21 -05:00
Taha Afzal 775918468d File name change 2022-02-03 13:41:05 -05:00
Taha Afzal 05101cfcd4 Adding more points to the curve to make it look nice in the UI 2022-02-03 13:22:18 -05:00
Taha Afzal 2de48c0550 Making theos work 2022-02-02 16:11:34 -05:00
John Colvin 07004179a3 Add safe_get_value Dictionary ext fns 2022-02-02 14:17:52 -05:00
John Colvin 05401a4c98 refactor: Rename GetValueOrDefault -> get_value 2022-02-02 14:17:51 -05:00
Taha Afzal ba678777b1 Market ImpliedVols are being pubished now 2022-01-30 23:41:47 -05:00
Taha Afzal 532c461d17 Added vol to GreekTuple, and a few verbose logs(for now) 2022-01-30 01:29:51 -05:00
Taha Afzal b98e1ff9dd Name changes 2022-01-29 23:35:56 -05:00
Taha Afzal bc7ca707c9 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-01-29 23:11:51 -05:00
Taha Afzal 292b131a4c Theos are written to the bus now 2022-01-29 23:11:43 -05:00
John Colvin e2ca78008e fix: Disable global drag/drop while adding tab to new win
Bugs (fixed):
   * The shell crashes when dropping a tab into an existing window
2022-01-27 20:34:13 -05:00
John Colvin 85757050bf fix: Don't add null symbol clause to ContractPicker.result
Bugs (fixed):
   * Windows launched w/ SecurityCriteria for 'all' symbols (i.e., when no
     symbols are selected) don't show any securities
2022-01-27 15:14:51 -05:00
Taha Afzal 8ecbfb935d Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-01-27 13:04:01 -05:00
Taha Afzal 753a56ce95 Cleaning up logs for theos 2022-01-27 13:03:52 -05:00
John Colvin 39d7ab0b76 fix: Remove bad assert statement in SparkWindow
Bugs (fixed):
   * PNL window crashes on open
2022-01-27 12:58:08 -05:00
John Colvin 95f638175d refactor: Use 'is null' in null asserts, add msg param 2022-01-27 12:57:18 -05:00
John Colvin 6c6bf492b0 fix: Show candidate output in vs grid readonly cells 2022-01-27 12:18:47 -05:00
John Colvin 2fdce0280a refactor: Clean up MarketViewRow
* Define fields of the same type in separate statements
* Insert some new lines for easier code browsing
* Replace large delegates with local fns
2022-01-27 12:18:47 -05:00
John Colvin dfa18c632e Add greeks to mview 2022-01-27 12:18:47 -05:00
Taha Afzal f8276adaa7 Fixed the save_marker in VolSurfaceInputSnapshot 2022-01-26 23:12:25 -05:00
John Colvin f184dd5743 fix: Update vs previous_states dropdown on grid change 2022-01-26 19:43:51 -05:00
John Colvin 21da6c813c Select vs grid row when cell enters edit mode 2022-01-26 19:28:11 -05:00
John Colvin 2601519e8b Only listen to drag events when IsDragSelectionEnable is true 2022-01-26 19:15:58 -05:00
John Colvin 97cce473e8 refactor: Move DIYGridRowsPresenter to its own file 2022-01-26 19:14:22 -05:00
John Colvin 227a977697 fix: Invalidate vs graph when points change 2022-01-26 18:06:47 -05:00
Taha Afzal c1a59eba47 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-01-26 15:26:51 -05:00
Taha Afzal 1034ac8fe1 AnalyticsParametersManager now publishes a dictionary of all values, including empty ones 2022-01-26 14:35:38 -05:00
Taha Afzal 5602fc0b1b Fixing the wing detection as per John 2022-01-26 13:13:43 -05:00
John Colvin 332c32893c fix: Use IValueConverter (not vs display grid) to fmt/parse input
Bugs (fixed):
   * User input isn't multiplied by the display multiplier

This issue was that the input text was getting parsed twice before being stored
in the display grid (once by the IValueConverter, and once by the display grid
itself).  The parse fn divides by the display multiplier, while the format fn
multiplies by it.  Thus, the input was effectively divided by the display
multiplier (bc 1/dm * 1/dm * dm == 1/dm)
2022-01-26 00:40:14 -05:00
John Colvin 9ee52c0827 refactor: Remove unused/deprecated DataGridEx utils 2022-01-25 22:22:18 -05:00
Taha Afzal ad0c4b25a5 Options 'books' can optionally be built from quotes now 2022-01-25 22:15:44 -05:00
Taha Afzal 14af01182c Caching volume on statistics_change and passing it over to handl.add_trade 2022-01-25 22:15:44 -05:00
Taha Afzal ac22ed553e Fixed the TS timestamp 2022-01-25 22:15:44 -05:00
Taha Afzal 310c7fa4a3 Cleaning up 2022-01-25 22:15:44 -05:00
Taha Afzal be3daae175 Removing SIM: from Deribit security desc 2022-01-25 22:15:44 -05:00
Taha Afzal fdc4e59d09 Working around Deribit option md bugs 2022-01-25 22:15:44 -05:00
Taha Afzal 8af07756ef logs in the VolSurfaceDisplayModel 2022-01-25 18:22:50 -05:00
Taha Afzal b522b9875e Merge branch 'volsurface-ui' of bitbucket.org:bluetradesys/spark into volsurface-ui 2022-01-25 17:47:37 -05:00
Taha Afzal 8059ebfad1 Changing the hard coded test vol surface's fwd to be close to reality 2022-01-25 17:47:30 -05:00
John Colvin 5aa3de21bb fix: Notify vs display model when [candidate] cell input changes
Bugs (fixed):
   * The commit/revert buttons in vs window are always disabled
2022-01-25 17:34:01 -05:00
John Colvin 230e02014c refactor: Drop 'Simplified' from vs grid/column class names 2022-01-25 17:25:01 -05:00
John Colvin be8bc54e46 fix: Remove configserver arg when parsing CLIOptions 2022-01-25 14:14:45 -05:00
John Colvin c8d37c2dfc fix: Simplify and fix revert-cell cmd 2022-01-25 14:00:07 -05:00
John Colvin 21300a858c fix: Flip call/put wing start comparison operators 2022-01-25 12:33:51 -05:00
John Colvin c97887993f Make vs graph legend translucent 2022-01-24 19:55:34 -05:00
John Colvin 198311c7c4 feat: Add vis toggle for vs exp graph series parts 2022-01-24 19:55:34 -05:00
John Colvin 1db24a8b72 fix: Define c/p wing strike range w/ VolCurveDisplayGraph wing_start props 2022-01-24 19:49:20 -05:00
John Colvin 9ef492acdc Update PlotModel.IsVisible in vm is_visible setter 2022-01-24 19:29:27 -05:00
John Colvin f8a74bbcbd fix: Copy settings.stroke_thickness to vm member 2022-01-24 19:29:27 -05:00
John Colvin eade3d0ee3 fix: Use consistent window-type ids for saving/loading vs wins
Bugs (fixed):
   The vol surface, and exp params windows aren't restored with workspace
2022-01-24 19:29:26 -05:00
John Colvin c65c16f476 refactor: Init vs line series vms w/ LineSeriesSettings
Previously, was assigning props explicitly from the settings object
2022-01-24 14:43:40 -05:00
John Colvin 6fa7b3cb88 Add committed/candidate prefix to vs atm series title 2022-01-24 14:42:06 -05:00
Taha Afzal e5a8209127 Options 'books' can optionally be built from quotes now 2022-01-24 14:13:35 -05:00
Taha Afzal aa768fabc0 Caching volume on statistics_change and passing it over to handl.add_trade 2022-01-24 13:33:33 -05:00
John Colvin 0c94dbd32c Update externals 2022-01-24 01:01:28 -05:00
John Colvin 89df1b5836 Increase padding in vs graph legend
This makes it easier to move the legend around (via drag)
2022-01-24 01:01:28 -05:00
John Colvin c8d682c0b9 Fix analytics-exp-params window
Bugs (fixed):
   * Exp params window crash on launch
   * A few 'dirty' props don't notify view of changes

* Use AnalyticsExpirationParametersWindowFactory to create/restore win
* Rename AnalyticsExpirationParametersVM.StartupData ->
  AnalayticsExpirationParametersSettings
* Simplify 'dirty' prop-changed notification logic
2022-01-24 00:58:37 -05:00
Taha Afzal 088c5bc0b9 Fixed the TS timestamp 2022-01-23 21:48:50 -05:00
John Colvin 6cbe93a9bb Replace Any CPU w/ x64 in spark_client.sln 2022-01-23 16:15:11 -05:00
John Colvin 1d6e90a429 Fix typo in editorconfig 2022-01-23 16:15:11 -05:00
John Colvin 6fb842c619 Tether temp vs window (outside workspace) to dummy shell win 2022-01-23 16:15:11 -05:00
John Colvin 6d90b6079e Implement vs grid settings command 2022-01-23 16:15:11 -05:00
John Colvin 084cbfcef6 Bind selection to immutablelist to get 1 instance/mutation 2022-01-23 16:15:11 -05:00
John Colvin 45a773fc69 Clean up DragDropDocumentPreview
* Make class internal
* Run formatter
2022-01-23 16:15:11 -05:00
John Colvin 3c147e7079 refactor: Clean up FloatingWindow
* Make internal
* Sort class members
* Fix naming violations
* Run formatter
2022-01-23 16:15:11 -05:00
John Colvin 1c4e574512 Add observe_immutable ext fn for ObservableCollection<T>
Converts sequence of CollectionChanged events to an
IObservable<ImmutableList<T>>
2022-01-23 16:15:11 -05:00
John Colvin 6901fe07d7 Add some mouse events to WPFTracer 2022-01-23 16:15:10 -05:00
John Colvin d1bf278bf2 refactor: Overload string join ext fn with params string[] 2022-01-23 16:15:10 -05:00
John Colvin 0d0f670629 refactor: Remove unused template param from string join ext fn 2022-01-23 16:15:10 -05:00
John Colvin 7c85a226d9 refactor: Overload empty_if_null ext fn for generic List/Array (rebase note: Used in AxisVM) 2022-01-23 16:15:10 -05:00
John Colvin b18ae91f37 Remove duplicate VolSurfaceRowView class
This was inadvertantly added, but didn't break the build because it was
in a different namespace (mbts.ui.shell) from the true VolSurfaceRowView
(mbts.ui)
2022-01-23 16:15:10 -05:00
John Colvin 025a5f49e3 diagnostics: Impl VolGridCellVM.ToString 2022-01-23 16:15:10 -05:00
John Colvin 146a136cd5 Remove magic const '-1' in drag/drop is_sufficient_delta fn
Not sure why this const was ever added in the first place, it appears to
arbitrarily prevent drag/drop ops from starting, when the mouse is at
coordinate (1,1)
2022-01-23 16:15:10 -05:00
John Colvin 8e8c532750 refactor: Use UIElement in drag/drop logic
As opposed to using FrameworkElement
2022-01-23 16:15:10 -05:00
John Colvin 5b973a2462 Add EnableDragMove dp (behavior) to PopupViewController 2022-01-23 16:15:10 -05:00
John Colvin 5bcd00d499 refactor: Clean up VolSurfaceSimplifiedGridVM 2022-01-23 16:15:10 -05:00
John Colvin cf9591ae83 Init value for vs cell view DIYGrid.ColumnProperty 2022-01-23 16:15:10 -05:00
John Colvin 64a5c44726 Define view style/behavior in VolSurfaceCellView rather than in vs column 2022-01-23 16:15:10 -05:00
John Colvin bbae90059e Write vs candidate vals to grid model so it updates the graph 2022-01-23 16:15:10 -05:00
John Colvin 1d953c31eb Use IValueConverter to fmt/parse cell vals in vs grid 2022-01-23 16:15:10 -05:00
John Colvin 49164aef3a Remove HistoricVolSurfaceRowControl
The new VolSurfaceRowView seems solid enough to stand on its own
2022-01-23 16:15:10 -05:00
John Colvin 2cc8810830 Init x_axis.position in vs graph vm 2022-01-23 16:15:09 -05:00
John Colvin f8813bda36 Fit axes to series on vs graph double click 2022-01-23 16:15:09 -05:00
John Colvin 98f3c5c433 Fix typo in launch-exp-params-view-cmd binding 2022-01-23 16:15:09 -05:00
John Colvin 65a6317527 Hook up context menu in vs grid 2022-01-23 16:15:02 -05:00
John Colvin 925c301cbe refactor: Change MultiSelectDropDowns to ComboCheckBox in vs settings 2022-01-23 15:25:41 -05:00
John Colvin b6ac345ee6 Port VolSurfaceGridSettingsEditor over from edge 2022-01-23 15:25:41 -05:00
John Colvin b3bc3ca18d Add TickUp/DownCommand dps to VolSurfaceCellView 2022-01-23 15:25:41 -05:00
John Colvin 568d9da42f Add TickFactors member to vs columns
For formatting/parsing doubles by tick
2022-01-23 15:25:41 -05:00
John Colvin 37fef31ed6 Implement _to_string to format doubles for volsurfaces 2022-01-23 15:25:41 -05:00
John Colvin 4d1c0869f1 fix: Don't publish invalid VolSurfaceUsageListImmutable 2022-01-23 15:25:41 -05:00
John Colvin 3ed16ff186 Ensure some vs settings props are non-null in getter 2022-01-23 15:25:41 -05:00
John Colvin 8a30fdd4c5 cli (client): Add user/pw opts to automate login 2022-01-23 15:25:41 -05:00
John Colvin a9b4881e7b refactor: Clean up ShellBootstrapper.cs 2022-01-23 15:25:41 -05:00
John Colvin f76e3968f8 refactor: Clean up App.xaml.cs
* Sort members
* Fix naming violations
* Remove unneccesary using directives
* Run formatter
2022-01-23 15:25:41 -05:00
John Colvin eb777fd14f Bind diygrid row hover fill to SelectionHighlight 2022-01-23 15:25:41 -05:00
John Colvin fffae3b519 Show decimal part by default in tick format fn 2022-01-23 15:25:41 -05:00
John Colvin 2aaa729ae9 refactor: Make VolSurfaceView class internal 2022-01-23 15:25:40 -05:00
John Colvin c2d6046a1f refactor: Use PopupAdorner to display vs graph legend 2022-01-23 15:25:40 -05:00
John Colvin 7b4d5766ef refactor: Use observable backings in cell vms 2022-01-23 15:25:40 -05:00
John Colvin 17978d2306 style: Use vs (not code) to format VolSurfaceView.xaml 2022-01-23 15:25:40 -05:00
John Colvin aadbef2a99 Add IsDragAdornerEnabled prop to DIYGrid 2022-01-23 15:25:40 -05:00
John Colvin 53e9d90bf9 refactor: Use nifty extension fns in vs grid vm 2022-01-23 15:25:40 -05:00
John Colvin 9df339c4a7 refactor: Make vs 'visible_rows' strongly typed
The prior weakly typed collection was a vestige from edge.  The view
property to which selected items was bound in edge was of type
ObservableCollection<object>
2022-01-23 15:25:40 -05:00
John Colvin 7c26572c0b refactor: Clean up volsurface axis/series vms 2022-01-23 15:25:40 -05:00
John Colvin 67f26d4318 refactor: Make ComboCheckBox.SelectedItems type IList 2022-01-23 15:25:40 -05:00
John Colvin cd3d1ab2f4 Add volsurface to MultiThreadedWindows conf 2022-01-23 15:25:40 -05:00
John Colvin 9314911cc8 build (client): Activate venv in msbuild target
Now buildspark.py can run outside of venv
2022-01-23 15:25:32 -05:00
John Colvin 67dc07c4f5 build (client): Add cli opts to build cpp and/or csharp 2022-01-23 15:25:06 -05:00
Taha Afzal 331e35cd42 Cleaning up 2022-01-23 15:24:47 -05:00
John Colvin 40890f9ad2 build: Upgrade client build to vs 17 2022
If vs 17 2022 isn't installed, buildspark.py should still work for vs 16 2019
2022-01-23 13:17:46 -05:00
John Colvin cb7606edca Fix x/y typo in GraphPointVM 2022-01-23 13:09:58 -05:00
John Colvin abab98cea6 Add null check in _recompute_and_publish 2022-01-23 13:09:58 -05:00
John Colvin d271e2a3ef refactor: Use VolSurfaceWindowFactory to create win 2022-01-23 13:09:58 -05:00
John Colvin 579e2a7a93 refactor: Rename VolSurafceView2 -> VolSurfaceView 2022-01-23 13:09:58 -05:00
John Colvin 0ac028c546 refactor: Ensure VolSurfaceWindowSettings lists non-null 2022-01-23 13:09:58 -05:00
John Colvin c6b374a934 refactor: Clean up VolSurfaceDisplayGrid
* Use new c# language features to make code prettier
*  Run formatter
2022-01-23 13:09:58 -05:00
John Colvin eeddde332e fix aw2, diygrid, mview after cherry-picking mview popups 2022-01-23 13:09:58 -05:00
John Colvin 9b9926502c fix flickering pnl hyperlink hover background 2022-01-23 13:09:58 -05:00
John Colvin a0e772885c fix flickering mview hyperlink hover background 2022-01-23 13:09:58 -05:00
John Colvin a0384c6d33 PNLView - HyperlinkCell mouse hover animation 2022-01-23 13:09:58 -05:00
John Colvin d18242e0f2 set HyperlinkCell 'HyperlinkClickMode' default to 'Anywhere' 2022-01-23 13:09:58 -05:00
John Colvin 2177451371 remove HyperlinkColumn props 'padding' and 'HyperlinkClickMode' (callers should set them through the ElementStyle prop) 2022-01-23 13:09:58 -05:00
John Colvin 5adb85582a after opening, mview remembers subsequent security criteria changes in workspace 2022-01-23 13:09:58 -05:00
John Colvin 35a2074de4 mview synth fills popup only shows fills of synth root algos 2022-01-23 13:09:58 -05:00
John Colvin de43f14552 mview mini ob only shows working orders 2022-01-23 13:09:57 -05:00
John Colvin d675ae17da mview mini orderbook only shows exchange orders for outrights, spreader orders for synths 2022-01-23 13:09:57 -05:00
John Colvin 0ae61d3e82 fix mview sorting (use new ColumnSortManager) 2022-01-23 13:09:57 -05:00
John Colvin c6c7350dad MarketViewVM - move local methods (in constructor) to bottom 2022-01-23 13:09:57 -05:00
John Colvin 75efd7a2d5 mview order ticket popup closes on send 2022-01-23 13:09:57 -05:00
John Colvin aaebf3b4fb mview toolbar menu items open regular windows instead of minis (for now) 2022-01-23 13:09:57 -05:00
John Colvin 76adc09b16 mview fills/orderbook toolbar menu items open the new popups 2022-01-23 13:09:57 -05:00
John Colvin 5b26252d25 DIYGridRowsPresenter initialization in Loaded callback is idempotent (Loaded event not always followed by Unloaded event) 2022-01-23 13:09:57 -05:00
John Colvin db813a8191 mview popups use AutoHideScrollBar to prevent scrollbars from covering data 2022-01-23 13:09:57 -05:00
John Colvin 4e0740d7b4 mview 'Position' column shows day position (uses position service) 2022-01-23 13:09:57 -05:00
John Colvin 5c74814b95 SP-257 mview popups for working orders & day fills 2022-01-23 13:09:57 -05:00
John Colvin 504aadac16 spruce up hamburger menu 2022-01-23 13:09:56 -05:00
John Colvin f12e8deeab add 'Freeze' prop to BrushExtension 2022-01-23 13:09:56 -05:00
John Colvin fa9ab9c033 DIYGridCellHoverAdorner 2022-01-23 13:09:56 -05:00
John Colvin d5dd63d528 refactor DIYGrid.SelectionHighlight to be Color instead of Brush (also fixes drag rect adorner bug, where the color wouldn't respond to settings changes) 2022-01-23 13:09:56 -05:00
John Colvin 4d2b3d4a77 market view row 'inside working orders' comparison to bbo was backwards 2022-01-23 13:09:56 -05:00
John Colvin 5f2da9421b MarketViewVM does not derive from SecurityMDGrid 2022-01-23 13:09:56 -05:00
John Colvin dcea38d038 factor out pnl auxiliary popups for general use (mview) 2022-01-23 13:09:56 -05:00
John Colvin f97538edf2 introduce WindowStyle.UnsafeWindow dp 2022-01-23 13:09:56 -05:00
John Colvin dff3cd1424 refactor ChildBounds extensions to be for UIElement 2022-01-23 13:09:55 -05:00
John Colvin 62fb9bd74d aw2: Make custom VolSurfaceCellView control for aw2
This control hosts input and output views for cells in the volsurface
grid (only one of which is visible at any time).  The input view is
activated when the cell is focused
2022-01-23 13:09:55 -05:00
John Colvin 5ac5ecb55e diag: Add WPFTracer class 2022-01-23 13:09:55 -05:00
John Colvin e6d16b419b Impl non-generic IEqualityComparer.GetHashCode 2022-01-23 13:09:55 -05:00
Taha Afzal 23fa1bd0bc Removing SIM: from Deribit security desc 2022-01-23 11:07:07 -05:00
Taha Afzal e7350b2528 Working around Deribit option md bugs 2022-01-23 00:13:22 -05:00
John Colvin 4e5bf8f3c1 Remove unneccessary dependecy store lookup 2022-01-22 12:46:52 -05:00
John Colvin 1b9ac61588 Add save-log script to backup log file
The current date and time is appended to the log file name
2022-01-22 12:46:52 -05:00
John Colvin 616818aa52 Make our FirstOrDefault ext behave like linq's without predicates 2022-01-22 12:46:52 -05:00
John Colvin 3481a36735 Clean up VolSurfaceDisplayGridExpiration
* Make readonly fields props
* Implement ToString
* Use auto_phase in GetHashCode
* Run formatter
2022-01-22 12:46:52 -05:00
taha afzal ad530c242d Adding options securities for Deribit 2022-01-21 14:45:34 -05:00
taha afzal fef2b64933 Hooking trades, as well as reducing the log level to DIAG for most market data callbacks 2022-01-20 13:38:34 -05:00
taha afzal fac10e0da7 tick interval set up correctly now for deribit securities 2022-01-19 23:09:31 -05:00
taha afzal e7295ccf9a Made the dumper method in ShmDumper public to allow access for Logging from other places: 2022-01-19 16:13:47 -05:00
taha afzal d4be0e7ef6 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-01-19 15:44:53 -05:00
taha afzal 15beef99f9 Deribit market data (futures) integrated 2022-01-19 15:44:34 -05:00
John Colvin 3524ad56ee fix build: Don't deconstruct result of add/remove op
Two of the deconstructed members were unreferenced variables
2022-01-12 11:24:17 -05:00
taha afzal d7bfdf4397 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2022-01-11 20:01:03 -05:00
John Colvin d1edb41b9d build: Don't explicitly link emumba deps
The should all be in the emumba-deribit-connector-library_LIBRARIES var
2022-01-11 18:14:54 -05:00
John Colvin ad5b32319c build: Add deribit demo log level var to CMakeLists 2022-01-11 18:14:54 -05:00
John Colvin d646b4b54f refactor: Replace terse 'unused' attributes w/ macro 2022-01-11 18:14:54 -05:00
John Colvin 7e710870ec Actually run the deribit connector 2022-01-11 18:14:54 -05:00
John Colvin b902fc372f Remove custom spdlogger from deribit demo 2022-01-11 18:14:54 -05:00
John Colvin e9caab16ba Update externals: add emumba-deribit-connector lib 2022-01-11 18:14:54 -05:00
John Colvin 3c8ece1eee Update externals to include linux libssl 1.1.1m 2022-01-11 13:56:39 -05:00
John Colvin 7d1fe3098a Add break statement to end of switch case
The code wasn't technically broken (yet), bc the switch case in question
was falling through to the empty default case.
2022-01-11 13:56:39 -05:00
John Colvin a8f642ebd7 refactor: Add '_params' suffix to create_binance_subscription fn 2022-01-11 13:56:39 -05:00
John Colvin cc85c658d9 refactor: Use UnorderedSetMap for ref counts 2022-01-11 13:56:39 -05:00
Taha Afzal fbeb65b53b Logs for strike vs vols 2022-01-11 12:57:40 -05:00
Taha Afzal 66e312c2b8 Cleanup + logs 2022-01-11 00:16:42 -05:00
Taha Afzal b1300eb52a 2 tags were not naming their type names, and mapping to the same 'key' 2022-01-10 10:48:40 -05:00
Taha Afzal 4c34a532ce More logs 2022-01-10 10:29:55 -05:00
Taha Afzal 4e3a02c31b Request-Reply works 2022-01-10 00:00:40 -05:00
Taha Afzal 30fa5891e9 Adding torubleshooting logs 2022-01-09 17:21:01 -05:00
John Colvin 53b6c19565 refactor: Clean up DIYGrid a bit
* Don't define more than one variable in a single statement (this messes
  with the c# omnisharp extension in vscode)
* Remove private keywords (in accordance with our coding style)
* Sort class members
2022-01-07 23:11:31 -05:00
John Colvin cd19cbf0b4 Early cut of aw2 ui (most likely will have bugs)
Rough around the edges, but functional enough to be a useful diagnostic tool as
we iron out aw2
2022-01-07 23:11:31 -05:00
John Colvin 8958507385 refactor: Make UIAdapter classes internal 2022-01-07 23:06:54 -05:00
John Colvin 730174b6ff Support multiple props w/ same name in detect_property_changes
It is possible for a type to have multiple properties with the same name
if that type is a reference type that inherits from a parent type, and hides
one of the parent types properties with the 'new' keyword
2022-01-07 22:33:33 -05:00
John Colvin cee79afc23 Make VolSurfaceDisplayModel class internal 2022-01-07 22:33:33 -05:00
John Colvin 79c55793af refactor: Clean up VolSurfaceOutput
* Implement generic ICloneable<VolSurfaceOutput>
* Run formatter
2022-01-07 22:33:33 -05:00
John Colvin 43d614dde2 Add generic ICloneable interface
For some reason this very basic utility isn't defined in dot net
2022-01-07 22:33:32 -05:00
John Colvin fde11dc4a3 Remove unneccessary comment warning abt perf costs 2022-01-07 22:33:32 -05:00
John Colvin 36a84d28e2 refactor: Improve RemoveWhere ext fn impl
* Don't allocate list of items to remove
* Return the number of items removed
2022-01-07 22:33:32 -05:00
John Colvin 6f7e2ab201 refactor: Clean up VolSurfaceExtensions
* Run formatter
* Replace foreach loops w/ less verbose linq style extensions
2022-01-07 22:33:32 -05:00
John Colvin fe7097771b Derive SparkWindow from DisposableViewModelBase 2022-01-07 22:33:32 -05:00
John Colvin 5a81c223c1 Remove old 'PAndl' window 2022-01-07 22:33:32 -05:00
John Colvin 8a4e90e1be refactor: Clean up BTSColor
* Rename argb props to be lower case
* Make some member fns static extensions
* Remove Serializable attribute
* Use a single uint prop (rather than 4 byte props) for protobuf
serialization
2022-01-07 22:33:32 -05:00
Taha Afzal 9d0cc5ef91 Adding include opitonal to fix the build 2022-01-07 15:42:18 -05:00
Taha Afzal 10bd10fbf1 Update externals (adds missing std dir to includes) 2022-01-07 14:27:26 -05:00
taha afzal 21aefed58f Stats, Trades etc also itegrated 2022-01-04 21:57:56 -05:00
taha afzal 13133053f6 error and book updates hooked 2022-01-04 16:23:06 -05:00
John Colvin b41f321723 style: Add comments to binance md classes 2022-01-04 13:43:17 -05:00
John Colvin a90f6badfd refactor: Clean up binance md classes
* Remove unneccessary includes in a few files
* Remove erroneous commented out fwd decls
* Remove unused class BinanceMarketDataSubscription
* Make a few public accessor fns private
2022-01-04 13:34:33 -05:00
taha afzal 92feb60ec5 EmMDListener security addition completed 2022-01-03 22:32:54 -05:00
taha afzal 8561944900 Adding the Emumba-Spark bridge 2022-01-03 11:30:41 -05:00
taha afzal 2ca7b3bf7a Fixing build 2021-12-31 15:14:51 -05:00
taha afzal 032acffb03 Merge branch 'spark_crypto' of bitbucket.org:bluetradesys/spark into spark_crypto 2021-12-31 00:27:35 -05:00
taha afzal 8c7c7b6af5 Adding a commented out class to start integration of emumba-Deribit 2021-12-31 00:25:36 -05:00
John Colvin 3a6e55a5ea fix build (gcc release): Ensure ValueWrappers are initialized 2021-12-30 14:02:30 -05:00
John Colvin fb8ea23744 fix build (gcc debug): Return vec of unique_ptrs w/ move 2021-12-30 13:52:13 -05:00
John Colvin 1ce44e3bd9 Show config_path on parse error in deribit demo 2021-12-30 13:44:02 -05:00
John Colvin d329b1c88d Update DeribitDemoListener to use emumba-deribit-connector 2.0.0 2021-12-30 13:43:24 -05:00
John Colvin 13dbc0826d refactor: Put DeribitDemoListener inside namespace 2021-12-30 13:40:34 -05:00
John Colvin f34a41d19c Fix synth book net change test
Net change doesn't depend on tick size anymore (not sure why it ever
did, but now the ui is in charge of such display behavior)
2021-12-29 22:30:17 -05:00
John Colvin 6198bc2a64 Update linux docker 2021-12-29 21:59:12 -05:00
John Colvin 1f40818dda Update docker/linux 2021-12-29 16:05:54 -05:00
John Colvin 1df7b51be9 Remove unused 'apioptions' import from proto files
This removes a couple warnings in the client build
2021-12-29 13:38:22 -05:00
John Colvin e45f186cd9 Add deribit to sec formating code 2021-12-29 13:18:49 -05:00
John Colvin 6874c8f6b9 style: Use dos line endings in QuickBusClientChannel.cs 2021-12-29 13:18:49 -05:00
Taha Afzal b03979cf65 Fake Deribit securuties show up in the UI 2021-12-29 13:18:49 -05:00
Taha Afzal d5d6605a41 Forgot the break in the case 2021-12-29 13:18:49 -05:00
Taha Afzal 139c0d2c51 Added DeribitExchangeData 2021-12-29 13:18:49 -05:00
Taha Afzal 25faf081fc Added Deribit to Venues proto 2021-12-29 13:18:49 -05:00
Taha Afzal cf1a5ada49 KeyValue pair add/update is being dealt properly now 2021-12-29 13:18:48 -05:00
Taha Afzal 7986bff968 Temporary test runner for analytics tests 2021-12-29 13:18:48 -05:00
Taha Afzal 6b305f0593 More logs added to SystemContractData 2021-12-29 13:18:48 -05:00
Taha Afzal 1de81e35f9 SystemContractData had a bug while hashing strikes 2021-12-29 13:18:48 -05:00
Taha Afzal 6714e47d4c All providers are hooked up 2021-12-29 13:18:48 -05:00
Taha Afzal 23e8294502 Enabling SingleVolSurfaceTheoSource 2021-12-29 13:18:47 -05:00
Taha Afzal 27079865e2 Enabled SingleVolSurfaceRequestCalculator 2021-12-29 13:18:47 -05:00
Taha Afzal 2f8e9e9859 Enabling SingleVolSurfaceCommittedOutputRetriever 2021-12-29 13:18:47 -05:00
Taha Afzal d3c4772d59 SingleVolSurfaceCommittedOutputRetriever enabled 2021-12-29 13:18:47 -05:00
Taha Afzal e4c13622f0 SingleVolSurfaceNonVolDataSource cleaned up 2021-12-29 13:18:46 -05:00
Taha Afzal a5ffdd5180 Cleaning up option driver publishing 2021-12-29 13:18:46 -05:00
John Colvin f0d86b92fb build: Add target opt to build cmd 2021-12-29 13:18:46 -05:00
John Colvin b67d2a45d0 refactor: Rename ContractPickerModel -> ContractPickerVM
Renames class, and file, as well as variables and class members of type
ContractPickerVM
2021-12-29 13:18:46 -05:00
John Colvin 6d1bad8b8c Clean up ContractPicker (model and view) 2021-12-29 13:18:45 -05:00
John Colvin 092f8fc371 Add queue_execute/flags params to defer_execution
This serves a common use case where the caller wants to invoke an action
once, at the end of a code block
2021-12-29 00:50:11 -05:00
John Colvin 15c2d416a8 refactor: Make security_type an ext fn (not member) 2021-12-29 00:50:11 -05:00
John Colvin c68c4ea9c9 Add ext fns for ImmutableSortedSet
AddRange, RemoveRange, and SetItems
2021-12-29 00:50:11 -05:00
John Colvin eacfd5c8fe Add SetItems ext fn for IImmutableSet/ImmutableHashSet 2021-12-29 00:50:11 -05:00
John Colvin 65304e6003 style: Clean up ImmutableSetExtensions 2021-12-29 00:50:11 -05:00
John Colvin 1a51a2e7a7 Fix bug where 'add' button was disabled in ContractPicker
This bug was occurring after the user added a criteria clause, and then
[only] changed the strike selection
2021-12-29 00:50:11 -05:00
John Colvin 8ddfa65f5f Make sec type list in ContractPicker constant
Don't filter security types based on selected exchange (consider them
orthogonal). This preserves the selected instrument type if you toggle
the selected exchange between one that lacks a particular instrument
type, and one that doesn't.
2021-12-29 00:50:11 -05:00
John Colvin 15ca25bf6d Remove ISecurityBasedSettings and TickDisplayParameters
These classes weren't referenced anywhere
2021-12-29 00:50:11 -05:00
John Colvin bc0689b529 refactor: Clean up GlbxSecurityFormatter
* Replace if blocks w/ switch statement
* Replace Substring calls w/ new c# range operator
2021-12-29 00:50:11 -05:00
John Colvin 43a5e27e8f Add options to ContractPicker 2021-12-29 00:50:10 -05:00
John Colvin 486e4c7113 build: Fix PYTHONPATH in CompileProto3 build tgt 2021-12-29 00:50:10 -05:00
John Colvin 83773d1335 Add fmt_pretty ext fn to SecurityCriteriaClause 2021-12-29 00:50:10 -05:00
John Colvin f0b8d3d44f Initialize tick fields in fake md 2021-12-29 00:50:10 -05:00
John Colvin 26e1d6e939 Add all_flags, all_flags_except fns to EnumHelper 2021-12-29 00:50:10 -05:00
John Colvin e6f5e437b7 Remove redundant security_in_criteria fn
Replace calls to ContractPickerModel.security_in_criteria with
SecurityCriteria.includes extension method, which should perform better.
Each clause represents an  'and' chain of smaller predicates, the fn
being replaced always evaluates all of the smaller predicates, while its
replacement only evaluates them as long as they return true.
2021-12-29 00:50:10 -05:00
John Colvin 22a3325d0c Add strikes/callputs to SecurityCriteria 2021-12-29 00:50:10 -05:00
John Colvin caa17b0073 Don't import apioptions in SparkProtos
The import is unused, and was causing a compilation warning as a result
2021-12-29 00:50:09 -05:00
John Colvin e3128c11a2 build: Copy (rather than symlink) .build_proxy to build
The sole purpose of the buildspark_redirect script is to workaround a bug in
the vscode c# extension.  Unfortunately some buggy behavior persists when these
dirs are symlinked.
2021-12-29 00:50:09 -05:00
John Colvin f06c1a86ea refactor: Clean up security extension/helper fns
* Define all security-related extension fns in SecurityExtensions
* Rename security extension/helper fns to be in snake_case
2021-12-29 00:50:09 -05:00
Taha Afzal fbccc80c77 Changing file name 2021-12-21 14:44:20 -05:00
Taha Afzal 73183aa007 Added BBO to fake securities 2021-12-21 14:44:20 -05:00
Taha Afzal 0d49c4c0fe Made the fake sec's consistent 2021-12-21 14:44:19 -05:00
Taha Afzal 9f2627869b Publishing fake options md 2021-12-21 14:44:19 -05:00
Taha Afzal 13139e6943 MDConsumerHandle abstracted out to allow the client to inject Fake securities 2021-12-21 14:44:19 -05:00
Taha Afzal 08e9157f17 Added IMDConsumerHandle as an indirection to innjetc market data in the system 2021-12-21 14:44:19 -05:00
Taha Afzal 076302a6b0 Adding saving exp params to AnalyticsTester 2021-12-21 14:44:19 -05:00
Taha Afzal 4c4c748be6 VolSurfaces are updated now 2021-12-21 14:37:04 -05:00
Taha Afzal 76dfd02aa8 AnalyticsServiceServer.save_volsurface was not calling the response return function 2021-12-21 14:34:46 -05:00
Taha Afzal 452a3eb698 Adding test code to create vs's 2021-12-21 14:31:20 -05:00
Taha Afzal adb88708fc Timer event etc... 2021-12-21 14:31:20 -05:00
Taha Afzal b399a1f9fb VoLSurfaceBBManager streamlined 2021-12-21 14:31:20 -05:00
Taha Afzal f2d000a91a Added VolSurfaceDisplayModel 2021-12-21 14:31:20 -05:00
Taha Afzal 9f28ef19ef ThreadedBB funciton name change 2021-12-21 14:31:20 -05:00
Taha Afzal 85c0e7780f Writes to threaded bb are also temptalized 2021-12-21 14:31:19 -05:00
Taha Afzal 145cf2d975 All Bus subscribers are using the templatized subscriptions 2021-12-21 14:31:19 -05:00
Taha Afzal 9d8dba23b9 threaded bb interacts with bus now 2021-12-21 14:31:19 -05:00
Taha Afzal 5a2c5e4c9a SingleVolSurfaceMarketImpliedVolSource 2021-12-21 14:31:19 -05:00
Taha Afzal 2480575e67 Straightened out (partially) some security misaallignments bw spark and aw2, added SingleOptionDriverPricePublisher 2021-12-21 14:31:19 -05:00
Taha Afzal d9337e1086 New AnalyticsServer completely hooked up 2021-12-21 14:31:19 -05:00
Taha Afzal 4a0fe9a19b Cleaning up VolSurfaceBlackboardManager 2021-12-21 14:31:19 -05:00
John Colvin 0c73900f57 build: Add --link-output-dir arg to buildspark.py 2021-12-21 11:50:54 -05:00
John Colvin f66749ee25 buildspark.py exists with code 1 on exception 2021-12-21 11:50:54 -05:00
John Colvin 043a9ecb4a Reword buildspark --output-dir help text 2021-12-21 11:50:54 -05:00
John Colvin f240b562ff Update linux docker 2021-12-21 11:32:01 -05:00
John Colvin a91ce93d43 Update externals 2021-12-21 11:31:51 -05:00
John Colvin 7819c1175a Upgrade compiler to clang-10 2021-12-11 15:50:50 -05:00
John Colvin 2ef66bc91f Fix server build after upgrading externals 2021-12-11 15:20:41 -05:00
John Colvin ea8bad4ece dev/john: Fix typo in Dockerfile 2021-12-09 14:16:52 -06:00
John Colvin 9ef529ab6c Upgrade docker 2021-12-09 11:53:49 -05:00
John Colvin fdb848eecb Remove unused import (apioptions.proto) from apicore.proto 2021-12-09 11:40:50 -05:00
John Colvin beecbbeb61 Upgrade pip when creating python virtual environment 2021-12-09 11:40:50 -05:00
Taha Afzal 58aa01de1b SingleVolSurfaceGateway completed 2021-12-09 11:40:50 -05:00
Taha Afzal b8bcc4a5f4 AnalyticsExpirationParameters 2021-12-09 11:40:50 -05:00
Taha Afzal 1cc00a9577 Hooking VolSurfaceBlackboatdManager to AnalyticsService 2021-12-09 11:40:50 -05:00
Taha Afzal 5eb1db7dd7 Start of interfacing the UI to the AnalyticsService 2021-12-09 11:40:50 -05:00
Taha Afzal c09b4e5ef4 Adding AnalyticsService to Run 2021-12-09 11:40:50 -05:00
Taha Afzal d86d621d38 Comments and wrapping up 2021-12-09 11:40:50 -05:00
Taha Afzal 0ee03a0d30 Persistence layer for vols 2021-12-09 11:40:50 -05:00
Taha Afzal 533a5c8f4a Filling up AnalyticsService 2021-12-09 11:40:50 -05:00
Taha Afzal 521e988b3a Added AnalyticsServiceServer 2021-12-09 11:40:50 -05:00
Taha Afzal 8786b48f33 Added AnalyticsService.proto 2021-12-09 11:40:50 -05:00
Taha Afzal 3f2d90c0ac Moving VoLSurfaceBlackboardManager 2021-12-09 11:40:50 -05:00
Taha Afzal 9b563e3dcb TheoPoint added 2021-12-09 11:40:50 -05:00
Taha Afzal a210e063f0 Migrating more code from edge 2021-12-09 11:40:50 -05:00
Taha Afzal 9055a6facb More classes moved 2021-12-09 11:40:49 -05:00
Taha Afzal 8f3ee23f6c SingleVolSurfaceOptionDriverSource added 2021-12-09 11:40:49 -05:00
Taha Afzal 29870ae7b0 More bus inhabitants added 2021-12-09 11:40:49 -05:00
Taha Afzal 7403155a88 Addedd SingleVolSurfaceTheoSource 2021-12-09 11:40:49 -05:00
Taha Afzal 4af73414cf Hooked a few more sources 2021-12-09 11:40:49 -05:00
Taha Afzal 6110a70b32 Added ThreadedBB interface and one user (SingleVolSurfaceDataSource) 2021-12-09 11:40:49 -05:00
Taha Afzal ed5e0a54cb Re-org'ing some 2021-12-09 11:40:49 -05:00
Taha Afzal 082b6aa86d Moved all UIAdapters from edge 2021-12-09 11:40:49 -05:00
Taha Afzal 18fb15dec4 Moving more AW2 ui code 2021-12-09 11:40:49 -05:00
Taha Afzal bf6658a265 Moved AW2 tags over 2021-12-09 11:40:49 -05:00
Taha Afzal 02728ddc56 Added tests 2021-12-09 11:40:49 -05:00
Taha Afzal 31bb4c418e Adding VoLSurface calulation code 2021-12-09 11:40:49 -05:00
John Colvin c0e75c2de2 Update CMakeDeps, CMakeDeps_win 2021-12-09 11:40:48 -05:00
John Colvin 62bf1d069c Fix build errors caused by big merge, externals upgrade
A lot of server-side changes were just merged as part of the Brandon
project (crypto).  Many of those changes were in libspark (a lib on
which both the client and server depend), and upgrades to its external
dependencies.  As a result, windows counterparts of several upgraded
external libs needed to be similarly upgraded (or added for the first
time).  These libs include: boost, btree, catch, curl, fmt, nlohmann json,
openssl, range, rxcpp, websocketpp

This change also makes protobuf generation compatible with python3, and thus
eliminates the build's dependency on python2
2021-12-09 11:40:42 -05:00
John Colvin 9091d50690 Remove Quantity negation '-' operator
This operator was a mistake to begin with, bc Quantity is unsigned
2021-12-08 10:58:00 -05:00
John Colvin 0544e21c97 Remove unnecessary includes in FlatUnorderedMap.h 2021-12-08 10:58:00 -05:00
John Colvin e9bb8201ed Add pragma once to ConfigurationState.h 2021-12-08 10:58:00 -05:00
John Colvin 75f8963ecd Merge remote-tracking branch 'origin/spark_crypto_base.server' into spark_crypto_base.client_server_merge 2021-12-07 18:33:18 -05:00
John Colvin e769926429 Update externals 2021-12-07 17:52:47 -05:00
John Colvin e09d4d24ba build: Add option to build sdk (or not)
The sdk isn't needed right now, and it adds several seconds to the build
2021-12-07 17:52:47 -05:00
John Colvin ed0924df02 fix build: Replace now-deprecated option in web build
Replace '-p' w/ '--mode production'
2021-12-07 17:52:47 -05:00
John Colvin cd6fcacc4f refactor: Clean up CryptoCommand
* Replace BinanceDemo w/ general purpose LiveLadderDemo
* Get rid of CryptoConfig.proto, as it inappropriately depended on
non-config protos
2021-12-07 17:52:42 -05:00
John Colvin 16bf52e193 refactor: Clean up MarketDataSubscription
* Define as class (not struct) to agree w/ fwd decls
* Make ctr inline since its defined in header
* Pass params to ctr by value (and std::move) rather than by const ref
  (and copy)
2021-12-06 16:41:24 -05:00
John Colvin df5aecd102 refactor: Replace refs to google/btree w/ Kronuz/btree
The former has been replaced with the latter in externals
2021-12-05 16:24:34 -05:00
John Colvin 75c0fee5bf Merge remote-tracking branch 'origin/spark_crypto_base.server' into spark_crypto_base.client_server_merge 2021-11-22 19:57:53 -05:00
John Colvin 5c251f4126 build: Add cmd to workaround vscode c# extension bug
For some reason, the build fails when the output dir is referenced by the c#
extension in vscode.  It produces errors saying various g.cs files (which are
generated for the spark csproj) could not be found.  However, examining the
contents of the output directory after the build "fails" show that those files
exist, and are in the proper build subdirectory.  Seems like a race.
2021-11-22 19:04:51 -05:00
John Colvin ccff827008 Remove unused file spark_server.sln 2021-11-22 18:26:26 -05:00
John Colvin 160769ea60 Add ladder scrollable_tick_window_size to config 2021-11-22 18:22:39 -05:00
John Colvin 16ecaa91b0 style: Clean up LadderOrdersHost 2021-11-22 17:54:06 -05:00
John Colvin 2614f91353 fix: Make order badges appear in ladder
Their positions in the LadderOrderHost were not in sync with the new
lazy/virtual visible tick range in LadderGridHost
2021-11-22 17:42:33 -05:00
John Colvin 2a9a041a36 fix: Init size_calculator earlier in NeworderTicketVM ctr
Avoids null reference exception
2021-11-22 17:33:56 -05:00
John Colvin c37ce8fab9 build (client, style): Fix typo in clean opt help text 2021-11-20 14:50:55 -05:00
John Colvin 3f38654652 refactor: Remove unused files TextBoxDialog.xaml(.cs) 2021-11-20 14:50:55 -05:00
John Colvin d54c6fe710 externals: Update linux boost includes 2021-11-20 14:50:55 -05:00
John Colvin 1ac8ceebe1 build (client): Fwd args from buildspark.cmd to buildspark.py 2021-11-20 14:50:55 -05:00
John Colvin 8cc72e6c96 build (style): Add comment abt paths wrapped in quotes 2021-11-20 14:50:55 -05:00
John Colvin 90ecb3c016 build (client): Add toggle opt to run msbuild /t:restore 2021-11-20 14:50:23 -05:00
John Colvin b3db213b1a build (client): Remove pygit2 dependency 2021-11-20 14:48:32 -05:00
John Colvin e389770e55 build (client): Don't choke on symlinked build dir 2021-11-20 14:48:32 -05:00
John Colvin 4d19101d01 build (client): Configure build with abs path to source dir 2021-11-20 14:48:32 -05:00
John Colvin 88d0f425d2 build (client): Add '--no' toggle to flag opts in buildspark.py 2021-11-20 14:48:32 -05:00
John Colvin 5a205304bb build (client): Fix build for non-default out dirs
Was building libspark and Spark.csproj separately, using msbuild for the
former and dotnet build for the latter
2021-11-20 14:48:07 -05:00
John Colvin 723442227c Update externals to include new websocketpp 2021-11-19 16:30:58 -05:00
John Colvin d4c867a835 Resurrect webserver
The webserver code was commented out when boost was upgraded, as the
former dependend on websocketpp, which, at that time, depended on the
previous version of boost.  Websocketpp has since been updated, so that
the dependency conflict no longer exists
2021-11-19 16:30:58 -05:00
John Colvin fd271b992a Remove ICE symbols from default conf 2021-11-19 16:30:58 -05:00
John Colvin f880399c4c Add unsubscribe fn to MarketDataGateway
Seems like this was accidentally omitted
2021-11-19 16:30:58 -05:00
John Colvin b1d3acb9f7 fix typo: Change < to <= in WebsocketClient::start 2021-11-19 16:30:58 -05:00
John Colvin 68848a74a4 fix build: Correct typo in include path in spreader_tests 2021-11-19 16:30:58 -05:00
John Colvin 9b7ac8d6eb refactor: Shorten field names in SecurityCommon
* security_id -> id
* security_group -> group
* security_desc -> desc
2021-11-19 16:30:58 -05:00
John Colvin 493262c99a Update docker/linux 2021-11-19 16:30:58 -05:00
John Colvin d9ff44cc93 docker (dev/john): Don't backup default .bashrc and .profile 2021-11-19 16:30:58 -05:00
John Colvin 5e3530faef docker (dev/john): Don't build fish docs
This breaks the build for some reason (don't care enough to investigate)
2021-11-19 16:30:58 -05:00
John Colvin c5ca47396b docker (dev/john): Don't install apt fish or git-powerline 2021-11-19 16:30:58 -05:00
John Colvin 2c21d4ddad docker (dev/john): Run apt w/ noninteractive frontend 2021-11-19 16:30:58 -05:00
John Colvin 8d5cae835f docker (dev/john): Update apt before installing fish dep 2021-11-19 16:30:58 -05:00
John Colvin 84221fe0d8 cli: Add emumba deribit demo subcommand 2021-11-19 16:30:58 -05:00
John Colvin 644613749d style (dev/john): Clean up Dockerfile
* Indent command chains
2021-11-19 16:30:58 -05:00
John Colvin c2a783ce96 refactor: Use protos in new Security class 2021-11-19 16:30:58 -05:00
John Colvin 23d645473c Update docker/linux to upgraded_18.04 branch 2021-11-19 16:30:58 -05:00
John Colvin 0f43de79e1 Update externals to use new json.hpp and node_modules 2021-11-19 16:30:58 -05:00
John Colvin eb86db3ef6 build (web): Symlink new node_module dirs in setup_builds 2021-11-19 16:30:58 -05:00
John Colvin 263c0503dc Don't link libiml (it's an artifact from spartan) 2021-11-19 16:30:58 -05:00
John Colvin 47cef95b11 build (web): Upgrade node packages 2021-11-19 16:30:58 -05:00
John Colvin 5a71cb4ac6 Add john's vscode files 2021-11-19 16:30:58 -05:00
John Colvin 0c3b3e9aa6 fix build: Comment out unused refs in websocketclient 2021-11-19 16:30:58 -05:00
John Colvin 09a5343daa Fix fsharp indentation error in gen'd code 2021-11-19 16:30:58 -05:00
John Colvin 254dcff1f6 Try to fix the goddamn web build
These dependencies are way to fragile.  It is a nightmare trying to
upgrade them.
2021-11-19 16:30:58 -05:00
John Colvin 2891e01de1 Add john's dev scripts (docker-related) 2021-11-19 16:30:58 -05:00
John Colvin f42568bed4 docker (john): Get john's vim files in Dockerfile 2021-11-19 16:30:58 -05:00
John Colvin a28f667df5 docker (john): Get john's bash config in Dockerfile 2021-11-19 16:30:58 -05:00
John Colvin ff1d561f7b docker (john): Change user to 'john' 2021-11-19 16:30:58 -05:00
John Colvin 94a91215fb Upgrade dev/john Dockerfile to ubuntu 21.04 2021-11-19 16:30:58 -05:00
John Colvin dccb50d269 fix build: Satisfy new compilers gcc10, clang12 2021-11-19 16:30:58 -05:00
John Colvin 6ca7d3904d Make plugin.py use env python (not hardcoded path) 2021-11-19 16:30:58 -05:00
John Colvin 0f81af3095 cli: Add crypto subcommand
This runs a test/example app that subscribes to binance md and prints
depth to the console
2021-11-19 16:30:58 -05:00
John Colvin 1ae124f0b2 Add SecurityResolver w/ fn bones 2021-11-19 16:30:58 -05:00
John Colvin e83c466bf2 Port over some handy tools from spartan 2021-11-19 16:30:58 -05:00
John Colvin 9a63cfa956 Add .tmp to gitignore 2021-11-19 16:30:58 -05:00
John Colvin 18250a98f7 Add fn to init WebsocketClientConfiguration w/ a url 2021-11-19 16:30:58 -05:00
John Colvin d18547806e Add output operators to websocket classes 2021-11-19 16:30:58 -05:00
John Colvin 03b475add1 fix build: Resolve struct/class fwd decl conflicts 2021-11-19 16:30:58 -05:00
John Colvin b35c43b55c refactor: Rename communication namespace to match path 2021-11-19 16:20:45 -05:00
John Colvin 48862f2b8d refactor: Rename 'communication' dir 'io' 2021-11-19 16:20:45 -05:00
John Colvin 41714fe3f2 Stop tracking .vscode 2021-11-19 16:20:45 -05:00
John Colvin f9db93e41a Add simple HTTPClient
The binance depth stream must be bootstrapped with a depth snapshot,
which is retrieved via an HTTP GET request
2021-11-19 16:20:45 -05:00
John Colvin 6573985bea Overload price comp fns to accept doubles 2021-11-19 16:20:41 -05:00
John Colvin 77dfe79d95 Add proto file settings to clang-format 2021-11-19 16:19:26 -05:00
John Colvin 1679dc61a1 Add bts_assert_msgf macro for templated assert msgs 2021-11-19 16:19:26 -05:00
John Colvin 07afba0b9e Remove websocket bones 2021-11-19 16:19:26 -05:00
John Colvin c018f86671 Add SecurityStore bones/basic impl 2021-11-19 16:19:26 -05:00
John Colvin 7eb8f0d685 Add protos for crypto 2021-11-19 16:19:26 -05:00
John Colvin 2e7bdbcac5 Add classes that mirror binance json structures 2021-11-19 16:19:26 -05:00
John Colvin 66f7474d62 style: Declare default copy ctrs for good taste
This will also satisfy more recent compilers, for when we finally
do upgrade the build
2021-11-19 16:19:26 -05:00
John Colvin 1ed3008c1c refactor: Split OrderGateway classes into sep files 2021-11-19 16:19:26 -05:00
John Colvin b3dbc041b5 refactor: Split md gateway classes into sep files 2021-11-19 16:19:26 -05:00
John Colvin 7bc5385783 Port Book type over from spartan 2021-11-19 16:19:23 -05:00
John Colvin 02513a8779 refactor: Make BookLevel fields non-const
Incremental diff streams would otherwise have to create entire new books
for each update (no copy assignment operator for elements which are stored in
an array)
2021-11-19 16:18:20 -05:00
John Colvin 27100e2e2d Implement OptionSecurity (was empty class) 2021-11-19 16:18:20 -05:00
John Colvin 4860d0cb3d refactor: Move classes out of MarketDataCommon.h into own files 2021-11-19 16:18:15 -05:00
John Colvin a0ce1b361f Add >=, <= operators to ValueWrapper 2021-11-19 15:42:35 -05:00
John Colvin 7ede27e90b refactor: Clean up ValueWrapper 2021-11-19 15:42:33 -05:00
John Colvin 0cfb27feba refactor (flatten): Move ExecutionGatewayFactory to own file 2021-10-25 13:27:12 -04:00
John Colvin 85c567ffc5 refactor (flatten): Move OrderServices to orderman dir 2021-10-25 13:27:12 -04:00
John Colvin 694309f80b refactor (flatten): Move OrderBuilder to orderman dir 2021-10-25 13:27:12 -04:00
John Colvin 0a6a4c35fa refactor (flatten): Move OrderServiceServer to orderman dir 2021-10-25 13:27:12 -04:00
John Colvin 923d9ee512 refactor (flatten): Move ChildOrder to orderman dir 2021-10-25 13:27:12 -04:00
John Colvin f2671ea4ba refactor: Remove unused file IOrderServices 2021-10-25 13:27:12 -04:00
John Colvin 0d3e27932a refactor (flatten): Move OrderRouter to orderman dir 2021-10-25 13:27:12 -04:00
John Colvin cc81fd3244 refactor (flatten): Move ilink3 dir to lib/orderman 2021-10-25 13:27:12 -04:00
John Colvin 014effef90 refactor: Move IExchangeGateways to gateways dir 2021-10-25 13:27:12 -04:00
John Colvin 903e59a814 refactor: Move order msg classes to own files 2021-10-25 13:27:12 -04:00
John Colvin 7e2b21602a refactor: Move Governor defs to .cpp 2021-10-25 13:27:12 -04:00
John Colvin aee394a792 refactor (flatten): Move Governor.h out of own dir 2021-10-25 13:27:12 -04:00
John Colvin e5e20af1f7 style: Clean up OrderServices
* Move non-template definitions to .cpp
* Move template definitions to bottom of .h
2021-10-25 13:27:12 -04:00
John Colvin 2d09a1ce33 Add .clangd to gitignore 2021-10-25 13:27:12 -04:00
John Colvin e0f9e0c48c Add .cache to gitignore 2021-10-25 13:27:12 -04:00
John Colvin f4f67d4289 Let the ui convert synth net change to n ticks
Whether or not to display a price in dollar or n ticks form is a display
setting, and furthermore the front end assumes all prices are in dollar
form
2021-10-25 13:27:12 -04:00
John Colvin ce68617d86 refactor: Rename TestObserver -> TestAlgo 2021-10-25 13:27:12 -04:00
John Colvin ba53334a7c Introduce SyntheticBook class
* Price levels are computed lazily

* Once computed, a price level can be accessed in O(1)

* Unit tests piggy back on rigorous existing unit tests in
  'synthetic_book_computation'

* Not integrated into the matcher, as that is non-trivial
  work, and the March 2021 roll is fast approaching
2021-10-25 13:27:12 -04:00
John Colvin 91925f9ec6 style: Run clang format on a few files 2021-10-25 13:27:12 -04:00
John Colvin 6b9b8ac403 Add ++/-- operators to Quantity 2021-10-25 13:27:12 -04:00
John Colvin 01d9af0bb2 Remove Price::abs method's price param, since it's non-static 2021-10-25 13:27:12 -04:00
John Colvin 63549fd3e2 refactor: Break up BookStatRecorder 2021-10-25 13:27:12 -04:00
John Colvin e3cd1e9fc3 refactor: Replace includes w/ fwd decls to speed up build
Also replace public templated function FifoMatcherContext::reset
with non-templated overloads, which call a private templated impl
2021-10-25 13:27:12 -04:00
John Colvin d0ceed37b5 cli: Remove ValidateFifo cmd (obsolete) 2021-10-25 13:27:12 -04:00
taha afzal 849adc5d7c Completed OrderGatewy inteface 2021-10-22 07:47:39 -04:00
Taha Afzal 317fc93c76 OrderGateway added for EMumba integration 2021-10-20 20:04:42 -04:00
Taha Afzal 3ff6c725a3 Hooked book 2021-10-18 13:51:01 -04:00
Taha Afzal 205953d928 Added more handler code to EmumbaMDListener 2 2021-10-15 19:32:46 -04:00
Taha Afzal 8a01969796 Added more handler code to EmumbaMDListener 2021-10-15 16:13:35 -04:00
Taha Afzal 38d94663cf More flesh on the skeleton 2021-10-14 16:09:14 -04:00
Taha Afzal c85ef44a1b Added skeleton for EmumbaMDListener 2021-10-13 12:48:33 -05:00
Taha Afzal 648a30ecf8 Fixing clang build 2021-10-11 19:46:34 -04:00
Taha Afzal fc7237c7b9 WebsocketClient working after and getting data from binance after adding the SSL handshake 2021-10-08 00:22:52 -04:00
Taha Afzal 936a3b624b Added WebsocketSyncClientTests 2021-10-07 14:20:49 -04:00
Taha Afzal fc4fa3893c added comments to the websocket interface and structures 2021-10-04 17:34:30 -04:00
Taha Afzal e34a2f5195 WebsocketClient - allows a user of this class to connect to a host url, and send and receive data asyncronously 2021-10-04 15:55:46 -04:00
Pedro Pinto ce98e862c3 Upgraded boost 2021-10-03 14:39:36 -04:00
Taha Afzal 930357d11c WebsocketClient 2021-09-27 11:52:57 -05:00
Taha Afzal 43c3584dd2 unified market data interface on which we will connect to crypto exchanges 2021-09-21 13:18:46 -05:00
John Colvin c0def90173 refactor (flatten): Move ExecutionGatewayFactory to own file 2021-09-15 23:53:59 -04:00
John Colvin 0d918510fd refactor (flatten): Move OrderServices to orderman dir 2021-09-15 23:53:59 -04:00
John Colvin 06141850fa refactor (flatten): Move OrderBuilder to orderman dir 2021-09-15 23:53:58 -04:00
John Colvin 8eab9a3f15 refactor (flatten): Move OrderServiceServer to orderman dir 2021-09-15 23:53:58 -04:00
John Colvin a7b7c45657 refactor (flatten): Move ChildOrder to orderman dir 2021-09-15 23:53:58 -04:00
John Colvin 15004f2762 refactor: Remove unused file IOrderServices 2021-09-15 23:53:58 -04:00
John Colvin be8242c7ac refactor (flatten): Move OrderRouter to orderman dir 2021-09-15 23:53:58 -04:00
John Colvin 601fd98508 refactor (flatten): Move ilink3 dir to lib/orderman 2021-09-15 23:53:58 -04:00
John Colvin c8bf9b41e4 refactor: Move IExchangeGateways to gateways dir 2021-09-15 23:53:57 -04:00
John Colvin 8d73cef4b2 refactor: Move order msg classes to own files 2021-09-15 23:53:57 -04:00
John Colvin 6f4a0f7ce4 refactor: Move Governor defs to .cpp 2021-09-15 23:53:57 -04:00
John Colvin a67056fbc9 refactor (flatten): Move Governor.h out of own dir 2021-09-15 23:53:57 -04:00
John Colvin cc67c3ced1 style: Clean up OrderServices
* Move non-template definitions to .cpp
* Move template definitions to bottom of .h
2021-09-15 23:53:57 -04:00
John Colvin edb2f1bac2 Fix server build (linux compiler doesn't like pragma push) 2021-09-15 23:53:57 -04:00
John Colvin 264ce8ddc4 Add .cache to gitignore 2021-09-15 23:53:57 -04:00
John Colvin 17642ca84b build: Use dotnet build (instead of msbuild) for c# projects
Continue using msbuild for c++ (i.e., libspark)
2021-09-15 23:53:57 -04:00
John Colvin f46d91a57e build: Remove erroneous PropertyGroup 2021-09-15 23:53:57 -04:00
John Colvin 8d145c9075 build: Remove erroneous AvailableItemName tags 2021-09-15 23:53:57 -04:00
John Colvin 78403a0baf style: Format msbuild project files 2021-09-15 23:53:57 -04:00
John Colvin 353b2fd7e0 build: Remove unused items in msbuild files 2021-09-15 23:53:57 -04:00
John Colvin ec1e1fda92 Add recursive .vscode dirs to gitignore 2021-09-15 23:53:57 -04:00
John Colvin da5331d8ca Stop tracking .vscode files 2021-09-15 23:53:57 -04:00
John Colvin 939f44b48c build: Refine build scripts so they work out of the box
* Automatically create python virtual envs
* Automatically actvate the vs dev prompt

Note: the python39 virtual env will remain active in the calling shell.
This behavior may be changed down the road.
2021-09-15 23:53:57 -04:00
John Colvin 5939df9345 Define naming conventions in editorconfig 2021-09-15 23:53:57 -04:00
John Colvin c366b9f4c8 style: Fix name violations, etc. on LadderGridHost 2021-09-15 23:53:52 -04:00
Taha Afzal d23baec6d9 comments and los 2021-09-10 09:13:59 -05:00
John Colvin 835e0f50ca Run dotnet format on spark proj 2021-09-06 19:35:31 -04:00
John Colvin ff4f338898 Add dotnet format tool 2021-09-06 19:35:30 -04:00
John Colvin 113871a150 Rename requirements.txt -> requirements27.txt
A requirements39.txt file was created (for a python 3.9 venv) after
requirements.txt, so the version specifier now seems appropriate.
2021-09-06 19:35:30 -04:00
John Colvin c31b5cf2b4 Run omnisharp formatter on spark project 2021-09-06 19:35:24 -04:00
John Colvin 7d75a6c3a9 Make ladder panel prices hyperlinks to jump to price 2021-09-06 18:34:28 -04:00
John Colvin 3995351b54 Fix bug where session range hidden 2021-09-06 18:34:28 -04:00
John Colvin 795942d8a9 Add style.yapf (python formatting config) 2021-09-06 18:34:28 -04:00
John Colvin f4be975fec Add omnisharp.json (c# formatting config) 2021-09-06 18:34:28 -04:00
John Colvin b7a0cc5c24 Add .venv dirs to .gitignore 2021-09-06 18:34:28 -04:00
John Colvin 8a666ae397 Add requirements39.txt for python 3.9 env 2021-09-06 18:34:28 -04:00
John Colvin 2cc8e519d8 Add cached branch build dirs to gitignore 2021-09-06 18:34:28 -04:00
John Colvin 48cd21aa46 build: Add option to cache branch builds 2021-09-06 18:34:27 -04:00
John Colvin 531fbb63be build: Add buildspark.py (bc bat is a horrible language) 2021-09-06 18:27:32 -04:00
John Colvin 6f3945cced Implement IObservable in SingleValuePump for convenience 2021-09-06 18:27:32 -04:00
John Colvin 9dc3c32769 Add bit_span param to auto_phase (hash fn)
Brought over from DJ_ICE bc it seems like a useful param for custom
hash impls (though there isn't an immediate need for it).
2021-09-06 18:27:32 -04:00
John Colvin 3f2f19f73c fix: Load FairValueLine price type in settings dialog 2021-09-06 18:27:32 -04:00
John Colvin 9a013d783e Add fair value lines for DJ 2021-09-06 18:27:32 -04:00
John Colvin 6ea217b674 fix: ContractPicker syncs selected sec/md w/ selected key 2021-09-06 18:27:32 -04:00
John Colvin 0356221066 ui (DJ): Avoid darkening price text in session range in ladder
Put the session range visual beneath the column backgrounds
(on the z axis), and make the background slightly translucent
while leaving the font color fully opaque.  This effectively
darkens the former without changing the latter.
2021-09-06 18:27:32 -04:00
John Colvin 50a0ed3823 Set alpha bits to 'FF' in historic ladder settings colors 2021-09-06 18:27:32 -04:00
John Colvin 1686d41c0c ui (dj): Reduce opacity of session range layer in ladder 2021-09-06 18:27:32 -04:00
John Colvin 65f2efa9a0 ui (dj): Make ladder look more like tt
These changes can be configured via LadderKnobs (defined in UI.proto)
2021-09-06 18:27:32 -04:00
John Colvin 84e9cf5261 fix: Correct visibility binding in ladder session high/low
The other price points visibility bindings were refactored
in a similar manner, for consistency's sake.
2021-09-06 18:27:32 -04:00
John Colvin dd256409e9 feat (DJ): Right align bid, price, and ask column text in ladder
This is hardcoded (not configurable via settings).
2021-09-06 18:27:32 -04:00
John Colvin 1e68c047ea feat (DJ): Give bid/ask cells with markets a lighter background in ladder
There is a small chance this will impact performance when
a large number of ladders (50+) are open.  Therefore, this
behavior can be toggled on/off in config, via
LadderKnobs.lighten_market_background.
2021-09-06 18:27:31 -04:00
John Colvin 56340fcc60 refactor: Consolidate tick tests after tricky merge
The branches that were merged, DJ_ICE and
DJ_ICE_ladder_price_aggregation, both added new
tick tests.  The former put them in a new file,
"TickTests.cs," while the latter added them
to "SecurityTests.cs."  This commit places all
tick tests in "TickTests.cs."
2021-09-06 18:27:31 -04:00
John Colvin af639286e1 Add tooltips to ladder left-panel price points 2021-09-06 18:27:31 -04:00
John Colvin bf32b6262d Tailor default ladder price point settings for DJ 2021-09-06 18:27:31 -04:00
John Colvin f2dd283751 feat (DJ): Display settings for ladder left-panel price points
* Add background and font settings for all price points

* Indicate 'day change' sign with modal settings (positive,
  zero, and negative) for background and font color

* Hide 'day change' leading zeros in tick part

* Don't show 'day change' zero integer part (e.g.,
  '25' instead of '0.25')
2021-09-06 18:27:31 -04:00
John Colvin c27cd8ca54 Make a few classes/structs public in spark_core
They are referenced in spark proj, so prob should have always been
public.
2021-09-06 18:27:31 -04:00
John Colvin 75c86f7b69 config toggle to show/hide ladder scrollbar for dj (defaults to hide) 2021-09-06 18:27:31 -04:00
John Colvin 2e1d65fa33 frozen price lines in ladder (for dj) 2021-09-06 18:27:31 -04:00
John Colvin 5cdd2629bf Copy a few ext methods from DJ_ICE 2021-09-06 18:27:31 -04:00
John Colvin 026bf6fb07 fix ColumnBase.SortDirection binding to DIYGridColumnModel 2021-09-06 18:27:31 -04:00
John Colvin 9054049ebf SelectionModel should only select the pending selection once (was reselecting it every time the items changed) 2021-09-06 18:27:31 -04:00
John Colvin d7a044c894 remove unused 'actual_width' prop from DIYGridColumnModel 2021-09-06 18:27:31 -04:00
John Colvin 2da8895f3e synchronize column model's GridColumnSettings with the column view 2021-09-06 18:27:31 -04:00
John Colvin 1e1a5897bc TextCell available_size is updated in ArrangeOverride 2021-09-06 18:27:31 -04:00
John Colvin d3a635b156 parameterize SecurityStore.join (don't mess with core logic/impl) 2021-09-06 18:27:31 -04:00
John Colvin f08c8a51ad made new SelectorVM (todo: replace refs to old one) 2021-09-06 18:27:31 -04:00
John Colvin 2f08e92a5e add SimpleGridSettingsManagerVM (uses DIYGridColumnModels instead of the view type ColumnBase) 2021-09-06 18:27:30 -04:00
John Colvin 336b009f24 add DIYGridColumnModel, so the DIYGrid column paradigm is cleanear mvvm 2021-09-06 18:27:30 -04:00
John Colvin e027454a36 add get/load_state methods to non-generic IDataGridColumnFilter 2021-09-06 18:27:30 -04:00
John Colvin af968c2c58 add PropertyEqualityComparerAttribute (supports simple automatic equality impl) 2021-09-06 18:27:30 -04:00
John Colvin 25a954b13c unify SecurityCriteria initialization with securities (use pretty_name if single sec) 2021-09-06 18:27:30 -04:00
John Colvin a45d8761e5 remove with_reguard_to_price param from tick 'format' extension 2021-09-06 18:27:30 -04:00
John Colvin e1d9ca6325 fix typo in ConvertUtils.update_value_type (was missing negation '!') 2021-09-06 18:27:30 -04:00
John Colvin d3853ddbf8 fix tick unit tests, and reorganize security tests a bit 2021-09-06 18:27:30 -04:00
John Colvin 7efa62c994 add precision param (epsilon) to tickup/down methods 2021-09-06 18:27:29 -04:00
John Colvin 9284bf5b14 TickFactors are cached in a ThreadStatic dictionary rather than concurrent (no locks required) 2021-09-06 18:27:29 -04:00
John Colvin 88ebf9f86f ticksize extension handles invalid tick props gracefully 2021-09-06 18:27:29 -04:00
John Colvin 85ab9d98de remove unused parameter from TickTestHelper.full_ticks_from_zero 2021-09-06 18:27:29 -04:00
John Colvin b8278bb310 fix ladder session low/high grid animation (was not using the ticks per row setting) 2021-09-06 18:27:29 -04:00
John Colvin 00ef27bf8c LadderGridHost invalidates '_spec' on connect_vm (not just on settings updates) 2021-09-06 18:27:29 -04:00
John Colvin d090a6d851 fix typo in LadderGridHost._spec getter (was accidentally returning the fallback value) 2021-09-06 18:27:29 -04:00
John Colvin 573b5e1c62 make tick unit tests more robust (test tick_up/down, use these methods to covalidate results) 2021-09-06 18:27:29 -04:00
John Colvin f6b1cf7c3a include Sim ContractSpecs in tick unit tests 2021-09-06 18:27:29 -04:00
John Colvin 08643c8af1 ladder settings dialog - fix 'when implied is > 0' label alignment 2021-09-06 18:27:29 -04:00
John Colvin b2b8c083a6 added tick unit test (namely for 'full_ticks_from_zero' method) 2021-09-06 18:27:29 -04:00
John Colvin fa882d5472 added 'full_ticks_from' method which accepts an origin price (instead of just an arbitrary 0) 2021-09-06 18:27:28 -04:00
John Colvin 8760481153 TickUtils.full_ticks_from_zero checks pricebreak 2021-09-06 18:27:28 -04:00
John Colvin 33338d2a0a move LadderUtils methods to TickUtils (all were related to ticks) 2021-09-06 18:27:28 -04:00
John Colvin 5b85c20d32 move tick data\utils to spark_core 2021-09-06 18:27:28 -04:00
John Colvin bbf8decd0a add 'ticks per row' ladder setting 2021-09-06 18:27:28 -04:00
John Colvin d5315054a2 add TickUp/DownCommand dependency props to TickUpDownUInt 2021-09-06 18:27:28 -04:00
John Colvin 6e7aa3fe9a fix ladder autoscroll (works perfect now) 2021-09-06 18:27:28 -04:00
John Colvin 48b42bf41f check pt 2021-09-06 18:27:28 -04:00
John Colvin e2f7c2ef20 Update devcmd.cmd for vs 16 2019 2021-09-06 17:45:53 -04:00
John Colvin 27294822ef Restore .vscode files in dev directory 2021-09-06 17:45:53 -04:00
John Colvin f0250338eb Don't track .vscode files in source control 2021-09-06 17:45:50 -04:00
John Colvin 7ee3ef4737 build: Init spark_build_python_path in Directory.Build.Props 2021-09-06 17:41:56 -04:00
John Colvin 03a1cf0395 Add .tmp to gitignore 2021-09-06 17:41:53 -04:00
John Colvin 5ad70b83d6 build: Add step to copy cpp libs to new client out dir 2021-09-06 17:40:58 -04:00
John Colvin 8eba500d1b Avoid race conditions exposed by new OnDispatcher impl 2021-09-06 17:40:58 -04:00
John Colvin 0a3d361621 refactor code to use dotnet core 6
Most changes revolve around MEF, as the new version (5.0.0) lacks
feature parity with the previous version (3.1)
2021-09-06 17:40:58 -04:00
John Colvin fd5f54d8c9 Implement 'OnDispatcher' for dotnet core 6
That extension method doesn't exist in this version
2021-09-06 17:40:58 -04:00
John Colvin 957daf5392 build: Upgrade client build to net5.0 2021-09-06 17:40:58 -04:00
John Colvin c4953590bc Remove spark_excel from spark_client.sln 2021-09-06 17:40:58 -04:00
John Colvin 578d6c8518 build: Update win compiler to Visual Studio 16 2019 2021-09-06 17:35:03 -04:00
John Colvin 54bcff0b8f import compute_synthetic_book method from spartan 2021-09-06 17:32:34 -04:00
Pete Fisher 9f74e57a05 updating submodule to latest 2021-09-06 17:28:33 -04:00
John Colvin a58298edb9 Update externals for vs 2019 compilation 2021-09-06 15:03:04 -04:00
John Colvin c7e2905255 Disable align related warning in vs 2019 build 2021-09-06 15:03:04 -04:00
John Colvin 799126f06a Update build scripts to use vs 2019 build tools 2021-09-06 15:03:04 -04:00
Taha Afzal 1d041357aa Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-04-08 22:59:17 -04:00
Pedro Pinto d53bfb70ff Added structured logging to SQLite. 2021-02-16 18:20:37 -05:00
Pedro Pinto e4a9636583 Added spartan logging. 2021-02-16 16:06:59 -05:00
Taha 3c744e9678 Adding sec/spread (optional) parameter and better logs 2021-02-15 13:42:18 -06:00
Pedro Pinto 28cfa69a23 Added ringbuffer. 2021-02-14 10:26:29 -05:00
Pedro Pinto e4c8437f1f And yet some more. 2021-02-12 12:52:52 -05:00
Pedro Pinto b5668d9534 Fixed the build some more. 2021-02-12 12:39:21 -05:00
Pedro Pinto e756fece66 Fix build. 2021-02-12 12:34:49 -05:00
Pedro Pinto 80c2c58a5a More refactoring 2021-02-12 09:17:28 -05:00
Pedro Pinto 047aa43880 The great flatening. 2021-02-12 09:03:20 -05:00
Pedro Pinto e0d33e6099 Cleaner feed handler. 2021-02-11 17:52:40 -05:00
Pedro Pinto f60a55815d Cleaned up gateway. 2021-02-11 17:47:59 -05:00
Pedro Pinto 33bde966b7 Algo manager. 2021-02-11 17:10:30 -05:00
Pedro Pinto 77210f7c90 Cleaning up Error handling. 2021-02-11 16:58:21 -05:00
Pedro Pinto 058f32c941 IL3 cleanup. 2021-02-11 16:49:33 -05:00
Pedro Pinto 979f06e6d0 Fixed release build. 2021-02-11 14:58:20 -05:00
Pedro Pinto 595b77c3c6 More clean up. 2021-02-11 13:40:51 -05:00
Pedro Pinto 2788ea31ff Moved to delegates. 2021-02-11 13:07:46 -05:00
Pedro Pinto 94d9601d23 Removed obsolete interfaces. 2021-02-10 14:41:24 -05:00
Pedro Pinto 51520e0e0a Changed MD to use delegates. 2021-02-10 14:34:00 -05:00
Pedro Pinto 6bb8da9a36 Minor doc. 2021-02-10 08:52:18 -05:00
Pedro Pinto cde3f7900f Fixed broken build scripts. 2021-02-10 08:50:06 -05:00
Pedro Pinto 357d4625fa Cleaned up delegate. 2021-02-10 08:49:18 -05:00
Pedro Pinto 51b37abae7 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-09 21:57:18 -05:00
Pedro Pinto cca7ded152 More algo man. 2021-02-09 21:56:37 -05:00
Pedro Pinto 3d9aa58ac1 Added a FAF Delegate. 2021-02-09 21:55:58 -05:00
John Colvin 695d7e4f74 fix: Initialize '_args' member in md subcommands 2021-02-09 16:33:12 -06:00
John Colvin 7bec8a103b build: Change build path to 'build/<compiler>/<build_type>' 2021-02-09 16:33:12 -06:00
John Colvin 3be4c57530 style: Format vscode json files
* Indent with 2 spaces
2021-02-09 12:18:23 -06:00
John Colvin 70d0ed54a4 fix: Apply ib qty change in OrderModification::apply 2021-02-09 12:11:15 -06:00
John Colvin 36ac807635 vscode: Tweak presentation of linux_build task 2021-02-09 12:11:15 -06:00
John Colvin 430a9b38ef refactor: Make SecurityMatcher::book return const BookSide& 2021-02-09 12:11:15 -06:00
Pedro Pinto e3574e9d23 mdp3 removal. 2021-02-09 07:47:01 -05:00
Pedro Pinto 6591ed7a3c less mdp3. 2021-02-08 21:45:17 -05:00
Pedro Pinto 5f292ae46a More mdp3 excising. 2021-02-08 20:30:24 -05:00
Pedro Pinto bd9f5ff862 Removing mdp3. 2021-02-08 19:50:03 -05:00
Pedro Pinto 69614a158e Towards removing mdp3:: 2021-02-08 19:46:37 -05:00
Pedro Pinto cf8ec8bbad Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-08 16:50:46 -05:00
Pedro Pinto 91c3d820fc Towards an algo manager. 2021-02-08 16:50:40 -05:00
Taha f435203794 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-08 14:57:20 -06:00
Taha b4c013f4da Logging mode, log shots in addition to logging all active polygon states 2021-02-08 14:54:21 -06:00
Pedro Pinto 37ecb69379 Towards an algo manager. 2021-02-08 15:19:17 -05:00
Pedro Pinto d1643e9a09 More refactoring. 2021-02-08 15:13:37 -05:00
Pedro Pinto 0456d837d8 Continued to refactor feed handler. 2021-02-08 11:29:23 -05:00
Pedro Pinto b493b17602 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-08 09:24:25 -05:00
Pedro Pinto 206386b263 Separated pure MD interface (IFeedObserver) from analysis obs. 2021-02-08 09:23:16 -05:00
Pedro Pinto 51d336405a More refactoring. 2021-02-08 09:07:40 -05:00
taha e068a3807a Added logs for when file is not found 2021-02-07 00:05:32 -06:00
taha f585f54016 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-06 22:54:31 -06:00
taha cf3b87d3aa Fixed the logs (and got rid of prev value, we were not using it and it was adding extra unneeded complexity) 2021-02-06 22:54:24 -06:00
Pedro Pinto 3164c0fd56 Refactor. 2021-02-05 21:58:44 -05:00
Pedro Pinto bdfed43b01 Refactor. 2021-02-05 21:09:37 -05:00
Pedro Pinto 1e794aaa12 Refactored. 2021-02-05 20:30:16 -05:00
Pedro Pinto 1297b97b2d Fixed build. 2021-02-05 20:06:18 -05:00
Pedro Pinto ca80857607 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-05 18:41:02 -05:00
Pedro Pinto 417e331e8e Cleaned up mdp3. 2021-02-05 18:37:12 -05:00
taha 8602da1753 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-05 00:25:21 -06:00
taha 0c9af3ffee Added order key to 2 log messages 2021-02-05 00:25:15 -06:00
John Colvin 12ba2a2724 fix (cli): Add md->channels subcmd 2021-02-04 13:08:39 -06:00
Pedro Pinto e892b8b3e5 Towards il3 new 2021-02-04 13:49:17 -05:00
John Colvin 8d91d597fe fix: Repair 'sparkd run' cmd (so client/ui can connect)
This was broken in the cli11 revamp.
2021-02-03 23:59:54 -06:00
Pedro Pinto b8f146364b Windows continues to suck ass. 2021-02-03 16:17:28 -05:00
Pedro Pinto 3866f8709f Fucking windows include order bullshit. 2021-02-03 16:17:14 -05:00
Pedro Pinto 0eeffd1984 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-03 14:54:24 -05:00
Pedro Pinto b15973b00c Adding market segment id. 2021-02-03 14:54:08 -05:00
Pedro Pinto ddf65972c0 Trying to fix windows build. 2021-02-03 14:52:05 -05:00
Taha Afzal c10bf44bfc Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-03 14:46:35 -05:00
Taha Afzal 4bf9be860b comments added for sniper 2021-02-03 14:46:29 -05:00
Pedro Pinto e0313958b3 Merged 2021-02-03 11:15:57 -05:00
Pedro Pinto cda4c522fd Some refactoring in il3 store. 2021-02-03 11:12:44 -05:00
Taha Afzal 38bd2ac74c Removing sim switch for security names 2021-02-02 20:31:42 -06:00
Pedro Pinto 36da47f66e MDP3 refactoring. 2021-02-02 14:11:04 -05:00
Taha Afzal 805efc912e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-02 13:37:59 -05:00
Taha Afzal 3642dbcd86 more guard rails 2021-02-02 13:37:37 -05:00
Pedro Pinto d3cfe1f6e1 Refactor. 2021-02-02 09:43:09 -05:00
John Colvin 88acbdd8b9 refactor: Replace std::maps with boost flat_maps in Trace 2021-02-01 23:44:21 -06:00
John Colvin 214f2667f2 vscode: Reference clang symbols/include paths in c_cpp_properties 2021-02-01 23:44:21 -06:00
John Colvin 7b16cc9d7b fix: Clear used_order_keys in Matcher::clear 2021-02-01 23:44:21 -06:00
John Colvin 9035ed453f vscode: Add spartan dir to include/browse paths 2021-02-01 23:44:21 -06:00
John Colvin b0affc8611 Add BookLevel != operator
Define both == and != operators in BookLevel.cc
2021-02-01 23:44:21 -06:00
John Colvin 09fb35c80b refactor: Move Quantity method/op defs to Quantity.cc
Also restyle code in a manner similar to that of the Price operator
code (it's a little cleaner, and brings about consistency).
2021-02-01 23:44:21 -06:00
John Colvin 6badc8099f refactor: Make ValueWrapper constructors constexpr 2021-02-01 23:44:21 -06:00
John Colvin 8520add970 Replace includes with fwd declarations in FifoMatcherContext 2021-02-01 23:44:21 -06:00
John Colvin 058b4d0020 refactor: Move MatcherOrder struct into its own file 2021-02-01 23:44:21 -06:00
John Colvin 68db9e1254 refactor: Make FifoMatcherContext a class instead of struct 2021-02-01 23:44:21 -06:00
John Colvin 0cddda43f2 Replace includes with fwd declarations in FifoMergedSecurityMatcher 2021-02-01 23:44:21 -06:00
John Colvin 077ce786cb refactor: Rename 'fill_depot' files 'FillDepot' 2021-02-01 23:44:21 -06:00
John Colvin 46de6b8d8b Optimize FifoMergedSecurityMatcher logging
* Reduce string copying by using fmt::format

* Shorten log header prefix (messages that fit on one line are easier to
  read)
2021-02-01 23:44:21 -06:00
John Colvin 1aea4beffe refactor: Matcher conveys updates with OrderModification struct
The OrderModification explicitly indicates which order properties have
changed, so the FifoSecurityMatcher does not need to infer this
information from arbitrary signals in the OrderUpdate.
2021-02-01 23:44:21 -06:00
John Colvin 38a5341d08 fix: Don't automatically reset show qty on passive updates 2021-02-01 23:44:21 -06:00
John Colvin 17752dcce1 refactor: FifoImpliedSecurityMatcher uses new LegDefinition type 2021-02-01 23:44:21 -06:00
John Colvin 1aedac39fd fix: FifoSecurityMatcher::book_side only includes visible qty 2021-02-01 23:44:21 -06:00
John Colvin 1cfb7ee6a4 refactor: Re-implement implied market logic in 'ImpliedMarketModel' 2021-02-01 23:44:21 -06:00
John Colvin 290b5d9da2 refactor: Clean up FifoImpliedSecurityMatcher
* Remove dependency on symbol (was only there to make logs prettier, but
  sec id alone provides sufficient information)

* Remove several includes from the header to reduce compilation overhead
2021-02-01 23:44:21 -06:00
John Colvin b66241b006 Remove unused method in FifoMergedSecurityMatcher 2021-02-01 23:44:21 -06:00
John Colvin cf615efcd0 refactor: Move LegDef into its own file
The struct is renamed 'LegDefinition' to use a naming scheme consistent
with 'SecurityDefinition.'  However, an alias for 'LegDef' is
declared for convenience, and to avoid replacing 'LegDef' with
'LegDefinition' in existing references.
2021-02-01 23:44:21 -06:00
John Colvin c57b832305 fix: Only flip implied_candidates_dirty when they've actually changed 2021-02-01 23:44:21 -06:00
John Colvin e5c3ae1f9f Add permutation 'of length' method, and permutation unit tests 2021-02-01 23:44:21 -06:00
John Colvin e9232e3bae Add math utils 'factorial' and 'choose' 2021-02-01 23:44:21 -06:00
John Colvin f4bb9544d4 fix: Fill same-priced passive icebergs evenly
When an agressor order crosses multiple [direct/implied] passive markets
at the same price, the aggressor is filled against the visible quantity
in each passive market, before passive icebergs (if any) are reloaded.
This simple iterative step is repeated until the aggressor is filled, or
no longer crosses the market.
2021-02-01 23:44:21 -06:00
John Colvin 28aaf22ea8 refactor: Change Matcher structs to be classes instead 2021-02-01 23:44:20 -06:00
John Colvin de49920af7 fix: Don't change show qty when order is filled (matcher) 2021-02-01 23:44:20 -06:00
John Colvin e05c01fc77 Clean up set_total_qty method
* remove unused vars

* replace if/else with ternary operator
2021-02-01 23:44:20 -06:00
John Colvin 9f6dc5da11 Pipe event id through the matcher for better tracing 2021-02-01 23:44:20 -06:00
John Colvin 84c9eb87e6 refactor: Replace size_ts with EventID alias 2021-02-01 23:44:20 -06:00
John Colvin 9f290b550b Pass effects vector to FifoSecurityMatcher calls 2021-02-01 23:44:20 -06:00
John Colvin 6e4950ec1c clang-format: PenaltyReturnTypeOnItsOwnLine
Discourage clang from putting the return type on its own line.
2021-02-01 23:44:20 -06:00
John Colvin c727389f53 refactor: Replace map with unordered_map in Matcher 2021-02-01 23:44:20 -06:00
John Colvin 20e8ac2910 fix: FifoMergedSecurityMatcher handling of icebergs
The iceberg quantity is expected to be null in all updates (i.e., only
non-null when the order is added).  Once added, the iceberg quantity is
redundant, as show qty changes are interpretted through visible qty
changes (the qty actually visible in the book), and the total qty is
immutable.

This patch fixes a bug where the iceberg quantity was not being assigned
back to an updated order before it was passed to the 'fill' method,
which in turn, misled the matcher to think the order was completed when
its visible qty alone was filled.
2021-02-01 23:44:20 -06:00
John Colvin 7e59145102 add TestObserver (IAlgoModel)
This is an empty implementation of IAlgoModel, so new algo ideas may be
tested without the overhead of creating new classes/files.
2021-02-01 23:44:20 -06:00
John Colvin 5e01a37b6e feat (cli): Add cmd to record matcher event proc times 2021-02-01 23:44:20 -06:00
John Colvin 95d2363435 feat (cli): Add cmd to record matcher fills
This works in a similar fasion to the cmd that records matcher books.
Both generate a csv file designed to be imported into a sqlite database,
so the matcher's output may be joined/compared with actual data from the
exchange.
2021-02-01 23:44:20 -06:00
John Colvin 82332bf92f refactor: Replace SimBooks cmd with Matcher->BooksCmd
This is in anticipation of adding a similar subcommand to record fills,
and proc times.  Basic functionality expected to be shared by these
three commands is abstracted out of the former SimBooks command into
common classes.
2021-02-01 23:44:20 -06:00
John Colvin 042c451bd6 refactor: Move classes from sim_common.h into their own files
* Move MatchEffect into 'back_testing/common/MatchEffect.h'
* Move MBPUpdate into 'back_testing/common/MBPUpdate.h/cc'
* Move OrderUpdate into 'back_testing/common/OrderUpdate.h/cc'
2021-02-01 23:44:20 -06:00
John Colvin 3e66c3e5db refactor: Move Fill into domain/fill 2021-02-01 23:44:20 -06:00
John Colvin a6f3852846 refactor: Improve Stopwatch impl 2021-02-01 23:41:23 -06:00
John Colvin 1f622b0c1e Optimize logging in IcebergFileCache
* Replace std::cout call with 'Info' log

* Use const char * templates to reduce string copying
2021-02-01 23:41:23 -06:00
John Colvin 48aaf9de6c refactor: Move iceberg_file_cache to matcher/common/IcebergFileCache
Also change static 'iceberg_file_cache' namespace methods to static
'IcebergFileCache' class methods
2021-02-01 23:41:23 -06:00
John Colvin 8b5e86c1ba refactor: Make Iceberg related structs classes instead
* IcebergInput

* IcebergInputBuilder

* IcebergFinder
2021-02-01 23:41:23 -06:00
John Colvin 2a975c95b2 Account for nan in Price::to_double 2021-02-01 23:41:23 -06:00
John Colvin b89555a2e2 Account for nan in price comparison methods 2021-02-01 23:41:23 -06:00
John Colvin 166ab7d299 refactor: Make ValueWrapper binary ops constexpr 2021-02-01 23:41:23 -06:00
John Colvin d2bf8f1b53 Add security_groups field to SecurityCriteria 2021-02-01 23:41:23 -06:00
John Colvin e363840937 refactor: Rename SecurityCriteriaClause -> SecurityCriteria::Clause 2021-02-01 23:41:23 -06:00
John Colvin d8fb275b20 fix: PCapOrderChangeBootstrapper
Bootstrap observers with resting orders on the first event in which the
security's status transitions to 'ReadyToTrade.' This simplifies the
previous implementation, which did not bootstrap observers until the
security's second consecutive event with 'ReadyToTrade' status.
2021-02-01 23:41:23 -06:00
John Colvin 13719170c9 refactor: Move OrderKey.h into domain/order 2021-02-01 23:41:23 -06:00
John Colvin 2c4db5bf02 refactor: Move Order types into domain/order 2021-02-01 23:41:23 -06:00
John Colvin 7e957527ac Add Price::nan method 2021-02-01 23:07:01 -06:00
John Colvin b94a1d943f refactor: Clean up Price
* Move impl from Price.h to Price.cc

* Make ctrs, methods, ops constexpr (where possible)

* Overload all binary ops to accept Price, or int64 param
2021-02-01 23:07:01 -06:00
John Colvin 3efb4da14b diag: Add Trace parameter to matcher constructor
This makes it easy for matcher-validation commands to bind trace
parameters, such as order/event ids, to cli options.
2021-02-01 22:56:21 -06:00
John Colvin 9c53f4b949 refactor: Move Trace into its own file 2021-02-01 22:56:21 -06:00
John Colvin 35d395fc35 refactor: Hide private matcher members behind PImpl 2021-02-01 22:56:21 -06:00
John Colvin cf19a63aac Delete superfluous move constructor/operator in Matcher 2021-02-01 22:56:21 -06:00
John Colvin 6456060a6c refactor: Define AlgoEventID struct, and EventID alias
A few advantages the struct offers (over an alias for a pair of size_ts):

* A custom output operator

* Eliminates potential conflict with pairs of size_ts that don't
  represent an algo id

* The ability to (eventually) choose precise member names for both
  components of the event, rather than 'first' and 'second'
2021-02-01 22:56:21 -06:00
John Colvin 702547a88b refactor: Revamp 'md' command with CLI11 App
The files 'run_md.h/cpp' are removed, as their functionality is
distributed among the subcommands: md, run, and web.
2021-02-01 22:56:21 -06:00
John Colvin 2447da3c08 refactor: Rename 'map_utils.h' -> 'MapUtils.h/cc'
Also refactor the relevant namespace 'bts::utils' methods to be static
methods in the newly created class 'MapUtils.'  This is part of the
effort to favor static class methods over namespaced functions.
2021-02-01 22:56:21 -06:00
John Colvin 8df420c37c refactor: Rename 'table_display.h' -> 'TableDisplay.h/cc'
Also refactor the namespace 'table_display' methods to be static methods
in the newly created class 'TableDisplay.'  This is part of the effort
to favor static class methods over namespaced functions.
2021-02-01 22:56:21 -06:00
John Colvin d18a345b5b refactor: Rename 'permutation.h' -> 'Permutation.h/cc'
Also refactor the namespace 'all_permutations' methods to be static
methods in the newly created class 'Permutation.'  This is part of
the effort to favor static class methods over namespaced functions.
2021-02-01 22:56:21 -06:00
John Colvin 1770274dd0 refactor: Rename 'action_summarizer' -> 'ActionSummarizer' 2021-02-01 22:56:21 -06:00
John Colvin 746dd506f8 refactor: Rename 'file_stream_utils.h' -> 'FileUtils.h/cc'
Also refactor the namespace 'file_stream_utils' methods to be static
methods in the newly created class 'FileUtils'.  This is part of
the effort to favor static class methods over namespaced functions.
2021-02-01 22:56:21 -06:00
John Colvin 78be0004af refactor: Rename 'reverse_comp.h' -> 'ReverseComp.h' 2021-02-01 22:56:21 -06:00
John Colvin 333a378230 refactor: Rename 'string_splitter.h' -> 'StringUtils.h/cpp'
Also refactor the namespace 'string_splitter' methods to be static
methods in the newly created class 'StringUtils'.  This is part of
the effort to favor static class methods over namespaced functions.
2021-02-01 22:56:21 -06:00
John Colvin 5e8f776334 refactor: Rename dir 'spartan/util' -> 'spartan/utils' 2021-02-01 22:56:21 -06:00
Pedro Pinto 5470a82b94 Real time ilink3 handler code complete. 2021-02-01 20:28:44 -05:00
Pedro Pinto 7959c96bcd Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-02-01 13:57:37 -05:00
Pedro Pinto aeb4bec02d Refactored sim types to have a sim prefix. 2021-02-01 13:57:16 -05:00
Taha Afzal b92df15594 Reducing logging 2021-01-30 23:37:29 -06:00
Taha Afzal 86089ec3b4 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-30 20:04:14 -05:00
Pedro Pinto 2cffaa9d73 Refactored include path for spartan. 2021-01-30 15:11:46 -05:00
Taha Afzal 94da28c5cc Better log messages 2021-01-29 22:41:58 -05:00
Pedro Pinto 86b7f30e0e Towards realtime il3 handler. 2021-01-29 15:22:32 -05:00
Taha Afzal e5b01ad92f Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-29 11:28:41 -05:00
Taha Afzal 9d381c2848 Sniper code complete 2021-01-29 11:28:35 -05:00
Pedro Pinto f81c0280e4 Initial cert tests pass. 2021-01-28 22:35:16 -05:00
Pedro Pinto b13ffff044 Tests work for il3 connection setup. 2021-01-27 20:56:37 -05:00
Pedro Pinto d068ac40ec Am able to set party details. 2021-01-27 14:27:23 -05:00
Pedro Pinto db5e428709 Starting to test il3. 2021-01-25 16:42:32 -05:00
Pedro Pinto 77396111aa Can build. 2021-01-25 12:57:22 -05:00
Taha Afzal 7af05e3f4a Cleaned up, tested a fair bit, few (safety related) features to come 2021-01-24 21:56:34 -05:00
Pedro Pinto 8665ad24c1 Refactored. 2021-01-22 14:59:35 -05:00
Pedro Pinto 72e6e11238 Towards il3 gateway. 2021-01-20 16:49:07 -05:00
Taha Afzal 3468201f32 Moving sniper data and initialization to SniperAlgoCommon 2021-01-18 20:43:31 -05:00
Pedro Pinto fb7496aaf2 Added commission model to sim. 2021-01-18 15:21:03 -05:00
Pedro Pinto 9193653773 Added new spartan 'test' subcommand. 2021-01-18 15:20:47 -05:00
Pedro Pinto a80641f8f4 Added testing note to docs. 2021-01-16 16:04:27 -05:00
Pedro Pinto eb7f1ba9ee Disabled IB cross test. 2021-01-16 12:38:19 -05:00
Pedro Pinto 39820205ce Market matcher tests as part of spartan. 2021-01-16 12:33:38 -05:00
Pedro Pinto 2cffcb4e25 Merged 2021-01-16 12:32:34 -05:00
Pedro Pinto 2d2c664ce9 More il3 gateway work. 2021-01-16 11:53:04 -05:00
John Colvin ca4e477f56 fix: CLI11 integration
* Run 'sparkd tests' outside of the CLI::App framework
  (delegate to 'catch', which has a solid cli).  This
  fixes a bug which prevented callers from specifying
  test tags (in the form of '[<tag>]'), as the CLI::App's
  parse method removes square brackets from cli options.

* Bind cli options to instance members of their subcommand's
  CLI::App derived class.  This seems to fix a bug which caused
  the [static instance] binding source to be destructed twice.

 * Add help text for several subcommands
2021-01-16 00:01:15 -06:00
Pedro Pinto 3ec36c4db1 Refactoring IReactorConnection and friends. 2021-01-15 09:41:11 -05:00
Pedro Pinto d593696df2 Tagged spartan tests. 2021-01-15 08:49:28 -05:00
John Colvin 45de55a552 Remove unused files 'args_parser.h/cpp' 2021-01-15 00:32:55 -06:00
John Colvin 17d20bac8b Remove unused file 'ImpliedFifoSecurityMatcher.h'
This was an old version of the implied fifo matcher,
now defined in 'FifoImpliedSecurityMatcher.h'.
2021-01-15 00:32:55 -06:00
John Colvin f42137d86c Don't assert that an iceberg order's vis qty <= show qty
There isn't a compelling reason to enforce this
constraint.  The show qty is the 'reload' qty, and
is orthogonal to the current [visible] qty.
2021-01-15 00:32:55 -06:00
John Colvin 456177af30 typo: Flip ternary op clauses, and delete superfluous 'return' 2021-01-15 00:32:55 -06:00
John Colvin 41374d62ea spartan cli: Add SimBooks command
This command is a diagnostic tool that produces a
csv file of matcher-generated books for a
particular pcap, which can then be imported to
sql, and joined with the actual books table for
comparison.
2021-01-15 00:32:55 -06:00
John Colvin 25395fcac3 refactor: Replace api::Side w/ spartan::Side 2021-01-15 00:32:55 -06:00
John Colvin 9b49c66136 fix: Require valid side param in 'has_min_qty' method
Although the side can be inferred by comparing the
first two price levels, the book may not have two
price levels to compare.
2021-01-15 00:32:55 -06:00
John Colvin 36bfc9e770 Add SecurityCriteria struct to filter instrument sets
Inspired by the c# 'SecurityCriteria' class from
spark's front end.  This may come in handy as a cli
option for spartan subcommands, among other things.
2021-01-15 00:32:55 -06:00
John Colvin 2a04341b3b Allow for non-null, or non-empty effects vector in 'match' method 2021-01-15 00:07:02 -06:00
John Colvin c0a7f1b3fe refactor: Use c++ 'char_traits::length' instead of c 'strlen' 2021-01-15 00:07:02 -06:00
John Colvin 66e1b94d1b refactor: Revamp cli with CLI11 App 2021-01-15 00:07:02 -06:00
John Colvin 25e07d0a60 refactor: Move BookStatRecorder into 'feed_observers' dir 2021-01-14 21:25:14 -06:00
Pedro Pinto 2731f2b287 Fixed weird duplicate symbol issue. 2021-01-14 13:53:31 -05:00
Pedro Pinto 5140cb1c2c Towards an order gateway. 2021-01-14 13:09:39 -05:00
Pedro Pinto e11566537c More refactoring. 2021-01-13 14:50:29 -05:00
Pedro Pinto b884dc910e Refactor MDP3 feed handler types. 2021-01-13 14:48:13 -05:00
Pedro Pinto 35cefe3b89 Added IL3 Parser. 2021-01-13 12:04:34 -05:00
Pedro Pinto 96af106a9d Refactored MDP3Parser 2021-01-13 11:16:23 -05:00
Pedro Pinto ac5d961a70 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-13 09:47:34 -05:00
Pedro Pinto 8f4e529766 Refactoring SBE parsing. 2021-01-13 09:47:23 -05:00
Taha Afzal 19a7e2898e normalizing ticks/price/cash in the report 2021-01-12 18:12:45 -05:00
Pedro Pinto 0ef29c181a Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-12 15:48:10 -05:00
Pedro Pinto 81d3d5f11d Adding ilink3 notes 2021-01-12 15:47:54 -05:00
Pedro Pinto c4e0518228 Whitespace. 2021-01-12 11:57:45 -05:00
Taha Afzal 121b7df59e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-12 11:28:21 -05:00
Taha Afzal 6740f6b1fb Adding status col to polygon_values 2021-01-12 11:27:52 -05:00
Pedro Pinto 5a7a267daf Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-12 11:10:59 -05:00
Pedro Pinto fb1040fb2c Cleaned up generation of mdp3 files. 2021-01-12 11:10:39 -05:00
Taha Afzal ecad5518eb Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-12 11:10:37 -05:00
Taha Afzal 4361e2277a vid constraint on polygon values 2021-01-12 11:10:24 -05:00
Pedro Pinto 7d7e25fd25 More refactoring. 2021-01-12 10:38:59 -05:00
Pedro Pinto 8f0cfe2c2a Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-12 10:32:10 -05:00
Pedro Pinto c470c5f161 Cleaned up iLink3 code generation. 2021-01-12 10:31:36 -05:00
Taha Afzal 2302e5f37e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-12 09:40:19 -05:00
Pedro Pinto fc1b84f966 Refactor of directory names. 2021-01-12 09:02:50 -05:00
Pedro Pinto 25ad869030 Adding iLink3 generation code 2021-01-12 08:57:16 -05:00
Taha Afzal a35559da30 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-11 22:35:18 -05:00
Taha Afzal 0103abbec3 merging 2021-01-11 22:34:57 -05:00
Pedro Pinto ee725747ad Added trade summary signal 2021-01-11 13:23:28 -05:00
Taha Afzal ef0f044e8d Adding more data to polygon_values 2021-01-11 12:58:23 -05:00
Pedro Pinto d42b72ea79 Added Trade summary signal to spartan. 2021-01-11 11:56:52 -05:00
Pedro Pinto f177441d07 Refactored. 2021-01-11 10:14:38 -05:00
Pedro Pinto 939c6442be Added book signa to realtime handler. 2021-01-11 10:10:35 -05:00
Pedro Pinto 33dad3db73 More book tweaks. 2021-01-10 18:02:25 -05:00
Pedro Pinto ef296d4b1c More clean up. 2021-01-10 17:21:15 -05:00
Pedro Pinto 58fbb8e04f Cleaning up book merging. 2021-01-10 17:17:45 -05:00
Pedro Pinto 0200b53c3e Refactored Book class. 2021-01-10 14:16:48 -05:00
Pedro Pinto cdaef11761 Refactored Book class. More to follow. 2021-01-10 14:16:27 -05:00
Pedro Pinto 853d9f8ddd Refactor Book. 2021-01-08 20:29:30 -05:00
Pedro Pinto 61aac1f1b2 Refactoring book. 2021-01-08 19:37:45 -05:00
Pedro Pinto 48f33e7e4c Added some comments. 2021-01-08 18:20:57 -05:00
Pedro Pinto 216ebb2454 Moved security snapshot to domain. 2021-01-08 18:17:54 -05:00
Pedro Pinto 5c36f21f06 Refactored. 2021-01-08 18:13:04 -05:00
Pedro Pinto 66360844b2 Refactor. 2021-01-08 14:58:10 -05:00
Pedro Pinto 8eae549af3 Refactor 2021-01-08 14:49:58 -05:00
Pedro Pinto 721bc6d68f Refactor. 2021-01-08 14:43:53 -05:00
Pedro Pinto b7d7b3dceb Refactored. 2021-01-08 14:27:36 -05:00
Pedro Pinto d3ad5ee823 Refactor. 2021-01-08 14:06:00 -05:00
Pedro Pinto c119b4b6ef Refactor. 2021-01-08 13:52:37 -05:00
Pedro Pinto 9aa5e6435d Cleaned up quicktest. 2021-01-08 10:57:29 -05:00
Pedro Pinto b4eced0cd3 Set buffer size and non blocking option on reactor. 2021-01-08 10:57:03 -05:00
Pedro Pinto 1f159aacf0 Getting market data from the wire. 2021-01-08 10:37:07 -05:00
Pedro Pinto d2ed70b6dd Added a few comments. 2021-01-08 10:36:24 -05:00
Pedro Pinto 76be885a60 Algoman. 2021-01-07 17:56:50 -05:00
Pedro Pinto f7173cd477 Towards algoman 2021-01-06 16:11:46 -05:00
Pedro Pinto b448db51f4 More refactor. 2021-01-06 09:15:25 -05:00
Pedro Pinto a413b2401b Refactor. 2021-01-06 09:11:33 -05:00
Pedro Pinto 37a673d336 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-05 11:35:39 -05:00
Pedro Pinto 37cb60a777 Refactor. 2021-01-05 11:35:24 -05:00
Pedro Pinto 18fc857b78 Towards algoman. 2021-01-05 11:34:27 -05:00
Taha Afzal aa4912bba9 Opp summary 2021-01-05 10:17:15 -05:00
Pedro Pinto 7eff7f89d1 Towards an algo framework. 2021-01-04 14:58:24 -05:00
Taha Afzal 9010003a0d Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-04 10:07:10 -05:00
Taha Afzal 9a0bc05b8b Added edge filter for static analysis 2021-01-04 10:06:51 -05:00
Pedro Pinto 0e4327c3f9 Merged 2021-01-04 09:36:24 -05:00
Pedro Pinto cc9b4b874c Renamed MDP3Price to Price. 2021-01-04 09:04:35 -05:00
Pedro Pinto 333609d23a Renamed MDP3Price::price() to MDP3Price::to_double() 2021-01-04 08:56:48 -05:00
Pedro Pinto 1f7e682900 Fixed some tests that were using MDP3Price. 2021-01-04 08:53:00 -05:00
John Colvin 635d4196f1 build: Resolve QuantityTag template parameter conflict
The linker was mixing up the QuantityTag template
parameter structs declared in the aliases
'bts::Quantity,' and 'bts::spartan::mdp3::Quantity.'
2021-01-03 22:46:02 -06:00
John Colvin 3f7ce90cef spartan cli: Add 'book_stats' command
Generates a csv file consisting of basic stats
about each book update (one row per per update).
2021-01-03 22:46:02 -06:00
John Colvin 1c8859ced6 Inline 'event_flags_name' method 2021-01-03 22:35:50 -06:00
John Colvin 04257535e1 clang-format: Add 'AlwaysBreakTemplateDeclarations: true' 2021-01-03 22:34:37 -06:00
John Colvin ae71fb9c33 Overload Formatter::join to accept ostream&
* Existing join methods all create and return a
  string, while the overload passes values directly
  to the ostream&, and avoids creating/copying a string.

* This will come in handy when creating csv rows.
2021-01-03 22:34:31 -06:00
Pedro Pinto 8f68e5afaf Dowgraded default filter message in polygons to Info. 2021-01-03 17:10:50 -05:00
Pedro Pinto 23160f7843 Fixed bug in algo effect sort order. 2021-01-03 17:10:17 -05:00
Taha Afzal 2788e39cd6 Refining the pandas code for sniper analysis 2021-01-01 20:15:28 -05:00
Pedro Pinto e536cae63a Droppped md::IntPrice in favour od MDP3Price. 2021-01-01 16:32:22 -05:00
Taha Afzal e6b96b3fc3 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2021-01-01 12:56:52 -05:00
Taha Afzal 6d357c8d22 One place to look at static analysis of sniper opportunuities 2021-01-01 12:56:44 -05:00
Pedro Pinto 02dcd57817 IntPrice 2020-12-31 17:17:54 -05:00
Pedro Pinto 7a2c5425a1 Towards replacing md::IntPrice 2020-12-31 17:13:31 -05:00
Pedro Pinto 8b667e056c Removed security db class. 2020-12-31 17:01:29 -05:00
Pedro Pinto 125fe90aaf Refactored instrument definition. 2020-12-31 16:56:47 -05:00
Pedro Pinto c7a4d08372 Working on instrument definition. 2020-12-31 16:01:38 -05:00
Pedro Pinto d2bae92e92 Refactored. 2020-12-31 13:07:21 -05:00
Pedro Pinto 9ff4c81a11 More refactor. 2020-12-31 12:15:24 -05:00
Pedro Pinto bda105c550 Merged 2020-12-31 12:08:17 -05:00
Pedro Pinto df36b6d24f Refactored iceberg quantity. 2020-12-31 12:06:33 -05:00
Pedro Pinto b34ef9283d Refactored quantity. 2020-12-31 11:57:22 -05:00
Pedro Pinto 7e13e8cb67 More refactoring. 2020-12-31 11:48:21 -05:00
Taha Afzal a51f96cc6f Added product to polygon values 2020-12-31 01:43:07 -05:00
Taha Afzal 99ea103944 merging 2020-12-31 00:34:55 -05:00
Taha Afzal 3b2e5e5d95 Spartan run with sql option, can optionally (based on config) not write the books to the database 2020-12-30 23:24:46 -05:00
Pedro Pinto e06ce66513 Refactor MDP3TimeStamp to TimeStamp. 2020-12-30 21:11:00 -05:00
Pedro Pinto 738862cb22 Tweaked header layout. 2020-12-30 17:32:41 -05:00
Pedro Pinto de063e51f0 Another clang-format run, changed how parameters are binned 2020-12-30 17:30:10 -05:00
Pedro Pinto 8f21a77150 Ran clang-format across all files 2020-12-30 17:11:18 -05:00
Pedro Pinto a27321df2e Apparently you need a newline at the end of afile 2020-12-30 16:50:01 -05:00
Pedro Pinto 0fb7ba5987 Ran clang-format on spartan, changed format defaults. 2020-12-30 16:30:37 -05:00
Pedro Pinto a0a508e64f More documentation. 2020-12-30 16:16:46 -05:00
Pedro Pinto d8a80419eb Added some documentatio, run clang-format on iLink3 code. 2020-12-30 14:22:56 -05:00
Pedro Pinto 862df2efb6 Made MDP3 compression tolerant of data loss. 2020-12-30 14:02:08 -05:00
Pedro Pinto 9dcbab9628 Refactor. 2020-12-29 20:02:04 -05:00
Pedro Pinto ae7b25e120 Refactor. 2020-12-29 20:01:48 -05:00
Pedro Pinto bb1e7df7a9 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-29 17:15:38 -05:00
John Colvin b620d33f98 fix build: correct typo 'view' -> 'views'
Both 'view' and 'views' are namespaces within
the 'ranges' namespace.  They contain some methods
with identitical signatures, although those in
the former are deprecated.
2020-12-29 16:10:18 -06:00
Pedro Pinto 19b5004920 Merged 2020-12-29 16:46:49 -05:00
John Colvin 337fb2ae45 Restore (uncomment) iceberg impl in Sim
The bug that was the reason it was originally commented out
has been fixed.
2020-12-29 12:58:24 -06:00
John Colvin e87d4a796a fix: IcebergFinder bootstraps with 'orders' instead of 'order_changes' 2020-12-29 12:58:24 -06:00
John Colvin a419ee9ed1 cli: Make icebergs_csv cmd's columns match those in sql 2020-12-29 12:58:24 -06:00
John Colvin 2fe6e3dcab cli: Make icebergs_csv command always generate new csv
Change the command so it does not attempt to retrieve the
icebergs from a bin file before observing the pcap, nor does it
write the icebergs to a bin file after observation.  This behavior
was originally intended as a way to avoid wasting time regenerating
the same set of icebergs when pcap observation was significantly slower.
2020-12-29 12:58:24 -06:00
John Colvin 262b6352a6 test: Add unit tests for synth book computation 2020-12-29 12:58:24 -06:00
John Colvin a18d29b66a Add several MDP3Quantity int binary operators 2020-12-29 12:58:24 -06:00
John Colvin b464b9ab88 Overload SidePriceComp '()' operator for SmallBookLevel 2020-12-29 12:58:24 -06:00
John Colvin 8bf8b6b36e Clean up, and optimize compute_synthetic_book method
* Improve code-readability

* Add documentation

* Avoid copying leg books
2020-12-29 12:58:24 -06:00
John Colvin cbd10c7a7c Refactor book_utils::fmt_ladder
* use md::IntPrice/MDP3Quantity rather than double/uint32_t

* overload fmt_ladder to accept a single book-side, and an
  optional 'side' argument.  If 'side' isn't specified, deduce
  the side by comparing 2 price levels.
2020-12-29 12:54:47 -06:00
John Colvin a6bfa8f976 fix: compute_synthetic_book sometimes only populates 1st price level
Incorrect 'limiting factor' logic was causing the method to exit
when the qty in the first price level of the first leg was used.
2020-12-29 12:54:47 -06:00
John Colvin 8850d7d188 fix: running_cost accumulation in 'change_unit_qty' method 2020-12-29 12:54:47 -06:00
Taha Afzal 9b62a70c8f PolygonFinder can be parameterized for symbols(assets), expirations 2020-12-29 12:54:47 -06:00
Taha Afzal 950887851a Added a product list config for polygon generation 2020-12-29 12:54:47 -06:00
Pedro Pinto 6f5c41ca14 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-29 08:06:54 -05:00
Pedro Pinto 5223529af1 Sorted match effects so that price updates are delivered before order updates. 2020-12-29 08:06:27 -05:00
Taha Afzal 2632d7ea9f Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-28 23:17:28 -05:00
Taha Afzal de60a0abd1 PolygonFinder can be parameterized for symbols(assets), expirations 2020-12-28 23:17:23 -05:00
Pedro Pinto c4e4ff57d8 Multiple changes to sniper including use of quantity in shot selection. 2020-12-28 20:06:43 -05:00
Pedro Pinto b6f108f7ea More precise alignment of sim time and pcap time. 2020-12-28 20:05:33 -05:00
Pedro Pinto 96c39e68ee More deterministic names for polygons. 2020-12-28 20:03:49 -05:00
Pedro Pinto a3d5e63fb6 DB Fixes. 2020-12-28 20:03:35 -05:00
Pedro Pinto c1be834e54 Changed logging. 2020-12-28 20:02:48 -05:00
Pedro Pinto caf0914b4d Better names for sim time. 2020-12-28 20:02:24 -05:00
Pedro Pinto 0fc522f8c2 Removed commented out code. 2020-12-25 13:41:46 -05:00
Pedro Pinto a247f7e396 Re-enabling all polygons. 2020-12-25 13:36:45 -05:00
John Colvin 03d5047798 fix: compute_synthetic_book sometimes only populates 1st price level
Incorrect 'limiting factor' logic was causing the method to exit
when the qty in the first price level of the first leg was used.
2020-12-24 14:22:58 -06:00
John Colvin 391b8ece7a fix: running_cost accumulation in 'change_unit_qty' method 2020-12-24 14:22:42 -06:00
Taha Afzal 7d75654cf0 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-24 12:53:31 -05:00
Taha Afzal 6a46ad2b0e Added a product list config for polygon generation 2020-12-24 12:53:27 -05:00
Pedro Pinto e413ad216e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-24 10:44:43 -05:00
Pedro Pinto d582005d64 Added assert to make sure books are correct. 2020-12-24 10:44:29 -05:00
Pedro Pinto 02fa07552b Added expiration to instrument definition. 2020-12-24 10:44:08 -05:00
Taha Afzal b032926581 hooking polygon book calc to polygon_values 2020-12-23 18:05:03 -05:00
Pedro Pinto 189cb66daf Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-23 14:24:47 -05:00
Pedro Pinto 36f1df58f0 Intermediate commit. 2020-12-23 14:24:23 -05:00
Taha Afzal 8489eda3a6 Merging 2020-12-23 12:42:37 -05:00
Taha Afzal 3e189a751d Allow negative payups 2020-12-23 12:32:45 -05:00
Pedro Pinto b2f6be6d10 Added back all polygons, had a temp break to debug synth book. 2020-12-23 12:22:48 -05:00
John Colvin b656632e86 fix: synthetic book computation
* the fix was technically in the 'change_unit_qty' method,
  which is called from 'compute_synthetic_books.'

* Although the 'change_unit_qty' method was correctly dividing
  quantity by 'unit_qty', it was not scaling the prices.
2020-12-23 10:28:59 -06:00
John Colvin 22cf50282c .vscode: change python interpreter path setting 2020-12-23 10:28:59 -06:00
Taha Afzal 7650e15a52 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-23 10:55:20 -05:00
Taha Afzal 235d6ecd2f Polygon values have legs books (as text columns), and synthetic books. There is a also new view that joins polygon values with events 2020-12-23 10:55:10 -05:00
Pedro Pinto c9a0d4489b Added max loss, added start/stop times for simulation, added price only order changes. 2020-12-22 10:58:05 -05:00
Pedro Pinto c6697b82fe Added code to convert ptime to mdp3 time. 2020-12-22 10:56:16 -05:00
Pedro Pinto e0231c7dd5 Fixed PCapReader destructor. 2020-12-22 10:55:42 -05:00
Pedro Pinto f3bcbf85dd Reduced console logging. 2020-12-21 10:16:41 -05:00
Pedro Pinto 7e04f9a5b3 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-21 10:00:13 -05:00
Pedro Pinto 1835d490a3 Added the ida of parameter sets in the simulator. 2020-12-21 09:59:38 -05:00
Taha Afzal 36bf94aad9 placeholder orders are not fired in file mode 2020-12-18 09:17:28 -05:00
Taha Afzal 468df062c3 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-17 12:15:27 -05:00
Taha Afzal 544a9212cf Sniper launched placeholder orders that are then used to snipe 2020-12-17 12:15:19 -05:00
Pedro Pinto 822f43c5a1 Better logging of shot sequence number. 2020-12-17 10:22:53 -05:00
Pedro Pinto 85106cb293 Better logging of clean/saved/forced shots. 2020-12-17 10:22:33 -05:00
Pedro Pinto ebd0fa4809 Added utility to parse performance logs. 2020-12-17 09:40:04 -05:00
Pedro Pinto 43f4fe2011 Better logging for sniper model. 2020-12-17 09:39:41 -05:00
Taha Afzal ffcebdf94a Perf logs in the sniper 2020-12-16 00:05:31 -05:00
Pedro Pinto 0e7b104c76 Added more performance logging. 2020-12-15 18:04:10 -05:00
Pedro Pinto f0b76f244c Added packet structure to sql DB. 2020-12-15 17:01:27 -05:00
Pedro Pinto e4dc9103e1 Fixed typo in md.sql 2020-12-15 14:17:42 -05:00
Pedro Pinto afb88122ad Added performance logging. 2020-12-15 13:40:08 -05:00
Pedro Pinto 18a0fa7fb9 Tweak to md sql DB. 2020-12-15 13:34:55 -05:00
Pedro Pinto b491b2b4cd Added seq numbers to top of the book and opportunity views. 2020-12-15 09:45:53 -05:00
Pedro Pinto 4b1e9afe28 Corrected corid for trade summary signal. 2020-12-15 09:45:35 -05:00
Pedro Pinto abb9a56761 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-14 11:56:52 -05:00
Pedro Pinto 09505b2005 Added pause between shots, added clean flag to shot outcome. 2020-12-14 11:56:37 -05:00
Pedro Pinto e3a9adbf3f Fixed clean up of sim db. 2020-12-14 11:55:47 -05:00
Taha Afzal 9aafed66c0 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-14 10:50:15 -05:00
Taha Afzal a259aa8419 Lookeahd book top guessed aggressively 2020-12-14 10:50:06 -05:00
Pedro Pinto 4daf6e127e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-14 10:32:52 -05:00
Pedro Pinto 1ac36e932e Fixed unbuscription from trade signal on algo termination. 2020-12-14 10:32:26 -05:00
Pedro Pinto 23b038a6a7 Optionall automatically clear previous runs from sim_db. 2020-12-14 10:17:54 -05:00
Pedro Pinto e2069c8584 Fixed key remapping in sim. 2020-12-14 10:17:25 -05:00
Pedro Pinto 525cf4652e Removed old proto from include. 2020-12-14 10:17:07 -05:00
Pedro Pinto 6eb3595294 Added sniper_run view to sim_db. 2020-12-14 10:16:14 -05:00
Taha Afzal 8c421d0726 Slight log change 2020-12-14 10:15:12 -05:00
Pedro Pinto 870c69b834 Removed incorrect assertions. 2020-12-13 18:08:09 -05:00
Pedro Pinto 4f39307b9b Disabled icebergs because of show quantity set to 0. 2020-12-13 18:07:37 -05:00
Pedro Pinto b687e339a4 Improved logging during sniper run. 2020-12-13 18:07:11 -05:00
Pedro Pinto 8623f2369f Fixed a bug in sniper model. 2020-12-13 18:06:56 -05:00
Taha Afzal 7eade56042 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-13 16:29:08 -05:00
Taha Afzal 1091c983f9 More logs 2020-12-13 16:29:02 -05:00
Pedro Pinto 533ca3e601 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-13 10:33:21 -05:00
Pedro Pinto e4b8594d44 Ran clang format. 2020-12-13 10:33:07 -05:00
Taha Afzal 22e5a53e32 FillType flag 2020-12-12 21:48:22 -05:00
Pedro Pinto 6c5f5116b4 Tweaked 'shots' view in sim db. 2020-12-12 20:03:51 -05:00
Pedro Pinto b5e455ff75 Adjusted polygon filter to include dec/march. 2020-12-12 19:20:18 -05:00
Pedro Pinto 03cd5c164f Improved caching of pcap data during simulations. 2020-12-12 19:19:26 -05:00
Pedro Pinto c4aa99636e Added pay up to sniper model. 2020-12-11 19:45:16 -05:00
Pedro Pinto ed0eb9be19 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-11 14:13:32 -05:00
Pedro Pinto d155f8ed12 Tweaked python analysis tools. 2020-12-11 14:12:32 -05:00
Pedro Pinto ffcfe3cf9c Added more parameters to sim db. 2020-12-11 14:11:59 -05:00
Taha Afzal d848a15217 lookahead diagnostics log 2020-12-11 11:03:55 -05:00
Taha Afzal 951f8e9442 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-11 10:00:58 -05:00
Taha Afzal f10f46b811 corid and use_lookahead logged 2020-12-11 10:00:50 -05:00
Pedro Pinto d7e80a1303 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-10 22:24:09 -05:00
Pedro Pinto de0d6c5891 Cleaned up sniper model 2020-12-10 22:21:52 -05:00
Pedro Pinto 4e7c0122d7 Cache preload of sim. 2020-12-10 22:21:07 -05:00
Pedro Pinto cb75e46161 Better DBs. 2020-12-10 22:20:11 -05:00
Taha Afzal 6954f5842f Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-10 12:36:16 -05:00
Taha Afzal cbc1cc6b5b using trade summs of atleast 2 messages, more logs 2020-12-10 12:35:57 -05:00
Pedro Pinto 3cc2cf0783 Hard coded filtering of polygon opportunities to just the one polygon. 2020-12-10 12:22:46 -05:00
Pedro Pinto b3e7bcf2e1 Fixed iceberg table in sql command. 2020-12-10 12:22:00 -05:00
Pedro Pinto dd3c33387d Forgot to add the number of levels to the actual interface. 2020-12-10 11:02:21 -05:00
Pedro Pinto 84a8f11846 Added number of levels to trade signal. 2020-12-10 10:50:33 -05:00
Pedro Pinto 4d2ba5fc41 Fixed initialization bug in sniper. 2020-12-10 09:10:10 -05:00
Pedro Pinto b980e39ebb Merged 2020-12-10 09:03:14 -05:00
Pedro Pinto 0dc97dd2d9 Refactor part 8. 2020-12-10 08:56:14 -05:00
Pedro Pinto cef6815e5c Refactor, part 8. 2020-12-10 08:47:07 -05:00
Pedro Pinto 4e84b7d789 Refactor, part 7 2020-12-10 08:44:25 -05:00
Pedro Pinto f632fa2e50 Refactor, part 6 2020-12-10 08:42:09 -05:00
Pedro Pinto 1919440a83 Refactor, part 5. 2020-12-10 08:25:26 -05:00
Taha Afzal 1a43dafb2e Evaluating in response to trade summary,improved logs 2020-12-09 18:52:57 -05:00
Taha Afzal bd54f19bdb More logging 2020-12-09 17:13:22 -05:00
Pedro Pinto 5f2e98beed More clean up. 2020-12-09 14:58:55 -05:00
Pedro Pinto f7ea0cd254 Removing old sim code part 3. 2020-12-09 14:51:58 -05:00
Taha Afzal af1ab49219 added sweep test for the sell side 2020-12-09 14:49:57 -05:00
Taha Afzal 2ac74c5e29 Clang build fix, sweep book calc test 2020-12-09 14:35:32 -05:00
Pedro Pinto fb42df3117 Removing old sim, part2 2020-12-09 14:34:31 -05:00
Pedro Pinto 443dacaefb Removing old simulator, part 1. 2020-12-09 14:26:10 -05:00
Taha Afzal 0d5b3d9018 detaching all children before completing the sniper after each shot 2020-12-09 13:15:51 -05:00
Taha Afzal cc75c46b1a sniper turns itself off after shooting 2020-12-09 12:54:35 -05:00
Taha Afzal 1ee60f743e added the cumm price/qty constraint, everything hooked up 2020-12-09 12:11:24 -05:00
Taha Afzal dc8fd8baef Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-09 09:55:39 -05:00
Taha Afzal 67b6884200 cumm edge/qty parameter to sniper 2020-12-09 09:55:30 -05:00
Pedro Pinto 03a81280f4 Merged 2020-12-09 08:49:27 -05:00
Pedro Pinto 34675696f3 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-09 08:38:44 -05:00
Pedro Pinto 0e1687c853 Changed trade summary signal to include last qty. 2020-12-09 08:38:00 -05:00
John Colvin ccf8a8e492 fix iceberg integration with new simulator
* Sim uses MergedMatcher::reset to inject a particular exchange state
  into the matcher (the matcher does not reset the visible quantity to the
  show quantity in a reset op).

* iceberg_helper::add_iceberg_annotation does not set the visible
  quantity to the show quantity if the order change type is 'added'.
2020-12-09 00:12:31 -06:00
John Colvin a0d0a30ad3 refactor 'is_exhausted' -> 'is_empty' in compute_synthetic_books 2020-12-09 00:11:51 -06:00
John Colvin ff02801000 compute_synthetic_book doesn't copy leg market tuples as it iterates through them 2020-12-09 00:11:51 -06:00
John Colvin 590ca3892d compute_synthetic_book was multiplying leg prices by their qty twice
This is a pre-emptive bug fix, as the method has only been fed synths
with leg quantities +/-1.
2020-12-09 00:11:51 -06:00
John Colvin 1674486dc0 vscode (build): change linux build task to run in docker
* prompts user for configuration (debug or release)

* looks for docker instance named "${USER}s_docker"
2020-12-09 00:11:51 -06:00
John Colvin dc5301f8b0 vscode (intellisense): add build/ninja_debug/src to browse path 2020-12-09 00:11:51 -06:00
Taha Afzal 436f7eefe9 Added logic for book calculation based on sweep 2020-12-09 00:57:34 -05:00
John Colvin 258d4a3fc1 import compute_synthetic_book method from spartan 2020-12-08 23:00:18 -06:00
John Colvin c53f6425cd import IntPrice arithmetic operators from spartan
The compute_synthetic_book method (also to be imported
from spartan) depends on a couple of them.
2020-12-08 22:52:28 -06:00
Taha Afzal fd8bd63f55 Added payup ticks to sniper and logic to alternate bw main book and lookahead book 2020-12-08 21:47:25 -05:00
Pedro Pinto 64b42aef99 Trade summary signal code complete. 2020-12-08 16:01:46 -05:00
Pedro Pinto 1d323ddc37 Fixed bug in parsing a few sim run options. 2020-12-08 11:42:26 -05:00
Pedro Pinto c1331df2fe Fixed cumm qty. 2020-12-08 11:03:19 -05:00
Pedro Pinto cb1946a8d0 Delayed simulation start until first algo order to improve accuracy. 2020-12-08 09:14:54 -05:00
Pedro Pinto 09c043b11f Added some validation for the sniper synth book. 2020-12-08 08:47:16 -05:00
Pedro Pinto 6df3dce95d Commented out the IB annotation until we get it sorted out. 2020-12-07 19:51:00 -05:00
John Colvin 9787f2ed8e Merged in spartan_tas.sim_icebergs (pull request #415)
integrate new IcebergInput logic into sim runs

Approved-by: Pedro Pinto
2020-12-08 00:37:00 +00:00
John Colvin 654f79b42d integrate new IcebergInput logic into sim runs 2020-12-07 17:55:26 -06:00
Taha Afzal 1840120af8 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-07 14:31:30 -05:00
Taha Afzal b90ac3d629 Adding jupyter notebooks for ES sniper analysis 2020-12-07 14:31:21 -05:00
Pedro Pinto e846420f9d Fixed bug in valuation 2020-12-07 14:29:49 -05:00
John Colvin 87a7fca75c overload compute_synthetic_book with standard Book type params 2020-12-07 11:22:05 -06:00
Pedro Pinto a9c07ec770 Merged 2020-12-07 11:43:52 -05:00
Pedro Pinto fc2bd8230a Merge branch 'spartan_tas' into sim2 2020-12-07 11:42:38 -05:00
Pedro Pinto 36c2b7b952 Added skelleton for min_cumm_qty and min_cumm_price params. 2020-12-07 11:39:58 -05:00
John Colvin fb3f843309 (vscode) setting: don't configure cmake on open 2020-12-06 20:24:56 -06:00
John Colvin 12eef87fb0 fix typos to remove clang build warnings 2020-12-06 20:24:56 -06:00
Taha Afzal 4c066859c4 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-12-06 20:31:01 -05:00
Taha Afzal b4716db99d Adding synthetic test runner to jason 2020-12-06 20:30:56 -05:00
John Colvin 07f13de58e Merge remote-tracking branch 'origin/sim2' into spartan_tas 2020-12-06 18:09:05 -06:00
Pedro Pinto 92bdb06ceb Integrated commission model.. 2020-12-06 12:41:07 -05:00
John Colvin 256b1aeb59 implement MergedMatcher::clear 2020-12-06 11:30:23 -06:00
John Colvin 9b20c2a230 remove CheckedMatcher struct, replace usage with matcher (was only using the matcher member anyways) 2020-12-06 11:30:23 -06:00
John Colvin 78c3617749 add missing comma to settings.json 2020-12-06 11:30:23 -06:00
John Colvin 9a041af544 MergedMatcher uses new '_asset_matcher' method to remove redundant code 2020-12-06 11:28:35 -06:00
Pedro Pinto 8687de6fa2 Added better logging of param values. 2020-12-06 11:45:59 -05:00
Pedro Pinto c7a4bb461a Sim2 working. 2020-12-05 21:54:34 -05:00
Pedro Pinto c96f142709 Towards simple sim. 2020-12-04 20:57:54 -05:00
John Colvin 6367375ac6 add clear, reset methods to Direct/MergedMatcher (for state injections during sim runs) 2020-12-03 23:51:25 -06:00
John Colvin 0530e50a04 fix documentation of iceberg_helper::add_iceberg_annotation 2020-12-03 18:29:21 -06:00
John Colvin afd05f3c7c add missing comma to generated books csv 2020-12-03 17:11:34 -06:00
John Colvin fff7faab90 added some diagnostic spartan cmds to track down sim_books mismatches 2020-12-03 17:11:34 -06:00
John Colvin e4c36c8470 improve iceberg deduction 2020-12-03 17:11:34 -06:00
Pedro Pinto 11527282c8 Added some matcher validatio helpers. 2020-12-03 08:39:40 -05:00
John Colvin 085764b9a4 add src/.clang-format to .gitignore 2020-12-01 13:44:44 -06:00
Pedro Pinto 96e3c3b9ac Added updated_price only change to possible order changes.
This is needed to facilitate iceberg management.
2020-12-01 13:43:41 -06:00
Pedro Pinto 2c9893c524 Accelerated CSV generation. 2020-12-01 13:42:47 -06:00
John Colvin cbf444d5ed added IcebergStateMapper to determine exact sequence of iceberg state per event id 2020-12-01 13:41:14 -06:00
John Colvin 25e52df136 add create_polygon_books.sql 2020-12-01 12:44:25 -06:00
John Colvin 85afd6966c add some docker scripts (start_docker.sh, docker_bash.sh) 2020-12-01 12:44:25 -06:00
John Colvin 724df36bdc refactor vector<tuple<price,qty>> to SmallBook (vector alias), and SmallBookLevel (actual struct instead of tuple) 2020-12-01 12:44:25 -06:00
John Colvin afb0cdfbaf added SyntheticBookRecorder and polygon_books spartan command 2020-12-01 12:44:22 -06:00
Pedro Pinto 2de4ec6ebe Sim2 and polyobserver agree. 2020-12-01 07:44:59 -05:00
John Colvin 70ca670955 overload 'Formatter::fmt_values' for any Iter type 2020-11-30 22:00:02 -06:00
John Colvin acea32f618 add 'analysis/data' to .gitignore (I symlink this to pcap/sqlite data for jupyter-notebooks) 2020-11-30 22:00:02 -06:00
John Colvin be11f93de7 add src/.clang-format to .gitignore 2020-11-30 22:00:02 -06:00
John Colvin 067ec9b2b9 extracted member functions from FifoImpliedSecurityMatcher into book_utils namespace 2020-11-30 11:33:11 -06:00
Pedro Pinto 398397ca7f Towards self-correcting simulator. 2020-11-29 17:05:45 -05:00
Pedro Pinto 3599fa2b0c Added reference code. 2020-11-21 18:24:17 -05:00
Pedro Pinto f650177758 Towards better pcap DB generation and use. 2020-11-21 18:23:43 -05:00
Pedro Pinto 56227b77d2 Updated .gitignore 2020-11-20 12:18:41 -05:00
Pedro Pinto 9deaf6bc6d More analysis tools 2020-11-20 12:16:50 -05:00
Pedro Pinto 0f4d5a7047 Updated jupyter notebooks 2020-11-19 08:08:02 -05:00
Pedro Pinto b82004cf26 Improved analysis. 2020-11-18 17:09:11 -05:00
Taha Afzal 59a0eba902 Fixing the aggressive order's qty adjustment for icebergs 2020-11-16 12:12:12 -05:00
Taha Afzal e979fc86b2 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-16 11:09:55 -05:00
Taha Afzal b28ba12146 Added some comments to the matcher test and traced back the failing test to crossing order (that bnecomes a resting order) bug 2020-11-16 11:09:48 -05:00
Pedro Pinto 4cfd4bec24 Fixed lost fills on aggressor 2020-11-15 15:06:32 -05:00
Pedro Pinto d9aa4eea38 Minor refactor 2020-11-14 17:52:15 -05:00
Pedro Pinto fefe716d2f Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-14 12:42:51 -05:00
Pedro Pinto c6c0dc21e2 Added better logging to simulator 2020-11-14 12:42:44 -05:00
Taha Afzal cd6bdb1576 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-11 10:22:11 -05:00
Taha Afzal 9266e919b6 Bridge is untested but completed 2020-11-11 10:21:58 -05:00
Pedro Pinto 116131f0a8 Cleaned up and sped up sim log. 2020-11-10 20:06:46 -05:00
Pedro Pinto 7fb644ee3e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-10 12:01:10 -05:00
Pedro Pinto 321550d418 More updates to sim db. 2020-11-10 11:59:59 -05:00
Taha Afzal 4234087c34 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-10 11:35:57 -05:00
Taha Afzal bdac6bc3fa Callbacks in the AlgoBridge are routed back 2020-11-10 11:35:45 -05:00
Pedro Pinto 524e83c595 Streamlined sim db schema for easier querying. 2020-11-10 10:49:14 -05:00
Pedro Pinto f9b2f413d7 Accoutend for algo transaction latency in simulation. 2020-11-10 10:48:50 -05:00
Pedro Pinto d2f21c4b36 Deterministic names for polygons. 2020-11-10 10:47:46 -05:00
Pedro Pinto 95d8d8a42d Better logging for sniper. 2020-11-10 10:47:34 -05:00
Pedro Pinto 63a2ba032d Cleaned up some queries in md.sql. 2020-11-10 10:46:52 -05:00
Taha Afzal e8ccd265ca More bridge work 2020-11-10 08:48:56 -05:00
Taha Afzal 2c2968fe1a Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-08 23:44:59 -05:00
Taha Afzal 2df07f446b Bridge filling in 2020-11-08 23:44:53 -05:00
Pedro Pinto a906eb951e Mapped order ids to be unique 2020-11-08 11:57:08 -05:00
John Colvin 50f3e39b2f Matcher asserts against duplicate/recycled keys 2020-11-06 19:52:30 -06:00
Pedro Pinto 7c730f7b96 Multiple changes. 2020-11-06 19:17:02 -05:00
Pedro Pinto 7bb19d446d Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-06 13:10:45 -05:00
Pedro Pinto 8887962d6f Towards a patient sniper 2020-11-06 13:10:41 -05:00
Taha Afzal 2f032def09 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-06 11:50:13 -05:00
Taha Afzal 426781a839 Security translation in the bridge 2020-11-06 11:50:01 -05:00
John Colvin 65b3addfdb FifoMergedSecurityMatcher passes order changes directly to FifoSecurityMatcher when implied_matching is off 2020-11-05 16:48:12 -06:00
Taha Afzal b104326036 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-05 16:31:28 -05:00
Taha Afzal 74267bbba9 Filling in the bridge 1 2020-11-05 16:31:22 -05:00
Pedro Pinto 5f454bcd6e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-05 15:52:11 -05:00
Pedro Pinto c300bdcac9 Fixed up md.sql. 2020-11-05 15:51:44 -05:00
John Colvin b85604097d fix matcher partial-fills bug (part 2, fill at actual order price if implied matching is off) 2020-11-05 11:57:58 -06:00
Taha Afzal 89d9585ad8 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-05 11:53:30 -05:00
Taha Afzal 8e992a6979 IAlgoServices adapter 2020-11-05 11:53:24 -05:00
Pedro Pinto 51a4aabc09 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-04 16:37:49 -05:00
Pedro Pinto b423872e66 More DB work. 2020-11-04 16:37:28 -05:00
John Colvin a5ef9fd3cb fix matcher partial-fills bug 2020-11-04 16:15:56 -05:00
Taha Afzal a48686ce11 Adding corid to logs 2020-11-04 10:55:31 -05:00
Pedro Pinto 440a68cb9b Added correlation id to IAlgoServices. 2020-11-04 08:51:35 -05:00
Pedro Pinto 480fd57ea4 Merged 2020-11-04 08:45:40 -05:00
Pedro Pinto f07e018fbd Many changes. 2020-11-04 08:42:43 -05:00
Taha Afzal 95a2093dc3 SniperPolygon was not getting the pid assigned 2020-11-03 17:34:35 -05:00
Taha Afzal e3ec53c3f3 better logs 2020-11-03 11:16:30 -05:00
Taha Afzal 6d679f302b Adding cancel in no side affect orders 2020-11-02 23:24:01 -05:00
Taha Afzal 85fa61768f Commenting out shooting orders till code review 2020-11-02 23:14:31 -05:00
Taha Afzal 447d1a3997 Bridge work start 2020-11-02 23:07:35 -05:00
Taha Afzal a5520204f5 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-01 23:13:28 -05:00
Taha Afzal 9b8ebe32d4 Sniper 1.0 completed 2020-11-01 23:13:22 -05:00
Taha Afzal 7914ed4147 Shooting real order 2020-11-01 10:19:04 -05:00
Pedro Pinto a851dc6bb5 Rigged sniper to terminate simulation early so that we iterate quicker 2020-11-01 09:47:06 -05:00
Pedro Pinto c9d9ab9a20 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-11-01 08:55:32 -05:00
Pedro Pinto 84e75c28e5 More tweaks to DB. 2020-11-01 08:55:21 -05:00
John Colvin 1e6829afc7 fix affect-free matching (actually add hypothetical fills to effects vector) 2020-10-31 12:47:01 -04:00
Pedro Pinto 1d23955868 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-30 18:42:30 -04:00
Pedro Pinto aebe59a69f Added early termination of simulation. 2020-10-30 18:41:53 -04:00
John Colvin 0b125e3299 fix ERROR logging macro in FifoMergedSecurityMatcher 2020-10-30 18:20:01 -04:00
John Colvin 46b4fab4ed FifoMergedSecurityMatcher affect-free matching impl (assumes no implied markets) 2020-10-30 18:18:10 -04:00
John Colvin 2d6ca5a347 FifoMergedSecurityMatcher should subtract fill qty from working before the post-fill order state is logged 2020-10-30 16:30:20 -04:00
Taha Afzal 145cf2b482 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-29 13:36:57 -04:00
Taha Afzal 0a94c729e5 -ve edge allowed, can also be modified on the fly 2020-10-29 13:36:47 -04:00
Pedro Pinto a31331be0c Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-29 12:26:12 -04:00
Pedro Pinto 67ab58a99b Added exporting of matcher/sim generated books. 2020-10-29 12:25:03 -04:00
Taha Afzal 3835824d36 Key type is a parameter in the UI 2020-10-29 12:22:02 -04:00
Taha Afzal 02f98accd3 Polygon files can have bts keys or exchange keys (optionally) 2020-10-29 11:19:08 -04:00
Taha Afzal d84119ca6a Merge 2020-10-28 23:32:56 -04:00
Taha Afzal c39fb79fda Fixed the algo string params (SniperAlgo uses it now) 2020-10-28 23:13:20 -04:00
Pedro Pinto d6a5a4023b Fixed sim input bootstraped orders priority 2020-10-28 17:39:21 -04:00
Taha Afzal 8b0a0269ec Better logging and some cleanup 2020-10-28 17:02:28 -04:00
Pedro Pinto 334493c1be Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-27 19:21:47 -04:00
Pedro Pinto 71bae99c38 Added more data to the polygon valuation. 2020-10-27 19:21:18 -04:00
John Colvin 3d1ab364dc change bts_assert to log error instead 2020-10-27 18:02:26 -04:00
John Colvin 46820eecff FifoSecurityMatcher::has_same_orders returns the error msg (shouldn't return an empty error msg on failure, as that indicates success) 2020-10-27 17:49:26 -04:00
John Colvin 4bc5f07815 add version header to .icebergs file 2020-10-27 17:46:15 -04:00
John Colvin c78731e033 IcebergFinder subtracts qty changes from estimated qty (the matcher should adjust the total qty incrementally) 2020-10-27 17:40:58 -04:00
John Colvin f063d7ecbd tone down console output in MatcherValidationObserver; change hardcoded GC to ES (temp measure until the cmd accepts symbol args) 2020-10-27 17:40:58 -04:00
John Colvin f67071708d fix iceberg handling in MatcherValidationObserver 2020-10-27 17:40:58 -04:00
John Colvin 09d7d996cd iceberg_helper::subtract_iceberg_fills protects against overfills 2020-10-27 17:40:58 -04:00
John Colvin a143d851f2 add != operators for IcebergQuantity and optional<IcebergQuantity> 2020-10-27 17:40:58 -04:00
John Colvin a25f089810 fix iceberg_file_cache (matcher validation observer saves ibs in file to speed up repeated runs on same pcap) 2020-10-27 17:40:58 -04:00
John Colvin 862d2a7ee8 remove unnecessary field '_side' from FifoSecurityMatcher::BookKeeper 2020-10-27 17:40:58 -04:00
Taha Afzal 408ae423c6 Modifications to the book affecting bit 2020-10-27 16:15:48 -04:00
Taha Afzal 0e1da96e52 Added test for sim order with no book effects 2020-10-27 14:38:03 -04:00
Taha Afzal d0aa686693 FifoMatcher can match without affecting the existing markets 2020-10-27 11:54:07 -04:00
Pedro Pinto 317da795ec Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-27 08:52:10 -04:00
Taha Afzal 07887e60c5 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-26 18:47:12 -04:00
Taha Afzal a2a7859a04 SniperAlgo 2020-10-26 18:47:04 -04:00
Pedro Pinto d69aee25f9 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-26 17:53:17 -04:00
John Colvin 87e855086d FifoSecurityMatcher recomputes book lazily to improve performance 2020-10-26 17:27:38 -04:00
Pedro Pinto e918521266 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-26 15:26:42 -04:00
Pedro Pinto 969a3fd843 Intermediate commit 2020-10-26 15:25:57 -04:00
John Colvin 4adfe5708a enable implied matching again (GatewayAgent uses MergedMatcher) 2020-10-26 14:59:24 -04:00
John Colvin d270f60c2c speed up FifoPriceLevelMatcher::populated() method (return as soon as 1 qty is detected) 2020-10-26 14:59:24 -04:00
Pedro Pinto 192f6ef390 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-26 13:38:17 -04:00
Pedro Pinto df552e27d6 More views in sim_db. 2020-10-26 13:37:51 -04:00
Pedro Pinto 4850d279f6 CMAke 2020-10-26 13:37:35 -04:00
Pedro Pinto 29896b5ca4 Better logging. 2020-10-26 13:37:27 -04:00
John Colvin 710e05b029 migrate recent iceberg improvements over to DirectMatcher, and disable implied matching (need to resolve slowness in the MergedMatcher) 2020-10-26 12:40:52 -04:00
Pedro Pinto f627bf9238 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-26 10:21:32 -04:00
Pedro Pinto 8a59948fe5 Made sniper check available depth before shooting, added a sniper mode
to just log.
2020-10-26 10:20:53 -04:00
Pedro Pinto 5de34a52bd Added some new DB functionality, added utilities to manipulate book. 2020-10-26 10:18:44 -04:00
John Colvin 511b9551e3 delete old test code, clean up logging/console output in FifoMergedSecurityMatcher 2020-10-23 18:20:02 -04:00
John Colvin 8ddaaac244 define mdp3quantity operators with macro 2020-10-23 17:26:43 -04:00
John Colvin ff0d0a2592 add implied_book method to Matcher, make book/implied_book methods const 2020-10-23 16:33:20 -04:00
John Colvin 919d5eb880 uncommented macro to enable implied matching in simulator (enables new iceberg code by side effect) 2020-10-23 16:32:21 -04:00
John Colvin 2e65f52802 Matcher gets iceberg qty directly from MDP3Order (since they are now generated w/ sim_input) 2020-10-23 16:12:19 -04:00
John Colvin 048f170727 fix build 2020-10-23 14:03:43 -04:00
John Colvin bef915fd56 better iceberg deduction; integrate deduced icebergs into matcher 2020-10-23 13:29:37 -04:00
John Colvin 4f493aaf29 add pragma once to security_comp.h 2020-10-23 13:28:26 -04:00
Pedro Pinto 6b91e28d40 added icebergs to simulator input. 2020-10-23 11:28:56 -04:00
Pedro Pinto 895e3eebdd Fixed clang build. 2020-10-23 08:29:57 -04:00
Pedro Pinto 2fed9da9fa Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-23 08:28:52 -04:00
Pedro Pinto f6641e2ed1 Added observer algo to help validate the simulator. 2020-10-23 08:28:29 -04:00
Pedro Pinto e5579871b5 Adjusted logging levels as per console/file discussion. 2020-10-23 08:28:08 -04:00
Pedro Pinto e7a68a2ab3 Added top of the book view. 2020-10-23 08:27:32 -04:00
Pedro Pinto 0a58d69083 Faster combination generation. 2020-10-22 11:27:45 -04:00
Pedro Pinto ed1915582c Added view to summarize opportunity. 2020-10-22 11:27:30 -04:00
Pedro Pinto 5ea147efec Trying to speed up polygon valuations. 2020-10-21 10:34:17 -04:00
Pedro Pinto f1c5ba93d3 Fixed bugs in handling of CME fixed sized strings. 2020-10-21 10:31:37 -04:00
Pedro Pinto e741b33810 Added command to list securities. 2020-10-21 10:30:24 -04:00
Pedro Pinto 044b331d27 Fixed build. 2020-10-19 10:18:13 -04:00
John Colvin 9f3124793a implied matching seems slow, added macro in GatewayAgent.cpp to toggle it on or off while i investigate 2020-10-19 00:17:02 -04:00
John Colvin f7c33b5eee tone down logging/console output in matcher 2020-10-19 00:16:12 -04:00
John Colvin d1fc809553 integrate implied matching into simulator 2020-10-18 23:06:25 -04:00
Pedro Pinto e305ad124e Toned down logging 2020-10-17 21:41:26 -04:00
Pedro Pinto f68458a0f8 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-17 21:34:44 -04:00
Pedro Pinto b33251fc64 Better opportunity static analysis. 2020-10-17 21:34:14 -04:00
John Colvin 695e484fd7 update externals (added ranges-v3 lib) 2020-10-17 20:28:42 -04:00
John Colvin 281c1d1919 add fifo implied matching facilities 2020-10-17 19:55:56 -04:00
John Colvin 62ad17011e IntPrice * operator for regular ints 2020-10-17 19:34:44 -04:00
Pedro Pinto 52420a1256 build. 2020-10-16 20:19:21 -04:00
Pedro Pinto 9a2ff85669 Logged missing CPP's rather than crashing. 2020-10-16 20:14:54 -04:00
Pedro Pinto 76e0bced60 More realistic limits for polygon search space. 2020-10-16 20:14:37 -04:00
Pedro Pinto e9cdb26d46 Better logging. 2020-10-16 20:13:39 -04:00
Pedro Pinto e780ba5867 Merged 2020-10-15 14:25:39 -04:00
Pedro Pinto e5d77593d1 Changed logging 2020-10-15 14:24:02 -04:00
Pedro Pinto 6580f3883b Added logging of cancel/replace 2020-10-15 14:18:57 -04:00
Pedro Pinto 5e825b70d2 Added logging of cancel/replace 2020-10-15 14:18:28 -04:00
Pedro Pinto 2e13820e28 Dropped polygon opportunities with quantity 0 2020-10-15 10:56:56 -04:00
Pedro Pinto 24c06c5492 Fixed query. 2020-10-15 09:57:28 -04:00
Pedro Pinto ad8ac601ce Added commonly needed indexes to md DB, fixed duration calculation in
polygon opportunity calculation.
2020-10-15 09:53:49 -04:00
Pedro Pinto fc21544cf2 Better polygon opportunity analysis. 2020-10-15 09:17:26 -04:00
Pete Fisher a66eae66bb fixing for python3 2020-10-14 21:56:49 -04:00
Pedro Pinto af6636b44b Added polygon opportunity analysis to SQL. 2020-10-14 21:17:36 -04:00
Pedro Pinto 7ab55a2fe6 Generating merged books. 2020-10-14 16:54:17 -04:00
Pedro Pinto 973cc1195a Added implied book merging. 2020-10-14 12:30:47 -04:00
Pedro Pinto ef849f04a4 Fixed reporting of event id in shout outcome in sniper. 2020-10-14 10:07:04 -04:00
Pedro Pinto f1b91625e2 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-14 10:05:21 -04:00
Pedro Pinto 1100d8e1cd Added event it so sniper shots. 2020-10-14 10:00:46 -04:00
Taha Afzal 18bcd7e911 fixing the merge 2 2020-10-13 14:10:03 -04:00
Taha Afzal 5a4e3f5acc Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-13 13:25:58 -04:00
Taha Afzal efacf2986f fixing merge conflict 2020-10-13 13:25:52 -04:00
Pedro Pinto 1f6255f751 Another broken build, I hope no one is watching 2020-10-13 13:16:01 -04:00
Taha Afzal 79d03c73d7 Added some more n_contracts, symbol, ticks to sniper output 2020-10-13 12:56:09 -04:00
Pedro Pinto 2905a80138 Massively improved memory usage for simulations. 2020-10-13 11:56:56 -04:00
Pedro Pinto 5cbab11310 Fixed the build, sorry. 2020-10-13 11:06:10 -04:00
Pedro Pinto 51edfb5d61 Improved performance, reduced memory usage in simulation. 2020-10-13 10:44:43 -04:00
Pedro Pinto 7324c160f8 Reduced logging. 2020-10-13 10:44:23 -04:00
Pedro Pinto cb6f67f689 Avoided copying events. 2020-10-13 08:52:37 -04:00
Pedro Pinto 6cfd1cd070 Added better logging of polygon opportunities. 2020-10-13 08:24:32 -04:00
Pedro Pinto d732b7d691 Added better dimenionsing of shot to Sniper. 2020-10-13 08:23:55 -04:00
Pedro Pinto 588319478e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-12 21:26:47 -04:00
Pedro Pinto 814b9f810b Added polygon opportunities logging to sql command. 2020-10-12 21:26:02 -04:00
John Colvin f41f2e5d55 add 'on_order_completed' and 'reset' method placeholders to FifoSecurityMatcher 2020-10-12 15:31:59 -05:00
John Colvin 4d592b1c3b fix FifoSecurityMatcher::book_level (skip empty levels) 2020-10-12 13:52:53 -05:00
Pedro Pinto 1a1de31457 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-12 10:15:12 -04:00
Pedro Pinto 38b800981b Tweaks to queries. 2020-10-12 10:14:36 -04:00
Pedro Pinto 89ef56f131 Naming polygons in the SQL DB. 2020-10-12 10:13:45 -04:00
Taha Afzal 2400f5b91c Function for John to be used for implied matching 2020-10-11 18:31:27 -04:00
Taha Afzal 85c3ba0fa3 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-11 10:34:53 -04:00
John Colvin c6822be685 add 'fill' method placeholder to FifoSecurityMatcher 2020-10-10 23:09:57 -04:00
Pedro Pinto cb81b0e53e Cleaned up DB. 2020-10-10 18:32:27 -04:00
Taha Afzal 180d776929 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-10 15:45:12 -04:00
Pedro Pinto 332f98b3a7 Fixed non deterministic order for events. 2020-10-10 12:44:23 -04:00
Taha Afzal 08a65a290d Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-10 11:59:02 -04:00
Pedro Pinto 8bb5301fbb Not sure how I messed this up. 2020-10-10 11:58:06 -04:00
Taha Afzal 51d402fbd5 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-10 10:29:11 -04:00
Taha Afzal 6e5f2f1a49 Added better logging in Matcher 2020-10-10 10:29:05 -04:00
Pedro Pinto 3a73b6cb9e Changed sniper, md 2020-10-10 10:15:09 -04:00
Pedro Pinto 64f35f869e Re-enabled sniper. 2020-10-09 14:50:04 -04:00
Pedro Pinto 67d9758ad2 Sped up matching. 2020-10-09 14:15:28 -04:00
Pedro Pinto bcf4a04409 Disabled sniper, added logging to report sim progress. 2020-10-09 11:43:03 -04:00
Pedro Pinto 3be5afc08b Fixed some sniper bugs. 2020-10-09 10:31:47 -04:00
Pedro Pinto 637a8f1efc Added progress logging to simulation. 2020-10-09 10:31:31 -04:00
Pedro Pinto 00f9c9ec2e Fixed utility. 2020-10-09 10:31:11 -04:00
Pedro Pinto 722750faeb Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-09 08:12:57 -04:00
Taha Afzal 74d10749b7 Bug where orders changing levels and getting completely filled were not marked as inactive 2020-10-08 23:38:05 -04:00
Pedro Pinto 9dd96b05e2 Better logging. 2020-10-08 17:10:25 -04:00
Taha Afzal e927b35586 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-08 14:31:26 -04:00
Taha Afzal e1fb9319a0 better error checking and validation in the matcher 2020-10-08 14:31:19 -04:00
Pedro Pinto 684b7d54b6 Fixed incorrect qty parameterization 2020-10-08 14:25:42 -04:00
Pedro Pinto 925997947f Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-08 14:09:10 -04:00
Pedro Pinto dcbd86c1f5 Updated cpp reference data, improved polygon discovery 2020-10-08 14:08:58 -04:00
Taha Afzal 2f45ee3fe3 validation of incoming OrderChange 2020-10-08 13:26:18 -04:00
Pedro Pinto 0d4888111d Merged 2020-10-08 11:50:19 -04:00
Pedro Pinto a062dbe321 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-08 11:48:12 -04:00
Pedro Pinto 6ab0824532 Added polygon descriptors 2020-10-08 11:23:21 -04:00
Taha Afzal 385de5108e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-08 11:08:05 -04:00
Taha Afzal c25310c491 assert for correct OrderUpdate state 2020-10-08 11:07:58 -04:00
Pedro Pinto 0fb6bc72a4 Merge remote-tracking branch 'refs/remotes/origin/spartan_tas' into spartan_tas 2020-10-08 10:43:39 -04:00
Pedro Pinto 88039a4c83 Refactored PandL facilties. 2020-10-08 10:43:24 -04:00
Taha Afzal fd1ac28302 clean up period changed 2020-10-08 09:25:38 -04:00
Pedro Pinto e8c6a2ad1c Re-enabled run_sim command. 2020-10-07 18:08:30 -04:00
Pedro Pinto 1ee21c8d3e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-07 18:07:08 -04:00
Pedro Pinto c5388b07f9 code complete for sim logging. 2020-10-07 18:06:46 -04:00
Taha Afzal a165d6d193 Moved MatcherOrder in common 2020-10-07 14:16:58 -04:00
Taha Afzal 77f02d81d5 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-07 12:46:34 -04:00
Taha Afzal fc8620939f speed up 2020-10-07 12:46:13 -04:00
Pedro Pinto d319c7ddb8 Fixed build. 2020-10-06 16:10:30 -04:00
Pedro Pinto 24df444584 Driving the simulator across days and parameter variations. 2020-10-06 16:08:33 -04:00
Pedro Pinto 6984676e7f Towards orchestration of simulator runs. 2020-10-06 10:56:40 -04:00
Pedro Pinto 6356cf68f8 Added a field to instrumentdefinition. 2020-10-05 13:13:53 -04:00
Pedro Pinto 8ef76590a1 Many changes related to sniper simulation. 2020-10-05 11:57:20 -04:00
Taha Afzal 724eea5403 Added cancel perf test 2020-10-03 22:18:31 -04:00
Pedro Pinto 96cf8dcfac Added better pnl 2020-10-02 11:27:11 -04:00
Pedro Pinto 5add27a107 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-02 11:12:09 -04:00
Pedro Pinto 2683bb6c34 Re-enabled P&L 2020-10-02 11:12:00 -04:00
Taha Afzal 8bdce09aec Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-02 11:01:56 -04:00
Taha Afzal a732e926a9 Speed improvements, plus missing sec in execution report filled 2020-10-02 11:01:49 -04:00
Pedro Pinto 2fdec04336 Fixed build. 2020-10-02 10:19:25 -04:00
Pedro Pinto 3199689772 Temporarily disabled display factor adjustment until we have secs in fills. 2020-10-02 10:15:47 -04:00
Pedro Pinto 69efd022bd Fixed P&L calculation for algos. 2020-10-02 10:14:31 -04:00
Pedro Pinto 1604beb3f8 More refactoring. More to come. 2020-10-02 07:25:34 -04:00
Pedro Pinto 0ad57ef290 Fixed build. 2020-10-02 07:08:47 -04:00
Pedro Pinto 376c250802 Refactored. 2020-10-02 07:06:32 -04:00
Pedro Pinto cf1191bf0a Refactoring 2020-10-02 06:46:42 -04:00
Pedro Pinto e1a8870dda Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-01 10:33:42 -04:00
Pedro Pinto 7991b8e8bd Improved output 2020-10-01 10:33:20 -04:00
Taha Afzal 198d52eca1 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-10-01 10:24:19 -04:00
Taha Afzal 707c8fbd41 Fixed the side in the matcher execution report 2020-10-01 10:24:13 -04:00
Pedro Pinto 299bf7b4da Sniper is sniping. We are going to be simulated millionaires. 2020-10-01 09:38:00 -04:00
Pedro Pinto 1fb1af7132 First run of the simulator. 2020-09-30 17:17:57 -04:00
Pedro Pinto ce2a6d3b2f Sped up sim runs by caching simulator inputs. 2020-09-30 14:41:22 -04:00
Pedro Pinto 271e14ae5b Cleaned up polygon generation. 2020-09-30 09:51:40 -04:00
Pedro Pinto 110af7795e Cleaned up simulator input generation. 2020-09-30 08:25:33 -04:00
Pedro Pinto 617b4e2bba Added polygons to SQL DB. 2020-09-29 14:35:06 -04:00
Pedro Pinto 5f9705cbdb Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-29 13:50:23 -04:00
Pedro Pinto 54333ccb7b Improved polygon detection speed and correctness. 2020-09-29 13:39:02 -04:00
Taha Afzal 5049212af5 FifoMatcher can optionally ignore internally matched orders 2020-09-29 12:53:21 -04:00
Taha Afzal a5a1f87528 Moved the matcher tests into its own file 2020-09-29 11:09:42 -04:00
Taha Afzal f83d57fc0c Spreader tests pass while sending orders to sim 2020-09-28 21:32:19 -04:00
Pedro Pinto e2f4fc83a2 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-28 15:03:12 -04:00
Pedro Pinto 2bb246262c Refactored to modularize pcap queries. Added pcap polygon generation cmd. 2020-09-28 15:02:12 -04:00
Taha Afzal ed3cc43e59 Fixed the first ack issue 2020-09-28 14:04:36 -04:00
Taha Afzal 4c505f58c5 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-27 22:27:25 -04:00
Taha Afzal 47ac6c5dd3 tests for the spreader bridge 2020-09-27 22:26:48 -04:00
Pedro Pinto e889d0835f Added views to md.sql, documented better. 2020-09-26 12:08:36 -04:00
Pedro Pinto 01ce2211f3 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-26 11:53:16 -04:00
Pedro Pinto ffc39be466 Added polygon generation. 2020-09-26 11:52:55 -04:00
Taha Afzal dcfada0b81 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-24 14:26:16 -04:00
Taha Afzal ee03de52b7 Events were not getting passed back to the spreader 2020-09-24 14:26:03 -04:00
Pedro Pinto 2fc3a797eb Fixed bug in import. 2020-09-24 12:06:32 -04:00
Pedro Pinto 419dc355e3 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-24 08:37:26 -04:00
Pedro Pinto ec994a93e7 Fixed bug in CSV generation. 2020-09-24 08:36:58 -04:00
Taha Afzal 679330ba53 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-24 00:21:53 -04:00
Taha Afzal 87d0f93043 spreader ready to go with sim 2020-09-24 00:21:43 -04:00
Pedro Pinto 7e85f390b3 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-23 18:02:52 -04:00
Pedro Pinto ef18b37fd3 Added additional security info to sqlite. 2020-09-23 18:02:24 -04:00
Taha Afzal ef016bfafc SpreaderChildOrderUpdate takes a side arg to work better with IAlternateOrderGateway 2020-09-23 17:48:50 -04:00
Taha Afzal 9824ef7686 Added order indirection interface 2020-09-23 12:37:27 -04:00
Taha Afzal 2f21e73d8d Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-22 11:24:01 -04:00
Taha Afzal 22f4a7a324 order bridge bw spark and spartan has one link remaining 2020-09-22 11:23:50 -04:00
Pedro Pinto 6bf4966fb3 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-22 11:17:08 -04:00
Pedro Pinto 0e552bbcad Improved order deduction. Improved iceberg deduction. 2020-09-22 11:15:08 -04:00
Taha Afzal 4a6b14caa4 Merging 2020-09-21 14:40:31 -04:00
Taha Afzal 519d08cb78 Interfacing sim with spreader 60-70% done 2020-09-21 14:31:32 -04:00
Pedro Pinto e89b4206f9 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-21 14:05:21 -04:00
Pedro Pinto 4adbe82e1e Simulator is code complete. 2020-09-21 11:24:21 -04:00
Pedro Pinto 18b7f71020 More simulator framework. 2020-09-21 09:27:13 -04:00
Taha Afzal 86e631ae3e Calling spreader's initialization functions from SimSpreader 2020-09-19 17:22:20 -04:00
Taha Afzal 87bc9b2d25 SimSpreader and some cleanup 2020-09-18 23:49:32 -04:00
Pedro Pinto c7b65ac062 Added simulator framework. 2020-09-18 14:22:14 -04:00
Taha Afzal cb07fc1cb7 Cleaning up FIFO 2020-09-17 11:37:18 -04:00
Taha Afzal 5f489a33f7 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-16 14:49:56 -04:00
Taha Afzal a22e3efb64 Filling in matcher 2020-09-16 14:49:51 -04:00
Pedro Pinto fc51a03a70 Fixed estimation of iceberg order to take into account fill status. 2020-09-14 17:16:13 -04:00
Pedro Pinto 090a9dfb17 Added iLink3 documentation. 2020-09-14 12:02:37 -04:00
Taha Afzal ad5000d835 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-14 10:11:21 -04:00
Taha Afzal abd1651034 Events causing IB issues added list of traced events 2020-09-14 10:11:15 -04:00
Pedro Pinto 8d94794cdb Added the hability to run the simulator across multiple channels. 2020-09-13 15:53:58 -04:00
Pedro Pinto ab6ffebe20 Simulator is code complete. 2020-09-11 18:59:00 -04:00
Pedro Pinto 0698aa90b3 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-11 08:19:17 -04:00
Pedro Pinto 00deda50ec Fixed fifo validation, more refactoring of sim 2020-09-11 08:18:59 -04:00
Taha Afzal c914d97376 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-10 12:46:37 -04:00
Taha Afzal b574de32ae facility for fifo to ignore events, plus log a mismatch istead of asserting 2020-09-10 12:46:31 -04:00
Pedro Pinto ab6be7624e Added allowance for self match prevention when deducing orders 2020-09-10 10:56:52 -04:00
Pedro Pinto 300ba5a16e Skipped bad events. 2020-09-10 08:53:47 -04:00
Taha Afzal 9da7784b1b Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-09 19:40:50 -04:00
Pedro Pinto 8b2046a4c4 Skiped first 40K events in fifo validation, for speed 2020-09-09 17:45:07 -04:00
Pedro Pinto a5b9e40b53 Skipped open when testing fifo 2020-09-09 17:40:57 -04:00
Pedro Pinto 6c6dd86c02 More refactoring of sim. 2020-09-09 16:42:55 -04:00
Taha Afzal 109a12412a Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-09 14:06:07 -04:00
Taha Afzal 10edd13593 Log adjustments again 2020-09-09 14:06:01 -04:00
Pedro Pinto d7014ce172 Better deduced order detection, refactored sim 2020-09-09 13:47:28 -04:00
Pete Fisher 27aa43f44d fixed time on ilink2 audit 2020-09-09 12:16:57 -04:00
Pedro Pinto 19e087aa69 Fixed time reporting in iLink3. 2020-09-09 10:58:34 -04:00
Taha Afzal 899218ccf6 Moving MatchingCommon to the new matching directory 2020-09-09 10:41:41 -04:00
Taha Afzal 5fbd5b8804 Fixing merge conflict 2020-09-09 10:35:14 -04:00
Taha Afzal 8a564c38e9 More selective logging to catch the offending orders 2020-09-09 10:13:04 -04:00
Pedro Pinto 5758b56296 Improved iceberg detection 2020-09-09 10:00:52 -04:00
Pedro Pinto da8c8c271a Merged 2020-09-08 11:59:38 -04:00
Pedro Pinto 26a0508e03 Simulator in progress. 2020-09-08 11:55:45 -04:00
Taha Afzal 80294f9f37 Fixing merge 2020-09-08 10:19:31 -04:00
Taha Afzal c408825a8d better logging to trace down specific orders 2020-09-08 10:09:29 -04:00
Pedro Pinto 5cdc4f5a66 Flushing out simulator. 2020-09-07 14:41:23 -04:00
Pedro Pinto d5bc1a0acb Tweaked test. 2020-09-07 14:41:08 -04:00
Pedro Pinto 0f8ae1e345 Refactored simulator names, structure. 2020-09-07 09:03:58 -04:00
Pedro Pinto 6bcd13f30c Added generation of sim input. 2020-09-04 14:14:38 -04:00
Pedro Pinto a330ecf24d Skipped icebergs in FIFO validation. 2020-09-04 10:34:19 -04:00
Pedro Pinto 8df3bf38cd Cleaned up sqlite file generation. 2020-09-04 08:32:00 -04:00
Pedro Pinto 9e1f72df94 Added a SQL command that generates a SQL DB from a pcap. 2020-09-03 21:01:49 -04:00
Pedro Pinto b615a6105a Added to md.sql documentation. 2020-09-03 11:50:30 -04:00
Pedro Pinto 5c9595f4a6 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-03 11:46:57 -04:00
Pedro Pinto efa8aa297d Working Sim. 2020-09-03 11:46:44 -04:00
Taha Afzal 47b45d2a53 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-09-03 11:39:20 -04:00
Taha Afzal cf3eae1311 added comments to the columns in the sql script 2020-09-03 11:39:01 -04:00
Pedro Pinto f197077e78 Ran clang-format on spartan. 2020-09-03 10:33:19 -04:00
Pedro Pinto 0240be755a Added icebergs 2020-09-02 15:58:09 -04:00
Pedro Pinto 0c69024f7a Added Icebergs to CVS output. 2020-09-02 15:30:40 -04:00
Pedro Pinto 15be25a382 Added helper in FIFO matcher. 2020-09-02 11:18:45 -04:00
Pedro Pinto 3047cc2570 Included priorIty In deduced order, why not. 2020-09-02 11:18:26 -04:00
Pedro Pinto 4369cb61fe Cleaned up debug output 2020-09-02 09:29:16 -04:00
Pedro Pinto 04c4674582 Improved diagnostics. 2020-09-02 09:26:44 -04:00
Pedro Pinto 504ef84da3 Better diagnostic 2020-09-01 17:27:26 -04:00
Pedro Pinto 8cc564da96 Merged 2020-09-01 17:13:47 -04:00
Pedro Pinto 2abc69fd7c Fixed a bug in deducing orders, improved output. 2020-09-01 17:06:44 -04:00
Taha Afzal 87d0498c23 Improved the on_same_orders return message 2020-09-01 16:34:32 -04:00
Taha Afzal ecb3893370 Fixing merge conflict 2020-09-01 14:21:49 -04:00
Taha Afzal f974d90eaa FifoSecurityMatcher::on_same_orders now returns an optional<string> 2020-09-01 13:40:27 -04:00
Pedro Pinto 6a4e06873b Added diagnostics, fixed order priority insertion 2020-09-01 11:02:17 -04:00
Taha Afzal 3b235efd3f Changing Info logging to Diag 2020-08-31 16:21:20 -04:00
Taha Afzal 2f8436e131 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-31 16:17:16 -04:00
Taha Afzal e801951820 More logging 2020-08-31 16:17:11 -04:00
Pedro Pinto 2b61e65bf5 Added seamless XZ decompression on any spartan cmd. 2020-08-31 10:45:31 -04:00
Pedro Pinto f5fe552cd9 Working on adding seamless decompression. 2020-08-31 08:00:41 -04:00
Taha Afzal 6b529d0f7e Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-29 23:54:58 -04:00
Taha Afzal 4c3ad827c5 fixed bug, more logs, ahdered to new IB in MDP3Quantity 2020-08-29 23:54:47 -04:00
Pedro Pinto 6b09e18948 Referenced iml. 2020-08-28 15:50:43 -04:00
Pedro Pinto 9103a00f20 cleaned up slightly 2020-08-28 13:46:04 -04:00
Pedro Pinto 7a7588f8d9 Changed the fifo matcher harness 2020-08-28 13:44:12 -04:00
Pedro Pinto 7ee0068ff0 Added inital harness to test fifo. 2020-08-28 12:01:06 -04:00
Pedro Pinto 9b586b2ae2 Better documentation. 2020-08-28 10:38:05 -04:00
Pedro Pinto 09f7879c83 Comment in SQL. 2020-08-28 10:35:32 -04:00
Pedro Pinto d80e27f989 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-27 12:04:17 -04:00
Pedro Pinto 45f9e53f10 Fixed deduced orders, iceber orders. 2020-08-27 12:03:26 -04:00
Taha Afzal e2d11cb59b Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-27 10:41:20 -04:00
Taha Afzal d0b923339d fixed cross IB test (bug was in the test) 2020-08-27 10:41:09 -04:00
Pedro Pinto 9deb6182d0 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-27 08:27:37 -04:00
Pedro Pinto 4c4e870c67 Merge branch 'master' into spartan_tas 2020-08-27 08:24:01 -04:00
Pedro Pinto 167c8c23a0 Fixed batching of orders under iLink3. 2020-08-27 08:19:47 -04:00
Pedro Pinto 3f3b481654 Merged 2020-08-26 11:21:40 -04:00
Pete Fisher 0fa870ea40 added MJF 2020-08-26 11:05:15 -04:00
Pedro Pinto 2b3b551898 Merged 2020-08-26 11:03:15 -04:00
Pedro Pinto ad4d97c17e Tweaked IB struct. 2020-08-26 08:29:09 -04:00
Taha Afzal c941105502 IB cross order 2020-08-25 19:24:16 -04:00
Taha Afzal 174743cdb6 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-25 13:44:48 -04:00
Taha Afzal a752ad0cbc fixed bug with iceberg filling 2020-08-25 13:44:43 -04:00
Pedro Pinto 477e33eb81 Merged 2020-08-25 13:39:56 -04:00
Pedro Pinto 052268f052 Better json printing, faster processing on sec status change, progress in iceberg detection. 2020-08-25 13:37:43 -04:00
Taha Afzal 27294f125d iceberg test 2020-08-25 11:39:19 -04:00
Pete Fisher d235f4be41 fixed jetfix.conf ports on relay 2020-08-25 10:03:09 -04:00
Pete Fisher e80c634bd1 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-25 09:01:28 -04:00
Pete Fisher 37f33778e1 fixed jetfix.conf 2020-08-25 09:01:13 -04:00
Taha Afzal c540fdd11f Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-24 23:17:14 -04:00
Taha Afzal e7f9e98f0a Resting IB matching engine completed 2020-08-24 23:17:05 -04:00
Taha Afzal 253586fc79 Iceberg reloading 2020-08-24 20:40:11 -04:00
Pedro Pinto ec43dbd82d Maybe fixed the self match prevention problem. 2020-08-24 17:02:58 -04:00
Pedro Pinto f07998d6a6 Fixed order rounding error in ilink3 2020-08-24 16:17:31 -04:00
Pedro Pinto 9d0c99a17b Richer console logging 2020-08-24 16:16:11 -04:00
Pedro Pinto 58992eb893 Changed logging subsystem from ilink3 to iLink3 2020-08-24 16:16:11 -04:00
Pete Fisher a471670a91 added audit log scripts to be run by the docker container 2020-08-24 16:15:27 -04:00
Pete Fisher 96e1d25ca4 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-24 15:22:54 -04:00
Pete Fisher d4bb88dbfe added jetfix going to cert relay 2020-08-24 15:21:45 -04:00
Taha Afzal bbc2277bae Order's exchange priority need not be kept around 2020-08-24 12:25:14 -04:00
Taha Afzal d54861a9d0 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-24 12:02:18 -04:00
Taha Afzal a5d98a32b6 Iceberg related changes 2020-08-24 12:01:59 -04:00
Pedro Pinto b3dc2cdcd4 Changed logging subsystem from ilink3 to iLink3 2020-08-24 11:06:44 -04:00
Pedro Pinto a2ea2239da Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-24 08:37:41 -04:00
Pedro Pinto 5e56a66171 Multiple improvements. 2020-08-24 08:37:08 -04:00
Taha Afzal fa0674a657 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-21 23:23:36 -04:00
Taha Afzal 2eb2b07f8f fixed bug with sweeps 2020-08-21 23:23:26 -04:00
Taha Afzal b7f15986ad tests for order remove/modify and its affects on the book 2020-08-21 18:49:00 -04:00
Pedro Pinto 3e0cdde714 Corrected how we handle security tradus status changes. 2020-08-21 17:49:12 -04:00
Pedro Pinto 3334f1b709 A few more tweaks. 2020-08-21 17:49:12 -04:00
Taha Afzal 29e080da71 remove tests 2020-08-21 16:18:24 -04:00
Taha Afzal 927cd60d41 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-21 12:15:56 -04:00
Pedro Pinto 7c5cb5b7f7 Updated csv generation to include implied matching status. 2020-08-21 12:13:23 -04:00
Taha Afzal 9f84f7215c Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-21 12:09:45 -04:00
Taha Afzal 14fd296aa2 some iceberg adjustments, and more tests 2020-08-21 12:09:32 -04:00
Pedro Pinto 470f94f6e1 Added support for implied matching status. 2020-08-21 11:48:33 -04:00
Pedro Pinto 9bfd33320e More changes to instrument definition. C++ continues to mistify. 2020-08-21 10:33:48 -04:00
Pedro Pinto f7a2693952 Cleaned up instrument definition. 2020-08-21 09:28:44 -04:00
Pedro Pinto d573447d64 Added method to visit security 2020-08-21 09:03:47 -04:00
Pedro Pinto ccd7d29501 Fixed some bugs in cvs export 2020-08-21 01:00:10 -04:00
Pedro Pinto 291699fb9b Added books to CSV output. 2020-08-21 00:22:36 -04:00
Pedro Pinto 056e0f8aa7 Removed debug break 2020-08-20 17:25:44 -04:00
Pedro Pinto 45ed583d46 Fixed a few bugs, made it possible to stream through a pcap once only 2020-08-20 17:13:52 -04:00
Pedro Pinto 54a2131b20 Fixed typo. 2020-08-20 12:01:51 -04:00
Taha Afzal a4bbb6c88b Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-20 10:59:02 -04:00
Taha Afzal e6c2ceb931 tests for single price level 2020-08-20 10:58:57 -04:00
Pedro Pinto c43ec4a56d Added script to easily compress pcaps. 2020-08-20 10:43:58 -04:00
Pedro Pinto b871cc4e09 Cleaned up code. 2020-08-20 09:25:38 -04:00
Pedro Pinto 6aec729b6a Added prettier logging when observing spartan pcaps 2020-08-19 21:16:54 -04:00
Pedro Pinto 025625e0b9 Simplified console logging 2020-08-19 21:15:40 -04:00
Pete Fisher 0963aee137 added audit log scripts to be run by the docker container 2020-08-19 17:49:47 -04:00
Pedro Pinto 5c5bc243d2 Added new spartan command to clean up pcaps to just what we need. 2020-08-19 16:29:49 -04:00
Taha Afzal 0d0af32b85 Merge branch 'spartan_tas' of bitbucket.org:bluetradesys/spark into spartan_tas 2020-08-19 14:30:17 -04:00
Taha Afzal 46c2d2e916 cleaning 2020-08-19 14:30:10 -04:00
Taha Afzal ff6d0f0e1b cleaning up, fixing the sorting of prices 2020-08-19 14:14:40 -04:00
Pedro Pinto 86ca092f18 Fixed bug that was preventing import of oil data. 2020-08-18 13:06:58 -04:00
Pedro Pinto ec3d642cee Better export to CSV. 2020-08-18 10:58:42 -04:00
Pedro Pinto 7489d70c95 Added some sql tools, added order deduction 2020-08-18 07:51:16 -04:00
Pedro Pinto 81bb5404cb Merged 2020-08-18 07:50:59 -04:00
Taha Afzal a0155beb83 Fifo Matching Engine 2020-08-18 00:02:10 -04:00
Pedro Pinto c2f8e92b10 Hopefully fixed the ilink3 filled qty reporting problem.
This was crashing the spreader.
2020-08-13 08:42:43 -04:00
Pedro Pinto 7ae0142dff Fixed reset of sequence numbers problem 2020-08-12 11:56:08 -04:00
Taha Afzal 780b74fc56 Basic scaffolding plus price level match 2020-08-11 20:09:09 -04:00
Pedro Pinto 78bc14348d Miscelaenous improvements. 2020-08-10 13:46:59 -04:00
Pedro Pinto 52bc0f1a17 Better spelling. 2020-08-09 17:24:55 -04:00
Pedro Pinto c52c24c3f2 Fixed some more issues. Everything looks good now. 2020-08-09 17:06:53 -04:00
Pedro Pinto 0d9277bf6a Added test file, discovered feeds automatically. 2020-08-08 16:32:54 -04:00
Pedro Pinto 761797dc24 Fixed a few more bugs. 2020-08-07 20:32:31 -04:00
Pedro Pinto 39a560c394 Fixed a couple more serious bugs. 2020-08-07 14:15:04 -04:00
Pedro Pinto b4f01da8d8 Added print. 2020-08-07 13:13:33 -04:00
Pedro Pinto f7ca1efdb8 Fixed a number of bugs. 2020-08-07 13:08:51 -04:00
Pedro Pinto 1b4ed339d6 More bugs, more fixes. 2020-08-06 12:20:00 -04:00
Pedro Pinto 5af89e0124 Fixed a few more bugs. 2020-08-06 12:11:58 -04:00
Pedro Pinto 1fddbf1cca More tests, more fixes. 2020-08-06 08:58:10 -04:00
Pedro Pinto 1cd1a23c80 Added a unit test and fixed some bugs. 2020-08-05 11:22:09 -04:00
Pedro Pinto b987ec6a8a Added a smoke test for MD. 2020-08-04 17:28:17 -04:00
Pedro Pinto f509026815 Code complete on MD. 2020-08-04 17:13:48 -04:00
Pedro Pinto 557b658146 Almost done. 2020-08-04 16:54:00 -04:00
Pedro Pinto e3c4960622 Fixed build. 2020-08-04 08:32:42 -04:00
Pedro Pinto 350b4307dc Refactor. 2020-08-03 20:59:54 -04:00
Pedro Pinto 762ca47a59 Refactored. 2020-08-03 20:47:25 -04:00
Pedro Pinto 79b83ba494 Refactored. 2020-08-03 20:47:04 -04:00
Pedro Pinto 51f5155a1a Removed obsolete code. 2020-08-03 20:42:53 -04:00
Pedro Pinto d0b3124813 Recovery complete. 2020-08-03 20:36:42 -04:00
Pedro Pinto 29128dd014 Almost code complete. 2020-08-03 18:15:46 -04:00
Pedro Pinto 9e8f5809c3 Starting work on integrating recovery with realtime processing. 2020-08-03 11:11:06 -04:00
Pedro Pinto 7e2001744c More refactoring. 2020-08-03 09:43:51 -04:00
Pedro Pinto f5b83efade Incremental Queue completed. 2020-08-02 16:22:57 -04:00
Pedro Pinto aedb9d2ae1 Refactored for consistency. 2020-08-02 16:10:54 -04:00
Pedro Pinto 5ccd28d84d Refactored. 2020-08-01 20:38:53 -04:00
Pedro Pinto 3320888fc8 Instrument defintion copy. 2020-07-30 17:16:35 -04:00
Pedro Pinto 456e9bf357 Finished real time feed processor. 2020-07-30 16:11:35 -04:00
Pedro Pinto 275a757eb7 Finished up InstrumentSnapshot. 2020-07-30 10:32:10 -04:00
Pedro Pinto d51d170891 Lots of progress on real time feed processing 2020-07-29 13:22:34 -04:00
Pedro Pinto 87d138740f More refactoring and tools. 2020-07-27 08:45:18 -04:00
Pedro Pinto 625f165a63 Life-time management bug, one & cost a whole day. 2020-07-24 18:13:56 -04:00
Pedro Pinto 8421ed0ae9 Small changes. 2020-07-24 18:13:39 -04:00
Pedro Pinto 2a03eb323d Initial tests run. 2020-07-21 12:08:27 -04:00
Pedro Pinto cac6a9cd53 Refactoring. 2020-07-20 09:38:22 -04:00
Pedro Pinto a148b8fdcb More recovery work. 2020-07-20 08:29:18 -04:00
Pedro Pinto d635e8a978 Getting close to recovery. 2020-07-17 20:16:57 -04:00
Pedro Pinto 7aadd38934 More refactoring. 2020-07-17 08:52:46 -04:00
Pedro Pinto b63b11982b Refactoring. 2020-07-15 12:24:01 -04:00
Pedro Pinto 88a4d2ed80 Crazy template stuff. 2020-07-12 16:40:08 -04:00
Pedro Pinto 26bdef7ddd Merged with master 2020-07-11 12:30:06 -04:00
Pedro Pinto db0ffba8ed Fixed windows build 2020-07-10 13:00:20 -04:00
Pedro Pinto a274a214b4 Merged with master 2020-07-10 11:31:47 -04:00
Pedro Pinto bbcfa3c75a merged with prod 2020-07-10 10:45:10 -04:00
Pedro Pinto 89229d65f1 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2020-07-10 10:43:34 -04:00
Pedro Pinto 0e75cde409 Fixed a bad asser in recovery, a few typos, haderned against bad securities. 2020-07-10 10:36:03 -04:00
Pedro Pinto 42fa6dfaff Fixed life cycle of exe reports and config during replay. 2020-07-09 16:06:39 -04:00
Pedro Pinto 400143c84d Protected against ticker subs for expired securities. 2020-07-09 14:45:51 -04:00
Pedro Pinto e915945880 Trying to replay fix logs. 2020-07-09 14:27:22 -04:00
Taha Afzal ca6673e98f Merge branch 'prod' 2020-07-09 13:09:57 -04:00
Taha Afzal 479f3dccff Adding OnSignal (this is a new algo which is hidden by default) 2020-07-09 13:07:28 -04:00
Pedro Pinto 9601ebab20 Adding replay of stored messages. 2020-07-09 10:16:31 -04:00
Taha Afzal c272d8a8c2 Pyramid Algo: Takes care of the rounding error when Top == sum (child orders) 2020-07-08 13:35:21 -04:00
Pedro Pinto b344ab3377 Fixed an issue with order recovery from Exec reports. 2020-07-08 12:07:48 -04:00
Pedro Pinto ae3080b031 Refactoring. 2020-07-08 10:10:14 -04:00
Pedro Pinto f0464331cb Added better handling of cancel rejects. 2020-07-08 09:52:18 -04:00
Pedro Pinto 0648b618bf Refactored. 2020-07-08 08:42:53 -04:00
Pedro Pinto 59282b8c70 Added one more test to manual order entry list. 2020-07-08 08:42:18 -04:00
Pedro Pinto 34a86009ce Doc and tool minor update. 2020-07-08 07:44:01 -04:00
Pedro Pinto 0ad9ae9001 Small tweak to logging tool. 2020-07-07 20:19:59 -04:00
Pedro Pinto a296e1e772 Fixed parsing of stop px in link3. 2020-07-07 20:19:41 -04:00
Pedro Pinto 7f53d8b161 Improved logging, fix iceberg order, removed duplicate logging. 2020-07-07 17:01:24 -04:00
John Colvin fbd8bbd4a8 algo abbreviation code uses string.Join instead of list_string (the latter method is redundant, should be removed) 2020-07-07 13:16:18 -05:00
John Colvin 3da52b350f fix pure crash (algo abbreviation code choked on names that end with a space) 2020-07-07 13:15:55 -05:00
Pedro Pinto 243d6827d4 Merge remote-tracking branch 'refs/remotes/origin/ilink3_final' into ilink3_final 2020-07-07 12:12:09 -04:00
Pedro Pinto 00221f9bd9 Fixed spread order entry. 2020-07-07 12:11:11 -04:00
Pedro Pinto a6171ae405 Fixed spread order entry. 2020-07-07 11:55:05 -04:00
Pedro Pinto be5d01a797 Fixed fills. 2020-07-07 06:47:58 -04:00
Pedro Pinto e5d9d324bf Order order entry manual test. 2020-07-06 18:22:39 -04:00
Pedro Pinto c34dee9d96 Taked order status from execution report, parse error message in il3 2020-07-06 18:21:44 -04:00
Pedro Pinto e5a98aab41 Merged with master 2020-07-06 12:49:24 -04:00
Pedro Pinto 10cd35372b Can enter, modify, cancel orders. 2020-07-06 11:38:17 -04:00
Pedro Pinto ad4515be39 Renamed NativeOrder to GLBXNativeOrder 2020-07-06 09:47:34 -04:00
Pedro Pinto ff4d87dd6b Fixed IL3 execution report parser to convert exchange prices. 2020-07-06 09:34:26 -04:00
Pedro Pinto 8ddde3f9da Part 2 of MBO service fix. 2020-07-06 09:34:09 -04:00
Pedro Pinto 51093dc3a5 Added simple tool to watch spark logs. 2020-07-06 09:33:35 -04:00
Pedro Pinto 5d5db9ad9f Fixed MBO parser to extract the right exchange key. 2020-07-06 09:33:06 -04:00
Pedro Pinto fca808fe0d Made ilink3 gw wait for start() before its starts. 2020-07-03 14:11:22 -04:00
Pedro Pinto 07d14f877b More nonsense 2020-07-02 20:28:49 -04:00
Pedro Pinto 5ea6dccdd4 Something here breaks 2020-07-02 19:04:49 -04:00
Pedro Pinto ac956a5c02 Renamed ExchangeOrderIDu64 to ExchangeOrderID64 2020-07-02 19:00:32 -04:00
Pedro Pinto 1fba09cf94 Refactor of ids. 2020-07-02 11:05:04 -04:00
Pedro Pinto 0baa6b875e Fixed merge error. 2020-07-02 09:09:20 -04:00
Pedro Pinto cdacc2d4d4 Merged 2020-07-02 07:26:43 -04:00
Pedro Pinto 1433541947 Automatically advanced our own seq number on connection failure.
It is fairly easy for our sequence number to be behind CME if we
crash. Since we can detect this issue (CME tells us about it) we can
try to fix it automatically by incrementing our own sequence
number. This should allow us to recover automatically in some
scenarios.
2020-07-02 06:57:01 -04:00
Pedro Pinto 1070ca7ace Ran clang-format. 2020-07-02 06:28:32 -04:00
Pedro Pinto 56fa27dd7e Handled non text timestamp in native order. 2020-07-02 06:23:07 -04:00
Pedro Pinto d87b522bc6 Added better logging when terminated by exchange. 2020-07-02 06:22:38 -04:00
Eric Harding 166cb03782 Provide account when parsing execution reports. 2020-07-01 14:40:10 -04:00
John Colvin 40bad84c48 algo studio includes algos with undefined children in the dropdown 2020-07-01 12:09:12 -05:00
Eric Harding c3786d9d64 ilink3: Provide SecurityOracle to execution report parser 2020-07-01 11:50:03 -04:00
Pedro Pinto 9080e3124b Filled in cust_order_handing_inst 2020-07-01 11:29:47 -04:00
Pedro Pinto d9c536124a Fixed logging of session seq numbers. 2020-07-01 11:29:30 -04:00
Pedro Pinto 7de6b2907e Filled in sendercompid in routing record.
iLink3 requires this.
2020-07-01 10:48:01 -04:00
Eric Harding 75f017e9f8 ilink3: Get PartyDetails from sender_cmp_id 2020-07-01 10:29:20 -04:00
Pedro Pinto 7757ab3ea0 Fixed a few bugs. 2020-06-30 19:35:53 -04:00
Pedro Pinto 3186dd383c We can connect now. 2020-06-30 19:03:35 -04:00
Pedro Pinto 45f751c9c6 Bad merge. 2020-06-30 19:03:35 -04:00
Pedro Pinto e4d3774980 Better logging. 2020-06-30 19:03:35 -04:00
Eric Harding eedb3ce05d Clear hmac for json logging 2020-06-30 17:11:01 -04:00
Eric Harding 6a7d38c0fd flip session bool 2020-06-30 16:10:26 -04:00
Eric Harding 7f9967834d add readme note 2020-06-30 15:34:03 -04:00
Eric Harding 31ccbfcd19 Switch to ilink3 logging group 2020-06-30 14:43:38 -04:00
Eric Harding c2abf90cc4 IL3MessageFramer owns outgoing messages so it needs to outlive ILinkGW 2020-06-30 14:36:02 -04:00
Eric Harding 8dc4735248 ilink3: set_state(Error) only after disconnect 2020-06-30 14:25:59 -04:00
Pedro Pinto d940d9f11d For now, caught serialization error in some ilink3 msgs. 2020-06-30 14:10:07 -04:00
Pedro Pinto 1e0c75c6c7 Added iLink3 subsystem for logging. 2020-06-30 14:09:55 -04:00
Eric Harding fbaa17bc40 Add some comments to marketdata.proto 2020-06-30 13:16:30 -04:00
Eric Harding 38e3cd6197 Update market data readme 2020-06-30 13:13:48 -04:00
Pedro Pinto 3bb9961af4 Refactor. 2020-06-30 11:35:40 -04:00
Pedro Pinto da8088fd8d Rebased 2020-06-30 11:27:56 -04:00
Eric Harding 748a65f671 Merge branch 'ilink3_gateway' of bitbucket.org:bluetradesys/spark into ilink3_gateway 2020-06-30 10:05:33 -04:00
Eric Harding 66d80136bd ilink3: Keep outgoing messages alive forever. 2020-06-30 10:04:42 -04:00
Eric Harding 10386311d4 Update market data readme 2020-06-29 12:25:30 -04:00
Eric Harding 629a7f8130 Remove unused class in MD 2020-06-29 12:25:14 -04:00
Pedro Pinto 81189bb2cc Forgot to add message logger. 2020-06-29 12:08:22 -04:00
Pedro Pinto e5681a50f2 Made session name come from date. 2020-06-29 10:59:15 -04:00
Pedro Pinto 69fe4569e3 Made FIX session name available as uint64_t as well as strings. 2020-06-29 10:57:40 -04:00
Pedro Pinto faedb0a49e Feed handler. 2020-06-29 07:34:51 -04:00
Pedro Pinto c7caf66f9c Changed the ILink3 log format to json. 2020-06-26 19:11:05 -04:00
Pedro Pinto 14504f4a94 Cleaned up comment. 2020-06-26 19:10:49 -04:00
Pedro Pinto 5b601a4016 Fixed encofing of clorid. 2020-06-26 19:10:23 -04:00
John Colvin e3207b921a truncate list of securities in transitive compare test (was timing out due to too many permutations) 2020-06-26 13:32:27 -05:00
Pedro Pinto d148255917 Refactored mdp3feedhandler. 2020-06-26 08:08:07 -04:00
Taha Afzal 98db8e61a5 Removing hardcoded ref's to Katallage 2020-06-25 17:05:10 -04:00
Pedro Pinto 45aa75e8bb Brought back the ilink3/ilink2 encoding abstraction. 2020-06-25 16:49:46 -04:00
Pedro Pinto b2471d45b2 Added tool 2020-06-25 16:49:10 -04:00
Pedro Pinto 11e2df8c76 Tweaked build tools. 2020-06-25 16:49:10 -04:00
Pedro Pinto cba6852655 Updated docker 2020-06-25 16:49:10 -04:00
Pedro Pinto 5eeaedde26 Added a few build tools. 2020-06-25 16:49:10 -04:00
Pedro Pinto b63052dbaa Updated ICE Onixs 2020-06-25 16:49:10 -04:00
Pedro Pinto 29f5bc798e Added +x 2020-06-25 16:49:10 -04:00
Pedro Pinto 04603acbb9 Added publishing of new routing info when orders are recorevered from disk 2020-06-25 16:49:10 -04:00
Pedro Pinto bc6890055e temp commit, fixing glbxnative order 2020-06-25 16:49:10 -04:00
Pedro Pinto ea94c09c78 Eric intermediate ilink3 fixes 2020-06-25 16:49:10 -04:00
Pedro Pinto 00b1d3c51c Feed handler 2020-06-25 06:02:17 -04:00
Eric Harding e3c3bc78fc Note what this address list is for 2020-06-24 20:55:20 -04:00
Eric Harding a11d390dcd ilink3 message logging 2020-06-24 20:52:21 -04:00
Eric Harding 7c74a961d4 Add canned cert sessions for ilink3 nrcert 2020-06-24 20:43:27 -04:00
Eric Harding 5db21ad2ca fix build, session and clordid changes 2020-06-24 19:32:12 -04:00
Pedro Pinto b68c963b5e c2 2020-06-24 19:16:59 -04:00
Pedro Pinto a43070f812 c1 2020-06-24 19:15:14 -04:00
Eric Harding f703dabdfe Raw msg should be 2 strings 2020-06-24 17:53:30 -04:00
Eric Harding 237d3eea4b encode_clordid needs security key 2020-06-24 17:29:06 -04:00
Taha Afzal e009316bfb Merge branch 'DJ_ICE' of bitbucket.org:bluetradesys/spark into DJ_ICE 2020-06-24 17:13:38 -04:00
Taha Afzal 5528efd2d2 Cleaning up 2020-06-24 17:13:31 -04:00
Eric Harding 818bdec130 Add NrCert keys 2020-06-24 15:07:02 -04:00
John Colvin 09f91735fe Security sort tests run with ice securities 2020-06-24 12:58:29 -05:00
John Colvin d9fc18547b SecurityHelper.Compare fallsback on 'ToString' then 'Id' comparisons to guarentee deterministic sort 2020-06-24 12:56:29 -05:00
Eric Harding d257cf2c77 Disable broken ilink3 tests for now 2020-06-24 13:28:33 -04:00
Eric Harding 079f46404f Add some testing notes 2020-06-24 10:57:15 -04:00
Pedro Pinto f6b5ab040c Refactor. 2020-06-24 08:25:56 -04:00
Pedro Pinto 86ddf3078d Refactor. 2020-06-24 07:32:59 -04:00
Pedro Pinto bc4fe19bdb Refactor. 2020-06-24 07:32:33 -04:00
Eric Harding edcc73e934 Remove old ILink3ExecutionGateway. Instead use GlbxIlink3ExecutionGateway 2020-06-23 22:41:33 -04:00
Taha Afzal 5905ca3e92 Merging frmo master 2020-06-23 13:51:14 -04:00
Pedro Pinto bb259b128a More tools 2020-06-23 13:43:05 -04:00
Pedro Pinto bc7ac8523b Added tool 2020-06-23 13:06:15 -04:00
Eric Harding 0c4c2b7231 cme autocert msgw_failover test script 2020-06-23 13:05:32 -04:00
Eric Harding 420351c093 Replay refactor #4 2020-06-23 12:01:52 -04:00
Eric Harding f69e6b89c5 Sequence number fixes 2020-06-22 22:23:13 -04:00
Eric Harding c3e22e4b23 Recovery revamp #3 2020-06-22 20:16:21 -04:00
John Colvin 32b7b7f40d quantity conversion for ladder right click order 2020-06-22 17:02:23 -05:00
Pedro Pinto 1d443531fd Merge branch 'master' into spartan_tas 2020-06-22 11:27:43 -04:00
Pedro Pinto 54e5a68730 Tweaked build tools. 2020-06-22 08:41:19 -04:00
Pedro Pinto 880c95d92b Tweaked build tools. 2020-06-20 17:17:22 -04:00
Pedro Pinto 40956c5335 More spartan tools. 2020-06-20 17:13:50 -04:00
Pedro Pinto 44aba08978 Tweaked build tools. 2020-06-20 17:13:29 -04:00
John Colvin e7da6dd79e remove unused 'save/remove_template_cmd' props from OrderPropertiesEditor 2020-06-19 16:42:38 -05:00
John Colvin 8bf78aa880 cleanup/normalize whitespace in OrderDataHelper.cs 2020-06-19 16:37:21 -05:00
John Colvin 1c44165181 remove unused methods/props in OrderDataHelper.cs 2020-06-19 16:35:15 -05:00
John Colvin 8165ec0e3d fix AlgoProvider.get_permitted_algos (seed intersection aggregate a full set instead of empty) 2020-06-19 16:14:58 -05:00
John Colvin 7d1ec5b82a Merge remote-tracking branch 'refs/remotes/origin/DJ_ICE' into DJ_ICE 2020-06-19 15:48:55 -05:00
John Colvin 02e7fb1ee0 iceberg 'show quantity' param uses display divisor 2020-06-19 15:45:17 -05:00
John Colvin c0ea6943e1 AlgoProvider ensures synthetic security algo's last child is a Spreader algo 2020-06-19 15:12:42 -05:00
John Colvin 4c914a2d48 Merge branch 'DJ_ICE_algo_config' into DJ_ICE 2020-06-19 10:59:10 -05:00
Taha Afzal 0ee86f2dd4 CPP override fix 2020-06-19 11:58:58 -04:00
Taha Afzal 00bf3c7f47 Fixing the PNL timestamp 2020-06-19 11:10:23 -04:00
Taha Afzal b61e18d10e CPP logic 2020-06-19 00:44:13 -04:00
John Colvin 90b2607f86 pnl window symbol filter items are sorted 2020-06-18 13:06:41 -05:00
John Colvin e452697088 remove struct contraint on TKey in KeyedMultiSelector, and TableUpdateItemsFilter 2020-06-18 12:50:23 -05:00
John Colvin 1988443497 fix pnl symbol filter (was checking the security.Symbol instead of the 'pnl_symbol') 2020-06-18 12:40:07 -05:00
John Colvin 3f33627f00 add pnl_cpp_tuple extension method bones (taha will implement) 2020-06-18 12:14:44 -05:00
John Colvin 0610612ae6 make PNLData.with a member method instead of extension so it isn't
passed by value (it's a large struct)
2020-06-18 11:35:00 -05:00
John Colvin efcf78bb95 pnl window restores fill/market price decimal format when workspace loaded 2020-06-18 11:28:17 -05:00
John Colvin 03678e79a5 PNLSettings.cs line endings (need to figure out why they keep changing) 2020-06-18 11:00:32 -05:00
Taha Afzal c15a364496 Merge branch 'DJ_ICE_pnl_decimals' into DJ_ICE 2020-06-17 23:50:17 -04:00
Taha Afzal d8ec713dc5 Spreads in PNL show under a different symbol 2020-06-17 23:22:33 -04:00
Taha Afzal daaa7311a0 Merge branch 'DJ_ICE_pnl_symbol' into DJ_ICE_cpp_mult 2020-06-17 22:58:10 -04:00
Taha Afzal f893af1930 Strip Legs are not counted toward futures 2020-06-17 22:57:08 -04:00
Taha Afzal 6ec413c516 Dictinction bw spread legs and strip legs 2020-06-17 15:50:06 -04:00
John Colvin a2a0d88a81 pnl window disposes filters of type IDisposable 2020-06-17 12:39:59 -05:00
John Colvin 7a4dca9589 PNLWindow uses special pnl_symbol (taha will implement pnl_symbol method later, returns regular symbol in meantime) 2020-06-17 12:30:01 -05:00
John Colvin b21cd12cea copy AppendTable extension from another branch 2020-06-17 12:24:58 -05:00
John Colvin ec0b726751 ladder mid tick rounds down for negative numbers (still rounds up for positive) 2020-06-16 16:40:28 -05:00
Pedro Pinto 9ec1c8fdae Merge branch 'master' into spartan_tas 2020-06-16 17:05:11 -04:00
John Colvin a9f2b4ad9a PNL window - setting for market/fill price column decimal places 2020-06-16 15:32:51 -05:00
Taha Afzal 9cb3a21e5a position service exposes both cpp and overridden cpp 2020-06-15 23:05:53 -04:00
Eric Harding 3231ffb343 Meaningless autocert code 2020-06-15 22:48:28 -04:00
Eric Harding 8d7f1738cf update cert secure logon 2020-06-15 22:47:30 -04:00
John Colvin 60d4dd87fd rename ISecurityAlgoProvider.cs -> IAlgoProvider.cs 2020-06-15 17:01:02 -05:00
John Colvin 3a7eeda70e AlgoProvider.subscribe_algos always fires at least once (doesn't depend on studio algos being present) 2020-06-15 17:00:13 -05:00
John Colvin 712146e028 Merge branch 'algo-type-config' into DJ_ICE_algo_config 2020-06-15 16:57:07 -05:00
Eric Harding 9101214e66 Add message logger and revamp replay sequence handling 2020-06-15 14:51:41 -04:00
Taha Afzal f381d536d6 Merge branch 'DJ_ICE' into DJ_ICE_cpp_mult 2020-06-15 09:53:32 -04:00
Pedro Pinto d8d5f3b93c Merge branch 'DJ_ICE' of bitbucket.org:bluetradesys/spark into DJ_ICE 2020-06-15 09:29:08 -04:00
Pedro Pinto 1d4dc47a62 Added missing update to session/high low. 2020-06-15 09:28:23 -04:00
Taha Afzal 482c300b72 Merge branch 'DJ_ICE_space_bar_recenter' into DJ_ICE 2020-06-14 21:08:51 -04:00
Pedro Pinto 59774ccbb5 Updated docker 2020-06-14 15:27:18 -04:00
Pedro Pinto fcb6c9b8d9 Added a few build tools. 2020-06-14 15:27:01 -04:00
Pedro Pinto 69ad995ba9 Updated docker 2020-06-14 15:23:18 -04:00
Pedro Pinto 0b26ec1132 Added a few build tools. 2020-06-14 15:21:55 -04:00
John Colvin 3de494c80f recenter all ladders on spacebar (don't require shift) 2020-06-12 17:05:53 -05:00
Eric Harding c6b2e2f21e OMF setting to true, always 2020-06-12 17:49:37 -04:00
Eric Harding 2eac97c1a9 meaningless cert change 2020-06-12 15:18:20 -04:00
Eric Harding b4b0e10f29 Fix IOC=FAK order type (not FOK) 2020-06-12 15:17:38 -04:00
John Colvin 7deb25dd1c fix ladder recenter on spacebar 2020-06-12 13:16:57 -05:00
Pedro Pinto 7a29ae1a83 Merge branch 'DJ_ICE' of bitbucket.org:bluetradesys/spark into DJ_ICE 2020-06-12 08:44:36 -04:00
Pedro Pinto 6da893128c Cleaned up logging. 2020-06-12 08:44:20 -04:00
Pedro Pinto 2cb458af2d Added OnBehalfofcompid tag to ICE as per cert. 2020-06-12 08:42:40 -04:00
Taha Afzal 04db38d627 Merge branch 'DJ_ICE_release_candidates' into DJ_ICE 2020-06-11 21:22:18 -04:00
John Colvin a144b03361 ladder recenter on spacebar (across thread barrier) 2020-06-11 18:28:37 -05:00
John Colvin 9c89a9a47e TabDocument forwards key press events to IShellWindows 2020-06-11 18:24:26 -05:00
John Colvin 007af71bb2 fix ladder center-on-settle behavior once and for all 2020-06-11 17:09:05 -05:00
John Colvin 7cfe8f4214 add override cpp context menu item in pnl window 2020-06-11 16:33:28 -05:00
John Colvin 24f8e66953 add IPositionModel (has function to override cpp) 2020-06-11 16:30:35 -05:00
John Colvin 90fc6d901f add PropertyEditor control/dialog 2020-06-11 16:29:45 -05:00
Eric Harding 38d9db4a90 Session and sequence number fixes 2020-06-11 11:36:37 -04:00
Taha Afzal a216d1cc81 Fixing sell order check for distance from settlement 2020-06-11 09:19:03 -04:00
Pedro Pinto f8395c11b5 Fixed application, vendor tags for DJ. 2020-06-11 08:26:26 -04:00
John Colvin 2b0e46ed38 fix ladder center around settle behavior 2020-06-11 00:36:11 -05:00
John Colvin 5f3b243265 'max settlement cross ticks limit' ladder setting 2020-06-10 18:16:52 -05:00
John Colvin c9ce2d18bf simplify 'Safety Checks' content alignment in ladder settings dialog 2020-06-10 17:33:13 -05:00
John Colvin 7b563ba66c ladder centers around settlement price if no bid/ask market 2020-06-10 13:17:01 -05:00
Eric Harding 6a679ff78c Fix for cancel/replace 2020-06-10 14:13:28 -04:00
Taha Afzal 3e1be70923 Fix for HHD Balmo spreads 2020-06-10 13:57:19 -04:00
John Colvin aadd7df6c6 quantity divisor is 1 for 'ICE Lots' secs 2020-06-09 22:49:57 -05:00
Eric Harding aba3f21020 stop order does not carry price 2020-06-09 19:18:36 -04:00
John Colvin 8206132a37 quantity conversion in pnl for dj 2020-06-09 17:27:29 -05:00
John Colvin f8b3fd2e14 QuantityConversionData.to/from_display extensions use 'safe_divide' 2020-06-09 17:10:21 -05:00
Eric Harding fede19fd11 stop-limit success 2020-06-09 16:30:00 -04:00
John Colvin 8b17ee72ff quantity conversion in ladder when last size is transposed over volume column 2020-06-09 10:50:06 -05:00
Pedro Pinto 0508858859 Better parser 2020-06-09 10:04:15 -04:00
Eric Harding 3fa8dbf112 Cannot send price with market order 2020-06-08 23:09:10 -04:00
Eric Harding 77ae4703b3 Fix clOrdID and custOrdCapacity 2020-06-08 22:58:53 -04:00
John Colvin 31ed473999 quantity conversion in time and sales for dj 2020-06-08 17:25:13 -05:00
John Colvin 673805a7f4 quantity conversion in fills for dj 2020-06-08 17:10:39 -05:00
John Colvin 91422449e9 quantity conversion in manual fills for dj 2020-06-08 17:02:55 -05:00
John Colvin 438089a1cd quantity conversion in mview for dj 2020-06-08 16:36:57 -05:00
John Colvin 6a186d1d7e MarketViewRow - remove unreferenced fields 2020-06-08 16:33:55 -05:00
John Colvin 9d831a2569 fix line endings in MarketViewVM.cs 2020-06-08 16:33:55 -05:00
John Colvin d47cf1a54e (Dynamic)DoubleDivisorConverter uses safe_divide extension 2020-06-08 16:33:55 -05:00
John Colvin 8c9f669e72 refactor IsRealNonZero to is_real_positive (orig name was a typo), add a few more similar extensions to MathUtils 2020-06-08 16:33:55 -05:00
John Colvin f5bda11797 quantity conversion in orderbook for dj 2020-06-08 12:19:43 -05:00
John Colvin 1841a75fec quantity conversion in ladder/ticket for dj 2020-06-08 12:19:43 -05:00
John Colvin 34cdaeec93 don't use Disposable.replace bc it creates the next disposable before disposing the previous one 2020-06-07 16:01:27 -05:00
Taha Afzal 3230fb9e48 Regular TAS contract's formatting did not have the word TAS in it 2020-06-05 16:42:05 -04:00
Taha Afzal 888b4e22c0 Ignoring strips with > 512 components 2020-06-05 14:11:34 -04:00
Taha Afzal 534ce5a8ec strips are XL too 2020-06-05 13:12:57 -04:00
Taha Afzal c2b9ac57dc Fixing build 2020-06-05 11:55:54 -04:00
Taha Afzal 2783361325 Merge branch 'master' into DJ_ICE 2020-06-05 10:50:42 -04:00
Taha Afzal 46d35131d7 Overridable cpps 2020-06-05 10:01:18 -04:00
Pedro Pinto 3b95154c04 Updated ICE Onixs 2020-06-05 09:11:03 -04:00
Pedro Pinto e840b9617f Tweaked MD to Json parsing. 2020-06-05 08:22:24 -04:00
Pedro Pinto 19ee603413 Merged from master 2020-06-04 13:48:13 -04:00
Pedro Pinto 1a6b918853 Updated docker 2020-06-04 13:43:25 -04:00
Pedro Pinto bc22605a25 Added +x 2020-06-04 13:43:00 -04:00
Pedro Pinto f3d28add1c Added publishing of new routing info when orders are recorevered from disk 2020-06-04 13:41:34 -04:00
Eric Harding a28bfa1175 execution report handling tweaks 2020-06-04 10:05:44 -04:00
Eric Harding 4e4a48283d bool parse_report(string&, SecurityOracle&, ExecutionReport*); 2020-06-03 13:09:56 -04:00
Taha Afzal 63d260a6f8 Security formatting for ICE 2020-06-03 09:42:44 -04:00
Pedro Pinto 7a761d00ce Added security oracle to SessionStore so we can resolve exe reports. 2020-06-03 08:51:31 -04:00
Pedro Pinto 968be6a99a Added storage for sessions. Still missing parsing of exec reports. 2020-06-02 17:13:53 -04:00
Taha Afzal 9b4a63b4a8 Changes to make HNG/HIS/HEN/HHD to work 2020-06-02 11:15:47 -04:00
Pedro Pinto 03404eb3f1 Made some progress in GLBXiLink3ExecutionGateway 2020-06-02 09:16:02 -04:00
Pedro Pinto ff1a970982 Fixed build some more 2020-05-28 14:29:45 -04:00
Pedro Pinto ed890b4d84 Fixed broken tests for subscribe_exe_report change 2020-05-28 13:50:04 -04:00
Pedro Pinto e87003cc41 Merged with master 2020-05-28 12:21:51 -04:00
Eric Harding bc06037843 Fix the build 2020-05-28 12:20:30 -04:00
Pedro Pinto a502c365e5 Build tweaks 2020-05-28 12:15:16 -04:00
Pedro Pinto c4c7cebfc5 Updated externals 2020-05-28 12:12:46 -04:00
Pedro Pinto f18bcd2995 Build tweaks 2020-05-28 12:12:46 -04:00
Pedro Pinto a6a1b6ac53 Fixed clang build. 2020-05-28 12:12:46 -04:00
Pedro Pinto fdacd8b543 Added -f when removing simlinks in build setup. 2020-05-28 12:02:46 -04:00
John Colvin 3d1de9a0c7 nuget_restore.cmd uses externals package source (builds offline) 2020-05-28 12:02:31 -04:00
John Colvin b2b3fa5949 update jenkinsbuild.cmd to use externals nuget source (for windows) 2020-05-28 12:02:17 -04:00
Pedro Pinto 86ecf69820 Updated external subrepos 2020-05-28 11:53:51 -04:00
Eric Harding 8c3da4e43c Re-arrange some methods in ILinkGW.h 2020-05-27 16:51:36 -04:00
Eric Harding 06b955dceb Exchange seq number fix 2020-05-27 11:49:08 -04:00
Eric Harding e75d15146c cme cert test update 2020-05-26 23:55:27 -04:00
Eric Harding cb07384c9f Fix problem with party details 2020-05-26 23:55:13 -04:00
Eric Harding fc9e502539 cert refactor 2020-05-26 12:40:16 -04:00
Eric Harding fcbf3388c0 update ilinkbinaryxml templates 2020-05-26 12:40:04 -04:00
Eric Harding 899bea940f improve ilinkgw logging 2020-05-26 12:39:55 -04:00
Eric Harding 14b7509607 ensure local launch timezone 2020-05-26 12:39:41 -04:00
Pedro Pinto 8f537a8fda Merged in build_improvements (pull request #414)
Build improvements
2020-05-26 16:32:43 +00:00
Pedro Pinto 01b9ff6b47 Dropped celoxica 2020-05-26 12:28:35 -04:00
Pedro Pinto 2609663d3e Updated setup_builds to work even if its run outside the tree. 2020-05-26 12:06:08 -04:00
Eric Harding 25668e8df0 dont' build web client on wsl2 2020-05-26 11:54:19 -04:00
Pedro Pinto fd89241611 Updated externals pointer 2020-05-26 11:49:29 -04:00
John Colvin a69118c5d3 fix line endings in release_notes 2020-05-22 23:42:27 -05:00
John Colvin 5accd0e2b4 Merge branch 'master' into prod 2020-05-22 19:14:16 -05:00
John Colvin df5ad61cd2 release notes for synthetic gui integer tick sizes 2020-05-22 19:12:29 -05:00
John Colvin 4a7674eb29 synthetic gui supports integer tick sizes 2020-05-22 18:15:53 -05:00
Eric Harding 5a458287f4 update license search info in disable_onixs.py 2020-05-22 15:18:46 -04:00
John Colvin 5921f9f6b5 Merge branch 'master' into prod 2020-05-22 12:34:18 -05:00
John Colvin 4c73a63ae8 release notes for bug fix (unsorted custom state grid params in orderbook) 2020-05-22 12:30:53 -05:00
John Colvin 42b1c921a8 OrderBook custom state grid params are sorted alphabetically (again) 2020-05-22 12:24:42 -05:00
Pedro Pinto fab3334b1e Updated release notes 2020-05-22 11:23:03 -04:00
Pedro Pinto 7239dd3ade Merge branch 'master' into prod 2020-05-22 11:20:17 -04:00
John Colvin dd4c8eb649 Merged csharp-api-examples-sln into master 2020-05-22 10:19:13 -05:00
John Colvin 76a29bdc8a client ui supports all integer tick sizes (not just 1) 2020-05-21 15:26:50 -05:00
John Colvin 06d708f3ea new csharp api examples 2020-05-21 15:17:32 -05:00
John Colvin e2f70cbc19 minor config tweaks needed after upgrading VisualStudio 2020-05-21 13:04:00 -05:00
Pedro Pinto 9d54e47a03 Update CMakeDeps 2020-05-19 17:00:24 -04:00
Eric Harding 5345ba8ff8 securities for sending orders ilink3 test 2020-05-19 15:58:56 -05:00
John Colvin faccdf581e Merged in limit-algo-clean-history (pull request #413)
Limit algo clean history
2020-05-19 13:53:07 +00:00
Pedro Pinto 515ed5aabd Merged with master 2020-05-19 07:07:13 -04:00
John Colvin 1a64714a54 always log errors observed in LadderGridHost._volume_from_row (not just when it fails after max_num_tries) 2020-05-18 17:03:39 -05:00
John Colvin 3ba6792a85 wrap LadderGridHost._volume_from_row in try/catch (addresses Pure client crash) 2020-05-18 16:46:23 -05:00
Pedro Pinto c32a7f1d62 Made native orders calculate route when recovered from disk.
This is in response to the Pure debacle of May 17th. CME changed the
MSGW used for certain products. As we only route orders once, when
they are created, any orders that already existed never transitioned
to the new MSGW. This made it so that users could no longer control
these orders. With this change we recalculate routes when the orders
are first loaded from disk. Assuming we have up to date securities,
something that sometimes does not happen unfortunately, this should
result in the order being automatically relocated to its new MSGW. As
a bonus we also get the hability to change MSGW configuration even if
there are working for that MSGW.
2020-05-18 08:59:42 -04:00
Pedro Pinto 12e068a3d1 Refactor of Spartan 2020-05-17 11:16:28 -04:00
John Colvin 10e75f30e6 fix algo params grid enum template for GenericOrderVMs 2020-05-15 13:16:25 -05:00
John Colvin 20eac19c4f GenericOrderVM - normalize white space 2020-05-15 13:16:25 -05:00
John Colvin 8c0765a2c7 fix build 2020-05-15 10:34:59 -05:00
Pedro Pinto 8268599893 TAS does not support GTC orders. 2020-05-15 09:50:38 -04:00
Taha Afzal 7a1f88e813 Merge branch 'limit-algo-clean-history' of bitbucket.org:bluetradesys/spark into limit-algo-clean-history 2020-05-14 22:01:32 -04:00
Taha Afzal 3420f14c8a DeleteAndCover detached hedges by default: 2020-05-14 22:01:22 -04:00
Eric Harding 9bf05973bd Add in/out to logs 2020-05-14 20:51:15 -05:00
John Colvin 86277dfbfe config toggle for new 'specific' CustomOrderDefinition params dialog (disabled by default) 2020-05-14 20:14:51 -05:00
John Colvin 4839e464c6 added dialog to edit CustomOrderDefinition params of a specific algo node 2020-05-14 20:02:14 -05:00
John Colvin dc2ad071a9 GenericOrderHelper should use 'FirstOrDefault' (not 'First') 2020-05-14 19:59:06 -05:00
John Colvin 65e49992f9 LimitCoverAlgo.do_update - remove redundant conversion from DynamicOrderDefinition to LimitCoverDefinition 2020-05-14 17:08:01 -05:00
John Colvin afbb9ae92d LimitCover algo - 'Hedge Ticks' and 'Top Ticks Offset' params actually assigned to DeleteAndCover child 2020-05-14 12:29:29 -05:00
John Colvin ff088142d9 fix custom state output grid 2020-05-14 12:29:29 -05:00
Pedro Pinto 93b7cf346b Added an option for the Cover algo to detach hedges. 2020-05-14 10:20:46 -04:00
Eric Harding f0edeadd50 Make shared mem size configurable 2020-05-13 20:29:38 -05:00
Eric Harding cea4d05bc4 log every msg 2020-05-13 20:19:48 -05:00
Taha Afzal 8ee9b84488 Merge branch 'limit-algo-clean-history' of bitbucket.org:bluetradesys/spark into limit-algo-clean-history 2020-05-13 20:39:13 -04:00
Taha Afzal e3648f5373 Better Logging 2020-05-13 20:39:07 -04:00
John Colvin facd3a9d81 LimitCoverAlgo - remove unnecessary else block in 'do_before_launch' 2020-05-13 17:26:13 -05:00
John Colvin 84969cb481 LimitCoverAlgo - dont update me->child_qty in the child_changed callback, since its async 2020-05-13 17:21:32 -05:00
John Colvin 6d521e77db LimitCoverAlgo - don't override do_launch_attached (it's not supported) 2020-05-13 17:15:30 -05:00
John Colvin 82c49f8f49 remove redundant methods: tick_up/less, payup/less 2020-05-13 17:15:30 -05:00
John Colvin e074309da1 typo broke build (missed constructor in 'TickOffset' -> 'PriceOffset' refactor) 2020-05-13 17:15:30 -05:00
John Colvin 2d622a5f39 LimitCover algo - convert 'ticks_offset' param be in price terms 2020-05-13 16:55:01 -05:00
John Colvin d51d20e84c LimitCover algo - remove cancel_on_blah params, add hedge_ticks 2020-05-13 16:18:46 -05:00
John Colvin 2ccdef9dc5 fix clang build errors 2020-05-13 15:59:45 -05:00
John Colvin 42e62a30bf to_string(OrderError) uses generated protobuf enum Name method 2020-05-13 15:32:27 -05:00
Eric Harding 0b7208784b Can't take the double negatives anymore 2020-05-13 14:01:16 -05:00
John Colvin c233c607fa Formatter.h - pass strings/templated args by const ref instead of value 2020-05-13 13:40:07 -05:00
John Colvin 462cb930f7 dont redefine ChildTemplate 2020-05-13 13:20:55 -05:00
Eric Harding 059ccbdab6 Merge branch 'master' of bitbucket.org:bluetradesys/spark into ilink3_gateway 2020-05-13 11:05:31 -05:00
Pedro Pinto 2c0f920422 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2020-05-13 08:54:14 -04:00
Pedro Pinto 5ee26065ca Updated .gitignore 2020-05-13 08:53:52 -04:00
John Colvin 550a4e8d50 add config toggle to enable/disable LimitCover algo 2020-05-12 19:11:16 -05:00
John Colvin 99b8221efc LimitCoverAlgo unit tests 2020-05-12 19:11:16 -05:00
John Colvin 19e74c30f8 AlgoTestDriverBase - AlgoState << operator 2020-05-12 19:03:53 -05:00
John Colvin 26693a4c98 AlgoTestDriverBase - after_child_changed callback, and find_child method 2020-05-12 19:03:53 -05:00
John Colvin d8bdb69a7c AlgoTestDriverBase - ChildTemplate impl, added OrderDefinition param to child_launching callback 2020-05-12 19:03:53 -05:00
John Colvin 6d357a74e1 AlgoTestDriverBase - expose cancel/cancel_child methods 2020-05-12 19:03:53 -05:00
John Colvin 73f4e4814c LimitCover algo for pure 2020-05-12 19:03:53 -05:00
John Colvin 312bc4be15 add Formatter.h (defines commonly needed << operators for algos, basic string formatting utils) 2020-05-12 18:55:37 -05:00
John Colvin a0c3ba449a add DynamicOrderAdapter (util to keep param proto conversion code out of the algo) 2020-05-12 18:55:37 -05:00
John Colvin d5a2a7f3f0 orderman_utils.h pragma once 2020-05-12 18:55:37 -05:00
John Colvin eda8c94def replicate_to_linux_vm.py - ignore some dirs generated by visual studio 2020-05-12 18:55:37 -05:00
John Colvin 9a8e80e149 add payup/less price calc utils (Security.h)' 2020-05-12 18:55:37 -05:00
John Colvin 6a7e3d739d fix typo 'epislon' -> 'epsilon' 2020-05-12 15:58:00 -05:00
Taha Afzal e6b8274813 DeletAndCoverOrderDefinition does not contain the nested enum anymore 2020-05-12 15:58:00 -05:00
Taha Afzal 9783520c62 DeleteAndCover completed 2020-05-12 15:58:00 -05:00
Taha Afzal 7e7f0bc37f Adding DeleteAndCover proto 2020-05-12 15:58:00 -05:00
Eric Harding 75eaf8c3d4 IL3ExecutionReportParser 2020-05-12 13:54:28 -05:00
John Colvin b9e2ecdffa Merged in transitive-security-compare (pull request #411)
Transitive security compare

Approved-by: Eric Harding
2020-05-11 19:42:50 +00:00
Eric Harding f1c021a474 Merged in security_preload (pull request #412)
Security preload
2020-05-11 19:41:00 +00:00
Eric Harding 6fda54ffa1 Merged master into security_preload 2020-05-11 15:44:50 +00:00
Taha Afzal bdb0adc16c TASCounter test fixed 2020-05-07 13:07:44 -04:00
Eric Harding 4b19b0ea14 update launch.json 2020-05-06 18:26:03 -05:00
Eric Harding fab1b4dd0f Add SecurityPreload key to pre-load securities from the security DB for sunday startup. 2020-05-06 18:25:29 -05:00
John Colvin f3ed3075cf fix Security comparison impl (its transitive now) 2020-05-06 17:35:46 -05:00
John Colvin 742af36b93 Security comparison unit test (addresses bug that caused Krandall OrderBook crash) 2020-05-06 17:35:46 -05:00
John Colvin c573b5fbb2 add ProtoBufCapture extension (writes TableUpdate state to file when subscription is disposed) 2020-05-06 17:30:00 -05:00
Eric Harding 2d6d4af594 add vscode spark local linux debugger settings 2020-05-06 12:27:11 -05:00
Eric Harding 1e8fcd794f Update ExecutionReport::exchange_order_id 2020-05-06 12:22:33 -05:00
John Colvin 2dcfad979c move FileStreamHelper.cs to spark_core 2020-05-06 12:11:03 -05:00
Eric Harding 726329c4bf Add ilink3 execution report parser and order test 2020-05-06 11:56:52 -05:00
Eric Harding 2d01f3f0f4 CME Certification requires very specific UUID generation 2020-05-06 11:56:01 -05:00
Eric Harding 2a595c0fd7 cme cert hard coding 2020-05-06 11:54:32 -05:00
Taha Afzal ba7e35649e Ignore Spread Pos Limits are defaulted to true 2020-05-06 10:36:40 -04:00
Eric Harding 5f9866c9e8 SecurityCache now hands out raw pointers. SecurityOracle now indexes exchange security key 2020-05-05 11:17:16 -05:00
Pedro Pinto 6365378947 Changed TAS order to be GTC rather than DAY (since we logout). 2020-05-05 06:52:11 -04:00
Pedro Pinto cda4a870b7 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2020-05-05 06:14:30 -04:00
Pedro Pinto b3a8564365 Fixed int32 params in DynamicOrders to be int32 rathern than uint32. 2020-05-05 06:13:40 -04:00
Pedro Pinto 1e0114a4cf Treated disconnected orders as working. 2020-05-05 06:13:06 -04:00
Eric Harding 3a6e95ef05 Downgrade security scanner message to info 2020-05-04 16:16:55 -04:00
Eric Harding 78f1cf88e0 cmake needs love too 2020-05-04 11:16:21 -05:00
Eric Harding 4877436877 Ilink3 order unit test 2020-05-04 11:32:30 -04:00
Pedro Pinto 78d238fdfb Ran clang-format on ICEExecutionGateway.cpp 2020-05-04 09:33:40 -04:00
Eric Harding 1b43124756 Add ReentrancyGuard.h 2020-05-02 13:10:49 -04:00
Eric Harding 6875263743 Update 'update' instructions for spark_sdk 2020-05-01 14:17:07 -04:00
Taha Afzal eac828f323 Merge branch 'master' into TASCounter 2020-05-01 13:49:27 -04:00
Taha Afzal 1635d6f649 Added test for TASCounter 2020-05-01 13:48:50 -04:00
Eric Harding a1feb3fddf PrimaryGatewayConnectionEnforcement 2020-05-01 13:22:35 -04:00
Eric Harding 2da535e9ff Update onixs license 2020-05-01 12:51:31 -04:00
Eric Harding 024328bf8b Refactor empty session 2020-05-01 11:44:03 -04:00
Pedro Pinto d90fa1a1e8 Launched regular spark after TAS is concluded. 2020-05-01 07:41:23 -04:00
Taha Afzal a98be44a40 Merge branch 'master' into TASCounter 2020-04-30 13:59:49 -04:00
John Colvin 6210ac2ee6 OrderBook custom state grid only shows data if the selected rows are of the same root/branch 2020-04-29 16:21:17 -05:00
Pedro Pinto 3e817d4fb0 Refactor 2020-04-29 13:16:16 -04:00
Eric Harding 80d7e34bf1 Fixes for updated sbe codegen 2020-04-28 18:16:45 -04:00
Pedro Pinto cfebab0488 Merged in api_improvements (pull request #405)
Api improvements

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2020-04-28 20:06:53 +00:00
Pedro Pinto eacd766359 Updated release notes. 2020-04-28 16:05:21 -04:00
Pedro Pinto 8fb8f8ff58 Merge branch 'master' into api_improvements 2020-04-28 15:58:43 -04:00
Taha Afzal f4b22816a2 Putting config to hide TASCounter 2020-04-27 23:39:41 -04:00
Eric Harding 8ab69c919b Improve cme provided error message 2020-04-27 16:56:32 -04:00
Eric Harding 99531bcfa0 Update ilink3 generated templates 2020-04-27 16:50:54 -04:00
Eric Harding 6bd516d4f2 cleanup 2020-04-27 11:26:42 -04:00
Taha Afzal 1029a464d7 Fixing the bts::timestamp tp protobuf timestamp function (unused, but useful) 2020-04-27 09:57:21 -04:00
Taha Afzal fd8b8e03ea cleanup, comments 2020-04-26 23:10:16 -04:00
Eric Harding 1a1d771e1b addition ilink3 tests 2020-04-25 13:18:58 -04:00
Eric Harding 050fcf7c6e Passing simple log in test 2020-04-24 12:31:30 -04:00
Pedro Pinto 41cf66a943 Added the hability to retrieve all securities in the API. 2020-04-24 08:00:13 -04:00
Pedro Pinto 1c57c9a012 Added position updates in the API. 2020-04-24 07:03:40 -04:00
Taha Afzal 8ccab66120 Merge branch 'add_custom_algo_state_reporting_to_api' into TASCounter 2020-04-23 18:14:28 -04:00
John Colvin e2b2f7ec9c better default widths for custom state grid columns 2020-04-23 16:11:35 -05:00
John Colvin b3c897bf0f custom state grid params are sorted alphabetically 2020-04-23 16:02:38 -05:00
John Colvin 87c9f54c8b custom state grid populates with first child row that has params (if selected row doesn't have any itself) 2020-04-23 15:59:49 -05:00
John Colvin df56b76ab6 OrderBookRowVM - remove dead property 'is_visible' 2020-04-23 15:54:30 -05:00
Taha Afzal 28ff13db11 Merge branch 'add_custom_algo_state_reporting_to_api' into TASCounter 2020-04-23 13:23:30 -04:00
Taha Afzal 2957075769 comments 2020-04-23 13:22:33 -04:00
John Colvin a6477824a8 OrderBookVM - clear the previous 'custom state' params before adding the new ones 2020-04-23 11:16:47 -05:00
Pedro Pinto aa6d453d5b Added spread support to TAS algo. 2020-04-23 07:18:00 -04:00
Pedro Pinto 112c78e50b Moved ouput messages to log. 2020-04-23 06:48:08 -04:00
Taha Afzal 17431f5ac0 Code complete, output is not showing in the UI which is making testing harder 2020-04-23 00:09:23 -04:00
Pedro Pinto 41ec7fb668 Updated linux 2020-04-22 14:13:01 -04:00
Pedro Pinto b19bf2fd26 Added channel handling to TAS. 2020-04-22 14:09:12 -04:00
Pedro Pinto c5f7477521 Fixed bug in admin reafactoring. 2020-04-22 14:05:51 -04:00
Taha Afzal 8708f02fe0 Merge branch 'add_custom_algo_state_reporting_to_api' into TASCounter 2020-04-21 17:44:58 -04:00
Taha Afzal 752fb2bc4a Merge branch 'master' into TASCounter 2020-04-21 17:10:32 -04:00
Taha Afzal 6efb78ecf9 Code complete 2020-04-21 14:26:32 -04:00
John Colvin 75c1970aef remove useless IObservable 'Select' op in 'SubscribeEach' extension 2020-04-20 10:39:31 -05:00
John Colvin c2583518d7 OrderBook was only updating custom state grid when selection changed 2020-04-20 10:37:12 -05:00
Pedro Pinto 14323e7964 Code complete on TAS. 2020-04-20 08:54:24 -04:00
Eric Harding aadeae3201 update cmake, avoid web build on wsl 2020-04-17 22:38:53 -04:00
Eric Harding b72e8aed02 ilink3 test code 2020-04-17 20:30:11 -05:00
Pedro Pinto 39db9b1bd7 Factored storage/retrieval of admin data out of service. 2020-04-17 18:37:05 -04:00
John Colvin 8792871387 add algo custom state grid to orderbook (right panel) 2020-04-17 16:36:05 -05:00
Eric Harding 68a593af7b Add more info to system test 2020-04-17 16:48:10 -04:00
Eric Harding 0820cc3e9a Fix a very subtle bug in serializer 2020-04-17 13:15:12 -05:00
Eric Harding b1ba9a1315 update ilink code gen readme 2020-04-16 14:03:53 -05:00
John Colvin 17c2321a82 Merged in SP-289-naudio-crash (pull request #407)
SP-289 naudio crash

Approved-by: Eric Harding <eric.harding@bluetradesys.com>
2020-04-16 18:11:18 +00:00
John Colvin 0affc8a942 SP-289 naudio crash 2020-04-16 12:07:44 -05:00
John Colvin ce36ea4109 move Delegates.cs to spark_core 2020-04-16 10:47:41 -05:00
Pedro Pinto 991a199d06 TAS utils refactor. 2020-04-14 11:46:53 -04:00
Eric Harding 39ce4323a1 Add CME cert command line tool 2020-04-13 16:18:59 -05:00
Pedro Pinto 7c29a3d1d8 Added custom state reporting to API. 2020-04-13 11:30:32 -04:00
Eric Harding d9fcd290d9 source files don't need to be executable 2020-04-13 09:53:28 -05:00
Taha Afzal 90bc20575a TimeStamps fixed 2020-04-13 08:56:49 -04:00
Pedro Pinto cb268f505a Added settlements to the new algo API. 2020-04-13 08:19:55 -04:00
Pedro Pinto dfd93b836b Updated externals 2020-04-13 07:44:52 -04:00
Pedro Pinto 9d045f65d2 Some progress on TAS. 2020-04-13 07:40:58 -04:00
Eric Harding 05939b02c5 save 2020-04-12 15:11:46 -05:00
Taha Afzal 28e9c66675 Added all the state, order execution remains 2020-04-10 12:54:57 -04:00
Eric Harding aa91638fe4 ilink3 receive buffer handler + tests 2020-04-10 10:55:53 -05:00
Taha Afzal c0520d6a31 Initial Check-in, skeleton code 2020-04-09 09:30:00 -04:00
Pedro Pinto 1c0cd176a1 Moved externals pointer 2020-04-09 08:35:10 -04:00
Pedro Pinto 1018ae387a Added preliminary tas utilities 2020-04-08 15:53:17 -04:00
Eric Harding 065fc54f73 IL3Reactor 2020-04-07 14:05:31 -05:00
Pedro Pinto 1ba6e3280c Updated CMakeDeps 2020-04-06 09:38:19 -04:00
Eric Harding 3a6f50dfea Merge branch 'prod' of bitbucket.org:bluetradesys/spark 2020-04-03 15:40:30 -04:00
Eric Harding d711f99548 fix externals pointer 2020-04-03 15:40:15 -04:00
pfisher 07ace80871 fixed keycode.conf 2020-04-03 13:40:56 -05:00
John Colvin 93c6277bfc Merged prod into master 2020-04-03 13:20:33 -05:00
Jake Norbut 7ac9d05ae2 Merged in manual_fills_permissions (pull request #403)
add permission filter to manual fills

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2020-04-03 18:18:16 +00:00
Eric Harding 95fb13f58b Fix some build issues 2020-04-01 15:21:04 -05:00
Eric Harding 4eb2931cb8 Additional ilink3 refactoring 2020-03-28 21:08:47 -05:00
Eric Harding 5326015a48 Testcase for framer 2020-03-27 13:46:29 -05:00
Eric Harding fcbe319470 Split out functional pieces for easier testing 2020-03-27 09:14:30 -05:00
Eric Harding 5ad21c88b2 Add tests and refactor includes for faster build 2020-03-25 21:15:19 -05:00
Eric Harding 5a4b31ccc0 add cpp sample to service.md api page 2020-03-20 12:10:40 -04:00
John Colvin fb568aab39 SP-288 ladder crash (IndexOutOfRange ex accessing price array) 2020-03-19 15:28:27 -05:00
Eric Harding 64416de10d Fix the braces in my sample. 2020-03-16 20:41:23 -04:00
Eric Harding 46953cb639 add c# market data sample 2020-03-16 20:39:48 -04:00
Eric Harding 7e68a235ee Add securities sub to client_sdk_example 2020-03-16 15:18:39 -04:00
Eric Harding 3a9c1d557b Split Retransmit of old vs new session logic 2020-03-09 16:29:15 -05:00
Jake Norbut 85f2285ac0 add permission filter to manual fills 2020-03-09 09:28:23 -05:00
Eric Harding 70e0979836 override sim port for sdk image 2020-03-06 12:45:09 -05:00
Kevin Darby 1f80c3366e Merged in master (pull request #401)
Master
2020-03-03 19:16:43 +00:00
Eric Harding 6fb5b83249 Only send Negotiate if the session is new 2020-02-28 15:33:27 -06:00
Eric Harding 95830fafdf send_cancel 2020-02-27 14:48:56 -06:00
Eric Harding d68b03bb91 send_cancel_replace 2020-02-26 17:56:50 -06:00
Eric Harding e7062ce01e send_order call for link3 2020-02-26 17:36:18 -06:00
Kevin Darby 19e66a1c32 add a new stunnel path for Pete 2020-02-25 11:16:40 -05:00
Pedro Pinto 932738f98e Merge branch 'master' into ilink3_gateway 2020-02-20 08:39:47 -05:00
Pedro Pinto 1426b00e83 Added fake iLink3 gateway 2020-02-19 16:21:06 -05:00
Pedro Pinto e724409b58 Added jetfix support for string_view 2020-02-19 10:55:56 -05:00
Pedro Pinto 9cf828e9a4 Implemented iLink3 order 2020-02-18 15:37:06 -05:00
Eric Harding 41408fb609 ILink3ExecutionGateway placeholder 2020-02-14 16:07:44 -06:00
Eric Harding 4c21e32838 ILink3GW core gateway 2020-02-14 16:06:58 -06:00
Eric Harding 385f3ea402 add unix_nano_now() to datetime.h 2020-02-14 16:05:00 -06:00
Eric Harding 8d6d8cab18 Update SecureLogon for ilink3 2020-02-14 16:05:00 -06:00
Eric Harding 01615f824a Generated ilink3 messages 2020-02-14 16:05:00 -06:00
Pedro Pinto c6779ddc90 Reactore GLBX native order for iLink3. 2020-02-13 15:26:33 -05:00
Pedro Pinto 46eff65435 Changed IExecutionGateway to support non FIX gateways. 2020-02-12 10:11:53 -05:00
John Colvin 17b314ea3a Merge branch 'master' into algo-type-config 2020-02-07 13:35:50 -06:00
John Colvin e713210030 remove obsolete algo types from hardcoded defaults 2019-10-29 18:07:32 -05:00
John Colvin c057bf18f6 Merge remote-tracking branch 'origin/master' into algo-type-config 2019-10-29 18:07:01 -05:00
John Colvin 17a0bef824 Merge remote-tracking branch 'origin/master' into algo-type-config 2019-10-21 12:15:00 -05:00
John Colvin 9180c48b67 CompositeAlgoVM 'group' is AlgoDisplayGroup.Studio 2019-10-14 15:29:02 -05:00
John Colvin 01acbe08f5 remove dead code 2019-10-14 15:26:01 -05:00
John Colvin 8a47cd4821 exchange/security based algo type config 2019-10-14 15:19:36 -05:00
John Colvin 03050d9b07 refactor some Disposable.replace calls so that the prev hook is disposed before the new one is created 2019-10-14 13:25:21 -05:00
John Colvin 9178878880 AlgoStudio model does not really need to import AdminModel (just UserTuple) 2019-10-14 13:25:21 -05:00
John Colvin f38b1c7af9 ContractPickerModel.result getter performs dictionary lookup (was brute force enumeration) 2019-10-14 13:25:21 -05:00
John Colvin 45cd958b1e make security criteria clause immutable 2019-10-14 13:25:21 -05:00
John Colvin 4d49c8f030 add .rej to gitignore 2019-10-14 13:25:21 -05:00
John Colvin b2227ce37b DynamicOrderHelper stores dyn types in map 2019-10-14 13:25:21 -05:00
6631 changed files with 690655 additions and 195063 deletions

No files matched your search

+10
View File
@@ -1 +1,11 @@
IndentWidth: 3
BinPackArguments: true
BinPackParameters: false
AlignAfterOpenBracket: AlwaysBreak
AlwaysBreakTemplateDeclarations: true
PenaltyReturnTypeOnItsOwnLine: 140
ReflowComments: false
---
Language: Proto
IndentWidth: 2
AllowShortFunctionsOnASingleLine: None
+36
View File
@@ -0,0 +1,36 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-format": {
"version": "5.1.225507",
"commands": [
"dotnet-format"
]
},
"fable": {
"version": "4.24.0",
"commands": [
"fable"
]
},
"fantomas": {
"version": "5.2.2",
"commands": [
"fantomas"
]
},
"fake-cli": {
"version": "6.0.0",
"commands": [
"fake"
]
},
"dotnet-t4": {
"version": "3.0.0",
"commands": [
"t4"
]
}
}
}
+38
View File
@@ -0,0 +1,38 @@
{
"build": {
"dockerfile": "../docker/images/bluetradingsystems/linux_dotnet8_dev/Dockerfile",
"options": [
"--secret",
"id=bitbucket_access_token,src=${localWorkspaceFolder}/.secrets/bitbucket_access_token.txt"
]
},
"hostRequirements": {
"memory": "8gb",
"storage": "10gb"
},
"containerUser": "bts",
"updateRemoteUserUID": true,
"shutdownAction": "none",
// Note: If running multiple containers on the same host, each must use a
// unique set of ports. Usually we just add 1000 to each port as needed. For
// example, if 8000-8003 is taken, go with 9000-9003, then 10000-10003, etc.
"runArgs": [
"--shm-size",
"8gb"
],
"mounts": [
"source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind"
],
"customizations": {
"vscode": {
"extensions": [
"eamodio.gitlens",
"llvm-vs-code-extensions.vscode-clangd",
"ms-python.python",
"ms-vscode.cmake-tools",
"ms-vscode.cpptools",
"xaver.clang-format"
]
}
}
}
+265
View File
@@ -0,0 +1,265 @@
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true
# C# files
[*.cs]
#### Core EditorConfig Options ####
# Indentation and spacing
indent_size = 3
indent_style = space
tab_width = 3
# New line preferences
end_of_line = crlf
insert_final_newline = true
#### .NET Coding Conventions ####
# Organize usings
dotnet_separate_import_directive_groups = true
dotnet_sort_system_directives_first = false
file_header_template = unset
# this. and Me. preferences
dotnet_style_qualification_for_event = false:silent
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_property = false:silent
# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent
# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
# Expression-level preferences
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_object_initializer = true:suggestion
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_prefer_compound_assignment = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_simplified_interpolation = true:suggestion
# Field preferences
dotnet_style_readonly_field = true:suggestion
# Parameter preferences
dotnet_code_quality_unused_parameters = all:suggestion
# Suppression preferences
dotnet_remove_unnecessary_suppression_exclusions = none
#### C# Coding Conventions ####
# var preferences
csharp_style_var_elsewhere = false:silent
csharp_style_var_for_built_in_types = false:silent
csharp_style_var_when_type_is_apparent = false:silent
# Expression-bodied members
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_local_functions = false:silent
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
# Pattern matching preferences
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_prefer_not_pattern = true:suggestion
csharp_style_prefer_pattern_matching = true:silent
csharp_style_prefer_switch_expression = true:suggestion
# Null-checking preferences
csharp_style_conditional_delegate_call = true:suggestion
# Modifier preferences
csharp_prefer_static_local_function = true:suggestion
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:silent
# Code-block preferences
csharp_prefer_braces = true:silent
csharp_prefer_simple_using_statement = true:suggestion
# Expression-level preferences
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
csharp_style_prefer_index_operator = true:suggestion
csharp_style_prefer_range_operator = true:suggestion
csharp_style_throw_expression = true:suggestion
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
# 'using' directive preferences
csharp_using_directive_placement = inside_namespace:silent
#### C# Formatting Rules ####
# New line preferences
csharp_new_line_before_catch = false
csharp_new_line_before_else = false
csharp_new_line_before_finally = false
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_open_brace = none
csharp_new_line_between_query_expression_clauses = true
# Indentation preferences
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_labels = one_less_than_current
csharp_indent_switch_labels = true
# Space preferences
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false
# Wrapping preferences
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = true
#### Naming styles ####
# Naming rules
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
# Symbol specifications
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
# user types
dotnet_naming_symbols.user_types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.user_types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.user_types.required_modifiers =
# non_field_members
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =
# public symbols
dotnet_naming_symbols.public_symbols.applicable_kinds = property,method,field,event,delegate
dotnet_naming_symbols.public_symbols.applicable_accessibilities = public,internal
# parameters
dotnet_naming_symbols.parameters.applicable_kinds = parameter
dotnet_naming_symbols.parameters.applicable_accessibilities = public,internal,protected,private,protected_internal,private_internal
# private symbols
dotnet_naming_symbols.private_symbols.applicable_kinds = property,method,field,event,delegate
dotnet_naming_symbols.private_symbols.applicable_accessibilities = protected,private
# local symbols
dotnet_naming_symbols.local_symbols.applicable_kinds = local
# parameter symbols
dotnet_naming_symbols.parameter_symbols.applicable_kinds = parameter
# Naming styles
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.camel_case.required_prefix =
dotnet_naming_style.camel_case.required_suffix =
dotnet_naming_style.camel_case.word_separator =
dotnet_naming_style.camel_case.capitalization = camel_case
dotnet_naming_style.user_types.required_prefix =
dotnet_naming_style.user_types.required_suffix =
dotnet_naming_style.user_types.word_separator =
dotnet_naming_style.user_types.capitalization = pascal_case
dotnet_naming_style.interface.required_prefix = I
dotnet_naming_style.interface.required_suffix =
dotnet_naming_style.interface.word_separator =
dotnet_naming_style.interface.capitalization = pascal_case
dotnet_naming_style.local.capitalization = camel_case
dotnet_naming_style.parameter.capitalization = camel_case
# rules
dotnet_naming_rule.user_types.symbols = user_types
dotnet_naming_rule.user_types.style = user_types
dotnet_naming_rule.user_types.severity = suggestion
dotnet_naming_rule.interfaces.symbols = interface
dotnet_naming_rule.interfaces.style = interface_style
dotnet_naming_rule.interfaces.severity = suggestion
dotnet_naming_rule.public_members.symbols = public_symbols
dotnet_naming_rule.public_members.style = pascal_case
dotnet_naming_rule.public_members.severity = suggestion
dotnet_naming_rule.private_members.symbols = private_symbols
dotnet_naming_rule.private_members.style = camel_case
dotnet_naming_rule.private_members.severity = suggestion
dotnet_naming_rule.variables_are_camel_case.severity = suggestion
dotnet_naming_rule.variables_are_camel_case.symbols = local_symbols
dotnet_naming_rule.variables_are_camel_case.style = local
dotnet_naming_rule.parameters.symbols = parameter_symbols
dotnet_naming_rule.parameters.style = parameter
dotnet_naming_rule.parameters.severity = suggestion
+56
View File
@@ -0,0 +1,56 @@
# This file defines the global default configuration for docker deployments.
# It is tracked in source control. For temporary modifications, please create
# a separate file called ".env.local" (it's in .gitignore, so won't be tracked).
# If a variable is defined in both files, the value in .env.local will be used.
#
# About the deployment procedure:
# We use Docker Compose to build images and launch containers for various services
# that make up our software suite:
# - sparkd
# - TODO: pubsub
# - TODO: md-publisher
# - TODO: webapp (DSQA on the web)
# - TODO: api-server (websocket based)
# From inside a devcontainer, you can launch all services in separate containers
# on your machine by running:
#
# tools/deploy.sh
#
# This script builds release versions for each service, packaged (generally) in
# self-contained directories. Next, it runs a few "docker compose" commands to
# build docker images loaded with the self-contained binaries from the previous
# step, and start containers with those images to run each service. To view the
# commands that deploy.sh runs internally (without actually running them), run:
#
# tools/deploy.sh --dry-run
#
# For additional information/help, run:
#
# tools/deploy.sh --help
#
### Sparkd ###
# The internal image for sparkd to use. For more info, view:
# src/server/sparkd/Dockerfile
SPARKD__IMAGE=sparkd
# The config dir for this service to use
SPARKD__CONFIG_DIR=src/app_sparkd/configurations/dev
# Mount a specific volume or dir to "~/sparkdata/data" inside the docker.
# Defaults to a volume named "sparkd_<config_port>" (e.g., sparkd_8000).
# SPARKD__DATA_DIR=/home/bts/sparkdata/data
SPARKD__SOURCE_DIR=install/sparkd-release-gcc
SPARKD__RUNTIME_CONF_DIR=/home/ubuntu/8000/sparkdata/conf/
SPARKD__CONFIG_PORT=8000
SPARKD__QUICKBUS_PORT=8001
SPARKD__SIM_FIX_PORT=8002
SPARKD__SHM_SIZE=4gb
SPARKD__PYTHON_REQUIREMENTS=requirements.txt
### PubSubServer ###
PUBSUB__CONFIG_DIR=src/DataStreamSuite/PubSubServer/Configurations/Development
PUBSUB__SOURCE_DIR=build/Release/bin/net8.0/linux-x64/publish
### MdPublisher ###
MD_PUBLISHER__CONFIG_DIR=src/DataStreamSuite/DataStreamPublisher/Configurations/ReplayMarketData
MD_PUBLISHER__SOURCE_DIR=build/Release/bin/net8.0/linux-x64/publish
# TODO: add config for other services (pubsub, md-publisher, webapp, api-server, etc.)
+3
View File
@@ -0,0 +1,3 @@
*.cmd text=auto eol=crlf
*.cs text=auto eol=crlf
*.sh text=auto eol=lf
+33 -4
View File
@@ -1,11 +1,17 @@
nohup.out
build/
build/**
install/**
.build_proxy/
cmake-build-debug/
.cache/
.ipynb_checkpoints/
.idea/
.dir-locals.el
*.pyc
.vscode/*
!.vscode/*.json
**.vscode/*
!.vscode/launch.json
!.vscode/tasks.json
!.vscode/*.env
.vs
obj/
*.csproj.user
@@ -17,10 +23,13 @@ vcxproj.user
src/client/spark/Properties/launchSettings.json
compile_commands.json
.cquery_cached_index/
.cache/*
.clangd/*
src/client/sparkcmd/Properties/launchSettings.json
node_modules
paket-files
project.lock.json
src/.clang-format
src/server/sparkd/orderman/perf_analysis/data
src/server/sparkd/orderman/perf_analysis/logs/
src/server/sparkd/orderman/perf_analysis/trace_data/
@@ -34,4 +43,24 @@ trace_data/
/doc/user/public/*
.ionide/*
/.ignore
/build
*.rej
.clangd/
*CMakeDeps.cmake
/sniper.ipynb
/src/.clang-format
/src/server/sparkd/cmds/spartan/analysis/.ipynb_checkpoints
/src/server/sparkd/cmds/spartan/analysis/data
.tmp/
.venv*/
.cache/
/src/Spark.Admin.WebApp/tsconfig.*.g.json
/src/Spark.Admin.WebApp/src/bin/
/src/**/*appsettings.Local.json
/src/**/*/Configurations/Local/
**/CMakeDeps.cmake
**/CMakeDeps_win.cmake
.devcontainer/
*.Generated.cs
*.lst
.env.local
.secrets
+4 -7
View File
@@ -1,9 +1,6 @@
[submodule "externals"]
path = externals
url = git@bitbucket.org:bluetradesys/externals.git
[submodule "docker/linux"]
path = docker/linux
url = git@bitbucket.org:bluetradesys/linux_docker.git
[submodule "docker/windows"]
path = docker/windows
url = git@bitbucket.org:bluetradesys/windows_docker.git
url = https://bitbucket.org/bluetradesys/externals.git
[submodule "vcpkg"]
path = vcpkg
url = https://github.com/microsoft/vcpkg.git
+499 -371
View File
@@ -1,371 +1,499 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "SparkVM Launch",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/server/sparkd",
"args": [
"run"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
},
{
"description": "Skip STL",
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
"ignoreFailures": true
},
{
"description": "LD LIBRARY",
"text": "set env LD_LIBRARY_PATH=.",
"ignoreFailures": false
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/build/ninja_debug/server/sparkd/sparkd",
"args": [
"run"
],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/build/ninja_debug/src/server/sparkd",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "Client Launch",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/spark.exe",
"args": [],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "SDK Launch",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/spark_sdk.exe",
"args": [
"md",
"GLBX",
"Future",
"CL",
"CLZ9",
"--user=bts",
"--pass="
],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "Excel Launch",
"type": "clr",
"request": "launch",
"program": "C:/Program Files/Microsoft Office/Office14/EXCEL.EXE",
"args": [
"${workspaceRoot}/build/Debug/bin/net471/spark_excel-addin64-packed.xll"
],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "Client Tests",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/sparkcmd.exe",
"args": [
"test",
"ApiUpdateTests"
],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "Client Attach",
"type": "clr",
"request": "attach",
"processId": "${command:pickProcess}"
},
{
"name": "Spreader Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/server/sparkd",
"args": [
"test",
"[spreader]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Admin Service Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"args": [
"test",
"[admin_service]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Limiter Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"args": [
"test",
"[limiter]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "MD Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/server/sparkd",
"args": [
"test",
"[algo]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Skip STL",
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "SparkVM attach",
"type": "cppdbg",
"request": "attach",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"processId": "${command:pickRemoteProcess}",
"MIMode": "gdb",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Python",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "${config:python.pythonPath}",
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
"args": [
"DEBUG"
],
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": ".NET Core Remote Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickRemoteProcess}",
"pipeTransport": {
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/home/bts/vsdbg/vsdbg",
"pipeCwd": "${workspaceRoot}",
"quoteArgs": true
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
},
"justMyCode": true
},
{
"name": ".NET Core Remote Launch",
"type": "coreclr",
"request": "launch",
"program": "/usr/bin/dotnet",
"args": [
"sparkcmd.dll",
"test",
"test_join_create_and_takeout_market"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/server",
"pipeTransport": {
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/home/bts/vsdbg/vsdbg",
"pipeCwd": "${workspaceRoot}",
"quoteArgs": true
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
},
"justMyCode": false
},
]
}
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Debugger: Current File with Arguments",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"args": "${command:pickArgs}"
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach"
},
{
"name": "Api Server",
"type": "coreclr",
"request": "launch",
"program": "",
"preLaunchTask": "Build Api Server (Debug)",
"windows": {
"program": "spark_api_server.exe",
},
"linux": {
"program": "spark_api_server",
},
"args": [
"run",
],
"cwd": "build/Debug/bin/net8.0",
"env": {
"DOTNET_ENVIRONMENT": "${input:apiServerEnvironment}",
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "Api Server (Skip Build)",
"type": "coreclr",
"request": "launch",
"program": "",
"windows": {
"program": "spark_api_server.exe",
},
"linux": {
"program": "spark_api_server",
},
"args": [
"run",
],
"cwd": "build/Debug/bin/net8.0",
"env": {
"DOTNET_ENVIRONMENT": "${input:apiServerEnvironment}",
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "DataStreamPublisher",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "Build DataStream (Debug)",
"program": "",
"linux": {
"program": "DataStreamPublisher",
},
"windows": {
"program": "DataStreamPublisher.exe",
},
"cwd": "build/Debug/bin/net8.0",
"env": {
"DOTNET_ENVIRONMENT": "${input:dataStreamPublisherEnvironment}",
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "DataStreamPublisher (Skip Build)",
"type": "coreclr",
"request": "launch",
"program": "",
"linux": {
"program": "DataStreamPublisher",
},
"windows": {
"program": "DataStreamPublisher.exe",
},
"cwd": "${workspaceFolder}/build/Debug/bin/net8.0",
"env": {
"DOTNET_ENVIRONMENT": "${input:dataStreamPublisherEnvironment}",
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/sparkd-debug-clang/server/sparkd",
"args": [
"run"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/sparkd-debug-clang/server",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
},
{
"name": "spreader tests2",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/sparkd-debug-clang/server/sparkd",
"args": [
"test",
"[spreader2]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/sparkd-debug-clang/server",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
},
{
"name": "spreader tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/sparkd-debug-clang/server/sparkd",
"args": [
"test",
"[spreader]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/sparkd-debug-clang/server",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
},
{
"name": "DataStreamQueryAnalyzer",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "Build DataStream (Debug)",
"program": "",
"windows": {
"program": "DataStreamQueryAnalyzer.exe",
"cwd": "build/Debug/bin/net8.0-windows",
"env": {
"PYTHON_EXE": "${workspaceFolder}/.venv/Scripts/python.exe",
"DOTNET_ENVIRONMENT": "${input:dataStreamQueryAnalyzerEnvironment}",
},
},
"stopAtEntry": false,
"console": "integratedTerminal",
},
{
"name": "DataStreamQueryAnalyzer (Skip Build)",
"type": "coreclr",
"request": "launch",
"program": "",
"windows": {
"program": "DataStreamQueryAnalyzer.exe",
"cwd": "build/Debug/bin/net8.0-windows",
"env": {
"PYTHON_EXE": "${workspaceFolder}/.venv/Scripts/python.exe",
"DOTNET_ENVIRONMENT": "${input:dataStreamQueryAnalyzerEnvironment}",
},
},
"stopAtEntry": false,
"console": "integratedTerminal",
},
{
"name": "PubSubServer",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "Build DataStream (Debug)",
"program": "",
"linux": {
"program": "PubSubServer",
},
"windows": {
"program": "PubSubServer.exe",
},
"args": [
"--config",
"${workspaceFolder}/src/DataStreamSuite/PubSubServer/Configurations/${input:pubSubServerConfig}.json"
],
"cwd": "build/Debug/bin/net8.0",
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "PubSubServer (Skip Build)",
"type": "coreclr",
"request": "launch",
"program": "",
"linux": {
"program": "PubSubServer",
},
"windows": {
"program": "PubSubServer.exe",
},
"cwd": "build/Debug/bin/net8.0",
"env": {
"DOTNET_ENVIRONMENT": "${input:pubSubServerEnvironment}",
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "Sdk Demo",
"type": "coreclr",
"request": "launch",
"program": "",
"preLaunchTask": "Build Api Server (Debug)",
"windows": {
"program": "Bts.Spark.Sdk.Demo.exe",
},
"linux": {
"program": "Bts.Spark.Sdk.Demo",
},
"cwd": "build/Debug/bin/net8.0",
"env": {
"DOTNET_ENVIRONMENT": "${input:sdkDemoEnvironment}",
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "Sdk Demo (Skip Build)",
"type": "coreclr",
"request": "launch",
"program": "",
"windows": {
"program": "Bts.Spark.Sdk.Demo.exe",
},
"linux": {
"program": "Bts.Spark.Sdk.Demo.exe",
},
"cwd": "build/Debug/bin/net8.0",
"env": {
"DOTNET_ENVIRONMENT": "${input:sdkDemoEnvironment}",
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "Spark",
"type": "coreclr",
"request": "launch",
"program": "",
"windows": {
"preLaunchTask": "Build Spark (Debug)",
"program": "Spark.exe",
"cwd": "build/Debug/bin/net8.0-windows",
"env": {
"DOTNET_ENVIRONMENT": "${input:sparkEnvironment}",
}
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "Spark (Skip Build)",
"type": "coreclr",
"request": "launch",
"program": "",
"windows": {
"program": "Spark.exe",
"cwd": "build/Debug/bin/net8.0-windows",
"env": {
"DOTNET_ENVIRONMENT": "${input:sparkEnvironment}",
}
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "Spark (Parameterized)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "Build Spark (Debug)",
"program": "",
"windows": {
"program": "Spark.exe",
"args": [
"--sparkd",
"${input:sparkConfigServer}"
],
"cwd": "build/Debug/bin/net8.0-windows",
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "Spark Test",
"type": "coreclr",
"request": "launch",
"program": "",
"windows": {
"preLaunchTask": "Build Spark (Debug)",
"program": "Spark.Console.exe",
"cwd": "build/Debug/bin/net8.0",
"args": [
"test",
"${input:sparkTest}"
]
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "Spark Test (Skip Build)",
"type": "coreclr",
"request": "launch",
"program": "",
"windows": {
"program": "Spark.Console.exe",
"cwd": "build/Debug/bin/net8.0",
"args": [
"test",
"${input:sparkTest}"
]
},
"stopAtEntry": false,
"console": "integratedTerminal"
},
{
"name": "Sparkd",
"type": "cppdbg",
"request": "launch",
"program": "",
"linux": {
"program": "${workspaceFolder}/build/sparkd-debug-clang/src/app_sparkd/sparkd",
"preLaunchTask": "Build Sparkd (Debug | Clang)",
},
"args": [
"run"
],
"cwd": "${workspaceFolder}/build/sparkd-debug-clang/src/app_sparkd",
"stopAtEntry": false,
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
},
{
"name": "Sparkd (Skip Build)",
"type": "cppdbg",
"request": "launch",
"program": "",
"linux": {
"program": "${workspaceFolder}/build/sparkd-debug-clang/src/app_sparkd/sparkd",
},
"args": [
"run"
],
"cwd": "${workspaceFolder}/build/sparkd-debug-clang/src/app_sparkd",
"stopAtEntry": false,
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
},
{
"name": "Sparkd Attach",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/build/sparkd-debug-clang/src/app_sparkd/sparkd",
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
},
],
"inputs": [
{
"id": "apiServerEnvironment",
"type": "pickString",
"description": "Api Server Configuration",
"options": [
"Development",
"Local",
"Staging",
],
"default": "Development",
},
{
"id": "dataStreamPublisherConfig",
"type": "pickString",
"description": "Publisher Configuration",
"options": [
"MarketDataPublisher",
"SimpleEchoClient",
"SimpleTestDataPublisher",
"TestDataPublisher",
],
"default": "MarketDataPublisher",
},
{
"id": "dataStreamQueryAnalyzerEnvironment",
"type": "pickString",
"description": "DataStreamQueryAnalyzer Configuration",
"options": [
"Development",
"Local",
],
"default": "Development",
},
{
"id": "dataStreamPublisherEnvironment",
"type": "pickString",
"description": "DataStreamPublisher Configuration",
"options": [
"Local",
"ReplayMarketData",
],
"default": "Local",
},
{
"id": "pubSubServerConfig",
"type": "pickString",
"description": "PubSub Configuration",
"options": [
"PubSubServer",
"SimpleEchoClient",
],
"default": "PubSubServer",
},
{
"id": "sdkDemoEnvironment",
"type": "pickString",
"description": "Sdk Demo Configuration",
"options": [
"Development",
"Local",
"Staging",
],
"default": "Development",
},
{
"id": "sparkConfigServer",
"type": "promptString",
"description": "Config Server URL",
"default": "http://localhost:8000/config",
},
{
"id": "sparkEnvironment",
"type": "pickString",
"description": "Spark Configuration",
"options": [
"Development",
"Local",
],
"default": "Development",
},
{
"id": "sparkTest",
"type": "promptString",
"description": "Test to run",
},
{
"id": "sparkdTest",
"type": "promptString",
"description": "Test to run",
},
]
}
+1
View File
@@ -0,0 +1 @@
PYTHONPATH=/workspaces/spark/build/sparkd-debug-clang/src/lib_python_interop;/workspaces/spark/src/lib_python_interop/python_interop_plugins;/workspaces/spark/tools/py
-16
View File
@@ -1,16 +0,0 @@
{
"files.associations": {
"utility": "cpp",
"initializer_list": "cpp",
"list": "cpp",
"type_traits": "cpp",
"vector": "cpp",
"xhash": "cpp",
"xstring": "cpp",
"system_error": "cpp",
"array": "cpp",
"string_view": "cpp"
"xutility": "cpp",
"*.ipp": "cpp"
}
}
+1124 -60
View File
File diff suppressed because it is too large. Load diff
+102
View File
@@ -0,0 +1,102 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cs", "cs", "{C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Spark.Core", "src\cs\Bts.Spark.Core\Bts.Spark.Core.csproj", "{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Spark.Api", "src\cs\Bts.Spark.Api\Bts.Spark.Api.csproj", "{8949AF88-F1D3-4BC4-827F-B088B555F7B9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Extensions.Hosting", "src\cs\Bts.Extensions.Hosting\Bts.Extensions.Hosting.csproj", "{37E4E890-D025-4729-90F9-6F95862F47BC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Spark.Sdk", "src\cs\Bts.Spark.Sdk\Bts.Spark.Sdk.csproj", "{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Spark.Sdk.Demo", "src\cs\Bts.Spark.Sdk.Demo\Bts.Spark.Sdk.Demo.csproj", "{FCFDBDBE-74B0-41C4-9011-C651B21056D4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Debug|Any CPU.ActiveCfg = Debug|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Debug|Any CPU.Build.0 = Debug|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Debug|x64.ActiveCfg = Debug|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Debug|x64.Build.0 = Debug|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Debug|x86.ActiveCfg = Debug|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Debug|x86.Build.0 = Debug|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Release|Any CPU.ActiveCfg = Release|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Release|Any CPU.Build.0 = Release|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Release|x64.ActiveCfg = Release|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Release|x64.Build.0 = Release|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Release|x86.ActiveCfg = Release|x64
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C}.Release|x86.Build.0 = Release|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Debug|Any CPU.ActiveCfg = Debug|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Debug|Any CPU.Build.0 = Debug|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Debug|x64.ActiveCfg = Debug|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Debug|x64.Build.0 = Debug|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Debug|x86.ActiveCfg = Debug|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Debug|x86.Build.0 = Debug|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Release|Any CPU.ActiveCfg = Release|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Release|Any CPU.Build.0 = Release|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Release|x64.ActiveCfg = Release|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Release|x64.Build.0 = Release|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Release|x86.ActiveCfg = Release|x64
{8949AF88-F1D3-4BC4-827F-B088B555F7B9}.Release|x86.Build.0 = Release|x64
{37E4E890-D025-4729-90F9-6F95862F47BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Debug|x64.ActiveCfg = Debug|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Debug|x64.Build.0 = Debug|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Debug|x86.ActiveCfg = Debug|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Debug|x86.Build.0 = Debug|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Release|Any CPU.Build.0 = Release|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Release|x64.ActiveCfg = Release|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Release|x64.Build.0 = Release|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Release|x86.ActiveCfg = Release|Any CPU
{37E4E890-D025-4729-90F9-6F95862F47BC}.Release|x86.Build.0 = Release|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Debug|x64.ActiveCfg = Debug|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Debug|x64.Build.0 = Debug|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Debug|x86.ActiveCfg = Debug|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Debug|x86.Build.0 = Debug|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Release|Any CPU.Build.0 = Release|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Release|x64.ActiveCfg = Release|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Release|x64.Build.0 = Release|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Release|x86.ActiveCfg = Release|Any CPU
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579}.Release|x86.Build.0 = Release|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Debug|x64.ActiveCfg = Debug|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Debug|x64.Build.0 = Debug|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Debug|x86.ActiveCfg = Debug|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Debug|x86.Build.0 = Debug|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Release|Any CPU.Build.0 = Release|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Release|x64.ActiveCfg = Release|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Release|x64.Build.0 = Release|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Release|x86.ActiveCfg = Release|Any CPU
{FCFDBDBE-74B0-41C4-9011-C651B21056D4}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{E3BF9514-CB1A-4E07-A8DD-73300FD9726C} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
{8949AF88-F1D3-4BC4-827F-B088B555F7B9} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
{37E4E890-D025-4729-90F9-6F95862F47BC} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
{A5FF3FAF-43CB-496B-AF4B-F61EFD645579} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
{FCFDBDBE-74B0-41C4-9011-C651B21056D4} = {C5A3B5EA-BE9F-76E5-E9B8-8A22B289B295}
EndGlobalSection
EndGlobal
+126 -58
View File
@@ -1,65 +1,133 @@
cmake_minimum_required(VERSION 3.5)
cmake_minimum_required(VERSION 3.12)
project(spark)
include(GNUInstallDirs)
include(${CMAKE_SOURCE_DIR}/cmake/GitVersion.cmake)
set(CMAKE_CXX_STANDARD 20)
get_version_from_git()
if(WIN32)
set(platform "windows")
else()
set(platform "linux")
endif()
set(
EXTERNALS_ROOT
"${CMAKE_SOURCE_DIR}/externals/${platform}"
CACHE
STRING
"External dependencies root folder (should contain folders: lib, bin, include")
# SHARED_MEMORY_PREFIX serves as a kind of namespace so multiple applications
# can run simultaneously without fighting over the same shm files (e.g., sparkd,
# api server, etc.).
set(SHARED_MEMORY_PREFIX "\${BTS_SHARED_MEMORY_PREFIX}" CACHE STRING "Prefix to use when creating shared memory files")
set(EXTERNALS_BIN "${EXTERNALS_ROOT}/bin")
set(EXTERNALS_INCLUDE "${EXTERNALS_ROOT}/include")
set(EXTERNALS_LIB "${EXTERNALS_ROOT}/lib/$<CONFIG>")
set(BUILD_DOCS OFF CACHE BOOL "Build documentation")
set(BUILD_SDK OFF CACHE BOOL "Build the sdk")
set(EXPORT_MD_CONSUMER OFF CACHE BOOL "Export (extern) C functions for MD consumer interop")
if (WIN32)
set (platform "windows")
else ()
set (platform "linux")
endif ()
set(BUILD_SPARKD OFF CACHE BOOL "Build sparkd")
set(BUILD_ADMIN_WEB_APP OFF CACHE BOOL "Build the Admin WebApp")
else()
set(BUILD_SPARKD ON CACHE BOOL "Build sparkd")
set(BUILD_ADMIN_WEB_APP ON CACHE BOOL "Build the Admin WebApp")
endif()
include_directories(BEFORE SYSTEM ${EXTERNALS_INCLUDE} ${EXTERNALS_ROOT}/include/zlib)
link_directories(${EXTERNALS_LIB})
add_compile_definitions(SHARED_MEMORY_PREFIX="${SHARED_MEMORY_PREFIX}")
if(DEFINED APP_DATA_DIR)
add_compile_definitions(APP_DATA_DIR="${APP_DATA_DIR}")
endif()
add_compile_definitions(EXPORT_MD_CONSUMER="${EXPORT_MD_CONSUMER}")
if(WIN32)
# subdirs
add_subdirectory(src/lib_spark)
else()
if(BUILD_SPARKD)
# Note: All macros that begin w/ 'CCAPI' are ccapi's macros (defined and/or
# read by their code). We override some below.
add_compile_definitions(SPARK_ENABLE_CCAPI)
# This allows us to override hardcoded exchange-urls with ones read from
# config (i.e., resolved at runtime rather than compile-time)
add_compile_definitions(CCAPI_EXPOSE_INTERNAL)
# Enable ccapi services
add_compile_definitions(CCAPI_ENABLE_SERVICE_MARKET_DATA)
add_compile_definitions(CCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT)
# Enable ccapi exchanges
add_compile_definitions(CCAPI_ENABLE_EXCHANGE_BINANCE)
add_compile_definitions(CCAPI_ENABLE_EXCHANGE_BINANCE_COIN_FUTURES)
add_compile_definitions(CCAPI_ENABLE_EXCHANGE_BINANCE_US)
add_compile_definitions(CCAPI_ENABLE_EXCHANGE_BINANCE_USDS_FUTURES)
add_compile_definitions(CCAPI_ENABLE_EXCHANGE_COINBASE)
add_compile_definitions(CCAPI_ENABLE_EXCHANGE_DERIBIT)
add_compile_definitions(CCAPI_ENABLE_EXCHANGE_OKX)
set (EXTERNALS_ROOT "${CMAKE_SOURCE_DIR}/externals/${platform}")
set (SPARK_PYTHON "${EXTERNALS_ROOT}/python")
set (SPARK_BIN "${EXTERNALS_ROOT}/bin")
set (SPARK_INCLUDE "${EXTERNALS_ROOT}/include")
set (SPARK_LIB "${EXTERNALS_ROOT}/lib/${CMAKE_BUILD_TYPE}")
set(CCAPI_LOG_LEVEL
"Warn"
CACHE STRING "<Fatal|Error|Warn|Info|Debug|Trace> Log level for ccapi")
string(TOUPPER "${CCAPI_LOG_LEVEL}" _ccapi_log_level_upper)
add_compile_definitions("CCAPI_ENABLE_LOG_${_ccapi_log_level_upper}")
include_directories (BEFORE SYSTEM ${SPARK_INCLUDE} ${EXTERNALS_ROOT}/include/zlib)
link_directories (${SPARK_LIB})
# ** Binance **
add_compile_definitions(CCAPI_BINANCE_URL_REST_BASE="https://api.binance.com")
add_compile_definitions(BINANCE_INSTRUMENTS_PATH="/api/v3/exchangeInfo")
add_compile_definitions(BINANCE_PRICE_STATS_PATH="/api/v3/ticker/24hr")
if (WIN32)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
/MP \
/WX /wd4251 /wd4250 /wd4251 /wd4244 /wd4267 /wd4355 /wd4275 /wd4345 \
/DCURL_STATICLIB \
/D_WINSOCK_DEPRECATED_NO_WARNINGS \
/D__TBB_NO_IMPLICIT_LINKAGE \
/DBOOST_ALL_NO_LIB \
/D_SCL_SECURE_NO_WARNINGS /D_CRT_SECURE_NO_WARNINGS /D_WIN32_WINNT=0x0600")
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF /LTCG")
add_subdirectory(src/lib)
else ()
# so that sparkd looks for libspark.so in its directory
set (CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set (CMAKE_INSTALL_RPATH ".")
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \
-fPIC -Wall -pedantic -Wextra -Werror \
-Wno-missing-braces -Wno-ignored-qualifiers \
--std=c++17 -fdiagnostics-color")
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -DNDEBUG -O3")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wno-undef")
add_subdirectory(src/server/sparkd)
add_subdirectory(src/lib)
add_subdirectory(src/web)
add_subdirectory(doc/user)
add_subdirectory(src/sdk)
add_subdirectory(src/data_files)
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/server
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/server
COMMAND ln ARGS -sf ${CMAKE_BINARY_DIR}/src/server/sparkd/sparkd ${CMAKE_BINARY_DIR}/server
COMMAND ln ARGS -sf ${CMAKE_BINARY_DIR}/web ${CMAKE_BINARY_DIR}/server
COMMAND ln ARGS -sf ${CMAKE_BINARY_DIR}/data_files ${CMAKE_BINARY_DIR}/server
COMMAND ln ARGS -sf ${CMAKE_BINARY_DIR}/src/lib/libspark.so ${CMAKE_BINARY_DIR}/server
COMMAND ln ARGS -sf ${EXTERNALS_ROOT}/lib/Release/libOnixS.IceImpactMulticastPriceFeedHandlerCpp.so.3.13.0.0 ${CMAKE_BINARY_DIR}/server
COMMAND ln ARGS -sf ${EXTERNALS_ROOT}/lib/Release/libACE-5.7.5.so ${CMAKE_BINARY_DIR}/server
COMMAND mkdir ARGS -p ${CMAKE_BINARY_DIR}/server/plugins
COMMENT "Creating server runtime layout"
DEPENDS sparkd data_files_dir)
add_custom_target(server_layout ALL DEPENDS ${CMAKE_BINARY_DIR}/server)
# ** Binance US **
add_compile_definitions(BINANCE_US_INSTRUMENTS_PATH="/api/v3/exchangeInfo")
add_compile_definitions(BINANCE_US_PRICE_STATS_PATH="/api/v3/ticker/24hr")
# ** Binance USDS Futures **
add_compile_definitions(CCAPI_BINANCE_USDS_FUTURES_URL_REST_BASE="https://fapi.binance.com")
add_compile_definitions(BINANCE_USDS_FUTURES_INSTRUMENTS_PATH="/fapi/v1/exchangeInfo")
add_compile_definitions(BINANCE_USDS_FUTURES_PRICE_STATS_PATH="/fapi/v1/ticker/24hr")
add_compile_definitions(BINANCE_USDS_FUTURES_USER_DATA_PATH="/api/v3/userDataStream")
# ** Binance Coin Futures **
add_compile_definitions(CCAPI_BINANCE_COIN_FUTURES_URL_REST_BASE="https://dapi.binance.com")
add_compile_definitions(BINANCE_COIN_FUTURES_INSTRUMENTS_PATH="/dapi/v1/exchangeInfo")
add_compile_definitions(BINANCE_COIN_FUTURES_PRICE_STATS_PATH="/dapi/v1/ticker/24hr")
# ** Deribit **
add_compile_definitions(DERIBIT_INSTRUMENT_PATH="/api/v2/public/get_instrument")
add_compile_definitions(DERIBIT_INSTRUMENTS_PATH="/api/v2/public/get_instruments")
add_compile_definitions(DERIBIT_COMBOS_PATH="/api/v2/public/get_combos")
add_compile_definitions(DERIBIT_TICKER_PATH="/api/v2/public/ticker")
add_compile_definitions(DERIBIT_CURRENCIES_METHOD="public/get_currencies")
add_compile_definitions(DERIBIT_INSTRUMENT_METHOD="public/get_instrument")
add_compile_definitions(DERIBIT_INSTRUMENTS_METHOD="public/get_instruments")
add_compile_definitions(DERIBIT_COMBO_DETAILS_METHOD="public/get_combo_details")
add_compile_definitions(DERIBIT_COMBOS_METHOD="public/get_combos")
# ** Okx **
add_compile_definitions(OKX_INSTRUMENTS_PATH="/api/v5/public/instruments")
add_compile_definitions(OKX_UNDERLYING_PATH="/api/v5/public/underlying")
endif()
# subdirs
add_subdirectory(src/lib_spark)
if (BUILD_SPARKD)
add_subdirectory(src/lib_python_interop)
add_subdirectory(src/lib_onixs_fix)
add_subdirectory(src/lib_binance)
add_subdirectory(src/lib_okx_execution)
add_subdirectory(src/app_sparkd)
add_subdirectory(src/data_files)
endif()
if (BUILD_ADMIN_WEB_APP)
add_subdirectory(src/Spark.Admin.WebApp)
endif()
if(BUILD_DOCS)
add_subdirectory(doc/user)
endif()
if(BUILD_SDK)
add_subdirectory(src/sdk)
endif()
endif()
+327
View File
@@ -0,0 +1,327 @@
{
"version": 4,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
"patch": 0
},
"configurePresets": [
{
"name": "spark-base",
"hidden": true,
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_CXX_STANDARD": "20",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install/${presetName}",
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake",
"CONFIG_DEFAULTS_PATH": "spark/config/profiles/default/*.conf",
"EXPORT_MD_CONSUMER": {
"type": "BOOL",
"value": "ON"
}
}
},
{
"name": "spark-windows",
"inherits": "spark-base",
"displayName": "Spark",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
"generator": "Visual Studio 17 2022",
"environment": {
"SPARK_CMAKE_CXX_FLAGS": "/MP /WX /wd4250 /wd4251 /wd4244 /wd4267 /wd4355 /wd4275 /wd4345 /bigobj /EHsc /DCURL_STATICLIB /D_WINSOCK_DEPRECATED_NO_WARNINGS /D__TBB_NO_IMPLICIT_LINKAGE /DBOOST_ALL_NO_LIB /std:c++20 /D_SCL_SECURE_NO_WARNINGS /D_CRT_SECURE_NO_WARNINGS /D_WIN32_WINNT=0x0600"
},
"cacheVariables": {
"CMAKE_CXX_FLAGS": "$env{SPARK_CMAKE_CXX_FLAGS}",
"CMAKE_CXX_FLAGS_DEBUG": "$env{SPARK_CMAKE_CXX_FLAGS} /MTd",
"CMAKE_CXX_FLAGS_RELEASE": "$env{SPARK_CMAKE_CXX_FLAGS} /MT",
"CMAKE_SHARED_LINKER_FLAGS_DEBUG": "/DEBUG",
"CMAKE_SHARED_LINKER_FLAGS_RELEASE": "/OPT:REF /OPT:ICF /LTCG",
"EXTERNALS_ROOT": "${sourceDir}/externals/windows"
}
},
{
"name": "sparkd",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Linux"
},
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"platform": "",
"CMAKE_BUILD_WITH_INSTALL_RPATH": {
"type": "BOOL",
"value": "OFF"
},
"CMAKE_CXX_STANDARD": "20",
"CMAKE_INSTALL_RPATH": ".",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/install/${presetName}",
"CMAKE_PREFIX_PATH": "${sourceDir}/cmake/;${sourceDir}/.venv/lib/python3.10/site-packages/pybind11/share/cmake/pybind11",
"CMAKE_EXE_LINKER_FLAGS": "-Wno-undef",
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/vcpkg/scripts/buildsystems/vcpkg.cmake",
"DATABENTO_USE_EXTERNAL_JSON": {
"type": "BOOL",
"value": "ON"
},
"EXTERNALS_ROOT": "${sourceDir}/externals/linux",
"BUILD_SDK": {
"type": "BOOL",
"value": "OFF"
},
"BUILD_ADMIN_WEB_APP": {
"type": "BOOL",
"value": "ON"
}
}
},
{
"name": "sparkd-debug",
"inherits": "sparkd",
"hidden": true,
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_EXPORT_COMPILE_COMMANDS": {
"type": "BOOL",
"value": "ON"
},
"CCAPI_LOG_LEVEL": "Info",
"CONFIG_DEFAULTS_PATH": "spark/config/profiles/md_dev/*.conf;spark/config/profiles/default/*.conf"
}
},
{
"name": "sparkd-release",
"inherits": "sparkd",
"hidden": true,
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CCAPI_LOG_LEVEL": "Warn",
"CONFIG_DEFAULTS_PATH": "spark/config/profiles/md_prod/*.conf;spark/config/profiles/default/*.conf"
}
},
{
"name": "sparkd-debug-clang",
"inherits": "sparkd-debug",
"displayName": "Sparkd (Debug | Clang)",
"description": "Debug build compiled w/ clang",
"cacheVariables": {
"CMAKE_C_COMPILER": "clang",
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_CXX_FLAGS_DEBUG": "-g -fPIC -Wall -pedantic -Wextra -Werror -Wno-missing-braces -Wno-ignored-qualifiers --std=c++20 -fdiagnostics-color -DDEBUG"
}
},
{
"name": "sparkd-debug-gcc",
"inherits": "sparkd-debug",
"displayName": "Sparkd (Debug | Gcc)",
"description": "Debug build compiled w/ gcc",
"cacheVariables": {
"CMAKE_C_COMPILER": "gcc",
"CMAKE_CXX_COMPILER": "g++",
"CMAKE_CXX_FLAGS_DEBUG": "-g -fPIC -Wall -pedantic -Wextra -Werror -Wno-missing-braces -Wno-ignored-qualifiers --std=c++20 -fdiagnostics-color -Wno-stringop-overread -DDEBUG"
}
},
{
"name": "sparkd-release-clang",
"inherits": "sparkd-release",
"displayName": "Sparkd (Release | Clang)",
"description": "Release build compiled w/ clang",
"cacheVariables": {
"CMAKE_C_COMPILER": "clang",
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_CXX_FLAGS_RELEASE": "-fPIC -Wall -pedantic -Wextra -Werror -Wno-missing-braces -Wno-ignored-qualifiers --std=c++20 -fdiagnostics-color -fno-omit-frame-pointer -DNDEBUG -O3"
}
},
{
"name": "sparkd-release-gcc",
"inherits": "sparkd-release",
"displayName": "Sparkd (Release | Gcc)",
"description": "Release build compiled w/ gcc",
"cacheVariables": {
"CMAKE_C_COMPILER": "gcc",
"CMAKE_CXX_COMPILER": "g++",
"CMAKE_CXX_FLAGS_RELEASE": "-fPIC -Wall -pedantic -Wextra -Werror -Wno-missing-braces -Wno-ignored-qualifiers -Wno-stringop-overflow --std=c++20 -fdiagnostics-color -Wno-stringop-overread -Wno-maybe-uninitialized -fno-omit-frame-pointer -DNDEBUG -O3"
}
},
{
"name": "spark-linux",
"inherits": "spark-base",
"displayName": "Spark",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Linux"
},
"generator": "Ninja Multi-Config",
"cacheVariables": {
"platform": "linux",
"BUILD_ADMIN_WEB_APP": {
"type": "BOOL",
"value": "OFF"
},
"BUILD_SPARKD": {
"type": "BOOL",
"value": "OFF"
},
"CMAKE_BUILD_WITH_INSTALL_RPATH": {
"type": "BOOL",
"value": "OFF"
},
"CMAKE_C_COMPILER": "clang",
"CMAKE_CXX_COMPILER": "clang++",
"CMAKE_CXX_FLAGS_DEBUG": "-g -fPIC -Wall -pedantic -Wextra -Werror -Wno-missing-braces -Wno-ignored-qualifiers --std=c++20 -fdiagnostics-color -DDEBUG",
"CMAKE_CXX_FLAGS_RELEASE": "-fPIC -Wall -pedantic -Wextra -Werror -Wno-missing-braces -Wno-ignored-qualifiers --std=c++20 -fdiagnostics-color -fno-omit-frame-pointer -DNDEBUG -O3",
"CMAKE_EXE_LINKER_FLAGS": "-Wno-undef",
"CMAKE_EXPORT_COMPILE_COMMANDS": {
"type": "BOOL",
"value": "ON"
},
"CMAKE_INSTALL_RPATH": ".",
"CMAKE_PREFIX_PATH": "${sourceDir}/cmake/;${sourceDir}/.venv/lib/python3.10/site-packages/pybind11/share/cmake/pybind11",
"DATABENTO_USE_EXTERNAL_JSON": {
"type": "BOOL",
"value": "ON"
},
"EXTERNALS_ROOT": "${sourceDir}/externals/linux"
}
},
{
"name": "sparkd-publish",
"inherits": "sparkd-release-gcc",
"displayName": "Publish",
"description": "Production build compiled w/ gcc and ready to ship"
},
{
"name": "sparkd-ccapi-diag",
"inherits": "sparkd-debug-clang",
"displayName": "Debug (ccapi diag)",
"description": "Debug build w/ ccapi log level 'Trace'",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CCAPI_LOG_LEVEL": "Trace"
}
}
],
"buildPresets": [
{
"name": "spark-windows",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
"hidden": true,
"configurePreset": "spark-windows"
},
{
"name": "spark-windows-debug",
"displayName": "Spark (Debug)",
"inherits": "spark-windows",
"configuration": "Debug"
},
{
"name": "spark-windows-release",
"displayName": "Spark (Release)",
"inherits": "spark-windows",
"configuration": "Release"
},
{
"name": "sparkd",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Linux"
},
"hidden": true
},
{
"name": "sparkd-debug-clang",
"configurePreset": "sparkd-debug-clang",
"displayName": "Sparkd (Debug | Clang)",
"inherits": "sparkd"
},
{
"name": "sparkd-debug-gcc",
"configurePreset": "sparkd-debug-gcc",
"displayName": "Sparkd (Debug | Gcc)",
"inherits": "sparkd"
},
{
"name": "sparkd-release-clang",
"configurePreset": "sparkd-release-clang",
"displayName": "Sparkd (Release | Clang)",
"inherits": "sparkd"
},
{
"name": "sparkd-release-gcc",
"configurePreset": "sparkd-release-gcc",
"displayName": "Sparkd (Release | Gcc)",
"inherits": "sparkd"
},
{
"name": "spark-linux",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Linux"
},
"hidden": true,
"configurePreset": "spark-linux"
},
{
"name": "spark-linux-debug",
"inherits": "spark-linux",
"displayName": "Spark (Linux | Debug)",
"configuration": "Debug"
},
{
"name": "spark-linux-release",
"inherits": "spark-linux",
"displayName": "Spark (Linux | Release)",
"configuration": "Release"
},
{
"name": "sparkd-publish",
"configurePreset": "sparkd-publish",
"displayName": "Publish",
"inherits": "sparkd",
"targets": "install"
},
{
"name": "sparkd-ccapi-diag",
"configurePreset": "sparkd-ccapi-diag",
"displayName": "Debug (ccapi diag)",
"inherits": "sparkd"
}
]
}
+602
View File
@@ -0,0 +1,602 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32922.545
MinimumVisualStudioVersion = 15.0.26124.0
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bts.Spark.Api", "src\cs\Bts.Spark.Api\Bts.Spark.Api.csproj", "{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bts.Spark.Core", "src\cs\Bts.Spark.Core\Bts.Spark.Core.csproj", "{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_websocket", "src\client\spark_websocket\spark_websocket.csproj", "{3201359D-C071-4089-9EDE-B04D759F1508}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_api_server", "src\client\spark_api_server\spark_api_server.csproj", "{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "spark_test", "src\client\spark_test\spark_test.csproj", "{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spark.Console", "src\client\Spark.Console\Spark.Console.csproj", "{89D666E6-B500-498F-B026-4D167F68ADFC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{267F81EF-A8AB-49FD-9F56-D7EC3C1F7C7C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataStreamSuite", "DataStreamSuite", "{C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataStreamCore", "src\DataStreamSuite\DataStreamCore\DataStreamCore.csproj", "{EF26A475-6101-4C9C-A717-D60BB92A2302}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharedStreams", "src\DataStreamSuite\SharedStreams\SharedStreams.csproj", "{911B08A3-515A-441D-84C8-8A43740B5FC1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PubSub", "src\DataStreamSuite\PubSub\PubSub.csproj", "{14140310-2233-430A-821B-F3058A25234B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BaseUtilities", "src\DataStreamSuite\BaseUtilities\BaseUtilities.csproj", "{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExpressionCore", "src\DataStreamSuite\ExpressionCore\ExpressionCore.csproj", "{6F22DB96-6EAB-4034-99D9-287021C36F01}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArithmeticExpressions", "src\DataStreamSuite\ArithmeticExpressions\ArithmeticExpressions.csproj", "{A5C33956-A41F-49B3-A41D-1082CBA59D02}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataStreamExpressions", "src\DataStreamSuite\DataStreamExpressions\DataStreamExpressions.csproj", "{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.ColumnSortExpressions", "src\DataStreamSuite\Bts.ColumnSortExpressions\Bts.ColumnSortExpressions.csproj", "{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColumnMapExpressions", "src\DataStreamSuite\ColumnMapExpressions\ColumnMapExpressions.csproj", "{B945A183-2174-4ACB-B289-8A5C546656FE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooleanExpressions", "src\DataStreamSuite\BooleanExpressions\BooleanExpressions.csproj", "{9F6D7DE8-185B-4C1D-B809-3314D092DF28}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.ColumnExpressions", "src\DataStreamSuite\Bts.ColumnExpressions\Bts.ColumnExpressions.csproj", "{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataStream", "src\DataStreamSuite\DataStream\DataStream.csproj", "{39AEA075-6457-46C0-8821-1158BE6EFA57}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Extensions.Hosting", "src\cs\Bts.Extensions.Hosting\Bts.Extensions.Hosting.csproj", "{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cs", "cs", "{385C4948-E080-56A6-E29E-8B0F4913175C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Net", "src\cs\Bts.Net\Bts.Net.csproj", "{43FB297B-7A4D-4835-A878-E6DF345B580C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.IO.Compression", "src\cs\Bts.IO.Compression\Bts.IO.Compression.csproj", "{BC277499-8215-4F9F-B9AB-07B6391110BF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
MinSizeRel|x64 = MinSizeRel|x64
MinSizeRel|Any CPU = MinSizeRel|Any CPU
MinSizeRel|x86 = MinSizeRel|x86
Release|x64 = Release|x64
Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
RelWithDebInfo|x64 = RelWithDebInfo|x64
RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU
RelWithDebInfo|x86 = RelWithDebInfo|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x64.ActiveCfg = Debug|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x64.Build.0 = Debug|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x86.ActiveCfg = Debug|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x86.Build.0 = Debug|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x64.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x64.Build.0 = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x64.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x64.Build.0 = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|Any CPU.Build.0 = Release|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x86.ActiveCfg = Release|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x86.Build.0 = Release|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x64.Build.0 = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x64.ActiveCfg = Debug|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x64.Build.0 = Debug|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x86.ActiveCfg = Debug|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x86.Build.0 = Debug|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x64.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x64.Build.0 = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x64.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x64.Build.0 = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|Any CPU.Build.0 = Release|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x86.ActiveCfg = Release|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x86.Build.0 = Release|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x64.Build.0 = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x64.ActiveCfg = Debug|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x64.Build.0 = Debug|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x86.ActiveCfg = Debug|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x86.Build.0 = Debug|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x64.ActiveCfg = Debug|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x64.Build.0 = Debug|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x64.ActiveCfg = Release|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x64.Build.0 = Release|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|Any CPU.Build.0 = Release|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x86.ActiveCfg = Release|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x86.Build.0 = Release|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x64.Build.0 = Release|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x64.ActiveCfg = Debug|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x64.Build.0 = Debug|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x86.ActiveCfg = Debug|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x86.Build.0 = Debug|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x64.ActiveCfg = Debug|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x64.Build.0 = Debug|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x64.ActiveCfg = Release|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x64.Build.0 = Release|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|Any CPU.Build.0 = Release|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x86.ActiveCfg = Release|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x86.Build.0 = Release|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x64.Build.0 = Release|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Debug|x64.ActiveCfg = Debug|x64
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Debug|x64.Build.0 = Debug|x64
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Debug|x86.ActiveCfg = Debug|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Debug|x86.Build.0 = Debug|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.MinSizeRel|x64.ActiveCfg = Debug|x64
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.MinSizeRel|x64.Build.0 = Debug|x64
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Release|x64.ActiveCfg = Release|x64
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Release|x64.Build.0 = Release|x64
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Release|Any CPU.Build.0 = Release|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Release|x86.ActiveCfg = Release|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.Release|x86.Build.0 = Release|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.RelWithDebInfo|x64.ActiveCfg = Debug|x64
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.RelWithDebInfo|x64.Build.0 = Debug|x64
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{EFC9FC4D-E92B-4C6D-9B97-26D38EAA118D}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.Debug|x64.ActiveCfg = Debug|x64
{89D666E6-B500-498F-B026-4D167F68ADFC}.Debug|x64.Build.0 = Debug|x64
{89D666E6-B500-498F-B026-4D167F68ADFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.Debug|x86.ActiveCfg = Debug|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.Debug|x86.Build.0 = Debug|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.MinSizeRel|x64.ActiveCfg = Debug|x64
{89D666E6-B500-498F-B026-4D167F68ADFC}.MinSizeRel|x64.Build.0 = Debug|x64
{89D666E6-B500-498F-B026-4D167F68ADFC}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.Release|x64.ActiveCfg = Release|x64
{89D666E6-B500-498F-B026-4D167F68ADFC}.Release|x64.Build.0 = Release|x64
{89D666E6-B500-498F-B026-4D167F68ADFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.Release|Any CPU.Build.0 = Release|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.Release|x86.ActiveCfg = Release|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.Release|x86.Build.0 = Release|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.RelWithDebInfo|x64.ActiveCfg = Debug|x64
{89D666E6-B500-498F-B026-4D167F68ADFC}.RelWithDebInfo|x64.Build.0 = Debug|x64
{89D666E6-B500-498F-B026-4D167F68ADFC}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{89D666E6-B500-498F-B026-4D167F68ADFC}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Debug|x64.ActiveCfg = Debug|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Debug|x64.Build.0 = Debug|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Debug|x86.ActiveCfg = Debug|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Debug|x86.Build.0 = Debug|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Release|x64.ActiveCfg = Release|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Release|x64.Build.0 = Release|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Release|Any CPU.Build.0 = Release|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Release|x86.ActiveCfg = Release|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.Release|x86.Build.0 = Release|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{EF26A475-6101-4C9C-A717-D60BB92A2302}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Debug|x64.ActiveCfg = Debug|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Debug|x64.Build.0 = Debug|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Debug|x86.ActiveCfg = Debug|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Debug|x86.Build.0 = Debug|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Release|x64.ActiveCfg = Release|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Release|x64.Build.0 = Release|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Release|Any CPU.Build.0 = Release|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Release|x86.ActiveCfg = Release|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.Release|x86.Build.0 = Release|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{911B08A3-515A-441D-84C8-8A43740B5FC1}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Debug|x64.ActiveCfg = Debug|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Debug|x64.Build.0 = Debug|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Debug|x86.ActiveCfg = Debug|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Debug|x86.Build.0 = Debug|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Release|x64.ActiveCfg = Release|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Release|x64.Build.0 = Release|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Release|Any CPU.Build.0 = Release|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Release|x86.ActiveCfg = Release|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.Release|x86.Build.0 = Release|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{14140310-2233-430A-821B-F3058A25234B}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Debug|x64.ActiveCfg = Debug|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Debug|x64.Build.0 = Debug|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Debug|x86.ActiveCfg = Debug|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Debug|x86.Build.0 = Debug|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Release|x64.ActiveCfg = Release|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Release|x64.Build.0 = Release|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Release|Any CPU.Build.0 = Release|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Release|x86.ActiveCfg = Release|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.Release|x86.Build.0 = Release|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Debug|x64.ActiveCfg = Debug|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Debug|x64.Build.0 = Debug|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Debug|x86.ActiveCfg = Debug|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Debug|x86.Build.0 = Debug|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Release|x64.ActiveCfg = Release|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Release|x64.Build.0 = Release|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Release|Any CPU.Build.0 = Release|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Release|x86.ActiveCfg = Release|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.Release|x86.Build.0 = Release|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{6F22DB96-6EAB-4034-99D9-287021C36F01}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Debug|x64.ActiveCfg = Debug|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Debug|x64.Build.0 = Debug|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Debug|x86.ActiveCfg = Debug|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Debug|x86.Build.0 = Debug|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Release|x64.ActiveCfg = Release|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Release|x64.Build.0 = Release|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Release|Any CPU.Build.0 = Release|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Release|x86.ActiveCfg = Release|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.Release|x86.Build.0 = Release|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{A5C33956-A41F-49B3-A41D-1082CBA59D02}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Debug|x64.ActiveCfg = Debug|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Debug|x64.Build.0 = Debug|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Debug|x86.ActiveCfg = Debug|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Debug|x86.Build.0 = Debug|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Release|x64.ActiveCfg = Release|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Release|x64.Build.0 = Release|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Release|Any CPU.Build.0 = Release|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Release|x86.ActiveCfg = Release|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.Release|x86.Build.0 = Release|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Debug|x64.ActiveCfg = Debug|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Debug|x64.Build.0 = Debug|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Debug|x86.ActiveCfg = Debug|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Debug|x86.Build.0 = Debug|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Release|x64.ActiveCfg = Release|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Release|x64.Build.0 = Release|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Release|Any CPU.Build.0 = Release|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Release|x86.ActiveCfg = Release|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.Release|x86.Build.0 = Release|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Debug|x64.ActiveCfg = Debug|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Debug|x64.Build.0 = Debug|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Debug|x86.ActiveCfg = Debug|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Debug|x86.Build.0 = Debug|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Release|x64.ActiveCfg = Release|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Release|x64.Build.0 = Release|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Release|Any CPU.Build.0 = Release|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Release|x86.ActiveCfg = Release|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.Release|x86.Build.0 = Release|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{B945A183-2174-4ACB-B289-8A5C546656FE}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Debug|x64.ActiveCfg = Debug|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Debug|x64.Build.0 = Debug|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Debug|x86.ActiveCfg = Debug|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Debug|x86.Build.0 = Debug|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Release|x64.ActiveCfg = Release|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Release|x64.Build.0 = Release|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Release|Any CPU.Build.0 = Release|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Release|x86.ActiveCfg = Release|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.Release|x86.Build.0 = Release|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{9F6D7DE8-185B-4C1D-B809-3314D092DF28}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Debug|x64.ActiveCfg = Debug|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Debug|x64.Build.0 = Debug|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Debug|x86.ActiveCfg = Debug|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Debug|x86.Build.0 = Debug|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Release|x64.ActiveCfg = Release|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Release|x64.Build.0 = Release|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Release|Any CPU.Build.0 = Release|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Release|x86.ActiveCfg = Release|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.Release|x86.Build.0 = Release|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Debug|x64.ActiveCfg = Debug|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Debug|x64.Build.0 = Debug|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Debug|Any CPU.Build.0 = Debug|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Debug|x86.ActiveCfg = Debug|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Debug|x86.Build.0 = Debug|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Release|x64.ActiveCfg = Release|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Release|x64.Build.0 = Release|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Release|Any CPU.Build.0 = Release|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Release|x86.ActiveCfg = Release|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.Release|x86.Build.0 = Release|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{39AEA075-6457-46C0-8821-1158BE6EFA57}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Debug|x64.ActiveCfg = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Debug|x64.Build.0 = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Debug|x86.ActiveCfg = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Debug|x86.Build.0 = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.MinSizeRel|x86.Build.0 = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Release|x64.ActiveCfg = Release|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Release|x64.Build.0 = Release|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Release|Any CPU.Build.0 = Release|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Release|x86.ActiveCfg = Release|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.Release|x86.Build.0 = Release|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
{F3DC52D7-8C59-4EC0-86D9-0E5732EAFCF7}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Debug|x64.ActiveCfg = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Debug|x64.Build.0 = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Debug|x86.ActiveCfg = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Debug|x86.Build.0 = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.MinSizeRel|x86.Build.0 = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Release|x64.ActiveCfg = Release|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Release|x64.Build.0 = Release|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Release|Any CPU.Build.0 = Release|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Release|x86.ActiveCfg = Release|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.Release|x86.Build.0 = Release|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
{43FB297B-7A4D-4835-A878-E6DF345B580C}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Debug|x64.ActiveCfg = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Debug|x64.Build.0 = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Debug|x86.ActiveCfg = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Debug|x86.Build.0 = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.MinSizeRel|x86.Build.0 = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Release|x64.ActiveCfg = Release|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Release|x64.Build.0 = Release|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Release|Any CPU.Build.0 = Release|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Release|x86.ActiveCfg = Release|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.Release|x86.Build.0 = Release|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
{BC277499-8215-4F9F-B9AB-07B6391110BF}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{C09ED521-D2DF-40BC-A76F-EB3CB870B2F6} = {267F81EF-A8AB-49FD-9F56-D7EC3C1F7C7C}
{EF26A475-6101-4C9C-A717-D60BB92A2302} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{911B08A3-515A-441D-84C8-8A43740B5FC1} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{14140310-2233-430A-821B-F3058A25234B} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{43146EA8-6FCC-46B8-88B0-42F9BB5E6E0A} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{6F22DB96-6EAB-4034-99D9-287021C36F01} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{A5C33956-A41F-49B3-A41D-1082CBA59D02} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{2FE745C3-1EDF-4421-8CD7-A63EE0C1AE43} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{FDA791E0-2B91-4AD5-B91D-CF920A4C4E38} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{B945A183-2174-4ACB-B289-8A5C546656FE} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{9F6D7DE8-185B-4C1D-B809-3314D092DF28} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{6BD3F6D8-B6FC-44E8-B8FE-06352F638B9B} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{39AEA075-6457-46C0-8821-1158BE6EFA57} = {C09ED521-D2DF-40BC-A76F-EB3CB870B2F6}
{385C4948-E080-56A6-E29E-8B0F4913175C} = {267F81EF-A8AB-49FD-9F56-D7EC3C1F7C7C}
{43FB297B-7A4D-4835-A878-E6DF345B580C} = {385C4948-E080-56A6-E29E-8B0F4913175C}
{BC277499-8215-4F9F-B9AB-07B6391110BF} = {385C4948-E080-56A6-E29E-8B0F4913175C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {422D1620-0166-4C26-9A81-CA8A2EB1AB58}
EndGlobalSection
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
EndGlobal
+7
View File
@@ -0,0 +1,7 @@
include_guard(GLOBAL)
macro(export_to_parent)
foreach(var IN ITEMS ${ARGN})
set(${var} ${${var}} PARENT_SCOPE)
endforeach()
endmacro()
+48
View File
@@ -0,0 +1,48 @@
include_guard(GLOBAL)
function(get_version_from_git)
find_package(Git QUIET)
if(NOT Git_FOUND)
message(WARNING "Git not found")
return()
endif()
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --tags --always
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_TAG
OUTPUT_STRIP_TRAILING_WHITESPACE
RESULT_VARIABLE GIT_RESULT
)
if(NOT GIT_RESULT EQUAL 0)
message(WARNING "Failed to get git tag")
return()
endif()
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short=7 HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_COMMIT_SHORT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(PROJECT_VERSION_BUILD_METADATA ${GIT_COMMIT_SHORT_HASH})
set(PROJECT_VERSION_BUILD_METADATA ${GIT_COMMIT_SHORT_HASH} PARENT_SCOPE)
string(REGEX REPLACE "^v" "" CLEAN_TAG "${GIT_TAG}")
if(CLEAN_TAG MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-.*)?$")
set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1})
set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE)
set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2})
set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE)
set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_3})
set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE)
set(PROJECT_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
set(PROJECT_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" PARENT_SCOPE)
set(PROJECT_VERSION_FULL "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}+${GIT_COMMIT_SHORT_HASH}")
set(PROJECT_VERSION_FULL "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}+${GIT_COMMIT_SHORT_HASH}" PARENT_SCOPE)
else()
message(WARNING "Tag '${CLEAN_TAG}' does not match semver format")
endif()
endfunction()
+142
View File
@@ -0,0 +1,142 @@
include_guard(DIRECTORY)
include(${CMAKE_SOURCE_DIR}/cmake/ExportToParent.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/InstallBasic.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/ProtobufGenerateCpp.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/SetFirstDefined.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/safe_dep_glob.cmake)
function(init_library)
set(_options SHARED STATIC)
set(_one_value_args
NAME
SOURCE_DIR
INCLUDE_DIR
)
set(_multi_value_args)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
if (_ARGS_SHARED AND _ARGS_STATIC)
message(FATAL_ERROR "Invalid args passed to init_library: cannot specify STATIC and SHARED")
endif()
set_first_defined(_name _ARGS_NAME PROJECT_NAME)
set_first_defined(_source_dir _ARGS_SOURCE_DIR _name)
set_first_defined(_include_dir _ARGS_INCLUDE_DIR _source_dir)
# Cpp sources
file(
GLOB_RECURSE ${_name}_SOURCES
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
${_source_dir}/*.cpp
)
# Note: cpp files inside 'tests' dir(s) are considered tests.
# Remove tests from main sources, and add them to test sources
foreach(item ${${_name}_SOURCES})
if(${item} MATCHES "tests/.*\.cpp$")
list(APPEND ${_name}_TEST_SOURCES ${item})
endif()
endforeach()
foreach(item ${${_name}_TEST_SOURCES})
list(REMOVE_ITEM ${_name}_SOURCES ${item})
endforeach()
# Proto sources
file(
GLOB_RECURSE ${_name}_PROTO_SOURCES
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
${_source_dir}/protobufs/*.proto
)
update_deps_file("${${_name}_PROTO_SOURCES};")
protobuf_generate_cpp(
CXX_SOURCES ${_name}_CXX_PROTO_SOURCES
CXX_HEADERS ${_name}_CXX_PROTO_HEADERS
CXX_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}
PROTO_INCLUDE_DIRS
${EXTERNALS_INCLUDE}
${CMAKE_CURRENT_SOURCE_DIR}
PROTO_SOURCES
${${_name}_PROTO_SOURCES}
)
export_to_parent(
${_name}_SOURCES
${_name}_TEST_SOURCES
${_name}_PROTO_SOURCES
${_name}_CXX_PROTO_SOURCES
${_name}_CXX_PROTO_HEADERS
)
# Add main lib
if (_ARGS_STATIC)
add_library(${_name} STATIC ${${_name}_SOURCES} ${${_name}_CXX_PROTO_SOURCES})
elseif(_ARGS_SHARED)
add_library(${_name} SHARED ${${_name}_SOURCES} ${${_name}_CXX_PROTO_SOURCES})
else()
add_library(${_name} ${${_name}_SOURCES} ${${_name}_CXX_PROTO_SOURCES})
endif()
target_include_directories(
${_name}
SYSTEM
BEFORE
PUBLIC
$<BUILD_INTERFACE:${EXTERNALS_ROOT}/include>
$<BUILD_INTERFACE:${EXTERNALS_ROOT}/include/zlib>
)
target_include_directories(
${_name}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
# Include protos (if any)
if (${_name}_PROTO_SOURCES)
target_include_directories(
${_name}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
)
endif()
target_link_directories(
${_name}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${EXTERNALS_ROOT}/lib/$<CONFIG>>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_LIBDIR}>
)
# Install main lib
foreach(_hdr ${${_name}_CXX_PROTO_HEADERS})
file(RELATIVE_PATH _relative_path ${CMAKE_CURRENT_BINARY_DIR} ${_hdr})
install(FILES ${_hdr} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${_relative_path})
endforeach()
install_basic(
NAME ${_name}
INCLUDE_DIR ${_include_dir}
)
# Add tests executable (if there are any)
if (${_name}_TEST_SOURCES AND NOT WIN32)
add_executable(${_name}-tests ${${_name}_TEST_SOURCES})
get_target_property(_lib_type ${_name} TYPE)
if (_lib_type STREQUAL "SHARED_LIBRARY")
# Set RPATH so the tests exe knows where to find the shared lib.
set_target_properties(
${_name}-tests
PROPERTIES
BUILD_RPATH "$ORIGIN"
INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}"
)
endif()
# Link main lib
target_link_directories(
${_name}-tests
PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_LIBDIR}>
)
target_link_libraries(${_name}-tests PRIVATE ${_name})
# Catch2
find_package(Catch2 CONFIG REQUIRED COMPONENTS Catch2WithMain)
target_link_libraries(${_name}-tests PRIVATE Catch2::Catch2WithMain)
endif()
endfunction()
+71
View File
@@ -0,0 +1,71 @@
include_guard(DIRECTORY)
include(GNUInstallDirs)
include(${CMAKE_SOURCE_DIR}/cmake/ExportToParent.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/SetFirstDefined.cmake)
function(init_python_module)
set(_options)
set(_one_value_args
NAME
)
set(_multi_value_args
SOURCES
)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
set_first_defined(_name _ARGS_NAME PROJECT_NAME)
set_first_defined(_sources _ARGS_SOURCES ${_name}_SOURCES)
set(module_proj ${_name}_module)
set(${module_proj}_SOURCES ${_sources})
pybind11_add_module(${module_proj} SHARED ${_sources})
target_link_libraries(
${module_proj}
PUBLIC
pybind11::embed
spark
${_name}
)
target_include_directories(
${module_proj}
PRIVATE
$<BUILD_INTERFACE:${pybind11_INCLUDE_DIRS}>
)
target_include_directories(
${module_proj}
PUBLIC
${Python3_INCLUDE_DIRS}
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/stubs/${_name}.pyi
DEPENDS ${_name} ${module_proj}
COMMAND PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR} pybind11-stubgen --numpy-array-use-type-var --ignore-invalid-expressions '.*' ${_name}_module
COMMENT "Generating py stubs"
)
add_custom_target(
"${_name}_py_stubs"
ALL
DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/stubs/${_name}.pyi
)
install(
TARGETS ${module_proj}
EXPORT ${module_proj}Targets
RUNTIME
DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY
DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE
DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
foreach(dir ${pybind11_INCLUDE_DIRS})
install(DIRECTORY ${dir} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endforeach()
install(
EXPORT ${module_proj}Targets
FILE ${module_proj}Targets.cmake
NAMESPACE ${_name}::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${_name}
)
endfunction()
+65
View File
@@ -0,0 +1,65 @@
include_guard(DIRECTORY)
include(GNUInstallDirs)
function(init_python_plugin)
set(_options)
set(_one_value_args NAME PLUGIN_NAME)
set(_multi_value_args SOURCES)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
set_first_defined(_name _ARGS_NAME PROJECT_NAME)
set(_plugin_name ${_ARGS_PLUGIN_NAME})
if (NOT DEFINED _ARGS_PLUGIN_NAME)
set(_plugin_name ${_name}_plugins)
endif()
set(${_plugin_name}_SOURCES ${_ARGS_SOURCES})
if (NOT DEFINED _ARGS_SOURCES)
file(
GLOB_RECURSE ${_plugin_name}_SOURCES
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
${_plugin_name}/*.py)
endif()
set(src_outs)
foreach(_src ${${_plugin_name}_SOURCES})
set(_src_in ${CMAKE_CURRENT_SOURCE_DIR}/${_src})
set(_src_out ${CMAKE_CURRENT_BINARY_DIR}/${_src})
add_custom_command(
OUTPUT ${_src_out}
COMMAND ${CMAKE_COMMAND} -E copy ${_src_in} ${_src_out}
DEPENDS ${_src_in}
COMMENT "Copying ${_plugin_name} plugin ${_src} to ${_src_out}"
)
list(APPEND src_outs ${_src_out})
endforeach()
add_custom_target(copy_${_plugin_name} ALL DEPENDS ${src_outs})
add_library(${_plugin_name} INTERFACE)
add_library(${_name}::${_plugin_name} ALIAS ${_plugin_name})
set_target_properties(
${_plugin_name}
PROPERTIES
INTERFACE_PYTHON_SCRIPTS_DIR
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${_plugin_name}>$<INSTALL_INTERFACE:${CMAKE_INSTALL_BINDIR}/${_plugin_name}>
)
set_target_properties(
${_plugin_name}
PROPERTIES
INTERFACE_PYTHON_SCRIPTS $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${${_plugin_name}_SOURCES}>$<INSTALL_INTERFACE:${CMAKE_INSTALL_BINDIR}/${${_plugin_name}_SOURCES}>
)
install(
TARGETS ${_plugin_name}
EXPORT ${_plugin_name}Targets
DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(
EXPORT ${_plugin_name}Targets
FILE ${_plugin_name}Targets.cmake
NAMESPACE ${_name}::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${_name}
)
install(DIRECTORY ${_plugin_name} DESTINATION ${CMAKE_INSTALL_BINDIR})
endfunction()
+39
View File
@@ -0,0 +1,39 @@
include_guard(DIRECTORY)
include(GNUInstallDirs)
include(${CMAKE_SOURCE_DIR}/cmake/PackBasic.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/SetFirstDefined.cmake)
function(install_basic)
set(_options)
set(_one_value_args NAME INCLUDE_DIR)
set(_multi_value_args)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
set_first_defined(_name _ARGS_NAME PROJECT_NAME)
set_first_defined(_include_dir _ARGS_INCLUDE_DIR _name)
file(
GLOB_RECURSE ${_name}_HEADERS
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
${_include_dir}/*.h)
target_sources(${_name}
PUBLIC
FILE_SET HEADERS FILES ${${_name}_HEADERS})
install(
TARGETS ${_name}
EXPORT ${_name}Targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(
EXPORT ${_name}Targets
FILE ${_name}Targets.cmake
NAMESPACE ${_name}::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${_name})
pack_basic()
endfunction()
+44
View File
@@ -0,0 +1,44 @@
include_guard(DIRECTORY)
include(CMakePackageConfigHelpers)
include(${CMAKE_SOURCE_DIR}/cmake/SetFirstDefined.cmake)
function(pack_basic)
set(_options)
set(_one_value_args NAME)
set(_multi_value_args)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
set_first_defined(_name _ARGS_NAME PROJECT_NAME)
find_package(Git QUIET)
if(GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --tags --always --dirty
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE PROJECT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
if(NOT GIT_FOUND OR PROJECT_VERSION STREQUAL "")
set(PROJECT_VERSION "0.0.0")
endif()
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${_name}ConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/${_name}Config.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${_name}
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/${_name}Config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/${_name}ConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${_name})
endfunction()
+12
View File
@@ -0,0 +1,12 @@
function(print_list var)
set(CMAKE_MESSAGE_INDENT "")
set(_var_str "")
foreach(item IN LISTS ${var})
set(_var_str "${_var_str}\n ${item}")
endforeach()
if ("${ARGN}" STREQUAL "VERBOSE")
message(VERBOSE "***${var}:${_var_str}")
else()
message("***${var}:${_var_str}")
endif()
endfunction()
+83
View File
@@ -0,0 +1,83 @@
include_guard(GLOBAL)
function(protobuf_generate_cpp)
set(_options)
set(_one_value_args
CXX_SOURCES
CXX_HEADERS
CXX_OUT_DIR
PROTOC
)
set(_multi_value_args
PROTO_INCLUDE_DIRS
PROTO_SOURCES
)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
if (NOT DEFINED _ARGS_PROTOC)
if (WIN32)
set(_ARGS_PROTOC "${EXTERNALS_BIN}/protoc.exe")
else()
set(_ARGS_PROTOC "${EXTERNALS_BIN}/protoc")
endif()
endif()
set(${_ARGS_CXX_SOURCES})
set(${_ARGS_CXX_HEADERS})
set(_proto_include_cli_args)
foreach(_dir ${_ARGS_PROTO_INCLUDE_DIRS})
list(APPEND _proto_include_cli_args -I ${_dir})
endforeach()
foreach(_fil ${_ARGS_PROTO_SOURCES})
get_filename_component(_abs_fil ${_fil} ABSOLUTE)
get_filename_component(_fil_we ${_fil} NAME_WE)
get_filename_component(_fil_dir ${_fil} DIRECTORY)
if(_fil_dir)
set(_fil_we "${_fil_dir}/${_fil_we}")
endif()
list(APPEND ${_ARGS_CXX_SOURCES} "${_ARGS_CXX_OUT_DIR}/${_fil_we}.pb.cc")
list(APPEND ${_ARGS_CXX_HEADERS} "${_ARGS_CXX_OUT_DIR}/${_fil_we}.pb.h")
message(STATUS "add_custom_command for ${_fil} -> ${_ARGS_CXX_OUT_DIR}/${_fil_we}.pb.h")
# TODO: Pass proto sources by relative path (so this fn can be called from
# arbitrary subdirs).
add_custom_command(
OUTPUT
"${_ARGS_CXX_OUT_DIR}/${_fil_we}.pb.cc"
"${_ARGS_CXX_OUT_DIR}/${_fil_we}.pb.h"
COMMAND
${_ARGS_PROTOC}
ARGS
--cpp_out=${_ARGS_CXX_OUT_DIR} ${_proto_include_cli_args} ${_abs_fil}
DEPENDS ${_abs_fil}
COMMENT "Running C++ protocol buffer compiler on ${_fil}"
VERBATIM
)
endforeach()
set_source_files_properties(
${${_ARGS_CXX_SOURCES}}
${${_ARGS_CXX_HEADERS}}
PROPERTIES
GENERATED TRUE
)
# remove some warnings from protobuf generated files
if(WIN32)
set_source_files_properties(
${${_ARGS_CXX_SOURCES}}
PROPERTIES
COMPILE_FLAGS "/wd4309 /wd4838"
)
else()
set_source_files_properties(
${${_ARGS_CXX_SOURCES}}
PROPERTIES
COMPILE_FLAGS "-Wno-unused-parameter -Wno-effc++ -Wno-pedantic -Wno-sign-compare -Wno-uninitialized"
)
endif()
set(${_ARGS_CXX_SOURCES} ${${_ARGS_CXX_SOURCES}} PARENT_SCOPE)
set(${_ARGS_CXX_HEADERS} ${${_ARGS_CXX_HEADERS}} PARENT_SCOPE)
endfunction()
+61
View File
@@ -0,0 +1,61 @@
include_guard(GLOBAL)
function(protobuf_generate_cpp_config)
set(_options)
set(_one_value_args
PROTO_SOURCES_HEADER
PROTO_DEFAULTS_HEADER
)
set(_multi_value_args
PROTO_SOURCES
PROTO_DEFAULTS
)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
# Configure the 'config_proto_files' header. It provides an array of strings populated with the
# files in PROTO_SOURCES. At runtime, we use this array to generate a special 'config' proto
# message with fields for each message defined in said files. A global instance of this 'config'
# proto is then constructed, and populated with [compile-time] defaults, and [runtime] overrides
# (i.e., in spark.conf). Calls to `bts::config::get<T>()` retrieve the value from the field
# associated with type `T` in this global instance.
message(STATUS "PROTO_SOURCES: ${_ARGS_PROTO_SOURCES}")
message(STATUS "PROTO_SOURCES_HEADER: ${_ARGS_PROTO_SOURCES_HEADER}")
message(STATUS "PROTO_DEFAULTS_HEADER: ${_ARGS_PROTO_DEFAULTS_HEADER}")
if (_ARGS_PROTO_SOURCES_HEADER)
set(PROTO_SOURCES)
set(PROTO_SOURCES_CXX_ARRAY_ITEMS "")
foreach(_proto_path ${_ARGS_PROTO_SOURCES})
list(APPEND PROTO_SOURCES ${_proto_path})
string(APPEND PROTO_SOURCES_CXX_ARRAY_ITEMS "\"${_proto_path}\",\n")
endforeach()
list(LENGTH PROTO_SOURCES PROTO_SOURCES_LENGTH)
message(STATUS "CONFIGURING PROTO_SOURCES_HEADER): ${_ARGS_PROTO_SOURCES_HEADER}")
configure_file(${CMAKE_SOURCE_DIR}/cmake/config_proto_files.h.in ${_ARGS_PROTO_SOURCES_HEADER})
endif()
# Generate static defaults. Ideally, this would be a single string, but we use an array because
# the compiler complains if the string is longer than 65k.
set(_cfg_defaults_str "inline const char * config_static_defaults[] = { ")
foreach(_cfg_file_path ${_ARGS_PROTO_DEFAULTS})
file(READ ${_cfg_file_path} _cfg_file_content)
string(REPLACE "\"" "\\\"" _cfg_file_content_escaped ${_cfg_file_content})
string(REPLACE "\n" ";" _cfg_lines ${_cfg_file_content_escaped})
foreach(_line ${_cfg_lines})
string(APPEND _cfg_defaults_str "\n \"${_line}\",")
endforeach(_line)
endforeach(_cfg_file_path)
string(APPEND _cfg_defaults_str "};")
set(_old_cfg_defaults_str "")
if(EXISTS ${_ARGS_PROTO_DEFAULTS_HEADER})
file(READ ${_ARGS_PROTO_DEFAULTS_HEADER} _old_cfg_defaults_str)
endif()
if(NOT _cfg_defaults_str STREQUAL _old_cfg_defaults_str)
file(WRITE "${_ARGS_PROTO_DEFAULTS_HEADER}" "${_cfg_defaults_str}")
endif()
endfunction()
+49
View File
@@ -0,0 +1,49 @@
include_guard(DIRECTORY)
function(protobuf_generate_fs)
set(_options)
set(_one_value_args TARGET_NAME OUT_DIR PROTOC)
set(_multi_value_args PROTO_INCLUDE_DIRS PROTO_SOURCES)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
if (NOT DEFINED _ARGS_TARGET_NAME)
set(_ARGS_TARGET_NAME "${PROJECT_NAME}_generate_fs_protos")
endif()
if (NOT DEFINED _ARGS_PROTOC)
set(_ARGS_PROTOC "${EXTERNALS_BIN}/protoc")
endif()
set(_proto_include_cli_args)
foreach(_dir ${_ARGS_PROTO_INCLUDE_DIRS})
list(APPEND _proto_include_cli_args -I ${_dir})
endforeach()
set(_outputs)
foreach(_proto_source ${_ARGS_PROTO_SOURCES})
# get_filename_component(_abs_proto_source ${_proto_source} ABSOLUTE)
get_filename_component(_proto_source_we ${_proto_source} NAME_WE)
# get_filename_component(_proto_source_dir ${_proto_source} DIRECTORY)
list(APPEND _outputs ${_ARGS_OUT_DIR}/${_proto_source_we}.fable.fs)
endforeach()
set(_venv_exec ${CMAKE_SOURCE_DIR}/tools/venv_exec.sh)
set(_plugin_py ${CMAKE_SOURCE_DIR}/src/lib_spark/spark/api/service_compiler/plugin.py)
set(_template_fs ${CMAKE_SOURCE_DIR}/src/lib_spark/spark/api/service_compiler/templates/fs/fable.fs)
add_custom_command(
OUTPUT ${_outputs}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${_venv_exec}
${_ARGS_PROTOC}
--plugin=protoc-gen-service=${_plugin_py}
--service_out=lang=fs,strip_out_path=1:${_ARGS_OUT_DIR}
${_proto_include_cli_args}
${_ARGS_PROTO_SOURCES}
DEPENDS
${_venv_exec}
${_plugin_py}
${_template_fs}
${CMAKE_CURRENT_SOURCE_DIR}/package-lock.json
${_ARGS_PROTO_SOURCES}
)
add_custom_target(${_ARGS_TARGET_NAME} ALL DEPENDS "${_outputs}")
endfunction()
+33
View File
@@ -0,0 +1,33 @@
include_guard(DIRECTORY)
function(protobuf_generate_js)
set(_options)
set(_one_value_args TARGET_NAME OUTPUT)
set(_multi_value_args PROTO_INCLUDE_DIRS PROTO_SOURCES)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
if (NOT DEFINED _ARGS_TARGET_NAME)
set(_ARGS_TARGET_NAME "${PROJECT_NAME}_generate_js_protos")
endif()
set(_proto_include_cli_args)
foreach(_dir ${_ARGS_PROTO_INCLUDE_DIRS})
list(APPEND _proto_include_cli_args -p ${_dir})
endforeach()
add_custom_command(
OUTPUT ${_ARGS_OUTPUT}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND npx
--no-install pbjs
-t json-module
-w commonjs
-o ${_ARGS_OUTPUT}
${_proto_include_cli_args}
${_ARGS_PROTO_SOURCES}
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/package-lock.json
${_ARGS_PROTO_SOURCES}
)
add_custom_target(${_ARGS_TARGET_NAME} ALL DEPENDS ${_ARGS_OUTPUT})
endfunction()
+10
View File
@@ -0,0 +1,10 @@
include_guard(GLOBAL)
macro(set_first_defined RESULT)
foreach(_arg ${ARGN})
if (DEFINED ${_arg})
set(${RESULT} ${${_arg}})
break()
endif()
endforeach()
endmacro()
+49
View File
@@ -0,0 +1,49 @@
include_guard(DIRECTORY)
include(${CMAKE_SOURCE_DIR}/cmake/TernaryOperator.cmake)
function(sym_link_dir)
set(_options)
set(_one_value_args TARGET_NAME SOURCE DEST COMMENT)
set(_multi_value_args)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
add_custom_command(
OUTPUT ${_ARGS_DEST}
COMMAND ln ARGS -sf ${_ARGS_SOURCE} ${_ARGS_DEST}
)
set_ternary(_comment _ARGS_COMMENT "${_ARGS_COMMENT}" "linking dir ${_ARGS_SOURCE} -> ${_ARGS_DEST}")
add_custom_target(
${_ARGS_TARGET_NAME} ALL
DEPENDS ${_ARGS_DEST}
COMMENT "${_comment}"
)
endfunction()
function(sym_link_file)
set(_options)
set(_one_value_args SOURCE DEST INSTALL_DEST)
set(_multi_value_args)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}" "${_multi_value_args}" ${ARGN})
file(
CREATE_LINK
${_ARGS_SOURCE}
${_ARGS_DEST}
SYMBOLIC
)
if (DEFINED _ARGS_INSTALL_DEST)
install(
FILES
${_ARGS_SOURCE}
DESTINATION ${_ARGS_INSTALL_DEST}
)
endif()
endfunction()
function(sym_link_local_lib LIB_NAME)
set(_lib_file_name "${CMAKE_SHARED_LIBRARY_PREFIX}${LIB_NAME}.so")
file(
CREATE_LINK
"${CMAKE_BINARY_DIR}/src/lib_${LIB_NAME}/${_lib_file_name}"
"${CMAKE_CURRENT_BINARY_DIR}/${_lib_file_name}"
SYMBOLIC
)
endfunction()
+39
View File
@@ -0,0 +1,39 @@
include_guard(DIRECTORY)
include(${CMAKE_SOURCE_DIR}/cmake/SymLink.cmake)
function(sym_link_python_module)
set(_options)
set(_one_value_args LIB_NAME MODULE_NAME PLUGIN_NAME)
set(_multi_value_args)
cmake_parse_arguments(_ARGS "${_options}" "${_one_value_args}"
"${_multi_value_args}" ${ARGN})
if(NOT DEFINED _ARGS_LIB_NAME)
message(
FATAL_ERROR "LIB_NAME must be specified for sym_link_python_module()")
endif()
set(_lib_name ${_ARGS_LIB_NAME})
set(_module_name ${_ARGS_MODULE_NAME})
if(NOT DEFINED _ARGS_MODULE_NAME)
set(_module_name ${_lib_name}_module)
endif()
set(_plugin_name ${_ARGS_PLUGIN_NAME})
set(_deps ${_lib_name} ${_module_name})
if(DEFINED _ARGS_PLUGIN_NAME)
list(APPEND _deps ${_plugin_name} copy_${_plugin_name})
endif()
add_dependencies(${PROJECT_NAME} ${_deps})
sym_link_local_lib(${_lib_name})
set(_module_suffix cpython-310-x86_64-linux-gnu.so)
sym_link_file(
SOURCE
${CMAKE_BINARY_DIR}/src/lib_${_lib_name}/${_module_name}.${_module_suffix}
DEST
${CMAKE_CURRENT_BINARY_DIR}/${_module_name}.${_module_suffix}
INSTALL_DEST
${CMAKE_INSTALL_BINDIR}/)
if(DEFINED _ARGS_PLUGIN_NAME)
get_target_property(plugins ${_plugin_name} INTERFACE_PYTHON_SCRIPTS_DIR)
sym_link_dir(TARGET_NAME ${PROJECT_NAME}_link_${_plugin_name} SOURCE
${plugins} DEST ${CMAKE_CURRENT_BINARY_DIR}/${_plugin_name})
endif()
endfunction()
+9
View File
@@ -0,0 +1,9 @@
include_guard(GLOBAL)
macro(set_ternary RESULT CONDITION TRUE_VALUE FALSE_VALUE)
if(${CONDITION})
set(${RESULT} ${TRUE_VALUE})
else()
set(${RESULT} ${FALSE_VALUE})
endif()
endmacro()
+11
View File
@@ -0,0 +1,11 @@
#pragma once
#include <array>
namespace bts::@PROJECT_NAME@::protobufs {
inline std::array<const char *, @PROTO_SOURCES_LENGTH@> config_proto_files = {
@PROTO_SOURCES_CXX_ARRAY_ITEMS@
};
} // namespace bts::@PROJECT_NAME@::protobufs
+32
View File
@@ -0,0 +1,32 @@
# inspired by https://stackoverflow.com/questions/1027247/specify-source-files-globally-with-glob
# Compare the new contents with the existing file, if it exists and is the same we don't want to
# trigger a make by changing its timestamp.
function(update_file path content)
set(old_content "")
if(EXISTS "${path}")
file(READ "${path}" old_content)
endif()
if(NOT old_content STREQUAL content)
file(WRITE "${path}" "${content}")
endif()
endfunction(update_file)
# Creates a file called CMakeDeps.cmake next to your CMakeLists.txt with the list of dependencies in
# it - this file should be treated as part of CMakeLists.txt (source controlled, etc.).
function(update_deps_file deps)
if(WIN32)
set(deps_file "CMakeDeps_win.cmake")
else()
set(deps_file "CMakeDeps.cmake")
endif()
# Normalize the list so it's the same on every machine
list(REMOVE_DUPLICATES deps)
list(SORT deps)
# Update the deps file
set(content "set(sources ${deps})")
update_file(${deps_file} "${content}")
# Include the file so it's tracked as a generation dependency we don't need the content.
include(${deps_file})
endfunction(update_deps_file)
+11
View File
@@ -0,0 +1,11 @@
#ifndef BTS_SPARK_VERSION_H
#define BTS_SPARK_VERSION_H
#define BTS_SPARK_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
#define BTS_SPARK_VERSION_MINOR @PROJECT_VERSION_MINOR@
#define BTS_SPARK_VERSION_PATCH @PROJECT_VERSION_PATCH@
#define BTS_SPARK_VERSION_BUILD_METADATA @PROJECT_VERSION_BUILD_METADATA@
#define BTS_SPARK_VERSION "@PROJECT_VERSION@"
#define BTS_SPARK_VERSION_FULL "@PROJECT_VERSION_FULL@"
#endif
+197
View File
@@ -0,0 +1,197 @@
services:
sparkd:
volumes:
- ${SPARKD__DATA_DIR:-sparkd_data}:/home/bts/.local/share/bts/sparkd/data
build:
dockerfile: src/app_sparkd/Dockerfile
args:
- IMAGE=${SPARKD__IMAGE}
- SOURCE_DIR=${SPARKD__SOURCE_DIR}
- CONFIG_DIR=${SPARKD__CONFIG_DIR}
- PYTHON_REQUIREMENTS=${SPARKD__PYTHON_REQUIREMENTS}
shm_size: "${SPARKD__SHM_SIZE:-512mb}"
command: >
sh -c "
echo bts | sudo -S chown -R bts:bts /home/bts/.local/share/bts/sparkd/data
if [ -e "/home/bts/.local/share/bts/sparkd/data/logging.sparkd/log" ]; then
mv "/home/bts/.local/share/bts/sparkd/data/logging.sparkd/log" "/home/bts/.local/share/bts/sparkd/data/logging.sparkd/log_$(date '+%Y%m%d-%H%M')"
fi
if [ -e "/home/bts/.local/share/bts/conf/.env.local" ]; then
echo 'Sourcing /home/bts/.local/share/bts/conf/.env.local'
set -a
. /home/bts/.local/share/bts/sparkd/conf/.env.local
set +a
fi
if [ -d /home/bts/.local/share/bts/sparkd/conf/plugins ]; then
echo 'Copying /home/bts/.local/share/bts/sparkd/conf/plugins to runtime dir (/home/bts/bin)'
cp -r /home/bts/.local/share/bts/sparkd/conf/plugins /home/bts/bin/
fi
./sparkd run"
env_file:
- .env
- ${SPARKD__CONFIG_DIR}/.env
ports:
- "${SPARKD__CONFIG_PORT}:${SPARKD__CONFIG_PORT}"
- "${SPARKD__QUICKBUS_PORT}:${SPARKD__QUICKBUS_PORT}"
- "${SPARKD__SIM_FIX_PORT}:${SPARKD__SIM_FIX_PORT}"
deploy:
resources:
limits:
memory: "${SPARKD__MEMORY:-4gb}"
sparkd-symbols:
volumes:
- ${SPARKD__DATA_DIR:-sparkd_data}:/home/bts/.local/share/bts/sparkd/data
- ${SPARKD__RUNTIME_CONF_DIR:-sparkd_conf}:/home/bts/.local/share/bts/sparkd/conf
build:
dockerfile: src/app_sparkd/Dockerfile
args:
- IMAGE=${SPARKD__IMAGE}
- SOURCE_DIR=${SPARKD__SOURCE_DIR}
- CONFIG_DIR=${SPARKD__CONFIG_DIR}
- PYTHON_REQUIREMENTS=${SPARKD__PYTHON_REQUIREMENTS}
shm_size: "${SPARKD__SHM_SIZE:-512mb}"
command: >
sh -c "
echo bts | sudo -S chown -R bts:bts /home/bts/.local/share/bts/sparkd
if [ -e "/home/bts/.local/share/bts/sparkd/data/logging.sparkd/log" ]; then
mv "/home/bts/.local/share/bts/sparkd/data/logging.sparkd/log" "/home/bts/.local/share/bts/sparkd/data/logging.sparkd/log_$(date '+%Y%m%d-%H%M')"
fi
ls -alh /home/bts/.local/share/bts/sparkd/conf/
cat /home/bts/.local/share/bts/sparkd/conf/.env.local
if [ -e "/home/bts/.local/share/bts/sparkd/conf/.env.local" ]; then
echo 'Sourcing /home/bts/.local/share/bts/sparkd/conf/.env.local'
set -a
. /home/bts/.local/share/bts/sparkd/conf/.env.local
set +a
fi
if [ -d /home/bts/.local/share/bts/sparkd/conf/plugins ]; then
echo 'Copying /home/bts/.local/share/bts/sparkd/conf/plugins to runtime dir (/home/bts/bin)'
cp -r /home/bts/.local/share/bts/sparkd/conf/plugins /home/bts/bin/
fi
./sparkd run"
env_file:
- .env
- ${SPARKD__CONFIG_DIR}/.env
ports:
- "${SPARKD__CONFIG_PORT}:${SPARKD__CONFIG_PORT}"
- "${SPARKD__QUICKBUS_PORT}:${SPARKD__QUICKBUS_PORT}"
- "${SPARKD__SIM_FIX_PORT}:${SPARKD__SIM_FIX_PORT}"
deploy:
restart_policy:
condition: any
delay: 3s
resources:
limits:
memory: "${SPARKD__MEMORY:-4gb}"
sparkd-tail:
image: bluetradingsystems/linux_dotnet8
volumes:
- type: volume
read_only: true
source: sparkd_data
target: /home/bts/.local/share/bts/sparkd/data/logging.sparkd
volume:
subpath: logging.sparkd
command: ["tail", "-f", "/home/bts/.local/share/bts/sparkd/data/logging.sparkd/log"]
sparkd-ping-test:
depends_on:
- sparkd
profiles:
- ping-test
build:
context: .
dockerfile_inline: |
FROM bluetradingsystems/linux_dotnet8
USER "root"
RUN apt-get update && apt-get -y install iputils-ping
command: [ "ping", "sparkd" ]
pubsub:
volumes:
- ${PUBSUB__DATA_DIR:-pubsub_data}:/home/bts/.local/share/bts/pubsub/data
build:
dockerfile: src/DataStreamSuite/PubSubServer/Dockerfile
args:
- SOURCE_DIR=${PUBSUB__SOURCE_DIR}
- CONFIG_DIR=${PUBSUB__CONFIG_DIR}
ports:
- 22019:22019
command: >
sh -c "
echo bts | sudo -S chown -R bts:bts /home/bts/.local/share/bts/pubsub/data
if [ -e "/home/bts/.local/share/bts/pubsub/data/logging.PubSubServer/log" ]; then
mv "/home/bts/.local/share/bts/pubsub/data/logging.PubSubServer/log" "/home/bts/.local/share/bts/pubsub/data/logging.PubSubServer/log_$(date '+%Y%m%d-%H%M')"
fi
if [ -e "/home/bts/.local/share/bts/pubsub/conf/.env" ]; then
echo 'Sourcing /home/bts/.local/share/bts/pubsub/conf/.env'
set -a
. /home/bts/.local/share/bts/pubsub/conf/.env
set +a
fi
if [ -e "/home/bts/.local/share/bts/pubsub/conf/.env.local" ]; then
echo 'Sourcing /home/bts/.local/share/bts/pubsub/conf/.env.local'
set -a
. /home/bts/.local/share/bts/pubsub/conf/.env.local
set +a
fi
./PubSubServer"
env_file:
- .env
- ${PUBSUB__CONFIG_DIR}/.env
md-publisher:
volumes:
- ${MD_PUBLISHER__DATA_DIR:-md_publisher_data}:/home/bts/.local/share/bts/md_publisher/data
- historic_md:/home/bts/.local/share/bts/md_publisher/data/databento
build:
dockerfile: src/DataStreamSuite/DataStreamPublisher/Dockerfile
args:
- SOURCE_DIR=${MD_PUBLISHER__SOURCE_DIR}
- CONFIG_DIR=${MD_PUBLISHER__CONFIG_DIR}
command: >
sh -c "
echo bts | sudo -S chown -R bts:bts /home/bts/.local/share/bts/md_publisher/data
if [ -e "/home/bts/.local/share/bts/md_publisher/data/logging.DataStreamPublisher/log" ]; then
mv "/home/bts/.local/share/bts/md_publisher/data/logging.DataStreamPublisher/log" "/home/bts/.local/share/bts/md_publisher/data/logging.DataStreamPublisher/log_$(date '+%Y%m%d-%H%M')"
fi
if [ -e "/home/bts/.local/share/bts/md_publisher/conf/.env" ]; then
echo 'Sourcing /home/bts/.local/share/bts/md_publisher/conf/.env'
set -a
. /home/bts/.local/share/bts/md_publisher/conf/.env
set +a
fi
if [ -e "/home/bts/.local/share/bts/md_publisher/conf/.env.local" ]; then
echo 'Sourcing /home/bts/.local/share/bts/md_publisher/conf/.env.local'
set -a
. /home/bts/.local/share/bts/md_publisher/conf/.env.local
set +a
fi
dockerize -wait tcp://pubsub:22019 -timeout 10s ./DataStreamPublisher"
env_file:
- .env
- ${MD_PUBLISHER__CONFIG_DIR}/.env
api-server:
depends_on:
- sparkd
ports:
- 8008:8008
- 9443:9443
build:
dockerfile: src/client/spark_api_server/Dockerfile
command: [ "dockerize", "-wait", "tcp://sparkd:8000", "-timeout", "10s", "./spark_api_server", "run" ]
environment:
- ASPNETCORE_ENVIRONMENT=Staging
volumes:
sparkd_data:
name: "sparkd_${SPARKD__CONFIG_PORT:-8000}"
pubsub_data:
name: "pubsub_22019"
md_publisher_data:
name: "md_publisher_22019"
historic_md:
name: "historic_md"
+224
View File
@@ -0,0 +1,224 @@
[cmake]: https://cmake.org/
[cmake ext]: https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools
[cmake presets]: https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html
[cpp ext]: https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools
[clangd ext]: https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd
[dotnet]: https://dotnet.microsoft.com/en-us/download/dotnet
[ninja build]: https://ninja-build.org/
[ninja generator]: https://cmake.org/cmake/help/latest/generator/Ninja.html
[ninja multi-config generator]: https://cmake.org/cmake/help/latest/generator/Ninja%20Multi-Config.html
[python]: https://www.python.org/
[py venv]: https://docs.python.org/3/library/venv.html
[visual studio]: https://visualstudio.microsoft.com/
[visual studio generator]: https://cmake.org/cmake/help/latest/generator/Visual%20Studio%2017%202022.html
# C++ Intellisense for Spark on Windows (VS Code)
**Steps**
1. Install the **[C++ extension][cpp ext]**
2. Install the **[CMake extension][cmake ext]**
3. Copy `c_cpp_properties.json` from this folder to `$workspaceFolder/.vscode/`
4. In the VS Code Command Palette, run **CMake: Select Configure Preset**, then
select '**spark**' from the dropdown
**Notes**
* Intellisense won't work for generated files/types until you build libspark
# C++ Intellisense for Sparkd on Linux (VS Code)
1. Install the **[CMake extension][cmake ext]**
2. Install the **[Clangd extension][clangd ext]**
3. (Optional) Install the **[C++ extension][cpp ext]** (*needed for debugging,
but intellisense should work without it*).
4. If the **[C++ extension][cpp ext]** is installed, disable its intellisense in
your workspace settings (*Clangd intellisense is better*)
```
"C_Cpp.intelliSenseEngine": "disabled"
```
5. In the VS Code Command Palette, run **CMake: Select Configure Preset**, then select the
**[preset][cmake presets]** you wish to build from the dropdown
* *The **Clang** presets may work best with the **Clangd** extension*
* *Intellisense won't work for generated files/types until you build libspark*
# Build Spark on Windows
### Dependencies
* **[CMake][cmake]** (version >= 3.23)
* **[Python][python]** (version >= 3.9)
* **[Visual Studio][visual studio]** (2022)
* **[Dotnet][dotnet]** (sdk version >= 7.0.0)
### References
* **[CMakePresets][cmake presets]**
* **[Visual Studio 17 2022 (CMake generator)][visual studio generator]**
* **[Python Virtual Environment][py venv]**
### Notes
* *Run commands from the repo root dir unless otherwise noted*
1. Set up the **[Python virtual environment][py venv]**<br>
```
# Create the virtual environment
python3 -m venv .venv
# Activate the virtual environment
.venv\bin\activate.bat
# Update pip
python -m pip install --upgrade pip
# Install packages
pip install -r requirements.txt
```
2. Build
* *Run commands in python virtual environment*
```
# Configure
cmake --preset spark
# Build Debug
cmake --build --preset spark-debug
dotnet build spark_client.sln --configuration Debug
# Build Release
cmake --build --preset spark-release
dotnet build spark_client.sln --configuration Release
```
# Build Sparkd on Linux
### **Dependencies**
* **[CMake][cmake]** (version >= 3.23)
* **[Ninja Build][ninja build]**
* **[Python][python]** (version >= 3.9)
### **References**
* **[CMakePresets][cmake presets]**
* **[Ninja (CMake generator)][ninja generator]**
* **[Python Virtual Environment][py venv]**
* **[Devcontainer](devcontainer)**
### Prerequisites
* Open repository in a VS Code [Devcontainer](../docker/sparkd/dev/README.md), or
create your own [docker container](../docker/sparkd/dev/README.md) in which to build
### Notes
* *Run commands from the repo root dir unless otherwise noted*<br>
1. Set up the **[Python virtual environment][py venv]**
```
# Create the virtual environment
python3 -m venv .venv
# Activate the virtual environment
. .venv/bin/activate
# Update pip
python -m pip install --upgrade pip
# Install packages
pip install -r requirements.txt
```
2. Build
* *Run commands in python virtual environment*
```
# Configure clang debug
cmake --preset sparkd-clang-debug
# Build clang debug
cmake --build --preset spark-clang-debug
# Configure gcc release
cmake --build --preset sparkd-gcc-release
# Build gcc release
cmake --build --preset sparkd-gcc-release
```
# Build Spark Api Server on Windows
### **Dependencies**
* **[CMake][cmake]** (version >= 3.23)
* **[Python][python]** (version >= 3.9)
* **[Visual Studio][visual studio]** (version)
* **[Dotnet][dotnet]** (sdk version >= 7.0.0)
### **References**
* **[CMakePresets][cmake presets]**
* **[Visual Studio 17 2022 (CMake generator)][visual studio generator]**
* **[Python Virtual Environment][py venv]**
### Notes
* *Run commands from the repo root dir unless otherwise noted*
1. Set up the **[Python Virtual Environment][py venv]**
```
# Create the virtual environment
python3 -m venv .venv
# Activate the virtual environment
.venv\bin\activate.bat
# Update pip
python -m pip install --upgrade pip
# Install packages
pip install -r requirements.txt
```
2. Build
* *Run in python virtual environment*
```
# Configure
cmake --preset spark-api-server-windows
# Build debug
cmake --build --preset spark-api-server-windows-debug
dotnet build Spark.Api.Server.sln --configuration Debug
# Build release
cmake --build --preset spark-api-server-windows-release
dotnet build Spark.Api.Server.sln --configuration Release
```
# Build Spark Api Server on Linux
### **Dependencies**
* **[CMake][cmake]** (version >= 3.23)
* **[Ninja Build][ninja build]**
* **[Python][python]** (version >= 3.9)
* **[Dotnet][dotnet]** (sdk version >= 7.0.0)
### **References**
* **[CMakePresets][cmake presets]**
* **[Ninja Multi-Config (CMake generator)][ninja multi-config generator]**
* **[Python Virtual Environment][py venv]**
### Prerequisites
* Open repository in a VS Code [Devcontainer](../docker/sparkd/dev/README.md), or
create your own [docker container](../docker/sparkd/dev/README.md) in which to build
### Notes
* *Run commands from the repo root dir unless otherwise noted*
1. Set up the **[Python Virtual Environment][py venv]**
```
# Create the virtual environment
python3 -m venv .venv
# Activate the virtual environment
. .venv/bin/activate
# Update pip
python -m pip install --upgrade pip
# Install packages
pip install -r requirements.txt
```
2. Build
* *Run in python virtual environment*
```
# Configure
cmake --preset spark-api-server-linux
# Build debug
cmake --build --preset spark-api-server-linux-debug
dotnet build Spark.Api.Server.sln --configuration Debug
# Build release
cmake --build --preset spark-api-server-linux-release
dotnet build Spark.Api.Server.sln --configuration Release
```
+27
View File
@@ -0,0 +1,27 @@
{
"version": 4,
"configurations": [
{
"name": "Windows",
"intelliSenseMode": "windows-msvc-x64",
"includePath": [
"${workspaceFolder}/src/",
"${workspaceFolder}/build/src/",
"${workspaceFolder}/externals/windows/include/"
],
"defines": ["_WIN32", "__x86_64__"],
"browse": {
"path": [
"${workspaceRoot}/src",
"${workspaceRoot}/build/src"
],
"limitSymbolsToIncludedHeaders": true
},
"cStandard": "c17",
"cppStandard": "c++17",
"configurationProvider": "ms-vscode.cmake-tools",
"compilerPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.34.31933/bin/Hostx64/x64/cl.exe",
"mergeConfigurations": true
}
]
}
+54
View File
@@ -0,0 +1,54 @@
{
"FormattingOptions": {
"NewLine": "\n",
"UseTabs": false,
"TabSize": 3,
"IndentationSize": 3,
"SpacingAfterMethodDeclarationName": false,
"SpaceWithinMethodDeclarationParenthesis": false,
"SpaceBetweenEmptyMethodDeclarationParentheses": false,
"SpaceAfterMethodCallName": false,
"SpaceWithinMethodCallParentheses": false,
"SpaceBetweenEmptyMethodCallParentheses": false,
"SpaceAfterControlFlowStatementKeyword": true,
"SpaceWithinExpressionParentheses": false,
"SpaceWithinCastParentheses": false,
"SpaceWithinOtherParentheses": false,
"SpaceAfterCast": false,
"SpacesIgnoreAroundVariableDeclaration": false,
"SpaceBeforeOpenSquareBracket": false,
"SpaceBetweenEmptySquareBrackets": false,
"SpaceWithinSquareBrackets": false,
"SpaceAfterColonInBaseTypeDeclaration": true,
"SpaceAfterComma": true,
"SpaceAfterDot": false,
"SpaceAfterSemicolonsInForStatement": true,
"SpaceBeforeColonInBaseTypeDeclaration": true,
"SpaceBeforeComma": false,
"SpaceBeforeDot": false,
"SpaceBeforeSemicolonsInForStatement": false,
"SpacingAroundBinaryOperator": "single",
"IndentBraces": false,
"IndentBlock": true,
"IndentSwitchSection": true,
"IndentSwitchCaseSection": true,
"LabelPositioning": "oneLess",
"WrappingPreserveSingleLine": true,
"WrappingKeepStatementsOnSingleLine": true,
"NewLinesForBracesInTypes": false,
"NewLinesForBracesInMethods": false,
"NewLinesForBracesInProperties": false,
"NewLinesForBracesInAccessors": false,
"NewLinesForBracesInAnonymousMethods": false,
"NewLinesForBracesInControlBlocks": false,
"NewLinesForBracesInAnonymousTypes": false,
"NewLinesForBracesInObjectCollectionArrayInitializers": false,
"NewLinesForBracesInLambdaExpressionBody": false,
"NewLineForElse": false,
"NewLineForCatch": false,
"NewLineForFinally": false,
"NewLineForMembersInObjectInit": true,
"NewLineForMembersInAnonymousTypes": true,
"NewLineForClausesInQuery": true
}
}
+120
View File
@@ -0,0 +1,120 @@
FROM spark-crypto_18.04
RUN \
DEBIAN_FRONTEND=noninteractive apt-get update \
&& apt-get install -y \
htop \
locales \
source-highlight \
powerline \
fonts-powerline
# Hide these in the .docker directory to avoid conflicts with existing repos on
# this computer (in case a parent dir, such as $HOME, is mounted inside a
# container)
ARG repo_root="/home/john/Documents/repos/.docker"
# Create dirs for public/private repos
USER john
RUN \
mkdir -p $repo_root/public \
&& mkdir -p $repo_root/private
## Get latest fish (build from source)
# 1) get build deps
USER root
RUN \
DEBIAN_FRONTEND=noninteractive apt-get update \
&& apt-get install -y software-properties-common
RUN \
apt-add-repository ppa:fish-shell/release-3 \
&& sed -i "s/^# deb/deb/g" /etc/apt/sources.list
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get build-dep -y fish
# 2) Clone repo
USER john
RUN \
cd $repo_root/public \
&& git clone https://github.com/fish-shell/fish-shell.git
RUN \
cd $repo_root/public/fish-shell \
&& mkdir build \
&& cd build \
&& cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_DOCS=0 .. \
&& cmake --build .
# Switch to root, rather than running inline w/ sudo cmd, to avoid having to
# enter a password
USER root
RUN \
cd $repo_root/public/fish-shell/build \
&& make install
USER john
## Get oh-my-fish
RUN \
cd $repo_root/public \
&& git clone https://github.com/oh-my-fish/oh-my-fish.git
RUN \
cd $repo_root/public/oh-my-fish \
&& ./bin/install --noninteractive --yes
## Get my fish config
RUN \
cd $repo_root/private \
&& git clone https://github.com/johncolvin-og/myfishconfig
RUN \
cd $repo_root/private/myfishconfig \
&& cp src/config.fish /home/john/.config/fish/ \
&& cp src/aliases.fish /home/john/.config/fish/ \
&& cp -r src/functions /home/john/.config/fish/ \
&& cp -r src/themes/johncolvin /home/john/.local/share/omf/themes/ \
&& fish --command "omf theme johncolvin"
## Get my bash config (back up existing)
RUN \
cd $repo_root/private \
&& git clone https://github.com/johncolvin-og/mybashconfig \
&& cd mybashconfig \
&& cp src/* /home/john/
# Get vim files/tools
USER root
RUN \
DEBIAN_FRONTEND=noninteractive apt-get update \
&& apt-get install -y curl
USER john
RUN curl -fLo home/john/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# Some fonts look sketchy if the language isn't set to english:
# * The powerline git glyphs in the fish prompt are all displayed as question
# marks.
#
# * The shell confuses the position of the cursor, so characters are left
# around when they should have been cleared, and the cursor's home position
# is pushed one or two places to the right.
#
# * Most likely, the bad cursor position is caused by some dependencies the
# interpretation of escape sequences have on the language setting. At this
# point I don't even care anymore (literally took 8 hours to figure this
# out). I just know this shit is needed to make the prompt work correctly.
USER root
RUN locale-gen "en_US.UTF-8"
USER john
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN fc-cache -vf
+16
View File
@@ -0,0 +1,16 @@
#!/usr/bin/env fish
set this_dir (realpath (dirname (status -f)))
set image_working_dir (realpath "$this_dir/../..")
set image_name $argv[1]
if test (count $argv) -eq 0
set image_name_cmd "$this_dir/docker_image_name.fish"
set image_name (eval $image_name_cmd)
end
docker build \
-f "$this_dir/Dockerfile" \
-t "$image_name" \
"$image_working_dir"
+11
View File
@@ -0,0 +1,11 @@
#!/usr/bin/env fish
if test (count $argv) -gt 0
echo $argv
exit 0
end
set image_name_cmd (realpath (dirname (status -f)))"/docker_image_name.fish"
set image_name (eval $image_name_cmd)
echo $image_name
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env fish
echo "$USER""s_"(basename (git rev-parse --show-toplevel))"-dev"
+12
View File
@@ -0,0 +1,12 @@
#!/usr/bin/env fish
set inst_name $argv[1]
if test (count $argv) -eq 0
set script_dir (realpath (dirname (status -f)))
set inst_name (eval $script_dir"/docker_container_name.fish")
end
set working_dir (realpath (pwd))
echo $inst_name
docker exec -w $working_dir -it "$inst_name" bash
+148
View File
@@ -0,0 +1,148 @@
#!/usr/bin/env fish
function print_help_and_exit
echo "\
Usage: setup_builds.sh [OPTIONS] compiler build-type
Positionals:
gcc Compile with gcc
clang Compile with clang
debug Build debug
release Build release
Options:
--compiler <clang|gcc> Specify the compiler
--type <debug|release> Specify the type of build
-f,--force Overwrite existing build directories
-h,--help Print this help message and exit
"
exit $argv[1]
end
function assert_dir
if test ! -d "$argv[1]"
if test -n "$argv[2]"
echo "Invalid variable "$argv[2]": '"$argv[1]"' is not a directory"
else
echo "'"$argv[1]"' is not a directory"
end
exit 1
end
end
# common variables
set tools_path (realpath (dirname (status -f)))
set spartan_path_cmd $tools_path/spartan_path.fish
set repo_root (eval $spartan_path_cmd "repo-root")
set build_root "$repo_root"/"build"
mkdir -p "$build_root"
# Initialize the build directory. Expected arguments: <compiler>, <build_type>
# Note: this method assumes the variables 'repot_root' and 'build_root' have
# already been properly initialized
function setup_build
assert_dir $repo_root
assert_dir $build_root
set compiler "$argv[1]"
set c_compiler (which cc)
set build_type "$argv[2]"
if test \( -z "$build_type" \) -o \( \( "$build_type" != debug \) -a \( "$build_type" != release \) \)
print_help_and_exit 1
end
if test "$build_type" = debug
set build_type_arg Debug
if test "$compiler" = gcc
set compiler_arg "/usr/lib/ccache/g++"
else
# set compiler_arg "/usr/lib/ccache/clang++"
set compiler_arg "clang++"
set c_compiler (which clang)
end
else if test "$build_type" = release
set build_type_arg Release
if test "$compiler" = gcc
set compiler_arg "g++"
else
set compiler_arg "clang++"
end
end
if test \( -z "$compiler" \) -o \( \( "$compiler" != gcc \) -a \( "$compiler" != clang \) \)
print_help_and_exit 1
end
set build_dest $build_root"/"$compiler"/"$build_type
echo "Set up build: "$compiler" "$build_type
if test \( -z "$force" \) -a \( -d $build_dest \)
echo "The build directory '"$build_dest"' already exists (use -f to overwrite)"
return 1
end
rm -rf "$build_dest"
mkdir -p "$build_dest"
cd "$build_dest"
cmake -G Ninja -DCMAKE_BUILD_TYPE=$build_type_arg -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DCMAKE_C_COMPILER=$c_compiler -DCMAKE_CXX_COMPILER=$compiler_arg $repo_root
end
# The while loop below removes arguments (via shift) as it parses them.
# Additional information that needs to be extracted from the arguments must be
# done so before the loop is executed.
set i 1
while test $i -le (count $argv)
switch $argv[$i]
case --compiler
set i (math "$i + 1")
set compiler $argv[$i]
case clang
set compiler clang
case gcc
set compiler gcc
case --type
set i (math "$i + 1")
set build_type $argv[$i]
case release
set build_type release
case debug
set build_type debug
case -f
set force 1
case --force
set force 1
case -h
print_help_and_exit 0
case --help
print_help_and_exit 0
case '*'
print_help_and_exit 1
end
set i (math "$i + 1")
end
echo "compiler in "$compiler
echo "build type in "$build_type
if test -n "$compiler"
if test -n "$build_type"
setup_build $compiler $build_type
else
# all builds for the specified compiler
setup_build $compiler debug
setup_build $compiler release
end
else if test -n "$build_type"
# all builds for the specified build type
setup_build gcc $build_type
setup_build clang $build_type
else
# all builds
setup_build gcc debug
setup_build gcc release
setup_build clang debug
setup_build clang release
end
+153
View File
@@ -0,0 +1,153 @@
#!/usr/bin/env fish
function print_help_and_exit
echo "\
Usage: setup_builds.sh [OPTIONS] compiler build-type
Positionals:
gcc Compile with gcc
clang Compile with clang
debug Build debug
release Build release
Options:
--compiler <clang|gcc> Specify the compiler
--type <debug|release> Specify the type of build
-f,--force Overwrite existing build directories
-h,--help Print this help message and exit
"
exit $argv[1]
end
function assert_dir
if test ! -d "$argv[1]"
if test -n "$argv[2]"
echo "Invalid variable "$argv[2]": '"$argv[1]"' is not a directory"
else
echo "'"$argv[1]"' is not a directory"
end
exit 1
end
end
# common variables
#set tools_path (readlink -f (pwd))
#set tools_path (cd (dirname (status --current-filename)); and pwd)
set tools_path (realpath (dirname (status -f)))
set spartan_path_cmd $tools_path/spartan_path.fish
set repo_root (eval $spartan_path_cmd "repo-root")
# Don't call 'spartan_path_cmd "build"' bc it returns specific build path
# (i.e., for a particular compiler/build type), not the root build path
# set build_root (eval $spartan_path_cmd "build")
set build_root "$repo_root"/"build"
mkdir -p "$build_root"
# Initialize the build directory. Expected arguments: <compiler>, <build_type>
# Note: this method assumes the variables 'repot_root' and 'build_root' have
# already been properly initialized
function setup_build
assert_dir $repo_root
assert_dir $build_root
set compiler "$argv[1]"
set build_type "$argv[2]"
if test \( -z "$build_type" \) -o \( \( "$build_type" != "debug" \) -a \( "$build_type" != "release" \) \)
print_help_and_exit 1
end
if test "$build_type" = "debug"
set build_type_arg "Debug"
if test "$compiler" = "gcc"
set compiler_arg "/usr/lib/ccache/g++"
else
set compiler_arg "/usr/lib/ccache/clang++"
end
else if test "$build_type" = "release"
set build_type_arg "Release"
if test "$compiler" = "gcc"
set compiler_arg "g++"
else
set compiler_arg "clang++"
end
end
if test \( -z "$compiler" \) -o \( \( "$compiler" != "gcc" \) -a \( "$compiler" != "clang" \) \)
print_help_and_exit 1
end
set build_dest $build_root"/"$compiler"/"$build_type
set conan_dest $repo_root"/conan/"$compiler"_"$build_type
echo "Set up build: "$compiler" "$build_type
if test \( -z "$force" \) -a \( -d $build_dest \)
echo "The build directory '"$build_dest"' already exists (use -f to overwrite)"
return 1
end
rm -rf "$build_dest"
mkdir -p "$build_dest"
mkdir -p "$conan_dest"
cd "$build_dest"
conan install --build missing --profile $conan_dest $repo_root
cmake -G Ninja -DCMAKE_BUILD_TYPE=$build_type_arg -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DCMAKE_CXX_COMPILER=$compiler_arg $repo_root
end
# The while loop below removes arguments (via shift) as it parses them.
# Additional information that needs to be extracted from the arguments must be
# done so before the loop is executed.
set i 1
while test $i -le (count $argv)
switch $argv[$i]
case '--compiler'
set i (math "$i + 1")
set compiler $argv[$i]
case 'clang'
set compiler 'clang'
case 'gcc'
set compiler 'gcc'
case '--type'
set i (math "$i + 1")
set build_type $argv[$i]
case 'release'
set build_type 'release'
case 'debug'
set build_type 'debug'
case '-f'
set force 1
case '--force'
set force 1
case '-h'
print_help_and_exit 0
case '--help'
print_help_and_exit 0
case '*'
print_help_and_exit 1
end
set i (math "$i + 1")
end
echo "compiler in "$compiler
echo "build type in "$build_type
if test -n "$compiler"
if test -n "$build_type"
setup_build $compiler $build_type
else
# all builds for the specified compiler
setup_build $compiler "debug"
setup_build $compiler "release"
end
else if test -n "$build_type"
# all builds for the specified build type
setup_build "gcc" $build_type
setup_build "clang" $build_type
else
# all builds
setup_build "gcc" "debug"
setup_build "gcc" "release"
setup_build "clang" "debug"
setup_build "clang" "release"
end
+92
View File
@@ -0,0 +1,92 @@
#!/usr/bin/env fish
#basename (git rev-parse --show-toplevel)
function print_help_and_exit
echo "\
Print paths to core parts of the repository
Usage: sparkd_path.sh SUBCOMMAND
Subcommands:
build Print build path
repo-root Print repo root path
"
exit $argv[1]
end
function print_build_help_and_exit
echo "\
Print build path
Usage: sparkd_path.sh build [OPTIONS] compiler build-type
Positionals:
gcc Print gcc build path
clang Print clang build path
debug Print debug build path
release Print release build path
Options:
--compiler <clang|gcc> Specify the compiler
--type <debug|release> Specify the type of build
-h,--help Print this help message and exit
"
exit $argv[1]
end
function print_repo_root
git rev-parse --show-toplevel
end
function run_repo_root
print_repo_root
end
function run_build
set compiler "gcc"
set build_type "release"
set i 1
while test $i -lt (count $argv)
switch $argv[$i]
case '--compiler'
set i (math "$i + 1")
set compiler $argv[$i]
case 'clang'
set compiler 'clang'
case 'gcc'
set compiler 'gcc'
case '--type'
set i (math "$i + 1")
set build_type $argv[$i]
case 'release'
set build_type 'release'
case 'debug'
set build_type 'debug'
'-h'
print_build_help_and_exit 0
'--help'
print_build_help_and_exit 0
'*'
print_build_help_and_exit 1
end
set i (math "$i + 1")
end
if test \( $compiler = "clang" \) -o \( $compiler = "gcc" \)
set comp_path $compiler
else
print_build_help_and_exit 1
end
set src_root (print_repo_root)
set build_root (readlink -f "$src_root""/build")
set build_dest $build_root"/"$compiler"/"$build_type
echo $build_dest
end
if test "$argv[1]" = "repo-root"
print_repo_root $argv[2..-1]
else if test "$argv[1]" = "build"
run_build $argv[2..-1]
else
print_help_and_exit 1
end
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env fish
set image_name $argv[1]
set cont_name $argv[2]
if test (count $argv) -lt 2
if test (count $argv) -lt 1
set image_name_cmd (realpath (dirname (status -f)))"/docker_image_name.fish"
set image_name (eval $image_name_cmd)
end
set cont_name_cmd (realpath (dirname (status -f)))"/docker_container_name.fish "$image_name
set cont_name (eval $cont_name_cmd)
end
set working_dir (realpath (pwd))
set home_path /home/john
set repo_path (git rev-parse --show-toplevel)
set repo_path_out /home/john/Documents/repos/bts/(basename $repo_path)
set working_dir $repo_path_out
echo "starting docker instance '"$cont_name"' (image '"$image_name"')"
echo "working dir "$working_dir
docker run \
--rm \
--net host \
-h (hostname) \
-e "TZ=America/New_York" \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
--name $cont_name \
-v $repo_path:$repo_path_out \
-u (id -u $USER) \
-w $working_dir \
--shm-size=4024m \
-t \
-i \
-d \
-e DISPLAY="$DISPLAY" \
"$image_name" \
bash
File renamed without changes.
+513
View File
@@ -0,0 +1,513 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Spark Local",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/build/gcc/debug/server/sparkd",
"args": [
"run",
"test",
"-a",
"OutrightVanillaOrder"
],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/build/gcc/debug/server/",
"environment": [
{
"name": "TZ",
"value": "America/Chicago"
}
],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "SparkVM Launch",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/server/sparkd",
"args": [
"test",
"-a",
"[ilink3]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
},
{
"description": "Skip STL",
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
"ignoreFailures": true
},
{
"description": "LD LIBRARY",
"text": "set env LD_LIBRARY_PATH=.",
"ignoreFailures": false
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/build/gcc/debug/server/sparkd/sparkd",
"args": [
"run"
],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/build/gcc/debug/src/server/sparkd",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "Client Launch",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/spark.exe",
"args": [],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "SDK Launch",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/spark_sdk.exe",
"args": [
"md",
"GLBX",
"Future",
"CL",
"CLZ9",
"--user=bts",
"--pass="
],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "Excel Launch",
"type": "clr",
"request": "launch",
"program": "C:/Program Files/Microsoft Office/Office14/EXCEL.EXE",
"args": [
"${workspaceRoot}/build/Debug/bin/net471/spark_excel-addin64-packed.xll"
],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "Client Tests",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/sparkcmd.exe",
"args": [
"test",
"ApiUpdateTests"
],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "Client Attach",
"type": "clr",
"request": "attach",
"processId": "${command:pickProcess}"
},
{
"name": "Spreader Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/server/sparkd",
"args": [
"test",
"[spreader]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "MD Synthetic Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/server/sparkd",
"args": [
"test",
"[md][synthetic]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Spartan Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/server/sparkd",
"args": [
"test",
"[spartan_md]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Matcher Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/server/sparkd",
"args": [
"test",
"[matcher]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Admin Service Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/src/server/sparkd/sparkd",
"args": [
"test",
"[admin_service]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/src/server/sparkd/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Limiter Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/src/server/sparkd/sparkd",
"args": [
"test",
"[limiter]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/src/server/sparkd/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "MD Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/server/sparkd",
"args": [
"test",
"[algo]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Skip STL",
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "SparkVM attach",
"type": "cppdbg",
"request": "attach",
"program": "/home/bts/spark/build/gcc/debug/src/server/sparkd/sparkd",
"processId": "${command:pickRemoteProcess}",
"MIMode": "gdb",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Python",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"python": "${command:python.interpreterPath}",
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
"args": [
"DEBUG"
],
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": ".NET Core Remote Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickRemoteProcess}",
"pipeTransport": {
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/home/bts/vsdbg/vsdbg",
"pipeCwd": "${workspaceRoot}",
"quoteArgs": true
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
},
"justMyCode": true
},
{
"name": ".NET Core Remote Launch",
"type": "coreclr",
"request": "launch",
"program": "/usr/bin/dotnet",
"args": [
"sparkcmd.dll",
"test",
"test_join_create_and_takeout_market"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server",
"pipeTransport": {
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/home/bts/vsdbg/vsdbg",
"pipeCwd": "${workspaceRoot}",
"quoteArgs": true
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
},
"justMyCode": false
},
]
}
@@ -0,0 +1,941 @@
{
"$schema": "vscode://schemas/color-theme",
"type": "dark",
"colors": {
"activityBar.background": "#111111",
"activityBar.border": "#111111",
"activityBar.foreground": "#888888",
"activityBarBadge.background": "#88cc44",
"activityBarBadge.foreground": "#222222",
"badge.background": "#88cc44",
"badge.foreground": "#222222",
"button.background": "#333333",
"button.foreground": "#888888",
"button.hoverBackground": "#222222",
"debugExceptionWidget.background": "#333333",
"debugExceptionWidget.border": "#222222",
"debugToolBar.background": "#111111",
"diffEditor.insertedTextBackground": "#ffdd440c",
"diffEditor.insertedTextBorder": "#ffdd44",
"diffEditor.removedTextBackground": "#88bbff0c",
"diffEditor.removedTextBorder": "#88bbff",
"dropdown.background": "#222222",
"dropdown.border": "#222222",
"dropdown.foreground": "#888888",
"editor.background": "#222222",
"editor.findMatchBackground": "#44446655",
"editor.findMatchHighlightBackground": "#444466aa",
"editor.foreground": "#ffffff",
"editor.hoverHighlightBackground": "#44446655",
"editor.inactiveSelectionBackground": "#44446655",
"editor.lineHighlightBackground": "#00000066",
"editor.lineHighlightBorder": "#00000000",
"editor.rangeHighlightBackground": "#333333",
"editor.selectionBackground": "#444466",
"editor.selectionHighlightBackground": "#44446655",
"editor.wordHighlightBackground": "#44446655",
"editor.wordHighlightStrongBackground": "#44446655",
"editorBracketMatch.background": "#222222",
"editorBracketMatch.border": "#666666",
"editorCodeLens.foreground": "#666666",
"editorCursor.foreground": "#ffffff",
"editorError.foreground": "#ee5500",
"editorGroup.border": "#111111",
"editorGroup.dropBackground": "#111111bb",
"editorGroupHeader.noTabsBackground": "#111111",
"editorGroupHeader.tabsBackground": "#111111",
"editorGroupHeader.tabsBorder": "#222222",
"editorGutter.addedBackground": "#ffdd44",
"editorGutter.background": "#222222",
"editorGutter.deletedBackground": "#88bbff",
"editorGutter.modifiedBackground": "#88bbff",
"editorHoverWidget.background": "#333333",
"editorHoverWidget.border": "#222222",
"editorIndentGuide.background": "#333333",
"editorLineNumber.foreground": "#555555",
"editorLink.activeForeground": "#bba0ff",
"editorMarkerNavigation.background": "#333333",
"editorMarkerNavigationError.background": "#88bbff",
"editorMarkerNavigationWarning.background": "#88bbff",
"editorOverviewRuler.addedForeground": "#ffdd44",
"editorOverviewRuler.border": "#222222",
"editorOverviewRuler.currentContentForeground": "#333333",
"editorOverviewRuler.deletedForeground": "#88bbff",
"editorOverviewRuler.errorForeground": "#88bbff",
"editorOverviewRuler.findMatchForeground": "#555555",
"editorOverviewRuler.incomingContentForeground": "#333333",
"editorOverviewRuler.infoForeground": "#bba0ff",
"editorOverviewRuler.modifiedForeground": "#88bbff",
"editorOverviewRuler.rangeHighlightForeground": "#333333",
"editorOverviewRuler.selectionHighlightForeground": "#555555",
"editorOverviewRuler.warningForeground": "#88bbff",
"editorOverviewRuler.wordHighlightForeground": "#333333",
"editorOverviewRuler.wordHighlightStrongForeground": "#555555",
"editorRuler.foreground": "#ffffff",
"editorSuggestWidget.background": "#333333",
"editorSuggestWidget.border": "#333333",
"editorSuggestWidget.foreground": "#888888",
"editorSuggestWidget.highlightForeground": "#ffffff",
"editorSuggestWidget.selectedBackground": "#666666",
"editorWarning.border": "#00000000",
"editorWarning.foreground": "#88bbff",
"editorWhitespace.foreground": "#333333",
"editorWidget.background": "#333333",
"editorWidget.border": "#333333",
"errorForeground": "#88bbff",
"extensionButton.prominentBackground": "#333333",
"extensionButton.prominentForeground": "#ffffff",
"extensionButton.prominentHoverBackground": "#555555",
"focusBorder": "#666666",
"foreground": "#ffffff",
"gitDecoration.modifiedResourceForeground": "#cccccc",
"gitDecoration.untrackedResourceForeground": "#cccccc",
"input.background": "#333333",
"input.border": "#333333",
"input.foreground": "#ffffff",
"input.placeholderForeground": "#555555",
"inputOption.activeBorder": "#555555",
"inputValidation.errorBackground": "#333333",
"inputValidation.errorBorder": "#88bbff",
"inputValidation.infoBackground": "#333333",
"inputValidation.infoBorder": "#bba0ff",
"inputValidation.warningBackground": "#333333",
"inputValidation.warningBorder": "#88bbff",
"list.activeSelectionBackground": "#111111",
"list.activeSelectionForeground": "#ffffff",
"list.dropBackground": "#111111bf",
"list.focusBackground": "#222222",
"list.focusForeground": "#ffffff",
"list.highlightForeground": "#ffffff",
"list.hoverBackground": "#333333",
"list.hoverForeground": "#ffffff",
"list.inactiveSelectionBackground": "#000000",
"list.inactiveSelectionForeground": "#ffffff",
"menu.background": "#333333",
"menu.foreground": "#ffffff",
"merge.border": "#222222",
"merge.currentContentBackground": "#333333",
"merge.currentHeaderBackground": "#555555",
"merge.incomingContentBackground": "#555555",
"merge.incomingHeaderBackground": "#666666",
"panel.background": "#111111",
"panel.border": "#111111",
"panelTitle.activeBorder": "#ffffff",
"panelTitle.activeForeground": "#ffffff",
"panelTitle.inactiveForeground": "#888888",
"peekView.border": "#222222",
"peekViewEditor.background": "#333333",
"peekViewEditor.matchHighlightBackground": "#555555",
"peekViewEditorGutter.background": "#333333",
"peekViewResult.background": "#333333",
"peekViewResult.fileForeground": "#888888",
"peekViewResult.lineForeground": "#888888",
"peekViewResult.matchHighlightBackground": "#555555",
"peekViewResult.selectionBackground": "#333333",
"peekViewResult.selectionForeground": "#ffffff",
"peekViewTitle.background": "#333333",
"peekViewTitleDescription.foreground": "#888888",
"peekViewTitleLabel.foreground": "#ffffff",
"pickerGroup.border": "#222222",
"pickerGroup.foreground": "#555555",
"progressBar.background": "#333333",
"scrollbar.shadow": "#191919",
"scrollbarSlider.activeBackground": "#ffffff12",
"scrollbarSlider.background": "#ffffff12",
"scrollbarSlider.hoverBackground": "#ffffff12",
"selection.background": "#2255aa",
"sideBar.background": "#111111",
"sideBar.border": "#111111",
"sideBar.foreground": "#888888",
"sideBarSectionHeader.background": "#111111",
"sideBarSectionHeader.foreground": "#666666",
"sideBarTitle.foreground": "#555555",
"statusBar.background": "#111111",
"statusBar.border": "#111111",
"statusBar.debuggingBackground": "#666666",
"statusBar.debuggingForeground": "#ffffff",
"statusBar.foreground": "#666666",
"statusBar.noFolderBackground": "#111111",
"statusBar.noFolderForeground": "#666666",
"statusBarItem.activeBackground": "#222222",
"statusBarItem.hoverBackground": "#222222",
"statusBarItem.prominentBackground": "#333333",
"statusBarItem.prominentHoverBackground": "#444444",
"tab.activeBackground": "#222222",
"tab.border": "#111111",
"tab.inactiveBackground": "#111111",
"tab.inactiveForeground": "#888888",
"tab.unfocusedActiveBorder": "#888888",
"tab.unfocusedActiveForeground": "#888888",
"tab.unfocusedInactiveForeground": "#888888",
"terminal.ansiBlack": "#333333",
"terminal.ansiBlue": "#88bbff",
"terminal.ansiBrightBlack": "#666666",
"terminal.ansiBrightBlue": "#88bbff",
"terminal.ansiBrightCyan": "#bba0ff",
"terminal.ansiBrightGreen": "#ffdd44",
"terminal.ansiBrightMagenta": "#88bbff",
"terminal.ansiBrightRed": "#88bbff",
"terminal.ansiBrightWhite": "#ffffff",
"terminal.ansiBrightYellow": "#88cc44",
"terminal.ansiCyan": "#bba0ff",
"terminal.ansiGreen": "#ffdd44",
"terminal.ansiMagenta": "#88bbff",
"terminal.ansiRed": "#88bbff",
"terminal.ansiWhite": "#ffffff",
"terminal.ansiYellow": "#88cc44",
"terminal.background": "#151515",
"terminal.foreground": "#ffffff",
"titleBar.activeBackground": "#111111",
"titleBar.activeForeground": "#888888",
"titleBar.inactiveBackground": "#111111",
"titleBar.inactiveForeground": "#555555",
"walkThrough.embeddedEditorBackground": "#111111",
"widget.shadow": "#111111",
//"activityBar.activeBorder": "#888888",
//"activityBar.dropBorder": "#888888",
//"activityBar.inactiveForeground": "#88888866",
//"banner.background": "#111111",
//"banner.foreground": "#ffffff",
//"banner.iconForeground": "#3794ff",
//"bookmarks.lineBackground": "#00000000",
//"bookmarks.lineBorder": "#00000000",
//"bookmarks.overviewRuler": "#157efb88",
//"breadcrumb.activeSelectionForeground": "#ffffff",
//"breadcrumb.background": "#222222",
//"breadcrumb.focusForeground": "#ffffff",
//"breadcrumb.foreground": "#ffffffcc",
//"breadcrumbPicker.background": "#333333",
//"button.secondaryBackground": "#3a3d41",
//"button.secondaryForeground": "#ffffff",
//"button.secondaryHoverBackground": "#45494e",
//"charts.blue": "#3794ff",
//"charts.foreground": "#ffffff",
//"charts.green": "#89d185",
//"charts.lines": "#ffffff80",
//"charts.orange": "#d18616",
//"charts.purple": "#b180d7",
//"charts.red": "#ee5500",
//"charts.yellow": "#88bbff",
//"checkbox.background": "#222222",
//"checkbox.border": "#222222",
//"checkbox.foreground": "#888888",
//"debugConsole.errorForeground": "#88bbff",
//"debugConsole.infoForeground": "#3794ff",
//"debugConsole.sourceForeground": "#ffffff",
//"debugConsole.warningForeground": "#88bbff",
//"debugConsoleInputIcon.foreground": "#ffffff",
//"debugIcon.breakpointCurrentStackframeForeground": "#ffcc00",
//"debugIcon.breakpointDisabledForeground": "#848484",
//"debugIcon.breakpointForeground": "#e51400",
//"debugIcon.breakpointStackframeForeground": "#89d185",
//"debugIcon.breakpointUnverifiedForeground": "#848484",
//"debugIcon.continueForeground": "#75beff",
//"debugIcon.disconnectForeground": "#f48771",
//"debugIcon.pauseForeground": "#75beff",
//"debugIcon.restartForeground": "#89d185",
//"debugIcon.startForeground": "#89d185",
//"debugIcon.stepBackForeground": "#75beff",
//"debugIcon.stepIntoForeground": "#75beff",
//"debugIcon.stepOutForeground": "#75beff",
//"debugIcon.stepOverForeground": "#75beff",
//"debugIcon.stopForeground": "#f48771",
//"debugTokenExpression.boolean": "#4e94ce",
//"debugTokenExpression.error": "#f48771",
//"debugTokenExpression.name": "#c586c0",
//"debugTokenExpression.number": "#b5cea8",
//"debugTokenExpression.string": "#ce9178",
//"debugTokenExpression.value": "#cccccc99",
//"debugView.exceptionLabelBackground": "#6c2022",
//"debugView.exceptionLabelForeground": "#ffffff",
//"debugView.stateLabelBackground": "#88888844",
//"debugView.stateLabelForeground": "#ffffff",
//"debugView.valueChangedHighlight": "#569cd6",
//"descriptionForeground": "#ffffffb3",
//"diffEditor.diagonalFill": "#cccccc33",
//"editor.findRangeHighlightBackground": "#3a3d4166",
//"editor.focusedStackFrameHighlightBackground": "#7abd7a4d",
//"editor.foldBackground": "#4444664d",
//"editor.inlineValuesBackground": "#ffc80033",
//"editor.inlineValuesForeground": "#ffffff80",
//"editor.linkedEditingBackground": "#ff00004d",
//"editor.snippetFinalTabstopHighlightBorder": "#525252",
//"editor.snippetTabstopHighlightBackground": "#7c7c7c4d",
//"editor.stackFrameHighlightBackground": "#ffff0033",
//"editor.symbolHighlightBackground": "#444466aa",
//"editorActiveLineNumber.foreground": "#c6c6c6",
//"editorBracketHighlight.foreground1": "#ffd700",
//"editorBracketHighlight.foreground2": "#da70d6",
//"editorBracketHighlight.foreground3": "#179fff",
//"editorBracketHighlight.foreground4": "#00000000",
//"editorBracketHighlight.foreground5": "#00000000",
//"editorBracketHighlight.foreground6": "#00000000",
//"editorBracketHighlight.unexpectedBracket.foreground": "#ff1212cc",
//"editorBracketPairGuide.activeBackground1": "#00000000",
//"editorBracketPairGuide.activeBackground2": "#00000000",
//"editorBracketPairGuide.activeBackground3": "#00000000",
//"editorBracketPairGuide.activeBackground4": "#00000000",
//"editorBracketPairGuide.activeBackground5": "#00000000",
//"editorBracketPairGuide.activeBackground6": "#00000000",
//"editorBracketPairGuide.background1": "#00000000",
//"editorBracketPairGuide.background2": "#00000000",
//"editorBracketPairGuide.background3": "#00000000",
//"editorBracketPairGuide.background4": "#00000000",
//"editorBracketPairGuide.background5": "#00000000",
//"editorBracketPairGuide.background6": "#00000000",
//"editorGhostText.foreground": "#ffffff56",
//"editorGutter.commentRangeForeground": "#c5c5c5",
//"editorGutter.foldingControlForeground": "#c5c5c5",
//"editorHint.foreground": "#eeeeeeb3",
//"editorHoverWidget.foreground": "#ffffff",
//"editorHoverWidget.highlightForeground": "#ffffff",
//"editorHoverWidget.statusBarBackground": "#3d3d3d",
//"editorIndentGuide.activeBackground": "#333333",
//"editorInfo.foreground": "#3794ff",
//"editorInlayHint.background": "#88cc4499",
//"editorInlayHint.foreground": "#222222cc",
//"editorInlayHint.parameterBackground": "#88cc4499",
//"editorInlayHint.parameterForeground": "#222222cc",
//"editorInlayHint.typeBackground": "#88cc4499",
//"editorInlayHint.typeForeground": "#222222cc",
//"editorLightBulb.foreground": "#ffcc00",
//"editorLightBulbAutoFix.foreground": "#75beff",
//"editorLineNumber.activeForeground": "#c6c6c6",
//"editorMarkerNavigationError.headerBackground": "#88bbff1a",
//"editorMarkerNavigationInfo.background": "#3794ff",
//"editorMarkerNavigationInfo.headerBackground": "#3794ff1a",
//"editorMarkerNavigationWarning.headerBackground": "#88bbff1a",
//"editorOverviewRuler.bracketMatchForeground": "#a0a0a0",
//"editorOverviewRuler.commonContentForeground": "#60606066",
//"editorOverviewRuler.unicodeForeground": "#d186167e",
//"editorPane.background": "#222222",
//"editorSuggestWidget.focusHighlightForeground": "#ffffff",
//"editorSuggestWidget.selectedForeground": "#ffffff",
//"editorSuggestWidgetStatus.foreground": "#88888880",
//"editorUnicodeHighlight.border": "#bd9b03",
//"editorUnnecessaryCode.opacity": "#000000aa",
//"editorWidget.foreground": "#ffffff",
//"extensionBadge.remoteBackground": "#88cc44",
//"extensionBadge.remoteForeground": "#222222",
//"extensionIcon.preReleaseForeground": "#1d9271",
//"extensionIcon.starForeground": "#ff8e00",
//"extensionIcon.verifiedForeground": "#3794ff",
//"gitDecoration.addedResourceForeground": "#81b88b",
//"gitDecoration.conflictingResourceForeground": "#e4676b",
//"gitDecoration.deletedResourceForeground": "#c74e39",
//"gitDecoration.ignoredResourceForeground": "#8c8c8c",
//"gitDecoration.renamedResourceForeground": "#73c991",
//"gitDecoration.stageDeletedResourceForeground": "#c74e39",
//"gitDecoration.stageModifiedResourceForeground": "#e2c08d",
//"gitDecoration.submoduleResourceForeground": "#8db9e2",
//"gitlens.closedAutolinkedIssueIconColor": "#a371f7",
//"gitlens.closedPullRequestIconColor": "#f85149",
//"gitlens.decorations.addedForegroundColor": "#81b88b",
//"gitlens.decorations.branchAheadForegroundColor": "#35b15e",
//"gitlens.decorations.branchBehindForegroundColor": "#b15e35",
//"gitlens.decorations.branchDivergedForegroundColor": "#d8af1b",
//"gitlens.decorations.branchMissingUpstreamForegroundColor": "#c74e39",
//"gitlens.decorations.branchUnpublishedForegroundColor": "#35b15e",
//"gitlens.decorations.branchUpToDateForegroundColor": "#888888",
//"gitlens.decorations.copiedForegroundColor": "#73c991",
//"gitlens.decorations.deletedForegroundColor": "#c74e39",
//"gitlens.decorations.ignoredForegroundColor": "#8c8c8c",
//"gitlens.decorations.modifiedForegroundColor": "#cccccc",
//"gitlens.decorations.renamedForegroundColor": "#73c991",
//"gitlens.decorations.untrackedForegroundColor": "#cccccc",
//"gitlens.gutterBackgroundColor": "#ffffff13",
//"gitlens.gutterForegroundColor": "#bebebe",
//"gitlens.gutterUncommittedForegroundColor": "#00bcf299",
//"gitlens.lineHighlightBackgroundColor": "#00bcf233",
//"gitlens.lineHighlightOverviewRulerColor": "#00bcf299",
//"gitlens.mergedPullRequestIconColor": "#a371f7",
//"gitlens.openAutolinkedIssueIconColor": "#3fb950",
//"gitlens.openPullRequestIconColor": "#3fb950",
//"gitlens.trailingLineBackgroundColor": "#00000000",
//"gitlens.trailingLineForegroundColor": "#99999959",
//"gitlens.unpublishedCommitIconColor": "#35b15e",
//"gitlens.unpulledChangesIconColor": "#b15e35",
//"gitlens.unpushlishedChangesIconColor": "#35b15e",
//"icon.foreground": "#c5c5c5",
//"inputOption.activeBackground": "#66666666",
//"inputOption.activeForeground": "#ffffff",
//"inputOption.hoverBackground": "#5a5d5e80",
//"interactive.activeCodeBorder": "#222222",
//"interactive.inactiveCodeBorder": "#000000",
//"keybindingLabel.background": "#8080802b",
//"keybindingLabel.border": "#33333399",
//"keybindingLabel.bottomBorder": "#44444499",
//"keybindingLabel.foreground": "#cccccc",
//"keybindingTable.headerBackground": "#ffffff0a",
//"keybindingTable.rowsBackground": "#ffffff0a",
//"list.deemphasizedForeground": "#8c8c8c",
//"list.errorForeground": "#f88070",
//"list.filterMatchBackground": "#444466aa",
//"list.focusHighlightForeground": "#ffffff",
//"list.focusOutline": "#666666",
//"list.invalidItemForeground": "#b89500",
//"list.warningForeground": "#cca700",
//"listFilterWidget.background": "#653723",
//"listFilterWidget.noMatchesOutline": "#be1100",
//"listFilterWidget.outline": "#00000000",
//"menu.selectionBackground": "#111111",
//"menu.selectionForeground": "#ffffff",
//"menu.separatorBackground": "#bbbbbb",
//"menubar.selectionBackground": "#ffffff1a",
//"menubar.selectionForeground": "#888888",
//"merge.commonContentBackground": "#60606029",
//"merge.commonHeaderBackground": "#60606066",
//"minimap.errorHighlight": "#ff1212b3",
//"minimap.findMatchHighlight": "#d18616",
//"minimap.foregroundOpacity": "#000000",
//"minimap.selectionHighlight": "#264f78",
//"minimap.selectionOccurrenceHighlight": "#676767",
//"minimap.unicodeHighlight": "#d18616",
//"minimap.warningHighlight": "#88bbff",
//"minimapGutter.addedBackground": "#587c0c",
//"minimapGutter.deletedBackground": "#94151b",
//"minimapGutter.modifiedBackground": "#0c7d9d",
//"minimapSlider.activeBackground": "#ffffff09",
//"minimapSlider.background": "#ffffff09",
//"minimapSlider.hoverBackground": "#ffffff09",
//"notebook.cellBorderColor": "#000000",
//"notebook.cellEditorBackground": "#111111",
//"notebook.cellInsertionIndicator": "#666666",
//"notebook.cellStatusBarItemHoverBackground": "#ffffff26",
//"notebook.cellToolbarSeparator": "#80808059",
//"notebook.focusedCellBorder": "#666666",
//"notebook.focusedEditorBorder": "#666666",
//"notebook.inactiveFocusedCellBorder": "#000000",
//"notebook.selectedCellBackground": "#000000",
//"notebook.selectedCellBorder": "#000000",
//"notebook.symbolHighlightBackground": "#ffffff0b",
//"notebookScrollbarSlider.activeBackground": "#ffffff12",
//"notebookScrollbarSlider.background": "#ffffff12",
//"notebookScrollbarSlider.hoverBackground": "#ffffff12",
//"notebookStatusErrorIcon.foreground": "#88bbff",
//"notebookStatusRunningIcon.foreground": "#ffffff",
//"notebookStatusSuccessIcon.foreground": "#89d185",
//"notificationCenterHeader.background": "#424242",
//"notificationLink.foreground": "#3794ff",
//"notifications.background": "#333333",
//"notifications.border": "#424242",
//"notifications.foreground": "#ffffff",
//"notificationsErrorIcon.foreground": "#ee5500",
//"notificationsInfoIcon.foreground": "#3794ff",
//"notificationsWarningIcon.foreground": "#88bbff",
//"panel.dropBorder": "#ffffff",
//"panelSection.border": "#111111",
//"panelSection.dropBackground": "#111111bb",
//"panelSectionHeader.background": "#80808033",
//"ports.iconRunningProcessForeground": "#88cc44",
//"problemsErrorIcon.foreground": "#ee5500",
//"problemsInfoIcon.foreground": "#3794ff",
//"problemsWarningIcon.foreground": "#88bbff",
//"quickInput.background": "#333333",
//"quickInput.foreground": "#ffffff",
//"quickInputList.focusBackground": "#111111",
//"quickInputList.focusForeground": "#ffffff",
//"quickInputTitle.background": "#ffffff1b",
//"sash.hoverBorder": "#666666",
//"scm.providerBorder": "#454545",
//"searchEditor.findMatchBackground": "#44446670",
//"searchEditor.textInputBorder": "#333333",
//"settings.checkboxBackground": "#222222",
//"settings.checkboxBorder": "#222222",
//"settings.checkboxForeground": "#888888",
//"settings.dropdownBackground": "#222222",
//"settings.dropdownBorder": "#222222",
//"settings.dropdownForeground": "#888888",
//"settings.dropdownListBorder": "#333333",
//"settings.focusedRowBackground": "#80808024",
//"settings.focusedRowBorder": "#ffffff1f",
//"settings.headerForeground": "#e7e7e7",
//"settings.modifiedItemIndicator": "#0c7d9d",
//"settings.numberInputBackground": "#333333",
//"settings.numberInputBorder": "#333333",
//"settings.numberInputForeground": "#ffffff",
//"settings.rowHoverBackground": "#80808012",
//"settings.textInputBackground": "#333333",
//"settings.textInputBorder": "#333333",
//"settings.textInputForeground": "#ffffff",
//"sideBar.dropBackground": "#111111bb",
//"sideBySideEditor.horizontalBorder": "#111111",
//"sideBySideEditor.verticalBorder": "#111111",
//"statusBar.debuggingBorder": "#111111",
//"statusBar.noFolderBorder": "#111111",
//"statusBarItem.compactHoverBackground": "#ffffff33",
//"statusBarItem.errorBackground": "#0066eb",
//"statusBarItem.errorForeground": "#ffffff",
//"statusBarItem.prominentForeground": "#666666",
//"statusBarItem.remoteBackground": "#88cc44",
//"statusBarItem.remoteForeground": "#222222",
//"statusBarItem.warningBackground": "#0066eb",
//"statusBarItem.warningForeground": "#ffffff",
//"symbolIcon.arrayForeground": "#ffffff",
//"symbolIcon.booleanForeground": "#ffffff",
//"symbolIcon.classForeground": "#ee9d28",
//"symbolIcon.colorForeground": "#ffffff",
//"symbolIcon.constantForeground": "#ffffff",
//"symbolIcon.constructorForeground": "#b180d7",
//"symbolIcon.enumeratorForeground": "#ee9d28",
//"symbolIcon.enumeratorMemberForeground": "#75beff",
//"symbolIcon.eventForeground": "#ee9d28",
//"symbolIcon.fieldForeground": "#75beff",
//"symbolIcon.fileForeground": "#ffffff",
//"symbolIcon.folderForeground": "#ffffff",
//"symbolIcon.functionForeground": "#b180d7",
//"symbolIcon.interfaceForeground": "#75beff",
//"symbolIcon.keyForeground": "#ffffff",
//"symbolIcon.keywordForeground": "#ffffff",
//"symbolIcon.methodForeground": "#b180d7",
//"symbolIcon.moduleForeground": "#ffffff",
//"symbolIcon.namespaceForeground": "#ffffff",
//"symbolIcon.nullForeground": "#ffffff",
//"symbolIcon.numberForeground": "#ffffff",
//"symbolIcon.objectForeground": "#ffffff",
//"symbolIcon.operatorForeground": "#ffffff",
//"symbolIcon.packageForeground": "#ffffff",
//"symbolIcon.propertyForeground": "#ffffff",
//"symbolIcon.referenceForeground": "#ffffff",
//"symbolIcon.snippetForeground": "#ffffff",
//"symbolIcon.stringForeground": "#ffffff",
//"symbolIcon.structForeground": "#ffffff",
//"symbolIcon.textForeground": "#ffffff",
//"symbolIcon.typeParameterForeground": "#ffffff",
//"symbolIcon.unitForeground": "#ffffff",
//"symbolIcon.variableForeground": "#75beff",
//"tab.activeForeground": "#ffffff",
//"tab.activeModifiedBorder": "#3399cc",
//"tab.inactiveModifiedBorder": "#3399cc80",
//"tab.lastPinnedBorder": "#585858",
//"tab.unfocusedActiveBackground": "#222222",
//"tab.unfocusedActiveModifiedBorder": "#3399cc80",
//"tab.unfocusedInactiveBackground": "#111111",
//"tab.unfocusedInactiveModifiedBorder": "#3399cc40",
//"terminal.border": "#111111",
//"terminal.dropBackground": "#111111bb",
//"terminal.selectionBackground": "#ffffff40",
//"testing.iconErrored": "#f14c4c",
//"testing.iconFailed": "#f14c4c",
//"testing.iconPassed": "#73c991",
//"testing.iconQueued": "#cca700",
//"testing.iconSkipped": "#848484",
//"testing.iconUnset": "#848484",
//"testing.message.error.decorationForeground": "#ee5500",
//"testing.message.error.lineBackground": "#ff000033",
//"testing.message.info.decorationForeground": "#ffffff80",
//"testing.peekBorder": "#ee5500",
//"testing.peekHeaderBackground": "#ee55001a",
//"testing.runAction": "#73c991",
//"textBlockQuote.background": "#7f7f7f1a",
//"textBlockQuote.border": "#007acc80",
//"textCodeBlock.background": "#0a0a0a66",
//"textLink.activeForeground": "#3794ff",
//"textLink.foreground": "#3794ff",
//"textPreformat.foreground": "#d7ba7d",
//"textSeparator.foreground": "#ffffff2e",
//"toolbar.activeBackground": "#63666750",
//"toolbar.hoverBackground": "#5a5d5e50",
//"tree.indentGuidesStroke": "#585858",
//"tree.tableColumnsBorder": "#cccccc20",
//"tree.tableOddRowsBackground": "#ffffff0a",
//"welcomePage.progress.background": "#333333",
//"welcomePage.progress.foreground": "#3794ff",
//"welcomePage.tileBackground": "#333333",
//"welcomePage.tileHoverBackground": "#3d3d3d",
//"welcomePage.tileShadow": "#111111",
//"activityBar.activeBackground": null,
//"activityBar.activeFocusBorder": null,
//"button.border": null,
//"contrastActiveBorder": null,
//"contrastBorder": null,
//"debugToolBar.border": null,
//"diffEditor.border": null,
//"dropdown.listBackground": null,
//"editor.findMatchBorder": null,
//"editor.findMatchHighlightBorder": null,
//"editor.findRangeHighlightBorder": null,
//"editor.rangeHighlightBorder": null,
//"editor.selectionForeground": null,
//"editor.selectionHighlightBorder": null,
//"editor.snippetFinalTabstopHighlightBackground": null,
//"editor.snippetTabstopHighlightBorder": null,
//"editor.symbolHighlightBorder": null,
//"editor.wordHighlightBorder": null,
//"editor.wordHighlightStrongBorder": null,
//"editorCursor.background": null,
//"editorError.background": null,
//"editorError.border": null,
//"editorGhostText.background": null,
//"editorGhostText.border": null,
//"editorGroup.emptyBackground": null,
//"editorGroup.focusedEmptyBorder": null,
//"editorGroupHeader.border": null,
//"editorHint.border": null,
//"editorInfo.background": null,
//"editorInfo.border": null,
//"editorOverviewRuler.background": null,
//"editorSuggestWidget.selectedIconForeground": null,
//"editorUnnecessaryCode.border": null,
//"editorWarning.background": null,
//"editorWidget.resizeBorder": null,
//"inputValidation.errorForeground": null,
//"inputValidation.infoForeground": null,
//"inputValidation.warningForeground": null,
//"list.activeSelectionIconForeground": null,
//"list.filterMatchBorder": null,
//"list.inactiveFocusBackground": null,
//"list.inactiveFocusOutline": null,
//"list.inactiveSelectionIconForeground": null,
//"menu.border": null,
//"menu.selectionBorder": null,
//"menubar.selectionBorder": null,
//"minimap.background": null,
//"notebook.cellHoverBackground": null,
//"notebook.focusedCellBackground": null,
//"notebook.inactiveSelectedCellBorder": null,
//"notebook.outputContainerBackgroundColor": null,
//"notebook.outputContainerBorderColor": null,
//"notificationCenter.border": null,
//"notificationCenterHeader.foreground": null,
//"notificationToast.border": null,
//"panelInput.border": null,
//"panelSectionHeader.border": null,
//"panelSectionHeader.foreground": null,
//"peekViewEditor.matchHighlightBorder": null,
//"quickInput.list.focusBackground": null,
//"quickInputList.focusIconForeground": null,
//"searchEditor.findMatchBorder": null,
//"sideBarSectionHeader.border": null,
//"tab.activeBorder": null,
//"tab.activeBorderTop": null,
//"tab.hoverBackground": null,
//"tab.hoverBorder": null,
//"tab.hoverForeground": null,
//"tab.unfocusedActiveBorderTop": null,
//"tab.unfocusedHoverBackground": null,
//"tab.unfocusedHoverBorder": null,
//"tab.unfocusedHoverForeground": null,
//"terminal.tab.activeBorder": null,
//"terminalCursor.background": null,
//"terminalCursor.foreground": null,
//"testing.message.info.lineBackground": null,
//"titleBar.border": null,
//"toolbar.hoverOutline": null,
//"welcomePage.background": null,
//"window.activeBorder": null,
//"window.inactiveBorder": null
},
"tokenColors": [
{
"scope": [
"variable.language.this"
],
"settings": {
"fontStyle": ""
}
},
{
"scope": "markup.bold",
"settings": {
"fontStyle": "bold"
}
},
{
"scope": [
"invalid",
"markup.italic",
"markup.quote"
],
"settings": {
"fontStyle": "italic"
}
},
{
"scope": "markup.underline",
"settings": {
"fontStyle": "underline"
}
},
{
"scope": [
"source.js.jsx punctuation.section.embedded",
"entity.name.tag",
"string.other.link.description.title",
"support.constant",
"support.variable",
"support.type",
"variable.other.class",
"support.class.builtin.js",
"support.class.console.js",
"meta.property-value",
"variable.parameter.keyframe-list",
"meta.at-rule.keyframes entity.name.function",
"expression.embedded.vue punctuation.definition"
],
"settings": {
"foreground": "#BBA0FF",
"fontStyle": ""
}
},
{
"scope": [
"entity.other.attribute-name.pseudo-class.css",
"entity.name.type.object.console",
"variable.language",
"variable.parameter.function.language.special.self.python",
"storage.type",
"entity.other.attribute-name.pseudo-element.css"
],
"settings": {
"foreground": "#BBA0FF",
"fontStyle": "italic"
}
},
{
"scope": [
"punctuation.definition.string.template"
],
"settings": {
"foreground": "#BBA0FF",
"fontStyle": "bold"
}
},
{
"scope": [
"entity.other.attribute-name.class.css",
"entity.other.attribute-name.parent-selector-suffix.css",
"entity.other.attribute-name.parent-selector-suffix.css punctuation.definition.entity.css",
"meta.definition.function",
"markup.underline.link",
"markup.inserted",
"meta.function-call",
"meta.instance.constructor",
"meta.attribute-with-value.class string",
"string.other.ref",
"string.other.restructuredtext.ref",
"variable.function",
"entity.name.type",
"entity.name.function",
"variable.other.object.property",
"punctuation.separator.key-value",
"meta.definition.function.js",
"support.class.component.js",
"entity.other.inherited-class",
"support.class",
"support.function.misc",
"support.function",
"entity.other.attribute-name.id.css",
"entity.other.attribute-name.id.css punctuation",
"entity.other.attribute-name.class.css punctuation",
"meta.function-call support.function.construct",
"entity.other.attribute-name"
],
"settings": {
"foreground": "#FFDD44"
}
},
{
"scope": "storage.type.function.arrow",
"settings": {
"foreground": "#FFDD44",
"fontStyle": ""
}
},
{
"scope": [
"entity.name.section",
"constant.numeric.line-number.match.find-in-files",
"markup.heading",
"markup.changed",
"meta.attribute-with-value.id string",
"string",
"punctuation.definition.string.begin",
"punctuation.definition.string.end",
"meta.attribute-selector"
],
"settings": {
"foreground": "#88CC44"
}
},
{
"scope": [
"keyword",
"keyword.control",
"constant",
"constant.numeric",
"constant.language",
"constant.other.property",
"constant.character.escape",
"comment keyword.codetag.notation",
"keyword.other.template.begin",
"keyword.other.template.end",
"markup.raw",
"markup.deleted",
"meta.property-list.css variable.other",
"entity.name.constant.preprocessor",
"meta.preprocessor",
"punctuation.section.embedded",
"punctuation.template-string.element.begin",
"punctuation.template-string.element.end",
"string.quoted.template punctuation.definition.string.begin",
"string.quoted.template punctuation.definition.string.end",
"meta.paragraph.markdown meta.dummy.line-break",
"meta.paragraph.markdown meta.hard-line-break.markdown",
"storage",
"storage.class.restructuredtext.ref",
"string.other.link.title",
"string.other.link.description",
"string.regexp punctuation.definition.string.begin",
"string.regexp punctuation.definition.string.end",
"variable.language.arguments",
"storage.modifier",
"keyword.operator.new",
"keyword.operator",
"keyword.operator.spread",
"punctuation.section.embedded.end.php source.php",
"support.function.construct",
"meta.at-rule.keyframes",
"meta.at-rule.keyframes entity.other.attribute-name"
],
"settings": {
"foreground": "#88BBFF"
}
},
{
"scope": [
"variable.other.substitution"
],
"settings": {
"foreground": "#88BBFF",
"fontStyle": "bold"
}
},
{
"scope": [
"meta.function-call meta.function-call.arguments",
"meta.function-call meta.arguments",
"meta.function-call meta.group",
"source.json meta.structure.dictionary",
"meta.object.member",
"punctuation.definition.group",
"string.unquoted.label",
"variable.other.member",
"entity.name.class",
"entity.name.namespace",
"constant.other",
"variable",
"variable.other",
"variable.other.constant.js",
"text.find-in-files",
"source",
"entity.name.type.module",
"source.sql support.function",
"support.other.namespace.php"
],
"settings": {
"foreground": "#FFFFFF",
"fontStyle": ""
}
},
{
"scope": [
"variable.parameter",
"parameters variable.function"
],
"settings": {
"foreground": "#FFFFFF",
"fontStyle": "italic"
}
},
{
"scope": [
"variable.other.property",
"support.variable.property",
"punctuation.separator.key-value",
"meta.object-literal.key",
"variable.other.object.property",
"variable.object.property",
"text.html.basic",
"text.html.vue-html",
"text.html.php",
"text.html.derivative",
"punctuation.definition.variable",
"punctuation.definition.keyword.scss",
"meta.jsx.children.js",
"meta.tag.attributes keyword.operator.assignment",
"support.type.vendored.property-name.css",
"support.type.property-name.json",
"variable.other.constant.property"
],
"settings": {
"foreground": "#BBBBCC"
}
},
{
"scope": "meta.property-name support.type",
"settings": {
"foreground": "#BBBBCC",
"fontStyle": ""
}
},
{
"scope": [
"keyword.other.substitution",
"keyword.operator.heading.restructuredtext",
"keyword.operator.table.row.restructuredtext",
"keyword.operator.table.data.restructuredtext",
"punctuation",
"markup.ignored",
"markup.untracked",
"meta.brace.round",
"meta.brace.square",
"meta.brace.curly",
"meta.delimiter.comma.js",
"meta.function-call.without-arguments.js",
"meta.function-call.method.without-arguments.js",
"source.scss",
"string source punctuation.section.embedded",
"punctuation.definition.tag.begin source",
"source.php"
],
"settings": {
"foreground": "#9999AA"
}
},
{
"scope": [
"comment",
"comment punctuation"
],
"settings": {
"foreground": "#888899",
"fontStyle": "italic"
}
},
{
"scope": "token.info-token",
"settings": {
"foreground": "#6796E6"
}
},
{
"scope": "token.warn-token",
"settings": {
"foreground": "#CD9731"
}
},
{
"scope": "token.error-token",
"settings": {
"foreground": "#F44747"
}
},
{
"scope": "token.debug-token",
"settings": {
"foreground": "#B267E6"
}
}
]
}
+16
View File
@@ -0,0 +1,16 @@
{
"files.associations": {
"utility": "cpp",
"initializer_list": "cpp",
"list": "cpp",
"type_traits": "cpp",
"vector": "cpp",
"xhash": "cpp",
"xstring": "cpp",
"system_error": "cpp",
"array": "cpp",
"string_view": "cpp",
"xutility": "cpp",
"*.ipp": "cpp"
}
}
+41
View File
@@ -0,0 +1,41 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Touch CMakeLists.txt",
"type": "process",
"promptOnClose": false,
"isBackground": true,
"command": "touch",
"args": ["${workspaceRoot}/CMakeLists.txt"],
"problemMatcher": [],
"presentation": {
"echo": false,
"revealProblems": "onProblem",
"reveal": "silent",
"focus": false,
"panel": "shared",
"showReuseMessage": false,
"clear": true
}
}
],
"inputs": [
{
"id": "build_configuration",
"type": "pickString",
"default": "debug",
"description": "Configuration:",
"options": ["debug", "release"]
},
{
"id": "compiler",
"type": "pickString",
"default": "gcc",
"description": "Compiler",
"options": ["clang", "gcc"]
}
]
}
+41
View File
@@ -0,0 +1,41 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Spark Client",
"type": "coreclr",
"request": "launch",
"program": "${workspaceFolder}/build/Debug/bin/net6.0-windows/Spark.exe",
"cwd": "${workspaceFolder}/build/Debug/bin/net6.0-windows",
"enableStepFiltering": false,
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Spark Test",
"type": "coreclr",
"request": "launch",
"program": "${workspaceFolder}/build/Debug/bin/net6.0/sparkcmd.exe",
"args": ["test", "${input:test}"],
"cwd": "${workspaceFolder}/build/Debug/bin/net6.0-windows",
"enableStepFiltering": false,
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Attach (.NET Core)",
"type": "coreclr",
"request": "attach"
}
],
"inputs": [
{
"id": "test",
"description": "The test(s) to run",
"type": "promptString"
}
]
}
+37
View File
@@ -0,0 +1,37 @@
{
"cmake.configureOnOpen": false,
"workbench.colorTheme": "Default Dark+",
"C_Cpp.intelliSenseEngine": "Disabled",
"files.associations": {
"*.js": "javascript",
"*.conf": "jsonc",
"array": "cpp",
"xtree": "cpp",
"chrono": "cpp",
"*.ipp": "cpp",
"optional": "cpp",
"regex": "cpp",
"system_error": "cpp",
"format": "cpp",
"future": "cpp",
"istream": "cpp",
"memory": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp",
"variant": "cpp",
"xlocmes": "cpp",
"xlocmon": "cpp",
"xlocnum": "cpp",
"xloctime": "cpp",
"xutility": "cpp",
"xstring": "cpp",
"string": "cpp",
"cstdint": "cpp"
},
"files.exclude": {
"**/.g.cs": true,
"**/.g.i.cs": true
}
}
+44
View File
@@ -0,0 +1,44 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Build Spark Client",
"type": "process",
"command": "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\Tools\\VsDevCmd.bat",
"args": [
"-arch=x64",
"-host_arch=x64",
"&&",
"${workspaceRoot}\\tools\\buildspark.cmd"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "new",
"showReuseMessage": false,
"clear": false,
"close": false
}
},
{
"label": "Run Spark Client",
"type": "process",
"command": "${workspaceRoot}\\build\\Debug\\bin\\net6.0-windows\\Spark.exe",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true,
"clear": false
},
"problemMatcher": []
}
]
}
+107
View File
@@ -0,0 +1,107 @@
{
"configurations": [
{
"name": "Linux",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}",
"${workspaceFolder}/src",
"${workspaceRoot}/externals/linux/include"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}",
"${workspaceFolder}/src",
"${workspaceRoot}/externals/linux/include"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"cStandard": "c11",
"cppStandard": "c++17",
"compileCommands": "${workspaceFolder}/build/ninja_debug/compile_commands.json"
},
{
"name": "Windows",
"intelliSenseMode": "clang-x64",
"includePath": [
"${workspaceRoot}/src",
"${workspaceRoot}/build/src",
"${workspaceRoot}/build/ninja_debug/src",
"${workspaceRoot}/externals/windows/include",
"${workspaceRoot}/externals/linux/include",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
"${workspaceRoot}/externals/windows/vscode/usr/include"
],
"defines": [
"__linux__",
"__x86_64__"
],
"browse": {
"path": [
"${workspaceRoot}/src",
"${workspaceRoot}/build/src",
"${workspaceRoot}/build/ninja_debug/src",
"${workspaceRoot}/externals/windows/include",
"${workspaceRoot}/externals/linux/include",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
"${workspaceRoot}/externals/windows/vscode/usr/include/*"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"cStandard": "c11",
"cppStandard": "c++17"
},
{
"name": "WindowsQuick",
"intelliSenseMode": "clang-x64",
"includePath": [
"${workspaceRoot}/src",
"${workspaceRoot}/build/src",
"${workspaceRoot}/build/ninja_debug/src",
"${workspaceRoot}/externals/windows/include",
"${workspaceRoot}/externals/linux/include",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
"${workspaceRoot}/externals/windows/vscode/usr/include"
],
"defines": [
"__linux__",
"__x86_64__"
],
"browse": {
"path": [
"${workspaceRoot}/src"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "${workspaceRoot}/.vscode/browse.vc.db"
},
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
+402
View File
@@ -0,0 +1,402 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Spark Local",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/build/gcc/debug/server/sparkd",
"args": [
"run",
"test",
"-a",
"OutrightVanillaOrder"
],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/build/gcc/debug/server/",
"environment": [
{
"name": "TZ",
"value": "America/Chicago"
}
],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "SparkVM Launch",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/server/sparkd",
"args": [
"test",
"-a",
"[ilink3]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
},
{
"description": "Skip STL",
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
"ignoreFailures": true
},
{
"description": "LD LIBRARY",
"text": "set env LD_LIBRARY_PATH=.",
"ignoreFailures": false
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/build/gcc/debug/server/sparkd/sparkd",
"args": [
"run"
],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/build/ninja_debug/src/server/sparkd",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "Client Launch",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/spark.exe",
"args": [],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "SDK Launch",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/spark_sdk.exe",
"args": [
"md",
"GLBX",
"Future",
"CL",
"CLZ9",
"--user=bts",
"--pass="
],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "Excel Launch",
"type": "clr",
"request": "launch",
"program": "C:/Program Files/Microsoft Office/Office14/EXCEL.EXE",
"args": [
"${workspaceRoot}/build/Debug/bin/net471/spark_excel-addin64-packed.xll"
],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "Client Tests",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/sparkcmd.exe",
"args": [
"test",
"ApiUpdateTests"
],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "Client Attach",
"type": "clr",
"request": "attach",
"processId": "${command:pickProcess}"
},
{
"name": "Spreader Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/server/sparkd",
"args": [
"test",
"[spreader]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Admin Service Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"args": [
"test",
"[admin_service]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Limiter Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"args": [
"test",
"[limiter]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "MD Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/gcc/debug/server/sparkd",
"args": [
"test",
"[algo]"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Skip STL",
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "SparkVM attach",
"type": "cppdbg",
"request": "attach",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"processId": "${command:pickRemoteProcess}",
"MIMode": "gdb",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Python",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "${config:python.pythonPath}",
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
"args": [
"DEBUG"
],
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": ".NET Core Remote Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickRemoteProcess}",
"pipeTransport": {
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/home/bts/vsdbg/vsdbg",
"pipeCwd": "${workspaceRoot}",
"quoteArgs": true
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
},
"justMyCode": true
},
{
"name": ".NET Core Remote Launch",
"type": "coreclr",
"request": "launch",
"program": "/usr/bin/dotnet",
"args": [
"sparkcmd.dll",
"test",
"test_join_create_and_takeout_market"
],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/gcc/debug/server",
"pipeTransport": {
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": [
"bts@sparkvm"
],
"debuggerPath": "/home/bts/vsdbg/vsdbg",
"pipeCwd": "${workspaceRoot}",
"quoteArgs": true
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
},
"justMyCode": false
}
]
}
+16
View File
@@ -0,0 +1,16 @@
{
"files.associations": {
"utility": "cpp",
"initializer_list": "cpp",
"list": "cpp",
"type_traits": "cpp",
"vector": "cpp",
"xhash": "cpp",
"xstring": "cpp",
"system_error": "cpp",
"array": "cpp",
"string_view": "cpp"
"xutility": "cpp",
"*.ipp": "cpp"
}
}
+63
View File
@@ -0,0 +1,63 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "client_build",
"type": "shell",
"command": ".\\tools\\buildspark.cmd",
"problemMatcher":"$msCompile",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"group": "build"
},
{
"label": "server_build",
"type": "shell",
"command": ".\\tools\\buildsparkd.cmd",
"problemMatcher": {
"base": "$gcc",
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceFolder}"
],
"pattern": {
"regexp": "(.?)(home)(.?)(bts)(.?)(spark)(.?)(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)",
"file": 8,
"line": 9,
"column": 10,
"severity": 11,
"message": 12
}
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "new"
},
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "linux build (Debug)",
"type": "shell",
"command": "cd build/ninja_debug; time ninja",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
]
}
]
}
@@ -124,4 +124,17 @@ service OrderService {
```
### C++ Example
```cpp
#include "spark/api/public/ServiceContext.h"
#include "spark/api/services/OrderService.client.pb.h"
using namespace bts::api;
ServiceContext ctx;
auto orders = ctx.locate<orderman::OrderService>();
auto unsub = orders.subscribe_fills().subscribe([](const auto& update) {
std::cout
<< "Added " << update.added().size() << " items, "
<< "Removed " << update.removed().size() << " items, "
<< "Updated " << update.updated().size() << " items, "
<< "Total items " << update.all().size() << std::endl;
});
std::this_thread::sleep_for(std::chrono::minutes(5));
```
+49 -1
View File
@@ -1,3 +1,51 @@
+++
title = "Market Data"
+++
+++
Use the MarketDataService to subscribe enumerate all available securities.
```cs
using System;
using System.Threading;
using bts.api;
using bts.api.core;
namespace sample {
class Program {
static void Main(string[] args) {
using var context = new ServiceContext();
var md = context.locate<MarketDataService>();
using var sub = md.subscribe_securities().Subscribe(update => {
foreach (var security in update.added) {
Console.WriteLine($"Added security {security.Id}: {security.Symbol}");
}
});
Thread.Sleep(TimeSpan.FromMinutes(5));
}
}
}
```
```cpp
#include "spark/api/public/ServiceContext.h"
#include "spark/domain_model/Security.h"
#include "spark/api/services/MarketDataService.client.pb.h"
#include <thread>
using namespace bts::api;
int main(int argc, char** argv) {
ServiceContext ctx;
auto md_service = ctx.locate<bts::api::MarketDataService>();
auto sub = md_service.subscribe_securities().subscribe([](const auto& update) {
for (const auto& s : update.added()) {
std::cout << "Added security: " << s->id() << ": " << s->symbol() << std::endl;
}
});
std::this_thread::sleep_for(std::chrono::minutes(5));
return 0;
}
```
@@ -68,12 +68,21 @@ To update your Spark SDK simply download an unzip a new [spark_sdk.zip](https://
To preserve the old image so you can go back to it later run `docker tag spark_sdk spark_sdk:your_custom_tag` before loading the new SDK image.
<!--
Then stop, remove and restart spark_sdk.
### Re-build the Dev Container
If you are using Visual Studio Code you also need to rebuild the dev-container so it picks up the new image.
#### Inside VSCode
To re-build from inside Visual Studio Code. Click the 'Remote Explorer' icon on the left hand side.
You should see your spark_sdk project listed under the Containers section. Right click on it and select **rebuild-container**.
#### Command Line
To re-build from the command line run `docker ps -a` and find the row with the spark_sdk image.
```
c:\bts> docker stop spark_sdk
c:\bts> docker rm spark_sdk
c:\bts> docker run -d -v %cd%:/sdk --name spark_sdk bluetradingsytems/spark_sdk
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
54d96cfa3888 spark_sdk "/bin/sh -c 'echo Co…" About a minute ago Up About a minute 127.0.0.1:9000-9001->9000-9001/tcp quizzical_lichterman
```
Then run `docker rm 54d96cfa3888` (use your container id instead of 54d96cfa3888) or `docker rm quizzical_lichterman` (use your container name).
``` -->
-1
View File
@@ -1 +0,0 @@
set(sources /home/ppinto/Dropbox/bts/spark/doc/user/build.sh;content/_index.md;content/bts_spark/Glossary/_index.md;content/bts_spark/Help/_index.md;content/bts_spark/Help/about_spark.png;content/bts_spark/Help/image39.png;content/bts_spark/Help/image58.png;content/bts_spark/Launcher/_index.md;content/bts_spark/Launcher/image38.png;content/bts_spark/Launcher/image68.png;content/bts_spark/Logging-In-to-the-System/_index.md;content/bts_spark/Logging-In-to-the-System/image3.png;content/bts_spark/Logging-In-to-the-System/image64.png;content/bts_spark/Market/_index.md;content/bts_spark/Market/change_securities.png;content/bts_spark/Market/image11.png;content/bts_spark/Market/image14.png;content/bts_spark/Market/image20.png;content/bts_spark/Market/image21.png;content/bts_spark/Market/image23.png;content/bts_spark/Market/image24.png;content/bts_spark/Market/image34.png;content/bts_spark/Market/image49.png;content/bts_spark/Market/image53.png;content/bts_spark/Market/image66.png;content/bts_spark/Market/image69.png;content/bts_spark/Market/market_view.png;content/bts_spark/Market/settings_icon.png;content/bts_spark/Market/time_and_sales.png;content/bts_spark/My-Windows/_index.md;content/bts_spark/My-Windows/image15.png;content/bts_spark/My-Windows/image16.png;content/bts_spark/My-Windows/image37.png;content/bts_spark/Settings/_index.md;content/bts_spark/Settings/image51.png;content/bts_spark/Settings/image9.png;content/bts_spark/Spreader/_index.md;content/bts_spark/Spreader/image10.png;content/bts_spark/Spreader/image13.png;content/bts_spark/Spreader/image18.png;content/bts_spark/Spreader/image19.png;content/bts_spark/Spreader/image28.png;content/bts_spark/Spreader/image29.png;content/bts_spark/Spreader/image31.png;content/bts_spark/Spreader/image35.png;content/bts_spark/Spreader/image40.png;content/bts_spark/Spreader/image43.png;content/bts_spark/Spreader/image54.png;content/bts_spark/Spreader/image55.png;content/bts_spark/Spreader/image56.png;content/bts_spark/Spreader/image6.png;content/bts_spark/Spreader/image7.png;content/bts_spark/Spreader/image70.png;content/bts_spark/Spreader/image72.png;content/bts_spark/Spreader/image8.png;content/bts_spark/Trading/OrderTypes/index.md;content/bts_spark/Trading/_index.md;content/bts_spark/Trading/algo_studio.png;content/bts_spark/Trading/collapse_all_icon.png;content/bts_spark/Trading/cover_algo_control.png;content/bts_spark/Trading/expand_all_icon.png;content/bts_spark/Trading/image1.png;content/bts_spark/Trading/image17.png;content/bts_spark/Trading/image2.png;content/bts_spark/Trading/image25.png;content/bts_spark/Trading/image27.png;content/bts_spark/Trading/image33.png;content/bts_spark/Trading/image42.png;content/bts_spark/Trading/image44.png;content/bts_spark/Trading/image47.png;content/bts_spark/Trading/image48.png;content/bts_spark/Trading/image5.png;content/bts_spark/Trading/image50.png;content/bts_spark/Trading/image52.png;content/bts_spark/Trading/image57.png;content/bts_spark/Trading/image59.png;content/bts_spark/Trading/image60.png;content/bts_spark/Trading/image61.png;content/bts_spark/Trading/image62.png;content/bts_spark/Trading/image73.png;content/bts_spark/Trading/image74.png;content/bts_spark/Trading/join_algo_control.png;content/bts_spark/Trading/ladder.png;content/bts_spark/Trading/ladder_badges.png;content/bts_spark/Trading/ladder_main_part.png;content/bts_spark/Trading/lean_algo_control.png;content/bts_spark/Trading/mini_orderbook.png;content/bts_spark/Trading/oco_algo_control.png;content/bts_spark/Trading/offset_algo_control.png;content/bts_spark/Trading/pnl_calculation.png;content/bts_spark/Trading/pnl_window.png;content/bts_spark/Trading/recreate_icon.png;content/bts_spark/Trading/settings_icon.png;content/bts_spark/Trading/spark_menu_order_book.png;content/bts_spark/Trading/top_algo_control.png;content/bts_spark/Trading/trigger_algo_control.png;content/bts_spark/_index.md;content/release_notes/_index.md;content/system_requirements/_index.md;static/book.js;static/favicon.ico;static/image.js;templates/index.html;templates/page.html;templates/section.html;templates/shortcodes/back_button.html)
+2 -2
View File
@@ -1,8 +1,8 @@
cmake_minimum_required(VERSION 3.5)
project(doc)
include(${CMAKE_SOURCE_DIR}/tools/safe_dep_glob.cmake)
include(${CMAKE_SOURCE_DIR}/tools/Protobuf.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/safe_dep_glob.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/Protobuf.cmake)
# DEPENDENCIES
set(DOC_GLOBS
+22 -1
View File
@@ -1,9 +1,29 @@
+++
+++
title = "Release notes"
weight = 3
sort_by = "weight"
insert_anchor_links = "right"
+++
## 2.16.2
### User Visible Change
- Synthetic creation dialog has a "fractional" checkbox next to the tick settings. Users may uncheck this box to enter integer tick sizes, so the synthetic security's prices will be displayed without decimals, or fractional units.
## 2.16.1
### Bug Fixes
- OrderBook's algo state parameters (in the panel on the right side) are sorted alphabetically
## 2.16.0
### Bug Fixes
- Solved an issue that could result in incorrect ladder levels
- Solved an issue that could lead to incorrect routing of orders in the event of certain MSGW changes
### API Changes
- Add C# client side API samples for order entry, position monitoring and market data observation
## 2.15.10
### Bug Fixes
- Solved an issue that could cause the user interface to fail when playing some alert sounds
### API Changes
- Added settlement and position information to the API
- Added the ability for user algos to report custom state to the user interface
- Added the ability for algos to discover all active securities
## 2.15.3
### Bug Fixes
- Fixed a bug where some CME currency spreads exhibited incorrect tick values
@@ -708,3 +728,4 @@ insert_anchor_links = "right"
- Start, Day and Total PnL columns are painted with a red or green background color based on if the pnl value is negative or positive respectively
- Corrected cash per point values, used in pnl calculations, for a number of products
- PnL report will now remember any customizations you make to filtering and/or sorting criteria
@@ -0,0 +1,38 @@
FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y pkg-config
RUN apt-get update && apt-get install -y locales
RUN apt-get update && apt-get install -y ca-certificates
RUN apt-get update && apt-get install -y libssh2-1-dev
RUN apt-get update && apt-get install -y software-properties-common
RUN apt-get update && apt-get install -y sudo
# GCC
ARG gcc_major=13
RUN add-apt-repository ppa:ubuntu-toolchain-r/test \
&& apt-get update \
&& apt-get install -y g++-$gcc_major
RUN apt-get update \
&& apt-get install -y dotnet7
RUN locale-gen en_US.UTF-8
ARG docker_user="bts"
ARG docker_uid="1000"
ARG docker_pass="bts"
RUN \
groupadd -g "$docker_uid" "$docker_user" \
&& useradd \
-m \
-u "$docker_uid" \
-g "$docker_uid" \
-G sudo \
--password "$(openssl passwd -1 "$docker_pass")" \
"$docker_user"
USER bts
WORKDIR /home/bts
@@ -0,0 +1,38 @@
FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y pkg-config
RUN apt-get update && apt-get install -y locales
RUN apt-get update && apt-get install -y ca-certificates
RUN apt-get update && apt-get install -y libssh2-1-dev
RUN apt-get update && apt-get install -y software-properties-common
RUN apt-get update && apt-get install -y sudo
# GCC
ARG gcc_major=13
RUN add-apt-repository ppa:ubuntu-toolchain-r/test \
&& apt-get update \
&& apt-get install -y g++-$gcc_major
RUN apt-get update \
&& apt-get install -y dotnet8
RUN locale-gen en_US.UTF-8
ARG docker_user="bts"
ARG docker_uid="1000"
ARG docker_pass="bts"
RUN \
groupadd -g "$docker_uid" "$docker_user" \
&& useradd \
-m \
-u "$docker_uid" \
-g "$docker_uid" \
-G sudo \
--password "$(openssl passwd -1 "$docker_pass")" \
"$docker_user"
USER bts
WORKDIR /home/bts
@@ -0,0 +1,150 @@
FROM ubuntu:22.04
ARG DEBIAN_FRONTEND=noninteractive
# Note installations that take a while (more than 10s)
RUN apt-get update
RUN apt-get install -y ca-certificates
RUN apt-get install -y ccache
RUN apt-get install -y curl
RUN apt-get install -y fish
RUN apt-get install -y gdb
# git-all: ~250s
RUN apt-get install -y git-all
RUN apt-get install -y gnupg
# liblttng-ust-dev: ~30s
RUN apt-get install -y liblttng-ust-dev
RUN apt-get install -y libssh2-1-dev
RUN apt-get install -y locales
RUN apt-get install -y ninja-build
# openssh-server: ~40s
RUN apt-get install -y openssh-server
RUN apt-get install -y pkg-config
RUN apt-get install -y software-properties-common
RUN apt-get install -y sudo
RUN apt-get install -y tzdata
RUN apt-get install -y vim
RUN apt-get install -y zip
# Python: ~30s
RUN apt-get install -y \
python3-pip \
python3-venv \
&& python3 -m pip install --upgrade pip
# GCC
ARG gcc_major=13
RUN \
add-apt-repository ppa:ubuntu-toolchain-r/test \
&& apt-get update \
&& apt-get install -y g++-$gcc_major
# Clang
ARG clang_major=17
RUN \
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key 2> /dev/null \
| gpg --dearmor - \
| tee /usr/share/keyrings/llvm-snapshot.gpg > /dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-$clang_major main" \
| tee -a "/etc/apt/sources.list.d/llvm.list" \
&& apt-get update \
&& apt-get install -y \
clang-$clang_major \
clang-format-$clang_major \
clangd-$clang_major
# CMake
RUN set -eux \
&& apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl gpg \
&& curl -fsSL https://apt.kitware.com/keys/kitware-archive-latest.asc \
| gpg --dearmor -o /usr/share/keyrings/kitware-archive-keyring.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" \
> /etc/apt/sources.list.d/kitware.list \
&& apt-get update \
&& apt-get install -y --no-install-recommends cmake \
&& rm -rf /var/lib/apt/lists/*
# Dotnet
RUN apt-get update && apt-get install -y dotnet8
# Node
ARG node_major=18
RUN mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
| gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$node_major.x nodistro main" \
| tee /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs
# Emumba (deps)
RUN apt-get update && apt-get -y install rapidjson-dev
# Emumba
ARG EMUMBA_DERIBIT_CONNECTOR_DEB_URL="https://api.bitbucket.org/2.0/repositories/bluetradesys/spark/downloads/emumba-deribit-connector-3.3.1-Linux.LICENSE_DISABLED.deb"
RUN --mount=type=secret,id=bitbucket_access_token \
set -eux \
&& apt-get update \
&& TOKEN="$(cat /run/secrets/bitbucket_access_token)" \
&& curl -fL -H "Authorization: Bearer ${TOKEN}" $EMUMBA_DERIBIT_CONNECTOR_DEB_URL -o /tmp/emumba-deribit-connector.deb \
&& apt-get install -y /tmp/emumba-deribit-connector.deb \
&& rm -f /tmp/emumba-deribit-connector.deb
# Pcap
RUN apt-get update && apt-get install -y libpcap0.8-dev
# Databento (deps)
RUN apt-get update && apt-get -y install libzstd-dev
# Rakurai
ARG RAKURAI_DEB_URL="https://api.bitbucket.org/2.0/repositories/bluetradesys/spark/downloads/rakurai-dex-connector_0.0.5_amd64.deb"
RUN --mount=type=secret,id=bitbucket_access_token \
set -eux \
&& apt-get update \
&& TOKEN="$(cat /run/secrets/bitbucket_access_token)" \
&& curl -fL -H "Authorization: Bearer ${TOKEN}" $RAKURAI_DEB_URL -o /tmp/rakurai.deb \
# Need --force-overwrite because rakuirai and emumba-deribit-connector both include the same
# spdlog headers.
&& apt-get install -y -o Dpkg::Options::="--force-overwrite" /tmp/rakurai.deb \
&& rm -f /tmp/rakuirai.deb
# Docker in Docker
RUN apt-get update && apt-get install -y \
docker.io \
docker-compose \
docker-compose-v2
# Set up default executables (update-alternatives)
RUN \
update-alternatives --install /usr/bin/clang clang /usr/bin/clang-$clang_major 100; \
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-$clang_major 100; \
update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-$clang_major 100; \
update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-$clang_major 100; \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$gcc_major 100; \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-$gcc_major 100
# Add compiler symlinks for ccache
RUN \
ln -s /usr/bin/ccache /usr/local/bin/clang; \
ln -s /usr/bin/ccache /usr/local/bin/clang++; \
ln -s /usr/bin/ccache /usr/local/bin/clang-$clang_major; \
ln -s /usr/bin/ccache /usr/local/bin/clang++-$clang_major; \
ln -s /usr/bin/ccache /usr/local/bin/gcc; \
ln -s /usr/bin/ccache /usr/local/bin/g++
RUN locale-gen en_US.UTF-8
ARG docker_user="bts"
ARG docker_uid="1000"
ARG docker_pass="bts"
RUN \
groupadd -g "$docker_uid" "$docker_user" \
&& useradd \
-m \
-u "$docker_uid" \
-g "$docker_uid" \
-G sudo \
--password "$(openssl passwd -1 "$docker_pass")" \
"$docker_user"
Submodule docker/linux deleted from 0df20ec20a.
+141
View File
@@ -0,0 +1,141 @@
FROM ubuntu:latest
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=America/New_York
# light deps (should be quick to download/install)
RUN apt-get update && apt-get install -y \
ca-certificates \
curl \
gnupg \
liblttng-ust-dev \
libpcap0.8-dev \
locales \
ninja-build \
software-properties-common \
sqlite3 \
tzdata
# clang
RUN apt-get update && apt-get install -y \
clang-13 \
clang-format-13 \
clangd-13 \
clang-15 \
clang-format-15 \
clangd-15
# g++
RUN apt-get update && apt-get install -y \
g++-11 \
g++-12
# python
RUN apt-get update && apt-get install -y \
python3-pip \
python3-venv \
&& python3 -m pip install --upgrade pip
# dotnet
RUN apt-get update && apt-get install -y \
dotnet7
# ssh
RUN apt-get update && apt-get install -y \
libssh2-1-dev \
openssh-server
# cmake
RUN \
curl -fsSL https://apt.kitware.com/keys/kitware-archive-latest.asc 2> /dev/null \
| gpg --dearmor - \
| tee /usr/share/keyrings/kitware-archive-keyring.gpg > /dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" \
| tee /etc/apt/sources.list.d/kitware.list > /dev/null \
&& apt-get update \
&& rm /usr/share/keyrings/kitware-archive-keyring.gpg \
&& apt-get install -y kitware-archive-keyring \
&& echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ $(lsb_release -cs)-rc main" \
| tee -a /etc/apt/sources.list.d/kitware.list >/dev/null \
&& apt-get install -y cmake
# node
ARG node_major=18
RUN mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
| gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$node_major.x nodistro main" \
| tee /etc/apt/sources.list.d/nodesource.list \
&& apt-get update \
&& apt-get install -y nodejs
# ccache is done here so that ccache sees clang++ installed, not clang-10
RUN apt-get update && apt-get install -y \
ccache
# emumba (light deps)
RUN apt-get update && apt-get install -y \
build-essential \
doxygen \
python3-sphinx \
graphviz \
libgtest-dev \
libssl-dev \
rapidjson-dev \
zlib1g-dev \
pkg-config
# emumba (boost)
RUN apt-get update && apt-get install -y \
libboost-filesystem-dev \
libboost-program-options-dev \
libboost-test-dev \
libboost-date-time-dev
# dev utils
RUN apt-get update && apt-get install -y \
fish \
git-all \
sudo \
vim \
wget
# set up default executables (update-alternatives)
RUN \
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-13 100; \
update-alternatives --install /usr/bin/clang clang /usr/bin/clang-13 100; \
update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-13 100; \
update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-13 100; \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100; \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
# Add compiler symlinks for ccache
RUN \
ln -s /usr/bin/ccache /usr/local/bin/clang; \
ln -s /usr/bin/ccache /usr/local/bin/clang++; \
ln -s /usr/bin/ccache /usr/local/bin/clang-13; \
ln -s /usr/bin/ccache /usr/local/bin/clang++-13; \
ln -s /usr/bin/ccache /usr/local/bin/clang-15; \
ln -s /usr/bin/ccache /usr/local/bin/clang++-15; \
ln -s /usr/bin/ccache /usr/local/bin/gcc; \
ln -s /usr/bin/ccache /usr/local/bin/g++; \
ln -s /usr/bin/ccache /usr/local/bin/gcc-11; \
ln -s /usr/bin/ccache /usr/local/bin/g++-11; \
ln -s /usr/bin/ccache /usr/local/bin/gcc-12; \
ln -s /usr/bin/ccache /usr/local/bin/g++-12
RUN locale-gen en_US.UTF-8
ARG docker_user="bts"
ARG docker_uid="1000"
ARG docker_pass="bts"
RUN \
groupadd -g "$docker_uid" "$docker_user" \
&& useradd \
-m \
-u "$docker_uid" \
-g "$docker_uid" \
-G sudo \
--password "$(openssl passwd -1 "$docker_pass")" \
"$docker_user"
+64
View File
@@ -0,0 +1,64 @@
[dev containers]: https://code.visualstudio.com/docs/devcontainers/containers
[dev containers ext]: https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers
[docker repo sparkd-dev]: https://hub.docker.com/repository/docker/bluetradingsystems/sparkd-dev/general
# Sparkd Dev Container
## How to create a VS Code [Dev Container][dev containers]
1. Make sure the **[Dev Containers][dev containers ext]** extension is installed
1. Make sure your Docker image is up to date
```
docker pull bluetradingsystems/sparkd-dev:latest
```
1. Copy **devcontainer.json** from this folder to **$workspaceFolder/.devcontainer/**.
1. In the VS Code Command Palette, run **Dev Containers: Reopen in Container**
---
## How to create a Sparkd Container in the terminal (without VS Code)
1. Make sure your Docker image is up to date
```
docker pull bluetradingsystems/sparkd-dev:latest
```
2. Start the container
```
# Replace <cont_name> with a name for the container. The container's
# "$HOME" dir will be mounted to "$HOME/.sparkd-dev/mounts/<cont_name> on
# the host
./start_docker.sh --container <cont_name> --mount-existing
```
* *Replace <cont_name> with a name for the container*
* *The container's `$HOME` dir will be mounted to
`$HOME/.sparkd-dev/mounts<cont_name>` on the host*<br>
* *Run: `./start_docker.sh --help` to see additional options*
3. *(Optional) Attach VS Code to the running container.*<br>
Run **Dev Containers: Attach to Running Container** from the command palette,
then select your container in the dropdown
---
## How to update the Docker image
1. Change the image by modifying the Dockerfile (don't tag arbitrary
images on your machine and push them to our repo on Docker Hub)
1. After modifying the Dockerfile, (re)build the image
```
# Run in this dir
docker build -t bluetradingsystems/sparkd-dev:latest .
```
***Note:** Your docker login must have write permissions to push to the
[sparkd-dev][docker repo sparkd-dev] repository*
2. Commit the changes to Dockerfile in git
3. Push the new image to Docker Hub
```
docker push bluetradingsystems/sparkd-dev:latest
```
***Note:** The image doesn't have to be on Docker Hub, we can simply build
it from scratch on our local machines (with the Dockerfile). However, this
takes time. It is significantly quicker to download a prebuilt image, so we
store it on a remote repository to save time when setting up a new dev
machine.*
+123
View File
@@ -0,0 +1,123 @@
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
if [[ ! -v XDG_CONFIG_HOME ]]; then
export XDG_CONFIG_HOME="$HOME/.config"
fi
export PATH="$HOME/.local/bin:$PATH"
+25
View File
@@ -0,0 +1,25 @@
if ! set -q XDG_CONFIG_HOME
set -g XDG_CONFIG_HOME "$HOME/.config"
end
set fish_config_home $XDG_CONFIG_HOME/fish
if test -f "$fish_config_home/aliases.fish"
source "$fish_config_home/aliases.fish"
end
# enable general colors and case insensitive search in 'less'
set -x LESS "$LESS -R -Q -I"
set -x LC_ALL en_US.UTF-8
# enable syntax highlighting in 'less'
# set highlight color scheme in 'less' (fg)(bg)
set -g LESS_TERMCAP_md (tput bold)(tput setaf 36)
set -g LESS_TERMCAP_me (tput sgr0)
set -g LESS_TERMCAP_so (tput setaf 232)(tput setab 49)
set -q TERM
if test $status != 0; or test $TERM = 'xterm'
set -g TERM 'xterm-256color'
end
# Fix impossible-to-see navy blue command text color
set fish_color_command F8F8F2
set -g PATH "$HOME/.local/bin" "$PATH"
+33
View File
@@ -0,0 +1,33 @@
{
"image": "bluetradingsystems/sparkd-dev:latest",
// Creates local dir to mount to HOME in docker
"initializeCommand": "mkdir -p ${localEnv:HOME}/.bts/devcontainer-mounts/${devcontainerId}",
"hostRequirements": {
"memory": "4gb",
"storage": "6gb"
},
"postCreateCommand": "/home/bts/spark/docker/sparkd/dev/devcontainer_post_create.sh",
"containerUser": "bts",
"workspaceMount": "source=${localWorkspaceFolder},target=/home/bts/spark,type=bind",
"workspaceFolder": "/home/bts/spark",
"updateRemoteUserUID": true,
"shutdownAction": "none",
// Note: If running multiple containers on the same host, each must use a
// unique set of ports. Usually we just add 1000 to each port as needed. For
// example, if 8000-8003 is taken, go with 9000-9003, then 10000-10003, etc.
"runArgs": [
"--shm-size",
"2gb",
"-p",
"8000:8000",
"-p",
"8001:8001",
"-p",
"8002:8002",
"-p",
"8003:8003"
],
"mounts": [
"source=${localEnv:HOME}/.bts/devcontainer-mounts/${devcontainerId},target=/home/bts,type=bind"
]
}
+33
View File
@@ -0,0 +1,33 @@
#!/usr/bin/env bash
this_dir="$(realpath "$(dirname "${BASH_SOURCE[0]}")")"
repo_dir="$(cd "$this_dir" && git rev-parse --show-toplevel)"
tools_dir="$repo_dir/tools"
gen_tag="GENERATED BY $(basename "${BASH_SOURCE[0]}")"
function copy_if_not_exist() {
src="$1"
dest="$2"
if [[ ! -e "$src" ]]; then
echo "Unable to copy $src to $dest. Source file doesn't exist"
exit 1
fi
if [[ ! -e "$dest" ]]; then
cp "$src" "$dest"
fi
}
# Init bashrc
echo "Initializing bashrc"
copy_if_not_exist "$this_dir/bashrc" "$HOME/.bashrc"
# Init fish config
echo "Initializing fish config"
fish_cfg_dir="$HOME/.config/fish/"
mkdir -p "$fish_cfg_dir"
exec "$tools_dir/write_tag_block.sh" \
--tag "$gen_tag" \
--replace \
--in-place \
--file "$fish_cfg_dir/config.fish" \
--text "$(cat "$this_dir/config.fish")"
+250
View File
@@ -0,0 +1,250 @@
#!/usr/bin/env bash
function _exit() {
if [[ "$#" -gt 1 ]]; then
# When there are multiple args, the last arg is the exit code.
echo "${@:1:($# - 1)}"
exit "${@: -1}"
fi
echo "$1"
exit 0
}
help_text="\
Add or update a user's uid
This script is intended to be run in a Docker container as a means to obtain
file permissions in mounted directories owned by the specified UID.
Usage: set_user.sh [OPTIONS] USER UID
Positionals:
USER The name of the user
Options:
--user USER The name of the user (defaults to 'bts')
--uid UID The new uid to give USER (defaults to '1000')
--group GROUP The primary group to give USER (defaults to USER)
--gid GID The primary gid to give USER (defaults to UID)
--pass PASSWORD The password to give USER (defaults to USER, only applies
if USER hasn't been created yet)
--modify-existing Update UID/GID even if USER already exists
-h,--help Print this help message and exit
"
function _add_group() {
if [[ "$#" -ne 2 ]]; then
_exit "'_add_group' requires exactly 2 args (group, gid). Received $#." 1
fi
local group="$1"
local gid="$2"
# Check if gid already exists
local existing_group=""
existing_group="$(getent group "$gid" | cut -d : -f 1)"
if [[ -n "$existing_group" ]]; then
if [[ "$existing_group" != "$group" ]]; then
echo "\
The gid '$gid' is already in use by group '$existing_group' (will not rename \
the group)"
fi
return
fi
# Check if group with same name already exists
local existing_gid=""
existing_gid="$(getent group "$group" | cut -d : -f 3)"
if [[ -n "$existing_gid" ]]; then
# The group already exists. Only modify if --modify-existing was specified.
if [[ "$modify_existing" -eq 0 ]]; then
_exit "\
The group '$group' already exists with gid '$existing_gid'.
Specify --modify-existing to change the gid anyways." 1
fi
echo "Changing gid for group '$group' from '$existing_gid' to '$gid'"
groupmod -g "$gid" "$group"
else
# The group doesn't exist. Add it
echo "Adding group '$group:$gid'"
groupadd -g "$gid" "$group"
fi
}
function _add_user() {
local user="$1"
local uid="$2"
local group="$3"
local gid="$4"
local pass="$5"
if [[ "$#" -ne 5 ]]; then
_exit "'_add_user' requires exactly 5 args (user, uid, group, gid, pass). \
Received $#." 1
fi
# Check if uid is being used by another user
local existing_user=""
existing_user="$(getent passwd "$uid" | cut -d : -f 1)"
if [[ -n "$existing_user" ]]; then
if [[ "$existing_user" != "$user" ]]; then
_exit "The uid '$uid' is already in use by user '$existing_user'." 1
fi
echo "The user '$user' already has the specified uid '$uid'."
# Modify gid if necessary
local existing_gid=""
existing_gid="$(id -g "$user" 2> /dev/null)"
if [[ "$existing_gid" = "$gid" ]]; then
echo "The user '$user' already has the specified gid '$gid'."
return
fi
if [[ "$modify_existing" -eq 0 ]]; then
_exit "\
The user '$user' is associated with the primary group '$existing_gid'.
Specify --modify-existing to change the gid anyways." 1
fi
echo "Changing primary group for '$user' from '$existing_gid' to '$gid'."
usermod -g "$gid" "$user"
return
fi
# Check if user with same name already exists
local existing_uid=""
existing_uid="$(id -u "$user" 2> /dev/null)"
if [[ -n "$existing_uid" ]]; then
if [[ "$existing_uid" = "$uid" ]]; then
_exit "The user '$user' already has the specified uid '$uid'" 0
fi
if [[ "$modify_existing" -eq 0 ]]; then
_exit "\
User '$user' already exists with uid '$existing_uid'.
Specify --modify-existing to change the uid anyways." 1
fi
echo "Changing uid for user '$user' from '$existing_uid' to '$uid'"
if ! usermod -u "$uid" -g "$gid" "$user"; then
_exit "usermod exited with code $?" 1
fi
return
fi
# The user doesn't exist. Add it
echo "Adding user '$user:$uid' (group='$group:$gid', password='$pass')"
useradd -m -u "$uid" -g "$gid" -G sudo --password "$(openssl passwd -1 "$pass")" "$user"
}
function _update_fish_dir_perms() {
local user="$1"
local uid="$2"
local gid="$3"
# When a fish shell session starts, a temp dir named '/tmp/fish.<user>' is
# created with the user's current uid/gid. If such a dir exists for the
# specified USER, make sure the uid/gid match the new values.
fish_dir="/tmp/fish.$user"
if [[ -d "$fish_dir" ]]; then
perms="$uid:$gid"
existing_perms="$(stat -c %u:%g "$fish_dir")"
if [[ "$existing_perms" != "$perms" ]]; then
echo "Changing uid:gid for dir '$fish_dir' from '$existing_perms' to '$perms'"
chown -R "$perms" "$fish_dir"
fi
fi
}
user=""
group=""
pass=""
declare -i uid=0
declare -i gid=0
declare -i modify_existing=0
while [[ $# -gt 0 ]]; do
case "$1" in
--user)
if [[ -z "$2" ]]; then
_exit "USER (--user) must be non-empty" 1
elif [[ "$2" = "root" ]]; then
_exit "USER (--user) cannot be 'root'" 1
fi
user="$2"
shift 2
;;
--group)
if [[ -z "$2" ]]; then
_exit "GROUP (--group) must be non-empty" 1
elif [[ "$2" = "root" ]]; then
_exit "GROUP (--group) cannot be 'root'" 1
fi
group="$2"
shift 2
;;
--uid)
if [[ -z "$2" ]]; then
_exit "UID (--uid) must be non-empty" 1
fi
uid="$2"
shift 2
;;
--gid)
if [[ -z "$2" ]]; then
_exit "GID (--gid) must be non-empty" 1
fi
gid="$2"
shift 2
;;
--pass)
if [[ -z "$2" ]]; then
_exit "PASS (--pass) must be non-empty" 1
fi
pass="$2"
shift 2
;;
--modify-existing)
modify_existing=1
shift 1
;;
-h)
;&
--help)
_exit "$help_text" 0
;;
*)
if [[ -z "$1" ]]; then
_exit "Invalid positional argument '$1'" 1
elif [[ -z "$user" ]]; then
user="$1"
elif [[ -z "$uid" ]]; then
uid="$1"
else
_exit "Unexpected argument '$1'" 1
fi
shift 1
;;
esac
done
if [[ -z "$user" ]]; then
user="bts"
fi
if [[ $uid -eq 0 ]]; then
uid=1000
fi
# In general, a user's primary group/gid matches the user's name/uid.
# If group/gid args weren't specified, set them to name/uid.
if [[ -z "$group" ]]; then
group="$user"
fi
if [[ $gid -eq 0 ]]; then
gid=$uid
fi
if [[ -z "$pass" ]]; then
pass="$user"
fi
_add_group "$group" "$gid"
_add_user "$user" "$uid" "$group" "$gid" "$pass"
_update_fish_dir_perms "$user" "$uid" "$gid"
+230
View File
@@ -0,0 +1,230 @@
#!/usr/bin/env bash
function _exit() {
if [[ "$#" -gt 1 ]]; then
# When there are multiple args, the last arg is the exit code.
echo "${@:1:($# - 1)}"
exit "${@: -1}"
fi
echo "$1"
exit 0
}
help_text="\
Start a docker dev container
Usage: start_docker.sh [OPTIONS] image container
Positionals:
image The image to instantiate
container The name for the container
Options:
-u,--user USER The user to add in the container (defaults to 'bts')
-p,--pass PASS The password for USER in the container (defaults to USER)
-i,--image IMAGE The image to instantiate (defaults to 'bluetradingsystems/sparkd-dev:latest')
-c,--container CONT The name for the container
-m,--mount MOUNT The name for the folder (outside the container) to create/mount to the home
directory in the container. Mount folders are added here: $mount_prefix
--mount-existing Mount the specified dir even if it already exists
--port <cont_port>:<host_port> OR [<cont_port>:<host_port>,...] Port mapping(s). May be
specified multiple times.
-h,--help Print this help message and exit
"
mount_prefix="$HOME/.sparkd-dev/mounts"
declare docker_user=""
declare docker_pass=""
declare image_name=""
declare cont_name=""
declare mount_name=""
declare -i mount_existing=0
declare -a port_mappings=()
while [[ $# -gt 0 ]]; do
case "$1" in
-u)
;&
--user)
if [[ -z "$2" ]]; then
_exit "User (-u,--user) must be non-empty" 1
fi
docker_user="$2"
shift 2
;;
-p)
;&
--pass)
if [[ -z "$2" ]]; then
_exit "Password (-p,--pass) must be non-empty" 1
fi
docker_pass="$2"
shift 2
;;
-i)
;&
--image)
if [[ -n "$image_name" ]]; then
_exit "Unexpected argument '$1'" 1
elif [[ -z "$2" ]]; then
_exit "Image (-i,--image) must be non-empty" 1
fi
image_name="$2"
shift 2
;;
-c)
;&
--container)
if [[ -n "$cont_name" ]]; then
_exit "Unexpected argument '$1'" 1
elif [[ -z "$2" ]]; then
_exit "Container (-c,--container) must be non-empty" 1
fi
cont_name="$2"
shift 2
;;
--port)
# Parse port(s) arg, and append the result to 'port_mappings'
# Note: port(s) may be specified in bracketed notation:
# [a:b,c:d,...,y:z]
next_ports="$(echo "$2" | sed -e 's/\[//g' -e 's/\]//g' -e 's/,/ /g')"
if [[ "${#port_mappings[@]}" -gt 0 ]]; then
next_ports=" $next_ports"
fi
port_mappings+=("$next_ports")
shift 2
;;
-m)
;&
--mount)
if [[ -z "$2" ]]; then
echo "Mount (-m,--mount) must be non-empty"
fi
mount_name="$2"
shift 2
;;
--mount-existing)
mount_existing=1
shift 1
;;
-h)
;&
--help)
_exit "$help_text" 0
;;
*)
if [[ -z "$1" ]]; then
_exit "Invalid positional argument '$1'" "$help_text" 1
elif [[ -z "$image_name" ]]; then
image_name="$1"
elif [[ -z "$cont_name" ]]; then
cont_name="$1"
else
_exit "Unexpected argument '$1'" "$help_text" 1
fi
shift 1
;;
esac
done
if [[ -z "$image_name" ]]; then
image_name="bluetradingsystems/sparkd-dev:latest"
fi
host_name="$(hostname)"
if [[ -n "$cont_name" ]]; then
host_name="$host_name.$cont_name"
fi
if [[ -z "$mount_name" ]]; then
mount_name="$cont_name"
fi
if [[ -z "$mount_name" && -z "$cont_name" ]]; then
_exit "Please specify mount (-m,--mount) and/or container (-c,--container)" 1
fi
if [[ -z "$docker_user" ]]; then
docker_user="bts"
fi
if [[ "$docker_user" = "root" ]]; then
_exit "USER (--user) cannot be 'root'" 1
fi
cont_home="/home/$docker_user"
home_src="$mount_prefix/$mount_name"
home_tgt="$cont_home"
this_dir="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
repo_src="$(cd "$this_dir" && git rev-parse --show-toplevel)"
repo_tgt="$cont_home/spark"
working_dir="$cont_home"
if [[ $mount_existing -eq 0 && -e "$home_src" ]]; then
# Don't overwrite existing dir (might be mounted in another container)
_exit "Mount dir '$home_src' already exists (use --mount-existing to mount \
an existing directory)" 1
fi
mkdir -p "$home_src"
if [[ "${#port_mappings[@]}" -eq 0 ]]; then
port_mappings=("8000:8000" "8001:8001" "8002:8002" "8003:8003")
fi
# Adapt port_mappings into args for `docker run` by prepending "-p " to each
# item
declare -a docker_port_args=()
for port_mapping in "${port_mappings[@]}"; do
docker_port_args+=("-p $port_mapping")
done
echo "Starting container '$cont_name'
image_name : $image_name
cont_name : $cont_name
home_src : $home_src
home_tgt : $home_tgt
repo_src : $repo_src
repo_tgt : $repo_tgt
working dir : $working_dir
ports : ${port_mappings[*]}
"
# DON'T wrap $docker_port_args in quotes. We want bash to split args by
# whitespace
docker run \
--net bridge \
-h "$host_name" \
-e "TZ=America/New_York" \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
--name "$cont_name" \
-v "$home_src:$home_tgt" \
-v "$repo_src:$repo_tgt" \
-w "$working_dir" \
${docker_port_args[*]} \
--shm-size=4024m \
-t \
-i \
-d \
-e DISPLAY="$DISPLAY" \
"$image_name"
# Add user w/ same uid and gid as the current user outside of docker, so the
# user inside the docker has file permissions in the mounted dir.
docker_group="$docker_user"
docker_uid="$(id -u "$USER")"
docker_gid="$(id -g "$USER")"
if [[ -z "$docker_pass" ]]; then
docker_pass="$docker_user"
fi
docker exec -u root -it "$cont_name" "$repo_tgt/docker/sparkd/dev/set_user.sh" \
--user "$docker_user" \
--uid "$docker_uid" \
--group "$docker_group" \
--gid "$docker_gid" \
--pass "$docker_pass"
# Run same script VS Code runs to initialize the container
docker exec -u "$docker_user" -it "$cont_name" "$repo_tgt/docker/sparkd/dev/devcontainer_post_create.sh"
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env bash
function print_help_and_exit() {
cat <<EOF
Open a shell inside the docker container
Usage: docker_shell.sh [OPTIONS] [CONTAINER]
Options:
-u,--user The user to login with in the container (defaults to the current user)
-c,--container The container name (may also be specified as positional arg)
-h,--help Print this help message and exit
EOF
exit "$1"
}
declare docker_user=""
declare cont_name=""
while [[ $# -gt 0 ]]; do
case "$1" in
-u)
;&
--user)
if [[ -z "$2" ]]; then
echo "User (-u,--user) must be non-empty"
print_help_and_exit 1
fi
docker_user="$2"
shift 2
;;
-h)
;&
--help)
print_help_and_exit 0
;;
-c)
;&
--container)
shift 1
;&
*)
if [[ ! -z "$cont_name" ]]; then
echo "Unexpected argument '$1'"
print_help_and_exit 1
fi
cont_name="$1"
shift 1
;;
esac
done
if [[ -z "$cont_name" ]]; then
echo "Please specify the container ([-c,--container])"
print_help_and_exit 1
fi
if [[ -z "$docker_user" ]]; then
docker_user="$USER"
fi
docker exec -u "$docker_user" -it "$cont_name" bash
+233
View File
@@ -0,0 +1,233 @@
#!/usr/bin/env bash
mount_prefix="$HOME/.spark-dev/mounts"
function print_help_and_exit() {
cat <<EOF
Start a docker dev container
Usage: start_docker.sh [OPTIONS] image container
Positionals:
image The image to instantiate
container The name for the container
Options:
-u,--user USER The user to add in the container (defaults to the current user)
-p,--pass PASS The password for USER in the container (defaults to USER)
-i,--image IMAGE The image to instantiate
-c,--container CONT The name for the container
-m,--mount MOUNT The name for the folder (outside the container) to create/mount to the home
directory in the container. Mount folders are added here: $mount_prefix
--mount-existing Mount the specified dir even if it already exists
--port <cont_port>:<host_port> OR [<cont_port>:<host_port>,...] Port mapping(s). May be
specified multiple times.
-h,--help Print this help message and exit
EOF
exit "$1"
}
declare docker_user=""
declare docker_pass=""
declare image_name=""
declare cont_name=""
declare mount_name=""
declare -i mount_existing=0
declare -a port_mappings=()
while [[ $# -gt 0 ]]; do
case "$1" in
-u)
;&
--user)
if [[ -z "$2" ]]; then
echo "User (-u,--user) must be non-empty"
print_help_and_exit 1
fi
docker_user="$2"
shift 2
;;
-p)
;&
--pass)
if [[ -z "$2" ]]; then
echo "Password (-p,--pass) must be non-empty"
print_help_and_exit 1
fi
docker_pass="$2"
shift 2
;;
-i)
;&
--image)
if [[ -n "$image_name" ]]; then
echo "Unexpected argument '$1'"
print_help_and_exit 1
elif [[ -z "$2" ]]; then
echo "Image (-i,--image) must be non-empty"
print_help_and_exit 1
fi
image_name="$2"
shift 2
;;
-c)
;&
--container)
if [[ -n "$cont_name" ]]; then
echo "Unexpected argument '$1'"
print_help_and_exit 1
elif [[ -z "$2" ]]; then
echo "Container (-c,--container) must be non-empty"
print_help_and_exit 1
fi
cont_name="$2"
shift 2
;;
--port)
# Parse port(s) arg, and append the result to 'port_mappings'
# Note: port(s) may be specified in bracketed notation:
# [a:b,c:d,...,y:z]
next_ports="$(echo "$2" | sed -e 's/\[//g' -e 's/\]//g' -e 's/,/ /g')"
if [[ "${#port_mappings[@]}" -gt 0 ]]; then
next_ports=" $next_ports"
fi
port_mappings+=("$next_ports")
shift 2
;;
-m)
;&
--mount)
if [[ -z "$2" ]]; then
echo "Mount (-m,--mount) must be non-empty"
fi
mount_name="$2"
shift 2
;;
--mount-existing)
mount_existing=1
shift 1
;;
-h)
;&
--help)
print_help_and_exit 0
;;
*)
if [[ -z "$1" ]]; then
echo "Invalid positional argument '$1'"
print_help_and_exit 1
elif [[ -z "$image_name" ]]; then
image_name="$1"
elif [[ -z "$cont_name" ]]; then
cont_name="$1"
else
echo "Unexpected argument '$1'"
print_help_and_exit 1
fi
shift 1
;;
esac
done
if [[ -z "$image_name" ]]; then
image_name="bluetradingsystems/spark-crypto-dev"
fi
host_name="$(hostname)"
if [[ -n "$cont_name" ]]; then
host_name="$host_name.$cont_name"
fi
if [[ -z "$mount_name" ]]; then
mount_name="$cont_name"
fi
if [[ -z "$mount_name" && -z "$cont_name" ]]; then
echo "Please specify mount (-m,--mount) and/or container (-c,--container)"
print_help_and_exit 1
fi
if [[ -z "$docker_user" ]]; then
docker_user="$USER"
fi
home_src=$mount_prefix/$mount_name
home_tgt=$HOME
repo_src=$(git rev-parse --show-superproject-working-tree)
repo_tgt=$HOME/$(basename "$repo_src")
working_dir=$HOME
if [[ $mount_existing -eq 0 && -e "$home_src" ]]; then
# Don't overwrite existing dir (might be mounted in another container)
echo "Mount dir '$home_src' already exists (use --mount-existing to mount an existing directory)"
print_help_and_exit 1
fi
mkdir -p "$home_src"
if [[ "${#port_mappings[@]}" -eq 0 ]]; then
port_mappings=("8000:8000" "8001:8001" "8002:8002" "8003:8003")
fi
# Adapt port_mappings into args for `docker run` by prepending "-p " to each
# item
declare -a docker_port_args=()
for port_mapping in "${port_mappings[@]}"; do
docker_port_args+=("-p $port_mapping")
done
echo "Starting container '$cont_name'
image_name : $image_name
cont_name : $cont_name
home_src : $home_src
home_tgt : $home_tgt
repo_src : $repo_src
repo_tgt : $repo_tgt
working dir : $working_dir
ports : ${port_mappings[*]}
"
# DON'T wrap $docker_port_args in quotes. We want bash to split args by
# whitespace
docker run \
--net bridge \
-h "$host_name" \
-e "TZ=America/New_York" \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
--name "$cont_name" \
-v "$home_src:$home_tgt" \
-v "$repo_src:$repo_tgt" \
-w "$working_dir" \
${docker_port_args[*]} \
--shm-size=4024m \
-t \
-i \
-d \
-e DISPLAY="$DISPLAY" \
"$image_name" \
bash
# Add user w/ same uid and gid as the current user outside of docker, so the
# user inside the docker has file permissions in the mounted dir.
docker_group="$docker_user"
docker_user_uid="$(id -u "$USER")"
docker_user_gid="$(id -g "$USER")"
echo "Adding user in container '$cont_name'
name : $docker_user
uid : $docker_user_uid
gid : $docker_user_gid"
if [[ -z "$docker_pass" ]]; then
docker_pass="$docker_user"
echo "Giving user '$docker_user' a secure password: $docker_pass"
fi
docker exec -u root -it "$cont_name" groupadd -g "$docker_user_gid" "$docker_group"
docker exec -u root -it "$cont_name" useradd -u "$docker_user_uid" -g "$docker_user_gid" "$docker_user"
docker exec -u root -it "$cont_name" usermod --password "$(openssl passwd -1 "$docker_pass")" "$docker_user"
docker exec -u root -it "$cont_name" usermod -aG sudo "$docker_user"
docker exec -u root -it "$cont_name" "$repo_tgt/externals/src/emumba/install_emumba-deribit-connector.sh"
Submodule docker/windows deleted from de7d40c09d.
+6
View File
@@ -0,0 +1,6 @@
{
"sdk": {
"version": "6.0.200",
"rollForward": "latestMajor"
}
}
+20
View File
@@ -0,0 +1,20 @@
{
"FormattingOptions": {
"NewLineForCatch": false,
"NewLineForClausesInQuery": true,
"NewLineForElse": false,
"NewLineForFinally": false,
"NewLineForMembersInAnonymousTypes": true,
"NewLineForMembersInObjectInit": true,
"NewLinesForBracesInAccessors": false,
"NewLinesForBracesInAnonymousMethods": false,
"NewLinesForBracesInAnonymousTypes": false,
"NewLinesForBracesInControlBlocks": false,
"NewLinesForBracesInLambdaExpressionBody": false,
"NewLinesForBracesInMethods": false,
"NewLinesForBracesInObjectCollectionArrayInitializers": false,
"NewLinesForBracesInProperties": false,
"NewLinesForBracesInTypes": false,
"TabSize": 3
}
}
+42
View File
@@ -0,0 +1,42 @@
astroid==2.7.3
autopep8==1.5.7
blinker==1.9.0
boto3==1.37.9
botocore==1.37.9
certifi==2023.5.7
charset-normalizer==3.1.0
click==8.1.8
colorama==0.4.4
Flask==3.1.0
idna==3.4
isort==5.9.3
itsdangerous==2.2.0
Jinja2==3.1.6
jmespath==1.0.1
lazy-object-proxy==1.6.0
MarkupSafe==3.0.2
mccabe==0.6.1
numpy==2.2.6
platformdirs==2.3.0
protobuf==6.33.4
pybars3==0.9.7
pybind11==3.0.1
pybind11-stubgen==2.5.5
pybit==5.11.0
pycodestyle==2.7.0
pycparser==2.20
pycryptodome==3.23.0
pylint==2.10.2
PyMeta3==0.5.1
python-dateutil==2.9.0.post0
python-dotenv==1.0.1
requests==2.31.0
s3transfer==0.11.4
six==1.17.0
termcolor==1.1.0
toml==0.10.2
urllib3==2.0.3
websocket-client==1.8.0
Werkzeug==3.1.3
wrapt==1.12.1
yapf==0.31.0
+350 -149
View File
@@ -1,228 +1,429 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2024
# Visual Studio Version 17
VisualStudioVersion = 17.3.32922.545
MinimumVisualStudioVersion = 15.0.26124.0
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_api", "src\client\spark_api\spark_api.csproj", "{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspark", "build\src\lib\libspark.vcxproj", "{3335AAF0-489D-359D-8305-9B7A44E2C760}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bts.Spark.Api", "src\cs\Bts.Spark.Api\Bts.Spark.Api.csproj", "{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spark", "src\client\spark\Spark.csproj", "{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sparkcmd", "src\client\sparkcmd\sparkcmd.csproj", "{387566C6-C6F6-412C-A30C-9855BBCB4816}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spark.Console", "src\client\Spark.Console\Spark.Console.csproj", "{387566C6-C6F6-412C-A30C-9855BBCB4816}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_core", "src\client\spark_core\spark_core.csproj", "{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "build\ZERO_CHECK.vcxproj", "{2256015B-E7D5-3614-8F39-814CA68A4444}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bts.Spark.Core", "src\cs\Bts.Spark.Core\Bts.Spark.Core.csproj", "{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_sdk", "src\client\spark_sdk\spark_sdk.csproj", "{6963C314-83C4-4667-B0D0-C2F7AE208C29}"
ProjectSection(ProjectDependencies) = postProject
{3335AAF0-489D-359D-8305-9B7A44E2C760} = {3335AAF0-489D-359D-8305-9B7A44E2C760}
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_test", "src\client\spark_test\spark_test.csproj", "{ECD78CC5-138F-4809-A764-2358C2AC2E82}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_excel", "src\client\spark_excel\spark_excel.csproj", "{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_websocket", "src\client\spark_websocket\spark_websocket.csproj", "{3201359D-C071-4089-9EDE-B04D759F1508}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_api_server", "src\client\spark_api_server\spark_api_server.csproj", "{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataStreamCore", "src\DataStreamSuite\DataStreamCore\DataStreamCore.csproj", "{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataStream", "src\DataStreamSuite\DataStream\DataStream.csproj", "{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharedStreams", "src\DataStreamSuite\SharedStreams\SharedStreams.csproj", "{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PubSub", "src\DataStreamSuite\PubSub\PubSub.csproj", "{51C40BA9-F226-4A35-939D-1ED6F5FF7299}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataStreamSuite", "DataStreamSuite", "{60E0D592-FFB3-0D0A-C4AA-E88919B48F9D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Net", "src\cs\Bts.Net\Bts.Net.csproj", "{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.Extensions.Hosting", "src\cs\Bts.Extensions.Hosting\Bts.Extensions.Hosting.csproj", "{90A48718-F6A7-4747-97EA-89632B451008}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cs", "cs", "{1A5B8C5D-BADC-457E-819F-0050C44FE4D3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bts.IO.Compression", "src\cs\Bts.IO.Compression\Bts.IO.Compression.csproj", "{2A0FBDE0-D870-4567-85BD-F7793A5862C6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|Any CPU = Debug|Any CPU
Debug|x86 = Debug|x86
MinSizeRel|Any CPU = MinSizeRel|Any CPU
MinSizeRel|x64 = MinSizeRel|x64
MinSizeRel|Any CPU = MinSizeRel|Any CPU
MinSizeRel|x86 = MinSizeRel|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|Any CPU = Release|Any CPU
Release|x86 = Release|x86
RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU
RelWithDebInfo|x64 = RelWithDebInfo|x64
RelWithDebInfo|Any CPU = RelWithDebInfo|Any CPU
RelWithDebInfo|x86 = RelWithDebInfo|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|Any CPU.ActiveCfg = Debug|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x64.ActiveCfg = Debug|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x64.Build.0 = Debug|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x86.ActiveCfg = Debug|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|Any CPU.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|Any CPU.Build.0 = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x86.ActiveCfg = Debug|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Debug|x86.Build.0 = Debug|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x64.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x64.Build.0 = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x86.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x86.Build.0 = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|Any CPU.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x64.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x64.Build.0 = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x86.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|Any CPU.Build.0 = Release|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x86.ActiveCfg = Release|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.Release|x86.Build.0 = Release|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x64.Build.0 = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.Build.0 = Release|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.Debug|Any CPU.ActiveCfg = Debug|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.Debug|x64.ActiveCfg = Debug|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.Debug|x64.Build.0 = Debug|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.Debug|x86.ActiveCfg = Debug|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.Release|Any CPU.ActiveCfg = Release|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.Release|x64.ActiveCfg = Release|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.Release|x64.Build.0 = Release|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.Release|x86.ActiveCfg = Release|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{3335AAF0-489D-359D-8305-9B7A44E2C760}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|Any CPU.ActiveCfg = Debug|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x64.ActiveCfg = Debug|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x64.Build.0 = Debug|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x86.ActiveCfg = Debug|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|Any CPU.ActiveCfg = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|Any CPU.Build.0 = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x86.ActiveCfg = Debug|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x86.Build.0 = Debug|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|x64.ActiveCfg = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|x64.Build.0 = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|x86.ActiveCfg = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|x86.Build.0 = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|Any CPU.ActiveCfg = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|x64.ActiveCfg = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|x64.Build.0 = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|x86.ActiveCfg = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|Any CPU.Build.0 = Release|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|x86.ActiveCfg = Release|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Release|x86.Build.0 = Release|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|x64.Build.0 = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|x86.ActiveCfg = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|x86.Build.0 = Release|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|x64.ActiveCfg = Debug|x64
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|x64.Build.0 = Debug|x64
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|Any CPU.Build.0 = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|x64.ActiveCfg = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|x64.Build.0 = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|x86.ActiveCfg = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Debug|x86.Build.0 = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x86.Build.0 = Debug|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x64.ActiveCfg = Debug|x64
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x64.Build.0 = Debug|x64
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|x64.ActiveCfg = Release|x64
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|x64.Build.0 = Release|x64
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|Any CPU.ActiveCfg = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|Any CPU.Build.0 = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|x64.ActiveCfg = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|x64.Build.0 = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|x86.ActiveCfg = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.Release|x86.Build.0 = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|Any CPU.ActiveCfg = Debug|x64
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x64.Build.0 = Release|x64
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{387566C6-C6F6-412C-A30C-9855BBCB4816}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x64.ActiveCfg = Debug|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x64.Build.0 = Debug|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x86.ActiveCfg = Debug|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|Any CPU.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|Any CPU.Build.0 = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x86.ActiveCfg = Debug|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Debug|x86.Build.0 = Debug|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x64.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x64.Build.0 = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x86.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x86.Build.0 = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|Any CPU.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x64.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x64.Build.0 = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x86.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|Any CPU.Build.0 = Release|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x86.ActiveCfg = Release|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.Release|x86.Build.0 = Release|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x64.Build.0 = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.Build.0 = Release|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|Any CPU.ActiveCfg = Debug|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|x64.ActiveCfg = Debug|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|x64.Build.0 = Debug|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|x86.ActiveCfg = Debug|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|Any CPU.ActiveCfg = Release|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|x64.ActiveCfg = Release|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|x64.Build.0 = Release|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|x86.ActiveCfg = Release|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|Any CPU.ActiveCfg = Debug|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x64.ActiveCfg = Debug|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x64.Build.0 = Debug|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x86.ActiveCfg = Debug|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|Any CPU.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|Any CPU.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x86.ActiveCfg = Debug|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x86.Build.0 = Debug|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x64.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x64.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x86.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x86.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|Any CPU.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x64.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x64.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x86.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|Any CPU.Build.0 = Release|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x86.ActiveCfg = Release|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x86.Build.0 = Release|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x64.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x86.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x86.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|x64.ActiveCfg = Debug|x64
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|x64.Build.0 = Debug|x64
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|x64.ActiveCfg = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|x64.Build.0 = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|x86.ActiveCfg = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Debug|x86.Build.0 = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x86.Build.0 = Debug|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x64.ActiveCfg = Debug|x64
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x64.Build.0 = Debug|x64
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|x64.ActiveCfg = Release|x64
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|x64.Build.0 = Release|x64
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|Any CPU.Build.0 = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|x64.ActiveCfg = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|x64.Build.0 = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|x86.ActiveCfg = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.Release|x86.Build.0 = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x86.ActiveCfg = Release|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x86.Build.0 = Release|Any CPU
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.Debug|Any CPU.ActiveCfg = Debug|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.Debug|x64.ActiveCfg = Debug|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.Debug|x64.Build.0 = Debug|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.Debug|x86.ActiveCfg = Debug|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.MinSizeRel|Any CPU.ActiveCfg = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.MinSizeRel|Any CPU.Build.0 = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.MinSizeRel|x64.ActiveCfg = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.MinSizeRel|x64.Build.0 = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.MinSizeRel|x86.ActiveCfg = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.MinSizeRel|x86.Build.0 = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.Release|Any CPU.ActiveCfg = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.Release|x64.ActiveCfg = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.Release|x64.Build.0 = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.Release|x86.ActiveCfg = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.RelWithDebInfo|x64.Build.0 = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.RelWithDebInfo|x86.ActiveCfg = Release|x64
{BE9F27C3-B583-47DF-95FA-1F8BBC89DCCB}.RelWithDebInfo|x86.Build.0 = Release|x64
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x64.Build.0 = Release|x64
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{ECD78CC5-138F-4809-A764-2358C2AC2E82}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x64.ActiveCfg = Debug|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x64.Build.0 = Debug|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x86.ActiveCfg = Debug|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Debug|x86.Build.0 = Debug|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x64.ActiveCfg = Debug|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x64.Build.0 = Debug|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x64.ActiveCfg = Release|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x64.Build.0 = Release|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|Any CPU.Build.0 = Release|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x86.ActiveCfg = Release|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.Release|x86.Build.0 = Release|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x64.Build.0 = Release|x64
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{3201359D-C071-4089-9EDE-B04D759F1508}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x64.ActiveCfg = Debug|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x64.Build.0 = Debug|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x86.ActiveCfg = Debug|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Debug|x86.Build.0 = Debug|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x64.ActiveCfg = Debug|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x64.Build.0 = Debug|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x64.ActiveCfg = Release|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x64.Build.0 = Release|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|Any CPU.Build.0 = Release|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x86.ActiveCfg = Release|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.Release|x86.Build.0 = Release|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x64.Build.0 = Release|x64
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{2B8C5D01-FF78-4BFA-B332-5E430586DAF9}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|x64.ActiveCfg = Debug|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|x64.Build.0 = Debug|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|x86.ActiveCfg = Debug|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Debug|x86.Build.0 = Debug|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|x64.ActiveCfg = Release|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|x64.Build.0 = Release|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|Any CPU.Build.0 = Release|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|x86.ActiveCfg = Release|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.Release|x86.Build.0 = Release|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{4E4F491F-C688-43C4-88DA-AC92BC5FA1B8}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|x64.ActiveCfg = Debug|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|x64.Build.0 = Debug|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|x86.ActiveCfg = Debug|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Debug|x86.Build.0 = Debug|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|x64.ActiveCfg = Release|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|x64.Build.0 = Release|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|Any CPU.Build.0 = Release|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|x86.ActiveCfg = Release|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.Release|x86.Build.0 = Release|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{2AC54ADC-3246-427E-9CA9-FEA2DBCB9432}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|x64.ActiveCfg = Debug|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|x64.Build.0 = Debug|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|x86.ActiveCfg = Debug|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Debug|x86.Build.0 = Debug|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|x64.ActiveCfg = Release|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|x64.Build.0 = Release|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|Any CPU.Build.0 = Release|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|x86.ActiveCfg = Release|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.Release|x86.Build.0 = Release|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{4E96E5CC-7791-40B3-A8A1-C34FBB736B3B}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|x64.ActiveCfg = Debug|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|x64.Build.0 = Debug|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|Any CPU.Build.0 = Debug|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|x86.ActiveCfg = Debug|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Debug|x86.Build.0 = Debug|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|Any CPU.Build.0 = MinSizeRel|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|x86.ActiveCfg = MinSizeRel|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.MinSizeRel|x86.Build.0 = MinSizeRel|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|x64.ActiveCfg = Release|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|x64.Build.0 = Release|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|Any CPU.ActiveCfg = Release|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|Any CPU.Build.0 = Release|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|x86.ActiveCfg = Release|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.Release|x86.Build.0 = Release|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|Any CPU.Build.0 = RelWithDebInfo|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|Any CPU
{51C40BA9-F226-4A35-939D-1ED6F5FF7299}.RelWithDebInfo|x86.Build.0 = RelWithDebInfo|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|x64.ActiveCfg = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|x64.Build.0 = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|x86.ActiveCfg = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Debug|x86.Build.0 = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.MinSizeRel|x86.Build.0 = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|x64.ActiveCfg = Release|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|x64.Build.0 = Release|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|Any CPU.Build.0 = Release|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|x86.ActiveCfg = Release|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.Release|x86.Build.0 = Release|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
{5DE3B533-DCE6-4BF4-8F7E-08C440E177B4}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|x64.ActiveCfg = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|x64.Build.0 = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|Any CPU.Build.0 = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|x86.ActiveCfg = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Debug|x86.Build.0 = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.MinSizeRel|x86.Build.0 = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Release|x64.ActiveCfg = Release|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Release|x64.Build.0 = Release|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Release|Any CPU.ActiveCfg = Release|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Release|Any CPU.Build.0 = Release|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Release|x86.ActiveCfg = Release|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.Release|x86.Build.0 = Release|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
{90A48718-F6A7-4747-97EA-89632B451008}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|x64.ActiveCfg = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|x64.Build.0 = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|x86.ActiveCfg = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Debug|x86.Build.0 = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|x86.ActiveCfg = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.MinSizeRel|x86.Build.0 = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|x64.ActiveCfg = Release|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|x64.Build.0 = Release|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|Any CPU.Build.0 = Release|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|x86.ActiveCfg = Release|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.Release|x86.Build.0 = Release|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|x64.ActiveCfg = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|x64.Build.0 = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|Any CPU.ActiveCfg = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|Any CPU.Build.0 = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|x86.ActiveCfg = Debug|Any CPU
{2A0FBDE0-D870-4567-85BD-F7793A5862C6}.RelWithDebInfo|x86.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{60E0D592-FFB3-0D0A-C4AA-E88919B48F9D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{1A5B8C5D-BADC-457E-819F-0050C44FE4D3} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{2A0FBDE0-D870-4567-85BD-F7793A5862C6} = {1A5B8C5D-BADC-457E-819F-0050C44FE4D3}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {422D1620-0166-4C26-9A81-CA8A2EB1AB58}
EndGlobalSection
-41
View File
@@ -1,41 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.10
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sparkd", "src\server\sparkd\sparkd.vcxproj", "{BBBAFD38-312D-4A8D-9AF0-F2BDEE72CE6F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspark", "build\src\lib\libspark.vcxproj", "{502FD050-679A-3B50-B438-098500700919}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
MinSizeRel|x64 = MinSizeRel|x64
Release|x64 = Release|x64
RelWithDebInfo|x64 = RelWithDebInfo|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BBBAFD38-312D-4A8D-9AF0-F2BDEE72CE6F}.Debug|x64.ActiveCfg = Debug|x64
{BBBAFD38-312D-4A8D-9AF0-F2BDEE72CE6F}.Debug|x64.Build.0 = Debug|x64
{BBBAFD38-312D-4A8D-9AF0-F2BDEE72CE6F}.MinSizeRel|x64.ActiveCfg = Release|x64
{BBBAFD38-312D-4A8D-9AF0-F2BDEE72CE6F}.MinSizeRel|x64.Build.0 = Release|x64
{BBBAFD38-312D-4A8D-9AF0-F2BDEE72CE6F}.Release|x64.ActiveCfg = Release|x64
{BBBAFD38-312D-4A8D-9AF0-F2BDEE72CE6F}.Release|x64.Build.0 = Release|x64
{BBBAFD38-312D-4A8D-9AF0-F2BDEE72CE6F}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{BBBAFD38-312D-4A8D-9AF0-F2BDEE72CE6F}.RelWithDebInfo|x64.Build.0 = Release|x64
{502FD050-679A-3B50-B438-098500700919}.Debug|x64.ActiveCfg = Debug|x64
{502FD050-679A-3B50-B438-098500700919}.Debug|x64.Build.0 = Debug|x64
{502FD050-679A-3B50-B438-098500700919}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{502FD050-679A-3B50-B438-098500700919}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{502FD050-679A-3B50-B438-098500700919}.Release|x64.ActiveCfg = Release|x64
{502FD050-679A-3B50-B438-098500700919}.Release|x64.Build.0 = Release|x64
{502FD050-679A-3B50-B438-098500700919}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{502FD050-679A-3B50-B438-098500700919}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6A7249D7-B40C-4656-9347-60072D0B8FDB}
EndGlobalSection
EndGlobal
-17
View File
@@ -1,17 +0,0 @@
{
"files.associations": {
"chrono": "cpp",
"future": "cpp",
"system_error": "cpp",
"ios": "cpp",
"utility": "cpp",
"iosfwd": "cpp",
"xhash": "cpp",
"xstring": "cpp",
"xtree": "cpp",
"xutility": "cpp",
"exception": "cpp",
"bitset": "cpp",
"xlocale": "cpp"
}
}
@@ -0,0 +1,37 @@
namespace Bts.ArithmeticExpressions;
using System.Numerics;
class AdditiveInverse : IArithmeticExpression<double> {
readonly IArithmeticExpression expression;
public AdditiveInverse(IArithmeticExpression expression) =>
this.expression = expression;
public static AdditiveInverse<T> Create<T>(IArithmeticExpression<T> expression)
where T : INumber<T> =>
new(expression);
public double Evaluate(IDictionary<string, object?> env) =>
-evaluateArg(expression, nameof(expression), env);
static double evaluateArg(
IArithmeticExpression expr, string name, IDictionary<string, object?> env) {
var obj = expr.Evaluate(env);
return ConvertUtils.try_convert(expr.Evaluate(env), out double dbl) ? dbl :
throw new Exception(
$"Invalid AdditiveInverse. {name} is of type {obj?.GetType()} " +
$"(expected {typeof(double)})");
}
}
class AdditiveInverse<T> : IArithmeticExpression<T>
where T : INumber<T> {
readonly IArithmeticExpression<T> expression;
public AdditiveInverse(IArithmeticExpression<T> expression) =>
this.expression = expression;
public T Evaluate(IDictionary<string, object?> env) =>
-expression.Evaluate(env);
}
@@ -0,0 +1,45 @@
namespace Bts.ArithmeticExpressions;
using System.Numerics;
public static class ArithmeticExpressionExtensions {
public static IArithmeticExpression<TResult> Add<TLeft, TRight, TResult>(
this IArithmeticExpression<TLeft> left, IArithmeticExpression<TRight> right)
where TLeft :
INumber<TLeft>,
IAdditionOperators<TLeft, TRight, TResult>
where TRight : INumber<TRight>
where TResult : INumber<TResult> =>
new Sum<TLeft, TRight, TResult>(left, right);
public static IArithmeticExpression<TResult> Subtract<TLeft, TRight, TResult>(
this IArithmeticExpression<TLeft> left, IArithmeticExpression<TRight> right)
where TLeft :
INumber<TLeft>,
ISubtractionOperators<TLeft, TRight, TResult>
where TRight : INumber<TRight>
where TResult : INumber<TResult> =>
new Difference<TLeft, TRight, TResult>(left, right);
public static IArithmeticExpression<TResult> Multiply<TLeft, TRight, TResult>(
this IArithmeticExpression<TLeft> left, IArithmeticExpression<TRight> right)
where TLeft :
INumber<TLeft>,
IMultiplyOperators<TLeft, TRight, TResult>
where TRight : INumber<TRight>
where TResult : INumber<TResult> =>
new Product<TLeft, TRight, TResult>(left, right);
public static IArithmeticExpression<TResult> Divide<TLeft, TRight, TResult>(
this IArithmeticExpression<TLeft> left, IArithmeticExpression<TRight> right)
where TLeft :
INumber<TLeft>,
IDivisionOperators<TLeft, TRight, TResult>
where TRight : INumber<TRight>
where TResult : INumber<TResult> =>
new Quotient<TLeft, TRight, TResult>(left, right);
public static IArithmeticExpression<T> Negate<T>(this IArithmeticExpression<T> expression)
where T : INumber<T> =>
new AdditiveInverse<T>(expression);
}
@@ -0,0 +1,98 @@
%namespace Bts.ArithmeticExpressions
%partial
%visibility internal
%tokentype Token
%parsertype ArithmeticExpressionParserImpl
%union {
public int Integer;
public double Real;
public string Identifier;
public ImmutableList<IArithmeticExpression> Arguments;
public ImmutableList<Assignment> Assignments;
public IArithmeticExpression Argument;
public Assignment Assignment;
public ArithmeticProgram Program;
}
/* Constants */
%token INTEGER_CONSTANT REAL_CONSTANT
/* Arithmetic Operators */
%token ADD, SUBTRACT, MULTIPLY, DIVIDE, EQUALS
/* Syntax */
%token PARENTHESIS_OPEN, PARENTHESIS_CLOSE, COMMA, IDENTIFIER
%left ADD SUBTRACT
%left MULTIPLY DIVIDE
%nonassoc EQUALS
%type <Argument> Argument
%type <Arguments> Arguments
%type <Assignment> Assignment
%type <Assignments> Assignments
%type <Program> Program
%%
Program :
Assignments {
$$ = new($1);
}
;
Assignments :
Assignment {
$$ = ImmutableList<Assignment>.Empty.Add($1);
}
| Assignments Assignment {
$$ = $1.Add($2);
}
;
Assignment :
IDENTIFIER EQUALS Argument {
$$ = new($1.Identifier, $3);
}
;
Argument :
IDENTIFIER PARENTHESIS_OPEN Arguments PARENTHESIS_CLOSE {
$$ = new Function($1.Identifier, $3);
}
| INTEGER_CONSTANT {
$$ = new IntegerConstant($1.Integer);
}
| REAL_CONSTANT {
$$ = new RealConstant($1.Real);
}
| IDENTIFIER {
$$ = new Variable($1.Identifier);
}
| SUBTRACT Argument {
$$ = $2.Negate();
}
| PARENTHESIS_OPEN Argument PARENTHESIS_CLOSE {
$$ = $2;
}
| Argument MULTIPLY Argument {
$$ = $1.Multiply($3);
}
| Argument DIVIDE Argument {
$$ = $1.Divide($3);
}
| Argument ADD Argument {
$$ = $1.Add($3);
}
| Argument SUBTRACT Argument {
$$ = $1.Subtract($3);
}
;
Arguments :
Argument {
$$ = ImmutableList<IArithmeticExpression>.Empty.Add($1);
}
| Arguments COMMA Argument {
$$ = $1.Add($3);
}
;
@@ -0,0 +1,19 @@
namespace Bts.ArithmeticExpressions;
using System.Text;
partial class ArithmeticExpressionParserImpl {
public ArithmeticExpressionParserImpl() : base(null) { }
public ValueType Parse(Stream stream) {
Scanner = new ArithmeticExpressionScanner(stream);
Parse();
return CurrentSemanticValue;
}
public ValueType Parse(string str) {
var inputBuffer = Encoding.Default.GetBytes(str);
using var stream = new MemoryStream(inputBuffer);
return Parse(stream);
}
}
@@ -0,0 +1,11 @@
namespace Bts.ArithmeticExpressions;
using System;
partial class ArithmeticExpressionScanner {
public override void yyerror(string format, params object[] args) {
base.yyerror(format, args);
Console.WriteLine(format, args);
Console.WriteLine();
}
}
@@ -0,0 +1,70 @@
%namespace Bts.ArithmeticExpressions
%scannertype ArithmeticExpressionScanner
%visibility internal
%tokentype Token
%option stack, minimize, parser, verbose, persistbuffer, noembedbuffers
Letter [a-zA-Z]
Identifier {Letter}({Letter}*[0-9]*_*)*
IntegerConstant -?[0-9]+
RealConstant -?[0-9]+\.[0-9]+
ParenthesisOpen \(
ParenthesisClose \)
Add \+
Subtract \-
Multiply \*
Divide /
Equals =
Comma ,
%%
{IntegerConstant} {
yylval.Integer = int.Parse(yytext);
return (int)Token.INTEGER_CONSTANT;
}
{RealConstant} {
yylval.Real = double.Parse(yytext);
return (int)Token.REAL_CONSTANT;
}
{Identifier} {
yylval.Identifier = yytext;
return (int)Token.IDENTIFIER;
}
{ParenthesisOpen} {
return (int)Token.PARENTHESIS_OPEN;
}
{ParenthesisClose} {
return (int)Token.PARENTHESIS_CLOSE;
}
{Add} {
return (int)Token.ADD;
}
{Subtract} {
return (int)Token.SUBTRACT;
}
{Multiply} {
return (int)Token.MULTIPLY;
}
{Divide} {
return (int)Token.DIVIDE;
}
{Equals} {
return (int)Token.EQUALS;
}
{Comma} {
return (int)Token.COMMA;
}
%%
@@ -0,0 +1,34 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.24.3" />
<PackageReference Include="YaccLexTools" Version="1.2.2" />
</ItemGroup>
<Choose>
<When Condition="'$(UseProjectRefs)' == 'true'">
<ItemGroup>
<ProjectReference Include="..\ExpressionCore\ExpressionCore.csproj" />
<ProjectReference Include="..\..\cs\Bts.Spark.Core\Bts.Spark.Core.csproj" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="ExpressionCore" Version="$(SparkVersion)" />
<PackageReference Include="Bts.Spark.Core" Version="$(SparkVersion)" />
</ItemGroup>
</Otherwise>
</Choose>
<ItemGroup Label="ArithmeticExpression">
<Scanner Include="ArithmeticExpressionTokens.lex" />
<Parser Include="ArithmeticExpressionGrammar.y" />
</ItemGroup>
</Project>
@@ -0,0 +1,21 @@
namespace Bts.ArithmeticExpressions;
using System.Collections.Immutable;
class ArithmeticProgram : IArithmeticProgram {
readonly ImmutableList<Assignment>? assignments;
public ArithmeticProgram(Assignment assignment) =>
assignments = ImmutableList<Assignment>.Empty.Add(assignment);
public ArithmeticProgram(ImmutableList<Assignment> assignments) =>
this.assignments = assignments;
IEnumerable<string> IArithmeticProgram.OutputIdentifiers =>
assignments.empty_if_null()
.Select(a => a.Identifier ?? throw new Exception("Identifier string is null"))
.Distinct();
IDictionary<string, object?> IArithmeticProgram.Evaluate(IDictionary<string, object?> env) =>
assignments.empty_if_null().Aggregate(env, (e, a) => a.Evaluate(e));
}
@@ -0,0 +1,16 @@
namespace Bts.ArithmeticExpressions;
using Bts.ExpressionCore;
public static class ArithmeticProgramParser {
public static IArithmeticProgram Parse(Stream expression) =>
new Parser().Parse(expression);
public static IArithmeticProgram Parse(string expression) =>
new Parser().Parse(expression);
class Parser : IParser<ArithmeticProgram> {
public ArithmeticProgram Parse(Stream expression) =>
new ArithmeticExpressionParserImpl().Parse(expression).Program;
}
}
@@ -0,0 +1,24 @@
namespace Bts.ArithmeticExpressions;
public class Assignment {
public Assignment(string? identifier, IArithmeticExpression? value) {
Identifier = identifier ?? throw new ArgumentNullException(nameof(identifier));
Value = value ?? throw new ArgumentNullException(nameof(identifier));
}
public string? Identifier { get; }
public IArithmeticExpression? Value { get; }
public IDictionary<string, object?> Evaluate(IDictionary<string, object?> env) {
if (Identifier is null) {
throw new InvalidOperationException("Identifier is null");
}
if (Value is null) {
throw new InvalidOperationException($"Value is null (Identifier '{Identifier}')");
}
env[Identifier] = Value.Evaluate(env) ?? throw new Exception(
$"{nameof(Assignment)}.{nameof(Value)} (of type '{Value.GetType()}') " +
$"evaluated to null (Identifier '{Identifier}')");
return env;
}
}
@@ -0,0 +1,45 @@
namespace Bts.ArithmeticExpressions;
using System.Numerics;
public class Difference : IArithmeticExpression<double> {
readonly IArithmeticExpression lhs;
readonly IArithmeticExpression rhs;
public Difference(IArithmeticExpression lhs, IArithmeticExpression rhs) {
this.lhs = lhs;
this.rhs = rhs;
}
public static Difference<T, T, T> Create<T>(
IArithmeticExpression<T> left, IArithmeticExpression<T> right)
where T : INumber<T>, ISubtractionOperators<T, T, T> =>
new(left, right);
public double Evaluate(IDictionary<string, object?> env) =>
evaluateArg(lhs, nameof(lhs), env) - evaluateArg(rhs, nameof(rhs), env);
static double evaluateArg(
IArithmeticExpression expr, string name, IDictionary<string, object?> env) {
var obj = expr.Evaluate(env);
return ConvertUtils.try_convert(expr.Evaluate(env), out double dbl) ? dbl :
throw new Exception(
$"Invalid Difference. {name} is of type {obj?.GetType()} (expected {typeof(double)})");
}
}
public class Difference<TLeft, TRight, TResult> : IArithmeticExpression<TResult>
where TLeft : INumber<TLeft>, ISubtractionOperators<TLeft, TRight, TResult>
where TRight : INumber<TRight>
where TResult : INumber<TResult> {
readonly IArithmeticExpression<TLeft> left;
readonly IArithmeticExpression<TRight> right;
public Difference(IArithmeticExpression<TLeft> left, IArithmeticExpression<TRight> right) {
this.left = left;
this.right = right;
}
public TResult Evaluate(IDictionary<string, object?> env) =>
left.Evaluate(env) - right.Evaluate(env);
}
@@ -0,0 +1,208 @@
namespace Bts.ArithmeticExpressions;
using System.Collections;
using System.Diagnostics.CodeAnalysis;
class EvaluationEnvironment : IDictionary<string, object?>, IReadOnlyDictionary<string, object?> {
IDictionary<string, object?> outerEnv;
IDictionary<string, object?> innerEnv = new Dictionary<string, object?>();
int? count;
public EvaluationEnvironment(IDictionary<string, object?> initial) =>
outerEnv = initial;
public object? this[string key] {
get {
if (innerEnv.TryGetValue(key, out var rv)) {
return rv;
}
if (outerEnv.TryGetValue(key, out rv)) {
return rv;
}
throw new Exception($"Undefined identifier '{key}'");
}
set {
if (count.HasValue && !ContainsKey(key)) {
count = count.Value + 1;
innerEnv.Add(key, value);
return;
}
innerEnv[key] = value;
}
}
public IDictionary<string, object?> Result =>
innerEnv;
public ICollection<string> Keys =>
new KeyCollection(outerEnv, innerEnv);
public ICollection<object?> Values =>
new ValueCollection(outerEnv, innerEnv);
public int Count =>
count ??= countKeys(outerEnv, innerEnv);
public bool IsReadOnly => throw new NotImplementedException();
public bool ContainsKey(string key) =>
innerEnv.ContainsKey(key) || outerEnv.ContainsKey(key);
public bool TryGetValue(string key, [MaybeNullWhen(false)] out object? value) =>
innerEnv.TryGetValue(key, out value) || outerEnv.TryGetValue(key, out value);
public IEnumerator<KeyValuePair<string, object?>> GetEnumerator() {
foreach (var kv in innerEnv) {
yield return kv;
}
foreach (var kv in outerEnv.Except()) {
if (!innerEnv.ContainsKey(kv.Key)) {
yield return kv;
}
}
}
public void Add(string key, object? value) {
if (ContainsKey(key)) {
throw new ArgumentException(
$"An element with the same key ({key}) already exists", nameof(key));
}
innerEnv.Add(key, value);
}
public void Add(KeyValuePair<string, object?> item) =>
Add(item.Key, item.Value);
public void Clear() =>
throw new NotSupportedException();
public bool Contains(KeyValuePair<string, object?> item) =>
TryGetValue(item.Key, out var v) && Equals(v, item.Value);
public void CopyTo(KeyValuePair<string, object?>[] array, int arrayIndex) {
foreach (var kv in innerEnv) {
array[arrayIndex++] = kv;
}
foreach (var kv in outerEnv) {
if (!innerEnv.ContainsKey(kv.Key)) {
array[arrayIndex++] = kv;
}
}
}
public bool Remove(string key) =>
throw new NotSupportedException();
public bool Remove(KeyValuePair<string, object?> item) =>
throw new NotSupportedException();
static int countKeys(IDictionary<string, object?> d1, IDictionary<string, object?> d2) =>
d1.Count > d2.Count ?
d1.Count + d2.Keys.WhereNot(d1.ContainsKey).Count() :
d2.Count + d1.Keys.WhereNot(d2.ContainsKey).Count();
IEnumerable<string> IReadOnlyDictionary<string, object?>.Keys => Keys;
IEnumerable<object?> IReadOnlyDictionary<string, object?>.Values => Values;
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
class KeyCollection : ICollection<string> {
readonly IDictionary<string, object?> outerEnv;
readonly IDictionary<string, object?> innerEnv;
public KeyCollection(
IDictionary<string, object?> outerEnv, IDictionary<string, object?> innerEnv) {
this.outerEnv = outerEnv;
this.innerEnv = innerEnv;
}
public int Count =>
countKeys(outerEnv, innerEnv);
public bool IsReadOnly => true;
public void Add(string item) =>
throw new NotSupportedException();
public void Clear() =>
throw new NotSupportedException();
public bool Contains(string item) =>
innerEnv.ContainsKey(item) || outerEnv.ContainsKey(item);
public void CopyTo(string[] array, int arrayIndex) {
foreach (var k in this) {
array[arrayIndex++] = k;
}
}
public IEnumerator<string> GetEnumerator() {
foreach (var k in innerEnv.Keys) {
yield return k;
}
foreach (var k in outerEnv.Keys) {
if (!innerEnv.ContainsKey(k)) {
yield return k;
}
}
}
public bool Remove(string item) =>
throw new NotSupportedException();
IEnumerator IEnumerable.GetEnumerator() =>
GetEnumerator();
}
class ValueCollection : ICollection<object?> {
readonly IDictionary<string, object?> outerEnv;
readonly IDictionary<string, object?> innerEnv;
public ValueCollection(
IDictionary<string, object?> outerEnv, IDictionary<string, object?> innerEnv) {
this.outerEnv = outerEnv;
this.innerEnv = innerEnv;
}
public int Count =>
// Not a typo (obv, numValues == numKeys)
countKeys(outerEnv, innerEnv);
public bool IsReadOnly => true;
public void Add(object? item) =>
throw new NotSupportedException();
public void Clear() =>
throw new NotSupportedException();
public bool Contains(object? item) =>
innerEnv.Values.Contains(item) ||
outerEnv
.Where(kv => !innerEnv.ContainsKey(kv.Key))
.Select(kv => kv.Value)
.Contains(item);
public void CopyTo(object?[] array, int arrayIndex) {
foreach (var k in this) {
array[arrayIndex++] = k;
}
}
public IEnumerator<object?> GetEnumerator() {
foreach (var k in innerEnv.Values) {
yield return k;
}
foreach (var kv in outerEnv) {
if (!innerEnv.ContainsKey(kv.Key)) {
yield return kv.Value;
}
}
}
public bool Remove(object? item) =>
throw new NotSupportedException();
IEnumerator IEnumerable.GetEnumerator() =>
GetEnumerator();
}
}
Loaded 100 of 6631 files, more files were not shown because too many files have changed in this diff. Show more