Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48f56e76d4 | ||
|
|
05e6c40a57 |
No files matched your search
@@ -1,36 +1,23 @@
|
||||
nohup.out
|
||||
build/
|
||||
cmake-build-debug/
|
||||
.idea/
|
||||
.dir-locals.el
|
||||
*.pyc
|
||||
.vscode/*
|
||||
!.vscode/*.json
|
||||
.vs
|
||||
obj/
|
||||
*.csproj.user
|
||||
*.vspx
|
||||
*.psess
|
||||
msbuild.log
|
||||
*.orig
|
||||
vcxproj.user
|
||||
src/client/spark/Properties/launchSettings.json
|
||||
compile_commands.json
|
||||
.cquery_cached_index/
|
||||
src/client/sparkcmd/Properties/launchSettings.json
|
||||
node_modules
|
||||
paket-files
|
||||
project.lock.json
|
||||
src/server/sparkd/orderman/perf_analysis/data
|
||||
src/server/sparkd/orderman/perf_analysis/logs/
|
||||
src/server/sparkd/orderman/perf_analysis/trace_data/
|
||||
.fake
|
||||
*.fsx.lock
|
||||
*.code-workspace
|
||||
src/lib/orderman/perf_analysis/logs/latency_data/
|
||||
trace_data/
|
||||
/src/lib/orderman/perf_analysis/last_pretty_log.csv
|
||||
/src/lib/orderman/perf_analysis/log.csv
|
||||
/doc/user/public/*
|
||||
.ionide/*
|
||||
/.ignore
|
||||
nohup.out
|
||||
build/
|
||||
cmake-build-debug/
|
||||
.idea/
|
||||
.dir-locals.el
|
||||
*.pyc
|
||||
.vscode/*
|
||||
!.vscode/*.json
|
||||
.vs
|
||||
obj/
|
||||
*.csproj.user
|
||||
*.vspx
|
||||
*.psess
|
||||
msbuild.log
|
||||
*.orig
|
||||
vcxproj.user
|
||||
src/client/spark/Properties/launchSettings.json
|
||||
compile_commands.json
|
||||
.cquery_cached_index/
|
||||
src/client/sparkcmd/Properties/launchSettings.json
|
||||
node_modules
|
||||
paket-files
|
||||
project.lock.json
|
||||
@@ -1,60 +1,13 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "SparkVM Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/server/sparkd",
|
||||
"args": [
|
||||
"run"
|
||||
],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/server/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"logging": {
|
||||
"engineLogging": false
|
||||
},
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
},
|
||||
{
|
||||
"description": "Skip STL",
|
||||
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
|
||||
"ignoreFailures": true
|
||||
},
|
||||
{
|
||||
"description": "LD LIBRARY",
|
||||
"text": "set env LD_LIBRARY_PATH=.",
|
||||
"ignoreFailures": false
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": [
|
||||
"bts@sparkvm"
|
||||
],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"name": "(gdb) Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/ninja_debug/server/sparkd/sparkd",
|
||||
"args": [
|
||||
"run"
|
||||
],
|
||||
"program": "${workspaceRoot}/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["run"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceRoot}/build/ninja_debug/src/server/sparkd",
|
||||
"environment": [],
|
||||
@@ -69,79 +22,78 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Client Launch",
|
||||
"type": "clr",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/Debug/bin/net471/spark.exe",
|
||||
"args": [],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"stopAtEntry": false,
|
||||
"externalConsole": true,
|
||||
"requireExactSource": false
|
||||
"name": "Client Launch",
|
||||
"type": "clr",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/Debug/bin/net471/spark.exe",
|
||||
"args": [],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"stopAtEntry": false,
|
||||
"externalConsole": true,
|
||||
"requireExactSource": false
|
||||
},
|
||||
{
|
||||
"name": "SDK Launch",
|
||||
"type": "clr",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/Debug/bin/net471/spark_sdk.exe",
|
||||
"args": [
|
||||
"md",
|
||||
"GLBX",
|
||||
"Future",
|
||||
"CL",
|
||||
"CLZ9",
|
||||
"--user=bts",
|
||||
"--pass="
|
||||
],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"stopAtEntry": false,
|
||||
"externalConsole": true,
|
||||
"requireExactSource": false
|
||||
},
|
||||
{
|
||||
"name": "Excel Launch",
|
||||
"type": "clr",
|
||||
"request": "launch",
|
||||
"program": "C:/Program Files/Microsoft Office/Office14/EXCEL.EXE",
|
||||
"args": [
|
||||
"${workspaceRoot}/build/Debug/bin/net471/spark_excel-addin64-packed.xll"
|
||||
],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"stopAtEntry": false,
|
||||
"externalConsole": true,
|
||||
"requireExactSource": false
|
||||
},
|
||||
{
|
||||
"name": "Client Tests",
|
||||
"type": "clr",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/Debug/bin/net471/sparkcmd.exe",
|
||||
"args": [
|
||||
"test",
|
||||
"ApiUpdateTests"
|
||||
],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"stopAtEntry": false,
|
||||
"externalConsole": true,
|
||||
"requireExactSource": false
|
||||
},
|
||||
{
|
||||
{
|
||||
"name": "SDK Launch",
|
||||
"type": "clr",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/build/Debug/bin/net471/spark_sdk.exe",
|
||||
"args": ["md","GLBX","Future","ES","ESM8"],
|
||||
"cwd": "${workspaceRoot}",
|
||||
"stopAtEntry": false,
|
||||
"externalConsole": true,
|
||||
"requireExactSource": false
|
||||
},
|
||||
{
|
||||
"name": "Client Attach",
|
||||
"type": "clr",
|
||||
"request": "attach",
|
||||
"processId": "${command:pickProcess}"
|
||||
"processId":"${command:pickProcess}"
|
||||
},
|
||||
{
|
||||
"name": "SparkVM Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["run"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"logging": {
|
||||
"engineLogging": false
|
||||
},
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
},
|
||||
{
|
||||
"description": "Skip STL",
|
||||
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Spreader Tests",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/server/sparkd",
|
||||
"args": [
|
||||
"test",
|
||||
"[spreader]"
|
||||
],
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["test", "[spreader]"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/server/",
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
@@ -159,9 +111,7 @@
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": [
|
||||
"bts@sparkvm"
|
||||
],
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
@@ -173,10 +123,7 @@
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": [
|
||||
"test",
|
||||
"[admin_service]"
|
||||
],
|
||||
"args": ["test", "[admin_service]"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
@@ -196,9 +143,7 @@
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": [
|
||||
"bts@sparkvm"
|
||||
],
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
@@ -210,10 +155,7 @@
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": [
|
||||
"test",
|
||||
"[limiter]"
|
||||
],
|
||||
"args": ["test", "[limiter]"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
@@ -233,9 +175,7 @@
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": [
|
||||
"bts@sparkvm"
|
||||
],
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
@@ -246,13 +186,10 @@
|
||||
"name": "MD Tests",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/build/ninja_debug/server/sparkd",
|
||||
"args": [
|
||||
"test",
|
||||
"[algo]"
|
||||
],
|
||||
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
|
||||
"args": ["test", "[md]"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/server/",
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
@@ -275,16 +212,14 @@
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": [
|
||||
"bts@sparkvm"
|
||||
],
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
{
|
||||
"name": "SparkVM attach",
|
||||
"type": "cppdbg",
|
||||
"request": "attach",
|
||||
@@ -292,18 +227,16 @@
|
||||
"processId": "${command:pickRemoteProcess}",
|
||||
"MIMode": "gdb",
|
||||
"pipeTransport": {
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": [
|
||||
"bts@sparkvm"
|
||||
],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@sparkvm"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
},
|
||||
{
|
||||
"name": "Python",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
@@ -313,9 +246,7 @@
|
||||
"cwd": "${workspaceRoot}",
|
||||
"env": {},
|
||||
"envFile": "${workspaceRoot}/.env",
|
||||
"args": [
|
||||
"DEBUG"
|
||||
],
|
||||
"args": [ "DEBUG" ],
|
||||
"debugOptions": [
|
||||
"WaitOnAbnormalExit",
|
||||
"WaitOnNormalExit",
|
||||
@@ -323,49 +254,62 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": ".NET Core Remote Attach",
|
||||
"type": "coreclr",
|
||||
"request": "attach",
|
||||
"processId": "${command:pickRemoteProcess}",
|
||||
"name": "edge-asp051",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/home/bts/spark/sparkd",
|
||||
"args": ["run"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": [
|
||||
"bts@sparkvm"
|
||||
],
|
||||
"debuggerPath": "/home/bts/vsdbg/vsdbg",
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"quoteArgs": true
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["bts@edge-asp051"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
},
|
||||
"justMyCode": true
|
||||
"/bts/": "${workspaceRoot}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": ".NET Core Remote Launch",
|
||||
"type": "coreclr",
|
||||
"name": "Docker Launch",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"program": "/usr/bin/dotnet",
|
||||
"args": [
|
||||
"sparkcmd.dll",
|
||||
"test",
|
||||
"test_join_create_and_takeout_market"
|
||||
],
|
||||
"program": "/bts/build/gcc_debug/src/server/sparkd/sparkd",
|
||||
"args": ["test"],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "/home/bts/spark/build/ninja_debug/server",
|
||||
"cwd": "/bts/build/gcc_debug/src/server/sparkd",
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "enable pretty-printer",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"pipeTransport": {
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": [
|
||||
"bts@sparkvm"
|
||||
],
|
||||
"debuggerPath": "/home/bts/vsdbg/vsdbg",
|
||||
"pipeCwd": "${workspaceRoot}",
|
||||
"quoteArgs": true
|
||||
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
|
||||
"pipeArgs": ["-p 2000","root@localhost"],
|
||||
"debuggerPath": "/usr/bin/gdb"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/home/bts/spark/": "${workspaceRoot}"
|
||||
},
|
||||
"justMyCode": false
|
||||
},
|
||||
"/bts/": "${workspaceRoot}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -32,35 +32,10 @@ if (WIN32)
|
||||
|
||||
add_subdirectory(src/lib)
|
||||
else ()
|
||||
# so that sparkd looks for libspark.so in its directory
|
||||
set (CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
||||
set (CMAKE_INSTALL_RPATH ".")
|
||||
|
||||
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \
|
||||
-fPIC -Wall -pedantic -Wextra -Werror \
|
||||
-Wno-missing-braces -Wno-ignored-qualifiers \
|
||||
--std=c++17 -fdiagnostics-color")
|
||||
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -DNDEBUG -O3")
|
||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wno-undef")
|
||||
add_subdirectory(src/server/sparkd)
|
||||
add_subdirectory(src/lib)
|
||||
add_subdirectory(src/web)
|
||||
add_subdirectory(doc/user)
|
||||
add_subdirectory(src/sdk)
|
||||
add_subdirectory(src/data_files)
|
||||
|
||||
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/server
|
||||
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/server
|
||||
COMMAND ln ARGS -sf ${CMAKE_BINARY_DIR}/src/server/sparkd/sparkd ${CMAKE_BINARY_DIR}/server
|
||||
COMMAND ln ARGS -sf ${CMAKE_BINARY_DIR}/web ${CMAKE_BINARY_DIR}/server
|
||||
COMMAND ln ARGS -sf ${CMAKE_BINARY_DIR}/data_files ${CMAKE_BINARY_DIR}/server
|
||||
COMMAND ln ARGS -sf ${CMAKE_BINARY_DIR}/src/lib/libspark.so ${CMAKE_BINARY_DIR}/server
|
||||
COMMAND ln ARGS -sf ${EXTERNALS_ROOT}/lib/Release/libOnixS.IceImpactMulticastPriceFeedHandlerCpp.so.3.13.0.0 ${CMAKE_BINARY_DIR}/server
|
||||
COMMAND ln ARGS -sf ${EXTERNALS_ROOT}/lib/Release/libACE-5.7.5.so ${CMAKE_BINARY_DIR}/server
|
||||
COMMAND mkdir ARGS -p ${CMAKE_BINARY_DIR}/server/plugins
|
||||
COMMAND ln ARGS -sf ${CMAKE_BINARY_DIR}/sdk/examples/order_plugin_example.so ${CMAKE_BINARY_DIR}/server/plugins/
|
||||
COMMENT "Creating server runtime layout"
|
||||
DEPENDS sparkd data_files_dir)
|
||||
|
||||
add_custom_target(server_layout ALL DEPENDS ${CMAKE_BINARY_DIR}/server)
|
||||
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \
|
||||
-Wall -pedantic -Wextra -Werror -Wno-missing-braces -Wno-ignored-qualifiers --std=c++14 -fdiagnostics-color")
|
||||
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} -DNDEBUG -O3")
|
||||
add_subdirectory(src/lib)
|
||||
add_subdirectory(src/server/sparkd)
|
||||
add_subdirectory(src/web)
|
||||
endif()
|
||||
|
Before Width: | Height: | Size: 2.5 MiB |
@@ -1,71 +0,0 @@
|
||||
* Services
|
||||
** Admin
|
||||
** ErrorReport
|
||||
** MarketDataRelay
|
||||
** Persistence
|
||||
** ShellDiagnostic
|
||||
** SyntheticSecurity
|
||||
** Order
|
||||
*** Streams
|
||||
- Fills
|
||||
- Orders
|
||||
*** Ops
|
||||
- Create/Update/Cancel/Crack orders
|
||||
*** Internal structure
|
||||
- Two threads, fast and slow
|
||||
**** Fast Actors
|
||||
***** MDSource
|
||||
***** OrderManager
|
||||
***** ExecutionGateway
|
||||
**** Slow Actors
|
||||
***** ServiceBridge
|
||||
***** Timer
|
||||
***** AsyncFactory
|
||||
***** OrderStore
|
||||
***** FillStore
|
||||
***** SecuritySrc
|
||||
* Benchmarks
|
||||
* OrderMan
|
||||
** OrderServices
|
||||
*** callbacks
|
||||
**** standard
|
||||
- update
|
||||
- cancel
|
||||
- crack
|
||||
- activate
|
||||
- book
|
||||
- settlement
|
||||
- child order state
|
||||
- timer
|
||||
**** low level
|
||||
- exe reports
|
||||
- cancel rejects
|
||||
- gateway status
|
||||
*** services
|
||||
**** standard
|
||||
- secdb
|
||||
- get time
|
||||
- schedule actions
|
||||
- order builder
|
||||
- activate
|
||||
- update
|
||||
- cancel
|
||||
- crack
|
||||
**** low level
|
||||
- governor
|
||||
- send fix
|
||||
- get time str
|
||||
- limiter
|
||||
** Internalize plan
|
||||
- change order initiated update/cancel/crack/activate/report_state to
|
||||
use direct method calls
|
||||
- need to watch out for reentrancy
|
||||
- need to also report state externally
|
||||
- also want to separate active from non active orders in map to speed
|
||||
up look ups
|
||||
- want to use direct references in orders to avoid lookups
|
||||
- want to change how time is captured, the trace is too big to copy
|
||||
around
|
||||
|
||||
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
---------------------------------------------------------------------------------
|
||||
Benchmark Time CPU Iterations
|
||||
---------------------------------------------------------------------------------
|
||||
gen_id 343486 ns 335807 ns 2075
|
||||
mutex_lock_unlock 21 ns 21 ns 32639774
|
||||
spin_lock_unlock 8 ns 8 ns 89116301
|
||||
bts_spinlock_lock_unlock 8 ns 8 ns 89147033
|
||||
serialize_update 44 ns 44 ns 16087792
|
||||
serialize_order 1490 ns 1490 ns 469370
|
||||
binary_search_of_guid/8 45 ns 45 ns 19628480
|
||||
binary_search_of_guid/64 74 ns 74 ns 8488516
|
||||
binary_search_of_guid/512 152 ns 152 ns 5951672
|
||||
binary_search_of_guid/4096 176 ns 176 ns 3516706
|
||||
binary_search_of_guid/8192 204 ns 204 ns 4195026
|
||||
binary_search_of_int64/8 7 ns 7 ns 125831105
|
||||
binary_search_of_int64/64 10 ns 10 ns 83445929
|
||||
binary_search_of_int64/512 17 ns 17 ns 44577843
|
||||
binary_search_of_int64/4096 21 ns 21 ns 30816423
|
||||
binary_search_of_int64/8192 23 ns 23 ns 33503850
|
||||
binary_search_of_int32/8 6 ns 6 ns 105190034
|
||||
binary_search_of_int32/64 9 ns 9 ns 69381845
|
||||
binary_search_of_int32/512 17 ns 17 ns 46519573
|
||||
binary_search_of_int32/4096 21 ns 21 ns 34235987
|
||||
binary_search_of_int32/8192 23 ns 23 ns 30444656
|
||||
guid_gen 6302 ns 6139 ns 113547
|
||||
shared_ptr_cpy 12 ns 12 ns 56257121
|
||||
alloc_free 27 ns 27 ns 26090707
|
||||
new_delete 19 ns 19 ns 37533496
|
||||
boost_pool 1 ns 1 ns 1000000000
|
||||
boost_object_pool 2 ns 2 ns 355797411
|
||||
protected_boost_pool 15 ns 15 ns 45520032
|
||||
boost_singleton_pool 38 ns 38 ns 18434739
|
||||
atomic_inc 6 ns 6 ns 112527844
|
||||
mem_copy/8 4 ns 4 ns 164561574 1.73705GB/s
|
||||
mem_copy/64 4 ns 4 ns 164581813 14.0167GB/s
|
||||
mem_copy/128 4 ns 4 ns 164619030 28.0289GB/s
|
||||
mem_copy/512 14 ns 14 ns 50947879 33.8911GB/s
|
||||
mem_copy/1024 30 ns 30 ns 23514125 31.6838GB/s
|
||||
mem_copy/8192 336 ns 336 ns 2083753 22.6921GB/s
|
||||
alloc_and_copy_from_pool 1 ns 1 ns 1000000000
|
||||
lambda_copy 39 ns 39 ns 18132412
|
||||
boost_pool_allocator 96 ns 96 ns 7326598
|
||||
queue_notification 5 ns 5 ns 142589437
|
||||
queue_notification2 6 ns 6 ns 112575651
|
||||
boost_lockless_queue 49 ns 49 ns 13287170
|
||||
moody_camel_queue 29 ns 29 ns 24188660
|
||||
moody_camel_fat_push 95 ns 95 ns 7354405
|
||||
boost_lockless_stack 44 ns 44 ns 15788696
|
||||
moody_camel_slim_push 89 ns 89 ns 7856017
|
||||
lambda_alloc_copy<NeighbourAddition> 7 ns 7 ns 97263743
|
||||
lambda_alloc_copy<NeighbourRemoval> 7 ns 7 ns 97123060
|
||||
lambda_alloc_copy<Advertisement> 7 ns 7 ns 97227678
|
||||
lambda_alloc_copy<Unadvertisement> 7 ns 7 ns 97224373
|
||||
lambda_alloc_copy<Subscription> 7 ns 7 ns 97186624
|
||||
lambda_alloc_copy<Unsubscription> 7 ns 7 ns 97246484
|
||||
lambda_alloc_copy<InternalSubscription> 7 ns 7 ns 97179666
|
||||
lambda_alloc_copy<InternalUnsubscription> 7 ns 7 ns 97138264
|
||||
simple_alloc_copy<NeighbourAddition> 4 ns 4 ns 194500344
|
||||
simple_alloc_copy<NeighbourRemoval> 3 ns 3 ns 256560908
|
||||
simple_alloc_copy<Advertisement> 4 ns 4 ns 194403696
|
||||
simple_alloc_copy<Unadvertisement> 3 ns 3 ns 267468747
|
||||
simple_alloc_copy<Subscription> 3 ns 3 ns 267340791
|
||||
simple_alloc_copy<Unsubscription> 3 ns 3 ns 237752654
|
||||
simple_alloc_copy<InternalSubscription> 4 ns 4 ns 178297581
|
||||
simple_alloc_copy<InternalUnsubscription> 3 ns 3 ns 267398457
|
||||
get_thread_id 5 ns 5 ns 152785800
|
||||
native_order_fix_data_create/8 19 ns 19 ns 37523830
|
||||
native_order_fix_data_create/64 19 ns 19 ns 36243824
|
||||
native_order_fix_data_create/512 19 ns 19 ns 36265679
|
||||
native_order_fix_data_create/4096 67 ns 67 ns 10475112
|
||||
native_order_fix_data_create/32768 59 ns 59 ns 11880862
|
||||
native_order_fix_data_create/131072 60 ns 60 ns 11755809
|
||||
native_order_fix_data_fragment 101 ns 101 ns 6957912
|
||||
small_vec 1 ns 1 ns 535005301
|
||||
@@ -1,301 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
||||
<head>
|
||||
<!-- 2018-10-08 Mon 18:50 -->
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>‎</title>
|
||||
<meta name="generator" content="Org mode" />
|
||||
<meta name="author" content="ppinto" />
|
||||
<style type="text/css">
|
||||
<!--/*--><![CDATA[/*><!--*/
|
||||
.title { text-align: center;
|
||||
margin-bottom: .2em; }
|
||||
.subtitle { text-align: center;
|
||||
font-size: medium;
|
||||
font-weight: bold;
|
||||
margin-top:0; }
|
||||
.todo { font-family: monospace; color: red; }
|
||||
.done { font-family: monospace; color: green; }
|
||||
.priority { font-family: monospace; color: orange; }
|
||||
.tag { background-color: #eee; font-family: monospace;
|
||||
padding: 2px; font-size: 80%; font-weight: normal; }
|
||||
.timestamp { color: #bebebe; }
|
||||
.timestamp-kwd { color: #5f9ea0; }
|
||||
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
|
||||
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
|
||||
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
|
||||
.underline { text-decoration: underline; }
|
||||
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
|
||||
p.verse { margin-left: 3%; }
|
||||
pre {
|
||||
border: 1px solid #ccc;
|
||||
box-shadow: 3px 3px 3px #eee;
|
||||
padding: 8pt;
|
||||
font-family: monospace;
|
||||
overflow: auto;
|
||||
margin: 1.2em;
|
||||
}
|
||||
pre.src {
|
||||
position: relative;
|
||||
overflow: visible;
|
||||
padding-top: 1.2em;
|
||||
}
|
||||
pre.src:before {
|
||||
display: none;
|
||||
position: absolute;
|
||||
background-color: white;
|
||||
top: -10px;
|
||||
right: 10px;
|
||||
padding: 3px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
pre.src:hover:before { display: inline;}
|
||||
/* Languages per Org manual */
|
||||
pre.src-asymptote:before { content: 'Asymptote'; }
|
||||
pre.src-awk:before { content: 'Awk'; }
|
||||
pre.src-C:before { content: 'C'; }
|
||||
/* pre.src-C++ doesn't work in CSS */
|
||||
pre.src-clojure:before { content: 'Clojure'; }
|
||||
pre.src-css:before { content: 'CSS'; }
|
||||
pre.src-D:before { content: 'D'; }
|
||||
pre.src-ditaa:before { content: 'ditaa'; }
|
||||
pre.src-dot:before { content: 'Graphviz'; }
|
||||
pre.src-calc:before { content: 'Emacs Calc'; }
|
||||
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
|
||||
pre.src-fortran:before { content: 'Fortran'; }
|
||||
pre.src-gnuplot:before { content: 'gnuplot'; }
|
||||
pre.src-haskell:before { content: 'Haskell'; }
|
||||
pre.src-hledger:before { content: 'hledger'; }
|
||||
pre.src-java:before { content: 'Java'; }
|
||||
pre.src-js:before { content: 'Javascript'; }
|
||||
pre.src-latex:before { content: 'LaTeX'; }
|
||||
pre.src-ledger:before { content: 'Ledger'; }
|
||||
pre.src-lisp:before { content: 'Lisp'; }
|
||||
pre.src-lilypond:before { content: 'Lilypond'; }
|
||||
pre.src-lua:before { content: 'Lua'; }
|
||||
pre.src-matlab:before { content: 'MATLAB'; }
|
||||
pre.src-mscgen:before { content: 'Mscgen'; }
|
||||
pre.src-ocaml:before { content: 'Objective Caml'; }
|
||||
pre.src-octave:before { content: 'Octave'; }
|
||||
pre.src-org:before { content: 'Org mode'; }
|
||||
pre.src-oz:before { content: 'OZ'; }
|
||||
pre.src-plantuml:before { content: 'Plantuml'; }
|
||||
pre.src-processing:before { content: 'Processing.js'; }
|
||||
pre.src-python:before { content: 'Python'; }
|
||||
pre.src-R:before { content: 'R'; }
|
||||
pre.src-ruby:before { content: 'Ruby'; }
|
||||
pre.src-sass:before { content: 'Sass'; }
|
||||
pre.src-scheme:before { content: 'Scheme'; }
|
||||
pre.src-screen:before { content: 'Gnu Screen'; }
|
||||
pre.src-sed:before { content: 'Sed'; }
|
||||
pre.src-sh:before { content: 'shell'; }
|
||||
pre.src-sql:before { content: 'SQL'; }
|
||||
pre.src-sqlite:before { content: 'SQLite'; }
|
||||
/* additional languages in org.el's org-babel-load-languages alist */
|
||||
pre.src-forth:before { content: 'Forth'; }
|
||||
pre.src-io:before { content: 'IO'; }
|
||||
pre.src-J:before { content: 'J'; }
|
||||
pre.src-makefile:before { content: 'Makefile'; }
|
||||
pre.src-maxima:before { content: 'Maxima'; }
|
||||
pre.src-perl:before { content: 'Perl'; }
|
||||
pre.src-picolisp:before { content: 'Pico Lisp'; }
|
||||
pre.src-scala:before { content: 'Scala'; }
|
||||
pre.src-shell:before { content: 'Shell Script'; }
|
||||
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
|
||||
/* additional language identifiers per "defun org-babel-execute"
|
||||
in ob-*.el */
|
||||
pre.src-cpp:before { content: 'C++'; }
|
||||
pre.src-abc:before { content: 'ABC'; }
|
||||
pre.src-coq:before { content: 'Coq'; }
|
||||
pre.src-groovy:before { content: 'Groovy'; }
|
||||
/* additional language identifiers from org-babel-shell-names in
|
||||
ob-shell.el: ob-shell is the only babel language using a lambda to put
|
||||
the execution function name together. */
|
||||
pre.src-bash:before { content: 'bash'; }
|
||||
pre.src-csh:before { content: 'csh'; }
|
||||
pre.src-ash:before { content: 'ash'; }
|
||||
pre.src-dash:before { content: 'dash'; }
|
||||
pre.src-ksh:before { content: 'ksh'; }
|
||||
pre.src-mksh:before { content: 'mksh'; }
|
||||
pre.src-posh:before { content: 'posh'; }
|
||||
/* Additional Emacs modes also supported by the LaTeX listings package */
|
||||
pre.src-ada:before { content: 'Ada'; }
|
||||
pre.src-asm:before { content: 'Assembler'; }
|
||||
pre.src-caml:before { content: 'Caml'; }
|
||||
pre.src-delphi:before { content: 'Delphi'; }
|
||||
pre.src-html:before { content: 'HTML'; }
|
||||
pre.src-idl:before { content: 'IDL'; }
|
||||
pre.src-mercury:before { content: 'Mercury'; }
|
||||
pre.src-metapost:before { content: 'MetaPost'; }
|
||||
pre.src-modula-2:before { content: 'Modula-2'; }
|
||||
pre.src-pascal:before { content: 'Pascal'; }
|
||||
pre.src-ps:before { content: 'PostScript'; }
|
||||
pre.src-prolog:before { content: 'Prolog'; }
|
||||
pre.src-simula:before { content: 'Simula'; }
|
||||
pre.src-tcl:before { content: 'tcl'; }
|
||||
pre.src-tex:before { content: 'TeX'; }
|
||||
pre.src-plain-tex:before { content: 'Plain TeX'; }
|
||||
pre.src-verilog:before { content: 'Verilog'; }
|
||||
pre.src-vhdl:before { content: 'VHDL'; }
|
||||
pre.src-xml:before { content: 'XML'; }
|
||||
pre.src-nxml:before { content: 'XML'; }
|
||||
/* add a generic configuration mode; LaTeX export needs an additional
|
||||
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
|
||||
pre.src-conf:before { content: 'Configuration File'; }
|
||||
|
||||
table { border-collapse:collapse; }
|
||||
caption.t-above { caption-side: top; }
|
||||
caption.t-bottom { caption-side: bottom; }
|
||||
td, th { vertical-align:top; }
|
||||
th.org-right { text-align: center; }
|
||||
th.org-left { text-align: center; }
|
||||
th.org-center { text-align: center; }
|
||||
td.org-right { text-align: right; }
|
||||
td.org-left { text-align: left; }
|
||||
td.org-center { text-align: center; }
|
||||
dt { font-weight: bold; }
|
||||
.footpara { display: inline; }
|
||||
.footdef { margin-bottom: 1em; }
|
||||
.figure { padding: 1em; }
|
||||
.figure p { text-align: center; }
|
||||
.inlinetask {
|
||||
padding: 10px;
|
||||
border: 2px solid gray;
|
||||
margin: 10px;
|
||||
background: #ffffcc;
|
||||
}
|
||||
#org-div-home-and-up
|
||||
{ text-align: right; font-size: 70%; white-space: nowrap; }
|
||||
textarea { overflow-x: auto; }
|
||||
.linenr { font-size: smaller }
|
||||
.code-highlighted { background-color: #ffff00; }
|
||||
.org-info-js_info-navigation { border-style: none; }
|
||||
#org-info-js_console-label
|
||||
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
|
||||
.org-info-js_search-highlight
|
||||
{ background-color: #ffff00; color: #000000; font-weight: bold; }
|
||||
.org-svg { width: 90%; }
|
||||
/*]]>*/-->
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
/*
|
||||
@licstart The following is the entire license notice for the
|
||||
JavaScript code in this tag.
|
||||
|
||||
Copyright (C) 2012-2018 Free Software Foundation, Inc.
|
||||
|
||||
The JavaScript code in this tag is free software: you can
|
||||
redistribute it and/or modify it under the terms of the GNU
|
||||
General Public License (GNU GPL) as published by the Free Software
|
||||
Foundation, either version 3 of the License, or (at your option)
|
||||
any later version. The code is distributed WITHOUT ANY WARRANTY;
|
||||
without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
|
||||
|
||||
As additional permission under GNU GPL version 3 section 7, you
|
||||
may distribute non-source (e.g., minimized or compacted) forms of
|
||||
that code without the copy of the GNU GPL normally required by
|
||||
section 4, provided you include this license notice and a URL
|
||||
through which recipients can access the Corresponding Source.
|
||||
|
||||
|
||||
@licend The above is the entire license notice
|
||||
for the JavaScript code in this tag.
|
||||
*/
|
||||
<!--/*--><![CDATA[/*><!--*/
|
||||
function CodeHighlightOn(elem, id)
|
||||
{
|
||||
var target = document.getElementById(id);
|
||||
if(null != target) {
|
||||
elem.cacheClassElem = elem.className;
|
||||
elem.cacheClassTarget = target.className;
|
||||
target.className = "code-highlighted";
|
||||
elem.className = "code-highlighted";
|
||||
}
|
||||
}
|
||||
function CodeHighlightOff(elem, id)
|
||||
{
|
||||
var target = document.getElementById(id);
|
||||
if(elem.cacheClassElem)
|
||||
elem.className = elem.cacheClassElem;
|
||||
if(elem.cacheClassTarget)
|
||||
target.className = elem.cacheClassTarget;
|
||||
}
|
||||
/*]]>*///-->
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<p>
|
||||
We are going to experiment with our development process, getting away
|
||||
from cycles and towards more continuous development. The main idea is
|
||||
to get rid of the prod and QA branches and instead deploy directly
|
||||
from master, which we keep deployment ready at all times. Development
|
||||
occurs on private branches, each branch mapped to a separately
|
||||
deploy-able project. Each of projects will be managed more or less
|
||||
independently and will include specification, development and
|
||||
validation stages. At any particular time we might have anywhere from
|
||||
1 to 6 projects in flight each of which continuously pulls from master,
|
||||
but does not push back to master until the code is ready to be
|
||||
deployed to production. The point at which a project is ready to be
|
||||
deployed then takes roughly the place of the QA phase of our old cycle
|
||||
mode. At this time, we will do a PR, and go through a series of
|
||||
validation steps, to make sure the work meets our standards. This
|
||||
validation includes:
|
||||
</p>
|
||||
|
||||
<ul class="org-ul">
|
||||
<li>Code Reviews</li>
|
||||
<li>Acceptance Testing (including UI and business tests)</li>
|
||||
<li>Automated System testing (to be developed)</li>
|
||||
<li>A mini-qa, focused on the feature, by someone not directly involved
|
||||
in its implementation</li>
|
||||
<li>If possible, deployment to a beta customer.</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Once these QA gates are passed, we will update the release notes, tag
|
||||
a new version, integrate to master and then ideally immediately deploy
|
||||
to a customer.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The main goal with this change is to reduce the latency from feature
|
||||
specification to production roll out. We also hope to improve
|
||||
throughput by making more efficient use of QA time and reducing idle
|
||||
cycles. We expect people to participate in more than one project
|
||||
depending on their area of expertise and work load. This does not mean
|
||||
people will work on two things at the same time, rather that people
|
||||
come into and leave projects as they free up and not when the project
|
||||
starts or ends.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This new scheme will come into full effect when we finish 1.3
|
||||
although to some degree 1.3 was already setup like this. At the
|
||||
moment, we have 3 major projects, vap/settlments/implied, grid
|
||||
settings and speed work, which are in branches of prod. We will merge
|
||||
these back to prod and then master this week. We have 3 other projects
|
||||
that are in master, the excel API, the server side SDK and the MIC
|
||||
administration and enforcement components. These we hope to stabilize
|
||||
as soon as possible so that we can merge them to prod and deploy them
|
||||
along with the rest. Once we have all this, prod and master should be
|
||||
identical and we will delete prod and operate exclusively out of
|
||||
master. Please avoid committing anything new to master so we can
|
||||
complete this transition as soon as possible.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Let me know if you have any question
|
||||
</p>
|
||||
</div>
|
||||
<div id="postamble" class="status">
|
||||
<p class="author">Author: ppinto</p>
|
||||
<p class="date">Created: 2018-10-08 Mon 18:50</p>
|
||||
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,82 +0,0 @@
|
||||
# The BTS Development Process #
|
||||
|
||||
## Projects ##
|
||||
Our development work is organized in projects. A project is a
|
||||
non-trivial effort to specify, develop and validate a related set of
|
||||
additions to our Spark platform. A project can be assigned to one more
|
||||
developers and a developer might concurrently be assigned to multiple
|
||||
projects. Projects typically start out with specification work,
|
||||
proceed to implementation and finish with validation efforts. At any
|
||||
given time there will be multiple projects being worked on
|
||||
concurrently. A project is concluded when the features it implements
|
||||
are merged into the product and deployed to customers.
|
||||
|
||||
## The Details ##
|
||||
Typically project ideas come from sales interactions, opposition
|
||||
research and customer feedback, all tough on occasion development or
|
||||
operational requirements can also suggest valuable project
|
||||
ideas. Whatever the source of a project idea the final decision of
|
||||
which projects to pursue is always done by management. Once a project
|
||||
idea has been selected for implementation the corresponding project
|
||||
will go through several phases: inception, specification, development,
|
||||
validation and merge.
|
||||
|
||||
* Inception. In this phase the infrastructure for the project is
|
||||
created. Typically this means selecting a team, creating a project
|
||||
case in Jira (that is a case assigned to the team@bluetradesys.com
|
||||
Jira user) and possibly creating a new branch for the project. This
|
||||
phase is mostly mechanical and the responsibility of Pedro.
|
||||
|
||||
* Specification. The specification phase turns a usually vague and
|
||||
ill-considered idea project idea into a concrete, implementable
|
||||
specification that attempts to maximize the value/cost ratio of the
|
||||
project. It is hard to exaggerate the impact of a this phase on the
|
||||
rest of the project. *Nothing* has more impact on BTS's ability to
|
||||
quickly deliver value to customers than good specification work. A
|
||||
specification typically takes the form of a shared google docs using
|
||||
a mix of text and UI mock-ups to capture both user requirements and
|
||||
suggested implementation strategies. Taha and Kevin are responsible for this
|
||||
phase.
|
||||
|
||||
* Development. Once a specification is complete, a team of developers
|
||||
will use a project specific branch to implement the
|
||||
specification. Periodically, typically once a week, progress on the
|
||||
project is assessed by Pedro, possibly with the help of others. This
|
||||
assessment takes the form of code reviews, demos, or just one-on-one
|
||||
conversations. To ensure development does not go off on tangents,
|
||||
developers are expected to continuously merge master into the project
|
||||
branch as well as encouraged to create Pull Requests (PRs) early in
|
||||
the project implementation, so that their work is kept visible and
|
||||
integrated with that of the rest of the group. During the
|
||||
implementation phase developers should reach out to Pedro for UI
|
||||
reviews, architecture and design questions and specification trade off
|
||||
concerns.
|
||||
|
||||
* Verification. Once code is complete it is the project's team job to
|
||||
think carefully about the best way to verify that the work is solid
|
||||
enough to go to production. We do not have a dedicated QA cycle to
|
||||
flush out bugs so it is important for changes to be fully tested
|
||||
before being marked ready to merge (RTM). For any non-trivial change
|
||||
project teams should enlist a 'test buddy' from outside the team to
|
||||
help review the code and think of test cases that they may not have
|
||||
considered. Stability from release to release is especially critical
|
||||
right now as we develop a reputation in the futures
|
||||
world. Additionally, project teams are encouraged to make liberal use
|
||||
of other testing techniques such as
|
||||
- Unit tests
|
||||
- System tests
|
||||
- Manual tests
|
||||
|
||||
* Merge. Once a project is considered complete by developers, a PR
|
||||
that includes Pedro should be created (unless, as mentioned above, an
|
||||
early PR was already created in the development phase). Whether the PR
|
||||
already existed or not, its description should be changed to start
|
||||
with the RTM (Ready To Merge) acronym. This marks the project as ready
|
||||
to be merged into master. Once a week, typically on Mondays, Pedro
|
||||
will go through every PR marked as "Ready To Merge", build it, check
|
||||
it out and if everything looks good merge it to master. At the end of
|
||||
the day the resulting master will be tagged with a new version
|
||||
number. This version will be go through some additional testing by
|
||||
Brian and will then be deployed by Karl and Pete to customers
|
||||
throughout the rest of the week.
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
We are going to experiment with our development process, getting away
|
||||
from cycles and towards more continuous development. The main idea is
|
||||
to get rid of the prod and QA branches and instead deploy directly
|
||||
from master, which we keep deployment ready at all times. Development
|
||||
occurs on private branches, each branch mapped to a separately
|
||||
deploy-able project. Each of projects will be managed more or less
|
||||
independently and will include specification, development and
|
||||
validation stages. At any particular time we might have anywhere from
|
||||
1 to 6 projects in flight each of which continuously pulls from master,
|
||||
but does not push back to master until the code is ready to be
|
||||
deployed to production. The point at which a project is ready to be
|
||||
deployed then takes roughly the place of the QA phase of our old cycle
|
||||
mode. At this time, we will do a PR, and go through a series of
|
||||
validation steps, to make sure the work meets our standards. This
|
||||
validation includes:
|
||||
|
||||
- Code Reviews
|
||||
- Acceptance Testing (including UI and business tests)
|
||||
- Automated System testing (to be developed)
|
||||
- A mini-qa, focused on the feature, by someone not directly involved
|
||||
in its implementation
|
||||
- If possible, deployment to a beta customer.
|
||||
|
||||
Once these QA gates are passed, we will update the release notes, tag
|
||||
a new version, integrate to master and then ideally immediately deploy
|
||||
to a customer.
|
||||
|
||||
The main goal with this change is to reduce the latency from feature
|
||||
specification to production roll out. We also hope to improve
|
||||
throughput by making more efficient use of QA time and reducing idle
|
||||
cycles. We expect people to participate in more than one project
|
||||
depending on their area of expertise and work load. This does not mean
|
||||
people will work on two things at the same time, rather that people
|
||||
come into and leave projects as they free up and not when the project
|
||||
starts or ends.
|
||||
|
||||
This new scheme will come into full effect when we finish 1.3
|
||||
although to some degree 1.3 was already setup like this. At the
|
||||
moment, we have 3 major projects, vap/settlments/implied, grid
|
||||
settings and speed work, which are in branches of prod. We will merge
|
||||
these back to prod and then master this week. We have 3 other projects
|
||||
that are in master, the excel API, the server side SDK and the MIC
|
||||
administration and enforcement components. These we hope to stabilize
|
||||
as soon as possible so that we can merge them to prod and deploy them
|
||||
along with the rest. Once we have all this, prod and master should be
|
||||
identical and we will delete prod and operate exclusively out of
|
||||
master. Please avoid committing anything new to master so we can
|
||||
complete this transition as soon as possible.
|
||||
|
||||
Let me know if you have any question
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
set(sources /home/ppinto/Dropbox/bts/spark/doc/user/build.sh;content/_index.md;content/bts_spark/Glossary/_index.md;content/bts_spark/Help/_index.md;content/bts_spark/Help/about_spark.png;content/bts_spark/Help/image39.png;content/bts_spark/Help/image58.png;content/bts_spark/Launcher/_index.md;content/bts_spark/Launcher/image38.png;content/bts_spark/Launcher/image68.png;content/bts_spark/Logging-In-to-the-System/_index.md;content/bts_spark/Logging-In-to-the-System/image3.png;content/bts_spark/Logging-In-to-the-System/image64.png;content/bts_spark/Market/_index.md;content/bts_spark/Market/change_securities.png;content/bts_spark/Market/image11.png;content/bts_spark/Market/image14.png;content/bts_spark/Market/image20.png;content/bts_spark/Market/image21.png;content/bts_spark/Market/image23.png;content/bts_spark/Market/image24.png;content/bts_spark/Market/image34.png;content/bts_spark/Market/image49.png;content/bts_spark/Market/image53.png;content/bts_spark/Market/image66.png;content/bts_spark/Market/image69.png;content/bts_spark/Market/market_view.png;content/bts_spark/Market/settings_icon.png;content/bts_spark/Market/time_and_sales.png;content/bts_spark/My-Windows/_index.md;content/bts_spark/My-Windows/image15.png;content/bts_spark/My-Windows/image16.png;content/bts_spark/My-Windows/image37.png;content/bts_spark/Settings/_index.md;content/bts_spark/Settings/image51.png;content/bts_spark/Settings/image9.png;content/bts_spark/Spreader/_index.md;content/bts_spark/Spreader/image10.png;content/bts_spark/Spreader/image13.png;content/bts_spark/Spreader/image18.png;content/bts_spark/Spreader/image19.png;content/bts_spark/Spreader/image28.png;content/bts_spark/Spreader/image29.png;content/bts_spark/Spreader/image31.png;content/bts_spark/Spreader/image35.png;content/bts_spark/Spreader/image40.png;content/bts_spark/Spreader/image43.png;content/bts_spark/Spreader/image54.png;content/bts_spark/Spreader/image55.png;content/bts_spark/Spreader/image56.png;content/bts_spark/Spreader/image6.png;content/bts_spark/Spreader/image7.png;content/bts_spark/Spreader/image70.png;content/bts_spark/Spreader/image72.png;content/bts_spark/Spreader/image8.png;content/bts_spark/Trading/OrderTypes/index.md;content/bts_spark/Trading/_index.md;content/bts_spark/Trading/algo_studio.png;content/bts_spark/Trading/collapse_all_icon.png;content/bts_spark/Trading/cover_algo_control.png;content/bts_spark/Trading/expand_all_icon.png;content/bts_spark/Trading/image1.png;content/bts_spark/Trading/image17.png;content/bts_spark/Trading/image2.png;content/bts_spark/Trading/image25.png;content/bts_spark/Trading/image27.png;content/bts_spark/Trading/image33.png;content/bts_spark/Trading/image42.png;content/bts_spark/Trading/image44.png;content/bts_spark/Trading/image47.png;content/bts_spark/Trading/image48.png;content/bts_spark/Trading/image5.png;content/bts_spark/Trading/image50.png;content/bts_spark/Trading/image52.png;content/bts_spark/Trading/image57.png;content/bts_spark/Trading/image59.png;content/bts_spark/Trading/image60.png;content/bts_spark/Trading/image61.png;content/bts_spark/Trading/image62.png;content/bts_spark/Trading/image73.png;content/bts_spark/Trading/image74.png;content/bts_spark/Trading/join_algo_control.png;content/bts_spark/Trading/ladder.png;content/bts_spark/Trading/ladder_badges.png;content/bts_spark/Trading/ladder_main_part.png;content/bts_spark/Trading/lean_algo_control.png;content/bts_spark/Trading/mini_orderbook.png;content/bts_spark/Trading/oco_algo_control.png;content/bts_spark/Trading/offset_algo_control.png;content/bts_spark/Trading/pnl_calculation.png;content/bts_spark/Trading/pnl_window.png;content/bts_spark/Trading/recreate_icon.png;content/bts_spark/Trading/settings_icon.png;content/bts_spark/Trading/spark_menu_order_book.png;content/bts_spark/Trading/top_algo_control.png;content/bts_spark/Trading/trigger_algo_control.png;content/bts_spark/_index.md;content/release_notes/_index.md;content/system_requirements/_index.md;static/book.js;static/favicon.ico;static/image.js;templates/index.html;templates/page.html;templates/section.html;templates/shortcodes/back_button.html)
|
||||
@@ -1,31 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
project(doc)
|
||||
|
||||
include(${CMAKE_SOURCE_DIR}/tools/safe_dep_glob.cmake)
|
||||
include(${CMAKE_SOURCE_DIR}/tools/Protobuf.cmake)
|
||||
|
||||
# DEPENDENCIES
|
||||
set(DOC_GLOBS
|
||||
*.md
|
||||
*.jpeg
|
||||
*.png
|
||||
*.html
|
||||
*.css
|
||||
*.js
|
||||
*.eot
|
||||
favicon.ico
|
||||
)
|
||||
file (GLOB_RECURSE All_Deps RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${DOC_GLOBS})
|
||||
set (All_Deps ${All_Deps} ${CMAKE_CURRENT_SOURCE_DIR}/build.sh)
|
||||
update_deps_file("${All_Deps}")
|
||||
# END DEPENDENCIES
|
||||
|
||||
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/web/docs/index.html
|
||||
COMMAND /bin/bash ${CMAKE_CURRENT_SOURCE_DIR}/build.sh
|
||||
ARGS ${CMAKE_BINARY_DIR}/web/docs/ ${CMAKE_BINARY_DIR}
|
||||
COMMENT "Building Manual UI"
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
DEPENDS ${All_Deps})
|
||||
|
||||
add_custom_target(doc_manual_bundle ALL DEPENDS ${CMAKE_BINARY_DIR}/web/docs/index.html)
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
#!/bin/bash
|
||||
tmpfile=$(mktemp /tmp/quiet_build_log.XXXX)
|
||||
|
||||
cur_dir=$(pwd)
|
||||
temp_path="$2/web_temp"
|
||||
zola_path=$(readlink -f "../../externals/linux/bin/zola/zola")
|
||||
|
||||
mkdir -p $temp_path
|
||||
cp -r ./* $temp_path
|
||||
|
||||
cd $temp_path
|
||||
$zola_path build -u '/docs/' -o $1 >$tmpfile 2>&1
|
||||
|
||||
cd $cur_dir
|
||||
rm -r $temp_path
|
||||
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
rm $tmpfile
|
||||
exit 0
|
||||
else
|
||||
cat $tmpfile
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,18 +0,0 @@
|
||||
# The URL the site will be built for
|
||||
base_url = "https://www.bluetradingsystems.com/documentation"
|
||||
|
||||
title = "BTS Spark Documentation"
|
||||
|
||||
# Whether to automatically compile all Sass files in the sass directory
|
||||
compile_sass = true
|
||||
|
||||
# Whether to do syntax highlighting
|
||||
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
|
||||
highlight_code = true
|
||||
|
||||
# Whether to build a search index to be used later on by a JavaScript library
|
||||
build_search_index = true
|
||||
|
||||
[extra]
|
||||
# Put all your custom variables here
|
||||
book_numbered_chapters = false
|
||||
@@ -1,3 +0,0 @@
|
||||
+++
|
||||
redirect_to = "bts_spark"
|
||||
+++
|
||||
@@ -1,31 +0,0 @@
|
||||
+++
|
||||
title = "Glossary of Terms"
|
||||
weight = 9
|
||||
sort_by = "weight"
|
||||
insert_anchor_links = "right"
|
||||
|
||||
|
||||
[extra]
|
||||
page_description = "Definitions of common terms used in BTS Spark and this manual"
|
||||
+++
|
||||
|
||||
|
||||
## Trading Terms
|
||||
|
||||
### Child Order
|
||||
|
||||
The order to be created when an algo is triggered.
|
||||
|
||||
{{ back_button() }}
|
||||
|
||||
### Cross
|
||||
Take an order working on the bid and 'cross' by buying into the asks. This is often referred to as “paying up” as well.
|
||||
|
||||
{{ back_button() }}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Make sure to leave this at the bottom of the page -->
|
||||
<p style="margin-top:2000px;"></p>
|
||||
@@ -1,37 +0,0 @@
|
||||
+++
|
||||
title = "Help"
|
||||
weight = 3
|
||||
sort_by = "weight"
|
||||
insert_anchor_links = "right"
|
||||
|
||||
[extra]
|
||||
page_description = "Report a problem or find the activity log from the Help module in BTS Spark"
|
||||
+++
|
||||
|
||||
{{ youtube(id="yGQfr_puT3w") }}
|
||||
|
||||
## Report a Problem
|
||||
If there is any issue at all, you can click here
|
||||
and it’ll bring up a “Report a Problem” window, which you can type
|
||||
in the issues you might be facing, provide an email or phone number,
|
||||
and also the option of including a screenshot. Then upon clicking
|
||||
send, BTS will get an alert of everything you submitted and will be
|
||||
in contact with you shortly.
|
||||
|
||||
{{ image(name="image58.png", alt="screenshot") }}
|
||||
|
||||
## About Spark
|
||||
Upon launching this, you will see an info window
|
||||
which will list what version you are running as well as who is
|
||||
currently logged in.
|
||||
|
||||
{{ image(name="about_spark.png", alt="screenshot") }}
|
||||
|
||||
## Activity log
|
||||
This is an overall log viewer which will show
|
||||
everything that is going on in terms of orders, fills, cancels,
|
||||
modifications, and warning. You also have the ability to filter out
|
||||
messages in a text box in the right top corner.
|
||||
|
||||
|
||||
{{ image(name="image39.png", alt="screenshot") }}
|
||||
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 13 KiB |
@@ -1,40 +0,0 @@
|
||||
+++
|
||||
title = "Launcher"
|
||||
weight = 2
|
||||
sort_by = "weight"
|
||||
insert_anchor_links = "right"
|
||||
|
||||
[extra]
|
||||
page_description = "The basics of the BTS Spark launcher and user interface"
|
||||
+++
|
||||
|
||||
|
||||
{{ youtube(id="OxVqQBKFIDw") }}
|
||||
|
||||
- The module launcher is the first item that will come up after
|
||||
logging in to Spark.
|
||||
- This is your central control for all modules
|
||||
- You can launch all modules within Spark from here by hovering over
|
||||
each module
|
||||
- It appears like the following:
|
||||
|
||||
{{ image(name="image38.png", alt="screenshot") }}
|
||||
|
||||
- If you right-click anywhere on the launcher you can modify
|
||||
various display settings including:
|
||||
- Vertical layout, instead of horizontal
|
||||
- Showing the text of the individual modules
|
||||
- Having the launcher visible above other windows
|
||||
- Spark information
|
||||
- Ability to exit the front end, this can also be done by simply clicking the “X” on the top right of this window or by clicking on exit from this options window
|
||||
- These options are all displayed like the following:
|
||||
|
||||
{{ image(name="image68.png", alt="screenshot") }}
|
||||
|
||||
## Spark User interface
|
||||
|
||||
Some common features within BTS Spark
|
||||
|
||||
- All Windows are tabbed so they can be combined or separated to organize your workspace
|
||||
- Some Spark windows have a menu on the left-hand side where you can launch related modules or change settings. You can see the menu item names either by hovering your mouse over the icon or clicking on the right edge of the menu (a blue bar will appear).
|
||||
- Some table columns have filtering capabilities, where if you hover over the column header, it will display a filter icon, which enables you to filter the table based on the information in that column.
|
||||
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 23 KiB |
@@ -1,23 +0,0 @@
|
||||
+++
|
||||
title = "Logging in to the system"
|
||||
weight = 1
|
||||
sort_by = "weight"
|
||||
insert_anchor_links = "right"
|
||||
|
||||
[extra]
|
||||
page_description = "How to log into BTS Spark"
|
||||
+++
|
||||
|
||||
|
||||
The shortcut icon will appear on your desktop like below:
|
||||
|
||||
{{ image(name="image64.png", alt="BTS icon") }}
|
||||
|
||||
Simply double click or single click and hit enter to launch the
|
||||
login screen:
|
||||
|
||||
{{ image(name="image3.png", alt="login screen") }}
|
||||
|
||||
|
||||
Choose your username from the drop down, choose your initial
|
||||
workspace, enter your password, and click Login
|
||||
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
@@ -1,167 +0,0 @@
|
||||
+++
|
||||
title = "Market"
|
||||
weight = 4
|
||||
sort_by = "weight"
|
||||
insert_anchor_links = "right"
|
||||
|
||||
[extra]
|
||||
page_description = "The BTS Spark Market module contains the Market View and Time and Sales windows"
|
||||
+++
|
||||
|
||||
|
||||
- This is one of the main items on the module launcher
|
||||
- When hovering over it, it will show 2 different modules which can
|
||||
be launched from it, market view and then, time and sales
|
||||
|
||||
|
||||
{{ image(name="image53.png", alt="screenshot") }}
|
||||
|
||||
## Market View
|
||||
|
||||
{{ youtube(id="Y54S1uscT_g") }}
|
||||
|
||||
- This provides a grid of outright, spread, and synthetic products
|
||||
showing real-time market data all in one place
|
||||
- You can create multiple market view grids and customize the
|
||||
security selection to fit your needs
|
||||
- All market views are brought up as tabs and can be combined with
|
||||
all other windows within BTS
|
||||
- You choose which products you would like to view upon launching it,
|
||||
the security browser will appear as shown below:
|
||||
|
||||
{{ image(name="image21.png", alt="security picker") }}
|
||||
|
||||
- Click on individual securities that you wish to view and click add,
|
||||
they will then show up in the selected securities window below. If
|
||||
you wish to remove a security, simply highlight and click remove to
|
||||
the right of the selected securities window.
|
||||
- If you would like to view all securities for a particular product,
|
||||
you can click on the symbol and leave the securities section alone
|
||||
and all securities will be displayed. This will show up in the
|
||||
selected securities window as “<symbol> future at
|
||||
<exchange>”
|
||||
- Synthetics can be displayed by clicking on exchange “BTS”, then
|
||||
synthetic, symbol, and finally under the securities window.
|
||||
- Below is an example of an outright, spread, all futures, and
|
||||
synthetic chosen:
|
||||
|
||||
{{ image(name="image14.png", alt="screenshot") }}
|
||||
|
||||
- Clicking OK will bring up the Market View with the selected
|
||||
securities you have chosen, in this example, it appears like the
|
||||
following:
|
||||
|
||||
{{ image(name="market_view.png", alt="screenshot") }}
|
||||
|
||||
- Once a market view is launched and you are viewing data, you can
|
||||
customize the view further by the following:
|
||||
|
||||
- Sorting - by single left clicking on any of the column headers
|
||||
it’ll sort that column in either descending or ascending order
|
||||
- Filtering - by hovering over the column header, a filtering box
|
||||
will appear like below:
|
||||
|
||||
{{ image(name="image66.png", alt="screenshot") }}
|
||||
|
||||
- All columns let you sort by that columns minimum and maximum
|
||||
information in a box that appears like the following:
|
||||
|
||||
{{ image(name="image24.png", alt="screenshot") }}
|
||||
|
||||
- Specifically for the securities column, there is a search box that
|
||||
will appear by bringing up the filtering box, which enables users to
|
||||
type the security in which they are looking for. This appears like
|
||||
the following:
|
||||
|
||||
{{ image(name="image11.png", alt="screenshot") }}
|
||||
|
||||
- Besides viewing the market data, you can do a lot within the market
|
||||
view by utilizing the icons to the left of the main window, these
|
||||
include:
|
||||
|
||||
- Change securities
|
||||
- Launch a ladder for one or more securities
|
||||
- Launch an order ticket
|
||||
- Launch a fills window for one or more securities
|
||||
- Launch a time and sales for one or more securities
|
||||
- Launching the synthetic window to create a synthetic product
|
||||
|
||||
- Change securities
|
||||
|
||||
- Click on the settings icon {{ image(name="change_securities.png", alt="screenshot") }} which will launch the market view security selection. You can add or remove Securities you have already selected and are shown in the market view.
|
||||
|
||||
- Launch an order ticket
|
||||
- This is done 1 of 3 ways:
|
||||
- Single left clicking on either the Bid Qty, Bid Price, Ask Price,
|
||||
or Ask Qty which will bring up an order ticket pre-populated with
|
||||
either the Bid or Ask price and volume.
|
||||
- Highlighting a single security and clicking on the order ticket
|
||||
{{ image(name="image23.png", alt="screenshot") }} icon
|
||||
on the left-hand browser window of the market view
|
||||
- Highlighting a single security and right clicking bringing up the
|
||||
menu options to launch an order ticket.
|
||||
|
||||
- Launch a ladder for 1 security
|
||||
- This is done 1 of 2 ways:
|
||||
- You can double-click on any security in the market view, besides
|
||||
the Bid Qty, Bid Price, Ask Price, or Ask Qty columns to launch a
|
||||
ladder for that Security.
|
||||
- Highlighting a single security and right clicking bringing up the
|
||||
menu options to launch a ladder.
|
||||
|
||||
- Launching multiple ladders
|
||||
- This is done 1 of 2 ways:
|
||||
- If you hold down the Ctrl key and select multiple securities, you
|
||||
can then click on the ladder icon on the left hand side to bring
|
||||
up the selected ladders all at once.
|
||||
- Highlighting multiple securities and right clicking to bring up
|
||||
the menu options to launch a ladder.
|
||||
|
||||
- Launching a Fills window for 1 or many securities
|
||||
|
||||
- This is done by either highlighting 1 or many securities and then
|
||||
clicking on the Fills icon
|
||||
{{ image(name="image20.png", alt="screenshot") }} on
|
||||
the left-hand side to bring up a fill window for the selected
|
||||
securities.
|
||||
|
||||
- Please note - If there haven’t been any fills for the day in that
|
||||
particular security, an empty fill window will be displayed
|
||||
|
||||
- Launching Time and Sales for 1 or many securities
|
||||
|
||||
- This is accomplished by highlighting 1 or many securities and then
|
||||
clicking on the time and sales icon
|
||||
{{ image(name="image49.png", alt="screenshot") }} on
|
||||
the left-hand side
|
||||
|
||||
- Launching the synthetic window to create a synthetic product
|
||||
|
||||
- This is accomplished by highlighting either 1 or 2 securities and
|
||||
clicking on the Synthetic icon
|
||||
{{ image(name="image34.png", alt="screenshot") }} on
|
||||
the lower left-hand side
|
||||
|
||||
- Please note - If only 1 security is chosen, a create synthetic
|
||||
window will appear, and you will be required to add another leg from
|
||||
that window to create the synthetic
|
||||
|
||||
## Time and Sales
|
||||
|
||||
{{ youtube(id="nEkSGacjt0s") }}
|
||||
|
||||
- Provides a display of real-time fills as they happen for 1 or many
|
||||
securities
|
||||
- You can create multiple time and sale windows and customize the
|
||||
security selection to fit your needs
|
||||
- All time and sales are in brought up as tabs and can be combined
|
||||
with all other windows within BTS
|
||||
- On launching a security browser will appear, allowing you to choose
|
||||
the products you would like to view.
|
||||
|
||||
{{ image(name="time_and_sales.png", alt="screenshot") }}
|
||||
|
||||
- From time and sales, you can launch the same items as the market
|
||||
view with the exception of a launching the synthetic window to
|
||||
create a synthetic product
|
||||
- From the settings icon {{ image(name="settings_icon.png", alt="screenshot") }} you can customize the time and sales modifying grid; the colors of the aggressor, status of trades coming in, as well as font sizes and which columns to see.
|
||||
|
Before Width: | Height: | Size: 942 B |
|
Before Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 837 B |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 805 B |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 99 KiB |
@@ -1,37 +0,0 @@
|
||||
+++
|
||||
title = "My Windows"
|
||||
weight = 7
|
||||
sort_by = "weight"
|
||||
insert_anchor_links = "right"
|
||||
|
||||
[extra]
|
||||
page_description = "Name and load windows with the My Windows module in BTS Spark"
|
||||
+++
|
||||
|
||||
|
||||
{{ youtube(id="pjm1JJ9Q3jM") }}
|
||||
|
||||
This is the housing of the windows that you have manually named and
|
||||
creates a place where you can quickly and easily launch windows
|
||||
which you’ve customized.
|
||||
|
||||
To give a specific tab or window a name of your choice, simply right
|
||||
click on any tab and the “Add to My Windows” menu will appear. If you
|
||||
click on Add to My Windows, it will give you the ability to type in a
|
||||
text box on the tab itself.
|
||||
|
||||
{{ image(name="image16.png", alt="screenshot") }}
|
||||
|
||||
Once you have named the tab, click enter to get out of the editing view
|
||||
of the text box. Once that is done, it will display that name for that
|
||||
tab moving forward, which will be displayed within the My Windows
|
||||
section of the module launcher.
|
||||
|
||||
{{ image(name="image15.png", alt="screenshot") }}
|
||||
|
||||
Right-clicking on a tab that has already had its default title modified
|
||||
will show the following which will allow you to rename the modified
|
||||
title or remove it from the My Windows, which will then restore the
|
||||
default standard title.
|
||||
|
||||
{{ image(name="image37.png", alt="screenshot") }}
|
||||
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.7 KiB |
@@ -1,30 +0,0 @@
|
||||
+++
|
||||
title = "Settings"
|
||||
weight = 8
|
||||
sort_by = "weight"
|
||||
insert_anchor_links = "right"
|
||||
|
||||
|
||||
[extra]
|
||||
page_description = "The BTS Spark Settings module and workspaces management"
|
||||
+++
|
||||
|
||||
{{ youtube(id="yGQfr_puT3w") }}
|
||||
|
||||
## Workspaces
|
||||
|
||||
This is where your workspaces can be saved or switched
|
||||
to pre-saved ones that you have created. If you click on the
|
||||
Settings module, the Workspaces
|
||||
|
||||
{{ image(name="image9.png", alt="screenshot") }}
|
||||
|
||||
Once the Workspace menu is launched you can save your current workspace
|
||||
by typing in a name in the text box and clicking save. This will save
|
||||
your workspace as is so you can launch it directly upon logging in or
|
||||
switching to it from the workspace launcher later on.
|
||||
|
||||
You can also delete workspaces by clicking on the “X” to the right of
|
||||
the saved workspace from the workspace menu.
|
||||
|
||||
{{ image(name="image51.png", alt="screenshot") }}
|
||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 27 KiB |
@@ -1,177 +0,0 @@
|
||||
+++
|
||||
title = "Spreader"
|
||||
weight = 6
|
||||
sort_by = "weight"
|
||||
insert_anchor_links = "right"
|
||||
[extra]
|
||||
page_description = "How to create and edit synthetic spreads in BTS Spark's spreader"
|
||||
+++
|
||||
|
||||
{{ youtube(id="RZU9Wj0cETo") }}
|
||||
{{ youtube(id="XEZpuPAgMC0") }}
|
||||
{{ youtube(id="EVFK2yNQFS4") }}
|
||||
{{ youtube(id="d5ywlHen6yo") }}
|
||||
{{ youtube(id="Mmw8PNJA0Dw") }}
|
||||
{{ youtube(id="QK-bBSH6Rc0") }}
|
||||
|
||||
- Launching the spreader from the launcher will bring up the
|
||||
synthetic management browser which appears like below:
|
||||
|
||||
{{ image(name="image35.png", alt="screenshot") }}
|
||||
|
||||
- From this window, it will show any synthetics that you have already
|
||||
created as well as various other options of both managing the
|
||||
synthetics and other tasks all from the left-hand side pane within
|
||||
the window, including:
|
||||
|
||||
- Adding a new synthetic {{ image(name="image8.png", alt="screenshot") }}
|
||||
- Removing a synthetic {{ image(name="image13.png", alt="screenshot") }}
|
||||
- Changing a synthetic {{ image(name="image55.png", alt="screenshot") }}
|
||||
- Cloning a synthetic {{ image(name="image28.png", alt="screenshot") }}
|
||||
- Launching a ladder of a highlighted synthetic {{ image(name="image7.png", alt="screenshot") }}
|
||||
- Launching an order book of selected synthetic {{ image(name="image43.png", alt="screenshot") }}
|
||||
|
||||
|
||||
|
||||
## Creating a synthetic
|
||||
|
||||
|
||||
|
||||
- Bringing up a synthetic browser to create a new synthetic can be
|
||||
done from a number of ways:
|
||||
|
||||
- From the main module launcher, you can go to spreader, then
|
||||
synthetics, then click add
|
||||
- Highlighting one or more securities in a market view and clicking
|
||||
on Create Synthetic
|
||||
- Cloning an existing security
|
||||
|
||||
- An empty synthetic browser will look like below without any legs
|
||||
chosen:
|
||||
|
||||
{{ image(name="image31.png", alt="screenshot") }}
|
||||
|
||||
- Clicking on Add Leg on the top right of the window will launch the
|
||||
security browser, which will allow you to choose the first leg
|
||||
- Upon adding legs, you can then go through each of the parameters to
|
||||
customize how you would like the spread to be worked in the
|
||||
market
|
||||
- We will start at the top of the Create Synthetic window and work our way
|
||||
down:
|
||||
|
||||
- At the very top of the Create Synthetic window you will have to
|
||||
name your synthetic product. By default, it will auto-populate
|
||||
based on the symbols you have chosen:
|
||||
|
||||
{{ image(name="image29.png", alt="screenshot") }}
|
||||
|
||||
- You can click into the text box to the right of the name and
|
||||
customize the name to be whatever you would like, we’ll call this
|
||||
ES\_CAL:
|
||||
|
||||
{{ image(name="image19.png", alt="screenshot") }}
|
||||
|
||||
- Also included on this row are what ticks you would like this to be
|
||||
priced in as well as the format of the pricing
|
||||
- Moving down within this window, you’ll see the symbols you have
|
||||
chosen which you can remove by clicking on the X to the left as well
|
||||
as the option to add additional legs through the add leg box to the
|
||||
right of the symbols:
|
||||
|
||||
{{ image(name="image18.png", alt="screenshot") }}
|
||||
|
||||
- The following rows are all part of the main parameters which can
|
||||
all be modified according to the traders style of designing the
|
||||
synthetic and how it will be priced as well as worked at the
|
||||
exchange
|
||||
- Furthermore, if you are ever unsure of what a parameter’s function
|
||||
is and how it is controlled you can hover over the parameter’s title
|
||||
and a “?” will be shown. Clicking on this will expand built-in
|
||||
details of how that parameter functions. Below is an example of the
|
||||
throttle details displayed:
|
||||
|
||||
{{ image(name="image56.png", alt="screenshot") }}
|
||||
|
||||
- Main parameters - these are the top 4 rows in the Create Synthetic
|
||||
window which all synthetics will be required to have set.
|
||||
Everything below these can be customized to a trader's needs, however, the top 4 are the main foundational aspects used for the calculation of
|
||||
the synthetic:
|
||||
|
||||
{{ image(name="image10.png", alt="screenshot") }}
|
||||
|
||||
- Quantity - This is the number of contracts of the security you
|
||||
would like to be included in the calculation of the synthetic as
|
||||
well as a buy or sell. By default, the first leg will come up as a
|
||||
buy and the second leg a sell. Sells are represented “-1”
|
||||
- Price multiplier - This is multiplier at which the synthetic will
|
||||
be priced, by default, it’ll be based on the same as the quantity of
|
||||
the synthetic produced, but you can change it to modify the balance
|
||||
of the price, giving more weighting to one leg over another.
|
||||
- Enable quoting - This parameter is in the form of a checkbox,
|
||||
where if the box is checked the leg will be quoted versus not
|
||||
checked, it will not be shown in the market. If it is not actively
|
||||
quoted in the market, the leg will still be used for calculation of
|
||||
the entire synthetic.
|
||||
- Hedge ratio - This is the ratio multiplier that defines how much
|
||||
volume you require in that leg before leaning off it. For example,
|
||||
if you are looking to buy 4 ES and sell 2 NQ, if your hedge ratio is
|
||||
1, you will work the ES leg at where you could get filled on 2 NQ.
|
||||
If your Hedge Ratio is 3 on the NQ leg, then you’ll work the ES
|
||||
order based on where you could fill 6 (2 (Qty of NQ) \* 3 (Hedge
|
||||
Ratio)).
|
||||
- The next 6 parameters are all completely custom to a trader's needs
|
||||
and can further define how a synthetic is worked. As previously
|
||||
mentioned, if you hover over any of these parameters a “?” will be
|
||||
displayed and click on such will display further details on how this
|
||||
parameter is used:
|
||||
|
||||
{{ image(name="image72.png", alt="screenshot") }}
|
||||
|
||||
- Quote
|
||||
|
||||
- Throttle - This can be enabled or disabled based on if the box is
|
||||
checked per leg. Its main function is to reduce re-quoting updates
|
||||
by defining a region on either side of the working quote order,
|
||||
inside which quote updates will not be sent:
|
||||
|
||||
{{ image(name="image6.png", alt="screenshot") }}
|
||||
|
||||
- Pre-Hedge
|
||||
|
||||
- Pay Less - If enabled by checking the checkbox, the spreader will
|
||||
attempt to pay less when the quantity at the level of the calculated
|
||||
hedge price is less than the threshold defined. The hedge order is
|
||||
paid less by the “Payless Ticks” as defined per leg.
|
||||
- Pay Up - If enabled by checking the checkbox, the spreader will pay
|
||||
up when the quantity at the level of the calculated hedge price is
|
||||
more than the threshold defined. The hedge order will pay up by the
|
||||
“Payup Ticks” as defined per leg.
|
||||
|
||||
{{ image(name="image54.png", alt="screenshot") }}
|
||||
|
||||
- Post-Hedge
|
||||
|
||||
- Ticks Away Cross - If enabled by checking the checkbox, the
|
||||
spreader will force hedging orders to automatically cross (fill) the
|
||||
market if they get too far away from the opposite inside market. If
|
||||
a legged hedge order’s price gets X amount of “ticks” away from the
|
||||
opposite inside market, it is re-priced to cross the opposite inside
|
||||
market as defined by “cross ticks”
|
||||
|
||||
{{ image(name="image70.png", alt="screenshot") }}
|
||||
|
||||
- Time Based Cross - Basically the same as Ticks Away Cross,
|
||||
however, this is based on time (in ms) on when to automatically cross
|
||||
(fill) the market if they get too far away from the opposite inside
|
||||
market. If a legged hedge order’s price gets X amount of “ticks”
|
||||
away from the opposite inside market, it is re-priced to cross the
|
||||
opposite inside market as defined by “cross ticks”
|
||||
|
||||
{{ image(name="image40.png", alt="screenshot") }}
|
||||
|
||||
- Size Based Cross - similar to ticks and time based cross, but based
|
||||
on size instead. If you define a threshold of the opposite inside
|
||||
market and it drops below that threshold, it’ll automatically cross
|
||||
the market. If a legged hedge order’s price gets X amount of
|
||||
“ticks” away from the opposite inside market, it is re-priced to
|
||||
cross the opposite inside market as defined by “cross ticks”
|
||||
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 707 B |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
@@ -1,81 +0,0 @@
|
||||
+++
|
||||
title = "Basic Algos"
|
||||
weight = 1
|
||||
sort_by = "weight"
|
||||
insert_anchor_links = "right"
|
||||
aliases = ["./bts_spark/Algos/"]
|
||||
|
||||
|
||||
[extra]
|
||||
page_description = "Definitions of the Algos built into BTS Spark and their parameters"
|
||||
+++
|
||||
|
||||
## Lean
|
||||
|
||||
The goal of the lean order is to watch the opposite-inside market size and cross when that size goes below the threshold (this also implies a cross if that size goes to zero and the market trades away from you) If the market trades toward you, you can opt into several different behaviors
|
||||
|
||||
##### Parameters
|
||||
* Cross Thresh - size thresh in absolute or ratio terms
|
||||
* Max Chase Ticks - max levels to pay up, in ticks
|
||||
|
||||
|
||||
## Join
|
||||
The goal of the join order is to watch the opposite-inside market and join when the market flips (that is, when the best offer becomes the best bid) and has at least threshold size.
|
||||
|
||||
##### Parameters
|
||||
* Join Thresh - size thresh in absolute or ratio terms
|
||||
|
||||
|
||||
## Top
|
||||
|
||||
The goal of the top order is to not trade by yourself, but the intent at the time of order entry is to get filled.If the order is on the market (say current bid price) AND the quantity on that bid price is below top thresh then cancel the order else remain working.
|
||||
|
||||
##### Parameters
|
||||
* Top Thresh - size thresh in absolute or ratio terms
|
||||
|
||||
|
||||
## Cover
|
||||
A Cover order’s purpose is to fire a hedge order (of any type) in response to fills from it’s child order on the opposite side of the market N ticks away
|
||||
|
||||
##### Parameters
|
||||
* Profit Ticks - ticks above or below fill price to place profit / cover order
|
||||
|
||||
|
||||
## OCO
|
||||
An OCO order creates a relationship between a child order and a 'stop' or 'other' order such that when one of these is cancelled, both cancel, or when one is filled, the other order's size is debited in the amount of the fill.
|
||||
|
||||
Composing this order with Cover simulates scalping functionality
|
||||
|
||||
##### Parameters
|
||||
* Stop Ticks - ticks below or above main order to place stop / other order
|
||||
|
||||
## Splitter
|
||||
The splitter is useful for pro-rata markets where you want to vary your exposure independent of the order quantity that you want to fill. The splitter will complete when the number of fills reaches or exceeds the order quantity but it will put exposed_qty total size on the market. Splitter favors order size over queue position.
|
||||
|
||||
If exposed_qty is set to 0 the splitter will continue to exist in the Order Book but will cancel all of its child orders. This makes it a useful building block for custom algos that need to implement a 'paused' state.
|
||||
|
||||
##### Parameters
|
||||
* exposed_qty - The total quantity to expose on the market.
|
||||
* max_order_qty - The maximum size of a single order.
|
||||
|
||||
|
||||
## Scratch
|
||||
The scratch algo is similar to Lean, but instead of watching the opposite inside market, it watches the same side market and pays up when this quantity recedes below the scratch_threshold
|
||||
|
||||
##### Parameters
|
||||
* scratch_threshold - The quantity on the same side market below which to scratch
|
||||
* chase_ticks - The number of ticks through the opposite market to pay up
|
||||
|
||||
|
||||
## ProRata
|
||||
The prorata algo is a special case hedging algo for pro-rata markets. Users can specify two hedge types-- normal hedge and overfill hedge, the latter is spawned when you receive more fills than your fill_limit. Further, the algo attempts to scratch when in an overfilled state AND optionally the same side size falls below stay_in_threshold
|
||||
|
||||
##### Parameters
|
||||
* hedge_ticks - The amount of ticks better hedges are placed on the opposite side market as the fill
|
||||
* chase_ticks - How many ticks through the opposite market on a scratch
|
||||
* fill_limit - The limit after which the algo considers further fills to be 'overfills'
|
||||
* stay_in_threshold - A same side size threshold that enables the algo to 'stay in' even if overfilled
|
||||
* enable_scratch_on_overfill - When true, overfills are immediately scratched upon the algo exiting
|
||||
* enable_stay_in - When true, the algo will 'stay in' so long as the same side size is above stay_in_threshold, when false the algo attempts to 'get out' (and potentially scratch overfills) as soon as it reaches overfill status
|
||||
* hedge - Child order type to send for normal hedges
|
||||
* overfill_hedge - Child order type to send for overfill hedges
|
||||
@@ -1,436 +0,0 @@
|
||||
+++
|
||||
title = "Trading"
|
||||
weight = 5
|
||||
sort_by = "weight"
|
||||
insert_anchor_links = "right"
|
||||
|
||||
[extra]
|
||||
page_description = "BTS Spark's Trading module, including The Order Book, Fills, P&L, Ladder, Order Ticket, and Algo Studio"
|
||||
+++
|
||||
|
||||
|
||||
- When hovering over, it will show 5 windows which can be launched,
|
||||
Order Book, Fills, P&L, Ladder, and Order Ticket
|
||||
- It appears like below:
|
||||
|
||||
{{ image( name = "image44.png", alt = "screenshot") }}
|
||||
|
||||
## Order Book
|
||||
|
||||
{{ youtube(id="ygMFkjBBGeU") }}
|
||||
|
||||
- This provides a list of all orders a user has placed, by default it
|
||||
will display only working orders
|
||||
- You can create multiple order books filtered however you would
|
||||
like
|
||||
- All order books are brought up as tabs and can be combined with all
|
||||
other windows within BTS
|
||||
- Appears like the following:
|
||||
|
||||
{{ lightbox( name = "image5.png", alt = "screenshot") }}
|
||||
|
||||
- You can sort all columns by single left clicking on the column
|
||||
header which will sort in either descending or ascending order, an
|
||||
up or down arrow will appear representing which way it is sorting.
|
||||
Below is a display of the security column sorting in descending
|
||||
fashion.
|
||||
|
||||
{{ image( name = "image60.png", alt = "screenshot") }}
|
||||
|
||||
- Filtering can occur, by hovering over any column header which will
|
||||
display a “Filter” box. Clicking on this will then display the
|
||||
available components which can be filtered, below is an example of
|
||||
clicking on the securities column
|
||||
|
||||
{{ image( name = "image52.png", alt = "screenshot") }}
|
||||
|
||||
- If the column is displaying time base information, a special style
|
||||
box will appear when clicking on the filtering box providing more
|
||||
options than simply filtering of the available information. You can
|
||||
choose the following time frames in which to filter:
|
||||
|
||||
- Anytime
|
||||
- Today
|
||||
- Since Open
|
||||
- A specific user-defined period of time
|
||||
|
||||
{{ image( name = "image25.png", alt = "screenshot") }}
|
||||
|
||||
- The left-hand box within an order book provides users with further
|
||||
functionality to quickly perform various tasks with live orders as
|
||||
well as launch other modules.
|
||||
{{ image(name="spark_menu_order_book.png", alt="the spark menu in the order book", pull="right") }}
|
||||
|
||||
- {{ icon(name="image48.png", alt="Fills icon") }} Fills -
|
||||
clicking on this will launch a fills window
|
||||
- {{ icon(name="image57.png", alt = "modify icon") }} Modify -
|
||||
clicking on this will launch an order ticket for a live order
|
||||
highlighted in the Order Book.
|
||||
- {{ icon(name="image73.png", alt = "cancel selected icon")}} Cancel
|
||||
selected - clicking on this will cancel the selected orders you have
|
||||
highlighted in the order book. You can choose more than one by
|
||||
holding hold the Ctrl key when clicking on each row of orders
|
||||
- {{ icon(name="image74.png", alt = "cancel buys icon")}} Cancel
|
||||
buys - clicking on this will cancel all the buy orders you have in
|
||||
the order book
|
||||
- {{ icon(name="image33.png", alt = "cancel all icon")}} Cancel
|
||||
sells - clicking on this will cancel all the sell orders you have in
|
||||
the order book
|
||||
- {{ icon(name="image2.png", alt = "cancel all icon")}} Cancel
|
||||
all - clicking on this will cancel all working orders you have the
|
||||
order book
|
||||
- {{ icon(name = "recreate_icon.png", alt = "screenshot") }} Recreate - clicking this will recreate already cancelled orders, sending them back to market with the same price and quantity as they were previously at before being cancelled.
|
||||
- {{ image( name = "collapse_all_icon.png", alt = "screenshot") }} Collapse all - This will collapse all trees inside the order book to show only the top level of the order.
|
||||
- {{ icon( name = "expand_all_icon.png", alt = "screenshot") }} Expand all - This will expand to show everything inside the order book.
|
||||
- {{ icon( name = "settings_icon.png", alt = "screenshot") }} Settings - This launches the settings for the orderbook.
|
||||
- The mini orderbook is integrated into the ladder
|
||||
|
||||
- Middle click (click the mouse wheel) on a working order to display the mini orderbook
|
||||
- From here, you can change the price and quantity of any working order
|
||||
{{ image( name = "mini_orderbook.png", alt = "screenshot") }}
|
||||
|
||||
## Fills
|
||||
|
||||
- This provides a list of all fills a user has had for a given time
|
||||
period, by default it will open up with “since open” time frame
|
||||
selected showing you fills on the day thus far
|
||||
- You can create multiple fill windows, filtered however you
|
||||
like
|
||||
- All fill windows are brought up as tabs and can be combined with
|
||||
all other windows within BTS
|
||||
- There is also a settings button in the left hand tab which can be
|
||||
launched to customize the fills window
|
||||
|
||||
## P&L
|
||||
|
||||
{{ youtube(id="xj6cEQ6By34") }}
|
||||
|
||||
- This provides a running ledger of a users account(s) profit and
|
||||
loss, broken down per symbol
|
||||
- You can create multiple P&L windows, filtered however you would
|
||||
like
|
||||
- All P&L windows are brought up as tabs and can be combined with all
|
||||
other windows within BTS
|
||||
- All columns are sortable and either searchable or can be further
|
||||
filtered by entering in min and max values.
|
||||
- There is also a settings button in the left hand tab which can be
|
||||
launched to customize the P&L window
|
||||
- In regards to the PnL specifically, you can choose how you want the
|
||||
PnL calculated based on Last, MidPoint, or Settle price.
|
||||
- This is accomplished on the top bar, which when clicked on, displays
|
||||
the choices for calculation, this appears like below:
|
||||
|
||||
{{ image( name = "pnl_calculation.png", alt = "screenshot") }}
|
||||
|
||||
|
||||
- Below is an example P&L window showing a user’s multiple accounts and
|
||||
various positions in each:
|
||||
|
||||
{{ image( name = "pnl_window.png", alt = "screenshot") }}
|
||||
|
||||
|
||||
## Ladder
|
||||
|
||||
{{ youtube(id="Q0qsyc1nvYo") }}
|
||||
|
||||
- The ladder was designed to be the most logically produced ladder on
|
||||
the market, engineered and designed by professional traders for
|
||||
professional traders
|
||||
- Ladders are launched as tabs and can be combined with all other
|
||||
windows within BTS
|
||||
- Ladders are the quickest and easiest way to enter an order into the
|
||||
market with a single click
|
||||
- Below is an example ladder:
|
||||
|
||||
{{ image( name = "ladder.png", alt = "screenshot") }}
|
||||
|
||||
- The ladder consists of 2 major parts, the Ladder itself and the
|
||||
information and control section on the left-hand side
|
||||
|
||||
- The information section on the left contains the following: {{ image( name = "image1.png", alt = "screenshot") }}
|
||||
- Day - showing the current price of the security on the day
|
||||
- High - showing the high price of the security on the day
|
||||
- Low - showing the low price of the security on the day
|
||||
- Open - showing the open price on the day
|
||||
- Settle - showing what the security settled at in the previous trading day
|
||||
- Volume - showing the last traded volume of the security in real time
|
||||
|
||||
|
||||
|
||||
- The control section right underneath the information section on the
|
||||
left-hand side offers the following:
|
||||
|
||||
{{ image( name = "image62.png", alt = "screenshot") }}
|
||||
|
||||
- The account in which the orders will flow into when trading this
|
||||
security
|
||||
- Length of time the order will remain in the market, either DAY or
|
||||
GTC
|
||||
- Order type, by default, orders will go in as Limit, however all of
|
||||
the following are offered out of the box. The top 5 are all fairly
|
||||
standard order types, however, the bottom 5 are all specialized
|
||||
algos. They are only offered by BTS and require specialized
|
||||
parameters. Please see below for each order type:
|
||||
|
||||
- Market
|
||||
|
||||
- This is a buy or sell order to be executed immediately at the
|
||||
current market price.
|
||||
|
||||
- Limit
|
||||
|
||||
- This is a buy or sell order designed to take place on the
|
||||
price level where you entered the order.
|
||||
|
||||
- Stop
|
||||
|
||||
- This is a buy or sell order only when a security increases or
|
||||
decreases past a particular point, thus limiting or locking in
|
||||
profit or loss
|
||||
|
||||
- Stop Limit
|
||||
|
||||
- This is a buy or sell order which will be executed at a certain
|
||||
price after the given stop price is reached. You will need to enter
|
||||
the stop price, by clicking on the “<” to bring up the stop price
|
||||
option:
|
||||
|
||||
{{ image( name = "image61.png", alt = "screenshot") }}
|
||||
|
||||
- Iceberg
|
||||
|
||||
- This is a buy or sell order where the order is divided into a
|
||||
visible or “show” portion which is seen at the exchange. The
|
||||
rest of the order is hidden and will remain hidden until the show
|
||||
quantity is filled, essentially reloading the order back to the show
|
||||
quantity. You will need to define what type of order that will
|
||||
be used for the child order to be sent.
|
||||
|
||||
{{ image( name = "image47.png", alt = "screenshot") }}
|
||||
|
||||
- Time Box
|
||||
|
||||
- This is a type of order set up to allow a user to enter an order at
|
||||
a certain time and stop an order at a particular time as well. The
|
||||
options to either start or stop an order are the following and can
|
||||
be combined in any fashion, i.e. you can start immediately and stop
|
||||
at a certain time, or start at a certain time and not stop until the
|
||||
order is completed.
|
||||
|
||||
- At
|
||||
- In
|
||||
- Immediately
|
||||
|
||||
- Once the time frame is chosen, you will need to then choose the
|
||||
order type of the order that will be entered into the market.
|
||||
- Below are images of the type of time frame that can be used within
|
||||
the time box
|
||||
|
||||
{{ image( name = "image42.png", alt = "screenshot") }}
|
||||
|
||||
{{ image( name = "image50.png", alt = "screenshot") }}
|
||||
|
||||
- Lean
|
||||
- This is a specialized algo order which allows the user to
|
||||
essentially watch the opposite-inside market size and cross when
|
||||
that size goes below the threshold defined.
|
||||
- “Cross” means to take an order working on the bid and 'cross' by
|
||||
buying into the asks. This is often referred to as “paying up” as well
|
||||
|
||||
{{ image( name = "lean_algo_control.png", alt = "screenshot") }}
|
||||
|
||||
- Join
|
||||
- This is a specialized algo order which allows the user to enter an
|
||||
order which will watch the opposite-inside market and join when the
|
||||
market flips and has at least threshold size as defined.
|
||||
|
||||
{{ image( name = "join_algo_control.png", alt = "screenshot") }}
|
||||
|
||||
- Top
|
||||
- This is a specialized algo order which allows the user to
|
||||
essentially not trade by themselves
|
||||
- If the order is on the market (current bid price) and the quantity
|
||||
on that bid price is below the top threshold defined the order will
|
||||
cancel and do nothing else
|
||||
{{ image( name = "top_algo_control.png", alt = "screenshot") }}
|
||||
|
||||
- Offset
|
||||
|
||||
- The goal of the offset order is to send your order X amount of ticks
|
||||
from where you actually place it on the ladder. This is sometimes
|
||||
known as a "fat finger" safety.
|
||||
{{ image( name = "offset_algo_control.png", alt = "screenshot") }}
|
||||
|
||||
- OCO
|
||||
|
||||
- An OCO order creates a relationship between a child order and a 'stop'
|
||||
or 'other' order such that when one of these is cancelled, both cancel,
|
||||
or when one is filled, the other order's size is debited in the amount
|
||||
of the fill. Composing this order with Cover simulates scalping
|
||||
functionality.
|
||||
|
||||
{{ image( name = "oco_algo_control.png", alt = "screenshot") }}
|
||||
|
||||
- Cover
|
||||
|
||||
- A Cover order’s purpose is to fire a hedge order (of any algo-type) in response to fills from it’s child order on the opposite side of the market N ticks away.
|
||||
|
||||
{{ image( name = "cover_algo_control.png", alt = "screenshot") }}
|
||||
|
||||
- Trigger
|
||||
|
||||
- The Trigger order is exactly as it sounds, where it will trigger an order based on conditions defined.
|
||||
- This order also has exit strategy built in where a user can define when the trigger order can auto-cancel based on time as well as price conditional.
|
||||
|
||||
{{ image( name = "trigger_algo_control.png", alt = "screenshot") }}
|
||||
|
||||
- The middle of the control section is where you can click on
|
||||
predefined values to quickly populate the volume at which you wish
|
||||
to enter the market.
|
||||
|
||||
{{ image( name = "image17.png", alt = "screenshot") }}
|
||||
|
||||
- You can manually type in a quantity here as well
|
||||
- Furthermore, if you have a value in the volume bar, you can
|
||||
increase this size by right-clicking and the value will increase
|
||||
incrementally by 1. The same is true if you would like to decrease
|
||||
this value by left click and the value will decrease.
|
||||
- By having the auto clear box checked, it will bring the value back
|
||||
to zero after placing an order at the size chosen.
|
||||
|
||||
{{ image( name = "image59.png", alt = "screenshot") }}
|
||||
|
||||
- The bottom section of the control area of a ladder has 4 aspects
|
||||
to it
|
||||
|
||||
- Cancel Buys, which will cancel all buys currently working on the
|
||||
ladder
|
||||
- Cancel Sells, which will cancel all sells currently working on the
|
||||
ladder
|
||||
- Cancel All, which will cancel all orders on the ladder
|
||||
- Settings, which will launch the ladder settings window which
|
||||
appears like below
|
||||
{{ image( name = "ladder_settings.PNG", alt = "screenshot") }}
|
||||
- Fonts and Colors - This is where you can customize the overall main
|
||||
aspects of the ladder.
|
||||
- Market Break Lines - These are where can control the viewing of what
|
||||
has been traded through various shading.
|
||||
- Market Size Display - This is where you can define if you wish
|
||||
to see implieds or not and how exactly you would like to see them.
|
||||
- Volume Display - Where you can choose to show the volume traded at price
|
||||
graph and what details you would like to see.
|
||||
- Size Presets - Here you can define what volume of predefined quick buttons
|
||||
you would like to see or any at all. You can remove these by clicking on the “X” next to the volume number to remove one or many.
|
||||
- Algo Favorites - Here you can set up which “quick button” or user defined
|
||||
algos to see. You can customize the amount of columns to be
|
||||
displayed as well.
|
||||
- Left Panel - This is where you can remove predefined information on the
|
||||
left panel to save room and get rid of data that you might not require
|
||||
to see.
|
||||
|
||||
|
||||
- The other, main part of the ladder, is the ladder itself as
|
||||
displayed below
|
||||
|
||||
{{ image( name = "ladder_main_part.png", alt = "screenshot") }}
|
||||
|
||||
- There are 5 main columns
|
||||
|
||||
- Orders, which display current orders working in the market
|
||||
- Bid, which displays the current bid volumes at each price
|
||||
level
|
||||
- Price, which displays the price levels of the symbol shown
|
||||
- Ask, which displays the current ask volumes at each price
|
||||
level
|
||||
- Last Trade, which displays the price level and volume
|
||||
where the last trade occurred
|
||||
|
||||
- Functionality of the ladder
|
||||
- To enter an order directly by clicking in the ladder, left click on either the bid or ask volume with a volume greater than 0 on the predefined value box on the left-hand section
|
||||
- A badge will be displayed within the orders column of the value you have chosen and the quantity filled as displayed below
|
||||
|
||||
{{ image( name = "ladder_badges.png", alt = "screenshot") }}
|
||||
|
||||
- To change the price level you wish to work the order, you can right-click and hold on the badge to move it up or down the ladder for the
|
||||
desired price
|
||||
- To cancel the order, left click on the badge
|
||||
- Furthermore, you can click down on the scroll wheel of your mouse
|
||||
to bring up a cancel or detach option
|
||||
|
||||
|
||||
## Order Ticket
|
||||
|
||||
{{ youtube(id="bdC5pZ6T35I") }}
|
||||
|
||||
- The order ticket was designed to provide another means other than
|
||||
the ladder to enter orders into the market
|
||||
- You can bring up an order ticket directly from the module launcher,
|
||||
which will bring up the security browser where you can then choose
|
||||
which security to populate
|
||||
- The order ticket appears like below
|
||||
|
||||
{{ image( name = "image27.png", alt = "screenshot") }}
|
||||
|
||||
- On the top left, you have the price for the order as well as the
|
||||
volume
|
||||
- Beneath are the predefined volumes as well as a clear button to
|
||||
clear out the volume
|
||||
- On the top right you have the current bid and ask and volumes of
|
||||
each for the security chosen
|
||||
|
||||
|
||||
|
||||
- You can populate the price and volume by clicking on either the bid
|
||||
or ask price as well as the corresponding volumes
|
||||
|
||||
|
||||
|
||||
- Below you have the account drop down, the duration of the order,
|
||||
and the order type
|
||||
|
||||
|
||||
|
||||
- Please note you can also launch the required parameters for algo or
|
||||
synthetic orders by clicking on the right arrow next to the algo or
|
||||
synthetic
|
||||
|
||||
|
||||
## Algo Studio
|
||||
|
||||
{{ youtube(id="DHIa5tnifKc") }}
|
||||
|
||||
- The BTS Algo Studio was built for users to experience algo composability
|
||||
never seen before in a professional futures trading system.
|
||||
|
||||
- There is no limit for putting both “canned algos” already present in the
|
||||
system as well as user defined algos fed into the system via the API.
|
||||
|
||||
- This is all in place in a very user friendly GUI as shown below:
|
||||
|
||||
{{ image( name = "algo_studio.png", alt = "screenshot") }}
|
||||
|
||||
|
||||
- There are 3 main areas of the Algo Studio:
|
||||
- Left Pane (from top to bottom)
|
||||
- Add Algo
|
||||
- Clone Algo
|
||||
- Save Algo
|
||||
- Remove Algo
|
||||
- Middle Pane
|
||||
- This is where your customized algo will be displayed in a running list
|
||||
- Right Pane
|
||||
- This is where your complete customization happens of combining various
|
||||
algos together and saving them to fit your exact needs
|
||||
- On the very top are the name and abbreviation boxes
|
||||
- For the name you can simply name the algo whatever you would like
|
||||
- For the abbreviation section (which is optional), you can put in an
|
||||
abbreviated name for the algo which will be displayed on the Algo
|
||||
buttons on the ladder. (Example - Algo name = PROFIT_OCO_LEAN,
|
||||
Abbrev. = POL)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 799 B |
|
Before Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 98 KiB |