Compare commits
31
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba5fff0168 | ||
|
|
976119fbee | ||
|
|
ed741c0621 | ||
|
|
e0cf3c739f | ||
|
|
59e2519a4d | ||
|
|
15de6f3e3d | ||
|
|
2e36f00382 | ||
|
|
9f24a3e7a2 | ||
|
|
e8dbf6fe09 | ||
|
|
aa403b83ef | ||
|
|
c507f20a8e | ||
|
|
ea52a4749d | ||
|
|
650710b5e2 | ||
|
|
20f6a29e05 | ||
|
|
e2f8d4db11 | ||
|
|
1812434ddc | ||
|
|
fd50050064 | ||
|
|
6ac43881ae | ||
|
|
4af1419748 | ||
|
|
7cfcdc3770 | ||
|
|
d03a705077 | ||
|
|
58eccad70d | ||
|
|
5f8ec04ff1 | ||
|
|
05e2107655 | ||
|
|
d41f613e32 | ||
|
|
bcbb598423 | ||
|
|
e88c44f9db | ||
|
|
93625957d1 | ||
|
|
8eccb869e1 | ||
|
|
40f4333fc7 | ||
|
|
319d5c2384 |
No files matched your search
Vendored
+10
-10
@@ -183,11 +183,10 @@
|
||||
"windows": {
|
||||
"program": "PubSubServer.exe",
|
||||
},
|
||||
"args": [
|
||||
"--config",
|
||||
"${workspaceFolder}/src/DataStreamSuite/PubSubServer/Configurations/${input:pubSubServerConfig}.json"
|
||||
],
|
||||
"cwd": "build/Debug/bin/net8.0",
|
||||
"env": {
|
||||
"DOTNET_ENVIRONMENT": "${input:pubSubServerEnvironment}",
|
||||
},
|
||||
"stopAtEntry": false,
|
||||
"console": "integratedTerminal"
|
||||
},
|
||||
@@ -214,7 +213,7 @@
|
||||
"type": "coreclr",
|
||||
"request": "launch",
|
||||
"program": "",
|
||||
"preLaunchTask": "Build Api Server (Debug)",
|
||||
"preLaunchTask": "Build Spark Sdk (Debug)",
|
||||
"windows": {
|
||||
"program": "Bts.Spark.Sdk.Demo.exe",
|
||||
},
|
||||
@@ -449,14 +448,15 @@
|
||||
"default": "Local",
|
||||
},
|
||||
{
|
||||
"id": "pubSubServerConfig",
|
||||
"id": "pubSubServerEnvironment",
|
||||
"type": "pickString",
|
||||
"description": "PubSub Configuration",
|
||||
"description": "PubSubServer Configuration",
|
||||
"options": [
|
||||
"PubSubServer",
|
||||
"SimpleEchoClient",
|
||||
"Development",
|
||||
"EchoServer",
|
||||
"Local",
|
||||
],
|
||||
"default": "PubSubServer",
|
||||
"default": "Development",
|
||||
},
|
||||
{
|
||||
"id": "sdkDemoEnvironment",
|
||||
|
||||
+35
-2
@@ -81,6 +81,8 @@ services:
|
||||
limits:
|
||||
memory: "${SPARKD__MEMORY:-4gb}"
|
||||
sparkd-multicast:
|
||||
environment:
|
||||
- TZ=America/Chicago
|
||||
volumes:
|
||||
- ${SPARKD__DATA_DIR:-sparkd_data}:/home/bts/.local/share/bts/sparkd/data
|
||||
- ${SPARKD__MD_RECORDING_DIR:-md_recording}:/md_recording
|
||||
@@ -93,7 +95,7 @@ services:
|
||||
- CONFIG_DIR=${SPARKD__CONFIG_DIR}
|
||||
- PYTHON_REQUIREMENTS=${SPARKD__PYTHON_REQUIREMENTS}
|
||||
- SPARKD_ENTRYPOINT=${SPARKD__SPARKD_ENTRYPOINT}
|
||||
shm_size: "${SPARKD__SHM_SIZE:-2048mb}"
|
||||
shm_size: "${SPARKD__SHM_SIZE:-8192mb}"
|
||||
env_file:
|
||||
- .env
|
||||
- ${SPARKD__CONFIG_DIR}/.env
|
||||
@@ -105,7 +107,38 @@ services:
|
||||
delay: 3s
|
||||
resources:
|
||||
limits:
|
||||
memory: "${SPARKD__MEMORY:-4gb}"
|
||||
memory: "${SPARKD__MEMORY:-16gb}"
|
||||
|
||||
|
||||
sparkd-multicast-cert:
|
||||
environment:
|
||||
- TZ=America/Chicago
|
||||
volumes:
|
||||
- ${SPARKD__DATA_DIR:-sparkd_data}:/home/bts/.local/share/bts/sparkd/data
|
||||
- ${SPARKD__MD_RECORDING_DIR:-md_recording}:/md_recording
|
||||
- ${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}
|
||||
- SPARKD_ENTRYPOINT=${SPARKD__SPARKD_ENTRYPOINT}
|
||||
shm_size: "${SPARKD__SHM_SIZE:-8192mb}"
|
||||
env_file:
|
||||
- .env
|
||||
- ${SPARKD__CONFIG_DIR}/.env
|
||||
network_mode: "host"
|
||||
entrypoint: ${SPARKD__MAIN_ENTRYPOINT}
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: any
|
||||
delay: 3s
|
||||
resources:
|
||||
limits:
|
||||
memory: "${SPARKD__MEMORY:-16gb}"
|
||||
|
||||
sparkd-tail:
|
||||
image: bluetradingsystems/linux_dotnet8
|
||||
volumes:
|
||||
|
||||
@@ -19,6 +19,11 @@ RUN add-apt-repository ppa:ubuntu-toolchain-r/test \
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y dotnet8
|
||||
|
||||
RUN apt-get update && apt-get install -y gdb
|
||||
RUN apt-get update && apt-get install -y fish
|
||||
RUN apt-get update && apt-get install -y vim
|
||||
RUN apt-get update && apt-get install -y less
|
||||
|
||||
RUN locale-gen en_US.UTF-8
|
||||
|
||||
ARG docker_user="bts"
|
||||
|
||||
+1
-1
Submodule externals updated: c7478ef5cd...2755fd6b8f.
+17
-25
@@ -187,32 +187,24 @@
|
||||
Name="Test"
|
||||
DependsOnTargets="Build"></Target>
|
||||
|
||||
<ItemGroup Condition="Exists('@(NativeWindowsAsset)')">
|
||||
<Content Include="@(NativeWindowsAsset)">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<TargetPath>%(FileName)%(Extension)</TargetPath>
|
||||
<Pack>false</Pack>
|
||||
</Content>
|
||||
<Content Include="@(NativeWindowsAsset)">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<TargetPath>runtimes/win-x64/native/%(FileName)%(Extension)</TargetPath>
|
||||
<Pack>true</Pack>
|
||||
<PackagePath>runtimes/win-x64/native</PackagePath>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<Target Name="CopyNativeAssetsToOutput" AfterTargets="Build">
|
||||
<Copy SourceFiles="@(NativeWindowsAsset)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="True" Condition="Exists('%(NativeWindowsAsset.FullPath)')" />
|
||||
<Copy SourceFiles="@(NativeLinuxAsset)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="True" Condition="Exists('%(NativeLinuxAsset.FullPath)')" />
|
||||
</Target>
|
||||
|
||||
<ItemGroup Condition="Exists('@(NativeLinuxAsset)')">
|
||||
<Content Include="@(NativeLinuxAsset)">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<TargetPath>%(FileName)%(Extension)</TargetPath>
|
||||
<Pack>false</Pack>
|
||||
</Content>
|
||||
<Content Include="@(NativeLinuxAsset)">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
<TargetPath>runtimes/linux-x64/native/%(FileName)%(Extension)</TargetPath>
|
||||
<Pack>true</Pack>
|
||||
<PackagePath>runtimes/linux-x64/native</PackagePath>
|
||||
</Content>
|
||||
<ItemGroup>
|
||||
<Content Include="@(NativeWindowsAsset)"
|
||||
Condition="Exists('@(NativeWindowsAsset)')"
|
||||
Link="%(NativeWindowsAsset.FileName)%(NativeWindowsAsset.Extension)"
|
||||
CopyToOutputDirectory="PreserveNewest"
|
||||
Pack="true"
|
||||
PackagePath="runtimes/win-x64/native/" />
|
||||
<Content Include="@(NativeLinuxAsset)"
|
||||
Condition="Exists('@(NativeLinuxAsset)')"
|
||||
Link="%(NativeLinuxAsset.FileName)%(NativeLinuxAsset.Extension)"
|
||||
CopyToOutputDirectory="PreserveNewest"
|
||||
Pack="true"
|
||||
PackagePath="runtimes/linux-x64/native/" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,10 @@
|
||||
SPARKD__CONFIG_DIR=src/app_sparkd/configurations/ophir_cert_live_wb
|
||||
SPARKD__DATA_DIR=/home/wedbushprod/9000/sparkdata/data
|
||||
SPARKD__IMAGE=sparkd_symbols
|
||||
SPARKD__PYTHON_REQUIREMENTS=src/app_sparkd/configurations/ophir_cert_live_wb/requirements.txt
|
||||
SPARKD__RUNTIME_CONF_DIR=/home/wedbushprod/9000/sparkdata/conf
|
||||
SPARKD__SHM_SIZE=8g
|
||||
SPARKD__MEMORY=16g
|
||||
SPARKD__CONFIG_PORT=9000
|
||||
SPARKD__QUICKBUS_PORT=9001
|
||||
SPARKD__SIM_FIX_PORT=9002
|
||||
File renamed without changes.
@@ -0,0 +1,140 @@
|
||||
DeploymentType {
|
||||
value {
|
||||
type: "dev"
|
||||
}
|
||||
}
|
||||
PublisherOptions {
|
||||
value {
|
||||
network_interface_a: 'ens65f1'
|
||||
network_interface_b: 'ens65f0'
|
||||
#these get overriden if not entered here
|
||||
heartbeat_ms: 5000
|
||||
heartbeat_boot_seconds: 60
|
||||
skip_options: false
|
||||
hot_initial: 1024
|
||||
hot_growth: 1024
|
||||
cold_initial: 8192
|
||||
cold_growth: 2048
|
||||
channel_prefix: ""
|
||||
disable_heartbeat: false
|
||||
}
|
||||
}
|
||||
|
||||
CMEOptions {
|
||||
value {
|
||||
feed_engine {
|
||||
name: "mdp3feed"
|
||||
spin_time: 0
|
||||
channels_per_thread: 3
|
||||
data_wait: 10
|
||||
udp_socket_buffer_size: 268435456
|
||||
}
|
||||
channel {
|
||||
id: "*"
|
||||
feed_engine: "mdp3feed"
|
||||
use_tcp_replay: false
|
||||
recovery_queue_size: 640000
|
||||
lost_packet_wait_timeout_ms: 10
|
||||
onixs_log_mode: CME_ONIXS_LOG_MODE_UNSPECIFIED
|
||||
#max_gap_recovery_cache_size: 4
|
||||
use_natural_refresh: false
|
||||
join_snapshot_on_gap: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Logging {
|
||||
value {
|
||||
initial_queue_size: 120001
|
||||
max_queue_growth: 4
|
||||
console {
|
||||
default_level: "Info"
|
||||
subsystem {
|
||||
name: "md"
|
||||
level: "Info"
|
||||
}
|
||||
subsystem {
|
||||
name: "OrderMan"
|
||||
level: "Info"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MarketDataConfig {
|
||||
value {
|
||||
glbx {
|
||||
unique_check_value: 15
|
||||
use_databento: false
|
||||
}
|
||||
# recording {
|
||||
# venue: VENUE_GLBX
|
||||
# num_of_seconds_to_run_file_writer: 300
|
||||
# num_of_seconds_to_run_db_writer : 0
|
||||
# n_book_levels: 10
|
||||
# batch_size: 100 #for the db writer
|
||||
# enable_book_recording: true
|
||||
# enable_trade_recording: true
|
||||
# enable_bbo_recording: false
|
||||
# enable_tbbo_recording: false
|
||||
# enable_misc_recording: true
|
||||
#}
|
||||
}
|
||||
}
|
||||
|
||||
JetFIX {
|
||||
value {
|
||||
connection {
|
||||
name: "maw_004_64"
|
||||
venue: VENUE_GLBX
|
||||
socket_connect_host_ip: "69.50.112.177"
|
||||
socket_connect_port: 44040
|
||||
sender_compid: "MAW004"
|
||||
target_compid: "CME"
|
||||
target_subid: "64"
|
||||
cme_market_segment_id: 64
|
||||
start_time: "00:10:00"
|
||||
end_time: "23:55:00"
|
||||
start_day: "sunday"
|
||||
end_day: "friday"
|
||||
seconds_between_hbs: 15
|
||||
sender_subid: "BTS"
|
||||
seconds_to_pause: 2
|
||||
max_connection_attempts: 100
|
||||
use_ilink3: true
|
||||
}
|
||||
}
|
||||
}
|
||||
OrdermanCfg {
|
||||
value {
|
||||
executor {
|
||||
thread_name: "oman_orders"
|
||||
poll: true
|
||||
hosted_actor: "MDSource"
|
||||
hosted_actor: "OrderManager"
|
||||
hosted_actor: "ExecutionGateway"
|
||||
}
|
||||
executor {
|
||||
thread_name: "oman_slow"
|
||||
poll: false
|
||||
hosted_actor: "*"
|
||||
}
|
||||
fallback_cust_order_handling_inst: "Y"
|
||||
}
|
||||
}
|
||||
NotSimExecution {
|
||||
value {
|
||||
entries {
|
||||
venue: VENUE_GLBX
|
||||
}
|
||||
}
|
||||
}
|
||||
Ports {
|
||||
value {
|
||||
config_port: 9000
|
||||
qbus_port: 9001
|
||||
glbx_sim_fix_port: 9002
|
||||
ice_sim_fix_port: 9003
|
||||
replicator_port: 9080
|
||||
}
|
||||
}
|
||||
File renamed without changes.
@@ -1,5 +0,0 @@
|
||||
SPARKD__CONFIG_DIR=src/app_sparkd/configurations/ophir_demo
|
||||
SPARKD__DATA_DIR=/home/ubuntu/8000/sparkdata/data
|
||||
SPARKD__IMAGE=sparkd_symbols
|
||||
SPARKD__PYTHON_REQUIREMENTS=src/app_sparkd/configurations/ophir_demo/requirements.txt
|
||||
SPARKD__RUNTIME_CONF_DIR=/home/ubuntu/8000/sparkdata/conf
|
||||
@@ -1,62 +0,0 @@
|
||||
JetFIX {
|
||||
value {
|
||||
connection {
|
||||
name: "glbx_1"
|
||||
venue: VENUE_GLBX
|
||||
max_order_msgs_per_window: 300
|
||||
window_duration_msecs: 1000
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PublisherOptions {
|
||||
value {
|
||||
network_interface: "0.0.0.0"
|
||||
heartbeat_ms: 5000
|
||||
heartbeat_boot_seconds: 60
|
||||
skip_options: true
|
||||
hot_initial: 1024
|
||||
hot_growth: 1024
|
||||
cold_initial: 8192
|
||||
cold_growth: 2048
|
||||
channel_prefix: ""
|
||||
disable_heartbeat: true
|
||||
}
|
||||
}
|
||||
|
||||
Logging {
|
||||
value {
|
||||
initial_queue_size: 120001
|
||||
max_queue_growth: 4
|
||||
console {
|
||||
default_level: "Info"
|
||||
subsystem {
|
||||
name: "md"
|
||||
level: "Warn"
|
||||
}
|
||||
subsystem {
|
||||
name: "OrderMan"
|
||||
level: "Info"
|
||||
}
|
||||
}
|
||||
file {
|
||||
default_level: "Info"
|
||||
subsystem {
|
||||
name: "OrderMan"
|
||||
level: "Diag"
|
||||
}
|
||||
subsystem {
|
||||
name: "Http"
|
||||
level: "Diag"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MarketDataConfig {
|
||||
value {
|
||||
replay {
|
||||
venue: VENUE_GLBX
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
Symbols {
|
||||
value {
|
||||
venues {
|
||||
name: "VENUE_GLBX"
|
||||
future: "ES"
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
SPARKD__CONFIG_DIR=src/app_sparkd/configurations/ophir_sim_live_wb
|
||||
SPARKD__CONFIG_DIR=src/app_sparkd/configurations/ophir_prod_live_wb
|
||||
SPARKD__DATA_DIR=/home/wedbushprod/8000/sparkdata/data
|
||||
SPARKD__IMAGE=sparkd_symbols
|
||||
SPARKD__PYTHON_REQUIREMENTS=src/app_sparkd/configurations/ophir_sim_live_wb/requirements.txt
|
||||
SPARKD__PYTHON_REQUIREMENTS=src/app_sparkd/configurations/ophir_prod_live_wb/requirements.txt
|
||||
SPARKD__RUNTIME_CONF_DIR=/home/wedbushprod/8000/sparkdata/conf
|
||||
File renamed without changes.
@@ -0,0 +1,152 @@
|
||||
DeploymentType {
|
||||
value {
|
||||
type: "prod"
|
||||
}
|
||||
}
|
||||
PublisherOptions {
|
||||
value {
|
||||
network_interface_a: 'enp193s0f0np0'
|
||||
network_interface_b: 'enp193s0f1np1'
|
||||
#these get overriden if not entered here
|
||||
heartbeat_ms: 5000
|
||||
heartbeat_boot_seconds: 60
|
||||
skip_options: false
|
||||
hot_initial: 1024
|
||||
hot_growth: 1024
|
||||
cold_initial: 8192
|
||||
cold_growth: 2048
|
||||
channel_prefix: ""
|
||||
disable_heartbeat: false
|
||||
}
|
||||
}
|
||||
|
||||
CMEOptions {
|
||||
value {
|
||||
feed_engine {
|
||||
name: "mdp3feed"
|
||||
spin_time: 0
|
||||
channels_per_thread: 3
|
||||
data_wait: 10
|
||||
udp_socket_buffer_size: 268435456
|
||||
}
|
||||
channel {
|
||||
id: "*"
|
||||
feed_engine: "mdp3feed"
|
||||
use_tcp_replay: false
|
||||
recovery_queue_size: 640000
|
||||
lost_packet_wait_timeout_ms: 10
|
||||
onixs_log_mode: CME_ONIXS_LOG_MODE_UNSPECIFIED
|
||||
#max_gap_recovery_cache_size: 4
|
||||
use_natural_refresh: false
|
||||
join_snapshot_on_gap: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Logging {
|
||||
value {
|
||||
initial_queue_size: 120001
|
||||
max_queue_growth: 4
|
||||
console {
|
||||
default_level: "Info"
|
||||
subsystem {
|
||||
name: "md"
|
||||
level: "Info"
|
||||
}
|
||||
subsystem {
|
||||
name: "OrderMan"
|
||||
level: "Info"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MarketDataConfig {
|
||||
value {
|
||||
glbx {
|
||||
unique_check_value: 15
|
||||
use_databento: false
|
||||
}
|
||||
# recording {
|
||||
# venue: VENUE_GLBX
|
||||
# num_of_seconds_to_run_file_writer: 300
|
||||
# num_of_seconds_to_run_db_writer : 0
|
||||
# n_book_levels: 10
|
||||
# batch_size: 100 #for the db writer
|
||||
# enable_book_recording: true
|
||||
# enable_trade_recording: true
|
||||
# enable_bbo_recording: false
|
||||
# enable_tbbo_recording: false
|
||||
# enable_misc_recording: true
|
||||
#}
|
||||
}
|
||||
}
|
||||
|
||||
JetFIX {
|
||||
value {
|
||||
connection {
|
||||
name: "u6p_7qb_54"
|
||||
venue: VENUE_GLBX
|
||||
socket_connect_host_ip: "205.209.201.97"
|
||||
socket_connect_port: 10979
|
||||
sender_compid: "U6P7QB"
|
||||
target_compid: "CME"
|
||||
target_subid: "54"
|
||||
cme_market_segment_id: 54
|
||||
start_time: "00:10:00"
|
||||
end_time: "23:55:00"
|
||||
start_day: "sunday"
|
||||
end_day: "friday"
|
||||
seconds_between_hbs: 15
|
||||
sender_subid: "BTS"
|
||||
seconds_to_pause: 1
|
||||
max_order_msgs_per_window: 300
|
||||
max_connection_attempts: 2
|
||||
use_ilink3: true
|
||||
}
|
||||
connection {
|
||||
name: "u6p_7qb_64"
|
||||
venue: VENUE_GLBX
|
||||
socket_connect_host_ip: "205.209.201.1"
|
||||
socket_connect_port: 10979
|
||||
sender_compid: "U6P7QB"
|
||||
target_compid: "CME"
|
||||
target_subid: "64"
|
||||
cme_market_segment_id: 64
|
||||
start_time: "00:10:00"
|
||||
end_time: "23:55:00"
|
||||
start_day: "sunday"
|
||||
end_day: "friday"
|
||||
seconds_between_hbs: 15
|
||||
sender_subid: "BTS"
|
||||
seconds_to_pause: 1
|
||||
max_connection_attempts: 2
|
||||
max_order_msgs_per_window: 300
|
||||
use_ilink3: true
|
||||
}
|
||||
}
|
||||
}
|
||||
OrdermanCfg {
|
||||
value {
|
||||
executor {
|
||||
thread_name: "oman_orders"
|
||||
poll: true
|
||||
hosted_actor: "MDSource"
|
||||
hosted_actor: "OrderManager"
|
||||
hosted_actor: "ExecutionGateway"
|
||||
}
|
||||
executor {
|
||||
thread_name: "oman_slow"
|
||||
poll: false
|
||||
hosted_actor: "*"
|
||||
}
|
||||
fallback_cust_order_handling_inst: "Y"
|
||||
}
|
||||
}
|
||||
NotSimExecution {
|
||||
value {
|
||||
entries {
|
||||
venue: VENUE_GLBX
|
||||
}
|
||||
}
|
||||
}
|
||||
File renamed without changes.
@@ -1,5 +0,0 @@
|
||||
SPARKD__CONFIG_DIR=src/app_sparkd/configurations/ophir_sim
|
||||
SPARKD__DATA_DIR=/home/tns/8000/sparkdata/data
|
||||
SPARKD__IMAGE=sparkd_symbols
|
||||
SPARKD__PYTHON_REQUIREMENTS=src/app_sparkd/configurations/ophir_sim/requirements.txt
|
||||
SPARKD__RUNTIME_CONF_DIR=/home/tns/8000/sparkdata/conf
|
||||
@@ -1,104 +0,0 @@
|
||||
JetFIX {
|
||||
value {
|
||||
connection {
|
||||
name: "glbx_1"
|
||||
venue: VENUE_GLBX
|
||||
max_order_msgs_per_window: 300
|
||||
window_duration_msecs: 1000
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PublisherOptions {
|
||||
value {
|
||||
network_interface_a: 'ens3f0np0'
|
||||
network_interface_b: 'ens3f1np1'
|
||||
#these get overriden if not entered here
|
||||
heartbeat_ms: 5000
|
||||
heartbeat_boot_seconds: 60
|
||||
skip_options: false
|
||||
hot_initial: 1024
|
||||
hot_growth: 1024
|
||||
cold_initial: 8192
|
||||
cold_growth: 2048
|
||||
channel_prefix: ""
|
||||
disable_heartbeat: false
|
||||
}
|
||||
}
|
||||
|
||||
CMEOptions {
|
||||
value {
|
||||
feed_engine {
|
||||
name: "mdp3feed"
|
||||
spin_time: 0
|
||||
channels_per_thread: 3
|
||||
data_wait: 10
|
||||
udp_socket_buffer_size: 268435456
|
||||
}
|
||||
channel {
|
||||
id: "*"
|
||||
feed_engine: "mdp3feed"
|
||||
use_tcp_replay: false
|
||||
recovery_queue_size: 640000
|
||||
lost_packet_wait_timeout_ms: 10
|
||||
onixs_log_mode: CME_ONIXS_LOG_MODE_REGULAR
|
||||
#max_gap_recovery_cache_size: 4
|
||||
use_natural_refresh: false
|
||||
join_snapshot_on_gap: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Logging {
|
||||
value {
|
||||
initial_queue_size: 120001
|
||||
max_queue_growth: 4
|
||||
console {
|
||||
default_level: "Info"
|
||||
subsystem {
|
||||
name: "md"
|
||||
level: "Info"
|
||||
}
|
||||
subsystem {
|
||||
name: "OrderMan"
|
||||
level: "Info"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MarketDataConfig {
|
||||
value {
|
||||
glbx {
|
||||
unique_check_value: 15
|
||||
use_databento: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# JetFIX {
|
||||
# value {
|
||||
# #connection: @JetFIXSimConnection.sim
|
||||
# connection {
|
||||
# name: "mlx_004_54"
|
||||
# venue: VENUE_GLBX
|
||||
# socket_connect_host_ip: "69.50.112.191"
|
||||
# socket_connect_port: 42876
|
||||
# sender_compid: "MLX004"
|
||||
# target_compid: "CME"
|
||||
# target_subid: "54"
|
||||
# cme_market_segment_id: 54
|
||||
# start_time: "00:10:00"
|
||||
# end_time: "23:55:00"
|
||||
# start_day: "sunday"
|
||||
# end_day: "friday"
|
||||
# seconds_between_hbs: 30
|
||||
# sender_subid: "BTS"
|
||||
# use_ilink3: true
|
||||
# # raw_data: "S4PMA"
|
||||
# # auto_fix_seq_num: true
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
numpy==2.2.6
|
||||
pybit==5.11.0
|
||||
requests==2.31.0
|
||||
websocket-client==1.8.0
|
||||
websockets==15.0.1
|
||||
@@ -1,116 +0,0 @@
|
||||
JetFIX {
|
||||
value {
|
||||
connection {
|
||||
name: "glbx_1"
|
||||
venue: VENUE_GLBX
|
||||
max_order_msgs_per_window: 300
|
||||
window_duration_msecs: 1000
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PublisherOptions {
|
||||
value {
|
||||
network_interface_a: 'enp193s0f0np0'
|
||||
network_interface_b: 'enp193s0f0np0'
|
||||
#these get overriden if not entered here
|
||||
heartbeat_ms: 5000
|
||||
heartbeat_boot_seconds: 60
|
||||
skip_options: false
|
||||
hot_initial: 1024
|
||||
hot_growth: 1024
|
||||
cold_initial: 8192
|
||||
cold_growth: 2048
|
||||
channel_prefix: ""
|
||||
disable_heartbeat: false
|
||||
}
|
||||
}
|
||||
|
||||
CMEOptions {
|
||||
value {
|
||||
feed_engine {
|
||||
name: "mdp3feed"
|
||||
spin_time: 0
|
||||
channels_per_thread: 3
|
||||
data_wait: 10
|
||||
udp_socket_buffer_size: 268435456
|
||||
}
|
||||
channel {
|
||||
id: "*"
|
||||
feed_engine: "mdp3feed"
|
||||
use_tcp_replay: false
|
||||
recovery_queue_size: 640000
|
||||
lost_packet_wait_timeout_ms: 10
|
||||
onixs_log_mode: CME_ONIXS_LOG_MODE_UNSPECIFIED:q
|
||||
#max_gap_recovery_cache_size: 4
|
||||
use_natural_refresh: false
|
||||
join_snapshot_on_gap: false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Logging {
|
||||
value {
|
||||
initial_queue_size: 120001
|
||||
max_queue_growth: 4
|
||||
console {
|
||||
default_level: "Info"
|
||||
subsystem {
|
||||
name: "md"
|
||||
level: "Info"
|
||||
}
|
||||
subsystem {
|
||||
name: "OrderMan"
|
||||
level: "Info"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MarketDataConfig {
|
||||
value {
|
||||
glbx {
|
||||
unique_check_value: 15
|
||||
use_databento: false
|
||||
}
|
||||
recording{
|
||||
venue: VENUE_GLBX
|
||||
num_of_seconds_to_run_file_writer: 300
|
||||
num_of_seconds_to_run_db_writer : 0
|
||||
n_book_levels: 10
|
||||
batch_size: 100 #for the db writer
|
||||
enable_book_recording: true
|
||||
enable_trade_recording: true
|
||||
enable_bbo_recording: false
|
||||
enable_tbbo_recording: false
|
||||
enable_misc_recording: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# JetFIX {
|
||||
# value {
|
||||
# #connection: @JetFIXSimConnection.sim
|
||||
# connection {
|
||||
# name: "mlx_004_54"
|
||||
# venue: VENUE_GLBX
|
||||
# socket_connect_host_ip: "69.50.112.191"
|
||||
# socket_connect_port: 42876
|
||||
# sender_compid: "MLX004"
|
||||
# target_compid: "CME"
|
||||
# target_subid: "54"
|
||||
# cme_market_segment_id: 54
|
||||
# start_time: "00:10:00"
|
||||
# end_time: "23:55:00"
|
||||
# start_day: "sunday"
|
||||
# end_day: "friday"
|
||||
# seconds_between_hbs: 30
|
||||
# sender_subid: "BTS"
|
||||
# use_ilink3: true
|
||||
# # raw_data: "S4PMA"
|
||||
# # auto_fix_seq_num: true
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
|
||||
|
||||
@@ -109,7 +109,8 @@ struct ExecutionGatewayProvider::PImpl {
|
||||
return make_gw<ICEExecutionGateway>(conn, conn, *l, o);
|
||||
case api::VENUE_GLBX:
|
||||
if (conn.use_ilink3()) {
|
||||
make_gw<ilink3::GLBXiLink3ExecutionGateway>(conn, conn, *l, o);
|
||||
return make_gw<ilink3::GLBXiLink3ExecutionGateway>(
|
||||
conn, conn, *l, o);
|
||||
}
|
||||
return make_gw<GLBXExecutionGateway>(conn, conn, *l, o);
|
||||
case api::VENUE_DERIBIT:
|
||||
|
||||
@@ -78,6 +78,9 @@ namespace mbts.spark {
|
||||
public Fill.Types.FillStatus fill_status => _fill.FillStatus;
|
||||
public string fill_key => _fill.FillKey;
|
||||
public string order_key => _order.Key.ToString();
|
||||
// public bool is_aggressor => fill_tuple.is_aggressor;
|
||||
public string display_aggressor_flag_text =>
|
||||
display_aggressor_flag(_fill.FillAggressorFlag);
|
||||
public bool is_selected {
|
||||
get => _is_selected;
|
||||
set {
|
||||
@@ -105,6 +108,13 @@ namespace mbts.spark {
|
||||
AlgoData? _root_algo => fill_tuple.root_algo;
|
||||
AlgoDefinitionMetadata? _root_algo_meta => fill_tuple.root_algo_meta;
|
||||
|
||||
public static string display_aggressor_flag(FillAggressorFlag flag) =>
|
||||
flag switch {
|
||||
FillAggressorFlag.Aggressor => "A",
|
||||
FillAggressorFlag.Passive => "P",
|
||||
_ => string.Empty
|
||||
};
|
||||
|
||||
public static FillsRowVM update(FillsRowVM r, FillTuple ft) {
|
||||
using var _ = _change_detector.detect_changes(r);
|
||||
r._badge_fill = null;
|
||||
|
||||
@@ -254,7 +254,7 @@ namespace mbts.spark {
|
||||
add_col(
|
||||
Columns.Price,
|
||||
DefaultColumnHeaders.Price,
|
||||
r => _get_row(r).security.spec_or_default().format(r.fill.AvgPrice),
|
||||
r => _get_row(r).security.spec_or_default().format(r.fill.LastPrice),
|
||||
new DoubleMinMax<FillTuple>(r => r.fill.LastPrice),
|
||||
DataGridFilterKnownTemplates.DoubleMinMax,
|
||||
fs => fs.price,
|
||||
@@ -295,7 +295,7 @@ namespace mbts.spark {
|
||||
add_col(
|
||||
Columns.IsAggressor,
|
||||
DefaultColumnHeaders.IsAggressor,
|
||||
r => r.is_aggressor ? SpecialCharacters.CheckMark : string.Empty,
|
||||
r => FillsRowVM.display_aggressor_flag(r.fill.FillAggressorFlag),
|
||||
dv_filter(new[] { false, true }, r => r.is_aggressor),
|
||||
DataGridFilterKnownTemplates.YesNo,
|
||||
fs => fs.is_aggressor,
|
||||
|
||||
@@ -8,13 +8,15 @@ using bts.api;
|
||||
using mbts.analytics;
|
||||
using mbts;
|
||||
|
||||
namespace BCG {
|
||||
namespace BCG
|
||||
{
|
||||
/// For each NMSheetSymbol in an NMSheet gets all the
|
||||
/// data together (theos, position, vol change etc)
|
||||
/// and fires a callback.
|
||||
/// This is where all the data is gathered, the rest
|
||||
/// is all access to this
|
||||
public class NMSheetSingleOptionMainDataSource : IDisposable {
|
||||
public class NMSheetSingleOptionMainDataSource : IDisposable
|
||||
{
|
||||
private ThreadedBlackboard _threaded_bb;
|
||||
private readonly ITag<NMSheetDataRequest> _in_bb_main_sheet_request_tag;
|
||||
private readonly ITag<ExchangeSecurityMap> _in_bb_secmap_tag =
|
||||
@@ -24,6 +26,7 @@ namespace BCG {
|
||||
private readonly ITag<OptionTheoInterpolationData> _in_bb_precomputed_sparse_theos_tag;
|
||||
private readonly ITag<IDictionary<NMSheetExpiration, double>> _in_bb_vol_shift_tag;
|
||||
private readonly ITag<NMSheetSettings> _in_bb_sheet_settings_tag;
|
||||
private readonly ITag<IEnumerable<ITradeLogRow>> _in_bb_trade_log_tag = SparkTags.TradeLogTag;
|
||||
private readonly ITag<VolSurfaceNonVolInput> _in_exp_param_tag = SparkTags.VolSurfaceNonVolInputTag;
|
||||
private readonly ITag<bool> _in_bb_main_sheet_visibility_tag;
|
||||
private ITag<SparkTags.Nothing> _in_bb_onefive_value_tag = SparkTags.TC2Tags.VoidTag,
|
||||
@@ -31,7 +34,6 @@ namespace BCG {
|
||||
_in_bb_symbol_theo_shift_tag = SparkTags.TC2Tags.VoidTag,
|
||||
_in_bb_rollover_data_tag = SparkTags.TC2Tags.VoidTag,
|
||||
_in_bb_presaved_aw2_theos_tag = SparkTags.TC2Tags.VoidTag,
|
||||
_in_bb_position_tag = SparkTags.TC2Tags.VoidTag,
|
||||
_in_bb_option_driver_detailed_price_tag = SparkTags.TC2Tags.VoidTag;
|
||||
private readonly NMSheetSymbol _nmsheet_symbol;
|
||||
private Action<Pair<NMSheetSymbol, NMSheetSingleOptionData>> _cb;
|
||||
@@ -40,7 +42,8 @@ namespace BCG {
|
||||
private string _electronic_equivelant_symbol;
|
||||
private NMSheetArchivedVolProvider _archived_vol_provider;
|
||||
|
||||
public NMSheetSingleOptionMainDataSource(object req_id, ThreadedBlackboard threaded_bb, NMSheetSymbol option, Action<Pair<NMSheetSymbol, NMSheetSingleOptionData>> callback) {
|
||||
public NMSheetSingleOptionMainDataSource(object req_id, ThreadedBlackboard threaded_bb, NMSheetSymbol option, Action<Pair<NMSheetSymbol, NMSheetSingleOptionData>> callback)
|
||||
{
|
||||
_threaded_bb = threaded_bb;
|
||||
_nmsheet_symbol = option;
|
||||
_electronic_equivelant_symbol = option.option_name;
|
||||
@@ -56,7 +59,8 @@ namespace BCG {
|
||||
_in_bb_sheet_settings_tag = SparkTags.TC2Tags.NMSheetSettingsTag(req_id.ToString());
|
||||
_in_bb_main_sheet_visibility_tag = SparkTags.TC2Tags.NMSheetVisibilityTag(req_id.ToString());
|
||||
_archived_vol_provider = new NMSheetArchivedVolProvider(req_id.ToString(), _threaded_bb, option,
|
||||
() => {
|
||||
() =>
|
||||
{
|
||||
_rollover_data = null;
|
||||
_compute_and_fire();
|
||||
});
|
||||
@@ -76,7 +80,7 @@ namespace BCG {
|
||||
_threaded_bb.subscribe(_in_bb_rollover_data_tag);
|
||||
_threaded_bb.subscribe(_in_bb_presaved_aw2_theos_tag);
|
||||
_threaded_bb.subscribe(_in_exp_param_tag);
|
||||
_threaded_bb.subscribe(_in_bb_position_tag);
|
||||
_threaded_bb.subscribe(_in_bb_trade_log_tag);
|
||||
_threaded_bb.subscribe(_in_bb_sheet_settings_tag);
|
||||
_threaded_bb.subscribe(_in_bb_onefive_value_tag);
|
||||
_threaded_bb.subscribe(_in_bb_qs_tag);
|
||||
@@ -84,15 +88,17 @@ namespace BCG {
|
||||
_threaded_bb.subscribe(_in_bb_option_driver_detailed_price_tag);
|
||||
}
|
||||
|
||||
private void _react_to_bb(object tag, object value) {
|
||||
private void _react_to_bb(object tag, object value)
|
||||
{
|
||||
if (_in_bb_main_sheet_request_tag.Equals(tag) || _in_bb_secmap_tag.Equals(tag) || _in_bb_live_theos_tag.Equals(tag) || /*_in_bb_live_driver_bbo_tag.Equals(tag) ||*/ _in_bb_precomputed_sparse_theos_tag.Equals(tag) ||
|
||||
_in_bb_vol_shift_tag.Equals(tag) || _in_bb_symbol_theo_shift_tag.Equals(tag) || _in_exp_param_tag.Equals(tag) || _in_bb_presaved_aw2_theos_tag.Equals(tag) ||
|
||||
_in_bb_position_tag.Equals(tag) || _in_bb_rollover_data_tag.Equals(tag) || _in_bb_sheet_settings_tag.Equals(tag) || _in_bb_qs_tag.Equals(tag) ||
|
||||
_in_bb_trade_log_tag.Equals(tag) || _in_bb_rollover_data_tag.Equals(tag) || _in_bb_sheet_settings_tag.Equals(tag) || _in_bb_qs_tag.Equals(tag) ||
|
||||
_in_bb_main_sheet_visibility_tag.Equals(tag))
|
||||
_compute_and_fire();
|
||||
}
|
||||
|
||||
private NMSheetDriverData _get_driver(DriverMD d) {
|
||||
private NMSheetDriverData _get_driver(DriverMD d)
|
||||
{
|
||||
double dr_pr = d.get_driver();
|
||||
if (d.driver_security.HasValue)
|
||||
return new NMSheetDriverData(d.driver_security.symbol_or_default(),
|
||||
@@ -102,8 +108,10 @@ namespace BCG {
|
||||
return new NMSheetDriverData(String.Empty, Venue.Unset, DateTime.MinValue, dr_pr, dr_pr, false);
|
||||
}
|
||||
|
||||
private void _compute_and_fire() {
|
||||
if (_is_main_sheet_active()) {
|
||||
private void _compute_and_fire()
|
||||
{
|
||||
if (_is_main_sheet_active())
|
||||
{
|
||||
var timer = Stopwatch.StartNew();
|
||||
NMSheetDataRequest data_request = _threaded_bb.read_state(_in_bb_main_sheet_request_tag) ?? new NMSheetDataRequest(new List<Triplet<NMSheetExpiration, bool, double>>());
|
||||
data_request = NMSheetDataRequest.restrict_for_symbol(data_request, _nmsheet_symbol);
|
||||
@@ -112,7 +120,8 @@ namespace BCG {
|
||||
NMSheetSettings sheet_settings = _threaded_bb.read_state(_in_bb_sheet_settings_tag) ?? new NMSheetSettings();
|
||||
ExpStrikeKeyedData<mbts.spark.TheoPoint> shared_live_theo_data_map = _threaded_bb.read_state(_in_bb_live_theos_tag);
|
||||
|
||||
if (data_request != null && live_driver_map != null && shared_live_theo_data_map != null) {
|
||||
if (data_request != null && live_driver_map != null && shared_live_theo_data_map != null)
|
||||
{
|
||||
ExpStrikeKeyedData<mbts.spark.TheoPoint> output_theo_data_map = _limit_to_requested_securities(shared_live_theo_data_map, data_request, sheet_settings);
|
||||
output_theo_data_map = _adjust_for_freezes(output_theo_data_map, data_request);
|
||||
_add_vol_shift(output_theo_data_map);
|
||||
@@ -138,14 +147,17 @@ namespace BCG {
|
||||
}
|
||||
}
|
||||
|
||||
private bool _is_main_sheet_active() {
|
||||
private bool _is_main_sheet_active()
|
||||
{
|
||||
return _threaded_bb.read_state(_in_bb_main_sheet_visibility_tag, true);
|
||||
}
|
||||
|
||||
private ExpStrikeKeyedData<mbts.spark.TheoPoint> _limit_to_requested_securities(ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_data, NMSheetDataRequest data_request, NMSheetSettings sheet_settings) {
|
||||
private ExpStrikeKeyedData<mbts.spark.TheoPoint> _limit_to_requested_securities(ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_data, NMSheetDataRequest data_request, NMSheetSettings sheet_settings)
|
||||
{
|
||||
HashSet<DateTime> selected_exp_map = new HashSet<DateTime>();
|
||||
HashSet<double> selected_strike_map = new HashSet<double>(sheet_settings.setting_unselected_strikes);
|
||||
foreach (Triplet<NMSheetExpiration, bool, double> t in data_request.expiration_request_list) {
|
||||
foreach (Triplet<NMSheetExpiration, bool, double> t in data_request.expiration_request_list)
|
||||
{
|
||||
NMSheetExpiration nm_exp = t.first;
|
||||
if (nm_exp != null && nm_exp.option_name == _nmsheet_symbol.option_name)
|
||||
selected_exp_map.Add(nm_exp.option_expiration);
|
||||
@@ -153,12 +165,14 @@ namespace BCG {
|
||||
return theo_data.clone_filtered_set(selected_exp_map, true, selected_strike_map, false);
|
||||
}
|
||||
|
||||
private ExpStrikeKeyedData<Triplet<mbts.spark.TheoPoint, uint, uint>> _attach_sec_keys(ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_map) {
|
||||
private ExpStrikeKeyedData<Triplet<mbts.spark.TheoPoint, uint, uint>> _attach_sec_keys(ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_map)
|
||||
{
|
||||
theo_map = theo_map ?? new ExpStrikeKeyedData<mbts.spark.TheoPoint>();
|
||||
ExchangeSecurityMap sec_map = _threaded_bb.read_state(_in_bb_secmap_tag);
|
||||
if (sec_map != null)
|
||||
return sec_map.attach_sec_keys(theo_map, _electronic_equivelant_symbol, _nmsheet_symbol.option_exchange);
|
||||
else {
|
||||
else
|
||||
{
|
||||
ExpStrikeKeyedData<Triplet<mbts.spark.TheoPoint, uint, uint>> rv = new ExpStrikeKeyedData<Triplet<mbts.spark.TheoPoint, uint, uint>>();
|
||||
foreach (Triplet<DateTime, double, mbts.spark.TheoPoint> t in theo_map.get_data_linearly())
|
||||
rv.set_data(t.first, t.second, new Triplet<mbts.spark.TheoPoint, uint, uint>(t.third, 0, 0));
|
||||
@@ -166,7 +180,8 @@ namespace BCG {
|
||||
}
|
||||
}
|
||||
|
||||
private ExpStrikeKeyedData<mbts.spark.TheoPoint> _adjust_for_freezes(ExpStrikeKeyedData<mbts.spark.TheoPoint> live_theo_map, NMSheetDataRequest data_request) {
|
||||
private ExpStrikeKeyedData<mbts.spark.TheoPoint> _adjust_for_freezes(ExpStrikeKeyedData<mbts.spark.TheoPoint> live_theo_map, NMSheetDataRequest data_request)
|
||||
{
|
||||
return live_theo_map;
|
||||
// TODO
|
||||
// ExpStrikeKeyedData<mbts.spark.TheoPoint> rv = new ExpStrikeKeyedData<mbts.spark.TheoPoint>();
|
||||
@@ -192,9 +207,11 @@ namespace BCG {
|
||||
|
||||
private Dictionary<DateTime, NMSheetDriverData> _get_option_exp_driver_data_map(NMSheetDataRequest data_request,
|
||||
ExpStrikeKeyedData<mbts.spark.TheoPoint> output_theo_data_map, ExpStrikeKeyedData<mbts.spark.TheoPoint> shared_live_theo_data_map,
|
||||
Dictionary<DateTime, Triplet<(string, Venue), DateTime, double>> live_driver_map) {
|
||||
Dictionary<DateTime, Triplet<(string, Venue), DateTime, double>> live_driver_map)
|
||||
{
|
||||
Dictionary<DateTime, NMSheetDriverData> rv = new Dictionary<DateTime, NMSheetDriverData>();
|
||||
foreach (Triplet<NMSheetExpiration, bool, double> theo_request in data_request.expiration_request_list) {
|
||||
foreach (Triplet<NMSheetExpiration, bool, double> theo_request in data_request.expiration_request_list)
|
||||
{
|
||||
DateTime option_expiration = theo_request.first.option_expiration;
|
||||
/// live driver
|
||||
var live_driver_info = live_driver_map.GetValueOrDefault(option_expiration)
|
||||
@@ -208,9 +225,11 @@ namespace BCG {
|
||||
|
||||
private Dictionary<DateTime, NMSheetDriverData>
|
||||
_get_option_exp_driver_data_map(NMSheetDataRequest data_request,
|
||||
OptionDriverPriceMap drivers) {
|
||||
OptionDriverPriceMap drivers)
|
||||
{
|
||||
var rv = new Dictionary<DateTime, NMSheetDriverData>();
|
||||
foreach (var tr in data_request.expiration_request_list) {
|
||||
foreach (var tr in data_request.expiration_request_list)
|
||||
{
|
||||
NMSheetExpiration nm_exp = tr.first;
|
||||
SecurityExpiration exp = tr.first.to_sec_exp();
|
||||
drivers.exp_price_map.TryGetValue(exp, out DriverMD dr_md);
|
||||
@@ -222,7 +241,8 @@ namespace BCG {
|
||||
return rv;
|
||||
}
|
||||
|
||||
private static double _get_driverprice_for_expiration(ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_data_map, DateTime option_expiration) {
|
||||
private static double _get_driverprice_for_expiration(ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_data_map, DateTime option_expiration)
|
||||
{
|
||||
IDictionary<double, mbts.spark.TheoPoint> exp_data = theo_data_map.get_data_for_single_exp(option_expiration);
|
||||
if (exp_data != null)
|
||||
foreach (mbts.spark.TheoPoint tp in exp_data.Values)
|
||||
@@ -230,7 +250,8 @@ namespace BCG {
|
||||
return Double.NaN;
|
||||
}
|
||||
|
||||
private IDictionary<DateTime, ATMData> _get_atm_data(ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_data) {
|
||||
private IDictionary<DateTime, ATMData> _get_atm_data(ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_data)
|
||||
{
|
||||
NMSheetSettings sheet_settings = _threaded_bb.read_state(_in_bb_sheet_settings_tag) ?? new NMSheetSettings();
|
||||
VolSurfaceNonVolInput vs_nvinp = _threaded_bb.read_state(_in_exp_param_tag);
|
||||
var option_exp_roll_data = vs_nvinp
|
||||
@@ -248,17 +269,43 @@ namespace BCG {
|
||||
}
|
||||
|
||||
OptionContractKeyedData<PNLRollOverDataUnit> _rollover_data = null;
|
||||
private OptionContractKeyedData<PNLRollOverDataUnit> _get_rollover_data() {
|
||||
private OptionContractKeyedData<PNLRollOverDataUnit> _get_rollover_data()
|
||||
{
|
||||
if (_rollover_data == null)
|
||||
_rollover_data = _archived_vol_provider.get_all_data();
|
||||
return _rollover_data;
|
||||
}
|
||||
|
||||
private ExpStrikeKeyedData<Tuple<double, double>> _get_position_map() {
|
||||
return new ExpStrikeKeyedData<Tuple<double, double>>();
|
||||
private ExpStrikeKeyedData<Tuple<double, double>> _get_position_map()
|
||||
{
|
||||
var sheet_settings = _threaded_bb.read_state(_in_bb_sheet_settings_tag);
|
||||
var risk_account_text = sheet_settings?.setting_layout?.risk_account ?? string.Empty;
|
||||
var risk_accounts = risk_account_text
|
||||
.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(a => a.Trim())
|
||||
.Where(a => !string.IsNullOrEmpty(a))
|
||||
.ToHashSet(StringComparer.OrdinalIgnoreCase);
|
||||
var trades = _threaded_bb.read_state(_in_bb_trade_log_tag) ?? Enumerable.Empty<ITradeLogRow>();
|
||||
var option_trades = trades.Where(t =>
|
||||
t.is_active &&
|
||||
t.security_type == SecurityType.Option &&
|
||||
t.symbol == _nmsheet_symbol.option_name &&
|
||||
t.venue == _nmsheet_symbol.option_exchange &&
|
||||
(risk_accounts.Count == 0 || risk_accounts.Contains(t.account)));
|
||||
var pos_data = SecurityPositionData.from_trades(option_trades);
|
||||
var rv = new ExpStrikeKeyedData<Tuple<double, double>>();
|
||||
foreach (var (sec_exp, strike_map) in pos_data.option_pos_map)
|
||||
{
|
||||
foreach (var (strike, strike_pos) in strike_map)
|
||||
{
|
||||
rv.set_data(sec_exp.expiration, strike, Tuple.Create(strike_pos.call, strike_pos.put));
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
private double _get_onefive() {
|
||||
private double _get_onefive()
|
||||
{
|
||||
// object dp_obj = _threaded_bb.sec_thread_retrieve_from_cache(_in_bb_onefive_value_tag);
|
||||
// if (dp_obj != null) {
|
||||
// DataPacket dp = dp_obj as DataPacket;
|
||||
@@ -270,22 +317,29 @@ namespace BCG {
|
||||
|
||||
#region Vol Shift
|
||||
|
||||
private void _add_vol_shift(ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_data) {
|
||||
private void _add_vol_shift(ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_data)
|
||||
{
|
||||
var vshift_map = _threaded_bb.read_state(_in_bb_vol_shift_tag);
|
||||
if (vshift_map != null)
|
||||
add_vol_shift(_nmsheet_symbol, theo_data, vshift_map);
|
||||
}
|
||||
|
||||
internal static void add_vol_shift(NMSheetSymbol apply_to_symbol, ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_data, IDictionary<NMSheetExpiration, double> exp_shift_map) {
|
||||
foreach (KeyValuePair<NMSheetExpiration, double> p in exp_shift_map) {
|
||||
if (p.Key.nmsheet_symbol.Equals(apply_to_symbol)) {
|
||||
internal static void add_vol_shift(NMSheetSymbol apply_to_symbol, ExpStrikeKeyedData<mbts.spark.TheoPoint> theo_data, IDictionary<NMSheetExpiration, double> exp_shift_map)
|
||||
{
|
||||
foreach (KeyValuePair<NMSheetExpiration, double> p in exp_shift_map)
|
||||
{
|
||||
if (p.Key.nmsheet_symbol.Equals(apply_to_symbol))
|
||||
{
|
||||
DateTime option_expiration = p.Key.option_expiration;
|
||||
double shift = p.Value;
|
||||
if (shift != 0) {
|
||||
if (shift != 0)
|
||||
{
|
||||
IDictionary<double, mbts.spark.TheoPoint> exp_theos = theo_data.get_data_for_single_exp(option_expiration);
|
||||
if (exp_theos != null) {
|
||||
if (exp_theos != null)
|
||||
{
|
||||
Dictionary<double, mbts.spark.TheoPoint> shifted_exp_theos = new Dictionary<double, mbts.spark.TheoPoint>();
|
||||
foreach (KeyValuePair<double, mbts.spark.TheoPoint> strike_tp in exp_theos) {
|
||||
foreach (KeyValuePair<double, mbts.spark.TheoPoint> strike_tp in exp_theos)
|
||||
{
|
||||
mbts.spark.TheoPoint new_tp = (mbts.spark.TheoPoint)strike_tp.Value.Clone();
|
||||
add_vol_shift(new_tp, shift);
|
||||
shifted_exp_theos[strike_tp.Key] = new_tp;
|
||||
@@ -297,7 +351,8 @@ namespace BCG {
|
||||
}
|
||||
}
|
||||
|
||||
internal static void add_vol_shift(mbts.spark.TheoPoint v, double shift) {
|
||||
internal static void add_vol_shift(mbts.spark.TheoPoint v, double shift)
|
||||
{
|
||||
v.call += v.cvega * shift;
|
||||
v.put += v.pvega * shift;
|
||||
}
|
||||
@@ -305,7 +360,8 @@ namespace BCG {
|
||||
#endregion
|
||||
|
||||
#region IDisposable
|
||||
public void Dispose() {
|
||||
public void Dispose()
|
||||
{
|
||||
_threaded_bb.data_callback -= _react_to_bb;
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace Spark.Api.Orders {
|
||||
|
||||
using Spark.Api.Admin;
|
||||
using Spark.Api.MarketData;
|
||||
using Spark.Api.Position;
|
||||
using Spark.Api.Reactive;
|
||||
using Spark.Core.Disposables;
|
||||
using Spark.Core.Reactive;
|
||||
@@ -40,10 +41,12 @@ namespace Spark.Api.Orders {
|
||||
) {
|
||||
_order_service = order_service;
|
||||
var scheduler = ThreadPoolScheduler.Instance;
|
||||
interval ??= TimeSpan.FromSeconds(0.1);
|
||||
if(interval is not null)
|
||||
Log.Api.info($"originally OrdersClient polling interval {interval}");
|
||||
interval = TimeSpan.FromMilliseconds(1);
|
||||
Log.Api.info($"OrdersClient polling interval {interval}");
|
||||
var bootstraps = new DisposableBuilder();
|
||||
|
||||
positions = position_service.subscribei_position_data().Table().Cache();
|
||||
_orders = bootstraps.emplace(
|
||||
admin_client
|
||||
.permission_filter(
|
||||
@@ -73,6 +76,11 @@ namespace Spark.Api.Orders {
|
||||
.Cache()
|
||||
.ToObservable());
|
||||
|
||||
var raw_fills = admin_client.permission_filter(
|
||||
order_service.subscribei_fills().Naggle(interval.Value, scheduler),
|
||||
f => f.Account)
|
||||
.Table();
|
||||
|
||||
var fill_order_tuples_join = fills.LeftJoin(
|
||||
_orders,
|
||||
f => f.val.FillKey,
|
||||
@@ -94,6 +102,12 @@ namespace Spark.Api.Orders {
|
||||
.Cache()
|
||||
.ToObservable());
|
||||
|
||||
var raw_manual_fills = admin_client
|
||||
.permission_filter(
|
||||
position_service.subscribei_manual_fills().Naggle(interval.Value, scheduler),
|
||||
f => f.AccountId)
|
||||
.Table();
|
||||
|
||||
var manual_fill_tuples_account_join = manual_fills_securities.LeftJoin(
|
||||
admin_client.Accounts,
|
||||
mf => mf.val.RecordId,
|
||||
@@ -117,6 +131,11 @@ namespace Spark.Api.Orders {
|
||||
.Cache()
|
||||
.ToObservable());
|
||||
|
||||
positions = bootstraps.emplace(
|
||||
ComputedPositionsDataSource.create(raw_fills, raw_manual_fills)
|
||||
.Cache()
|
||||
.ToObservable());
|
||||
|
||||
_dispose = bootstraps;
|
||||
}
|
||||
public async Task<Response> EnterOrderAsync(
|
||||
|
||||
@@ -0,0 +1,194 @@
|
||||
#nullable enable
|
||||
namespace Spark.Api.Position {
|
||||
using bts;
|
||||
using bts.api;
|
||||
using bts.api.core;
|
||||
using bts.api.orderman;
|
||||
using bts.api.position;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reactive.Linq;
|
||||
|
||||
public static class ComputedPositionsDataSource {
|
||||
public static IObservable<TableUpdate<PositionUnitImmutable, int>> create(
|
||||
IObservable<TableUpdate<FillImmutable, string>> fills,
|
||||
IObservable<TableUpdate<ManualFillImmutable, int>> manual_fills) {
|
||||
var record_ids = new Dictionary<AccountSecurityKey, int>();
|
||||
int next_record_id = 1;
|
||||
|
||||
return Observable.CombineLatest(
|
||||
fills,
|
||||
manual_fills,
|
||||
(fill_update, manual_fill_update) => build_snapshot(
|
||||
fill_update.Index.Values,
|
||||
manual_fill_update.Index.Values)
|
||||
.ToDictionary(PositionUnitImmutable.key_fn))
|
||||
.Table(PositionUnitImmutable.key_fn);
|
||||
|
||||
IEnumerable<PositionUnitImmutable> build_snapshot(
|
||||
IEnumerable<FillImmutable> electronic_fills,
|
||||
IEnumerable<ManualFillImmutable> manual_fill_rows) {
|
||||
var positions = new SortedDictionary<AccountSecurityKey, PositionAccumulator>();
|
||||
|
||||
foreach (var fill in electronic_fills) {
|
||||
if (fill.FillStatus == Fill.Types.FillStatus.Busted ||
|
||||
fill.SecurityKey == 0 ||
|
||||
fill.InternalAccountId == 0) {
|
||||
continue;
|
||||
}
|
||||
var key = new AccountSecurityKey(fill.InternalAccountId, fill.SecurityKey);
|
||||
var acc = get_or_create(positions, key, fill.Account);
|
||||
acc.add_electronic_fill(fill);
|
||||
positions[key] = acc;
|
||||
}
|
||||
|
||||
foreach (var fill in manual_fill_rows) {
|
||||
if (fill.SecurityKey == 0 || fill.AccountId == 0) {
|
||||
continue;
|
||||
}
|
||||
var key = new AccountSecurityKey(fill.AccountId, fill.SecurityKey);
|
||||
var acc = get_or_create(positions, key, fill.AccountName);
|
||||
acc.add_manual_fill(fill);
|
||||
positions[key] = acc;
|
||||
}
|
||||
|
||||
foreach (var (key, acc) in positions) {
|
||||
if (!record_ids.TryGetValue(key, out var record_id)) {
|
||||
record_id = next_record_id++;
|
||||
record_ids[key] = record_id;
|
||||
}
|
||||
yield return acc.to_position(record_id);
|
||||
}
|
||||
}
|
||||
|
||||
static PositionAccumulator get_or_create(
|
||||
IDictionary<AccountSecurityKey, PositionAccumulator> positions,
|
||||
AccountSecurityKey key,
|
||||
string account_name) {
|
||||
if (!positions.TryGetValue(key, out var acc)) {
|
||||
return new PositionAccumulator(key.account_id, key.security_id, account_name);
|
||||
} else if (string.IsNullOrEmpty(acc.account) && !string.IsNullOrEmpty(account_name)) {
|
||||
acc.account = account_name;
|
||||
}
|
||||
return acc;
|
||||
}
|
||||
}
|
||||
|
||||
struct PositionAccumulator {
|
||||
public PositionAccumulator(uint account_id, uint security_id, string account) {
|
||||
this.account_id = account_id;
|
||||
this.security_id = security_id;
|
||||
this.account = account;
|
||||
day = default;
|
||||
sod = default;
|
||||
local = default;
|
||||
admin_day = default;
|
||||
admin_sod = default;
|
||||
raw_day = default;
|
||||
}
|
||||
|
||||
public readonly uint account_id;
|
||||
public readonly uint security_id;
|
||||
public string account;
|
||||
PositionEntryAccumulator day;
|
||||
PositionEntryAccumulator sod;
|
||||
PositionEntryAccumulator local;
|
||||
PositionEntryAccumulator admin_day;
|
||||
PositionEntryAccumulator admin_sod;
|
||||
PositionEntryAccumulator raw_day;
|
||||
|
||||
public void add_electronic_fill(FillImmutable fill) {
|
||||
var qty = fill.Side == Side.Sell ? -fill.LastShares : fill.LastShares;
|
||||
if (is_sod(fill.FillKind)) {
|
||||
sod.add(qty, fill.LastPrice);
|
||||
return;
|
||||
}
|
||||
day.add(qty, fill.LastPrice);
|
||||
raw_day.add(qty, fill.LastPrice);
|
||||
}
|
||||
|
||||
public void add_manual_fill(ManualFillImmutable fill) {
|
||||
var qty = fill.Side == Side.Sell ? -fill.Quantity : fill.Quantity;
|
||||
switch (fill.FillType) {
|
||||
case ManualFill.Types.FillType.AdminSod:
|
||||
sod.add(qty, fill.Price);
|
||||
admin_sod.add(qty, fill.Price);
|
||||
break;
|
||||
case ManualFill.Types.FillType.AdminDay:
|
||||
day.add(qty, fill.Price);
|
||||
raw_day.add(qty, fill.Price);
|
||||
admin_day.add(qty, fill.Price);
|
||||
break;
|
||||
default:
|
||||
day.add(qty, fill.Price);
|
||||
raw_day.add(qty, fill.Price);
|
||||
local.add(qty, fill.Price);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public PositionUnitImmutable to_position(int record_id) {
|
||||
var sod_entry = sod.to_entry();
|
||||
var day_entry = day.to_entry();
|
||||
var raw_day_entry = raw_day.to_entry();
|
||||
var local_entry = local.to_entry();
|
||||
var admin_sod_entry = admin_sod.to_entry();
|
||||
var admin_day_entry = admin_day.to_entry();
|
||||
|
||||
return new PositionUnitImmutable(new PositionUnit {
|
||||
RecordId = record_id,
|
||||
Account = account,
|
||||
AccountId = account_id,
|
||||
SecurityId = security_id,
|
||||
SodLongPos = sod_entry.LongPos,
|
||||
SodLongAvgPrice = sod_entry.LongAvgPrice,
|
||||
SodShortPos = sod_entry.ShortPos,
|
||||
SodShortAvgPrice = sod_entry.ShortAvgPrice,
|
||||
DayLongPos = day_entry.LongPos,
|
||||
DayLongAvgPrice = day_entry.LongAvgPrice,
|
||||
DayShortPos = day_entry.ShortPos,
|
||||
DayShortAvgPrice = day_entry.ShortAvgPrice,
|
||||
Sod = sod_entry,
|
||||
Day = day_entry,
|
||||
RawDay = raw_day_entry,
|
||||
Local = local_entry,
|
||||
AdminSod = admin_sod_entry,
|
||||
AdminDay = admin_day_entry
|
||||
});
|
||||
}
|
||||
|
||||
static bool is_sod(Fill.Types.FillKind kind) =>
|
||||
kind == Fill.Types.FillKind.Sod ||
|
||||
kind == Fill.Types.FillKind.SodSpreadLeg ||
|
||||
kind == Fill.Types.FillKind.SodStripLeg;
|
||||
}
|
||||
|
||||
struct PositionEntryAccumulator {
|
||||
double long_qty;
|
||||
double long_cost;
|
||||
double short_qty;
|
||||
double short_cost;
|
||||
|
||||
public void add(double signed_qty, double price) {
|
||||
if (signed_qty > 0) {
|
||||
long_qty += signed_qty;
|
||||
long_cost += signed_qty * price;
|
||||
} else if (signed_qty < 0) {
|
||||
var abs_qty = Math.Abs(signed_qty);
|
||||
short_qty += abs_qty;
|
||||
short_cost += abs_qty * price;
|
||||
}
|
||||
}
|
||||
|
||||
public PositionEntry to_entry() =>
|
||||
new() {
|
||||
LongPos = long_qty,
|
||||
LongAvgPrice = long_qty == 0 ? 0 : long_cost / long_qty,
|
||||
ShortPos = short_qty,
|
||||
ShortAvgPrice = short_qty == 0 ? 0 : short_cost / short_qty
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ namespace Spark.Trading {
|
||||
using Spark.Api.Data;
|
||||
using Spark.Api.MarketData;
|
||||
using Spark.Api.Orders;
|
||||
using Spark.Api.Position;
|
||||
using Spark.Api.Reactive;
|
||||
using Spark.Core;
|
||||
using Spark.Core.Data;
|
||||
@@ -60,13 +61,21 @@ namespace Spark.Trading {
|
||||
.Cache()
|
||||
.ToObservable());
|
||||
|
||||
var raw_fills = admin_model
|
||||
.permission_filter(
|
||||
order_service.subscribei_fills().Naggle(interval, scheduler),
|
||||
f => f.Account)
|
||||
.Table();
|
||||
|
||||
var raw_manual_fills = admin_model
|
||||
.permission_filter(
|
||||
_position_service.subscribei_manual_fills().Naggle(interval, scheduler),
|
||||
f => f.AccountId)
|
||||
.Table();
|
||||
|
||||
on_positions = bootstraps.emplace(
|
||||
admin_model
|
||||
.permission_filter(
|
||||
_position_service.subscribei_position_data().Naggle(interval, scheduler),
|
||||
p => p.AccountId)
|
||||
.join(sec_resolver, pos => pos.SecurityId)
|
||||
.Table()
|
||||
ComputedPositionsDataSource.create(raw_fills, raw_manual_fills)
|
||||
.join_table(sec_resolver, pos => pos.SecurityId)
|
||||
.Cache()
|
||||
.ToObservable());
|
||||
var users = admin_model.Users
|
||||
|
||||
@@ -8,6 +8,7 @@ using bts.api.core;
|
||||
using bts.api.orderman;
|
||||
using bts.api.position;
|
||||
using bts.co2;
|
||||
using bts.metrics;
|
||||
using bts.md;
|
||||
|
||||
using Microsoft.Extensions.Configuration;
|
||||
@@ -86,6 +87,7 @@ public static class SparkApiServices {
|
||||
services.AddSparkdService<OrderService>();
|
||||
services.AddSingleton<IOrdersClient, OrdersClient>();
|
||||
}
|
||||
services.AddSparkdService<ShellLatencyService>();
|
||||
if (configurationSection.GetValue("EnablePosition", true)) {
|
||||
services.TryAddSingleton<ISecurityResolver>(ActivatorUtilities.GetServiceOrCreateInstance<PassiveSecurityResolver>);
|
||||
services.AddSparkdService<PositionService>()
|
||||
@@ -176,6 +178,7 @@ public static class SparkApiServices {
|
||||
services.AddSparkdService<OrderService>();
|
||||
services.AddSingleton<IOrdersClient, OrdersClient>();
|
||||
}
|
||||
services.AddSparkdService<ShellLatencyService>();
|
||||
if (isPositionsEnabled) {
|
||||
services.AddSparkdService<PositionService>();
|
||||
}
|
||||
|
||||
@@ -190,6 +190,10 @@ namespace mbts.spark {
|
||||
result = SingleSecurityCriteria.Empty;
|
||||
return false;
|
||||
}
|
||||
if (id is null && (name is null || venue is null)) {
|
||||
result = SingleSecurityCriteria.Empty;
|
||||
return false;
|
||||
}
|
||||
result = new(venue, type, asset, name, id);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -41,8 +41,8 @@ class TopOfBookQuoter : IHostedService {
|
||||
throw new ArgumentException("Failed to parse venue", nameof(config));
|
||||
}
|
||||
var quantity = config.Quantity;
|
||||
if (!(quantity > 0)) {
|
||||
throw new ArgumentException("Quantity is not positive", nameof(config));
|
||||
if (quantity == 0 || !double.IsRealNumber(quantity)) {
|
||||
throw new ArgumentException("Quantity must be real and non-zero", nameof(config));
|
||||
}
|
||||
this.config = new(venue, contract, account, config.OffsetTicks, quantity);
|
||||
}
|
||||
@@ -86,11 +86,12 @@ class TopOfBookQuoter : IHostedService {
|
||||
if (!bk.Security.HasValue) {
|
||||
return;
|
||||
}
|
||||
var bidPrice = bk[Side.Buy, 0].Price;
|
||||
var orderPrice = bidPrice;
|
||||
var orderQty = config.Quantity;
|
||||
var bidPrice = bk[orderQty < 0 ? Side.Sell : Side.Buy, 0].Price;
|
||||
orderQty = Math.Abs(orderQty);
|
||||
var orderPrice = bidPrice;
|
||||
if (config.OffsetTicks != 0) {
|
||||
orderPrice = bk.Security.Value.tick_factors().tickdown(orderPrice, config.OffsetTicks);
|
||||
orderPrice = bk.Security.Value.tick_factors().tick(orderPrice, config.OffsetTicks);
|
||||
}
|
||||
if (securityToOrderId.TryGetValue(bk.SecurityId, out var orderId)
|
||||
&& orders.TryGetValue(orderId, out var orderTree)
|
||||
|
||||
@@ -4,7 +4,7 @@ using bts.api;
|
||||
|
||||
public static class VenueParser {
|
||||
public static bool TryParse(string? venueStr, out Venue venue) {
|
||||
if (venueStr is null || (!Enum.TryParse(venueStr, false, out venue) && !Enum.TryParse("VENUE_" + venueStr, false, out venue))) {
|
||||
if (venueStr is null || (!Enum.TryParse(venueStr, true, out venue) && !Enum.TryParse("VENUE_" + venueStr, true, out venue))) {
|
||||
venue = Venue.Unset;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ namespace Bts.Spark.Sdk;
|
||||
using bts.api;
|
||||
using bts.api.core;
|
||||
using bts.api.orderman;
|
||||
using bts.metrics;
|
||||
|
||||
using global::Spark.Api.Admin;
|
||||
using global::Spark.Api.MarketData;
|
||||
@@ -28,6 +29,7 @@ public class AuthenticatedSimpleSparkClient : ISimpleSparkClient, IHostedService
|
||||
readonly IOrdersClient ordersClient;
|
||||
readonly IAdminClient adminClient;
|
||||
readonly ISecurityResolver securityResolver;
|
||||
readonly ShellLatencyService shellLatencyService;
|
||||
readonly ISparkLoginService loginService;
|
||||
readonly SimpleSparkClientConfig config;
|
||||
readonly ILogger<AuthenticatedSimpleSparkClient> logger;
|
||||
@@ -39,6 +41,7 @@ public class AuthenticatedSimpleSparkClient : ISimpleSparkClient, IHostedService
|
||||
IOrdersClient ordersClient,
|
||||
IAdminClient adminClient,
|
||||
ISecurityResolver securityResolver,
|
||||
ShellLatencyService shellLatencyService,
|
||||
ISparkLoginService loginService,
|
||||
IOptions<SimpleSparkClientConfig> config,
|
||||
ILogger<AuthenticatedSimpleSparkClient> logger) {
|
||||
@@ -46,6 +49,7 @@ public class AuthenticatedSimpleSparkClient : ISimpleSparkClient, IHostedService
|
||||
this.ordersClient = ordersClient;
|
||||
this.adminClient = adminClient;
|
||||
this.securityResolver = securityResolver;
|
||||
this.shellLatencyService = shellLatencyService;
|
||||
this.loginService = loginService;
|
||||
this.config = config.Value;
|
||||
this.logger = logger;
|
||||
@@ -61,7 +65,7 @@ public class AuthenticatedSimpleSparkClient : ISimpleSparkClient, IHostedService
|
||||
}
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
var user = loginRes.user.Value;
|
||||
simpleClient = new(user.name, user.id, mdClient, ordersClient, adminClient, securityResolver, config.OrderPoolCapacity, config.OrderPoolReplenishInterval);
|
||||
simpleClient = new(user.name, user.id, mdClient, ordersClient, shellLatencyService, adminClient, securityResolver, config.OrderPoolCapacity, config.OrderPoolReplenishInterval);
|
||||
simpleClientSubject.OnNext(simpleClient);
|
||||
logger.LogInformation("SimpleSparkClient started");
|
||||
}
|
||||
@@ -97,6 +101,9 @@ public class AuthenticatedSimpleSparkClient : ISimpleSparkClient, IHostedService
|
||||
public IObservable<TableUpdate<PriceTicker, uint>> PriceTicker(SecurityCriteria? securityCriteria) =>
|
||||
simpleClient?.PriceTicker(securityCriteria) ?? simpleClientSubject.Take(1).Select(c => c.PriceTicker(securityCriteria)).FlattenSeries();
|
||||
|
||||
public Task<bool> PingAsync() =>
|
||||
simpleClient?.PingAsync() ?? pingBeforeStartAsync();
|
||||
|
||||
public Task<Response> CreateOrder(OrderDefinition orderDef, double quantity, double price) =>
|
||||
orderOp(cli => cli.CreateOrder(orderDef, quantity, price));
|
||||
|
||||
@@ -134,4 +141,15 @@ public class AuthenticatedSimpleSparkClient : ISimpleSparkClient, IHostedService
|
||||
async Task<T> LateImpl() =>
|
||||
await op(await simpleClientSubject.FirstAsync());
|
||||
}
|
||||
|
||||
async Task<bool> pingBeforeStartAsync() {
|
||||
var request = new BufferMessage() {
|
||||
Sequence = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
||||
Data = "spark-sdk-ping"
|
||||
};
|
||||
var result = await shellLatencyService.ping_async(request);
|
||||
return result.success &&
|
||||
result.value.Sequence == request.Sequence &&
|
||||
result.value.Data == request.Data;
|
||||
}
|
||||
}
|
||||
@@ -48,6 +48,9 @@ public class ExecutionFacadeSimpleSparkClient : ISimpleSparkClient {
|
||||
public IObservable<TableUpdate<PriceTicker, uint>> PriceTicker(SecurityCriteria? securityCriteria) =>
|
||||
sparkClient.PriceTicker(securityCriteria);
|
||||
|
||||
public Task<bool> PingAsync() =>
|
||||
sparkClient.PingAsync();
|
||||
|
||||
public Task<Response> CreateOrder(OrderDefinition orderDef, double quantity, double price) {
|
||||
logger.LogInformation("CreateOrder {account} {tag} {securityId} {side} {quantity} @ {price}", orderDef.Account, orderDef.Tag, orderDef.SecurityKey, orderDef.Side, quantity, price);
|
||||
return Task.FromResult(facadeResponse());
|
||||
|
||||
@@ -12,6 +12,8 @@ using mbts.spark;
|
||||
using System;
|
||||
|
||||
public interface ISimpleSparkClient {
|
||||
Task<bool> PingAsync();
|
||||
|
||||
// Market Data
|
||||
IObservable<TableUpdate<SecurityImmutable, uint>> Securities(SecurityCriteria? securityCriteria);
|
||||
IObservable<TableUpdate<BookRecord, uint>> Books(SecurityCriteria? securityCriteria);
|
||||
|
||||
@@ -16,12 +16,14 @@ using global::Spark.Core.Disposables;
|
||||
using global::Spark.Core.Reactive;
|
||||
|
||||
using mbts.spark;
|
||||
using bts.metrics;
|
||||
|
||||
using System.Reactive.Linq;
|
||||
|
||||
public class SimpleSparkClient : ISimpleSparkClient, IDisposable {
|
||||
readonly IMarketDataClient mdClient;
|
||||
readonly IOrdersClient ordersClient;
|
||||
readonly ShellLatencyService shellLatencyService;
|
||||
readonly OrderPool limitOrderPool;
|
||||
readonly OrderPool marketOrderPool;
|
||||
readonly TableUpdateDemuxer<OrderRecordTupleWithRoot, uint, uint> orderSecurityDmx;
|
||||
@@ -46,6 +48,7 @@ public class SimpleSparkClient : ISimpleSparkClient, IDisposable {
|
||||
uint userId,
|
||||
IMarketDataClient mdClient,
|
||||
IOrdersClient ordersClient,
|
||||
ShellLatencyService shellLatencyService,
|
||||
IAdminClient adminClient,
|
||||
ISecurityResolver securityResolver,
|
||||
int orderPoolCapacity,
|
||||
@@ -53,6 +56,7 @@ public class SimpleSparkClient : ISimpleSparkClient, IDisposable {
|
||||
) {
|
||||
this.mdClient = mdClient;
|
||||
this.ordersClient = ordersClient;
|
||||
this.shellLatencyService = shellLatencyService;
|
||||
limitOrderPool = new(orderPoolCapacity, () => new() { User = userName, UserId = userId, TimeInForce = TimeInForce.Gtc, CustomDef = new() { Limit = new() } });
|
||||
marketOrderPool = new(orderPoolCapacity, () => new() { User = userName, UserId = userId, TimeInForce = TimeInForce.Gtc, CustomDef = new() { Market = new() } });
|
||||
orderSecurityDmx = new TableUpdateDemuxer<OrderRecordTupleWithRoot, uint, uint>(o => o.order.order.Key, o => o.security_id);
|
||||
@@ -140,6 +144,17 @@ public class SimpleSparkClient : ISimpleSparkClient, IDisposable {
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> PingAsync() {
|
||||
var request = new BufferMessage() {
|
||||
Sequence = (ulong)DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
||||
Data = "spark-sdk-ping"
|
||||
};
|
||||
var result = await shellLatencyService.ping_async(request);
|
||||
return result.success &&
|
||||
result.value.Sequence == request.Sequence &&
|
||||
result.value.Data == request.Data;
|
||||
}
|
||||
|
||||
public IObservable<TableUpdate<BookRecord, uint>> Books(SecurityCriteria? securityCriteria) {
|
||||
var booksSource = this.booksSource;
|
||||
var secFilter = securityCriteria?.ToPredicate();
|
||||
@@ -271,28 +286,32 @@ public class SimpleSparkClient : ISimpleSparkClient, IDisposable {
|
||||
public Task<Response> CreateLimitOrder(string account, Venue venue, string contract, Side side, double quantity, double price, string? tag) {
|
||||
var def = buildOrder(account, venue, contract, limitOrderPool);
|
||||
def.Side = side;
|
||||
def.Tag = tag;
|
||||
if (tag is not null)
|
||||
def.Tag = tag;
|
||||
return ordersClient.TryEnterOrderAsync(def, price, quantity);
|
||||
}
|
||||
|
||||
public Task<Response> CreateLimitOrder(string account, uint securityId, Side side, double quantity, double price, string? tag) {
|
||||
var def = buildOrder(account, securityId, limitOrderPool);
|
||||
def.Side = side;
|
||||
def.Tag = tag;
|
||||
if (tag is not null)
|
||||
def.Tag = tag;
|
||||
return ordersClient.TryEnterOrderAsync(def, price, quantity);
|
||||
}
|
||||
|
||||
public Task<Response> CreateMarketOrder(string account, Venue venue, string contract, Side side, double quantity, string? tag) {
|
||||
var def = buildOrder(account, venue, contract, marketOrderPool);
|
||||
def.Side = side;
|
||||
def.Tag = tag;
|
||||
if (tag is not null)
|
||||
def.Tag = tag;
|
||||
return ordersClient.TryEnterOrderAsync(def, double.NaN, quantity);
|
||||
}
|
||||
|
||||
public Task<Response> CreateMarketOrder(string account, uint securityId, Side side, double quantity, string? tag) {
|
||||
var def = buildOrder(account, securityId, marketOrderPool);
|
||||
def.Side = side;
|
||||
def.Tag = tag;
|
||||
if (tag is not null)
|
||||
def.Tag = tag;
|
||||
return ordersClient.TryEnterOrderAsync(def, double.NaN, quantity);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
# source: tools/cpp_helper/generate-cpps.ps1
|
||||
#
|
||||
|
||||
CppConfig
|
||||
{
|
||||
value
|
||||
CppConfig
|
||||
{
|
||||
value
|
||||
{
|
||||
cpp_entry { key: "0A" value: 100 }
|
||||
cpp_entry { key: "0B" value: 100 }
|
||||
@@ -537,6 +537,31 @@ CppConfig
|
||||
cpp_entry { key: "EQ1" value: 50 }
|
||||
cpp_entry { key: "ERL" value: 5 }
|
||||
cpp_entry { key: "ES" value: 50 }
|
||||
cpp_entry { key: "E1A" value: 50}
|
||||
cpp_entry { key: "E1B" value: 50}
|
||||
cpp_entry { key: "E1C" value: 50}
|
||||
cpp_entry { key: "E1D" value: 50}
|
||||
cpp_entry { key: "E2A" value: 50}
|
||||
cpp_entry { key: "E2B" value: 50}
|
||||
cpp_entry { key: "E2C" value: 50}
|
||||
cpp_entry { key: "E2D" value: 50}
|
||||
cpp_entry { key: "E3A" value: 50}
|
||||
cpp_entry { key: "E3B" value: 50}
|
||||
cpp_entry { key: "E3C" value: 50}
|
||||
cpp_entry { key: "E3D" value: 50}
|
||||
cpp_entry { key: "E4A" value: 50}
|
||||
cpp_entry { key: "E4B" value: 50}
|
||||
cpp_entry { key: "E4C" value: 50}
|
||||
cpp_entry { key: "E4D" value: 50}
|
||||
cpp_entry { key: "E5A" value: 50}
|
||||
cpp_entry { key: "E5B" value: 50}
|
||||
cpp_entry { key: "E5C" value: 50}
|
||||
cpp_entry { key: "E5D" value: 50}
|
||||
cpp_entry { key: "EW" value: 50}
|
||||
cpp_entry { key: "EW1" value: 50}
|
||||
cpp_entry { key: "EW2" value: 50}
|
||||
cpp_entry { key: "EW3" value: 50}
|
||||
cpp_entry { key: "EW4" value: 50}
|
||||
cpp_entry { key: "ES1" value: 50 }
|
||||
cpp_entry { key: "ES2" value: 50 }
|
||||
cpp_entry { key: "ESB" value: 1000 }
|
||||
@@ -1001,6 +1026,31 @@ CppConfig
|
||||
cpp_entry { key: "NOO" value: 8900 }
|
||||
cpp_entry { key: "NPG" value: 2500 }
|
||||
cpp_entry { key: "NQ" value: 20 }
|
||||
cpp_entry {key: "Q1A" value: 20}
|
||||
cpp_entry {key: "Q1B" value: 20}
|
||||
cpp_entry {key: "Q1C" value: 20}
|
||||
cpp_entry {key: "Q1D" value: 20}
|
||||
cpp_entry {key: "Q2A" value: 20}
|
||||
cpp_entry {key: "Q2B" value: 20}
|
||||
cpp_entry {key: "Q2C" value: 20}
|
||||
cpp_entry {key: "Q2D" value: 20}
|
||||
cpp_entry {key: "Q3A" value: 20}
|
||||
cpp_entry {key: "Q3B" value: 20}
|
||||
cpp_entry {key: "Q3C" value: 20}
|
||||
cpp_entry {key: "Q3D" value: 20}
|
||||
cpp_entry {key: "Q4A" value: 20}
|
||||
cpp_entry {key: "Q4B" value: 20}
|
||||
cpp_entry {key: "Q4C" value: 20}
|
||||
cpp_entry {key: "Q4D" value: 20}
|
||||
cpp_entry {key: "Q5A" value: 20}
|
||||
cpp_entry {key: "Q5B" value: 20}
|
||||
cpp_entry {key: "Q5C" value: 20}
|
||||
cpp_entry {key: "Q5D" value: 20}
|
||||
cpp_entry {key: "QNE" value: 20}
|
||||
cpp_entry {key: "QN1" value: 20}
|
||||
cpp_entry {key: "QN2" value: 20}
|
||||
cpp_entry {key: "QN3" value: 20}
|
||||
cpp_entry {key: "QN4" value: 20}
|
||||
cpp_entry { key: "NQQ" value: 20 }
|
||||
cpp_entry { key: "NQT" value: 20 }
|
||||
cpp_entry { key: "NR" value: 2500 }
|
||||
@@ -1506,12 +1556,12 @@ CppConfig
|
||||
cpp_entry { key: "ZT" value: 2000 }
|
||||
cpp_entry { key: "ZW" value: 50 }
|
||||
cpp_entry { key: "ZWT" value: 50 }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CmeSymbolMics
|
||||
{
|
||||
value
|
||||
CmeSymbolMics
|
||||
{
|
||||
value
|
||||
{
|
||||
cme_mic { key: "0A" value: NYMEX }
|
||||
cme_mic { key: "0B" value: NYMEX }
|
||||
@@ -3012,5 +3062,5 @@ CmeSymbolMics
|
||||
cme_mic { key: "ZT" value: CBT }
|
||||
cme_mic { key: "ZW" value: CBT }
|
||||
cme_mic { key: "ZWT" value: CBT }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -30,5 +30,6 @@ OrdermanCfg {
|
||||
poll: false
|
||||
hosted_actor: "*"
|
||||
}
|
||||
fallback_cust_order_handling_inst: "Y"
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "spark/orderman/orderman_utils/orderman_common.h"
|
||||
#include "spark/tracing/bts_trace.h"
|
||||
#include "spark/utils/TimeStamp.h"
|
||||
#include "spark/utils/bts_assert.h"
|
||||
#include "spark/utils/bts_chrono.h"
|
||||
#include "spark/utils/datetime.h"
|
||||
#include "spark/utils/thread_manager.h"
|
||||
@@ -97,7 +98,8 @@ struct CoreGateway::PImpl {
|
||||
: cfg(cfg), observer(observer), make_connection(conn_factory),
|
||||
make_store(store_factory), state(State::OFF), start_of_pause(),
|
||||
session_info(), event_queue(), timer_thread(), destroy(false),
|
||||
is_on(false), has_replayed(false), send_batch(), recv_batch(),
|
||||
is_on(false), has_replayed(false), gave_up_permanently(false),
|
||||
send_batch(), recv_batch(),
|
||||
connection_attempts(0), perf_log(l) {
|
||||
send_batch.reserve(1024);
|
||||
recv_batch.reserve(1024);
|
||||
@@ -116,6 +118,7 @@ struct CoreGateway::PImpl {
|
||||
std::atomic<bool> destroy;
|
||||
bool is_on;
|
||||
bool has_replayed;
|
||||
bool gave_up_permanently;
|
||||
std::vector<EventData> send_batch;
|
||||
std::vector<EventData> recv_batch;
|
||||
uint32_t connection_attempts;
|
||||
@@ -329,6 +332,11 @@ void CoreGateway::sync_session_ready(EventData const &) {
|
||||
case State::WSESSION_TERMINATE:
|
||||
break;
|
||||
case State::CONNECTING:
|
||||
LOG(Jetfix, Info,
|
||||
"Jetfix session {} is now READY after socket connect. attempts={} "
|
||||
"max_attempts={}",
|
||||
me->cfg.name(), me->connection_attempts,
|
||||
me->cfg.max_connection_attempts());
|
||||
transition(State::READY);
|
||||
me->observer.ready();
|
||||
break;
|
||||
@@ -346,10 +354,18 @@ void CoreGateway::sync_session_terminated(EventData const &) {
|
||||
break;
|
||||
|
||||
case State::WSESSION_TERMINATE:
|
||||
LOG(Jetfix, Warn,
|
||||
"Session terminated callback received for {} while waiting for "
|
||||
"reader disconnect. attempts_so_far={}",
|
||||
me->cfg.name(), me->connection_attempts);
|
||||
pause_or_shutdown();
|
||||
break;
|
||||
|
||||
case State::READY:
|
||||
LOG(Jetfix, Warn,
|
||||
"Session terminated for {} from READY. Closing socket and waiting "
|
||||
"for reader disconnect.",
|
||||
me->cfg.name());
|
||||
me->session_info->session.reset();
|
||||
me->session_info->connection->shutdown();
|
||||
transition(State::WREADER_DISCONNECT);
|
||||
@@ -357,6 +373,10 @@ void CoreGateway::sync_session_terminated(EventData const &) {
|
||||
break;
|
||||
|
||||
case State::CONNECTING:
|
||||
LOG(Jetfix, Warn,
|
||||
"Session terminated for {} during CONNECTING before READY. "
|
||||
"Closing socket and waiting for reader disconnect.",
|
||||
me->cfg.name());
|
||||
me->session_info->session.reset();
|
||||
me->session_info->connection->shutdown();
|
||||
transition(State::WREADER_DISCONNECT);
|
||||
@@ -376,17 +396,28 @@ void CoreGateway::sync_reader_disconnected(EventData const &) {
|
||||
break;
|
||||
|
||||
case State::READY:
|
||||
LOG(Jetfix, Warn,
|
||||
"Socket reader disconnected for {} from READY. "
|
||||
"The exchange or network closed the TCP session.",
|
||||
me->cfg.name());
|
||||
me->session_info->session.reset();
|
||||
me->observer.disconnect();
|
||||
transition(State::WSESSION_TERMINATE);
|
||||
break;
|
||||
|
||||
case State::CONNECTING:
|
||||
LOG(Jetfix, Warn,
|
||||
"Socket reader disconnected for {} during CONNECTING before READY. "
|
||||
"The TCP socket connected, but the session never completed logon.",
|
||||
me->cfg.name());
|
||||
me->session_info->session.reset();
|
||||
transition(State::WSESSION_TERMINATE);
|
||||
break;
|
||||
|
||||
case State::WREADER_DISCONNECT:
|
||||
LOG(Jetfix, Info,
|
||||
"Reader disconnect completed for {} after session shutdown.",
|
||||
me->cfg.name());
|
||||
pause_or_shutdown();
|
||||
break;
|
||||
|
||||
@@ -430,27 +461,46 @@ void CoreGateway::sync_in_msg_sequenced(EventData const &ev) {
|
||||
bts_assert(false);
|
||||
}
|
||||
}
|
||||
|
||||
void CoreGateway::sync_time(EventData const &ev) {
|
||||
switch (me->state) {
|
||||
case State::OFF:
|
||||
break;
|
||||
case State::PAUSED:
|
||||
if (me->gave_up_permanently)
|
||||
break;
|
||||
|
||||
if (datetime::is_at_least_secs_old(
|
||||
me->start_of_pause, me->cfg.seconds_to_pause())) {
|
||||
LOG(Jetfix, Info, "Pause period ended for jetfix connection {}",
|
||||
me->cfg.name());
|
||||
LOG(Jetfix, Info,
|
||||
"Pause ended for jetfix connection {}. pause_secs={} "
|
||||
"attempts_so_far={} max_attempts={} host={}:{} segment={} "
|
||||
"session_window={}-{} {}-{} replayed={}",
|
||||
me->cfg.name(), me->cfg.seconds_to_pause(),
|
||||
me->connection_attempts, me->cfg.max_connection_attempts(),
|
||||
me->cfg.socket_connect_host_ip(), me->cfg.socket_connect_port(),
|
||||
me->cfg.cme_market_segment_id(), me->cfg.start_time(),
|
||||
me->cfg.end_time(), me->cfg.start_day(), me->cfg.end_day(),
|
||||
me->has_replayed);
|
||||
me->session_info = std::make_unique<SessionInfo>();
|
||||
|
||||
me->session_info->store.reset(me->make_store(me->cfg));
|
||||
|
||||
if (me->session_info->store->session_active()) {
|
||||
auto const session_active = me->session_info->store->session_active();
|
||||
LOG(Jetfix, Info,
|
||||
"Loaded FIX store for {}. session_active={} next_attempt={} "
|
||||
"max_attempts={}",
|
||||
me->cfg.name(), session_active, me->connection_attempts + 1,
|
||||
me->cfg.max_connection_attempts());
|
||||
if (session_active) {
|
||||
me->connection_attempts++;
|
||||
|
||||
LOG(Jetfix, Info,
|
||||
"Attempting socket connect for jetfix connection {}. "
|
||||
"attempt={} max_attempts={}",
|
||||
me->cfg.name(), me->connection_attempts,
|
||||
me->cfg.max_connection_attempts());
|
||||
if (!me->has_replayed) {
|
||||
auto msgs_to_replay = me->session_info->store->replay();
|
||||
LOG(Jetfix, Warn, "Replaying {} FIX msgs",
|
||||
msgs_to_replay.size());
|
||||
LOG(Jetfix, Warn,
|
||||
"Replaying {} FIX msgs for {} before reconnect",
|
||||
msgs_to_replay.size(), me->cfg.name());
|
||||
me->observer.replay(msgs_to_replay);
|
||||
me->has_replayed = true;
|
||||
}
|
||||
@@ -458,14 +508,20 @@ void CoreGateway::sync_time(EventData const &ev) {
|
||||
if (me->connection_attempts > me->cfg.max_connection_attempts()) {
|
||||
me->session_info.reset();
|
||||
me->start_of_pause = datetime::now();
|
||||
me->gave_up_permanently = true;
|
||||
LOG(Jetfix, Error,
|
||||
"Failed to connect to exchange gateway {} too many "
|
||||
"times. Giving up permanently. You must bounce "
|
||||
"the server to recover.",
|
||||
me->cfg.name());
|
||||
"times. Giving up permanently. attempts={} "
|
||||
"max_attempts={} pause_secs={} host={}:{} segment={}. "
|
||||
"You must bounce the server to recover.",
|
||||
me->cfg.name(), me->connection_attempts,
|
||||
me->cfg.max_connection_attempts(),
|
||||
me->cfg.seconds_to_pause(),
|
||||
me->cfg.socket_connect_host_ip(),
|
||||
me->cfg.socket_connect_port(),
|
||||
me->cfg.cme_market_segment_id());
|
||||
break;
|
||||
}
|
||||
|
||||
me->session_info->connection.reset(me->make_connection(me->cfg));
|
||||
LOG(Jetfix, Warn, "Trying to connect to exchange for {} ({}/{})",
|
||||
me->cfg.name(), me->connection_attempts,
|
||||
@@ -489,11 +545,18 @@ void CoreGateway::sync_time(EventData const &ev) {
|
||||
me->session_info.reset();
|
||||
me->start_of_pause = datetime::now();
|
||||
LOG(Jetfix, Warn,
|
||||
"Failed to connect to exchange for {}. ({}/{}) ",
|
||||
"Failed to connect to exchange for {}. ({}/{}) "
|
||||
"Will retry after {} seconds.",
|
||||
me->cfg.name(), me->connection_attempts,
|
||||
me->cfg.max_connection_attempts());
|
||||
me->cfg.max_connection_attempts(),
|
||||
me->cfg.seconds_to_pause());
|
||||
}
|
||||
} else {
|
||||
LOG(Jetfix, Warn,
|
||||
"FIX store for {} is not active yet. Deferring reconnect. "
|
||||
"session_window={}-{} {}-{}",
|
||||
me->cfg.name(), me->cfg.start_time(), me->cfg.end_time(),
|
||||
me->cfg.start_day(), me->cfg.end_day());
|
||||
me->session_info.reset();
|
||||
me->start_of_pause = datetime::now();
|
||||
}
|
||||
@@ -516,6 +579,12 @@ void CoreGateway::pause_or_shutdown() {
|
||||
|
||||
if (me->is_on) {
|
||||
me->start_of_pause = datetime::now();
|
||||
LOG(Jetfix, Info,
|
||||
"Pausing jetfix gateway {}. pause_secs={} attempts_so_far={} "
|
||||
"max_attempts={} gave_up_permanently={}",
|
||||
me->cfg.name(), me->cfg.seconds_to_pause(),
|
||||
me->connection_attempts, me->cfg.max_connection_attempts(),
|
||||
me->gave_up_permanently);
|
||||
transition(State::PAUSED);
|
||||
} else
|
||||
transition(State::OFF);
|
||||
|
||||
@@ -114,6 +114,15 @@ void Session::start() {
|
||||
me->start_of_logon = me->now();
|
||||
me->last_seq_num = me->begin_of_this_session;
|
||||
me->last_seq_num_processed = me->store.last_seq_num_processed();
|
||||
LOG(Jetfix, Info,
|
||||
"Starting jetfix session {}. sender_compid={} sender_subid={} "
|
||||
"target_compid={} target_subid={} secure_logon={} raw_data_len={} "
|
||||
"user_name_present={} seq_num={} last_processed={}",
|
||||
me->cfg.name(), me->cfg.sender_compid(), me->cfg.sender_subid(),
|
||||
me->cfg.target_compid(), me->cfg.target_subid(),
|
||||
me->cfg.use_cme_secure_logon(), me->cfg.raw_data().size(),
|
||||
!me->cfg.user_name().empty(), me->last_seq_num + 1,
|
||||
me->last_seq_num_processed);
|
||||
transition(State::WLOGON);
|
||||
internal_send(make_logon(
|
||||
me->last_seq_num + 1, me->last_seq_num_processed, *me->current_time,
|
||||
|
||||
@@ -47,7 +47,7 @@ IL3GW::IL3GW(
|
||||
: _config(conf), _x_state(State::INIT), _buffer(buffer),
|
||||
_on_state_change([](auto) {}), _on_exe_report([](auto) {}),
|
||||
_on_session_change([](auto) {}), _connection(con), _session(session),
|
||||
_msg_count(0), _time(), _pool(), _exe_parser(cfg, db), _retransmit() {
|
||||
_msg_count(0), _time(), _pool("IL3GW_rprts", 1024*2, 100), _exe_parser(cfg, db), _retransmit() {
|
||||
LOG(OrderMan, Info,
|
||||
"IL3GW::IL3GW cme_session: {} uuid: {} to_cme: {} from_cme: {}",
|
||||
_config.cme_session, _session.uuid, _session.to_cme, _session.from_cme);
|
||||
@@ -179,15 +179,10 @@ uint64_t IL3GW::send_party_details(const api::orderman::RoutingRecord &route) {
|
||||
using namespace iLinkBinary;
|
||||
|
||||
auto msg = _buffer.frame<PartyDetailsDefinitionRequest518>(
|
||||
// 2 repeating group header.
|
||||
// 1 for party details and 1 for trade reg
|
||||
// This seems unsafe but the api doesn't seem to want you to know how to
|
||||
// size buffers ahead of time
|
||||
2 * PartyDetailsDefinitionRequest518::NoPartyDetails::sbeHeaderSize() +
|
||||
// N * size of each block
|
||||
3 * PartyDetailsDefinitionRequest518::NoPartyDetails::sbeBlockLength() +
|
||||
0 * PartyDetailsDefinitionRequest518::NoTrdRegPublications::
|
||||
sbeBlockLength());
|
||||
// Use the generated helper so group sizing stays in sync with the
|
||||
// active schema when CME updates the template layout.
|
||||
PartyDetailsDefinitionRequest518::computeLength(3, 0) -
|
||||
PartyDetailsDefinitionRequest518::sbeBlockLength());
|
||||
msg.partyDetailsListReqID(0);
|
||||
msg.sendingTimeEpoch(_time.now());
|
||||
msg.listUpdateAction(ListUpdAct::Add);
|
||||
@@ -637,8 +632,13 @@ void IL3GW::handle(
|
||||
handle_common(msg);
|
||||
}
|
||||
void IL3GW::handle(const iLinkBinary::BusinessReject521 &msg) {
|
||||
LOG(iLink3, Error, "Business Reject: {} '{}'.", msg.businessRejectReason(),
|
||||
string{translate_business_reject_reason(msg.businessRejectReason())});
|
||||
LOG(iLink3, Error,
|
||||
"Business Reject: reason={} '{}' ref_seq={} ref_tag={} ref_msg_type='{}' "
|
||||
"ref_id={} text='{}'",
|
||||
msg.businessRejectReason(),
|
||||
string{translate_business_reject_reason(msg.businessRejectReason())},
|
||||
msg.refSeqNum(), msg.refTagID(), msg.getRefMsgTypeAsStringView(),
|
||||
msg.businessRejectRefID(), msg.getTextAsStringView());
|
||||
handle_common(msg);
|
||||
// A business reject can de-sync the sequence number because it rejects
|
||||
// the sequence number of the rejected message. Send a sequence message
|
||||
|
||||
@@ -70,9 +70,35 @@ bool IL3Parser::parse_common(const T &msg, ExecutionReport *data) {
|
||||
data->ice_cl_ord_id = 0;
|
||||
data->ice_company_id = 0;
|
||||
data->cfg = cfg;
|
||||
data->fill_agg_flag = api::orderman::PASSIVE;
|
||||
return true;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void IL3Parser::parse_fill_aggressor(const T &, ExecutionReport *data) {
|
||||
data->fill_agg_flag = api::orderman::PASSIVE;
|
||||
}
|
||||
|
||||
template <>
|
||||
void IL3Parser::parse_fill_aggressor(
|
||||
const iLinkBinary::ExecutionReportTradeOutright525 &msg,
|
||||
ExecutionReport *data) {
|
||||
data->fill_agg_flag =
|
||||
msg.aggressorIndicator() == iLinkBinary::BooleanFlag::True
|
||||
? api::orderman::AGGRESSOR
|
||||
: api::orderman::PASSIVE;
|
||||
}
|
||||
|
||||
template <>
|
||||
void IL3Parser::parse_fill_aggressor(
|
||||
const iLinkBinary::ExecutionReportTradeSpread526 &msg,
|
||||
ExecutionReport *data) {
|
||||
data->fill_agg_flag =
|
||||
msg.aggressorIndicator() == iLinkBinary::BooleanFlag::True
|
||||
? api::orderman::AGGRESSOR
|
||||
: api::orderman::PASSIVE;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void IL3Parser::parse_trade(const T &msg, ExecutionReport *data) {
|
||||
data->exchange_fill_id->copy_from(msg.getExecIDAsStringView());
|
||||
@@ -103,6 +129,7 @@ void IL3Parser::parse_trade(const T &msg, ExecutionReport *data) {
|
||||
Price{price.mantissa() * md::pow10(price.exponent())});
|
||||
}
|
||||
data->filled_quantity = Quantity{msg.cumQty()};
|
||||
parse_fill_aggressor(msg, data);
|
||||
}
|
||||
|
||||
bool IL3Parser::has_account() const {
|
||||
|
||||
@@ -47,6 +47,8 @@ class IL3Parser {
|
||||
private:
|
||||
template <class T> bool parse_common(const T &, ExecutionReport *);
|
||||
template <class T> void parse_trade(const T &, ExecutionReport *);
|
||||
template <class T>
|
||||
void parse_fill_aggressor(const T &, ExecutionReport *);
|
||||
};
|
||||
|
||||
bool parse_report(const std::string &, IL3Parser &, ExecutionReport *);
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(330);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(521);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
{
|
||||
GiveUp = static_cast<char>(71),
|
||||
SGXoffset = static_cast<char>(83),
|
||||
NULL_VALUE = static_cast<char>(0x00)
|
||||
NULL_VALUE = static_cast<char>(0)
|
||||
};
|
||||
|
||||
static CmtaGiveUpCD::Value get(const char value)
|
||||
@@ -41,7 +41,7 @@ public:
|
||||
{
|
||||
case static_cast<char>(71): return GiveUp;
|
||||
case static_cast<char>(83): return SGXoffset;
|
||||
case static_cast<char>(0x00): return NULL_VALUE;
|
||||
case static_cast<char>(0): return NULL_VALUE;
|
||||
}
|
||||
|
||||
throw std::runtime_error("unknown value for enum CmtaGiveUpCD [E103]");
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
/* Generated SBE (Simple Binary Encoding) message codec */
|
||||
#ifndef _ILINKBINARY_CROSSTYPEENUM_H_
|
||||
#define _ILINKBINARY_CROSSTYPEENUM_H_
|
||||
|
||||
#if !defined(__STDC_LIMIT_MACROS)
|
||||
# define __STDC_LIMIT_MACROS 1
|
||||
#endif
|
||||
|
||||
#include <cstdint>
|
||||
#include <iomanip>
|
||||
#include <limits>
|
||||
#include <ostream>
|
||||
#include <stdexcept>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
|
||||
#define SBE_NULLVALUE_INT8 (std::numeric_limits<std::int8_t>::min)()
|
||||
#define SBE_NULLVALUE_INT16 (std::numeric_limits<std::int16_t>::min)()
|
||||
#define SBE_NULLVALUE_INT32 (std::numeric_limits<std::int32_t>::min)()
|
||||
#define SBE_NULLVALUE_INT64 (std::numeric_limits<std::int64_t>::min)()
|
||||
#define SBE_NULLVALUE_UINT8 (std::numeric_limits<std::uint8_t>::max)()
|
||||
#define SBE_NULLVALUE_UINT16 (std::numeric_limits<std::uint16_t>::max)()
|
||||
#define SBE_NULLVALUE_UINT32 (std::numeric_limits<std::uint32_t>::max)()
|
||||
#define SBE_NULLVALUE_UINT64 (std::numeric_limits<std::uint64_t>::max)()
|
||||
|
||||
namespace iLinkBinary {
|
||||
|
||||
class CrossTypeEnum
|
||||
{
|
||||
public:
|
||||
enum Value
|
||||
{
|
||||
Cross = static_cast<std::uint8_t>(3),
|
||||
RCross = static_cast<std::uint8_t>(20),
|
||||
CCross = static_cast<std::uint8_t>(21),
|
||||
NULL_VALUE = static_cast<std::uint8_t>(255)
|
||||
};
|
||||
|
||||
static CrossTypeEnum::Value get(const std::uint8_t value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case static_cast<std::uint8_t>(3): return Cross;
|
||||
case static_cast<std::uint8_t>(20): return RCross;
|
||||
case static_cast<std::uint8_t>(21): return CCross;
|
||||
case static_cast<std::uint8_t>(255): return NULL_VALUE;
|
||||
}
|
||||
|
||||
throw std::runtime_error("unknown value for enum CrossTypeEnum [E103]");
|
||||
}
|
||||
|
||||
static const char *c_str(const CrossTypeEnum::Value value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case Cross: return "Cross";
|
||||
case RCross: return "RCross";
|
||||
case CCross: return "CCross";
|
||||
case NULL_VALUE: return "NULL_VALUE";
|
||||
}
|
||||
|
||||
throw std::runtime_error("unknown value for enum CrossTypeEnum [E103]:");
|
||||
}
|
||||
|
||||
template<typename CharT, typename Traits>
|
||||
friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
std::basic_ostream<CharT, Traits> &os, CrossTypeEnum::Value m)
|
||||
{
|
||||
return os << CrossTypeEnum::c_str(m);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -36,7 +36,7 @@ public:
|
||||
AlgoEngine = static_cast<char>(72),
|
||||
DeskElectronic = static_cast<char>(87),
|
||||
ClientElectronic = static_cast<char>(89),
|
||||
NULL_VALUE = static_cast<char>(48)
|
||||
NULL_VALUE = static_cast<char>(0)
|
||||
};
|
||||
|
||||
static CustOrdHandlInst::Value get(const char value)
|
||||
@@ -49,7 +49,7 @@ public:
|
||||
case static_cast<char>(72): return AlgoEngine;
|
||||
case static_cast<char>(87): return DeskElectronic;
|
||||
case static_cast<char>(89): return ClientElectronic;
|
||||
case static_cast<char>(48): return NULL_VALUE;
|
||||
case static_cast<char>(0): return NULL_VALUE;
|
||||
}
|
||||
|
||||
throw std::runtime_error("unknown value for enum CustOrdHandlInst [E103]");
|
||||
|
||||
@@ -194,7 +194,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *lengthMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
|
||||
@@ -38,7 +38,7 @@ public:
|
||||
CalculationDifference = static_cast<char>(70),
|
||||
NoMatchingExecutionReport = static_cast<char>(71),
|
||||
Other = static_cast<char>(90),
|
||||
NULL_VALUE = static_cast<char>(48)
|
||||
NULL_VALUE = static_cast<char>(0)
|
||||
};
|
||||
|
||||
static DKReason::Value get(const char value)
|
||||
@@ -53,7 +53,7 @@ public:
|
||||
case static_cast<char>(70): return CalculationDifference;
|
||||
case static_cast<char>(71): return NoMatchingExecutionReport;
|
||||
case static_cast<char>(90): return Other;
|
||||
case static_cast<char>(48): return NULL_VALUE;
|
||||
case static_cast<char>(0): return NULL_VALUE;
|
||||
}
|
||||
|
||||
throw std::runtime_error("unknown value for enum DKReason [E103]");
|
||||
|
||||
@@ -194,7 +194,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *mantissaMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
|
||||
@@ -194,7 +194,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *mantissaMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
@@ -213,7 +213,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t mantissaSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 6;
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool mantissaInActingVersion() SBE_NOEXCEPT
|
||||
@@ -255,7 +255,7 @@ public:
|
||||
|
||||
SBE_NODISCARD std::int64_t mantissa() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 6)
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return INT64_C(9223372036854775807);
|
||||
}
|
||||
@@ -288,7 +288,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t exponentSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 6;
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool exponentInActingVersion() SBE_NOEXCEPT
|
||||
@@ -330,7 +330,7 @@ public:
|
||||
|
||||
SBE_NODISCARD std::int8_t exponent() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 6)
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return static_cast<std::int8_t>(127);
|
||||
}
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(132);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(503);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -165,10 +167,10 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(38);
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(39);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(504);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -222,7 +224,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeBlockLength() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(38);
|
||||
return static_cast<std::uint16_t>(39);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t sbeBlockAndHeaderLength() SBE_NOEXCEPT
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
@@ -968,6 +970,82 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *EnvironmentIndicatorMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::PRESENCE: return "optional";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t environmentIndicatorId() SBE_NOEXCEPT
|
||||
{
|
||||
return 39032;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t environmentIndicatorSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool environmentIndicatorInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= environmentIndicatorSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t environmentIndicatorEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 38;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorNullValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(255);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorMinValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(0);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorMaxValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(254);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::size_t environmentIndicatorEncodingLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::uint8_t environmentIndicator() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return static_cast<std::uint8_t>(255);
|
||||
}
|
||||
|
||||
std::uint8_t val;
|
||||
std::memcpy(&val, m_buffer + m_offset + 38, sizeof(std::uint8_t));
|
||||
return (val);
|
||||
}
|
||||
|
||||
EstablishmentAck504 &environmentIndicator(const std::uint8_t value) SBE_NOEXCEPT
|
||||
{
|
||||
std::uint8_t val = (value);
|
||||
std::memcpy(m_buffer + m_offset + 38, &val, sizeof(std::uint8_t));
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename CharT, typename Traits>
|
||||
friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
std::basic_ostream<CharT, Traits> &builder, EstablishmentAck504 _writer)
|
||||
@@ -1020,6 +1098,10 @@ friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
builder << R"("SplitMsg": )";
|
||||
builder << '"' << writer.splitMsg() << '"';
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("EnvironmentIndicator": )";
|
||||
builder << +writer.environmentIndicator();
|
||||
|
||||
builder << '}';
|
||||
|
||||
return builder;
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -165,10 +167,10 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(72);
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(73);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(505);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -222,7 +224,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeBlockLength() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(72);
|
||||
return static_cast<std::uint16_t>(73);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t sbeBlockAndHeaderLength() SBE_NOEXCEPT
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
@@ -961,6 +963,82 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *EnvironmentIndicatorMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::PRESENCE: return "optional";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t environmentIndicatorId() SBE_NOEXCEPT
|
||||
{
|
||||
return 39032;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t environmentIndicatorSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool environmentIndicatorInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= environmentIndicatorSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t environmentIndicatorEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 72;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorNullValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(255);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorMinValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(0);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorMaxValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(254);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::size_t environmentIndicatorEncodingLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::uint8_t environmentIndicator() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return static_cast<std::uint8_t>(255);
|
||||
}
|
||||
|
||||
std::uint8_t val;
|
||||
std::memcpy(&val, m_buffer + m_offset + 72, sizeof(std::uint8_t));
|
||||
return (val);
|
||||
}
|
||||
|
||||
EstablishmentReject505 &environmentIndicator(const std::uint8_t value) SBE_NOEXCEPT
|
||||
{
|
||||
std::uint8_t val = (value);
|
||||
std::memcpy(m_buffer + m_offset + 72, &val, sizeof(std::uint8_t));
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename CharT, typename Traits>
|
||||
friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
std::basic_ostream<CharT, Traits> &builder, EstablishmentReject505 _writer)
|
||||
@@ -1006,6 +1084,10 @@ friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
builder << R"("SplitMsg": )";
|
||||
builder << '"' << writer.splitMsg() << '"';
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("EnvironmentIndicator": )";
|
||||
builder << +writer.environmentIndicator();
|
||||
|
||||
builder << '}';
|
||||
|
||||
return builder;
|
||||
|
||||
@@ -194,7 +194,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
ExecInst &clear()
|
||||
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
{
|
||||
Aggressive = static_cast<char>(65),
|
||||
Passive = static_cast<char>(80),
|
||||
NULL_VALUE = static_cast<char>(0x00)
|
||||
NULL_VALUE = static_cast<char>(0)
|
||||
};
|
||||
|
||||
static ExecMode::Value get(const char value)
|
||||
@@ -41,7 +41,7 @@ public:
|
||||
{
|
||||
case static_cast<char>(65): return Aggressive;
|
||||
case static_cast<char>(80): return Passive;
|
||||
case static_cast<char>(0x00): return NULL_VALUE;
|
||||
case static_cast<char>(0): return NULL_VALUE;
|
||||
}
|
||||
|
||||
throw std::runtime_error("unknown value for enum ExecMode [E103]");
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(101);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(539);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(247);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(534);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(219);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(524);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(226);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(531);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(226);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(522);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(219);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(564);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(196);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(565);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(483);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(523);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(513);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(532);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
+326
-8
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -165,10 +167,10 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(222);
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(266);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(548);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -222,7 +224,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeBlockLength() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(222);
|
||||
return static_cast<std::uint16_t>(266);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t sbeBlockAndHeaderLength() SBE_NOEXCEPT
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
@@ -3110,7 +3112,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -3157,7 +3159,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -3247,6 +3249,313 @@ public:
|
||||
return m_benchmarkPrice;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *MDTradeEntryIDMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t mDTradeEntryIDId() SBE_NOEXCEPT
|
||||
{
|
||||
return 37711;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t mDTradeEntryIDSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool mDTradeEntryIDInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= mDTradeEntryIDSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t mDTradeEntryIDEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 222;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint32_t mDTradeEntryIDNullValue() SBE_NOEXCEPT
|
||||
{
|
||||
return SBE_NULLVALUE_UINT32;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint32_t mDTradeEntryIDMinValue() SBE_NOEXCEPT
|
||||
{
|
||||
return UINT32_C(0x0);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint32_t mDTradeEntryIDMaxValue() SBE_NOEXCEPT
|
||||
{
|
||||
return UINT32_C(0xfffffffe);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::size_t mDTradeEntryIDEncodingLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::uint32_t mDTradeEntryID() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return UINT32_C(0xffffffff);
|
||||
}
|
||||
|
||||
std::uint32_t val;
|
||||
std::memcpy(&val, m_buffer + m_offset + 222, sizeof(std::uint32_t));
|
||||
return SBE_LITTLE_ENDIAN_ENCODE_32(val);
|
||||
}
|
||||
|
||||
ExecutionReportTradeAddendumOutright548 &mDTradeEntryID(const std::uint32_t value) SBE_NOEXCEPT
|
||||
{
|
||||
std::uint32_t val = SBE_LITTLE_ENDIAN_ENCODE_32(value);
|
||||
std::memcpy(m_buffer + m_offset + 222, &val, sizeof(std::uint32_t));
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *ExecRefIDMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "String";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t execRefIDId() SBE_NOEXCEPT
|
||||
{
|
||||
return 19;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t execRefIDSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool execRefIDInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= execRefIDSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t execRefIDEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 226;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR char execRefIDNullValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<char>(0);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR char execRefIDMinValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<char>(32);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR char execRefIDMaxValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<char>(126);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::size_t execRefIDEncodingLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 40;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint64_t execRefIDLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 40;
|
||||
}
|
||||
|
||||
SBE_NODISCARD const char *execRefID() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return m_buffer + m_offset + 226;
|
||||
}
|
||||
|
||||
SBE_NODISCARD char *execRefID() SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return m_buffer + m_offset + 226;
|
||||
}
|
||||
|
||||
SBE_NODISCARD char execRefID(const std::uint64_t index) const
|
||||
{
|
||||
if (index >= 40)
|
||||
{
|
||||
throw std::runtime_error("index out of range for execRefID [E104]");
|
||||
}
|
||||
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return static_cast<char>(0);
|
||||
}
|
||||
|
||||
char val;
|
||||
std::memcpy(&val, m_buffer + m_offset + 226 + (index * 1), sizeof(char));
|
||||
return (val);
|
||||
}
|
||||
|
||||
ExecutionReportTradeAddendumOutright548 &execRefID(const std::uint64_t index, const char value)
|
||||
{
|
||||
if (index >= 40)
|
||||
{
|
||||
throw std::runtime_error("index out of range for execRefID [E105]");
|
||||
}
|
||||
|
||||
char val = (value);
|
||||
std::memcpy(m_buffer + m_offset + 226 + (index * 1), &val, sizeof(char));
|
||||
return *this;
|
||||
}
|
||||
|
||||
std::uint64_t getExecRefID(char *const dst, const std::uint64_t length) const
|
||||
{
|
||||
if (length > 40)
|
||||
{
|
||||
throw std::runtime_error("length too large for getExecRefID [E106]");
|
||||
}
|
||||
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::memcpy(dst, m_buffer + m_offset + 226, sizeof(char) * static_cast<std::size_t>(length));
|
||||
return length;
|
||||
}
|
||||
|
||||
ExecutionReportTradeAddendumOutright548 &putExecRefID(const char *const src) SBE_NOEXCEPT
|
||||
{
|
||||
std::memcpy(m_buffer + m_offset + 226, src, sizeof(char) * 40);
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::string getExecRefIDAsString() const
|
||||
{
|
||||
const char *buffer = m_buffer + m_offset + 226;
|
||||
std::size_t length = 0;
|
||||
|
||||
for (; length < 40 && *(buffer + length) != '\0'; ++length);
|
||||
std::string result(buffer, length);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string getExecRefIDAsJsonEscapedString()
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return std::string("");
|
||||
}
|
||||
|
||||
std::ostringstream oss;
|
||||
std::string s = getExecRefIDAsString();
|
||||
|
||||
for (const auto c : s)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '"': oss << "\\\""; break;
|
||||
case '\\': oss << "\\\\"; break;
|
||||
case '\b': oss << "\\b"; break;
|
||||
case '\f': oss << "\\f"; break;
|
||||
case '\n': oss << "\\n"; break;
|
||||
case '\r': oss << "\\r"; break;
|
||||
case '\t': oss << "\\t"; break;
|
||||
|
||||
default:
|
||||
if ('\x00' <= c && c <= '\x1f')
|
||||
{
|
||||
oss << "\\u" << std::hex << std::setw(4)
|
||||
<< std::setfill('0') << (int)(c);
|
||||
}
|
||||
else
|
||||
{
|
||||
oss << c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
#if __cplusplus >= 201703L
|
||||
SBE_NODISCARD std::string_view getExecRefIDAsStringView() const SBE_NOEXCEPT
|
||||
{
|
||||
const char *buffer = m_buffer + m_offset + 226;
|
||||
std::size_t length = 0;
|
||||
|
||||
for (; length < 40 && *(buffer + length) != '\0'; ++length);
|
||||
std::string_view result(buffer, length);
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if __cplusplus >= 201703L
|
||||
ExecutionReportTradeAddendumOutright548 &putExecRefID(const std::string_view str)
|
||||
{
|
||||
const std::size_t srcLength = str.length();
|
||||
if (srcLength > 40)
|
||||
{
|
||||
throw std::runtime_error("string too large for putExecRefID [E106]");
|
||||
}
|
||||
|
||||
std::memcpy(m_buffer + m_offset + 226, str.data(), srcLength);
|
||||
for (std::size_t start = srcLength; start < 40; ++start)
|
||||
{
|
||||
m_buffer[m_offset + 226 + start] = 0;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
#else
|
||||
ExecutionReportTradeAddendumOutright548 &putExecRefID(const std::string &str)
|
||||
{
|
||||
const std::size_t srcLength = str.length();
|
||||
if (srcLength > 40)
|
||||
{
|
||||
throw std::runtime_error("string too large for putExecRefID [E106]");
|
||||
}
|
||||
|
||||
std::memcpy(m_buffer + m_offset + 226, str.c_str(), srcLength);
|
||||
for (std::size_t start = srcLength; start < 40; ++start)
|
||||
{
|
||||
m_buffer[m_offset + 226 + start] = 0;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
class NoFills
|
||||
{
|
||||
private:
|
||||
@@ -4639,7 +4948,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -4686,7 +4995,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -5043,6 +5352,15 @@ friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
builder << "{}";
|
||||
}
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("MDTradeEntryID": )";
|
||||
builder << +writer.mDTradeEntryID();
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("ExecRefID": )";
|
||||
builder << '"' <<
|
||||
writer.getExecRefIDAsJsonEscapedString().c_str() << '"';
|
||||
|
||||
builder << ", ";
|
||||
{
|
||||
bool atLeastOne = false;
|
||||
|
||||
+242
-4
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -165,10 +167,10 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(187);
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(227);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(549);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -222,7 +224,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeBlockLength() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(187);
|
||||
return static_cast<std::uint16_t>(227);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t sbeBlockAndHeaderLength() SBE_NOEXCEPT
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
@@ -2963,6 +2965,237 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *ExecRefIDMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "String";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t execRefIDId() SBE_NOEXCEPT
|
||||
{
|
||||
return 19;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t execRefIDSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool execRefIDInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= execRefIDSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t execRefIDEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 187;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR char execRefIDNullValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<char>(0);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR char execRefIDMinValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<char>(32);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR char execRefIDMaxValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<char>(126);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::size_t execRefIDEncodingLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 40;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint64_t execRefIDLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 40;
|
||||
}
|
||||
|
||||
SBE_NODISCARD const char *execRefID() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return m_buffer + m_offset + 187;
|
||||
}
|
||||
|
||||
SBE_NODISCARD char *execRefID() SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return m_buffer + m_offset + 187;
|
||||
}
|
||||
|
||||
SBE_NODISCARD char execRefID(const std::uint64_t index) const
|
||||
{
|
||||
if (index >= 40)
|
||||
{
|
||||
throw std::runtime_error("index out of range for execRefID [E104]");
|
||||
}
|
||||
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return static_cast<char>(0);
|
||||
}
|
||||
|
||||
char val;
|
||||
std::memcpy(&val, m_buffer + m_offset + 187 + (index * 1), sizeof(char));
|
||||
return (val);
|
||||
}
|
||||
|
||||
ExecutionReportTradeAddendumSpread549 &execRefID(const std::uint64_t index, const char value)
|
||||
{
|
||||
if (index >= 40)
|
||||
{
|
||||
throw std::runtime_error("index out of range for execRefID [E105]");
|
||||
}
|
||||
|
||||
char val = (value);
|
||||
std::memcpy(m_buffer + m_offset + 187 + (index * 1), &val, sizeof(char));
|
||||
return *this;
|
||||
}
|
||||
|
||||
std::uint64_t getExecRefID(char *const dst, const std::uint64_t length) const
|
||||
{
|
||||
if (length > 40)
|
||||
{
|
||||
throw std::runtime_error("length too large for getExecRefID [E106]");
|
||||
}
|
||||
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::memcpy(dst, m_buffer + m_offset + 187, sizeof(char) * static_cast<std::size_t>(length));
|
||||
return length;
|
||||
}
|
||||
|
||||
ExecutionReportTradeAddendumSpread549 &putExecRefID(const char *const src) SBE_NOEXCEPT
|
||||
{
|
||||
std::memcpy(m_buffer + m_offset + 187, src, sizeof(char) * 40);
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::string getExecRefIDAsString() const
|
||||
{
|
||||
const char *buffer = m_buffer + m_offset + 187;
|
||||
std::size_t length = 0;
|
||||
|
||||
for (; length < 40 && *(buffer + length) != '\0'; ++length);
|
||||
std::string result(buffer, length);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string getExecRefIDAsJsonEscapedString()
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return std::string("");
|
||||
}
|
||||
|
||||
std::ostringstream oss;
|
||||
std::string s = getExecRefIDAsString();
|
||||
|
||||
for (const auto c : s)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '"': oss << "\\\""; break;
|
||||
case '\\': oss << "\\\\"; break;
|
||||
case '\b': oss << "\\b"; break;
|
||||
case '\f': oss << "\\f"; break;
|
||||
case '\n': oss << "\\n"; break;
|
||||
case '\r': oss << "\\r"; break;
|
||||
case '\t': oss << "\\t"; break;
|
||||
|
||||
default:
|
||||
if ('\x00' <= c && c <= '\x1f')
|
||||
{
|
||||
oss << "\\u" << std::hex << std::setw(4)
|
||||
<< std::setfill('0') << (int)(c);
|
||||
}
|
||||
else
|
||||
{
|
||||
oss << c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
#if __cplusplus >= 201703L
|
||||
SBE_NODISCARD std::string_view getExecRefIDAsStringView() const SBE_NOEXCEPT
|
||||
{
|
||||
const char *buffer = m_buffer + m_offset + 187;
|
||||
std::size_t length = 0;
|
||||
|
||||
for (; length < 40 && *(buffer + length) != '\0'; ++length);
|
||||
std::string_view result(buffer, length);
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if __cplusplus >= 201703L
|
||||
ExecutionReportTradeAddendumSpread549 &putExecRefID(const std::string_view str)
|
||||
{
|
||||
const std::size_t srcLength = str.length();
|
||||
if (srcLength > 40)
|
||||
{
|
||||
throw std::runtime_error("string too large for putExecRefID [E106]");
|
||||
}
|
||||
|
||||
std::memcpy(m_buffer + m_offset + 187, str.data(), srcLength);
|
||||
for (std::size_t start = srcLength; start < 40; ++start)
|
||||
{
|
||||
m_buffer[m_offset + 187 + start] = 0;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
#else
|
||||
ExecutionReportTradeAddendumSpread549 &putExecRefID(const std::string &str)
|
||||
{
|
||||
const std::size_t srcLength = str.length();
|
||||
if (srcLength > 40)
|
||||
{
|
||||
throw std::runtime_error("string too large for putExecRefID [E106]");
|
||||
}
|
||||
|
||||
std::memcpy(m_buffer + m_offset + 187, str.c_str(), srcLength);
|
||||
for (std::size_t start = srcLength; start < 40; ++start)
|
||||
{
|
||||
m_buffer[m_offset + 187 + start] = 0;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
class NoFills
|
||||
{
|
||||
private:
|
||||
@@ -5378,6 +5611,11 @@ friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
builder << R"("ShortSaleType": )";
|
||||
builder << '"' << writer.shortSaleType() << '"';
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("ExecRefID": )";
|
||||
builder << '"' <<
|
||||
writer.getExecRefIDAsJsonEscapedString().c_str() << '"';
|
||||
|
||||
builder << ", ";
|
||||
{
|
||||
bool atLeastOne = false;
|
||||
|
||||
+363
-9
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -165,10 +167,10 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(196);
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(236);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(550);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -222,7 +224,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeBlockLength() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(196);
|
||||
return static_cast<std::uint16_t>(236);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t sbeBlockAndHeaderLength() SBE_NOEXCEPT
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
@@ -2544,7 +2546,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -2591,7 +2593,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -2634,6 +2636,237 @@ public:
|
||||
return m_grossTradeAmt;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *ExecRefIDMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "String";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t execRefIDId() SBE_NOEXCEPT
|
||||
{
|
||||
return 19;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t execRefIDSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool execRefIDInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= execRefIDSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t execRefIDEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 196;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR char execRefIDNullValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<char>(0);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR char execRefIDMinValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<char>(32);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR char execRefIDMaxValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<char>(126);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::size_t execRefIDEncodingLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 40;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint64_t execRefIDLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 40;
|
||||
}
|
||||
|
||||
SBE_NODISCARD const char *execRefID() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return m_buffer + m_offset + 196;
|
||||
}
|
||||
|
||||
SBE_NODISCARD char *execRefID() SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return m_buffer + m_offset + 196;
|
||||
}
|
||||
|
||||
SBE_NODISCARD char execRefID(const std::uint64_t index) const
|
||||
{
|
||||
if (index >= 40)
|
||||
{
|
||||
throw std::runtime_error("index out of range for execRefID [E104]");
|
||||
}
|
||||
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return static_cast<char>(0);
|
||||
}
|
||||
|
||||
char val;
|
||||
std::memcpy(&val, m_buffer + m_offset + 196 + (index * 1), sizeof(char));
|
||||
return (val);
|
||||
}
|
||||
|
||||
ExecutionReportTradeAddendumSpreadLeg550 &execRefID(const std::uint64_t index, const char value)
|
||||
{
|
||||
if (index >= 40)
|
||||
{
|
||||
throw std::runtime_error("index out of range for execRefID [E105]");
|
||||
}
|
||||
|
||||
char val = (value);
|
||||
std::memcpy(m_buffer + m_offset + 196 + (index * 1), &val, sizeof(char));
|
||||
return *this;
|
||||
}
|
||||
|
||||
std::uint64_t getExecRefID(char *const dst, const std::uint64_t length) const
|
||||
{
|
||||
if (length > 40)
|
||||
{
|
||||
throw std::runtime_error("length too large for getExecRefID [E106]");
|
||||
}
|
||||
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::memcpy(dst, m_buffer + m_offset + 196, sizeof(char) * static_cast<std::size_t>(length));
|
||||
return length;
|
||||
}
|
||||
|
||||
ExecutionReportTradeAddendumSpreadLeg550 &putExecRefID(const char *const src) SBE_NOEXCEPT
|
||||
{
|
||||
std::memcpy(m_buffer + m_offset + 196, src, sizeof(char) * 40);
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::string getExecRefIDAsString() const
|
||||
{
|
||||
const char *buffer = m_buffer + m_offset + 196;
|
||||
std::size_t length = 0;
|
||||
|
||||
for (; length < 40 && *(buffer + length) != '\0'; ++length);
|
||||
std::string result(buffer, length);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string getExecRefIDAsJsonEscapedString()
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return std::string("");
|
||||
}
|
||||
|
||||
std::ostringstream oss;
|
||||
std::string s = getExecRefIDAsString();
|
||||
|
||||
for (const auto c : s)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case '"': oss << "\\\""; break;
|
||||
case '\\': oss << "\\\\"; break;
|
||||
case '\b': oss << "\\b"; break;
|
||||
case '\f': oss << "\\f"; break;
|
||||
case '\n': oss << "\\n"; break;
|
||||
case '\r': oss << "\\r"; break;
|
||||
case '\t': oss << "\\t"; break;
|
||||
|
||||
default:
|
||||
if ('\x00' <= c && c <= '\x1f')
|
||||
{
|
||||
oss << "\\u" << std::hex << std::setw(4)
|
||||
<< std::setfill('0') << (int)(c);
|
||||
}
|
||||
else
|
||||
{
|
||||
oss << c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
#if __cplusplus >= 201703L
|
||||
SBE_NODISCARD std::string_view getExecRefIDAsStringView() const SBE_NOEXCEPT
|
||||
{
|
||||
const char *buffer = m_buffer + m_offset + 196;
|
||||
std::size_t length = 0;
|
||||
|
||||
for (; length < 40 && *(buffer + length) != '\0'; ++length);
|
||||
std::string_view result(buffer, length);
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if __cplusplus >= 201703L
|
||||
ExecutionReportTradeAddendumSpreadLeg550 &putExecRefID(const std::string_view str)
|
||||
{
|
||||
const std::size_t srcLength = str.length();
|
||||
if (srcLength > 40)
|
||||
{
|
||||
throw std::runtime_error("string too large for putExecRefID [E106]");
|
||||
}
|
||||
|
||||
std::memcpy(m_buffer + m_offset + 196, str.data(), srcLength);
|
||||
for (std::size_t start = srcLength; start < 40; ++start)
|
||||
{
|
||||
m_buffer[m_offset + 196 + start] = 0;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
#else
|
||||
ExecutionReportTradeAddendumSpreadLeg550 &putExecRefID(const std::string &str)
|
||||
{
|
||||
const std::size_t srcLength = str.length();
|
||||
if (srcLength > 40)
|
||||
{
|
||||
throw std::runtime_error("string too large for putExecRefID [E106]");
|
||||
}
|
||||
|
||||
std::memcpy(m_buffer + m_offset + 196, str.c_str(), srcLength);
|
||||
for (std::size_t start = srcLength; start < 40; ++start)
|
||||
{
|
||||
m_buffer[m_offset + 196 + start] = 0;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
class NoFills
|
||||
{
|
||||
private:
|
||||
@@ -3331,11 +3564,11 @@ public:
|
||||
m_buffer = buffer;
|
||||
m_bufferLength = bufferLength;
|
||||
GroupSize dimensions(buffer, *pos, bufferLength, actingVersion);
|
||||
dimensions.blockLength(static_cast<std::uint16_t>(27));
|
||||
dimensions.blockLength(static_cast<std::uint16_t>(45));
|
||||
dimensions.numInGroup(static_cast<std::uint8_t>(count));
|
||||
m_index = 0;
|
||||
m_count = count;
|
||||
m_blockLength = 27;
|
||||
m_blockLength = 45;
|
||||
m_actingVersion = actingVersion;
|
||||
m_initialPosition = *pos;
|
||||
m_positionPtr = pos;
|
||||
@@ -3349,7 +3582,7 @@ public:
|
||||
|
||||
static SBE_CONSTEXPR std::uint64_t sbeBlockLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 27;
|
||||
return 45;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::uint64_t sbePosition() const SBE_NOEXCEPT
|
||||
@@ -4022,6 +4255,100 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *ContraGrossTradeAmtMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t contraGrossTradeAmtId() SBE_NOEXCEPT
|
||||
{
|
||||
return 5542;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t contraGrossTradeAmtSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool contraGrossTradeAmtInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= contraGrossTradeAmtSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t contraGrossTradeAmtEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 27;
|
||||
}
|
||||
|
||||
private:
|
||||
Decimal64NULL m_contraGrossTradeAmt;
|
||||
|
||||
public:
|
||||
SBE_NODISCARD Decimal64NULL &contraGrossTradeAmt()
|
||||
{
|
||||
m_contraGrossTradeAmt.wrap(m_buffer, m_offset + 27, m_actingVersion, m_bufferLength);
|
||||
return m_contraGrossTradeAmt;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *ContraCalculatedCcyLastQtyMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t contraCalculatedCcyLastQtyId() SBE_NOEXCEPT
|
||||
{
|
||||
return 5971;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t contraCalculatedCcyLastQtySinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool contraCalculatedCcyLastQtyInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= contraCalculatedCcyLastQtySinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t contraCalculatedCcyLastQtyEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 36;
|
||||
}
|
||||
|
||||
private:
|
||||
Decimal64NULL m_contraCalculatedCcyLastQty;
|
||||
|
||||
public:
|
||||
SBE_NODISCARD Decimal64NULL &contraCalculatedCcyLastQty()
|
||||
{
|
||||
m_contraCalculatedCcyLastQty.wrap(m_buffer, m_offset + 36, m_actingVersion, m_bufferLength);
|
||||
return m_contraCalculatedCcyLastQty;
|
||||
}
|
||||
|
||||
template<typename CharT, typename Traits>
|
||||
friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
std::basic_ostream<CharT, Traits> &builder, NoOrderEvents writer)
|
||||
@@ -4055,6 +4382,28 @@ public:
|
||||
builder << R"("OriginalOrderEventExecID": )";
|
||||
builder << +writer.originalOrderEventExecID();
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("ContraGrossTradeAmt": )";
|
||||
if (writer.contraGrossTradeAmtInActingVersion())
|
||||
{
|
||||
builder << writer.contraGrossTradeAmt();
|
||||
}
|
||||
else
|
||||
{
|
||||
builder << "{}";
|
||||
}
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("ContraCalculatedCcyLastQty": )";
|
||||
if (writer.contraCalculatedCcyLastQtyInActingVersion())
|
||||
{
|
||||
builder << writer.contraCalculatedCcyLastQty();
|
||||
}
|
||||
else
|
||||
{
|
||||
builder << "{}";
|
||||
}
|
||||
|
||||
builder << '}';
|
||||
|
||||
return builder;
|
||||
@@ -4260,6 +4609,11 @@ friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
builder << "{}";
|
||||
}
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("ExecRefID": )";
|
||||
builder << '"' <<
|
||||
writer.getExecRefIDAsJsonEscapedString().c_str() << '"';
|
||||
|
||||
builder << ", ";
|
||||
{
|
||||
bool atLeastOne = false;
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(293);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(525);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
@@ -4094,7 +4096,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -4141,7 +4143,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -5717,7 +5719,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -5764,7 +5766,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(230);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(526);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(219);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(527);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
@@ -2760,7 +2762,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -2807,7 +2809,7 @@ public:
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
@@ -3547,11 +3549,11 @@ public:
|
||||
m_buffer = buffer;
|
||||
m_bufferLength = bufferLength;
|
||||
GroupSize dimensions(buffer, *pos, bufferLength, actingVersion);
|
||||
dimensions.blockLength(static_cast<std::uint16_t>(23));
|
||||
dimensions.blockLength(static_cast<std::uint16_t>(41));
|
||||
dimensions.numInGroup(static_cast<std::uint8_t>(count));
|
||||
m_index = 0;
|
||||
m_count = count;
|
||||
m_blockLength = 23;
|
||||
m_blockLength = 41;
|
||||
m_actingVersion = actingVersion;
|
||||
m_initialPosition = *pos;
|
||||
m_positionPtr = pos;
|
||||
@@ -3565,7 +3567,7 @@ public:
|
||||
|
||||
static SBE_CONSTEXPR std::uint64_t sbeBlockLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 23;
|
||||
return 41;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::uint64_t sbePosition() const SBE_NOEXCEPT
|
||||
@@ -4162,6 +4164,100 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *ContraGrossTradeAmtMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t contraGrossTradeAmtId() SBE_NOEXCEPT
|
||||
{
|
||||
return 5542;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t contraGrossTradeAmtSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool contraGrossTradeAmtInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= contraGrossTradeAmtSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t contraGrossTradeAmtEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 23;
|
||||
}
|
||||
|
||||
private:
|
||||
Decimal64NULL m_contraGrossTradeAmt;
|
||||
|
||||
public:
|
||||
SBE_NODISCARD Decimal64NULL &contraGrossTradeAmt()
|
||||
{
|
||||
m_contraGrossTradeAmt.wrap(m_buffer, m_offset + 23, m_actingVersion, m_bufferLength);
|
||||
return m_contraGrossTradeAmt;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *ContraCalculatedCcyLastQtyMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "Qty";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t contraCalculatedCcyLastQtyId() SBE_NOEXCEPT
|
||||
{
|
||||
return 5971;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t contraCalculatedCcyLastQtySinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool contraCalculatedCcyLastQtyInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= contraCalculatedCcyLastQtySinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t contraCalculatedCcyLastQtyEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 32;
|
||||
}
|
||||
|
||||
private:
|
||||
Decimal64NULL m_contraCalculatedCcyLastQty;
|
||||
|
||||
public:
|
||||
SBE_NODISCARD Decimal64NULL &contraCalculatedCcyLastQty()
|
||||
{
|
||||
m_contraCalculatedCcyLastQty.wrap(m_buffer, m_offset + 32, m_actingVersion, m_bufferLength);
|
||||
return m_contraCalculatedCcyLastQty;
|
||||
}
|
||||
|
||||
template<typename CharT, typename Traits>
|
||||
friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
std::basic_ostream<CharT, Traits> &builder, NoOrderEvents writer)
|
||||
@@ -4191,6 +4287,28 @@ public:
|
||||
builder << R"("OrderEventReason": )";
|
||||
builder << +writer.orderEventReason();
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("ContraGrossTradeAmt": )";
|
||||
if (writer.contraGrossTradeAmtInActingVersion())
|
||||
{
|
||||
builder << writer.contraGrossTradeAmt();
|
||||
}
|
||||
else
|
||||
{
|
||||
builder << "{}";
|
||||
}
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("ContraCalculatedCcyLastQty": )";
|
||||
if (writer.contraCalculatedCcyLastQtyInActingVersion())
|
||||
{
|
||||
builder << writer.contraCalculatedCcyLastQty();
|
||||
}
|
||||
else
|
||||
{
|
||||
builder << "{}";
|
||||
}
|
||||
|
||||
builder << '}';
|
||||
|
||||
return builder;
|
||||
|
||||
@@ -194,7 +194,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *blockLengthMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
{
|
||||
Limit = static_cast<char>(50),
|
||||
StopLimit = static_cast<char>(52),
|
||||
NULL_VALUE = static_cast<char>(48)
|
||||
NULL_VALUE = static_cast<char>(0)
|
||||
};
|
||||
|
||||
static MassActionOrdTyp::Value get(const char value)
|
||||
@@ -41,7 +41,7 @@ public:
|
||||
{
|
||||
case static_cast<char>(50): return Limit;
|
||||
case static_cast<char>(52): return StopLimit;
|
||||
case static_cast<char>(48): return NULL_VALUE;
|
||||
case static_cast<char>(0): return NULL_VALUE;
|
||||
}
|
||||
|
||||
throw std::runtime_error("unknown value for enum MassActionOrdTyp [E103]");
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(123);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(517);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -165,10 +167,10 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(351);
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(352);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(545);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -222,7 +224,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeBlockLength() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(351);
|
||||
return static_cast<std::uint16_t>(352);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t sbeBlockAndHeaderLength() SBE_NOEXCEPT
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
@@ -2344,6 +2346,79 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *QuoteEntryControlMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::PRESENCE: return "required";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t quoteEntryControlId() SBE_NOEXCEPT
|
||||
{
|
||||
return 39034;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t quoteEntryControlSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool quoteEntryControlInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= quoteEntryControlSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t quoteEntryControlEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 351;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t quoteEntryControlEncodingLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::uint8_t quoteEntryControlRaw() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return static_cast<std::uint8_t>(255);
|
||||
}
|
||||
|
||||
std::uint8_t val;
|
||||
std::memcpy(&val, m_buffer + m_offset + 351, sizeof(std::uint8_t));
|
||||
return (val);
|
||||
}
|
||||
|
||||
SBE_NODISCARD BooleanNULL::Value quoteEntryControl() const
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return BooleanNULL::NULL_VALUE;
|
||||
}
|
||||
|
||||
std::uint8_t val;
|
||||
std::memcpy(&val, m_buffer + m_offset + 351, sizeof(std::uint8_t));
|
||||
return BooleanNULL::get((val));
|
||||
}
|
||||
|
||||
MassQuoteAck545 "eEntryControl(const BooleanNULL::Value value) SBE_NOEXCEPT
|
||||
{
|
||||
std::uint8_t val = (value);
|
||||
std::memcpy(m_buffer + m_offset + 351, &val, sizeof(std::uint8_t));
|
||||
return *this;
|
||||
}
|
||||
|
||||
class NoQuoteEntries
|
||||
{
|
||||
private:
|
||||
@@ -2970,6 +3045,10 @@ friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
builder << R"("QuoteEntryOpen": )";
|
||||
builder << '"' << writer.quoteEntryOpen() << '"';
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("QuoteEntryControl": )";
|
||||
builder << '"' << writer.quoteEntryControl() << '"';
|
||||
|
||||
builder << ", ";
|
||||
{
|
||||
bool atLeastOne = false;
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -194,7 +194,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *yearMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
|
||||
@@ -194,7 +194,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *blockLengthMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(76);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(500);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -165,10 +167,10 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(68);
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(69);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(502);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -222,7 +224,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeBlockLength() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(68);
|
||||
return static_cast<std::uint16_t>(69);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t sbeBlockAndHeaderLength() SBE_NOEXCEPT
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
@@ -890,6 +892,82 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *EnvironmentIndicatorMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::PRESENCE: return "optional";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t environmentIndicatorId() SBE_NOEXCEPT
|
||||
{
|
||||
return 39032;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t environmentIndicatorSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool environmentIndicatorInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= environmentIndicatorSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t environmentIndicatorEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 68;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorNullValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(255);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorMinValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(0);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorMaxValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(254);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::size_t environmentIndicatorEncodingLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::uint8_t environmentIndicator() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return static_cast<std::uint8_t>(255);
|
||||
}
|
||||
|
||||
std::uint8_t val;
|
||||
std::memcpy(&val, m_buffer + m_offset + 68, sizeof(std::uint8_t));
|
||||
return (val);
|
||||
}
|
||||
|
||||
NegotiationReject502 &environmentIndicator(const std::uint8_t value) SBE_NOEXCEPT
|
||||
{
|
||||
std::uint8_t val = (value);
|
||||
std::memcpy(m_buffer + m_offset + 68, &val, sizeof(std::uint8_t));
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename CharT, typename Traits>
|
||||
friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
std::basic_ostream<CharT, Traits> &builder, NegotiationReject502 _writer)
|
||||
@@ -931,6 +1009,10 @@ friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
builder << R"("SplitMsg": )";
|
||||
builder << '"' << writer.splitMsg() << '"';
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("EnvironmentIndicator": )";
|
||||
builder << +writer.environmentIndicator();
|
||||
|
||||
builder << '}';
|
||||
|
||||
return builder;
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -165,10 +167,10 @@ private:
|
||||
}
|
||||
|
||||
public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(32);
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(33);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(501);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -222,7 +224,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeBlockLength() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(32);
|
||||
return static_cast<std::uint16_t>(33);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t sbeBlockAndHeaderLength() SBE_NOEXCEPT
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
@@ -951,6 +953,82 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *EnvironmentIndicatorMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
{
|
||||
case MetaAttribute::SEMANTIC_TYPE: return "int";
|
||||
case MetaAttribute::PRESENCE: return "optional";
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint16_t environmentIndicatorId() SBE_NOEXCEPT
|
||||
{
|
||||
return 39032;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint64_t environmentIndicatorSinceVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return 9;
|
||||
}
|
||||
|
||||
SBE_NODISCARD bool environmentIndicatorInActingVersion() SBE_NOEXCEPT
|
||||
{
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wtautological-compare"
|
||||
#endif
|
||||
return m_actingVersion >= environmentIndicatorSinceVersion();
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::size_t environmentIndicatorEncodingOffset() SBE_NOEXCEPT
|
||||
{
|
||||
return 32;
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorNullValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(255);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorMinValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(0);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::uint8_t environmentIndicatorMaxValue() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint8_t>(254);
|
||||
}
|
||||
|
||||
static SBE_CONSTEXPR std::size_t environmentIndicatorEncodingLength() SBE_NOEXCEPT
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
SBE_NODISCARD std::uint8_t environmentIndicator() const SBE_NOEXCEPT
|
||||
{
|
||||
if (m_actingVersion < 9)
|
||||
{
|
||||
return static_cast<std::uint8_t>(255);
|
||||
}
|
||||
|
||||
std::uint8_t val;
|
||||
std::memcpy(&val, m_buffer + m_offset + 32, sizeof(std::uint8_t));
|
||||
return (val);
|
||||
}
|
||||
|
||||
NegotiationResponse501 &environmentIndicator(const std::uint8_t value) SBE_NOEXCEPT
|
||||
{
|
||||
std::uint8_t val = (value);
|
||||
std::memcpy(m_buffer + m_offset + 32, &val, sizeof(std::uint8_t));
|
||||
return *this;
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *CredentialsMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
{
|
||||
switch (metaAttribute)
|
||||
@@ -1178,6 +1256,10 @@ friend std::basic_ostream<CharT, Traits> & operator << (
|
||||
builder << R"("PreviousUUID": )";
|
||||
builder << +writer.previousUUID();
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("EnvironmentIndicator": )";
|
||||
builder << +writer.environmentIndicator();
|
||||
|
||||
builder << ", ";
|
||||
builder << R"("Credentials": )";
|
||||
builder << '"' <<
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(74);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(544);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(132);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(514);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(17);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(513);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(409);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(535);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(409);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(536);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(133);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(515);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(96);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(516);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(130);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(562);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(79);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(529);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(68);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(530);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(62);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(533);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -34,7 +34,7 @@ public:
|
||||
Limit = static_cast<char>(50),
|
||||
StopLimit = static_cast<char>(52),
|
||||
MarketWithLeftoverAsLimit = static_cast<char>(75),
|
||||
NULL_VALUE = static_cast<char>(48)
|
||||
NULL_VALUE = static_cast<char>(0)
|
||||
};
|
||||
|
||||
static OrderType::Value get(const char value)
|
||||
@@ -45,7 +45,7 @@ public:
|
||||
case static_cast<char>(50): return Limit;
|
||||
case static_cast<char>(52): return StopLimit;
|
||||
case static_cast<char>(75): return MarketWithLeftoverAsLimit;
|
||||
case static_cast<char>(48): return NULL_VALUE;
|
||||
case static_cast<char>(0): return NULL_VALUE;
|
||||
}
|
||||
|
||||
throw std::runtime_error("unknown value for enum OrderType [E103]");
|
||||
|
||||
@@ -194,7 +194,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *mantissaMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
|
||||
@@ -194,7 +194,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static const char *mantissaMetaAttribute(const MetaAttribute metaAttribute) SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(147);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(518);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(159);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(519);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(93);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(538);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(20);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(537);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
@@ -127,7 +127,9 @@
|
||||
#include "QuoteAckStatus.h"
|
||||
#include "ExpCycle.h"
|
||||
#include "MassCancelTIF.h"
|
||||
#include "Side.h"
|
||||
#include "OrderStatus.h"
|
||||
#include "CrossTypeEnum.h"
|
||||
#include "ShortSaleType.h"
|
||||
#include "PartyDetailRole.h"
|
||||
#include "MassActionScope.h"
|
||||
@@ -168,7 +170,7 @@ public:
|
||||
static const std::uint16_t SBE_BLOCK_LENGTH = static_cast<std::uint16_t>(61);
|
||||
static const std::uint16_t SBE_TEMPLATE_ID = static_cast<std::uint16_t>(528);
|
||||
static const std::uint16_t SBE_SCHEMA_ID = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(8);
|
||||
static const std::uint16_t SBE_SCHEMA_VERSION = static_cast<std::uint16_t>(9);
|
||||
|
||||
enum MetaAttribute
|
||||
{
|
||||
@@ -242,7 +244,7 @@ public:
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR std::uint16_t sbeSchemaVersion() SBE_NOEXCEPT
|
||||
{
|
||||
return static_cast<std::uint16_t>(8);
|
||||
return static_cast<std::uint16_t>(9);
|
||||
}
|
||||
|
||||
SBE_NODISCARD static SBE_CONSTEXPR const char *sbeSemanticType() SBE_NOEXCEPT
|
||||
|
||||
Loaded 100 of 122 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user