Compare commits

...
2253 Commits
Author SHA1 Message Date
Eric Harding 48f56e76d4 simple API explorer tool 2018-06-05 10:03:17 -04:00
Eric Harding 05e6c40a57 Update c# language version 2018-06-05 10:03:17 -04:00
Eric Harding 58464b8a0d Automatically apend install_config.json to bts_installer.exe when access via 2018-06-05 08:29:33 -04:00
Taha Afzal 1785f3e34d reducing excessive logging 2018-06-05 07:33:51 -04:00
Taha Afzal 33aeb6b7ba LegPropertyData just contains references to SpreaderBookkeepingData 2018-06-04 22:51:24 -04:00
Michael Harding d8fbfb49e8 AdminUI: Style cleanup 2018-06-04 17:27:27 -04:00
Pedro Pinto 4803c66506 Fixed a few more hardcoded references to .bts 2018-06-04 17:15:29 -04:00
Pedro Pinto 046a0ad9c8 Fixed fable build depencency tracking. 2018-06-04 17:10:36 -04:00
Pedro Pinto 3f292e87da Towards security name formatting in C++. 2018-06-04 17:10:36 -04:00
Eric Harding 7c8a801407 SPARK-1198 - Include config sub path 2018-06-04 17:10:36 -04:00
Eric Harding 4c7949ff8d SPARK-1198 Directory Shuffle 2018-06-04 17:10:36 -04:00
Taha Afzal fdf727a52a fixing clang build warning 2018-06-04 16:45:36 -04:00
Taha Afzal 035911d126 SpreaderChildOrderState now has one cons only 2018-06-04 16:33:20 -04:00
Taha Afzal 58b16a4b2c culled unused hedger functions 2018-06-04 16:33:20 -04:00
Michael Harding 6e9fd68ac4 Merged adminui into master 2018-06-04 16:28:19 -04:00
Michael Harding c5289a5416 Merged master into adminui 2018-06-04 16:12:27 -04:00
Michael Harding b33fe6c8cc SPARK-1155, SPARK-1163 2018-06-04 15:55:48 -04:00
John Colvin bd95b87798 TableUpdateDemuxer - fix potential race bug 2018-06-04 13:01:04 -04:00
Jake Norbut 8132cb003d Merged in single_badge (pull request #33)
SPARK-1141 - Single badge

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-06-04 16:46:41 +00:00
Jake Norbut 9e59f0c5a2 master -> feature (overwrote John's changes, which we discussed; he will reapply after merge in master) 2018-06-04 11:45:24 -05:00
John Colvin e1e0565fbd SPARK-1196 synth dialog - security text in column header is wrong 2018-06-04 11:43:33 -04:00
Jake Norbut f69ec8d32b SPARK-1195 - GLBX spreas are now formatted by their Security Description 2018-06-04 10:41:59 -05:00
Taha Afzal c3fdf8cb4f logs, odds and ends 2018-06-04 11:12:24 -04:00
Taha Afzal 1670443b0f stylistic changes in the code 2018-06-04 07:10:12 -04:00
Taha Afzal 73fa2b669e cycle_back removed from QuoteLegPriceQuantity 2018-06-04 07:10:12 -04:00
Taha Afzal 2d3f576764 SpreaderHedgerData was unecessarily adding a layer of complexity, gone now 2018-06-04 07:10:12 -04:00
John Colvin 56b855ea83 SPARK-1194 modify ticket should default to original quantity (not working) 2018-06-03 18:12:54 -04:00
John Colvin 8512b40f50 Ladder - use backing-properties instead of detect_property_changes 2018-06-03 14:45:48 -04:00
John Colvin 1983835588 FillsVM - security filter updates itemssource incrementally 2018-06-03 14:45:48 -04:00
John Colvin cf6a9ac4fa upgrade NUnit (3.8.0 -> 3.10.1) in spark_core/spark_sdk 2018-06-03 12:43:11 -04:00
John Colvin c59569310f mview - sort working orders by price to optimize working-orders-summary getter 2018-06-02 19:36:00 -04:00
John Colvin a86b231581 update NUnit package from 3.8.0 -> 3.10.1 2018-06-02 19:27:17 -04:00
John Colvin 46365c4f2e TableUpdateDemuxer - subscribers first notification is an update that adds all existing values 2018-06-02 19:22:27 -04:00
John Colvin c56adb2dc0 SPARK-1184 shell crashed on launch 2018-06-02 16:38:45 -04:00
John Colvin 643482bb09 SecurityFormatter - for unknown security types, don't throw an exception,
return "Unknown-security"
2018-06-02 16:38:45 -04:00
John Colvin 038946eddc DIYGrid - only refresh rows-view once when sorting changes 2018-06-02 16:38:45 -04:00
Pedro Pinto 07348a9ec8 Fixed clang fable build 2018-06-01 17:44:19 -04:00
Eric Harding 0e29a141bf SPARK-1191 security list api 2018-06-01 17:05:52 -04:00
Michael Harding fdefad6a73 AdminUI: Filter Security 2018-06-01 16:33:16 -04:00
Taha Afzal 89ee079320 stylistic changes to the hedger state machine cpp classes 2018-06-01 15:58:46 -04:00
Taha Afzal 5f37bd5d14 got rid of redudnant state in QuotePriceLegState 2018-06-01 15:58:46 -04:00
Taha Afzal 892ba478fd quoter gets some minor cleanup and more comments 2018-06-01 15:58:46 -04:00
John Colvin ab88cd7920 CVOrderBook - add security discrete values filter 2018-06-01 15:22:01 -04:00
John Colvin 02fedc577a discrete values filter supports incremental updates 2018-06-01 15:22:01 -04:00
John Colvin 87568a6a53 CVOrderBook - improve filter/sort performance by storing parent/children locally 2018-06-01 15:22:01 -04:00
Jake Norbut 8440e144b4 master => feature (again) 2018-06-01 13:39:25 -05:00
Jake Norbut 11cbd7440d taha nits 2018-06-01 13:30:39 -05:00
Eric Harding d59bb5ed0d Merged in TactileAdorner (pull request #32)
Quick: Fix problem where you can't see price moves when mouse is over a cell in the ladder

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-06-01 17:33:13 +00:00
Jake Norbut d30c857e50 master -> feature merge 2018-06-01 11:04:59 -05:00
Eric Harding 37aa7088a9 Add visual studio perf session files to gitignore 2018-06-01 10:30:43 -04:00
Michael Harding b92ad91799 fix ui.fsproj 2018-06-01 10:15:58 -04:00
Michael Harding 6d8ee84813 Fix Webpack config for development 2018-06-01 10:15:58 -04:00
Michael Harding 05ac067b23 SPARK-1155 2018-06-01 10:15:58 -04:00
Eric Harding 8e7163c5c6 SPARK-1189 - Windows C++ build is not producing symbols file 2018-06-01 09:51:20 -04:00
Eric Harding 763beda95c Merged in SPARK-1183 (pull request #34)
SPARK-1183 3-5 1000 lot iceberg orders can lag/lock up the UI

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-06-01 00:15:43 +00:00
John Colvin 472e2b2f0c change UpdateDemuxer to TableUpdateDemuxer, which updates incrementally 2018-05-31 20:13:01 -04:00
Jake Norbut 2998a2b753 Stop and Stop Orders will now reside withing the correct badge; when a badge contains multiple orders, it will present with a light purple outline; still need to support buy and sell at same level - we'll likely eliminate different badge styles in the end 2018-05-31 17:00:21 -05:00
Eric Harding 036550aaae SPARK-1183 3-5 1000 lot iceberg orders can lag/lock up the UI 2018-05-31 17:20:08 -04:00
John Colvin 4378947e44 CVOrderBook - fix typeo that trapped the root_node() fn in an endless loop 2018-05-31 16:40:34 -04:00
John Colvin bd7a698259 clean up SecurityFormatter.cs 2018-05-31 15:56:30 -04:00
Eric Harding 65341ee35d SPARK-1176 fable build output should go in ~/build/bla. 2018-05-31 13:19:53 -04:00
Jake Norbut e57a3d37f7 relocating where to draw stop orders; need to test against cme cert 2018-05-31 09:37:09 -05:00
Jake Norbut 437e92b361 merging master in feature branch 2018-05-31 08:55:57 -05:00
John Colvin a9c3c41d6e Merged in ui-improvements (pull request #31)
Ui improvements

Approved-by: Eric Harding <eric.harding@bluetradesys.com>
Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-31 00:56:02 +00:00
John Colvin 5a12a973f3 pr: finishing touches 2018-05-30 20:54:01 -04:00
Jake Norbut 639b2dfe09 make badge a bit bigger to use available space 2018-05-30 16:45:02 -05:00
Jake Norbut 8cdbf873cd Fixing completion since returning the a double will not really work summing over multiple ordres (0 screws it up); also, no more Opacity 2018-05-30 16:26:33 -05:00
Jake Norbut 7990c97921 Changing default Order column size back to single badge values 2018-05-30 15:25:59 -05:00
Jake Norbut fce22c28d1 hooking up crack 2018-05-30 15:06:40 -05:00
Jake Norbut 339cd017d5 Remove Modify context menu item 2018-05-30 14:56:14 -05:00
Eric Harding 3380d2ba0b Fix problem where you can't see price moves when mouse is over a cell in the ladder 2018-05-30 15:47:30 -04:00
Jake Norbut d18d8dcf37 GetHashCode and Equals 2018-05-30 14:40:45 -05:00
Jake Norbut 6bf628da5f SPARK-1141 - single badge 2018-05-30 13:11:17 -05:00
John Colvin bbcc92c38c pr edit: use working_order_background_brush defined in BTSColors 2018-05-30 13:50:46 -04:00
John Colvin 0ad1f73293 pr edit: add working_orders to OrdersModel 2018-05-30 13:30:02 -04:00
Pedro Pinto 1b100bccf7 SPARK-1175, Picked price of the resting rather than the aggressor 2018-05-30 10:39:25 -04:00
Eric Harding 7a74c5852a Merged in SPARK1139 (pull request #29)
SPARK-1139 Improve ladder performance

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-30 13:37:06 +00:00
Eric Harding 49f3c8b329 Code review feedback 2018-05-30 09:33:39 -04:00
John Colvin 9514a10c27 CVOrderBookRowVM GetHashCode returns order key 2018-05-29 19:32:41 -04:00
Pedro Pinto e6a7db2c61 SPARK-1149, Logging is bounded to 2 files at max, 120MB each. 2018-05-29 17:43:10 -04:00
Taha Afzal f69039c043 SpreaderChildOrderState commented and added state to mantain the out order/qty 2018-05-29 17:38:55 -04:00
Taha Afzal 40d6727b02 QuoteLegPriceQuantityState's cpp added 2018-05-29 17:38:55 -04:00
John Colvin 796c39988f Merged master into ui-improvements 2018-05-29 17:01:12 -04:00
Pedro Pinto 0f2a8cd746 SPARK-1178, Passed build binary dir to fable build script. 2018-05-29 16:31:09 -04:00
John Colvin 55d05ecd12 Merged master into ui-improvements 2018-05-29 16:25:22 -04:00
John Colvin 8b61a63634 new orderbook code clean-up 2018-05-29 16:22:18 -04:00
Eric Harding 3431ffc480 SPARK-1139 Improve ladder performance 2018-05-29 13:59:11 -04:00
Jake Norbut c22ce4b886 SPARK-1165 - Fills windows default filtes to since Globex open 2018-05-29 10:19:15 -05:00
Eric Harding eab2852773 Merged in SparkPersist (pull request #28)
SPARK-1162 UserPersist should use ID

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-29 13:15:21 +00:00
Taha Afzal 77d47fd387 header file include culling 2018-05-28 23:44:34 -04:00
Taha Afzal eccd965ce1 adding SpreaderBookkeepingData's cpp file 2018-05-28 22:11:06 -04:00
Taha Afzal ca8b691160 SpreaderLegData broken into h and cpp, adding more comments and tightening some const's 2018-05-28 19:34:06 -04:00
Taha Afzal bcaf65d7c6 code moved for the wrappers around SpreaderorderBuilder into their own cpp's 2018-05-28 15:55:21 -04:00
John Colvin fa7725eba2 OrderBookVM (original) - reduce unneccesary iterations in get_parent_order_vm() 2018-05-28 14:47:34 -04:00
John Colvin 34aa1d20f2 OrderBookVM (original) needs to toggle sort-direction itself 2018-05-28 14:40:08 -04:00
Taha Afzal 85643adcf3 comments and some stylistic changes for the limiter 2018-05-27 22:25:29 -04:00
Taha Afzal 4b9e046046 limits were still using ints for accont ids, fixed that 2018-05-27 22:25:29 -04:00
John Colvin 4bafada602 integrate ICollectionView into OrderBook with 'CVOrderBookVM' 2018-05-27 16:50:07 -04:00
John Colvin 701e883aea DiscreteValuesFilter - guard against null desired-items 2018-05-27 15:42:33 -04:00
John Colvin 7e54eea62f DIYGrid - fix sorting initialization bug (when initial sort comes from Rows.SortDescriptions) 2018-05-27 15:36:36 -04:00
Taha Afzal b2eeddc628 prehedge payup tests 2018-05-26 22:10:50 -04:00
Taha Afzal 9b2a4ca6b1 prehedge payless tests 2018-05-26 19:49:24 -04:00
John Colvin 9488620041 OrderUtils - check State.HasCreated/LastChange as well 2018-05-26 13:36:06 -04:00
John Colvin 0ad78b75ca OrderUtils - check HasDef/HasState before accessing Def/State 2018-05-25 21:16:54 -04:00
Taha Afzal c99a3c9fe9 comments 2018-05-25 18:26:23 -04:00
Taha Afzal bc4643fbf3 spreader tests 2018-05-25 17:33:35 -04:00
Jake Norbut 792801f936 Ladder - restoring badge context menu and hooking up crack 2018-05-25 15:20:36 -05:00
John Colvin dd4ef2429e DIYGrid HighPerformanceRow - InvalidateVisual when DataContext changes 2018-05-25 14:51:45 -04:00
Michael Harding 0af6290566 Order Type Colors 2018-05-25 13:34:12 -04:00
Eric Harding 7e8b804fa0 SPARK-1139 Make Combox faster when system is under load (no AllowsTransparency) 2018-05-25 09:17:00 -04:00
Taha Afzal df769d55e4 re-org'ing SpreaderUtils functions into cpp 2018-05-24 19:38:44 -04:00
Taha Afzal 1ea65185bd SPARK-1119 completed 2018-05-24 16:19:16 -04:00
Eric Harding 8d068221dc Reduced CPU for cert market data during development 2018-05-24 10:05:22 -04:00
Eric Harding d3f2ecc78e SPARK-1147 Add requited glbx fields to enable this work. 2018-05-23 19:27:37 -04:00
Eric Harding 38f212e633 SPARK-1162 UserPersist should use ID 2018-05-23 18:41:19 -04:00
Taha Afzal 97e73a23b0 SPARK-1119 (deleting unused API functions) 2018-05-23 18:12:55 -04:00
Pedro Pinto 7546c5f2e2 CmakeDeps 2018-05-23 21:43:59 +00:00
Pedro Pinto 324d1a3d74 CMakeDeps 2018-05-23 21:40:21 +00:00
Pedro Pinto f9c15a4d44 SPARK-1126. Hopefully finally nailed FIX price encoding. 2018-05-23 21:40:21 +00:00
Pedro Pinto 68fb8dade4 Cmakedeps. 2018-05-23 21:40:21 +00:00
Jake Norbut ee1230c5f9 Merged in taco_settings (pull request #25)
SPARK-1140 - Emulating the Taco

Approved-by: Eric Harding <eric.harding@bluetradesys.com>
Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-23 21:30:37 +00:00
Eric Harding 1c98cfab0d Add user id to UserService responses. Unblocks SPARK-1162 2018-05-23 17:23:25 -04:00
Eric Harding 376e2c3af8 Merged in SPARK1150 (pull request #27)
SPARK-1150 Ladder re-center timer may be leaking

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-23 21:19:46 +00:00
Jake Norbut bbce4bd05c PR suggestions 2018-05-23 16:10:58 -05:00
Jake Norbut c98559beb6 PR suggestions 2018-05-23 16:03:53 -05:00
Eric Harding c13c8ba16f SPARK-1150 Ladder re-center timer may be leaking 2018-05-23 16:14:54 -04:00
Taha Afzal 4d9f26af90 Merged in uint (pull request #26)
Uint
2018-05-23 19:35:42 +00:00
Taha Afzal 23a732d6da SPARK-1119 2018-05-23 15:19:04 -04:00
Jake Norbut 7b2186261a hardening the bevhavior just in case the text hasn't been previously sanitized 2018-05-23 12:41:10 -05:00
Jake Norbut 63d88993a7 Adding an alterntae order size setting; right clicking in a slot will send the alternate order size when it's not 0 2018-05-23 12:35:12 -05:00
Jake Norbut 152c02e45e no more context menu, just directly bring up the modify order ticket on mid click 2018-05-23 10:32:17 -05:00
Eric Harding 7bf4abf38d Add some temporary return data for security_names service 2018-05-23 11:15:05 -04:00
Jake Norbut 3ab3259f9a Badge behavior - Left click remains cancel, right click + drag = move order, mid click = context menu 2018-05-23 09:11:14 -05:00
Eric Harding cf0916379c SPARK-1119 F# part 2018-05-23 09:55:25 -04:00
Eric Harding e8b4567e60 Add request_names to market data service to get a list of symbols for securities 2018-05-23 09:28:36 -04:00
Eric Harding a0e86faa78 Bugfix in c++ service generator. Need full namespace for service with argument types in a different namespace. 2018-05-23 09:23:16 -04:00
Eric Harding 2cbd5510e2 Remove accidental copy of market data. yay c++. 2018-05-23 09:10:00 -04:00
Taha Afzal b9de5602cd SPARK-1119 2018-05-22 22:46:02 -04:00
John Colvin 96369aa5ee Merged in implementing-diy-grid (pull request #24)
Implementing diy grid

Approved-by: John Colvin <john.colvin@bluetradesys.com>
Approved-by: Eric Harding <eric.harding@bluetradesys.com>
2018-05-22 22:52:06 +00:00
John Colvin 2115ef9b74 pr edits 2018-05-22 18:50:36 -04:00
Jake Norbut 75ee9a954b qty text box - updating behavior name 2018-05-22 17:34:33 -05:00
Jake Norbut 7ed0167c4e Qty button mouse behavior 2018-05-22 17:30:00 -05:00
Taha Afzal b5220050f2 SPARK-1124 2018-05-22 17:07:30 -04:00
Jake Norbut 875f32b980 SPARK-1154 - Order Types in caps on Ladder 2018-05-22 15:31:43 -05:00
Michael Harding e9e0d017aa AdminUI: Improvements 2018-05-22 15:51:21 -04:00
Taha Afzal 1d065678d2 SPARK-1125 (deleting accounts) 2018-05-22 13:36:04 -04:00
Michael Harding bb54a8b448 AdminUI: Improvements 2018-05-22 10:06:39 -04:00
Taha Afzal 0629875c3a SPARK-1124 (deleting users/accounts properly) 2018-05-21 19:59:33 -04:00
John Colvin 38e8463717 OrderBook SimpleTextColumn - check for null/empty text 2018-05-21 19:18:21 -04:00
John Colvin 7a30b58cea HyperlinkCell - fix lingering-underline bug 2018-05-21 19:01:10 -04:00
John Colvin e406f463de disable GlyphRun anti-aliasing for now (doesn't work for all fonts) 2018-05-21 18:55:56 -04:00
Taha Afzal 59d68503a8 SPARK-1124 (deleting users/accounts properly) 2018-05-21 18:45:50 -04:00
John Colvin 909336ccbd pr edits 2018-05-21 17:39:26 -04:00
John Colvin 7d45bc9a36 undo subrepo change 2018-05-21 16:28:16 -04:00
Kevin Darby 23c8b60ea3 spreader post hedge should be < thresh not > 2018-05-21 13:57:36 -04:00
John Colvin 4dc7fb0bea Merged master into implementing-diy-grid 2018-05-21 13:21:11 -04:00
John Colvin 4ea08c09ee DIYGrid - implement OrderBook 2018-05-21 13:19:22 -04:00
Eric Harding 6ec39a9276 SPARK-510 - protobuf defaults require the assignment as well as the DefaultValue (caught in CR) 2018-05-21 11:23:59 -04:00
Eric Harding 4a74066319 Merged in SPARK-510 (pull request #23)
SPARK-510

Approved-by: Michael Harding <michael.harding@bluetradesys.com>
2018-05-21 14:59:05 +00:00
Eric Harding 80fde10cd5 Merged in SPARK-1144 (pull request #22)
SPARK-144 Remove Docking Facility from Launcher

Approved-by: Michael Harding <michael.harding@bluetradesys.com>
2018-05-21 14:57:49 +00:00
Eric Harding 58c3303004 SPARK-510 Launcher settings 2018-05-21 10:47:37 -04:00
Eric Harding c58b6fee77 SPARK-144 Remove Docking Facility from Launcher 2018-05-21 10:34:13 -04:00
Eric Harding b8b284441c SPARK-948 Test CME decimal precision increase 2018-05-21 10:22:50 -04:00
Eric Harding 07e89ff972 Fix build: unused argument 2018-05-21 08:41:07 -04:00
Eric Harding da90ffef12 SPARK-1080 Disable broken Windows syslog sink 2018-05-21 08:40:05 -04:00
Eric Harding b12f7cac6d WebUI: inline some functions which will no-op in javascript 2018-05-21 08:39:36 -04:00
John Colvin c40dfdd171 post-merge cleanup 2018-05-19 21:09:40 -04:00
John Colvin b8163c7f1e Merge branch 'master' into implementing-diy-grid 2018-05-19 18:29:28 -04:00
Pedro Pinto 7693933a7b SPARK-1132, Tag 50 was not being filled in correctly. 2018-05-18 17:23:06 -04:00
Pedro Pinto 675f3e0675 Merge branch 'master' into prod 2018-05-18 17:00:13 -04:00
Pedro Pinto 44454ef4c0 Autocert 2018-05-18 17:00:01 -04:00
Pedro Pinto f6f59adcc5 Merge 2018-05-18 16:58:48 -04:00
Pedro Pinto dad1e40f93 Merged from dev 2018-05-18 16:58:17 -04:00
Pedro Pinto ab950cba91 Merged from dev 2018-05-18 16:57:03 -04:00
Eric Harding 4f32e86fbd WebUI: Remove '*' from Exchange and SecurityType 2018-05-18 15:32:23 -04:00
Pedro Pinto 132516b0a7 Autocert 2018-05-18 15:08:01 -04:00
Eric Harding b95fd9e604 Web: filter accounts dropdown for already added accounts 2018-05-18 13:47:12 -04:00
Eric Harding 72fa852208 Bikeshedding 2/1E100 2018-05-18 13:06:08 -04:00
Michael Harding 609bd05734 SPARK1128, SPARK1129 2018-05-18 13:00:20 -04:00
Eric Harding 9dbf6cafbd Bikeshedding 2018-05-18 12:51:05 -04:00
Eric Harding 3ae7a3976f WebUI: Rename column headers 2018-05-18 12:49:52 -04:00
Eric Harding 5aff485890 SPARK-1127 Confirmation for removing a user 2018-05-18 12:49:52 -04:00
Michael Harding 430511e4a8 SPARK-1130 2018-05-18 12:46:12 -04:00
Michael Harding a2403c643d SPARK-1127 2018-05-18 12:32:51 -04:00
Jake Norbut 1bd2b4c601 adding order router test 2018-05-18 11:30:18 -05:00
John Colvin 4cd6da6c30 didn't save before last commit 2018-05-18 12:26:14 -04:00
John Colvin c2a5be6d67 use id comparer in OrderActivitySummarizer 2018-05-18 12:21:33 -04:00
Michael Harding 9d70906aca SPARK-1127: 2018-05-18 11:38:31 -04:00
Eric Harding 8e0bbbc312 hey, can you quickly make the warning at the bottom of the ladder higher contrast? 2018-05-18 11:37:11 -04:00
Eric Harding e52fc2d196 Add Lens library for help simplify some verbose code in admin gui 2018-05-18 11:21:22 -04:00
Taha Afzal 47b1e8f64d SPARK-1017 2018-05-18 10:47:24 -04:00
Eric Harding ae3b94d6f4 Web UI: Sort accounts *before* selecting first one 2018-05-18 08:51:08 -04:00
Eric Harding 44cf948d5a SPARK-1108 Enums for Humans 3/3 2018-05-18 08:46:35 -04:00
Eric Harding d983db75c4 SPARK-1108 Enums for Humans 2/3 2018-05-18 08:22:33 -04:00
Eric Harding ba02db4e40 SPARK-1108 Enums for Humans 1/2 2018-05-18 08:18:29 -04:00
Eric Harding 68ca16103d Web UI: Sort account list 2018-05-17 17:29:22 -04:00
Michael Harding e36cb26bec fix selectedaccount 2018-05-17 17:26:23 -04:00
Michael Harding 74bc669083 SPARK1100, 1099, 1083 2018-05-17 17:21:05 -04:00
Michael Harding 986f228113 AdminUI: Hide 'deleted' users 2018-05-17 17:21:04 -04:00
Jake Norbut 92b02833df SPARK-1082 - for now on one line, but next sprint we should do it right like John suggested with a MeasureOverride and what not 2018-05-17 15:16:53 -05:00
John Colvin 96754066bd fix ActivityLog categories typeo 2018-05-17 16:06:02 -04:00
Eric Harding c6ed7a46cd SPARK-1117 Entering text at the start of text fields misbehaves 2018-05-17 16:04:35 -04:00
Pedro Pinto 8a05c1dbf7 Fixed fable build some more. 2018-05-17 14:46:18 -04:00
Pedro Pinto 5fcd2a08b2 AutoCert 2018-05-17 14:46:18 -04:00
John Colvin 6483a58351 SyntheticEditorView - adjust RowHeaderWidth to better fit the help texts 2018-05-17 14:39:13 -04:00
John Colvin 69c64b47f1 SPARK-1104 Implement ui to support payup spread param 2018-05-17 14:39:12 -04:00
John Colvin b2fb253969 Refactor PostHedgeOppositeVolumeBasedForceCross 2018-05-17 14:39:12 -04:00
John Colvin 5967a7c1e7 SyntheticEditor - organize cell-param files 2018-05-17 14:39:12 -04:00
Eric Harding b908c576ba SPARK-1116 2018-05-17 14:37:57 -04:00
Eric Harding 56497df68a SPARK-1110 Select first account by default 2018-05-17 14:31:20 -04:00
Kevin Darby b89c561490 spark-1088 fixed SDK for new admin model 2018-05-17 13:40:05 -04:00
Jake Norbut 7794aa89c2 SPARK-1112 2018-05-17 12:08:36 -05:00
Taha Afzal f11215df36 SPARK-1120 and manual tests changed accordingly 2018-05-17 12:38:47 -04:00
Eric Harding 5c2a1fa48e SPARK-1114 - Hide deleted users in UsersService (also don't let them log in) 2018-05-17 12:15:22 -04:00
Eric Harding 29876ec04a SPARK-1097 Can't delete user 2018-05-17 12:15:22 -04:00
Eric Harding 513f7e1310 SPARK-1097 Can't delete account 2018-05-17 12:15:22 -04:00
Eric Harding 867a52024a SPARK-1122 exception when creating new account 2018-05-17 12:15:22 -04:00
Eric Harding 9d6b985400 Admin UI: reduce logging in typescript 2018-05-17 12:15:22 -04:00
Kevin Darby 706b3b151d Pair programming with Jake, spark-1121 2018-05-17 11:58:29 -04:00
John Colvin e1f6c27a94 SPARK-1094 Hedge Ratio should have floating point increments 2018-05-17 11:36:41 -04:00
John Colvin cdaf9e9875 SyntheticEditor - use header_error_text brush 2018-05-17 11:36:41 -04:00
Eric Harding 71993d4a2d SPARK-1106 - Fix up web ui grids a bit 2018-05-17 11:03:55 -04:00
Taha Afzal 84115df405 SPARK-1017 in progress 2018-05-17 11:03:13 -04:00
Jake Norbut 5407279504 OrderBook - should filter for status = working by default; not currently working 2018-05-17 09:30:25 -05:00
Taha Afzal e0b211d002 SPARK-1078 xchange fields length restriction 2018-05-17 07:19:29 -04:00
John Colvin ec6d4936f1 OrderPropertiesEditorVM - fix internal security source 2018-05-16 19:59:03 -04:00
John Colvin 135803b2ce SPARK-1103 fills - move to separate thread 2018-05-16 19:14:40 -04:00
John Colvin 2fb91e8dd9 TimeAndSales - fix icon thread access bug by freezing icon 2018-05-16 18:46:17 -04:00
John Colvin b12fc408b5 SPARK-1102 mview - move to separate thread 2018-05-16 18:44:26 -04:00
Pedro Pinto 7193122a73 Windows screws up X permissions. 2018-05-16 16:44:30 -04:00
Pedro Pinto 1ea8a1c093 Fixed clang build. 2018-05-16 16:43:06 -04:00
Jake Norbut b7200c0581 Merged in hook_badge_style (pull request #21)
SPARK-1082 - badge sytle changes according to settings selection

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-16 20:23:43 +00:00
Taha Afzal 1ab5b65060 SPARK-1111 removal or users and accounts 2018-05-16 16:15:44 -04:00
Jake Norbut ac53734052 PR suggestion 2018-05-16 15:13:38 -05:00
Jake Norbut cdbce6b141 PR suggestion 2018-05-16 15:11:03 -05:00
Pedro Pinto f18235bf96 Ignored src/web when replicating to windows. 2018-05-16 16:01:55 -04:00
Pedro Pinto f8e638d74a Silence is golden. 2018-05-16 16:01:55 -04:00
Pedro Pinto 32dd64fca7 Autocert. 2018-05-16 16:01:55 -04:00
Pedro Pinto 395f686e19 SPARK-1039, Prettier names for default accounts. 2018-05-16 16:01:55 -04:00
Pedro Pinto 62f91d6ebb Guarded against unresolved securities when enforcing limits. 2018-05-16 16:01:55 -04:00
Pedro Pinto 2de2189710 Fixed typo in comment. 2018-05-16 16:01:55 -04:00
Pedro Pinto 51aa3edb17 Fixed typo in log msg. 2018-05-16 16:01:55 -04:00
John Colvin 01fb88a525 Ladder/Ticket - Iceberg orders' "ShowQuantity" is 1 by default 2018-05-16 15:37:57 -04:00
John Colvin cd52dad334 SPARK-1090 New spreader ladders come up without an order type 2018-05-16 15:08:49 -04:00
John Colvin f1a7fdf5cd OrderPropertiesEditorVM - remove unused code 2018-05-16 15:08:49 -04:00
Jake Norbut 96de949ac5 SPARK-1082 - badge sytle changes according to settings selection 2018-05-16 13:55:27 -05:00
Taha Afzal 23a860f7bb fixing broken build 2018-05-16 14:41:08 -04:00
Taha Afzal 2cb539508a merging 2018-05-16 14:31:21 -04:00
Taha Afzal 7059edc0b6 is_active was breaking tests 2018-05-16 14:00:27 -04:00
Eric Harding d417d99357 SPARK-1098 - Create user or account should switch to General tab 2018-05-16 13:59:09 -04:00
Taha Afzal abc400e8c4 SPARK 1046 manual cases for limiter 2018-05-16 13:22:15 -04:00
Eric Harding 52fd21c933 Add robots.txt to spark webserver 2018-05-16 12:54:07 -04:00
Jake Norbut d93e7a9f84 renaming Kevin badge style to Alternate 2018-05-16 11:08:05 -05:00
Taha Afzal bd8b15bbd9 SPARK-1022 completed 2018-05-16 12:03:52 -04:00
Eric Harding 8ac6993fd8 Serve web ui from sparkd/ui for easier production bundle. 2018-05-16 10:52:29 -04:00
Eric Harding b518ae3eca Fix and re-enable web admin build 2018-05-16 10:11:32 -04:00
Taha Afzal 64f19a93ad SPARK-1022 2018-05-15 22:07:06 -04:00
Pedro Pinto dad45f736a Disabled fable build until we figure this out. 2018-05-15 18:16:20 -04:00
Pedro Pinto 2b6a60a79f More fable build fixes, maybe the brokeness is legit. 2018-05-15 18:08:22 -04:00
Pedro Pinto a0306a412d Fixed fable build. 2018-05-15 17:42:55 -04:00
Pedro Pinto afae51012b Handled trace cancelation/correction msgs, fixed SPARK-1105 2018-05-15 17:42:55 -04:00
Eric Harding eaa12d0788 SPARK-592 - Ensure timestamp write is not re-ordered by compiler for multi-cache line depth update 2018-05-15 17:30:59 -04:00
Michael Harding a5c3d5cf09 SPARK-1100: AdminUI 2018-05-15 17:29:42 -04:00
Michael Harding 1d9333724f AdminUI: User account permissions table style 2018-05-15 17:29:42 -04:00
Eric Harding fb48fd82c7 SPARK-592 Market data atomic depth write 2018-05-15 15:28:36 -04:00
Eric Harding bf13115a14 Fix .all file in WebServer 2018-05-15 15:28:36 -04:00
Eric Harding 4bf147eee4 Update market data tests launch.json 2018-05-15 15:28:35 -04:00
John Colvin 39be08432c SPARK-1081 Last Trade Column in ladder is broken 2018-05-15 14:40:19 -04:00
Jake Norbut 0474ea1d53 Ladder - AdornerDecorator surroiunding control is necessary for red border to show errors when LaddersOnThread = true 2018-05-15 13:08:54 -05:00
Jake Norbut 78090ab15c Merged in selector_validation (pull request #20)
SelectoryProperty validation - prevent users with no accounts from sending orders

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-15 17:32:42 +00:00
Jake Norbut 2d37f88553 PR suggestion, thx John! 2018-05-15 12:22:35 -05:00
John Colvin 97447fe634 DataGridFilters - use Esc/Enter KeyBindings and Commit/Clear RoutedCommands 2018-05-15 12:49:27 -04:00
John Colvin e11835d654 SPARK-1087 typing in filter boxes 2018-05-15 12:49:27 -04:00
Taha Afzal 7797cf7435 SPARK-1046 2018-05-15 12:05:29 -04:00
Taha Afzal 71071edd05 SPARK-1022 2018-05-15 12:05:29 -04:00
Taha Afzal 1fb38badfb Temp fix for the Nullable ID vs 0 problem 2018-05-15 12:05:29 -04:00
Taha Afzal bd3399560b SPARK 1022 (more tests, better error messages etc) 2018-05-15 12:05:29 -04:00
Pedro Pinto 1ef5c670bf fable build 2018-05-15 11:58:26 -04:00
Pedro Pinto 095f258edf Disabled broke unit tests. 2018-05-15 11:58:26 -04:00
Pedro Pinto 5da057dc50 Fixed some unused references in Taha's code. 2018-05-15 11:58:26 -04:00
Pedro Pinto 0a84cb0c81 AutoCert 2018-05-15 11:58:26 -04:00
Pedro Pinto d8bc3c757f Autocert 2018-05-15 11:58:26 -04:00
Pedro Pinto 80cbb9869b AutoCert 2018-05-15 11:58:26 -04:00
Jake Norbut 4a517adefb SelectoryProperty validation - prevent users with no accounts from sending orders 2018-05-15 10:11:03 -05:00
John Colvin 18e12f47b8 Merged in ladder-dispatcher-priority (pull request #19)
Ladder dispatcher priority

Approved-by: Eric Harding <eric.harding@bluetradesys.com>
Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-15 14:41:41 +00:00
Michael Harding b1687f92e0 AdminUI: aesthetic improvements 2018-05-15 09:14:40 -04:00
John Colvin a9fb92e1d2 Ladder dispatcher priority - default priority fallback is ApplicationIdle 2018-05-14 20:07:22 -04:00
John Colvin 4781f0ba06 Ladder dispatcher priority - rename 'one_hundred' const to 'sample_cycle_size' 2018-05-14 19:15:11 -04:00
John Colvin 122451c20f Ladder Dispatcher Priority - pr edits 2018-05-14 18:41:53 -04:00
Kevin Darby 08efcf9737 workspaces.txt edited 2018-05-14 22:00:38 +00:00
John Colvin fad111314d LadderTimer typeos - actually call timer.start and update elapsed_total 2018-05-14 17:52:07 -04:00
John Colvin 8c368affd9 Merged master into ladder-dispatcher-priority 2018-05-14 17:19:15 -04:00
Michael Harding 730d43bfd8 AdminUI: Increase Similitude 2018-05-14 16:28:09 -04:00
Michael Harding 13e95023af AdminUI: Misc Tag Mapping Fields 2018-05-14 16:28:09 -04:00
Eric Harding 283a90bc50 WebUI Build: Suppress "first time experience". Thanks .NET 2018-05-14 16:06:16 -04:00
Eric Harding 3d33efd7a7 SPARK-1041 - Obfuscate missing user in failed login message. 2018-05-14 16:06:16 -04:00
Jake Norbut 8bf0ed7536 Order Properties Editor - selected account on gui does not revert back to first item in the list when an account change from the web is received 2018-05-14 15:01:59 -05:00
Jake Norbut 1b2c0e03e0 PnL - use account from order instead of fill 2018-05-14 13:07:40 -05:00
Eric Harding 1a7e9776dd SPARK-1041 Redirect login service to authenticate with AdminService 2018-05-14 13:09:49 -04:00
Eric Harding 61d297293d advance docker pointer 2018-05-14 12:26:21 -04:00
Eric Harding e9aec2aad6 Fix npm install to not use --production because it fails to install build dependencies. Also alias doesn't work 2018-05-14 12:25:45 -04:00
Michael Harding 96d76d26b5 AdminUI: update page title and favicon 2018-05-14 11:36:23 -04:00
Eric Harding c0bc773bbc Advance docker pointer. Maybe it will stay that way. haha 2018-05-14 10:44:26 -04:00
Eric Harding c0cfd6e167 Remove obj files from web build. Take a temporary dependency on mono 2018-05-14 10:44:26 -04:00
Eric Harding b44fec29b1 NPM: add --production flag so it doesn't try to change anything 2018-05-14 10:44:26 -04:00
Michael Harding 425b1a82fd GTS->BTS 2018-05-14 10:04:47 -04:00
Eric Harding 2cdf21455e Merged in jsmap (pull request #18)
Replace "obj" with JSMap type which emulates Map but is backed by a plain JS object

Approved-by: Michael Harding <michael.harding@bluetradesys.com>
2018-05-14 13:49:58 +00:00
Michael Harding fd523a645d Fix line endings in docker_update.sh 2018-05-14 09:30:37 -04:00
Eric Harding 32ff893f99 Replace "obj" with JSMap typ which emulates Map but is backed by a plain
JS object
2018-05-14 08:32:19 -04:00
John Colvin 5927be56a2 fix typeo 2018-05-12 17:12:51 -04:00
John Colvin b35cfbd824 add config for Ladder DispatcherTimer 2018-05-11 22:37:44 -04:00
Jake Norbut 3f1d98a613 accounts changed to SelectorProperty 2018-05-11 16:13:01 -05:00
John Colvin e8423ee11e SPARK-1085 Cancel Buys/Cancel Sells button should reflect bid/ask column color 2018-05-11 15:51:20 -04:00
John Colvin 6cca33841a SPARK-1084 Market Break Settings 2018-05-11 15:26:18 -04:00
John Colvin 11468548c2 LadderSettingsView - reduce font cell width (looked too wide for reasonable font sizes) 2018-05-11 14:57:50 -04:00
John Colvin 402abafaca OrderPropertiesEditorVM - use ViewModelBase.SelectorProperty for TimeInForce 2018-05-11 14:40:50 -04:00
Jake Norbut 664a46d438 Changing About Edge to About Spark 2018-05-11 12:11:23 -05:00
Jake Norbut 098fbb1a23 updating p and l test text 2018-05-11 12:11:23 -05:00
Michael Harding 38e32c645d GTS 2018-05-11 12:08:29 -04:00
Kevin Darby 6de4d74d87 audit uploader needs an example file 2018-05-11 10:03:32 -04:00
Michael Harding b27a54e0fb SPARK-1074 2018-05-11 09:43:22 -04:00
Kevin Darby 3040516f84 adding audit uploader for Karl 2018-05-10 17:29:18 -04:00
John Colvin 5262cb4966 Ladder - marketbreak IndexOutOfRange bug 2018-05-10 17:24:16 -04:00
Michael Harding 5a4199bf93 AdminUI: Add Add User button 2018-05-10 17:18:54 -04:00
Michael Harding 4eb2790ee4 SPARK-1077: Saving or changing a user undirties the ui state 2018-05-10 17:18:54 -04:00
Michael Harding 860640cda5 Dont Expect an Obj to be a Map any more 2018-05-10 17:18:54 -04:00
Michael Harding 354c3e04bf AdminUI: Hide User controls if no user is selected 2018-05-10 17:18:54 -04:00
Jake Norbut ac6a5cd88d mysterious control Error when no Error; possibly a WPF validation bug; thx Eric! 2018-05-10 16:10:26 -05:00
Kevin Darby 7384a11070 fix build 2018-05-10 16:09:26 -04:00
Kevin Darby cc4bc755ae placeholder span command 2018-05-10 15:58:06 -04:00
John Colvin a907675a41 SPARK-1070 Disallow creation of synthetics with more than 2 legs 2018-05-10 15:32:54 -04:00
Eric Harding b25121d94a AdminServiceServer should save data to disk when it changes. 2018-05-10 15:10:56 -04:00
John Colvin 70eed209e5 SPARK-1072 MarketView - Qty columns surrounding Bid Ask columns are not sortable 2018-05-10 15:03:20 -04:00
John Colvin 868aa305d1 OrderBadge - FontFamily AffectsRender and updates text 2018-05-10 14:50:32 -04:00
John Colvin 82d59252ec UserSettingsTest 2018-05-10 14:42:12 -04:00
John Colvin aa921a22b7 LadderSettingsView - show badge in Orders column sample cell 2018-05-10 14:42:11 -04:00
Eric Harding a5152fa4cc SPARK-1071 Web UI cannot be accessed from differnet machines. 2018-05-10 13:48:09 -04:00
Pedro Pinto 5208be6cd1 Updated test script. 2018-05-10 12:00:19 -04:00
Pedro Pinto b764726d99 Refactor tests 2018-05-10 11:32:23 -04:00
John Colvin 3170574272 checking in placeholder-settings-test 2018-05-10 10:55:33 -04:00
Taha Afzal 6b557b1f88 disabling limiter until the defaults work properly 2018-05-10 10:28:02 -04:00
Taha Afzal be062cc014 default sec and prod position limits 2018-05-10 10:10:00 -04:00
Taha Afzal f4a2b788ff SPARK-1022 2018-05-10 10:10:00 -04:00
Pedro Pinto b773e801f7 Wasn't calling update on Limiter when new admin available. 2018-05-10 09:45:58 -04:00
Pedro Pinto 7bf099060a Auto cert 2018-05-10 09:45:58 -04:00
Jake Norbut 0120c58ed4 misc refactoring 2018-05-10 08:14:32 -05:00
Jake Norbut c791dd81d6 Merged in more_stops (pull request #17)
SPARK-975 - StopLimits and disallow both price and size changes

Approved-by: Pedro Pinto <pedro.pinto+atlassian@bluetradesys.com>
Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-10 12:44:05 +00:00
John Colvin 141e0a64d4 thicken shell window border to make resizing threaded windows easier 2018-05-10 00:49:17 -04:00
Eric Harding ab57fac1a8 WebUI: workaround for lack of structural equality in Pojo types 2018-05-09 22:31:15 -04:00
Eric Harding 0cda9ec9ae Strip query string from request path for font-awesome 2018-05-09 20:27:08 -04:00
Eric Harding fefa659150 WebUI: Limits remove functionality 2018-05-09 20:04:46 -04:00
John Colvin 3ea77974d4 CME gen open time config and TimeFilter RadioButton item 2018-05-09 20:02:01 -04:00
Eric Harding 70e264e693 Remove typescript generation from build.sh 2018-05-09 18:34:16 -04:00
John Colvin 6f9d0c4897 LadderSettings - fix startup race, remove WindowManagerFactory 2018-05-09 17:54:15 -04:00
John Colvin 198d006e6d fix LadderSettings Equals fn 2018-05-09 17:54:15 -04:00
Eric Harding 0cbe1a6988 WebUI: Add Position limits grids 2018-05-09 17:39:14 -04:00
Michael Harding 6bd8f1d1ac AdminUI: User Page 2018-05-09 17:20:10 -04:00
Michael Harding 7fed123f99 AdminUI: select name conflict 2018-05-09 17:18:35 -04:00
Michael Harding c6e468aba4 AdminUI: Update TableControl 2018-05-09 17:02:57 -04:00
Michael Harding 2d96a7e9c4 AdminUI: Obj functions in Reflection 2018-05-09 17:02:24 -04:00
Michael Harding aa345e2dd7 AdminUI: Add new Fields 2018-05-09 17:00:36 -04:00
Michael Harding 0946c528a9 AdminUI: Add password field 2018-05-09 16:53:11 -04:00
Michael Harding 0f8ce93a21 AdminUI: Add TableControl 2018-05-09 16:53:11 -04:00
Eric Harding 5106f99870 WebUI: drop down selection in react-data-grid 2018-05-09 15:03:58 -04:00
Jake Norbut eaa09435c8 SPARK-975 - StopLimits and disallow both price and size changes 2018-05-09 12:49:32 -05:00
John Colvin 18f77215f0 LadderSettings/FontPicker font-size-ticker resize bug 2018-05-09 13:31:12 -04:00
John Colvin 2b29a6ae17 accidentally negated LadderOnThreads 2018-05-09 12:20:15 -04:00
John Colvin 73544c13a7 remove superfluous comment 2018-05-09 12:17:00 -04:00
John Colvin b1f1fe682f Ladder - automatically adjust row_height to fit font size 2018-05-09 12:15:47 -04:00
John Colvin 4aa8818cb0 define DialogSkirt default style in xaml (no partial class) 2018-05-09 12:15:46 -04:00
Eric Harding 048d8d1882 WebUI: actually don't use toObject. It doesn't work 2018-05-09 11:20:30 -04:00
Eric Harding 60adb8b55b WebUI: Use toObject/fromObject instead of hand written enum conversion 2018-05-09 10:15:50 -04:00
Eric Harding da5ebf27c8 VSCode wants this file changed 2018-05-09 10:02:35 -04:00
Eric Harding 5dfd0ffbdd Web UI: Enums IV reveng of the integer 2018-05-08 22:18:33 -04:00
Eric Harding 12e4e3ad8d Enums - Never more than possibly correct. 2018-05-08 14:54:42 -04:00
Eric Harding 115bc16b12 Javascript enums are my nemesis 2018-05-08 14:40:20 -04:00
Eric Harding 7b2a81c51d WebUI: add fields.enumeration to make a dropdown 2018-05-08 13:14:53 -04:00
John Colvin 75ccf5a1af Organize the random assortment of files in core\utils, and core\Utility 2018-05-08 12:40:08 -04:00
Eric Harding 09bc617859 Web UI: Improve enum generation 2018-05-07 23:23:09 -04:00
Eric Harding f4890e0adc Web UI: Additional generated enum functions 2018-05-07 22:58:52 -04:00
John Colvin 1fed3a0ccf Ladder - fix badge drag lag 2018-05-07 18:54:48 -04:00
Taha Afzal 075fbff042 SPAKR-1022, just need to link Limiter to LimitStore now 2018-05-07 18:19:12 -04:00
Eric Harding 88073c6c4f Fix adminservice users test 2018-05-07 17:42:54 -04:00
Eric Harding 53d32753f1 Treat 0 as empty for create_account (adminserviceserver.cpp) 2018-05-07 17:38:50 -04:00
Michael Harding 10e62d1ce7 Add smp_instruction and max_order_rate_per_connection AdminService.proto 2018-05-07 16:30:26 -04:00
Michael Harding 013153add7 AdminUI: Checkbox on same line 2018-05-07 16:30:26 -04:00
Taha Afzal cb53e1eb31 AdminService create user returns AdminServiceCreateEntityResult 2018-05-07 16:30:10 -04:00
Taha Afzal 1d94edd4b9 AdminService update_user wholesale for Admin UI 2018-05-07 16:09:21 -04:00
Eric Harding 7dcb1e67d9 Web UI: Accounts->Exchange Settings 2018-05-07 15:41:49 -04:00
John Colvin 19cc2c4ed8 GlyphContext - don't use obsolete GlyphRun constructor (get dpi_ratio) 2018-05-07 14:40:12 -04:00
John Colvin 83cb900c1c GlyphContext - return null if typeface does not have key for char (avoid KeyNotFoundException) 2018-05-07 14:34:10 -04:00
John Colvin 340c270e8a GlyphContext - Lazy glyph-char-mapping 2018-05-07 14:20:38 -04:00
Eric Harding 1263b91cfd WebUI: Accounts->ClipLimits 2018-05-07 14:16:37 -04:00
Taha Afzal 4e27cc6140 SPARK 1022 organizing files 2018-05-07 13:46:49 -04:00
Taha Afzal 688e0d650e SPARK 1022 organizing files 2018-05-07 13:42:51 -04:00
John Colvin d591420054 LadderSettings - use Subject instead of event for default settings changes (thread safe) 2018-05-07 12:55:06 -04:00
Eric Harding 8b0dad3d61 Fix admin service tests 2018-05-07 11:55:46 -04:00
Eric Harding f0605f1e96 WebUI: Save/Create accounts 2018-05-07 11:44:59 -04:00
John Colvin be523c1848 LadderSettingsDialog - bind to 'use default' check box (not default-tab-selected) 2018-05-07 10:59:07 -04:00
Taha Afzal 6d721fa186 SPARK 1022 adding account wholesale update function for the webUI 2018-05-07 10:33:58 -04:00
Taha Afzal 905f079757 SPARK 1022 adding limit functions 2018-05-07 10:12:09 -04:00
Pedro Pinto e53c186ea9 Batched new secs in a single call to limiter. 2018-05-07 10:10:36 -04:00
Jake Norbut 3d08755ffe Merged in ladder_validation_no_account (pull request #16)
Enforcing account validation at the start in the case a user does not have any accounts from the new AdminService
2018-05-07 14:03:11 +00:00
Eric Harding d3422010df Web UI: refactor scratch to plain account 2018-05-07 09:56:02 -04:00
Your Name 70a768e475 Update fable assets - part2/2 (linux) 2018-05-07 12:57:51 +00:00
Eric Harding 2503dd414f Updated fable assets - part1 2018-05-07 08:53:41 -04:00
Taha Afzal 30f5a56a8d SPARK 1022 getting there 2018-05-07 08:34:52 -04:00
Taha Afzal 3d42ef609e SPARK 1022 75% done 2018-05-07 07:44:06 -04:00
John Colvin 4ad679b65d fix typeos 2018-05-06 22:16:33 -04:00
John Colvin fc8f55930f change ColorPicker from UserControl to Control (improves perf by reducing baml load) 2018-05-06 22:14:25 -04:00
John Colvin 8d7c7fc742 ladder settings dialog tweaks 2018-05-06 20:34:53 -04:00
Eric Harding 3ffa831a4e Javascript: A Comedy of Errors 2018-05-05 22:17:40 -04:00
Eric Harding 3d6326502d DataGrid example code. Import is still giving me trouble. 2018-05-05 13:58:47 -04:00
Eric Harding 8ec01e5930 Admin UI: Accounts->General 2018-05-05 10:53:19 -04:00
Jake Norbut ebe0c1e6ec PR suggestion 2, thx john! 2018-05-04 16:33:50 -05:00
Eric Harding 8bbfcd7734 Web UI - some utils 2018-05-04 17:30:19 -04:00
Jake Norbut 68bd4b5a73 PR suggestion 2018-05-04 16:21:25 -05:00
Michael Harding 16d02f30c5 AdminUI: Fields Controls 2018-05-04 15:57:20 -04:00
Pedro Pinto 1f0cf2b3f5 SPARK-1025, Native orders are tagged with their native type. 2018-05-04 15:05:22 -04:00
Pedro Pinto 9a3b806d9e Fixed build in latest clang. 2018-05-04 15:05:22 -04:00
Pedro Pinto 5e4e56dab6 Fixed the docker subrepo ptr again, taha just stop it 2018-05-04 15:05:22 -04:00
John Colvin 8925db961b LadderSettingsDialog - adjust open position 2018-05-04 14:36:59 -04:00
John Colvin 4b0c22b2fa LadderSettings - Import/Export menu items 2018-05-04 14:32:38 -04:00
John Colvin ed4d50a2fd x:Shared=False for Import/Export icons 2018-05-04 14:22:01 -04:00
Jake Norbut 18a60d854d Enforcing account validation at the start in the case a user does not have any accounts from the new AdminService 2018-05-04 12:59:34 -05:00
John Colvin 44caaf6b4c LadderSettings - fix LadderOrderVM 'DependencySource thread bug' 2018-05-04 12:16:00 -04:00
Michael Harding bc7f1af5be forcing things to exist in JS 2018-05-04 11:53:45 -04:00
Taha Afzal d7b3f5df7c SPARK-1020 Implement OrderRouter 2018-05-04 11:34:47 -04:00
Taha Afzal 31ba0f22e9 SPARK-1020 Implement OrderRouter 2018-05-04 11:31:47 -04:00
Pedro Pinto c0cfb63d7b Moved docker sub repo pointer forward 2018-05-04 09:21:44 -04:00
Eric Harding 945ea04102 WebUI: Typo in DynamicService.ts 2018-05-04 09:20:49 -04:00
Eric Harding b3bf25f81d Web: Fill in defaults for returned proto types 2018-05-04 09:14:41 -04:00
John Colvin 8c4a7ae0f0 Ladder - add\implement market-break-line settings 2018-05-03 20:54:07 -04:00
John Colvin d739d19a42 Ladder - "Last" column actually uses its column settings' background 2018-05-03 17:34:34 -04:00
Eric Harding 663dd92751 WebUI: add accounts page skeleton 2018-05-03 17:30:13 -04:00
John Colvin a14ec89b4f Ladder - badge only sets fontsize once: in format_text 2018-05-03 17:10:37 -04:00
John Colvin e821548a5d Ladder - order badges actually use settings fontfamily/size/color 2018-05-03 17:01:52 -04:00
Eric Harding 0dc6c16e6b Web: Account for 'null' in generated code 2018-05-03 16:54:05 -04:00
Eric Harding 3bb527247d Web: Add react grid and higher level wrapper 2018-05-03 16:54:05 -04:00
Taha Afzal 2290c955ef SPARK-964 2018-05-03 14:56:03 -04:00
Taha Afzal d28e8a2eab SPARK-1034 (cleaing up OrderRouter.cpp) 2018-05-03 14:56:03 -04:00
Eric Harding b8674fcbb9 Update Fable and add ReactGrid 2018-05-03 14:51:46 -04:00
Eric Harding adcaee1480 Web UI: Remove counter. Add Accounts 2018-05-03 14:51:46 -04:00
Pedro Pinto c748149174 Fixed build. 2018-05-03 14:47:21 -04:00
Pedro Pinto 65fd36e9ae SPARK-1018, Code complete. 2018-05-03 14:39:05 -04:00
Pedro Pinto e2a3055046 Added a const qualifyer to order::definition 2018-05-03 14:39:05 -04:00
Pedro Pinto 2d9a61ca15 SPARK-1201, Integrated Limiter with NativeOrder 2018-05-03 14:39:05 -04:00
Michael Harding 0fe6da7eab is_active -> isActive 2018-05-03 14:32:06 -04:00
Michael Harding 01660153c0 WebAdmin: Using real user Data 2018-05-03 14:32:06 -04:00
Michael Harding 95d0d17bcf fix tools/docker_update.sh 2018-05-03 14:32:06 -04:00
John Colvin 9009678f7c LadderSettingsVM - remove redundant fn call 2018-05-03 14:28:37 -04:00
John Colvin d55c52df62 Ladder - actually use column settings font size 2018-05-03 14:27:36 -04:00
John Colvin 24a128d041 SPARK-1027 Empty ladder 2018-05-03 14:15:25 -04:00
John Colvin cd699d5ad7 LadderTactileAdorner draws GlyphRuns and uses settings font/foreground 2018-05-03 13:49:37 -04:00
John Colvin 51b62ac66f LadderSettingsView - vertically center align some text 2018-05-03 13:31:24 -04:00
John Colvin fed0427cbc accidentally negated the LaddersOnThreads toggle (changed it for testing purposes) 2018-05-03 13:23:18 -04:00
John Colvin fb498adffe ladder - actually use column settings' fontweight 2018-05-03 13:02:57 -04:00
John Colvin eb84ba8371 fix FontPicker (plus a little refactoring) 2018-05-03 13:02:57 -04:00
Jake Norbut ab078bdad3 updating test to check for our favorite bts user 2018-05-03 11:43:32 -05:00
Jake Norbut 6f0da78530 Merged in account_service_hookup (pull request #15)
Account service hookup

Approved-by: Eric Harding <eric.harding@bluetradesys.com>
Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-03 16:32:15 +00:00
Jake Norbut 8a0daed378 merge redux round 2; fixing user in orderbook to look at user and not login 2018-05-03 11:28:59 -05:00
Eric Harding 2636f5dde4 SPARK-958 Improved code gen 2018-05-03 12:24:11 -04:00
John Colvin 3f1aa74bbb Merged in settings-framework (pull request #14)
Settings framework

Approved-by: Eric Harding <eric.harding@bluetradesys.com>
Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-05-03 16:07:14 +00:00
John Colvin af0152b945 PR edits 2018-05-03 11:57:41 -04:00
Jake Norbut a2d83a79ff resolving merge conflict with master 2018-05-03 10:34:42 -05:00
Taha Afzal e0f2b7e2ed SPARK-1034 (is_valid_session) 2018-05-03 11:00:58 -04:00
Taha Afzal cc919a08d0 SPARK-1034 (connections are correctly read from config now) 2018-05-03 11:00:58 -04:00
Michael Harding b515e55378 WebAdmin: Change Title 2018-05-03 10:55:32 -04:00
Jake Norbut c2b8e9c382 removing the bus too since the moodel doesn't publish anythinng to it at the moment 2018-05-03 09:39:26 -05:00
Jake Norbut e553e5fa1e Since we don't have anhy IDisposables yet, removing the interface; also we're only using the IOBservable, so removing the unused Task 2018-05-03 09:32:38 -05:00
Jake Norbut 1aee8d4920 removing empty file 2018-05-03 09:31:26 -05:00
Michael Harding 07629cadcb Admin-UI: use newer node-sass 2018-05-03 10:02:39 -04:00
Michael Harding f3adfc142d Move FontAwsome 2018-05-03 10:02:39 -04:00
John Colvin 554ff8ea6f rename PropertyUpdateLock to PropertyUpdateGate 2018-05-02 22:48:28 -04:00
John Colvin ff66c3767d fix typeo in class name 2018-05-02 22:33:25 -04:00
Eric Harding af2504b9cd SPARK-1035 Make F# generated code more idiomatic 2018-05-02 20:47:43 -04:00
John Colvin 535b901d6f SPARK-969 design and implement a settings framework (ui) 2018-05-02 20:31:24 -04:00
John Colvin e45952ea2c NotConverter goes both ways 2018-05-02 20:31:24 -04:00
John Colvin f85dbc4b5f add new FontPicker 2018-05-02 20:31:24 -04:00
John Colvin 96d59d1885 add new ColorPicker (remove old one) 2018-05-02 20:31:24 -04:00
John Colvin 9df77f7d70 FileDialogCommands to import/export proto objs 2018-05-02 20:31:23 -04:00
John Colvin 7346b99371 SPARK-969 design and implement a settings framework (no ui yet) 2018-05-02 20:31:23 -04:00
Jake Norbut 47f9c837f0 accounts must be under 12 characters 2018-05-02 17:16:15 -05:00
Jake Norbut 3d88d5b2a6 popuulating order_id and account_id on orders 2018-05-02 16:56:11 -05:00
Eric Harding a9dee31c41 Serve admin UI from sparkd root path 2018-05-02 17:55:05 -04:00
Eric Harding 5abd9879fc immutable.pb.js missing extra {} for exception message 2018-05-02 17:46:42 -04:00
Jake Norbut 6fe3d1664d Start of AdminModel 2018-05-02 16:00:18 -05:00
Pedro Pinto 2edd509635 SPARK-1018, Towards limiting order entry. 2018-05-02 15:53:23 -04:00
Pedro Pinto 7340753458 Added additional methods to OrderRouter.
1) Resolve tags by ids rather than string names
2) Add a reverse route map to help recover when order records are lost.
2018-05-02 15:53:23 -04:00
Taha Afzal 330cd2ba6d SPARK 1-34 almost done 2018-05-02 15:25:57 -04:00
Eric Harding f935c7109f Make this part of build output more obvious 2018-05-02 13:39:28 -04:00
Eric Harding 284ed47ddc Line endings. My eternal foe 2018-05-02 11:20:39 -04:00
Eric Harding e5262ed44f externals 2018-05-02 10:55:31 -04:00
Pedro Pinto 8b812735fb Added account id and user id to Order def for Jake to fill in. 2018-05-02 10:54:05 -04:00
Eric Harding 98524ee1e4 SPARK-1028 2018-05-02 10:48:03 -04:00
Pedro Pinto 141aa3b0ba Fixed race condition that was causing ServiceBridge to crash. 2018-05-02 10:08:36 -04:00
Taha Afzal d81d13b40a fixing build 2018-05-02 10:03:45 -04:00
Taha Afzal cc300a7a2d externals 2018-05-02 09:54:51 -04:00
Taha Afzal a852423f4b externals 2018-05-02 09:37:50 -04:00
Taha Afzal c9e875540b SPARK-1020 getting the connections from config 2018-05-02 09:23:43 -04:00
Taha Afzal b020349fe3 SPARK-1018 OrderRouting cti, account etc done, connection name to be done 2018-05-02 09:23:43 -04:00
Eric Harding bf13877750 SPARK-1031 auto-reconnect websocket more than once 2018-05-01 17:41:57 -04:00
Eric Harding 2408c8dcc7 SPARK-1030 Make authentication real 2018-05-01 17:18:05 -04:00
Jake Norbut 7a329522bb Badges - up to 2 badges side by side, qty in 100s 2018-05-01 15:13:17 -05:00
Eric Harding fca0489085 docker container should restart itself on boot 2018-05-01 16:10:58 -04:00
Eric Harding 70aa95ba36 advance docker pointer 2018-05-01 16:10:45 -04:00
Eric Harding d36b2c6dab SPARK-1028 - these files need to be here until the next version of paket 2018-05-01 16:10:38 -04:00
Kevin Darby 32a9a3c425 badge wars 2018-05-01 14:29:57 -04:00
Pedro Pinto bd15bb43fe Removed assertion that a FIX session must exist for inactive orders. 2018-05-01 14:12:16 -04:00
Your Name ff49178dff SPARK-1028 Update web UI build script to produce full bundle on linux. Also +x 2018-05-01 17:59:46 +00:00
Eric Harding d9f1c17053 Add AdminService to Imports.fs. Remove non-generated HelloService definition. 2018-05-01 11:29:28 -04:00
Eric Harding 55dbccfb35 Advance externals pointer (again) 2018-05-01 10:23:54 -04:00
Eric Harding 630a7aef17 SPARK-1000 Complete code generator for .proto->.ts->.js 2018-05-01 09:43:47 -04:00
Taha Afzal eca65db215 SPARK-1013 adding exchange data to boostrap data 2018-04-30 18:19:53 -04:00
Taha Afzal 8214f838b4 accidentally had some test proto's in AdminService 2018-04-30 18:19:53 -04:00
Taha Afzal 270e882c04 hooking admin services to the stream 2018-04-30 18:19:53 -04:00
Taha Afzal e3ca3143be SPARK-1013 moving the service helper to its own place 2018-04-30 18:19:53 -04:00
Kevin Darby 43e68cd43c slightly better badges; I think the multi-badge idea might be inherently flawed 2018-04-30 18:00:19 -04:00
Michael Harding 242784ab3d add docker_update.sh 2018-04-30 17:03:18 -04:00
Eric Harding 71913cfe83 SPARK-1000 Add DynamicService.ts and initial generator template 2018-04-30 16:10:21 -04:00
Eric Harding ec7a4df5ee Remove underscore restiction on qualifier in ApiServerInterop 2018-04-30 15:55:28 -04:00
Pedro Pinto be918fc3b1 Changed how we define the FIX connections used by spark.
All connections present in the JetFIX key will now be used, the
SparkConnection key is deprecated. Actual selection of connection will
be done through the Admin model.
2018-04-30 15:12:41 -04:00
Pedro Pinto a5421dbe2d SPARK-1026, briding Admin Service to Order Manager. 2018-04-30 14:23:44 -04:00
Taha Afzal 450a7a8c86 SPARK-1013 hooking OrderRouter to new model 2018-04-30 07:47:34 -04:00
Taha Afzal 431bed6819 SPARK-1013 bootstrapping with good values 2018-04-28 22:34:37 -04:00
Eric Harding 02cf1fbed9 Add web api build script 2018-04-28 14:50:31 -04:00
Eric Harding 6b3a88905c merge from JS branch 2018-04-27 17:24:52 -04:00
Eric Harding fc5ebd2cb0 SPARK-1000 Add template for typescript generation. 2018-04-27 16:50:53 -04:00
Taha Afzal 703d03d24a db name change 2018-04-27 15:10:57 -04:00
Taha Afzal ed4fdf4284 SPARK-1013 more tests 2018-04-27 14:40:21 -04:00
Pedro Pinto 10252ba7c0 SPARK-1019, Towards proper order routing 2018-04-27 10:28:22 -04:00
Taha Afzal 49e462b54d SPARK-1013 tests, more to follow 2018-04-27 07:40:05 -04:00
Michael Harding 9bd6c53642 WebUI: add initial Users page 2018-04-26 17:04:45 -04:00
Eric Harding 27940b65ee Web UI - simplify left side menu code 2018-04-26 14:18:13 -04:00
Taha Afzal 7db16e87f4 SPARK-1013 service is complete 2018-04-26 14:00:25 -04:00
Eric Harding 9929f38f4d fix typo 2018-04-26 13:44:03 -04:00
Eric Harding ccef457e41 Anon interface is more type safe than createObj 2018-04-26 13:43:22 -04:00
Eric Harding f169991241 Add UglifyJS to webpack config. This reduces release bundle to 620k->150.gz 2018-04-26 13:42:52 -04:00
Taha Afzal 15c8ecc3e6 SPARK-1013 proto name changes 2018-04-26 12:36:11 -04:00
Eric Harding dfbc319926 Call 'HelloService' on the spark server for 'home' as sample 2018-04-26 12:15:18 -04:00
Eric Harding 6541ca2685 Add test for multiple calls to the same service 2018-04-26 12:14:36 -04:00
Taha Afzal a3b94a3cf3 SPARK-1013 user account permissions 2018-04-26 11:44:11 -04:00
Michael Harding 5fbdedfdca Login Classname 2018-04-26 10:50:51 -04:00
Michael Harding 25c793e232 Login is a form again 2018-04-26 10:50:51 -04:00
Michael Harding e141800e60 Login Message 2018-04-26 10:50:51 -04:00
Michael Harding b15f4cebf1 Logout Button 2018-04-26 10:50:51 -04:00
Taha Afzal a444e71f70 SPARK-1013 helper functions on the admin data 2018-04-26 10:29:53 -04:00
Taha Afzal ed1b3aca92 SPARK-1013 helper functions on the admin data 2018-04-26 07:30:48 -04:00
Taha Afzal a8aa62aaaa SPARK-1013 helper functions on the admin data 2018-04-25 20:11:32 -04:00
Taha Afzal 245b48cb0a SPARK-1013 implementing more API functions 2018-04-25 18:54:33 -04:00
Eric Harding 3dc8dd7acb SPARK-958 APIGateway.cpp RPC handler 2018-04-25 18:01:05 -04:00
Jake Norbut ba4c04f55a badge full vertical height 2018-04-25 13:49:58 -05:00
Taha Afzal 799f06247d SPARK-1013 moving admin data functions into its own util class 2018-04-25 12:56:17 -04:00
Taha Afzal e4b155b270 SPARK-1013 (changing namespaces) 2018-04-25 12:56:17 -04:00
Jake Norbut fcffe2ad11 Badges - going to a version with () for seels 2018-04-25 08:13:33 -05:00
Eric Harding ce44f015e5 Remove underscore restiction on qualifier in ApiServerInterop 2018-04-25 09:09:07 -04:00
Eric Harding f3a2525b8d Typescript shared javascript's flawed notion of 'this'. 2018-04-24 22:19:31 -04:00
Eric Harding 783a71217f Fix typescript unit tests... maybe? 2018-04-24 21:22:55 -04:00
Eric Harding 49d16a3e03 Typescript does not let me type 'export' in bts_assert.ts for no discernable reason. 2018-04-24 17:33:16 -04:00
Eric Harding 9f624d54b3 merge 2018-04-24 15:41:27 -04:00
Eric Harding 643cd33762 Web: Fix jest unit tests. Inject WebSocket from test code 2018-04-24 15:39:23 -04:00
Eric Harding cdc0831ca6 Change typescript output path to fix .d.ts is a source file error 2018-04-24 15:38:08 -04:00
Eric Harding 40d808ed7a SPARK-958 encode request to server 2018-04-24 15:38:08 -04:00
Michael Harding 2eb1468781 Eric's login changes 2018-04-24 15:31:52 -04:00
Kevin Darby d223929caa don't need GC thanks to the CompositeDisposable 2018-04-24 13:57:52 -04:00
Jake Norbut c6783383ef Badges - be able to discern order type from the badge at a glace per pedro + kevin 2018-04-24 13:57:52 -04:00
Eric Harding 9b776c52f7 Commit updated cmakedeps.cmake 2018-04-24 13:57:52 -04:00
Kevin Darby 627f228e4e don't need GC thanks to the CompositeDisposable 2018-04-24 13:56:22 -04:00
Michael Harding 720695b613 The Page is dead, long live the Page 2018-04-24 13:24:20 -04:00
Jake Norbut c7e89a8e0a Badges - be able to discern order type from the badge at a glace per pedro + kevin 2018-04-24 11:46:07 -05:00
Kevin Darby 1704abcd47 Merge branch 'prod' of bitbucket.org:bluetradesys/spark into prod 2018-04-24 12:44:35 -04:00
Eric Harding 3ba69bfdbc Commit updated cmakedeps.cmake 2018-04-24 12:44:13 -04:00
Kevin Darby d8ba3e1198 reduce logging for demo 2018-04-24 12:44:11 -04:00
Kevin Darby 2b4ee75393 exposed immutable in sdk and added ToString() => _impl.ToString()
made a slightly better async model in sdk
2018-04-24 12:38:18 -04:00
Taha Afzal eaf6e27c56 SPARK-1013 (moving files) 2018-04-24 12:30:06 -04:00
Taha Afzal d104a6b3b7 SPARK-1013 in progress 2018-04-24 12:05:35 -04:00
Taha Afzal f188869413 SPARK-1013 in progress 2018-04-24 11:35:27 -04:00
Taha Afzal 6c9ec7238d SPARK-1013 in progress 2018-04-24 10:58:56 -04:00
Taha Afzal d2fb9f2b7b SPARK-1013 in progress 2018-04-23 23:21:34 -04:00
John Colvin dad7fe654a Merged master into prod 2018-04-23 20:21:54 -04:00
John Colvin f6522db4f1 SPARK-1014 Timebox "start immediately" needs 500 ms delay 2018-04-23 20:08:08 -04:00
John Colvin 5ca1c87ba8 Merged master into prod 2018-04-23 19:49:41 -04:00
John Colvin c05be5e6a1 synthman - fix resource-created-on-a-different-thread crash 2018-04-23 19:41:08 -04:00
John Colvin 9f4bed9cfe fix synthetic editor popup crash 2018-04-23 19:17:25 -04:00
John Colvin e1ccbfb672 TextUtils - change default typeface to Segoe UI 2018-04-23 17:24:54 -04:00
Kevin Darby ef65163ed8 reduce logging for demo 2018-04-23 17:21:39 -04:00
Pedro Pinto fa290833ce Downgrading exchange sim log messages. 2018-04-23 16:48:17 -04:00
Pedro Pinto 8b75a6fdc3 Some work to facilitate CME certification. 2018-04-23 16:48:17 -04:00
John Colvin 4df93163f7 mview - do not overwrite initial sorting 2018-04-23 16:16:22 -04:00
John Colvin 5867fba95d DIYGrid - initialize sorting properly 2018-04-23 15:48:23 -04:00
Taha Afzal 1f68d1d7a0 SPARK-1013 in progress 2018-04-23 15:33:06 -04:00
Eric Harding 050057e43f Web: Fix jest unit tests. Inject WebSocket from test code 2018-04-23 15:07:14 -04:00
Eric Harding 4a327411d4 Web: More idiomatic use of Cmd.ofPromise 2018-04-23 14:26:37 -04:00
Eric Harding 62bc828e79 Web UI: Handle login response from server 2018-04-23 13:45:38 -04:00
Eric Harding cb9a9bdd92 Web UI: Contact server for login information 2018-04-23 13:04:03 -04:00
Taha Afzal 5ac21f14fb SPARK-1013 in progress 2018-04-23 12:49:57 -04:00
John Colvin 3cc78e6f72 fills - use DIYGrid 2018-04-23 11:57:39 -04:00
Jake Norbut a4091cc47f Merged in stop_orders (pull request #13)
Stop orders

Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-04-23 15:21:42 +00:00
Eric Harding e61be98c61 WUI: fix import 2018-04-23 11:03:34 -04:00
John Colvin 9413e89ce5 mview - remove unused xaml #DIYGrid 2018-04-23 10:43:41 -04:00
Taha Afzal a1ba9579fc SPARK-1013 2018-04-23 08:07:52 -04:00
John Colvin 59467becf9 DIYGrid - fix column-reverse-sort bug 2018-04-22 20:40:14 -04:00
John Colvin 1073ff84e9 mview - some cols weren't updating #DIYGrid 2018-04-22 20:39:28 -04:00
John Colvin d819e440dd DIYGrid - render text with GlyphContext 2018-04-22 19:49:41 -04:00
John Colvin d76f465086 DIYGrid - mview commands 2018-04-22 17:07:24 -04:00
John Colvin ca6e11715d DIYGrid - sorting 2018-04-22 12:28:16 -04:00
John Colvin 2c976f0ad1 TimeAndSalesView - add AdornerDecorator #DIYGrid 2018-04-22 12:26:01 -04:00
John Colvin 9e8e10fce8 DIYGridAnimationAdorner - only InvalidateVisual when necessary 2018-04-22 12:26:01 -04:00
Taha Afzal ac5df69c67 user model service API 2018-04-22 10:20:40 -04:00
John Colvin 671ef41a5b Merge branch 'master' into implementing-diy-grid 2018-04-21 17:13:24 -04:00
John Colvin 33b69b09a0 SPARK-979 on the ladder the order type currently selected is not saved across sessions 2018-04-21 16:03:45 -04:00
John Colvin 6e8c1df339 SPARK-935 Adding securities to market view removes sorting 2018-04-21 15:46:09 -04:00
John Colvin 65c873da9a SPARK-1004 Timebox order start time should be 5 minutes in the future, stop 10 minutes in the future 2018-04-21 13:15:43 -04:00
John Colvin 0480405291 SPARK-1006/SPARK-1011 TimeBox params dropdown needs relative time options 2018-04-21 12:26:32 -04:00
Eric Harding 03e317f1c5 Web UI: Enable clicking login button to move to rest of the app. Next step submit to server 2018-04-20 19:59:39 -04:00
Eric Harding 2e4dbd4431 Web UI: Add basic login page 2018-04-20 19:46:54 -04:00
Taha Afzal 9a32a5ec67 user model service API 2018-04-20 19:24:29 -04:00
Jake Norbut 3bbc42941b Merge branch 'master' of bitbucket.org:bluetradesys/spark into stop_orders 2018-04-20 15:34:10 -05:00
Eric Harding 0d9abc047b Web UI - Remove url parsing 2018-04-20 16:29:30 -04:00
Jake Norbut 53d8c12e3f stop order type will no longer present itself as having properties (no < in ladder now); price will also be set just by clicking in ladder 2018-04-20 15:27:00 -05:00
Eric Harding 98e9dd33b8 Javascript websocket connection and login 2018-04-20 16:08:42 -04:00
John Colvin 467858b101 SPARK-1006/SPARK-1010 OrderTicket - definition params dropdown is missing 2018-04-20 14:15:09 -04:00
Michael Harding f37cbbe0ee Add brand_primary and shell_gray to main.sass 2018-04-20 14:13:35 -04:00
Jake Norbut de2b4ae6fd stops: drawing badge at trigger price when filled qty == 0 2018-04-20 12:06:36 -05:00
John Colvin 5e490f7243 SaveWindowFactory 'Restore window' log uses window.diagnostic_name 2018-04-20 12:23:41 -04:00
John Colvin 633b636c57 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2018-04-20 12:20:23 -04:00
John Colvin 25c9ab908d Merged in window-manager-with-locks (pull request #12)
SPARK-1008 Closing window/shell while windows are opening crashes

Approved-by: Eric Harding <eric.harding@bluetradesys.com>
Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-04-20 16:19:03 +00:00
John Colvin 6e415700c0 SPARK-1008 - pr edit: 'opening window' log msg 2018-04-20 12:18:12 -04:00
John Colvin 58ab793534 SPARK-1008 pr edits 2018-04-20 11:42:15 -04:00
Taha Afzal 5985d1196e adding margin to accounts proto 2018-04-20 10:56:13 -04:00
Michael Harding e5cf7ae712 webpack looks in public dir 2018-04-20 10:23:21 -04:00
Eric Harding 96655304ff Fix module import paths for typescript and jest 2018-04-19 22:25:35 -04:00
Eric Harding 55194f0830 Enable logon though websocket gateway. Generate js protobufs for all services. 2018-04-19 17:02:51 -04:00
Eric Harding c285cbafa8 do not replicate node_modules to linux 2018-04-19 17:01:57 -04:00
Eric Harding ff20d27f41 Add authentication fields to api request header 2018-04-19 17:00:31 -04:00
John Colvin f46c271194 freeze brushes used by ActivityLog 2018-04-19 13:48:28 -04:00
John Colvin aac84e99e2 SPARK-1008 Closing window/shell while windows are opening crashes 2018-04-19 13:05:56 -04:00
John Colvin 2a9c8f5342 Ladder - change assert to log-warning 2018-04-18 16:40:24 -04:00
John Colvin d32e766561 Merged in ladder-with-glyphs (pull request #11)
Ladder - render GlyphRuns instead of FormattedPrices

Approved-by: Eric Harding <eric.harding@bluetradesys.com>
Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-04-18 20:27:25 +00:00
John Colvin 7f5f3b496a Ladder - render column text with clip 2018-04-18 16:13:13 -04:00
John Colvin 6e066e5031 Ladder - render GlyphRuns instead of FormattedPrices 2018-04-18 14:40:47 -04:00
John Colvin 773ac8ffa0 DIYGridAnimationAdorner was not animating top row 2018-04-17 16:51:30 -04:00
Eric Harding a13be3156b Add typescript api unit tests 2018-04-17 15:38:41 -04:00
John Colvin d2123bef10 create DIYGridAnimationAdorner (used by mview) 2018-04-17 13:49:23 -04:00
John Colvin 1a9d340db1 DIYGrid - mview updates properly 2018-04-17 13:49:09 -04:00
Eric Harding f99e6e9188 Add Imports.fs as a single place to declare import definitions 2018-04-17 12:04:01 -04:00
Eric Harding 2c9c0f8563 Add ts2fable to api project as a way to specify the version 2018-04-17 12:04:01 -04:00
Eric Harding 91939df1e6 Add sln file for web ui. Makes vscode happier. 2018-04-17 12:04:00 -04:00
Eric Harding aa2bb376b1 Sample for importing api module into web ui 2018-04-17 12:04:00 -04:00
Taha Afzal c251e589c5 SPARK-965 2018-04-16 22:11:13 -04:00
John Colvin 8ca84522ac DIYGrid - reorganize columns/rows/cells, HighPerformanceRow can handle FrameworkElementColumns 2018-04-16 20:31:00 -04:00
John Colvin 7a18a58f5d DIYGrid - add optimized text/price/size cell views 2018-04-16 20:01:55 -04:00
John Colvin 00d7c5777c DIYGrid - GlyphRun utils 2018-04-16 19:55:07 -04:00
John Colvin 31bc2a8b9b DIYGrid - cache/freeze brushes 2018-04-16 19:53:26 -04:00
John Colvin 756ffdcea8 DIYGrid - bind column filter properties 2018-04-16 19:38:03 -04:00
John Colvin e10b5e21a5 DIYGrid - fix drag selection 2018-04-16 19:36:56 -04:00
Jake Norbut 999d28c906 SPARK-949 - Sell button hover effect on order ticket now matches ladder 2018-04-16 15:11:00 -05:00
Kevin Darby 69e0968c35 orders sdk 2018-04-16 15:41:42 -04:00
Eric Harding 71c4214cb3 Add fable template src/web/ui 2018-04-16 13:40:22 -04:00
Kevin Darby 786689ecfc more sdk work 2018-04-16 13:20:03 -04:00
Kevin Darby 45e8e8a9b7 added streaming interfaces for accounts and users; Taha can now maybe use these services to serve his types 2018-04-16 13:20:03 -04:00
Eric Harding 2116149a30 Add web/api project to build api web core layer. 2018-04-16 11:28:22 -04:00
John Colvin 674ee6144e Merged in SPARK-1003-multiple-ladders (pull request #10)
SPARK-1003 Market view ladder button only opens 1 ladder despite multiple selected

Approved-by: Eric Harding <eric.harding@bluetradesys.com>
Approved-by: John Colvin <john.colvin@bluetradesys.com>
2018-04-16 14:20:17 +00:00
Kevin Darby b5006ff520 add make_ to stateful publisher per Eric 2018-04-16 09:25:20 -04:00
Taha Afzal a6e7d77d1d SPARK-965 2018-04-15 16:44:26 -04:00
Pedro Pinto 46e80e277a SPARK-1007, and just like that sim supports market orders. 2018-04-13 18:06:29 -04:00
Pedro Pinto 194b947e1b Added code to facilitate autocert. 2018-04-13 18:06:05 -04:00
John Colvin e34e3194df Merged master into implementing-diy-grid 2018-04-13 16:17:54 -04:00
John Colvin 9aeab69581 add window_type property to IShellWindow 2018-04-13 15:36:58 -04:00
John Colvin d7186b7052 LadderWindowFactory accidentally lost an ObserveOnDispatcher() 2018-04-13 14:34:49 -04:00
John Colvin 3c51b091b9 SPARK-1003 Market view ladder button only opens 1 ladder despite multiple selected 2018-04-13 14:23:23 -04:00
Eric Harding 5e86462676 Advance the security keys by # replay securities to avoid screwy synthetics 2018-04-13 14:05:18 -04:00
Taha Afzal 36103452da Spark-965 2018-04-13 11:47:36 -04:00
John Colvin fa2f08ba75 remove unused/deprecated extensions from Update.cs 2018-04-13 11:40:10 -04:00
John Colvin 7251abdd60 SPARK-1002 market break {value} is unacceptable for market range assert 2018-04-12 19:18:44 -04:00
John Colvin 80d87c4139 fix typeo in lastordefault extension 2018-04-12 19:11:57 -04:00
John Colvin 7eace1a892 fix FillTuple observable in OrdersModel 2018-04-12 18:05:14 -04:00
Kevin Darby 44684e9377 little cleanup 2018-04-12 16:15:26 -04:00
Pedro Pinto fe7bf108f3 SPARK-994, We are more economical in how we represent the sim book. 2018-04-12 13:25:24 -04:00
Pedro Pinto 16bf0a7236 Changed how we reply to logon in Jetfix, trying to pacify Autocert. 2018-04-12 11:56:17 -04:00
Kevin Darby 48491d6b90 made some changes in SDK but it's still clumsy 2018-04-11 18:41:48 -04:00
Eric Harding 4d3a0375aa Add websocket session tracking 2018-04-11 18:11:50 -04:00
Eric Harding f50118fb45 SPARK-999 C++ http server which can serve config. No python 2018-04-11 14:57:27 -04:00
Kevin Darby 03773e52ca orders in SDK 2018-04-11 11:47:13 -04:00
John Colvin 001d1aa5b4 SparkWindowView - change menu-expander-button width to 5, grid.column to auto 2018-04-11 11:27:08 -04:00
Eric Harding 87df2c4d6d add websocketpp to externals 2018-04-10 17:37:44 -04:00
Eric Harding 59321c0e46 SPARK-975 - "found duplicate entry for platform_id"
CME AutoCert puts the same 0GLB future on 2 channels which confuses the
security db.  There isn't really a fix for this other than to remember
the channel the security was originally found on which is kind of a
pain. Since this has never happened in production I think it might be
AutoCert only behavior.  Just in case I'm putting in an emergency
workaround to just not load the database.  This should allow us to keep
a production customer running while we put in a real fix.
2018-04-10 13:02:38 -04:00
Eric Harding 5ee027020b Merged in ImmutableChange (pull request #9)
Fixes the problem where Immutable wrapper does not discern a null field on the underlying proto

Approved-by: John Colvin <john.colvin@bluetradesys.com>
Approved-by: Jake Norbut <jake.norbut@bluetradesys.com>
2018-04-10 13:33:54 +00:00
Eric Harding 4c81f3bb1e Fix from code review feedback. 2018-04-10 09:27:11 -04:00
John Colvin 83dd20dd55 Ladder Perf - allow row count to increase as-needed up to a hard-coded max 2018-04-09 18:47:31 -04:00
John Colvin f59a2f6f48 Ladder Perf - increase price_out_of_range_render_interval to 5 secs 2018-04-09 18:47:31 -04:00
John Colvin 8388768edc add/implement LaddersSpawnMany to toggles.proto, defaults to false 2018-04-09 18:47:30 -04:00
John Colvin 38e8c9a0c8 LaddersOnThreads, in toggles.proto, defaults to true 2018-04-09 18:47:30 -04:00
Eric Harding 03bf7212a0 Add some checks. Try to remove null checks for non-nullable fields 2018-04-09 16:11:57 -04:00
Eric Harding 84dca4a714 Make Message fields in Immutable protos nullable 1/2 2018-04-09 15:59:04 -04:00
Pedro Pinto c14ffe900a Drop tags 95, 96 if securelogon is on. Changed application to spark 2018-04-09 15:46:42 -04:00
Jake Norbut 4428e74d10 PnL - PnL is now a ISharedWindow 2018-04-09 14:28:45 -05:00
Jake Norbut 386b5f9b6b OrerBook - OrderBook is now an ISharedWindow (ISlowWindow) 2018-04-09 12:33:04 -05:00
Jake Norbut 2394f0abc4 PnL - Summary in status bar now ignores NaN pnl [this should never occur in practice with a waterfall pnl type] 2018-04-09 11:22:25 -05:00
Jake Norbut 4a4a30b0fd Orderbook - don't crash when filtering an OrderBook with orphans 2018-04-09 10:59:08 -05:00
John Colvin d530108854 DIYGrid - HyperlinkColumn and CellAdorner 2018-04-08 21:21:33 -04:00
John Colvin 5836855636 DIYGrid - mouse-drag selection 2018-04-08 18:16:43 -04:00
John Colvin 6ecbe8c951 Ladder Perf - cache/reuse size-FormattedTexts 2018-04-07 20:45:34 -04:00
John Colvin 50a6cc3223 Ladder Perf - in LadderRender, use const top_margin 2018-04-07 18:59:56 -04:00
John Colvin 3caee644ab Ladder Perf - only render grid lines once (nothin' like low hanging fruit) 2018-04-07 18:39:15 -04:00
John Colvin 021f79ff8c Merged master into implementing-diy-grid 2018-04-07 17:24:50 -04:00
John Colvin 419de81457 DIYGrid.ColumnBase - remove unused function 2018-04-07 17:23:21 -04:00
John Colvin fe8cb76d52 MarketView/TimeAndSales default column widths #DIYGrid 2018-04-07 17:14:26 -04:00
John Colvin f52516b49f DIYGrid - _frozen_column_count is 0 by default 2018-04-07 16:35:59 -04:00
John Colvin 70e66927a6 DIYGrid - fix cell clipping, simplify row/cell render 2018-04-07 16:33:01 -04:00
Kevin Darby 18a0ed75c4 sdk refactor, much cleaner now 2018-04-06 18:23:32 -04:00
Pedro Pinto c62490d410 Moved docker ptr 2018-04-06 19:34:40 +00:00
Pedro Pinto 3602fd479b Made secure logon work a bit more portable 2018-04-06 19:29:35 +00:00
Kevin Darby 335d590106 Merge branch 'master' of bitbucket.org:bluetradesys/spark
# Conflicts:
#	src/lib/sparkproto/SparkProtos.proto
#	src/server/sparkd/CMakeLists.txt
#	src/server/sparkd/order_man/order_man_utils.hgit
2018-04-06 15:29:27 -04:00
Kevin Darby a9d8a3929e fix build 2018-04-06 15:16:58 -04:00
Kevin Darby b814a23a57 spark_sdk coming along 2018-04-06 15:02:48 -04:00
Kevin Darby d6aeda8cfd sdk 2018-04-06 13:10:47 -04:00
Kevin Darby c95b402683 fixed help message 2018-04-06 13:10:47 -04:00
Kevin Darby ebecef31f4 spark_sdk md works 2018-04-06 13:10:47 -04:00
Kevin Darby cc815c0778 maybe eric changed this 2018-04-06 13:10:23 -04:00
Eric Harding 6a5cde8a33 advance docker pointer 2018-04-06 11:39:23 -04:00
Jake Norbut d58c1b5fca PnL - right align status bar, visual polishing 2018-04-05 16:33:35 -05:00
Eric Harding dd729f815d SPARK-985 Implement RFQ 2018-04-05 16:03:15 -04:00
Jake Norbut 49f3ad6304 SPARK-941 - added some totals in a new status bar; will ultimately put a swipe sum in here 2018-04-05 14:55:52 -05:00
Eric Harding 7c20402bd5 advance linux docker pointer 2018-04-05 15:16:53 -04:00
Eric Harding 09f96d4cce Backport mdp3main changes from edge 2018-04-05 15:16:53 -04:00
John Colvin 04d0e82ea8 DIYGrid - row selection 2018-04-05 14:48:08 -04:00
John Colvin d855a7025e DIYGrid - invalidate_column_layout in OnRenderSizeChanged 2018-04-05 13:40:33 -04:00
John Colvin bdb7dfb8c6 DIYGrid - handle null columns 2018-04-05 13:39:58 -04:00
Pedro Pinto a64001a333 SPARK-971, Fixed a bug in secure logon implementation. 2018-04-05 13:36:57 -04:00
Pedro Pinto 07a406142a SPARK-971, Secure logon for spark. 2018-04-05 12:34:34 -04:00
Pedro Pinto 7523e812ea Moved container pointer 2018-04-05 12:33:32 -04:00
Eric Harding a008bac794 SPARK-959 SecureLogon - only consider non-expired keys 2018-04-05 10:58:12 -04:00
John Colvin 904cea0389 DIYGrid - row selection color 2018-04-05 10:46:34 -04:00
Eric Harding 005073060a Marketdata.conf should not have 'Regular' (every packet) onixs logging enabled. 2018-04-05 09:13:50 -04:00
John Colvin eafd648a19 DIYGrid.HighPerformance - row_height assert msg typeo 2018-04-04 17:27:14 -04:00
John Colvin 964ad04e94 DIYGrid.RowBase - protect constructor 2018-04-04 17:24:41 -04:00
John Colvin c082f181c6 DIYGrid.RowBase - clear previous Height Binding on rowLoaded 2018-04-04 17:24:21 -04:00
John Colvin 747cc872ea DIYGrid.HighPerformanceRow - row_height is readonly 2018-04-04 17:23:37 -04:00
John Colvin ab00a4dc98 DIYGrid.HighPerformanceRow - initialize row_height 2018-04-04 16:15:58 -04:00
John Colvin 8045be92bf DIYGrid.RowBase - discourage changes disclaimer 2018-04-04 16:10:20 -04:00
John Colvin e6ff41428f DIYGrid.HighPerformanceRow - remove hardcoded row height 2018-04-04 16:09:10 -04:00
John Colvin f6bc4c953a DIYGrid - fix 'ColumnHeight' misnomer 2018-04-04 13:49:48 -04:00
Jake Norbut a449ff23a4 Ladder Badge - the Taming of the Badge; badge borders stay within ladder levels now 2018-04-04 12:20:20 -05:00
John Colvin 8e5db104a2 DIYGrid DataContext can be null 2018-04-04 13:17:45 -04:00
John Colvin dc4d3a9ea3 TimeAndSales - fix 'zero-width' rows on startup bug #DIYGrid 2018-04-04 13:17:45 -04:00
John Colvin a8ffb45529 DIYGrid - add column filters 2018-04-04 13:17:44 -04:00
Jake Norbut 2532c2b2a1 SPARK-925 - updating proto defaults for new Order column size; updating total window width to accomodate for larger order column 2018-04-04 11:20:11 -05:00
Jake Norbut 3897dbc6e5 PnL - no need to update pnl when it was recnetly updated w/i some threshold by a position update 2018-04-04 11:20:11 -05:00
Eric Harding d1daf73086 SPARK-959 Implement functions for CME secure logon. 2018-04-04 11:28:21 -04:00
Pedro Pinto 4a02df82a4 Moved externals pointer and referenced cryptopp 2018-04-04 15:13:05 +00:00
John Colvin 3b73cb6e99 TimeAndSales - set background to 'CommonBackground' 2018-04-04 11:09:02 -04:00
John Colvin c891c3dd30 DIYGrid - mview and time&sales use new HighPerformanceRow 2018-04-04 11:09:02 -04:00
Eric Harding f318dffdeb Revert "SPARK-959 Implement functions for CME "secure" logon."
This reverts commit ac2fa9b7bc.
2018-04-04 11:04:59 -04:00
John Colvin 9bc7edb246 Merged master into implementing-diy-grid 2018-04-04 11:02:42 -04:00
Eric Harding ac2fa9b7bc SPARK-959 Implement functions for CME "secure" logon. 2018-04-04 11:01:12 -04:00
Jake Norbut 9abf59170a PnL - specifying a default sort and minwidth so that window is resized appropriately on launch 2018-04-04 09:45:24 -05:00
Pedro Pinto fec3c68958 Claned up SparkProtos a little. 2018-04-04 10:17:58 -04:00
Pedro Pinto 90fd7bfd1b SPARK-503, Aligned simulator and jf sessions so we don't crash 2018-04-04 08:56:52 -04:00
Jake Norbut 9544b69047 SPARK-925 - at least in part; made order badge wider by 10 pixels 2018-04-03 14:20:41 -05:00
Pedro Pinto 9beb8e0035 SPARK-974, Partial handling of trade correction messages. 2018-04-03 11:42:04 -04:00
Jake Norbut 27558a3dca OrdersModel - Adding .Replay(1).RefCount() to the subscribei; cancel selected wasn't working from the OrderBook prior to this because the subscription appeared to be getting immediately disposed 2018-04-03 09:39:15 -05:00
Eric Harding 8852671151 Touch CMakeLists.txt before server build. 2018-04-03 10:30:37 -04:00
Jake Norbut 19b9eb69f1 SPARK-918 - No longer hiding high/open/etc for synthetics in ladder 2018-04-02 16:13:53 -05:00
Jake Norbut b5869e348c SPARK-689 - adding Settle price to ladder info area 2018-04-02 16:03:27 -05:00
Jake Norbut 2ed0a14c29 SPARK-519 - smarter MinWidth size for OrderBook 2018-04-02 13:27:21 -05:00
Eric Harding be751c0443 Remove .conf reference to 'UseFakeOrderLogic' 2018-04-02 13:54:10 -04:00
Pedro Pinto 557e539fad SPARK-678, 0 sized stream updates were being swallowed by the API. 2018-04-02 13:52:36 -04:00
Pedro Pinto 057e41342b SPARK-923, Qty and price no longer updated in completed orders. 2018-04-02 12:22:33 -04:00
Jake Norbut 96f35493a4 Windows positioning - removing temporary code 2018-04-02 09:11:02 -05:00
Jake Norbut 2f65e3d257 SPARK-686 - window positioning code now moves the window if it overlaps with the taskbar 2018-04-02 09:04:00 -05:00
Pedro Pinto dcffc8b2db SPARK-692, We no longer risk missing order state transitions on boot. 2018-04-02 10:01:58 -04:00
Eric Harding 04873b5847 SPARK-671 toggle for ladders on threads for easier debugging 2018-04-02 09:20:34 -04:00
Eric Harding 076e81c529 SPARK-671 Switch ladder to multi thread mode 2018-04-02 09:07:06 -04:00
Pedro Pinto 1dc4293eb5 Fixed build. 2018-04-02 08:55:11 -04:00
Pedro Pinto 01d1753620 Changed Support to support, for consistency with other subsystems. 2018-04-02 08:52:47 -04:00
Pedro Pinto 669da60852 Added logging for incoming order API calls. 2018-03-29 21:54:56 +00:00
Eric Harding 7e46267e43 fix build 2018-03-29 17:18:34 -04:00
Eric Harding fde007bf30 missing proto changes from previous checkin 2018-03-29 15:21:03 -04:00
Eric Harding 1fdaf6933d Backport some mdp3 changes from edge. 2018-03-29 15:17:12 -04:00
Eric Harding 522ba48c85 Merge branch 'prod' of bitbucket.org:bluetradesys/spark 2018-03-29 13:38:33 -04:00
Eric Harding 70fcc09b02 Readability improvement in WPFPanel 2018-03-29 13:38:05 -04:00
Eric Harding bfd72eb2b2 SPARK-671 make ActivityLogWindow run on its own thread. 2018-03-29 13:37:48 -04:00
Eric Harding 0e1352e99b Probably want to keep this at 300 2018-03-29 11:37:52 -04:00
Eric Harding feeb3348bf SPARK-977 larger ladder recenter control 2018-03-29 11:30:35 -04:00
Eric Harding 5dcee95c6b SPARK-933 The screenshot included by 'Report a Problem' is cropped 2018-03-28 19:24:13 -04:00
Eric Harding 4b3e67cae9 Cannot sample OrderActivity looking for changes. 2018-03-28 18:57:13 -04:00
Eric Harding 3751569ac5 Some code cleanup 2018-03-28 18:55:18 -04:00
Eric Harding a667ffd671 SimpleBus name change 2018-03-28 18:54:43 -04:00
Eric Harding 2495f0c9de Make tableupdate.update internal 2018-03-28 18:53:01 -04:00
Eric Harding 540e92d42a Rename SingletonBus to SimpleBus 2018-03-28 17:52:18 -04:00
Eric Harding 063df2cbea Posting to the bus should always be "safe" for the caller 2018-03-28 17:51:06 -04:00
Eric Harding 3c44f0746b Freeze brushes by default 2018-03-28 17:13:30 -04:00
John Colvin 081fd61793 freeze some orders brushes 2018-03-28 16:36:25 -04:00
John Colvin 05c0fc4430 modify ticket - init size with working qty 2018-03-28 16:23:23 -04:00
Eric Harding 8cbe874f22 Speed up ladder order handling from O(N^2) to O(N*d) 2018-03-28 14:47:41 -04:00
Eric Harding 841a8071d0 Format log message 2018-03-28 14:46:11 -04:00
John Colvin 7c8da47f6e DIYGrid style changes 2018-03-28 14:07:41 -04:00
John Colvin 890143c806 Merged master into implementing-diy-grid 2018-03-28 13:58:38 -04:00
Eric Harding 01293cfb8c Add 'all' flag to dumpsecurity 2018-03-28 13:49:58 -04:00
John Colvin a2dce0febb BTSColors - freeze brushes again 2018-03-28 13:43:56 -04:00
Eric Harding 172b13e931 Fix broken publish 2018-03-28 11:28:24 -04:00
Eric Harding 421386fb32 simplify this asnc code 2018-03-28 11:24:56 -04:00
Eric Harding e256bba2a2 spark-691 - when a ladder originated orders is rejected the bottom message does not mention it 2018-03-28 11:03:01 -04:00
Eric Harding 24fec0bcfe Clean up some unused extension methods in GlobalExtensions. 2018-03-28 10:53:54 -04:00
John Colvin 344d0f966a modify ticket - fix false 'change type' msg 2018-03-27 20:40:14 -04:00
John Colvin f337146a4d order ticket - 'size' commit on enter 2018-03-27 20:05:12 -04:00
John Colvin 4cfa7b0ccf PriceEntryControl input filter, commit on enter 2018-03-27 20:05:11 -04:00
John Colvin cf7561ccc7 aggregate OrderPropertiesEditor 2018-03-27 20:05:11 -04:00
John Colvin b0101bfbcb ViewModelBase Property automatic validation, observe_current 2018-03-27 20:05:11 -04:00
John Colvin 5ff62baf85 fix SpreaderOrderVM validation bug 2018-03-27 20:05:11 -04:00
Jake Norbut 18a42eb892 jetfix - switching to mc7 since ktk is not available for ilink 2.x cert 2018-03-27 14:54:04 -05:00
John Colvin 06bab721c0 SPARK-950 Ladder - order drag and drop sometimes doesn't work 2018-03-27 11:56:04 -04:00
Taha Afzal 4b66c70985 SPARK-309 (N legged tests) completed for a basic subset 2018-03-27 07:53:05 -04:00
John Colvin ffaddb47e9 Ladder - remove obsolete/erroneous resize code 2018-03-26 21:51:34 -04:00
John Colvin 72a30ad03f SPARK-926 move time and sales form to own thread 2018-03-26 20:33:39 -04:00
John Colvin 4971364b69 don't freeze brushes in btscolors 2018-03-26 20:33:39 -04:00
Jake Norbut c2cce08f5b adding KTK autocert session 2018-03-26 14:54:26 -05:00
John Colvin 264b76ae20 order modify ticket - flip ok/cancel positions 2018-03-26 11:59:09 -04:00
John Colvin dcef963710 order modify ticket - drop 's' in 'changes blah' 2018-03-26 11:54:59 -04:00
John Colvin c30f3afdfd SPARK-697 trade ticket when brought up to modify an order should not have a cancel order button 2018-03-26 11:51:55 -04:00
Jake Norbut 46f4163e5c Spread tests - clarifying steps 2018-03-26 09:45:26 -05:00
Taha Afzal e07982ad9a SPARK-309 (N legged tests) partially done 2018-03-26 07:37:02 -04:00
John Colvin 51b8603fbb fix cell total width calculation 2018-03-25 15:10:18 -04:00
John Colvin 2934ed642d start the conversation 2018-03-25 14:59:35 -04:00
John Colvin 20405ec715 SPARK-930 New synth should spawn a ladder 2018-03-24 15:54:31 -04:00
Taha Afzal 335faa121f all roundings go to one place now 2018-03-24 12:37:16 -04:00
Taha Afzal 5978ebe865 ratio spreads are better but all the rounding, flooring, ceiling for fractional qty's and fractional price_mults need to be formalized 2018-03-24 12:37:15 -04:00
John Colvin 6fed369b57 SPARK-936 Phantom grid over Market View 2018-03-23 18:48:46 -04:00
John Colvin 387116b320 remove unnecessary 'new' dictionary in time and sales model 2018-03-23 18:48:46 -04:00
Jake Norbut 17b0f71bac refining some tests 2018-03-23 17:07:55 -05:00
Eric Harding 269c354154 Spark-942 Ladder gotta move. 2018-03-23 17:42:51 -04:00
Eric Harding bd43f5633e Misread modal as topmost. Why does the BTSMessagebox use topmost by default? 2018-03-23 17:42:51 -04:00
John Colvin 3244ffcf97 fix fills security filter 2018-03-23 17:24:34 -04:00
Pedro Pinto 1d60ae7749 Sim persists orders now. 2018-03-23 16:35:53 -04:00
Pedro Pinto 9392ba47e6 Towards a persistent book. 2018-03-23 16:35:53 -04:00
Eric Harding bf01d8254e spark-688 fix electronic volume 2018-03-23 16:09:21 -04:00
John Colvin 92ffe729a6 SPARK-937 Remove synthetic command from MView 2018-03-23 13:54:57 -04:00
John Colvin 7439c2474e SPARK-939 Modify ticket should only allow price and qty to be modified 2018-03-23 13:49:34 -04:00
Michael Harding 1e3e1d5da0 SPARK-698: Workspaces like mice 2018-03-23 13:41:24 -04:00
John Colvin 08f63724b4 SPARK-944 OrdersModel.on_fill_tuples fires for all orders, not just new fills 2018-03-23 13:36:12 -04:00
Michael Harding 2437c27402 SPARK-677: More Ladder Header refinements 2018-03-23 13:23:01 -04:00
Eric Harding e0e9b451ca spark-947 - Fix crash in read_trades at startup. 2018-03-23 13:14:37 -04:00
Eric Harding 29ce8b804b Merge branch 'master' of bitbucket.org:bluetradesys/spark 2018-03-23 13:09:08 -04:00
John Colvin 0e15784a43 SPARK-932 When adding a new synthetic... 2018-03-23 12:40:16 -04:00
Eric Harding c8d1952e60 spark-946 2018-03-23 11:38:24 -04:00
John Colvin cefd8501c8 minor refactoring 2018-03-23 11:19:12 -04:00
Jake Norbut e00975bf4a PnL - typo spotted by Eric in binding 2018-03-23 09:58:00 -05:00
Eric Harding f50098ee91 fix error in setup_builds.bat 2018-03-23 10:40:52 -04:00
Eric Harding 877e915969 spark-938. Support request confirmation should not be topmost. 2018-03-23 10:20:27 -04:00
Jake Norbut 7e1fc8fe46 PnL - fleshing out a more comprehensive PnL test 2018-03-23 08:43:03 -05:00
Pedro Pinto cd5801a9b2 Added cert reservation for Michael. 2018-03-23 00:20:32 +00:00
John Colvin 873045826b SPARK-929 Need better defaults on synth creation 2018-03-22 20:13:16 -04:00
Jake Norbut d5a3e5c5f1 PnL - have to hide NaN now that the Tickconverter is no lnoger used 2018-03-22 18:20:59 -05:00
John Colvin bbdccf62b1 SPARK-909 Time and sales does not sort by anything 2018-03-22 18:29:53 -04:00
Jake Norbut ecd036e6e7 PnL - AvgBuy/Sell need to show non-tickable prices, so Tickconverter is out 2018-03-22 17:12:46 -05:00
Michael Harding 2fb0e9c478 SPARK-943: Add Clone Synthetic Icon 2018-03-22 17:16:30 -04:00
Michael Harding 74aca81322 Update Ladder test 2018-03-22 16:47:39 -04:00
Jake Norbut 1646516b68 OrderBook - right aligning some columns 2018-03-22 14:39:49 -05:00
Jake Norbut be9d94dd6f SPARK-916 - qty and filled qty are now color-coded according to buy/sell side 2018-03-22 14:15:14 -05:00
Kevin Darby 087aa8e889 reserving cme_mc5 2018-03-22 14:00:29 -04:00
John Colvin cce8c5912f SPARK-906 Ladder input qty box should only display numeric chars 2018-03-22 13:33:03 -04:00
Michael Harding c8e48310c7 Test Updates 2018-03-22 13:19:35 -04:00
Michael Harding f9df53533c Remove OK Cancel from workspaces dialog 2018-03-22 13:19:35 -04:00
John Colvin 267d0e08a2 synth create dialog - fix textbox scroll grid line bug 2018-03-22 12:35:33 -04:00
Pedro Pinto 1d38fbe356 Fixed price in sim T&S. 2018-03-22 10:35:40 -04:00
Pedro Pinto f255c2f713 Default MD platfor to be sim. It's that good. 2018-03-22 09:31:49 -04:00
Pedro Pinto e500bb57dd Time & sales information with sim. 2018-03-22 09:30:32 -04:00
John Colvin 0c3dde7663 SPARK-915 Activity Log - fills are past tense (bought, sold), orders are present (buy, sell) 2018-03-21 18:14:31 -04:00
Jake Norbut c0e25d6422 PnL - right aligning other numeric columns 2018-03-21 15:35:09 -05:00
John Colvin c4ffe98eff fix ladder 2018-03-21 16:27:12 -04:00
Jake Norbut 186a546708 SPARK-919 - Grid expander is now indented with symbol 2018-03-21 15:15:23 -05:00
Eric Harding 834b94f3f3 Rename OrderVM.cs to LadderOrderVM.cs to match class name. 2018-03-21 15:33:44 -04:00
John Colvin 1be0aee9b8 SPARK-902 Ladder should not allow NaN price orders sends 2018-03-21 15:32:26 -04:00
John Colvin f40fbb476e SPARK-913 Clicking on > button a spreader ladder crashes 2018-03-21 15:22:23 -04:00
Jake Norbut 6327972ecf SPARK-917- pnl values are now calculated when the position update and not just on the timer 2018-03-21 14:15:37 -05:00
John Colvin 85f79ac3ca simplify dicretevalues filter 2018-03-21 15:03:51 -04:00
Eric Harding 57389b35d6 clarify something in simple sanity test. 2018-03-21 14:53:20 -04:00
Pedro Pinto 6ab053ab10 Towards a better simulator. 2018-03-21 14:31:26 -04:00
Jake Norbut 4a7e009422 PnL - Changing SOD pos to buys - sells too 2018-03-21 13:18:46 -05:00
Jake Norbut 8e156deb35 PnL - change buys and sell to be since start of day, minor refactoring for when we lookup the start of day according to symbol schedule 2018-03-21 13:14:23 -05:00
Jake Norbut ceb683838b PnL - Changing to Net Pos to buys - sells rather than buys + sells 2018-03-21 12:50:07 -05:00
Jake Norbut 603f90dadb SPARK-910 - pnl sort last few tickconverter columns 2018-03-21 11:59:51 -05:00
Michael Harding 1cba4483eb Test updates: common_setup1 and simple_sanity 2018-03-21 12:26:44 -04:00
Eric Harding 59ef7d6ff5 report_a_problem.txt edited online with Bitbucket 2018-03-21 16:04:33 +00:00
Eric Harding df996c00b3 report_a_problem.txt edited online with Bitbucket 2018-03-21 16:02:26 +00:00
Taha Afzal 3e8f21e843 fixing the broken tests caused by the price_mult changing places 2018-03-21 11:31:44 -04:00
Eric Harding b890eef52d Include contact info in error report. 2018-03-21 10:36:12 -04:00
Michael Harding f3b49ae1db SPARK-677: buttons move up 2018-03-21 10:15:08 -04:00
Michael Harding 939e2b4444 SPARK-901: Link to website in About 2018-03-21 10:15:08 -04:00
Eric Harding d864a773c3 Needed to touch CMakeLists.txt... I guess? 2018-03-21 10:02:45 -04:00
Eric Harding f246f21277 Back end for ErrorReportService 2018-03-21 09:18:30 -04:00
Taha Afzal 0bf9fe6b9f Ratio spreads fixed 2018-03-20 22:41:50 -04:00
Jake Norbut 92a538ac17 OrderBook - no longer crashes when a child's parent is never received 2018-03-20 17:35:09 -05:00
Pedro Pinto 0ac6c0c62c Improved test case generation scripts 2018-03-20 17:34:38 -04:00
Pedro Pinto cb3dd642d2 Towards test issue generation 2018-03-20 17:07:36 -04:00
Eric Harding 1afe75b6cf runspark.cmd should pass along command line arguments. 2018-03-20 17:07:10 -04:00
Eric Harding c1b4392ac1 Synthetic leg side is implied in the price_multiplier so no additional sign flip needed. 2018-03-20 17:06:55 -04:00
John Colvin c95533a7ea SPARK-694 In synthetic creation dialog, remove Inside Market Throttle Threshold 2018-03-20 16:32:14 -04:00
John Colvin b76db3b06e SPARK-700 disallow changes to synth if working orders exist 2018-03-20 16:22:56 -04:00
Eric Harding e3190bade5 price_multiplier - there can be only one. 2018-03-20 16:02:00 -04:00
Jake Norbut 5f5257f000 pnl - overriding ToString() for easier debugging 2018-03-20 14:10:00 -05:00
Jake Norbut c50fdd9f6e pnl - right aligning pnl columns 2018-03-20 14:10:00 -05:00
John Colvin bb93cf4944 SPARK-687 Create Synthetic dialog does not update Name field if 'Enter' is pressed... 2018-03-20 14:57:53 -04:00
Pedro Pinto 4caaa36d26 SPARK-696, Modifying order size was not properly updating book 2018-03-20 14:34:45 -04:00
John Colvin da3956764c SPARK-701 Allow cancel of child orders in ladder 2018-03-20 14:32:46 -04:00
John Colvin 3f9ce2fa11 SPARK-685 TimeAndSalesModel - trade cursor cannot be shared between different channels 2018-03-20 14:22:41 -04:00
Jake Norbut 91bde6eab5 SPARK-690: sort no longer crashes (with the new filtering); general refactoring 2018-03-20 11:49:12 -05:00
Pedro Pinto c0025b08c5 SPARK-693, simulator fills are tagged with correct price 2018-03-20 12:25:30 -04:00
John Colvin 6f8f57ca4a add timebox to spreader order type dropdown 2018-03-20 12:18:18 -04:00
Pedro Pinto ba15f8c74c Fixed a few bugs in TimeBoxOrder 2018-03-20 10:19:06 -04:00
John Colvin 42a02274d9 timebox order view 2018-03-20 02:53:54 -04:00
John Colvin fb58703e64 timebox order default child to limit 2018-03-20 02:26:20 -04:00
John Colvin 5b152ace97 SPARK-682 Add UI support for TimeBox order 2018-03-20 02:21:31 -04:00
John Colvin e9a258bb8c organize some discretevalues filter methods 2018-03-20 02:21:31 -04:00
Michael Harding 31d43ae8e6 SPARK-673: header resize 2018-03-19 18:30:35 -04:00
Eric Harding 9dd2b83b8c spark-668 Shell crash on server bounce 2018-03-19 17:36:05 -04:00
Jake Norbut 0fad22d5fc SPARK-606 - new filtering 2018-03-19 16:08:14 -05:00
Eric Harding a32fc2ed17 Spark-681 Synthetic creat works ok if heartbeats are ticking. 2018-03-19 16:58:16 -04:00
Eric Harding d5f90772fe SyntheticSecurityService log on synthetic create 2018-03-19 16:57:42 -04:00
Eric Harding 247365d762 Spark-681 Synthetics can be lost on startup due to race. 2018-03-19 16:06:51 -04:00
Eric Harding 6079d7f02d Remove some dead code. 2018-03-19 14:38:25 -04:00
Taha Afzal c3cb14a351 SPARK-656, spreader tests: 2018-03-19 11:54:56 -04:00
Jake Norbut 381e277eb9 SPARK-684: OrderBook now calls .Sample(333) 2018-03-19 09:58:50 -05:00
Taha Afzal 6e6b9faa38 Fixed a bug where if the throttle params were unset, modifications would be sent for no reason 2018-03-19 10:03:38 -04:00
Taha Afzal 6ff4f0a992 price comparison function being used in pre-hedge qty discovery 2018-03-19 10:03:38 -04:00
Pedro Pinto fcf4c9f187 TimeBox order code complete on server. 2018-03-19 09:28:19 -04:00
John Colvin 81941cba4e domain filter undoes selection changes on close (if not applied first) 2018-03-18 19:48:16 -04:00
Pedro Pinto 69e337bcd2 TimeBox order work. 2018-03-18 18:59:31 -04:00
Pedro Pinto 418f626023 More sensible logging for simulator. 2018-03-18 18:31:12 -04:00
Pedro Pinto 3da33aba84 Improved exchage simulator. 2018-03-18 18:01:51 -04:00
John Colvin 2f6c665c5c SPARK-655 When you click out of a grid filter make sure to clean the filter dialog 2018-03-18 17:02:11 -04:00
John Colvin 54252f8e0c filters - fix selected text input filter 2018-03-18 15:59:09 -04:00
John Colvin e270d6ae15 filters - remove focus noise 2018-03-18 15:19:34 -04:00
John Colvin 79a543cab3 fix typeo 2018-03-18 15:11:42 -04:00
John Colvin bdf8e2c2ff filters - TickUpDowns ctrl + arrow key traverse 2018-03-18 15:08:20 -04:00
John Colvin ec2e293095 remove superfluous dependency property in TickUpDown 2018-03-18 15:02:01 -04:00
John Colvin 0169ffd39e SPARK-651 add a button in synth management window to bring up an order book filtered for only synths 2018-03-18 14:46:49 -04:00
John Colvin 3b51c8e6ad SPARK-650 make WorkingOrders column in Synth management link to an orders view filtered by the security in question 2018-03-18 14:46:49 -04:00
John Colvin 2a26b587a7 SPARK-654 Domain filter in grid should not be real time 2018-03-18 14:46:48 -04:00
John Colvin cbbf1221e6 filters - fix focus bug 2018-03-18 14:46:01 -04:00
John Colvin 45d9434965 filters - escape/enter commands are executed even if filter does not have focus 2018-03-18 13:05:24 -04:00
John Colvin 498d992661 SPARK-653/SPARK-680 Make the Clear button exit the filter 2018-03-18 13:05:24 -04:00
John Colvin 1a88d99aed SPARK-653/SPARK-679 Rename 'Commit' to 'Apply' 2018-03-18 13:05:24 -04:00
Pedro Pinto c5a69bc637 Towards TimeBoxOrder. 2018-03-17 20:52:14 -04:00
Pedro Pinto 664f0fa519 Exchange sim discovers rather than load securities. 2018-03-17 20:52:14 -04:00
Pedro Pinto 86e42c0d0b Made sim a bit more realistic. 2018-03-17 19:04:51 -04:00
Eric Harding 8cadbeda17 spark-670 Shell hangs if config is wrong. 2018-03-16 17:38:47 -04:00
John Colvin 3d644f9a36 SPARK-657 Default Qty Price Mults 2018-03-16 16:01:36 -04:00
John Colvin 0988eae87c DataGridEx - ignore (Preview)KeyDown events if popups are open 2018-03-16 16:01:36 -04:00
Michael Harding 1e78ef1aba SPARK-672: more (superficially) consistent ladder cancel buttons 2018-03-16 15:40:39 -04:00
Jake Norbut 89c07ebc0e OrderBook - source formatting fix 2018-03-16 14:34:13 -05:00
Eric Harding 75a9c73d0f Spark-660 - Round synthetic book to tick size 2018-03-16 15:23:58 -04:00
Jake Norbut 222aa771c2 SPARK-647 - addiing custom filtering type for Sub Type; one last sorting nit 2018-03-16 14:12:42 -05:00
Eric Harding 55c7526e90 Fix crash on exit when TABLE_DESTROYED fires and CLR is shut down 2018-03-16 13:22:31 -04:00
John Colvin aa9fb87556 SPARK-658 Pre-Hedge -> Max Inside Ticks 2018-03-16 11:45:19 -04:00
John Colvin aad88dfb01 synth editor - raise correct property changed 2018-03-16 11:41:46 -04:00
John Colvin 036a008e2b synth creation - description grammar/capitalization 2018-03-16 11:35:30 -04:00
Pedro Pinto afe35b3875 Removed assert(false) from md merge code. 2018-03-16 10:34:32 -04:00
Pedro Pinto 66dd47f4ae Removed obsolete files. 2018-03-16 09:38:09 -04:00
Pedro Pinto faf4da04ad Merging our book with outside MD. 2018-03-16 09:19:43 -04:00
John Colvin 5a41cafc5d syn create - increase description font size 2018-03-16 03:15:23 -04:00
John Colvin 56e49ab0e1 SPARK-557 In the Synthetic creatio form fill in pop up hints with proper documentation 2018-03-16 02:02:22 -04:00
Taha Afzal d7c028048d Modified the post hedge ticks away to use ticks instead of $ 2018-03-15 17:30:14 -04:00
Jake Norbut fdcd7d1b84 OrderBook - basic filtering works again; still need to implement revised filtering 2018-03-15 16:27:58 -05:00
Jake Norbut bea629ed42 OrderBook - new way of setting inital sort glyph b/c accessing Items creates a CollectionView that can drive people crazy 2018-03-15 15:34:23 -05:00
Eric Harding 17c9fa0520 Add constructor to MDConsumer which lets you specify what platform you want. (for simulator) 2018-03-15 15:05:03 -04:00
John Colvin c4112aea66 ObservableFilterCollection inserts in correct relative index on PropertyChanges 2018-03-15 14:53:31 -04:00
John Colvin 51f2710f57 SPARK-652 Change format of Working column in Market View from price @ qty to qty @ price 2018-03-15 14:06:16 -04:00
Pedro Pinto 5c19957288 Exchange simulator now supports order changes / cancels. 2018-03-15 13:59:23 -04:00
Pedro Pinto c07bf453e9 Removed obsolete file. 2018-03-15 13:59:23 -04:00
John Colvin 8390f87352 rename 'ObservableFilter.cs' 'ObservableFilterCollection.cs' 2018-03-15 13:35:24 -04:00
John Colvin 5096784a7d grid filters - fix hook_filters method for ObservableFilterCollection 2018-03-15 13:34:14 -04:00
John Colvin 696713eccf ObservableFilterCollection filters on property changes 2018-03-15 13:33:39 -04:00
John Colvin 1a5e3531f5 overload hook_filters for ObservableFilterCollection 2018-03-15 12:08:42 -04:00
John Colvin 7abe18f595 synth create - add security key filter 2018-03-15 12:08:42 -04:00
John Colvin 50a0b56a86 synth create - don't allow creation with < 2 legs 2018-03-15 12:08:42 -04:00
Jake Norbut df85c4651b OrderBook - sort critera is correctly saved and restored, and reflects in the grid column upon restore 2018-03-15 10:45:35 -05:00
John Colvin 7c55bd9060 SPARK-666 synthetic modification window does not close after hitting OK 2018-03-15 11:34:44 -04:00
Jake Norbut 2c6b10d398 OrderBook: user-selected grid sort is now applied on model updates 2018-03-15 09:17:53 -05:00
John Colvin 84216ffa7d SPARK-667 Spreader params changes are not reflected in new orders 2018-03-14 23:52:57 -04:00
John Colvin d82f564794 SPARK-615 Spreader params should be disable-able 2018-03-14 18:45:55 -04:00
John Colvin 8dee3b7686 remove unused file 2018-03-14 18:45:55 -04:00
Jake Norbut 89cea9bb03 OrderBook - fixing crash on exit when saving settings; need to come up with something new to persist saved sort criteria, maybe 2018-03-14 16:41:01 -05:00
Eric Harding fe91360921 Fix missing binding in launcher.xaml 2018-03-14 16:58:55 -04:00
Michael Harding 5c36bcea8e Status in the second row 2018-03-14 16:52:54 -04:00
Michael Harding 7f6fa9ada0 SPARK-525: Headers in the ladder 2018-03-14 16:48:26 -04:00
Jake Norbut 37a4bed317 OrderBook - attached properties, more sorting, no more clear() on sort 2018-03-14 15:14:38 -05:00
Taha Afzal f715d196b0 adding test for throttle exposed a rounding bug 2018-03-14 14:08:12 -04:00
Eric Harding 13f6268082 spark-568 don't display child order updates 2018-03-14 13:57:38 -04:00
Eric Harding 21526c5f83 Quiet mouse up/down debug log messages. 2018-03-14 13:57:14 -04:00
Eric Harding c1d62d6c60 Send ActivityLog messages to the spark log 2018-03-14 13:55:56 -04:00
Eric Harding ae46e7475c Spark-555 2/2 Change the ladder specific even log into a global activity log 2018-03-14 13:40:33 -04:00
Jake Norbut 9199aeb1c3 OrderBook - sorting now works for MultiBinding column types 2018-03-14 08:53:48 -05:00
Jake Norbut 3f2f140646 OrderBook - more columns can sort now, but not all 2018-03-14 08:07:36 -05:00
Pete fdbff50cf4 fix docker pointer 2018-03-14 08:46:23 -04:00
Pete 92335be733 testing for ERRORLEVEL 2018-03-13 22:45:42 -04:00
Jake Norbut b4e134599c OrderBook - defer_refresh causing strange behavior when sorting, taking it out 2018-03-13 20:15:54 -05:00
Jake Norbut 4f5f072bb5 OrderBook - SortedTree based sorting 2018-03-13 20:07:27 -05:00
Eric Harding d3099a42fe Fix build 2018-03-13 20:38:36 -04:00
Taha Afzal 75627d0fb3 quoting qty (from walking the hedging depth) be floor'ed and not rounded 2018-03-13 19:46:17 -04:00
Eric Harding 7e00d8cce3 Spark-555 part 1/2 - remove event log from ladder bottom 2018-03-13 16:58:17 -04:00
Eric Harding 02cc555cc0 Make SortedTree immutable for now. 2018-03-13 16:16:11 -04:00
John Colvin d2a2de0a4d grid filters - fix commit-focus bug 2018-03-13 16:06:00 -04:00
John Colvin e086982ad9 grid filters - fix regexvm false 'active' bug 2018-03-13 16:05:59 -04:00
Eric Harding 38a7a8040b Add SortedTree for Orders window 2018-03-13 15:38:05 -04:00
John Colvin 30a4fb90bc grid filters - fix regexfiltervm null ref 2018-03-13 14:14:41 -04:00
John Colvin 33e170c392 grid filters - make 'commit' button focusable 2018-03-13 14:11:10 -04:00
Jake Norbut 0555c5e05e SPARK-649: PnL missing filters added 2018-03-13 12:28:30 -05:00
John Colvin 60b3a36577 ladder - check if market break index is out of range 2018-03-13 13:03:41 -04:00
Eric Harding 69d6264d0a TickDisplayConverter should handle binding.unsetvalue (and other unexpected inputs). 2018-03-13 12:26:34 -04:00
Taha Afzal ccbc5f24b9 comments 2018-03-13 11:48:56 -04:00
Jake Norbut fed03435b2 OrderBook - toggle visibility now works recursively 2018-03-13 10:47:06 -05:00
Jake Norbut 3650d37f50 Missed a line when rebasing with a merge conflict 2018-03-13 09:20:57 -05:00
Jake Norbut 8a3e1b9862 Orders - work in progress parent-child 2018-03-13 09:19:37 -05:00
Jake Norbut d12423b458 Nodes and Trees 2018-03-13 09:17:48 -05:00
John Colvin 42e15b3434 refactor grid filters 2018-03-12 22:33:03 -04:00
John Colvin 136acec4ba SPARK-548 In time filter make sure to validate date 2018-03-12 21:05:16 -04:00
John Colvin 3bef2e64ec create general purpose NotifyDataErrorAdorner (used by ExecutionStrategyEditor) 2018-03-12 21:05:15 -04:00
John Colvin cb03605690 DateTimePicker filters user input 2018-03-12 21:05:14 -04:00
John Colvin 67b124bc96 PriceEntryControl filters user input 2018-03-12 21:05:14 -04:00
Pedro Pinto 8bea201396 Towards a simulated book. 2018-03-12 18:51:52 -04:00
Taha Afzal adfe774efb more parameter comments 2018-03-12 10:28:10 -04:00
John Colvin ace38507db filters - commit click/enter closes filter popup 2018-03-11 19:22:47 -04:00
John Colvin 793f2b7f3c removed cancel button from filters (left cancel_commands in vm, in case we add it back) 2018-03-11 19:08:49 -04:00
John Colvin 312d745755 remove Security.Empty, use SecurityDataHelper.Defaults.SecurityImmutable instead 2018-03-11 17:55:59 -04:00
John Colvin 9bc6b02fab remove unnecessary line from TickUtils.mid_tick fn 2018-03-11 17:17:51 -04:00
John Colvin 17979c04bc synth create - added more hardcoded default ticks, user must select a tick from the defaults (cannot enter custom text anymore) 2018-03-11 17:15:43 -04:00
John Colvin 693ef4a12a ladder - remove unused function 2018-03-11 13:32:10 -04:00
John Colvin 571998ab24 ladder - fix rare mid-price index out of range bug 2018-03-11 13:29:05 -04:00
John Colvin b04bea7093 Ladder - avoid unnecessary iterations through price list when rendering sizes 2018-03-10 18:11:47 -05:00
John Colvin d08e102410 synth create - only allow user to choose an existing tick until we have
tick settings
2018-03-10 17:50:33 -05:00
John Colvin 3ebec942df Ladder - use same tick_equals method for normal/mouse-over size (no more ghost prices) 2018-03-10 16:07:20 -05:00
John Colvin 77e804a9dc SPARK-643 Synthetic management window 2018-03-10 15:40:06 -05:00
John Colvin 93da66765a SPARK-547 in grid filters do not filter in real time (for performance reasons) 2018-03-10 15:17:57 -05:00
John Colvin be19e5153a ViewModelBase - make ObjSnapshot revertable 2018-03-10 13:57:46 -05:00
John Colvin 970d4756e3 DataGridEx - block arrow key traverse if filter popup is open 2018-03-10 12:22:18 -05:00
John Colvin 6e93eb6938 TimeFilter/DateTimePicker - arrow key traversal/navigation 2018-03-10 12:10:24 -05:00
John Colvin d6bd67b601 TimeFilter/DateTimePicker - remove focus noise 2018-03-10 12:10:23 -05:00
John Colvin 4be3471f42 TickUpDown - Alt-Parameters 2018-03-10 12:02:56 -05:00
John Colvin 1c34fa2a1f SPARK-645 Order Ticket TIF=undefined when started from Market View 2018-03-09 17:40:53 -05:00
Jake Norbut 3df7716a84 SortedList - This will be a component of our Tree; fixed initial size bug; wrote a test 2018-03-09 16:40:04 -06:00
Eric Harding cdc68663bf Fix for tab though order ticket price/size 2018-03-09 17:32:33 -05:00
Eric Harding e652435890 Spark-608 - get the simulator to send markets down to the shell. 2018-03-09 17:16:20 -05:00
John Colvin 1653671764 normalizing font sizes 2018-03-09 17:15:06 -05:00
John Colvin 1ae2efca79 setting DataGrid default TextElement.FontSize to 11 2018-03-09 16:55:00 -05:00
John Colvin 5d6b2e185b synth create - auto name if user hasn't entered text 2018-03-09 16:50:55 -05:00
Eric Harding f34800ffed Spark-644 one side of synthetic market showing size=1 when source leg has no market 2018-03-09 16:04:59 -05:00
Eric Harding a1b39aaa2d Fix SortedList 2018-03-09 15:53:53 -05:00
Eric Harding 0754fc7947 Add SortedList class. 2018-03-09 15:52:36 -05:00
Michael Harding d48584fffe SPARK-626: less button-like buttons for canceling orders in the ladder 2018-03-09 14:46:20 -05:00
John Colvin eafc5c80cc remove font size overrides from mview, timeandsales, and fills 2018-03-09 14:30:25 -05:00
John Colvin a5d09b5b7d SPARK-642 Synthetic creation improvements - 2 2018-03-09 14:12:34 -05:00
John Colvin aac0d7799a synth editor - grey out readonly cells, add tool tip 2018-03-09 14:12:33 -05:00
John Colvin 9d981a1041 add input_disabled_text to BTSColors.UI 2018-03-09 14:12:33 -05:00
Jake Norbut c22a711fc7 orderBook - adding sub type; we may change this later 2018-03-09 12:05:46 -06:00
Jake Norbut 8b23690b3d sort wrapper - adding a null check 2018-03-09 12:05:46 -06:00
Jake Norbut 3bf8ce700a OrderBook - fixing last message ToolTip style 2018-03-09 12:05:46 -06:00
Taha Afzal bec1282f43 fixing build 2018-03-09 13:05:18 -05:00
Taha Afzal a918d1e40d comments on spreader params 2018-03-09 11:30:43 -05:00
John Colvin b7ae23fb07 DataGridEx - escape cancels edit without re-focusing cell's textbox 2018-03-09 11:24:42 -05:00
Jake Norbut 73b8bf3458 OrderBook - orders are indented more according to their depth 2018-03-09 10:19:51 -06:00
John Colvin 3e074b3ff7 SPARK-595 Synthetic modification rules 2018-03-09 10:56:15 -05:00
John Colvin 77168c86b3 SPARK-620 do not show synthetics when choosing leg for a synthetic 2018-03-08 20:35:11 -05:00
Jake Norbut 987db8ea6a ContractPicker - getting rid of old crusty comments 2018-03-08 15:56:54 -06:00
Jake Norbut bfe73d7a6a SecurityPicker - exchange list is now sourced from the bus Securities and not UserSymbols 2018-03-08 15:49:41 -06:00
Jake Norbut 6c0fe62c91 SPARK-604: cpp for spreads takes the first leg else nan and log 2018-03-08 14:07:15 -06:00
Pedro Pinto b339e456e4 SPARK-624, Multiple subscriptions for the same topic now work.
This was a scary one.
2018-03-08 14:24:23 -05:00
Pedro Pinto 69140002ed Adding new quick test helper 2018-03-08 14:24:23 -05:00
Pedro Pinto 6272be98a5 Adding new quick test helper 2018-03-08 14:24:23 -05:00
Eric Harding 2388711d4a min(), max() What's the difference really? 2018-03-08 14:04:57 -05:00
Jake Norbut e59587a0ea SPARK-620 - Contract Picker's world view can now be filterd via a SecurityCriteria 2018-03-08 12:40:05 -06:00
John Colvin 6cfc519d2d fix typeo in previous commit 2018-03-08 13:33:53 -05:00
John Colvin 7a1e8f9570 Remove "Enable Hedging" 2018-03-08 13:29:16 -05:00
John Colvin 53c669d14e SPARK-589/SPARK-633 "Size" should be called "Quantity" 2018-03-08 13:18:50 -05:00
John Colvin 72230209dc SPARK-589/SPARK-632 "Pay up" should be "Pay Up" 2018-03-08 13:15:32 -05:00
John Colvin 16b941344a SPARK-598/SPARK-631 "Market Order Hedge" should be "Send Market Order" 2018-03-08 13:11:08 -05:00
John Colvin d40b6c0092 SPARK-589/SPARK-630 PreHedge should be Pre-Hedge (similarly for Post) 2018-03-08 13:07:08 -05:00
John Colvin 9dbc482f31 SPARK-589/SPARK-629 disable pricing (restrict to standard) 2018-03-08 13:01:41 -05:00
John Colvin d97a126d64 SPARK-589/SPARK-628 leg does not need to be collapsible 2018-03-08 12:53:09 -05:00
Eric Harding f441c1f649 setup_builds.bat should also restore nuget packages. 2018-03-08 12:17:45 -05:00
John Colvin d3b00b1a6f synth create - fix msg text alignment 2018-03-08 12:04:26 -05:00
Jake Norbut 85b282479d SPARK-625 - orders whose securities come in after the order book is launched now fill in correctly rather that remain with Unknown Security 2018-03-08 10:39:17 -06:00
Taha Afzal e4d25506f6 adding comments 2018-03-08 07:34:48 -05:00
Taha Afzal 501e6db786 SPARK-616 suborder type 2018-03-08 07:34:48 -05:00
Taha Afzal becbee5af7 made some logging more clear, plus added an unused function to know if a leg has been completely filled 2018-03-08 07:34:48 -05:00
John Colvin 9e60aed4c4 synth create - shift msg text right 2018-03-08 02:07:20 -05:00
John Colvin e40354bf4f synth create - change message font color to green 2018-03-08 01:19:28 -05:00
John Colvin 9089936b83 SPARK-569 in order ticket do not display updates and original price sizes (its confusing) 2018-03-07 23:47:22 -05:00
John Colvin 4f94f4d6cf synth create - increase error flash duration 2018-03-07 23:40:28 -05:00
John Colvin 55fc66512b synth create - validate leg count when opened 2018-03-07 23:23:02 -05:00
John Colvin 6c6cc79002 synth create - change 'Must select...' to 'Please select...' 2018-03-07 23:19:43 -05:00
John Colvin 11696884d9 synth create - forgot to unhook from some events 2018-03-07 23:19:36 -05:00
John Colvin 7d2f65425b SPARK-619 Synthetic Creation Window should not allow OK if the data for a synth isn't there 2018-03-07 23:07:18 -05:00
John Colvin c910e522a7 SPARK-621 In order ticket the price is initially displayed with a - which
can result in seemingly sending out a negative price
2018-03-07 18:37:13 -05:00
Eric Harding 2d875c18b9 Use generated with() syntax because it's so cool. 2018-03-07 17:27:19 -05:00
Eric Harding c8302c35a7 Fix crash in MDConsumer recovery logic. Attempt to unsubscribe from event that was never subscribed. 2018-03-07 17:27:19 -05:00
Pedro Pinto d116a03ef5 Stop/start shell on build_win 2018-03-07 17:09:52 -05:00
Jake Norbut 611f5c723d SPARK-605 - probably partial; parent/child sorting based on time created 2018-03-07 16:07:58 -06:00
John Colvin 8e1d4e9e27 Merged in SPARK-602 (pull request #7)
SPARK-602 (take 2)

Approved-by: Eric Harding <eric.harding@bluetradesys.com>
2018-03-07 21:05:10 +00:00
John Colvin b6e6c70f4d SPARK-602 (take 2) 2018-03-07 15:53:25 -05:00
John Colvin ca52530b63 reverting mdsource file 2018-03-07 13:53:09 -05:00
John Colvin 30b4293483 SPARK-602 Add facility to delete/hide synthetics 2018-03-07 13:28:52 -05:00
Eric Harding 574def08b7 clean up some comments 2018-03-07 13:24:33 -05:00
Eric Harding 8f57c5f5e8 make 'md dump' tool more user friendly. 2018-03-07 13:18:27 -05:00
Eric Harding cd2a5641de Spark-325 Implement fast synthetic book merge. 2018-03-07 12:55:52 -05:00
John Colvin 20d4ba0279 add has_editable_properties to IOrderTypeVM 2018-03-07 11:54:15 -05:00
John Colvin 03611efecb ladder - fix iceberg revert, and ignore spreader order revert (todo) 2018-03-07 11:47:10 -05:00
John Colvin 0201b01d34 Synthetic Management row default action (show ladder) 2018-03-07 11:47:10 -05:00
Michael Harding da2888eecc restore unintentional changes to linux docker 2018-03-07 11:05:56 -05:00
John Colvin 8c0aff349b SPARK-611 Incorrect synthetic ladder comes up from Synthetic Management form 2018-03-07 10:37:43 -05:00
Michael Harding 21d7cb8d4f Change cancel button order 2018-03-07 10:24:06 -05:00
Michael Harding ed6d92dd64 Synthetic Spreads Icon set ('share' icon) 2018-03-07 10:09:58 -05:00
Michael Harding b82065b094 Update Order Icons 2018-03-07 09:45:13 -05:00
Michael Harding bae0633c51 Ladder cancel buttons 2018-03-07 09:45:13 -05:00
Michael Harding 161cffeeae Restore order badge mouse over 2018-03-07 09:45:13 -05:00
John Colvin f141ff6135 SPARK-567 in synth security creation form the sec picker disappears on click 2018-03-06 23:51:20 -05:00
John Colvin d224527a3c PopupControl doesn't close on background click 2018-03-06 23:11:12 -05:00
John Colvin cf35dd1711 SyntheticManagement - add n_working_orders column 2018-03-06 21:50:09 -05:00
John Colvin 63a628e4cd SyntheticManagement - add security key column 2018-03-06 20:41:15 -05:00
John Colvin 3a4e49938c SyntheticEditor - add ticks to ui 2018-03-06 20:41:14 -05:00
Pedro Pinto 0f28a7f1c2 SPARK-612, Added marker for spreader hedger/quoter order tag 2018-03-06 16:57:20 -05:00
Pedro Pinto d4230502ec Fixed a few bugs in our book generation. 2018-03-06 15:35:24 -05:00
Eric Harding f275385aa4 Disable unnecessarily lenghy unit test. 2018-03-06 15:24:41 -05:00
Pedro Pinto 970bf44751 SPARK-608, Generating our own book. 2018-03-06 14:28:58 -05:00
Pedro Pinto fab0388ae1 Added canary write to shared memory, to detect allocation issues. 2018-03-06 14:28:58 -05:00
John Colvin cf2582a25b maybe fix ladder stuck with nan prices bug 2018-03-06 13:50:02 -05:00
John Colvin cf8faf8c4e split up OrderTypeDefVMS into there own classes 2018-03-06 13:50:02 -05:00
Eric Harding 58be751faa Prevent raw FixedSecurity from being created unintentionally 2018-03-06 13:25:58 -05:00
Eric Harding 2db2af67a0 Shared memory size is limited by default inside docker. 2018-03-06 13:09:20 -05:00
John Colvin 87918da433 move Orders dir to Spark proj base dir 2018-03-06 12:59:15 -05:00
John Colvin b89825876b fills - fix duplicate SortDescriptions bug 2018-03-06 12:51:41 -05:00
John Colvin c91fe35310 rename SyntheticCreationDialog to SyntheticEditorView (it is not only used for creation) 2018-03-06 12:39:21 -05:00
John Colvin 5a72a44d72 make SyntheticDataHelper private to ShowSyntheticEditorHandler 2018-03-06 12:09:34 -05:00
John Colvin 1e2920c8ae remove a bunch of old order references 2018-03-06 11:32:20 -05:00
Pedro Pinto 92be59e0df Cleaning up SparkProtos 2018-03-06 10:02:21 -05:00
Pedro Pinto 457e899dff Working towards our own book. 2018-03-06 10:01:01 -05:00
Eric Harding 20404c0ecf Stop overwriting cpp value with cme_unit_of_measure_qty 2018-03-06 09:42:56 -05:00
John Colvin 7398a353b5 ladder - fix one tick ask market ghost prices bug 2018-03-06 02:58:42 -05:00
John Colvin 3b413cd36a ladder - fix nan prices bug 2018-03-05 22:52:07 -05:00
John Colvin 84f04fb3f0 throttling the ladder refresh time, will check in a better fix tommorrow (it's late) 2018-03-05 22:27:32 -05:00
John Colvin db1966b775 SPARK-470 ladder auto re-centering is incorrect 2018-03-05 21:26:38 -05:00
John Colvin 1692d0c7c7 ladder - don't show 0 (size) on mouse over 2018-03-05 21:08:23 -05:00
John Colvin d19c6894b6 ladder - corner cases for one-sided/empty markets 2018-03-05 20:44:41 -05:00
John Colvin 13cf14d859 fix theoretical bug in SyntheticEditorView (would prob never happen in practice) 2018-03-05 20:44:41 -05:00
Eric Harding bb1449c55e Spark-577 display factory wackyness. 2018-03-05 17:31:15 -05:00
Jake Norbut c59cb19fea SPARK-598: Orderbook Last Message now has tooltips 2018-03-05 14:59:32 -06:00
Taha Afzal a3b850b06d added nymex and cbot entries to jetfix.conf 2018-03-05 11:39:58 -05:00
Eric Harding 8d62eaf15e spark-577 get cash-per-point from market data feed. 2018-03-05 11:23:11 -05:00
Jake Norbut 206f2d3c3c SPARK-599 - Exceptions are now exceptional 2018-03-05 09:56:52 -06:00
Pedro Pinto dc6bce362f Non-limit orders are now also recoverable from disk. 2018-03-05 10:50:07 -05:00
Eric Harding 9939857f17 spark-596 fix tick sizes for exchange spreads 2018-03-05 10:02:46 -05:00
Pedro Pinto 06551dc327 Better build win script 2018-03-05 10:01:59 -05:00
Eric Harding c3490ea5a3 Merged in position_and_working_order_check (pull request #6)
Fix intermittent unit test failure in position_and_working_order_check
2018-03-05 13:59:58 +00:00
Eric Harding bdd00be747 Fix intermittent unit test failure in position_and_working_order_check 2018-03-05 08:55:22 -05:00
Taha Afzal f8d25bf305 fixed qty calc for N legged 2018-03-05 07:36:22 -05:00
John Colvin e0a8dc62c4 ladder/ticket spreader template 2018-03-04 22:51:54 -05:00
John Colvin d7c92855e9 ladder/ticket - stop/stoplimit format stop price with ticks 2018-03-04 17:40:23 -05:00
John Colvin 809d739116 order ticket - flash price/size if invalid 2018-03-04 17:12:43 -05:00
John Colvin fdef25b860 ladder/ticket - validate stop/stoplimit/iceberg parameters 2018-03-04 16:54:24 -05:00
John Colvin dac8031c81 ladder/order ticket - TimeBoxOrder popup 2018-03-04 16:05:09 -05:00
John Colvin e4f63464a1 order modify ticket - remove some redundant code 2018-03-04 14:48:28 -05:00
John Colvin 97ed5dad20 order modify ticket - don't allow modify if price and size are both unchanged 2018-03-04 14:25:48 -05:00
John Colvin cf705553df order modify ticket - center align modify hint 2018-03-04 14:19:17 -05:00
John Colvin 6d1ab82d63 grid filters focus textboxes when popup opens 2018-03-04 14:13:25 -05:00
John Colvin c3340b4389 grid filters - improve style, search text box auto focus, close on escape 2018-03-03 20:34:28 -05:00
John Colvin bdd49ed19e TimeAndSales line endings 2018-03-03 20:19:07 -05:00
John Colvin 31e1789fa3 mview - fix animation adorner transform from scroll changes in filters 2018-03-03 18:59:39 -05:00
John Colvin 24670bfada TickUpDowns default border/background, add TickUpDownNullableDouble (for filters) 2018-03-03 17:25:40 -05:00
John Colvin 56ee3679ee order ticket - fix cancel, close after action, add input-dirty borders 2018-03-03 16:07:54 -05:00
John Colvin 53f88e4c60 ComboBox actually binds Background/BorderBrush, condense really wide lines in generic.xaml 2018-03-03 15:55:53 -05:00
John Colvin 6466c8b727 Synthetic Management fix description filter xaml typeo 2018-03-02 22:42:16 -05:00
John Colvin 7ec535ae3e Synthetic Management Create Time filter uses TimeFilterTemplate 2018-03-02 22:37:14 -05:00
John Colvin c04c9bbd44 Synthetic Management description lists legs, not name 2018-03-02 22:34:11 -05:00
John Colvin 9ef66991af SPARK-582 Create synthetic window is not sorting the legs correctly 2018-03-02 21:02:32 -05:00
John Colvin 2de8c98b57 format_tick function in checked scope, logs and returns 'Overflow' if an Overthrow Ex occurs 2018-03-02 18:50:40 -05:00
Eric Harding 6126c9eefc Test 3 legs. Creating these tests is very time consuming. 2018-03-02 18:30:21 -05:00
Eric Harding 2ce50a17f9 Fix line endings 2018-03-02 18:27:59 -05:00
Eric Harding 36bd9744ef Make test instrument copyable 2018-03-02 18:27:59 -05:00
Eric Harding 88a90a724d Add Deep book and empty market tests 2018-03-02 18:27:59 -05:00
Eric Harding 03d11c6e69 ImportMany script support allows you to drive the launcher with python. 2018-03-02 18:27:59 -05:00
Taha Afzal ef98da320b simplified the error condition detection for the child orders 2018-03-02 17:09:31 -05:00
John Colvin c7675ef2b6 [SPARK-584, SPARK-591] refactor common ladder/ticket code, fix ladder mouse-hover ghost price bug 2018-03-02 17:07:17 -05:00
Michael Harding 34163a720d SPARK-393: yet more icons 2018-03-02 16:07:33 -05:00
Jake Norbut 09c9431374 PnL: PnL Price 2018-03-02 14:58:02 -06:00
Jake Norbut 9400f7e622 PnL: Adding SOD; mockup object for CME session info, not in use yet 2018-03-02 13:17:56 -06:00
Eric Harding 998fb33b59 spark-325 Synthetic Book Merge. Does not yet compute weighted average for partial sizes 2018-03-02 12:37:40 -05:00
Taha Afzal ca3b91afb5 SPARK-593 2018-03-02 10:24:32 -05:00
Eric Harding d3b86b607b Add CompositionContainer to script host. Ready for user 2018-03-02 09:43:32 -05:00
Eric Harding 86ee057e13 Spark script logging improvements 2018-03-02 08:50:08 -05:00
Eric Harding 57b9cfa8d1 python scripting in spark 2018-03-01 22:52:50 -05:00
John Colvin bbf3726241 ladder/ticket default to Limit Order 2018-03-01 18:22:31 -05:00
Jake Norbut 8f34552f2d OrderBook - Disabling grid sorting since it's not compatible with tree representation at the moment 2018-03-01 16:46:13 -06:00
Jake Norbut ffb31b5944 PnL: more filterable columns 2018-03-01 15:40:10 -06:00
Michael Harding 69aba23d2c Fix Button style 2018-03-01 16:36:35 -05:00
Pedro Pinto 11e0c87ee4 SPARK-513, Execution report processing is now idempotent. 2018-03-01 16:29:08 -05:00
Pedro Pinto 4db5399b13 Disabled flaky test. 2018-03-01 16:29:08 -05:00
John Colvin 3b50864b18 SPARK-565 on synth security creation change Add to Add Leg 2018-03-01 15:04:11 -05:00
John Colvin ed148d2673 SPARK-566 on synth security creator the first column should not be editable 2018-03-01 14:26:24 -05:00
Kevin Darby c5eb597965 added P&L test, but need a little more meat here once Jake finishes a few things 2018-03-01 13:22:36 -05:00
Kevin Darby 6d54a25765 adding manual tests 2018-03-01 13:05:27 -05:00
Eric Harding c1d168c605 Do not load deleted synthetics or their metadata. 2018-03-01 12:28:49 -05:00
Eric Harding b1dc722b43 SyntheticSecurityService should publish initial metadata from database. 2018-03-01 12:02:18 -05:00
John Colvin c0aee087bd accidentally added some test code 2018-03-01 12:01:16 -05:00
John Colvin e033ceb0a8 synth man doesn't depend on strategy firing once to show rows 2018-03-01 11:59:56 -05:00
Jake Norbut 6e629119f7 SecurityPicker - Format Synthetics using Name property 2018-03-01 10:40:58 -06:00
Jake Norbut 21ae8ab78f PnL: adding weighted average 2018-03-01 10:24:45 -06:00
John Colvin 60ea25e7f9 ticket/ladder order type dropdown filters items based on the security 2018-03-01 11:18:57 -05:00
Pedro Pinto 0f9fc84085 Get rid of old security db. 2018-03-01 11:10:37 -05:00
John Colvin 06a1d937dc synthetic management add new button prepopulates legs with selected synthetic 2018-03-01 00:11:32 -05:00
Taha Afzal 96e5c5b00e log changes 2018-02-28 23:15:26 -05:00
John Colvin 0888d7066f synthetic management window shows all synthetics, with or without a strategy 2018-02-28 19:48:05 -05:00
Pedro Pinto 2cc62fb9d2 Should address the server crash that Taha. 2018-02-28 22:05:35 +00:00
Michael Harding af2c284b4a SPARK-576: Don't order when recentering 2018-02-28 16:44:38 -05:00
Jake Norbut 18120e3ab5 SPARK-549: OrderBook now has a regex filter for Security column 2018-02-28 15:25:28 -06:00
Jake Norbut e1fbd84b26 PnL - mock up the cpp store 2018-02-28 15:07:32 -06:00
John Colvin 53a59e5f53 add spreader order logic to ticket and ladder 2018-02-28 15:45:03 -05:00
Pedro Pinto 701ed71681 Added price, size to file loaded order in TestOrderMan 2018-02-28 15:24:04 -05:00
Pedro Pinto 1011e196c4 Revert "SPARK-564, Dropped old security DB."
This reverts commit 3c595bc4b5.
2018-02-28 14:54:41 -05:00
Eric Harding 9fab67e938 std::stoi instead of stringstream 2018-02-28 13:35:00 -05:00
Eric Harding 408bff4c82 Add dumpsecurity tool. sparkd md dumpsecurity [security_key list] 2018-02-28 13:06:13 -05:00
Jake Norbut 3ae413a983 PnL: Adding some grid filters 2018-02-28 11:51:11 -06:00
Eric Harding c01ae5afa2 aesthetic change to SyntheticSecurityService api 2018-02-28 11:49:08 -05:00
Taha Afzal 8ac385c53b Fixed docker subrepo 2018-02-28 11:45:31 -05:00
Eric Harding ccc135ef80 add stateful publisher feature to c++ api server 2018-02-28 11:41:10 -05:00
Taha Afzal 20d3c2ad58 logs 2018-02-28 10:22:10 -05:00
John Colvin f83028ab98 ladder - fix invisible orders due to price rounding 2018-02-27 23:58:32 -05:00
John Colvin e63e3c76d3 SPARK-571 Multiple issues with Synthetic Management Form 2018-02-27 23:58:32 -05:00
Eric Harding 6526a9760c Split spark script test server into separate process 2018-02-27 22:06:38 -05:00
Eric Harding 54ad149b6f ShellDiagnosticService test code 2018-02-27 21:55:32 -05:00
Pedro Pinto f1c28bf200 Revert "Enable onixs instrumentSelection filter"
This reverts commit bcb2e068d2.
2018-02-27 18:06:03 -05:00
Pedro Pinto 3c595bc4b5 SPARK-564, Dropped old security DB. 2018-02-27 22:48:11 +00:00
Eric Harding bcb2e068d2 Enable onixs instrumentSelection filter 2018-02-27 17:44:43 -05:00
Jake Norbut a62718765e cmake file per pedro 2018-02-27 16:36:37 -06:00
Jake Norbut fa6e72b1e6 PnL: defaulting to waterfall 2018-02-27 16:33:10 -06:00
Jake Norbut a261c55060 PnL: it's helpful to actually upate when md ticks 2018-02-27 16:26:40 -06:00
Pedro Pinto a89624ca90 SPARK-554, Shell should recover from server bounce now. 2018-02-27 15:54:11 -05:00
Pedro Pinto e18af921d9 Increased timeout in tests some more. 2018-02-27 15:54:11 -05:00
Pedro Pinto 155835e5f2 Added test code to flush out api disconnect problem. 2018-02-27 15:54:11 -05:00
John Colvin 0d443e579e synthetic creation dialog - leg params are properly set before commit 2018-02-27 15:17:15 -05:00
Eric Harding 82cdc9fc32 Spark-340 Return of MDConsumerHandle 2018-02-27 15:08:19 -05:00
Eric Harding bdf15fb383 spark-340 partial. Add functionality required for synthetic execution strategy to reach client 2018-02-27 14:59:22 -05:00
Michael Harding 3f098f36b9 SPARK-527: Order badge context menu 2018-02-27 14:05:43 -05:00
Michael Harding 4f3bd66dac SPARK-526: Middle click to center Ladder 2018-02-27 14:05:43 -05:00
Eric Harding a671890487 Add streaming notification of synthetic metadata changes. 2018-02-27 13:49:39 -05:00
Eric Harding 572a6f1178 Add ShellDiagnosticeServiceServer.proto Not yet implemented. 2018-02-27 13:49:39 -05:00
Michael Harding 55bf38703e Filled/Total 2018-02-27 12:31:10 -05:00
Taha Afzal 437dbd3fb9 Not finding an order key in an order update is not an assert condition - the quoter order could have been cancelled and a new one sent 2018-02-27 10:22:59 -05:00
Taha Afzal 50623c3039 added find_qty_at_price_level to SpreaderUtils 2018-02-27 09:12:57 -05:00
Pedro Pinto 4e1f18c02c Added extra MSGW cert sessions for different groups.
squash! Added a commodities MSGW cert session.
2018-02-27 09:08:38 -05:00
Pedro Pinto 49122cfb20 Added const qualifiers to api Result. 2018-02-27 08:51:44 -05:00
John Colvin 6685ae671f dare i say fixed the ladder cert-price bug 2018-02-26 20:56:38 -05:00
John Colvin e8a49ecf18 ladder check for null depth in _size_from_row 2018-02-26 19:03:55 -05:00
Jake Norbut 5dedd45a35 PnL: Waterfall, you so awesome 2018-02-26 18:00:39 -06:00
John Colvin 0525f3ba0b ladder - more log messages 2018-02-26 18:36:22 -05:00
John Colvin d9974f50e0 fix logviewer textwrapping binding 2018-02-26 18:29:44 -05:00
John Colvin c8d81725cb ugh xaml named elements are false compiler errors, and thus break refactoring 2018-02-26 17:58:44 -05:00
John Colvin 52b69df5f4 ladder fix log toggle headers 2018-02-26 17:56:34 -05:00
Michael Harding 00b35d9d07 SPARK-553: Taking Down the Christmas lights 2018-02-26 17:11:58 -05:00
Michael Harding e6239e878b SPARK-536: Clearly 2018-02-26 17:11:58 -05:00
John Colvin 2800c2bae3 ladder fix typeo in status changed log 2018-02-26 17:11:11 -05:00
Eric Harding 6d9242b355 Spark-552' MDConsumer needs to load real securities before it resolves legs of synthetics 2018-02-26 16:47:52 -05:00
Eric Harding 51bf57eff4 Spark-552 Synthetic Securities not restored from DB 2018-02-26 16:05:24 -05:00
Michael Harding bde83aa111 SPARK-524: Change ladder badge 2018-02-26 16:00:22 -05:00
Michael Harding 7bf8e77999 Colorful cancel icons 2018-02-26 16:00:22 -05:00
John Colvin 3669d878db ladder - add warning logs (to track down cert-price bug) 2018-02-26 15:04:31 -05:00
Michael Harding 0f086fdd59 Fix Blurry Buttons 2018-02-26 13:01:34 -05:00
Michael Harding 3e367eca59 Spark-520, 522, 528: Buttons in the ladder are better 2018-02-26 12:56:14 -05:00
Michael Harding fb76def8ce Return Text to the Default Launcher State 2018-02-26 12:56:14 -05:00
Eric Harding 705bf5b167 Spark-563 return an error if user requests to create a security which already exists. 2018-02-26 12:23:11 -05:00
Eric Harding 06aed6e411 spark-545 insert *or update* metadata 2018-02-26 12:21:18 -05:00
Eric Harding b1dbf5e3ba Spark-562 2018-02-26 11:45:39 -05:00
John Colvin 0022b63ab7 fix update_order_size method 2018-02-26 11:18:37 -05:00
Taha Afzal 347f5357d0 initialized the out values in pahless/paymore functions 2018-02-26 09:50:44 -05:00
Taha Afzal e17888a044 fixing build 2018-02-26 09:43:56 -05:00
Taha Afzal efa8616f69 hooked thepayless paymore prehedge logic 2018-02-25 19:27:47 -05:00
John Colvin f49ec1db03 ladder - make log headers visible by default again (without headers/logs, it looks like a random white box) 2018-02-25 15:32:14 -05:00
John Colvin 84b8eeac75 ladder log viewer headers hidden by default (ctrl + l toggles show/hide) 2018-02-25 14:23:52 -05:00
John Colvin f30055ccfb SyntheticManagement window can create synthetic without any securities selected 2018-02-24 16:02:45 -05:00
Pedro Pinto a63deaac45 What is going on with this subrepo shit 2018-02-24 15:20:07 -05:00
Pedro Pinto 00f44217a4 Fixed clang build. C++ sucks. 2018-02-24 15:19:55 -05:00
John Colvin 87b41b286f ladder log message time stamp in military time 2018-02-24 15:04:59 -05:00
John Colvin c7fd14808e ladder log viewer doesn't automatically grow vertically 2018-02-24 15:03:57 -05:00
John Colvin 72865994ae ladder order-modify logs added in response to changes detected in order state 2018-02-24 14:20:41 -05:00
John Colvin c0adb038ab ladder - change 'Details' button to 'Book' 2018-02-24 13:37:16 -05:00
John Colvin d525c33c2d ladder log viewer uses colors in BTSColors.Orders, added filled_dark and sent 2018-02-24 13:31:06 -05:00
John Colvin b71ae5477b SPARK-523 provide status bar on the ladder to give feedback on last order operation 2018-02-24 12:14:56 -05:00
Eric Harding 40d5bee934 Spark-546 Fix the NullRef with no stack. Still not entirely sure why the ContinueWith solution doesn't work. 2018-02-23 19:40:23 -05:00
Eric Harding 6dda712a61 Add extra safeguard around calling CLR callbacks. 2018-02-23 19:40:23 -05:00
Eric Harding 78644f9f4d Fix error. Protobuf.CopyFrom does not check the type of the argument at compile time :( 2018-02-23 19:40:23 -05:00
Jake Norbut 50aaef5516 PnL - in case my machine starts on fire 2018-02-23 17:10:56 -06:00
John Colvin e2c90bebe2 OrderUtils.working_quantity() returns an int (not susceptible to overfill-overflow) 2018-02-23 17:26:00 -05:00
John Colvin c218f2ef23 NumericSignBrushConverter returns error_brush for nans 2018-02-23 16:15:21 -05:00
John Colvin fce22cfacd ladder - better drag/drop feedback 2018-02-23 15:16:58 -05:00
Taha Afzal 82f059d0f6 spreader reported avg filled price fixed 2018-02-23 15:04:38 -05:00
Taha Afzal b95965684d adding avg price to report 2018-02-23 15:04:38 -05:00
Jake Norbut 90181c9137 SPARK-542: extend security_type() to support Synthetic 2018-02-23 13:52:31 -06:00
John Colvin e7348cb2bb ladder - fix size_from_row null ref 2018-02-23 14:21:52 -05:00
Eric Harding d6a310c5b5 Synthetics have depth 2018-02-23 14:06:54 -05:00
Eric Harding 23e3d5e5ee Additional md asserts. 2018-02-23 14:06:54 -05:00
Eric Harding 2bdd8b517d Record security to db before making it visible. (2 database pain) 2018-02-23 14:06:54 -05:00
Eric Harding d2cd4e233a Validate synthetic symbol is present. 2018-02-23 14:06:54 -05:00
Eric Harding 2aadab900d Move synthetic legs into shared_ptr for faster copy 2018-02-23 14:06:54 -05:00
Eric Harding 5328560827 Add LaunchSettings.json to gitignore 2018-02-23 14:06:54 -05:00
Eric Harding bcfcb2a089 Remove unused ErrorReporter from MDSource 2018-02-23 14:06:54 -05:00
John Colvin 82996efd62 SPARK-531 Ladder - qty input not detecting input is done via keyboard 2018-02-23 13:32:46 -05:00
John Colvin 5ef126462f SPARK-532 stop and stop limit orders need more parameters 2018-02-23 13:18:14 -05:00
John Colvin 4b4d85c303 SPARK-538 crash while moving ladder orders 2018-02-23 13:09:47 -05:00
John Colvin 6d7067637f time filter tick up/downs 2018-02-23 13:05:05 -05:00
Jake Norbut 07b1b73606 SPARK-541: OrderBook avg and last price now use TickDisplayConverter 2018-02-23 08:49:31 -06:00
Eric Harding 5f896555fc Add synthetic creat test tool to sparkcmd 2018-02-23 09:42:41 -05:00
Eric Harding 74b0afd943 fix build 2018-02-22 19:57:11 -05:00
Jake Norbut c8121a54d3 SPARK-539: make sure ParentOrder exists before adding to child list 2018-02-22 17:50:23 -06:00
John Colvin 804c574d4d SPARK-517 One more go at the grid filters 2018-02-22 18:18:19 -05:00
Jake Norbut 54aa5592af ContractPicker - needs an ObserveOnDispatcher 2018-02-22 17:06:39 -06:00
John Colvin 9226809781 synthetic editor disposes contract picker model 2018-02-22 18:00:20 -05:00
Eric Harding 758ce36539 Handfull of synthetic security fixes 2018-02-22 17:41:24 -05:00
Eric Harding 240730de68 Accidental check in. Thanks unit tests! 2018-02-22 16:06:03 -05:00
Eric Harding a7d295051c Spark-495 and Spark-486. 2018-02-22 15:57:52 -05:00
Eric Harding 3311a29d6d Convert TimeStamp::shift* to return a copy rather than mutate original. 2018-02-22 15:57:52 -05:00
Jake Norbut 1168c37d59 PAndL: completing the skeleton 2018-02-22 14:53:59 -06:00
Jake Norbut 05b188030f OrderBook: Adding LastChange back to the OrderBook grid 2018-02-22 13:01:34 -06:00
Pedro Pinto 07621ba838 Increasing time out in tests, probably useless. 2018-02-22 12:41:55 -05:00
Taha Afzal 3d80cf7115 post hedge was modifying orders too fast 2018-02-22 12:30:39 -05:00
Taha Afzal 0f69e1a959 added some asserts, and made the fill case more clear 2018-02-22 12:30:39 -05:00
Pedro Pinto c21dd8d96c Removed dependency on test file for unit tests. 2018-02-22 12:19:05 -05:00
Jake Norbut 1b4651ca24 PAndL - basic skeleton files 2018-02-22 11:08:34 -06:00
John Colvin 430029b4a0 ordervm only resets phantom price when all active price change tasks have finished 2018-02-21 18:04:20 -05:00
Pedro Pinto 37d5a7d96b Fixed unit tests. 2018-02-21 17:34:42 -05:00
Jake Norbut df965f9a10 SPARK-530: OrderBook last_change has been replaced with new create time 2018-02-21 15:05:47 -06:00
Eric Harding e236bafde1 Might help mysterious nullref problem. 2018-02-21 15:32:33 -05:00
Pedro Pinto 97f652576e More sub repo BS 2018-02-21 19:59:35 +00:00
Pedro Pinto 21b4476689 Added creation time to order record. 2018-02-21 14:26:04 -05:00
Taha Afzal 5ba3e74ab9 fixed hedging issue with partially sized fully filled quote fills 2018-02-21 10:39:31 -05:00
Jake Norbut 4c36fbc79a ContractPicker - Exchange list is now sorted (woo hoo BTS exchange) 2018-02-21 08:46:26 -06:00
Michael Harding 6b19cd60af New Ladder Icon 2018-02-21 09:22:25 -05:00
Eric Harding 7a2d24cf54 Spark-496, spark-497. Store and retrieve synthetic securities from a single block of shared memory. 2018-02-20 17:40:12 -05:00
Eric Harding 8a05326f74 Add 'skip stl' to sparkvm launch in vscode. 2018-02-20 17:40:12 -05:00
Pedro Pinto ac0463a631 Allowed loading of orders from disk for testing purposes. 2018-02-20 17:15:11 -05:00
Jake Norbut 0ad42b5049 OrderBook - window should come up when workspace is restored 2018-02-20 15:18:36 -06:00
Eric Harding 175fe92f08 Spark-498 Enable FixedSyntheticSecurity type. 2018-02-20 15:42:52 -05:00
Eric Harding 239d641989 Fix SecurityIDRecorder for spreads which have unresolved legs. 2018-02-20 15:42:51 -05:00
John Colvin 2a4923cbed render nans with '-' 2018-02-20 15:18:59 -05:00
Michael Harding 4caf48347e SPARK-505: two pixels... 2018-02-20 14:02:13 -05:00
Michael Harding e17cb03108 SPARK-512: Center Workspaces Dialog 2018-02-20 14:02:13 -05:00
Pedro Pinto 7890f76b03 Fixed release build for Taha 2018-02-20 13:54:01 -05:00
Pedro Pinto 172d186daa Fixed clang build. 2018-02-20 13:54:01 -05:00
Pedro Pinto 949a98ac67 move dockerfile subrepo pointer 2018-02-20 13:54:01 -05:00
Pedro Pinto 66cf280f1b Removed on dispose logging call to avoid crash on exit 2018-02-20 13:54:01 -05:00
John Colvin 76620647ae order modify ticket first tick goes to working size/price 2018-02-20 13:42:42 -05:00
John Colvin 1a984a3fda ladder - change menu buttons style 2018-02-20 12:15:30 -05:00
John Colvin 528690ab34 SPARK-506 Iceberg order needs to set child member to something 2018-02-19 21:24:33 -05:00
John Colvin 30d9893d10 ladder and order ticket size buttons not focusable 2018-02-19 18:19:53 -05:00
John Colvin 33a79cc636 Ladder - hook up order modify-command 2018-02-19 16:58:48 -05:00
John Colvin 94f689e94d SPARK-474 Show more information in ladder tooltip 2018-02-19 16:51:35 -05:00
John Colvin 4d44e32b34 fix OrderVM.Equals stack overflow 2018-02-19 16:51:34 -05:00
John Colvin 7feda2a1c5 Ladder opens order context menu on ctrl+click 2018-02-19 16:51:34 -05:00
John Colvin 4ad9384f9b LadderSettings does not append calculator buttons on deserialization 2018-02-19 16:51:33 -05:00
Taha Afzal 9f744bbd75 reporting shored up a bit 2018-02-19 15:09:32 -05:00
John Colvin 014971295b ladder retains state 2018-02-19 13:08:51 -05:00
John Colvin 045577bbd1 ladder/ticket size won't tick down across 0 (was going to uint.Max) 2018-02-19 12:19:26 -05:00
John Colvin cb7cb56518 ladder - fix column resize bug 2018-02-19 12:08:41 -05:00
John Colvin beb6bd000c ladder won't send order if resizing column 2018-02-19 00:03:33 -05:00
John Colvin 98112386fa SPARK-489 Resize ladder columns when form resizes 2018-02-18 23:48:03 -05:00
John Colvin 6f1160a2ec ladder orders use hand cursor 2018-02-18 23:26:02 -05:00
John Colvin a27abfb6d4 ladder resizable columns 2018-02-18 20:11:29 -05:00
John Colvin 1b918278f6 wpfhelper.manage_collection_change 2018-02-18 19:05:20 -05:00
John Colvin 37191ca2bb increase ladder revert check box margin 2018-02-17 21:50:21 -05:00
John Colvin cd050b5a00 SPARK-487, SPARK-488 - sprucing up ladder 2018-02-17 21:42:09 -05:00
John Colvin 2acec803c5 obviously this .tmp_proj file was added by mistake 2018-02-17 21:04:33 -05:00
John Colvin 4f5cfc743f SPARK-508 Ladder - defer refresh order price during order-update task 2018-02-17 16:46:07 -05:00
John Colvin cf47f29a14 fix EqualityComparer.Create key comparer 2018-02-17 16:09:19 -05:00
John Colvin 8f5c4c6ea5 fix stackoverflow exception in ObjectHelper.try_convert 2018-02-16 18:46:37 -05:00
John Colvin dcbfadb413 time and sales - fix sorting, add trade key column 2018-02-16 18:46:14 -05:00
John Colvin 707b445e31 SPARK-499 Fills window unsorts on fills 2018-02-16 17:54:23 -05:00
Michael Harding 045b750314 Arrows, Icons, Text 2018-02-16 17:31:11 -05:00
Taha Afzal 8099f36cb6 SPARK-477 2018-02-16 17:18:48 -05:00
John Colvin 737b55abb4 fill time in local am/pm format 2018-02-16 16:27:04 -05:00
John Colvin cbd0104f25 SPARK-509 Fills window is showing inconsistent data 2018-02-16 16:21:22 -05:00
John Colvin 3825c52d08 modify order ticket shows working quantity/price 2018-02-16 15:57:54 -05:00
Jake Norbut 16a2f303f1 OrderBook - Adding Avg Filled (price) back to the grid 2018-02-16 11:14:08 -06:00
Michael Harding fbb0518ba4 SPARK 442: Vertical Launcher 2018-02-16 10:44:18 -05:00
Eric Harding da647680d3 SPARK-493 - Lets not introduce yet another crash on exit 2018-02-16 09:54:55 -05:00
Eric Harding 026e0686be spark-500. Don't throw out the client just because we unsubscribe one subscription. 2018-02-16 09:35:08 -05:00
John Colvin 749f8e8fb4 time filter text prompts 2018-02-15 19:12:08 -05:00
Taha Afzal 42a0695b71 shouldhave gone in the last commit 2018-02-15 18:07:23 -05:00
Taha Afzal cdb90f370c cleaned up the ISpreaderWorker interface for on_order updates 2018-02-15 18:07:23 -05:00
Jake Norbut 3f04a5ab46 OrderBook - savings a few allocations when sorting 2018-02-15 15:59:00 -06:00
Pedro Pinto f849086397 Handled transition of order from disconnected back to connected. 2018-02-15 21:40:37 +00:00
Pedro Pinto 46abf5ae59 Rename OrderServiceServer2 to OrderServiceServer 2018-02-15 21:40:37 +00:00
Pedro Pinto c600cc0caf Canceled orders no longer reset fill qty to 0. 2018-02-15 21:40:37 +00:00
John Colvin 5c66666be9 SPARK-455 change time filter to use begin/end and avoid the extra click to turn the filter on 2018-02-15 16:37:51 -05:00
Jake Norbut 7732d80e10 Order Book - parent/child sorting 2018-02-15 15:21:05 -06:00
Taha Afzal c60103d654 tests adjusted for avg price vs last price 2018-02-15 16:05:01 -05:00
Eric Harding 11a01c895c Merged in review_me (pull request #5)
spark-493

Approved-by: Jake Norbut <jake.norbut@bluetradesys.com>
2018-02-15 21:01:47 +00:00
Eric Harding 198b11efc0 spark-493 2018-02-15 15:33:06 -05:00
Eric Harding 76baa88f40 Use console log level info for debug builds (except for orderman) 2018-02-15 14:40:59 -05:00
Jake Norbut bbb340c1a0 SPARK-435 and SPARK-464 (I think) [thx Eric!] - order parent toggle visibility 2018-02-15 11:40:14 -06:00
Eric Harding 3f250b40f2 Merge branch 'master' of bitbucket.org:bluetradesys/spark into MDScratch 2018-02-15 11:54:10 -05:00
Eric Harding 5f01bf5ea8 Fix up relay unit tests. Detected an unintentional bug benign behavior change. 2018-02-15 11:39:55 -05:00
Taha Afzal 8b01c57691 spreader is not using OrderState::avg_price anymore 2018-02-15 11:05:56 -05:00
Jake Norbut 82424aebe2 SPARK-494 - OrderBook Last Filled now uses last_price instead of average_price 2018-02-15 09:55:02 -06:00
Eric Harding 4adaddbdb7 bugfix: break instead of return causes fall though to assert. 2018-02-15 10:51:26 -05:00
Eric Harding 011165e129 Fix test platform 2018-02-15 10:42:09 -05:00
Pedro Pinto ae7229478e Subrepos suck 2018-02-14 17:53:18 -05:00
Pedro Pinto a360b37e82 Fixed accumulated fill quantiy value. 2018-02-14 17:52:38 -05:00
Pedro Pinto cfa4f8b8b7 Removed duplicate file 2018-02-14 17:52:38 -05:00
John Colvin 28e97640a1 fix LadderTactileAdorner empty size text bug 2018-02-14 17:28:03 -05:00
Eric Harding c824ceed2a Add skip STL to debugger launch command. 2018-02-14 17:15:05 -05:00
Eric Harding 3d8409fd14 Clean up some logging. 2018-02-14 17:14:52 -05:00
John Colvin d67fe21c9c fix mview and time and sales second to last column width 2018-02-14 16:36:34 -05:00
John Colvin bf5e4dbdd3 SPARK-457 Add security key to time and sales 2018-02-14 16:35:08 -05:00
John Colvin 33ad27882c SPARK-456 Add security key to MView 2018-02-14 16:20:57 -05:00
John Colvin 4c2a68cb4b SPARK-458 add security key to fills form 2018-02-14 16:10:54 -05:00
Eric Harding c7bd026457 Inline perf fixes from edge 2018-02-14 16:10:49 -05:00
John Colvin 487b533c3a SPARK-469 remove mutable order related columns in fills window 2018-02-14 16:10:46 -05:00
Eric Harding 1387a8bcf0 Fix from merge. 2018-02-14 15:55:41 -05:00
Eric Harding 228b00e218 merge origin master 2018-02-14 15:34:39 -05:00
John Colvin 31bc756173 SPARK-449 Automatic re-centering does not work 2018-02-14 15:23:33 -05:00
Eric Harding 25051fedb5 add md unit test vscode debug config 2018-02-14 14:49:53 -05:00
Eric Harding c5297185aa Spark-231 2018-02-14 14:28:42 -05:00
Eric Harding ecaf1c13db Delete some unused tests 2018-02-14 14:28:22 -05:00
Taha Afzal 88aebd949b log improvements 2018-02-14 14:28:02 -05:00
Taha Afzal d7d56a7b33 disabling auto recenter in the ladder 2018-02-14 14:28:02 -05:00
John Colvin 0e1be68093 added atm_line setting to Ladder, defaults to bid 2018-02-14 14:21:32 -05:00
John Colvin 6920738f0c delete DialogButtonSkirt, use DialogSkirtOKCancel/OKApplyCancel instead 2018-02-14 13:09:50 -05:00
John Colvin ae1d66ef1e fix handle_error ErrorReporter extension method 2018-02-14 12:48:34 -05:00
Jake Norbut a9744228a0 SPARK-468 - moved security key to near last column; milliseconds now in time field 2018-02-14 10:14:11 -06:00
Eric Harding 1732388b23 Temporarily remove this assert. spark-482 2018-02-14 10:49:22 -05:00
Taha Afzal 93b83d2158 more logs 2018-02-14 09:23:24 -05:00
John Colvin f48c2ed80e SPARK-461 Iceberg order is not filling in show quantity 2018-02-13 20:20:36 -05:00
John Colvin d9bc3348c2 SPARK-452 0 sized orders should not be allowed from the ladder or ticket 2018-02-13 19:18:40 -05:00
John Colvin d5b0ee5eab SPARK-447 Changing the price of a partially filled order 2018-02-13 18:08:32 -05:00
Pedro Pinto b5c75e6cef Better phrasing in dialog. 2018-02-13 17:45:59 -05:00
Pedro Pinto e6023b27e7 This subrepo stuff is baffling 2018-02-13 17:27:23 -05:00
Pedro Pinto 1589355e27 Minor doc change. 2018-02-13 17:26:39 -05:00
John Colvin 75ed72dd0c SPARK-446 Ladder order placement feedback 2018-02-13 16:43:15 -05:00
Eric Harding 3b5aaca062 RecenterCountdown might not have a security yet 2018-02-13 16:21:20 -05:00
Taha Afzal 7f817a47dc log for hedging 2018-02-13 16:03:20 -05:00
Jake Norbut c6be6f63f6 OrderBook - nows allows for unknown securities (Spreader) in orders 2018-02-13 14:45:26 -06:00
Taha Afzal 826f69dcdc Merge branch 'master' of bitbucket.org:bluetradesys/spark 2018-02-13 15:21:06 -05:00
Eric Harding 0aa5ccda18 delete[] doesn't like this pointer type. 2018-02-13 14:29:55 -05:00
Eric Harding 045ac9143a Add null check to implicit constructor for Immutable genererated types 2018-02-13 14:13:41 -05:00
Eric Harding c515129d20 Destroy logging after config is initialized 2018-02-13 13:42:02 -05:00
Taha Afzal dd7a400e2d SPARK-462 recovered errors take the spreader to the end state now (not asserting) 2018-02-13 13:10:01 -05:00
Pedro Pinto 1b41f69939 Hopefully fixed bad fill handling bug 2018-02-13 12:34:38 -05:00
Pedro Pinto 64c51c64be Updated docker ptr 2018-02-13 12:34:38 -05:00
Pedro Pinto 7be1bbccfd More civilized string conversions. 2018-02-13 12:34:38 -05:00
Eric Harding 1a2cc6280d md md2_unit tests (2h) 2018-02-13 12:14:29 -05:00
Jake Norbut c98c6cca76 SPARK-459 - OrderBook grid now displays security key 2018-02-13 09:55:09 -06:00
Eric Harding 1f59438363 Synthetic discovery in on_security. Next add to scan_securities to get new ones 2018-02-12 17:30:54 -05:00
Jake Norbut 2378b3cb05 SPARK-460: OrderBook performancce issues - grid is now virtualizing rows correctly 2018-02-12 15:33:44 -06:00
John Colvin 3d7efd5686 implement Security IComparable (not just compare ids) 2018-02-12 15:26:35 -05:00
Taha Afzal 1745a327e7 logs 2018-02-12 15:05:56 -05:00
Michael Harding 88d09a1cf8 SPARK 450: refine workspaces dialog 2018-02-12 10:33:11 -05:00
Pedro Pinto db47b28cbd Fixed MD subscription service in OrderServices. 2018-02-11 16:30:12 -05:00
Pedro Pinto 1d2a21a636 Defaulted console logging to error 2018-02-11 14:42:51 -05:00
Taha Afzal 3b6e8e0076 more logs 2018-02-11 09:27:48 -05:00
John Colvin d73932f7af SPARK-448 Market sheets Working 2018-02-09 21:06:55 -05:00
John Colvin 8b9bd244fe SPARK-444 Double click ladder price column to recenter 2018-02-09 19:11:29 -05:00
John Colvin aa24b881fc fix mview orders update bug 2018-02-09 18:24:24 -05:00
Jake Norbut 6e9d733355 SPARK-445 - Working orders have a distinctive background color 2018-02-09 15:53:55 -06:00
John Colvin d5fec688af mview - inside orders animation responds to market changes 2018-02-09 16:34:28 -05:00
Pedro Pinto c78232554e Reduced output of testorderman. 2018-02-09 15:31:52 -05:00
Jake Norbut 0ca4379859 SPARK-434: OrderBook now has Cancel Selected 2018-02-09 13:04:42 -06:00
Jake Norbut fb61c8522f SPARK-443: Security Picker language 2018-02-09 12:22:31 -06:00
John Colvin 7cd3d4653b remove old order references 2018-02-09 12:17:07 -05:00
Michael Harding cf0d8f7801 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2018-02-09 12:06:32 -05:00
Michael Harding 67026489ac SPARK-440: Move Ticket button up 2018-02-09 12:06:24 -05:00
Taha Afzal 5058e3ffae more logs 2018-02-09 12:00:26 -05:00
Michael Harding a0bf258fc6 SPARK-431: Change Support to Help 2018-02-09 11:01:10 -05:00
Michael Harding 1b89dae918 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2018-02-09 10:44:34 -05:00
Michael Harding fbe2f57148 SPARK-407: Tooltips now show on disabled Spark Menu items 2018-02-09 10:40:49 -05:00
Pedro Pinto eb80dde5e2 Fixed order update/cancel at cert. 2018-02-09 10:13:32 -05:00
Pedro Pinto a7d9352755 Added utility to load core dumps.Assumes a specific core name format
This should be set in rc.local:
sysctl -w "kernel.core_pattern=/tmp/core_dump_%e_%p"
2018-02-09 10:12:17 -05:00
Michael Harding 87b0232caf SPARK-432: Support dialog does not require contact info 2018-02-08 15:41:46 -05:00
Jake Norbut 529c55e0db SPARK-441: OrderBook Order Type text now displays correctly in the fancy column 2018-02-08 11:33:07 -06:00
Michael Harding 019cbbbdda SPARK-433: Report a problem 2018-02-08 10:40:25 -05:00
Michael Harding 4f5b0ee1b5 Spark 415: 400<800 2018-02-08 10:40:25 -05:00
Michael Harding 5a3a815cd6 SPARK-416: Sythetics menu 2018-02-08 10:40:25 -05:00
Pedro Pinto 9895c01de8 Refactored orderman2 to orderman 2018-02-08 10:28:59 -05:00
Pedro Pinto 4b0d08d59f Cleaned up file locations for spreader. 2018-02-08 10:07:54 -05:00
Pedro Pinto 494cd327fc Better sim defaults 2018-02-08 13:54:53 +00:00
Taha Afzal 459e6b5044 sec res from the spreader uses the synthetic sec inside the order def (for testing) 2018-02-07 23:34:12 -05:00
Taha Afzal c441b942bb sec res logs more 2018-02-07 22:38:08 -05:00
Pedro Pinto 9b50ec699d Reduced maintenance window for SIM fix session.
For all you hard workers out there.
2018-02-07 19:23:36 -05:00
Taha Afzal af1629007f state machine change to account for on_active in END state 2018-02-07 17:19:09 -05:00
Pedro Pinto 1b88903610 Added support for stop and stop limit orders in testing. 2018-02-07 17:05:17 -05:00
John Colvin 1e533fe4eb SPARK-428 Synthetics: Use the word Synthetic not Synthetic Spread everywhere 2018-02-07 16:32:28 -05:00
John Colvin e5fbb7a8df SPARK-429 Grid filters: select from domain filter should use checkboxes 2018-02-07 16:19:08 -05:00
Pedro Pinto 0a18fba52d Improved support for market orders. 2018-02-07 15:33:29 -05:00
Pedro Pinto 210faa3d1e Logged more sensibly. 2018-02-07 15:33:29 -05:00
Pedro Pinto 5ee5cb97db Fixed test prompt. 2018-02-07 15:33:29 -05:00
Taha Afzal 4d6903301a better log reporting in the spreader 2018-02-07 15:18:25 -05:00
Pedro Pinto 17354c1c07 Moved docker subrepo pointer 2018-02-07 19:38:29 +00:00
Pedro Pinto c401b77f9b SPARK-439 - Added support for spreader orders in test interface. 2018-02-07 19:38:29 +00:00
Pedro Pinto 74fb77cd0a Added some documentation and moved some files around for clarity. 2018-02-07 19:38:29 +00:00
John Colvin 2ad25c13f9 SPARK-437, SPARK-438 -- window heights 2018-02-07 14:35:09 -05:00
John Colvin 5f7d90d320 remove a lot of unused code 2018-02-07 14:07:41 -05:00
Taha Afzal 6b09d1a4d0 fixing the build 2018-02-07 09:57:08 -05:00
Taha Afzal 5f3a5e1834 reproting needed the quantity 2018-02-07 09:47:18 -05:00
John Colvin a30e140555 [SPARK-423] SparkWindow implements IMeasureContentSize, provides windows
with sensible initial size"
2018-02-06 21:37:38 -05:00
Pedro Pinto 560e54075c More refactoring of orderman. 2018-02-06 17:56:39 -05:00
Pedro Pinto 551ac20aaf Cleaning up obsolete orderman code. 2018-02-06 17:06:54 -05:00
Pedro Pinto 842829b4a3 Fixed clang build. 2018-02-06 16:57:56 -05:00
Pedro Pinto 6ae3f62150 Tweaked log viewer script. 2018-02-06 16:03:54 -05:00
Eric Harding 961328c82c Port double rounding fix from edge 2018-02-06 13:32:24 -05:00
Taha Afzal 6f1af3eeff spreader better reporting 2018-02-06 07:45:18 -05:00
John Colvin d2a1f8dab3 SPARK-430 Filters: time filter should have before/after gates 2018-02-05 22:04:01 -05:00
John Colvin 63b87260fc SPARK-424 Time and sales window: first column should be security 2018-02-05 19:00:35 -05:00
John Colvin 24777a4040 SPARK-419 Market View: fills and time and sales commands should bring up filtered views 2018-02-05 18:53:32 -05:00
Taha Afzal bd99b770ed spreader reporting its state 2018-02-05 14:02:38 -05:00
Jake Norbut d3229b9756 OrderBook - low-hanging perf fix (GetHashCode) 2018-02-05 11:11:49 -06:00
Jake Norbut 0d8a7d948b OrderBook - hooking up enter key to default action 2018-02-05 11:09:46 -06:00
Taha Afzal 345c98a5bb SPARK-331 all tests almost done 2018-02-04 22:07:17 -05:00
Taha Afzal 1a6ab53f61 SPARK-331 last spreader test remains after this 2018-02-04 15:21:31 -05:00
Taha Afzal 06ac964e0f SPARK-331 accidentally disabled tests 2018-02-03 19:07:29 -05:00
Taha Afzal d94bf2d569 SPARK-331 spreader on_book 2018-02-03 18:49:06 -05:00
Taha Afzal d259f9824f SPARK-331 spreader working state 2018-02-02 19:45:10 -05:00
Michael Harding 482a76ae3a Add Workspaces dialog to the Settings menu 2018-02-02 16:52:05 -05:00
Eric Harding a1146adbd3 Merge branch 'master' of bitbucket.org:bluetradesys/spark into MDScratch 2018-02-02 15:00:33 -05:00
Taha Afzal 9fdf52141e SPARK-331 spreader start state test completed 2018-02-02 13:57:08 -05:00
John Colvin 3d4d0fc75d AttachedCommands.DoubleClick uses InputBinding rather than DoubleClick event 2018-02-02 12:55:24 -05:00
John Colvin 719703b6e3 mview - fix row Enter Key binding 2018-02-02 12:55:24 -05:00
Pedro Pinto a269d82ee5 Improved log viewing script. 2018-02-02 11:55:25 -05:00
Pedro Pinto 9c59420b3c Fixed a bug in order id generation when we send over 1000 orders 2018-02-02 11:55:25 -05:00
Eric Harding 8c7b11ae5b Fixes for cert market data 2018-02-02 11:33:51 -05:00
Eric Harding b00bbbb582 advance linux docker pointer 2018-02-02 10:57:20 -05:00
Pedro Pinto 707bcf82f3 Added core dump enabling to sparklib 2018-02-01 19:43:43 -05:00
Pedro Pinto 54245295b9 Build tweaks 2018-02-01 19:43:43 -05:00
Pedro Pinto 317f3a8e71 Build tweaks 2018-02-01 19:43:43 -05:00
John Colvin 69cd3a97a3 Fills Window selection highlight stretches across whole grid 2018-02-01 19:38:33 -05:00
John Colvin c8d8c97e1b SPARK-425 Time and sales window: remove Type column 2018-02-01 19:37:51 -05:00
John Colvin dedce259ec SPARK-417 No default action (dbl click or enter) on Mview 2018-02-01 19:27:06 -05:00
John Colvin 5d43b033e6 delete ImportedResources.cs 2018-02-01 19:27:06 -05:00
John Colvin 73e60fe62c Ladder accounts come from OrderFactory 2018-02-01 19:27:05 -05:00
Taha Afzal e5a10ea875 SPARK-331 spreader start state test 2018-02-01 18:03:40 -05:00
Taha Afzal c968b46d83 SPARK-331 spreader start state test 2018-02-01 17:08:01 -05:00
John Colvin 4e329d0baf SPARK-426 Time and Sales window: sparkmenu for ladder and ticket don't seem to work 2018-02-01 16:41:02 -05:00
John Colvin 0aaaeb6687 SPARK-420 Fills Window cleanup 2018-02-01 16:15:23 -05:00
John Colvin c221b427b2 introduce OrdersFactory, nearly retire OrderDataHelper 2018-02-01 15:30:37 -05:00
Jake Norbut 4761b24517 SPARK-406 - duplicates criteria additions no longer possible 2018-02-01 13:48:32 -06:00
Eric Harding 35c6844501 Port fixes from edge to mdp3 to spark. 2018-02-01 13:58:03 -05:00
Eric Harding 7ba2062e21 run_market_datapublishers should have an option to not return. 2018-02-01 13:57:29 -05:00
Eric Harding 4ac7753a4e removed unused windows scripts 2018-02-01 13:31:48 -05:00
Eric Harding 7f6e26edea advance docker/linux repo pointer 2018-02-01 13:31:48 -05:00
Taha Afzal fe67971a9a SPARK-331 hedger tests completed" 2018-02-01 10:36:52 -05:00
Taha Afzal c03cf06738 SPARK-331 hedger tests partially enabled 19/22 2018-02-01 10:19:04 -05:00
Pedro Pinto aec57a13c3 Minor built setup tweaks. 2018-02-01 14:03:15 +00:00
John Colvin 6f311a6278 fills proto 2018-01-31 18:29:03 -05:00
John Colvin a2be509df6 orderbook selection highlight stretches across grid 2018-01-31 18:29:03 -05:00
Taha Afzal 6a949a4d5a SPARK-331 hedger tests partially enabled 17/22 2018-01-31 18:18:53 -05:00
Taha Afzal 0ac00e54d5 SPARK-331 quoter cycle test enabled 14/22 2018-01-31 18:18:53 -05:00
John Colvin df4ff8caf9 left align column header content by default 2018-01-31 18:18:01 -05:00
John Colvin 7352468f7d fix unintended implicit cast of null to Security to SecurityImmutable in fills 2018-01-31 17:17:43 -05:00
John Colvin d7f847ec91 code cleanup 2018-01-31 15:30:11 -05:00
John Colvin 37f915892e SPARK-405 Fix up column names in Mview 2018-01-31 13:54:17 -05:00
John Colvin 709e0ad06f SPARK-404 Remove little frame around Working column in mview 2018-01-31 13:52:44 -05:00
Taha Afzal 855ae306f6 SPARK-331 more tests enabled 13/22 2018-01-31 12:40:14 -05:00
John Colvin ae2f5e6742 clean up OrdersModel on_fill_tuples 2018-01-31 12:22:59 -05:00
John Colvin 8dde742f29 SPARK-409, SPARK-411 2018-01-31 12:22:58 -05:00
Taha Afzal 0b974f56b6 SPARK-331 more tests enabled 11/22 2018-01-30 18:29:11 -05:00
Taha Afzal 9998069280 SPARK-331 more tests enabled 9/22 2018-01-30 18:06:03 -05:00
Taha Afzal ca099313ab SPARK-331 more tests enabled 2018-01-30 18:06:03 -05:00
John Colvin 6c7dc36c4c SPARK-412 In ladder Cancell All/Cancel Buy/Cancel Sell should only send cancels for orders that are in non terminal states (i.e inactive, working, disconnected, pending working) 2018-01-30 17:46:20 -05:00
John Colvin 1db63f12da google proto TimeStamp.FromDateTime expects UTC time 2018-01-30 17:42:18 -05:00
John Colvin d53ac06f6b SPARK-411 Fills Window doesn't seem to be connected to Order Interface? 2018-01-30 17:26:08 -05:00
John Colvin 949de3752d unify prop name in SecurityGrid 2018-01-30 17:26:07 -05:00
John Colvin 1090396286 SecurityGrid was not disposing subscription 2018-01-30 17:26:07 -05:00
John Colvin 563d973023 hide IRXCollection implementations 2018-01-30 17:26:07 -05:00
Taha Afzal b13c55ed28 SPARK-331 just bulldozing through the tests will not work 2018-01-30 14:57:54 -05:00
Pedro Pinto 36f93f1df3 Improved exchange simulator. Now with fewer crashes. 2018-01-29 17:29:21 -05:00
John Colvin 407f329965 move MDSource to daemons 2018-01-29 16:18:19 -05:00
Jake Norbut 903303e542 Order Book Window - Cancel widgets now are only enabled based on order state 2018-01-29 14:36:00 -06:00
Pedro Pinto 855499c5b4 Fixed clang build. 2018-01-29 11:48:06 -05:00
Pedro Pinto 7db43fa2cb Added dynamic lttng back. 2018-01-29 11:48:06 -05:00
Pedro Pinto 78bcca871c Removed linking to lttng until we can figure shared/static linking 2018-01-29 11:31:58 -05:00
Pedro Pinto 5ea0f5010f Added lttng trace support. 2018-01-29 11:08:22 -05:00
Pedro Pinto 144be5e816 Fixed fix buffer allocation. 2018-01-29 08:51:23 -05:00
Pedro Pinto cf8a79201d Fixed MergeByKey so that it can take references. 2018-01-29 08:51:23 -05:00
Pedro Pinto 0882966138 Made sure that native orders report their last msgs. 2018-01-29 08:51:23 -05:00
Pedro Pinto 1aa4d4d69d Work towards dspark. 2018-01-29 08:51:23 -05:00
Pedro Pinto 74528bfa8f Fixed clang build. 2018-01-29 08:51:23 -05:00
Pedro Pinto ca5faa206f Changed jetfix conf default to account for cert 2018-01-29 08:51:23 -05:00
Pedro Pinto 1f56d89c33 Updated container 2018-01-29 08:51:23 -05:00
Pedro Pinto 2f3ed3f621 Added a few notes. 2018-01-29 08:51:23 -05:00
Taha Afzal 84e145f0be SPARK-331 getting the tests back (6/22) 2018-01-28 17:24:04 -05:00
John Colvin 87d562a753 MarketView - fix show OrderBook side filter 2018-01-27 17:44:41 -05:00
John Colvin 0ce9d86e4b organize SparkTags 2018-01-27 17:37:24 -05:00
John Colvin c258f57385 remove unused code 2018-01-27 17:36:45 -05:00
John Colvin 4b230f489c SPARK-402 Investigate tick down for non decimal products 2018-01-26 17:22:50 -05:00
John Colvin 5089bdc702 TimeAndSales - remove row header color 2018-01-26 16:48:59 -05:00
John Colvin 9ca2a479e6 Fills - remove row header color 2018-01-26 16:43:15 -05:00
John Colvin e71b6bbb73 MarketView - working orders hyperlinks to OrderBook 2018-01-26 16:36:18 -05:00
John Colvin 7a712fbaf2 MarketView - reduce slowness with large security sets 2018-01-26 15:55:29 -05:00
Taha Afzal 332b7380be SPARK-331 getting the tests back (3/22) 2018-01-26 13:35:28 -05:00
Taha Afzal 2ec26b390f SPARK-331 test_common integrated with orderman2 2018-01-26 12:47:55 -05:00
Taha Afzal 41c925f593 SPARK-331 Hedger States done have strings in them anymore 2018-01-26 09:57:59 -05:00
Taha Afzal a14b8642cc SPARK-331 ChildOrders arre handled through SpreadChildOrderState 2018-01-26 00:15:27 -05:00
Taha Afzal ac427f5102 SPARK-331 Spreader external classes wrapped in interfaces 2018-01-25 23:47:27 -05:00
Kevin Darby afe100455c buildspark, clientbuild, jenkinsbuild. We need more scripts! 2018-01-25 13:25:21 -05:00
John Colvin 9307eceb0e MarketView observes securities from criteria (no longer depends on hard set) 2018-01-25 12:05:10 -05:00
Michael Harding 969253dbc9 SparkMenu/Toolbar refinements 2018-01-25 12:00:46 -05:00
Michael Harding af6356f2f7 Removing another border 2018-01-25 11:20:16 -05:00
Taha Afzal f51bbf0c3d SPARK-331 Adding on_transition to Quoter 2018-01-25 08:02:06 -05:00
John Colvin 4af07c358b fix BufferLatest 2018-01-24 19:06:29 -05:00
Kevin Darby 205de4cc54 ready for cert, but still hitting sim for now 2018-01-24 17:58:36 -05:00
Taha Afzal ff217c2007 SPARK-331 Remove old init() from Quoter 2018-01-24 17:48:53 -05:00
Kevin Darby 51ddea62d1 target .net 471 and change build scripts to generate portable PDBs to facilitate debugging in vscode 2018-01-24 17:37:37 -05:00
John Colvin 798fc8f7ff remove unused change securities callback in FillsWindow 2018-01-24 17:29:30 -05:00
John Colvin 6b6721d93f fix null ref in FillsWindow.Dispose() 2018-01-24 17:25:58 -05:00
John Colvin 4d8a08fa66 SPARK-385 in time and sales drop synthetic spreads command 2018-01-24 17:25:01 -05:00
John Colvin 4c5b0e5a66 SPARK-384 in time and sales provide default action 2018-01-24 17:19:36 -05:00
John Colvin 117dae64c9 TimeAndSales protomember indices 2018-01-24 17:19:36 -05:00
John Colvin 1695150841 TimeAndSales - use CustomOrderDefinition.OrderType for order type col 2018-01-24 17:19:35 -05:00
John Colvin 18c17f938d SecurityGrids - fix CurrentItem bindings and related command-parameter-observables 2018-01-24 17:19:35 -05:00
Jake Norbut 8638c807e4 Ladder - change on day is now sign-sensitive 2018-01-24 15:08:56 -06:00
Taha Afzal d3916bf41a SPARK-331 Added SpreaderOrder new time event 2018-01-24 14:58:58 -05:00
Jake Norbut b87b4eaa07 SPARK-400: OrderBook price now shows ticks 2018-01-24 13:34:57 -06:00
John Colvin 94fab05f83 Fills - row-selection highlight spans whole grid 2018-01-24 14:18:16 -05:00
John Colvin 1d51e2170b TimeAndSales - row-selection highlight spans whole grid 2018-01-24 14:17:32 -05:00
John Colvin 16429d4e61 fix type-o in SecurityRow object.Equals override 2018-01-24 14:14:05 -05:00
John Colvin 51cf21b424 SPARK-396 Modifying Order ticket size crashes it 2018-01-24 14:05:43 -05:00
John Colvin e11d85021f fix RXObservable use of Observable.Buffer, add BufferLatest extension 2018-01-24 13:58:16 -05:00
John Colvin 9a5375a4f2 SecurityGrids use id based security IEqualityComparer 2018-01-24 13:58:16 -05:00
Jake Norbut 2cb372211d SPARK-397: Security Picker remove box now supports multiselect 2018-01-24 11:20:18 -06:00
John Colvin b71789574d fix SparkCommandParamObserver raiseCanExecuteChanged, appropriately disable spark menu items 2018-01-24 01:12:08 -05:00
John Colvin 75e9c2349d fix null ref exception in ViewModelBase.Property value setter 2018-01-24 01:10:01 -05:00
John Colvin 5993d21bfc mview - security header cell style based on default style 2018-01-24 01:07:32 -05:00
John Colvin db93d35c95 SPARK-379 in mview do not use header color inside grid row 2018-01-24 00:38:15 -05:00
John Colvin 4b9b37f6df SPARK-388 in fills get rid of all commands 2018-01-24 00:34:30 -05:00
John Colvin 3440af355f SparkWindow hides menu if no Commands present 2018-01-24 00:34:00 -05:00
John Colvin 225fb2b595 SPARK-387 in fills use single row selection 2018-01-23 21:50:31 -05:00
John Colvin ca5ec59db3 SPARK-383 in time and sales use row selection 2018-01-23 21:44:56 -05:00
John Colvin 0efcec43a0 MarketView - change CurrentCell binding to CurrentItem(row) binding 2018-01-23 21:40:07 -05:00
John Colvin d884114fc2 SPARK-394 Change Ladder right click functionality 2018-01-23 21:29:13 -05:00
John Colvin 5654e79535 get rid of old unused drag/drop diagnostics logger class 2018-01-23 21:29:13 -05:00
Taha Afzal 01d10b516b SPARK-331 Added SpreaderChildOrder re-init 2018-01-23 17:25:33 -05:00
John Colvin a4e62f6af5 SPARK-378 in mview use row selection 2018-01-23 16:31:07 -05:00
John Colvin 2902eb5f6c SecurityGrid hides IHandleRowSelection imp 2018-01-23 16:21:47 -05:00
John Colvin c504229532 MarketView uses [new] OrdersModel 2018-01-23 15:49:22 -05:00
John Colvin fd395cbd27 AttachedCommands.DoubleClick uses FrameworkElementLifeDependency 2018-01-23 15:49:22 -05:00
Taha Afzal 9524f16798 SPARK-331 Hedger is using orderman2 2018-01-23 15:03:15 -05:00
Jake Norbut 0ec4061868 SPARK-398: Security Picker double click behavior now calls OK and Remove RaiseCanExecuteChanged 2018-01-23 13:45:50 -06:00
Jake Norbut b44d3c869e SPARK-350: Modify Order behavior changes 2018-01-23 13:36:13 -06:00
Taha Afzal 8c24936702 SPARK-331 Quoter is using orderman2 2018-01-23 12:36:01 -05:00
Taha Afzal 1ecc33fb6c SPARK-331 IQuoterStateWorker interface changedto accomodate orderman2 2018-01-23 12:36:00 -05:00
Jake Norbut 2bcaab2fd6 Security Picker - Set selected index to 0 on load so that all listboxes are initially populated 2018-01-23 10:36:40 -06:00
Taha Afzal 24f7519beb SPARK-331 ISpreaderStateWorker interface now deals with orderman2 completely 2018-01-22 23:30:26 -05:00
Taha Afzal 9cf100650c SPARK-331 Removed WaitingForFirstConn state 2018-01-22 19:05:55 -05:00
Taha Afzal ff82df6e99 SPARK-331 ISpreaderStateWorker getting rid of on_external_error and on_disconnect 2018-01-22 18:38:48 -05:00
Taha Afzal 70aa373a8f SPARK-331 (Hedger is using new book) 2018-01-20 21:07:42 -05:00
Taha Afzal 5c3799e2aa SPARK-331 (deleting old Book headers from Quoter) 2018-01-20 20:48:03 -05:00
Taha Afzal 752556d716 SPARK-331 (Using orderman2::Book) 2018-01-20 20:39:38 -05:00
Taha Afzal cfaad8ee01 SPARK-331 Intergaring with orderMan2 2018-01-19 23:01:11 -05:00
Taha Afzal 985e3d57fd SPARK-331 Intergaring with orderMan2 2018-01-19 20:29:25 -05:00
Michael Harding c2180c1e71 Secret Expander button 2018-01-19 19:02:32 -05:00
Taha Afzal 8123512269 SPARK-331 Intergaring with orderMan2 2018-01-19 16:38:39 -05:00
John Colvin 235e8b397f SPARK-266 create synthetic add/remove leg functionality; add
SyntheticSpreadsMangement window; CreateSynthetic add/remove leg functionality
2018-01-19 15:48:10 -05:00
Michael Harding a0bfedce82 Spark 365 2018-01-19 15:40:15 -05:00
Jake Norbut a1c1e7e8d7 Security Picker - broke single selection mode 2018-01-19 14:39:15 -06:00
Michael Harding 1b8cbc1127 Hide unused launcher menu items 2018-01-19 14:16:43 -05:00
Michael Harding 69a6d97852 Spark 358, 359 2018-01-19 14:16:43 -05:00
Taha Afzal cfa868921a SPARK-331 Intergaring with orderMan2 2018-01-19 14:10:02 -05:00
Taha Afzal 2282a814d8 SPARK-331 Intergaring with orderMan2 2018-01-19 13:34:09 -05:00
Jake Norbut 4834647e56 SPARK-367 - double click now takes focused item regardless of selection 2018-01-19 11:52:32 -06:00
Michael Harding 23067caf89 About Spark window now Says Spark 2018-01-19 12:45:55 -05:00
Michael Harding 9dcf4cb530 Security picker title is now an action 2018-01-19 12:34:35 -05:00
Michael Harding df779af56a Spark Menu/toolbar Item names 2018-01-19 12:34:10 -05:00
Michael Harding 343727e862 Borders 2018-01-19 12:33:02 -05:00
Jake Norbut 6c8135ec93 refactor SecurityImmutable sorting by exp 2018-01-19 09:13:31 -06:00
Taha Afzal 2681dd5b35 SPARK-331 Intergaring with orderMan2 2018-01-18 23:27:02 -05:00
Jake Norbut 525e11fb32 SPARK-342: picker sort by exp 2018-01-18 18:03:38 -06:00
Jake Norbut 0319667b2d some of SPARK-367; Security Picker listboxes must have a selection to populate the next one over 2018-01-18 17:25:41 -06:00
Jake Norbut 55f67cd54b SPARK-373: order state enums to Title Case 2018-01-18 13:56:51 -06:00
Jake Norbut e0c31e8749 OrderBook - tweaking date and time format string 2018-01-18 12:44:04 -06:00
Jake Norbut f1e479503f SparkCommands - Cancel Orders text changed to Cancel All Orders 2018-01-18 12:42:53 -06:00
John Colvin 336f171d08 SPARK-391 in fills use real OrdersModel 2018-01-17 18:11:16 -05:00
John Colvin ab02ef44e5 SPARK-386 in fills remove security picker preamble 2018-01-17 15:42:32 -05:00
John Colvin ec563ab5ab SPARK-382 in time and sales rename update securities to change securities 2018-01-17 14:22:26 -05:00
John Colvin 61a55c4d0a SPARK-377 in mview rename update securities to change securities 2018-01-17 14:21:54 -05:00
John Colvin 0c49c1fc93 SPARK-380 in mview provide hyper links in bid/ask size 2018-01-17 14:00:44 -05:00
Eric Harding 68b407387c work in progress 2018-01-17 08:20:26 -05:00
John Colvin 7cd7358b60 OrderTicket - use Limit as fallback selected_order_type 2018-01-16 20:25:33 -05:00
John Colvin 96223b5d61 OrderTicket - fix selected_order_type binding 2018-01-16 20:24:05 -05:00
John Colvin 12bdbd3e04 SPARK-389 Ticket crashes (from launcher) 2018-01-16 20:11:10 -05:00
John Colvin 70a8993234 add Create Synthetic SparkCommand to MarketView 2018-01-16 19:46:26 -05:00
John Colvin 748cccedca CellSelectionMapper removes row from selection map if no columns are selected 2018-01-16 19:46:25 -05:00
John Colvin ba49bb854e SparkWindows use selected_securities_observable() in SparkCommands 2018-01-16 19:46:25 -05:00
John Colvin 815d073a72 subscribe and handle SyntheticCreate/Strategy tags 2018-01-16 19:46:25 -05:00
John Colvin 1ff6dae378 move Synthetic files into Modules/Spreader dir 2018-01-16 19:46:25 -05:00
John Colvin b390000dd5 remove old, unused code 2018-01-16 19:46:25 -05:00
John Colvin c8a6aa68ae Factor out common ErrorHandler behavior to generic extensions 2018-01-16 19:46:24 -05:00
Jake Norbut 8af2a7fa1c SPARK-371 2018-01-16 17:00:57 -06:00
Jake Norbut bb8298e306 SPARK-374 2018-01-16 12:35:52 -06:00
Jake Norbut f5d6a968e3 SPARK-370 2018-01-16 12:35:02 -06:00
Jake Norbut 582fbec3d4 SPARK-369 and SPARK-372 2018-01-16 12:31:48 -06:00
Taha Afzal 6cfa22c96b SPARK-331, Adding OrderBuilder creation to SpreaderUtils 2018-01-16 12:59:33 -05:00
Jake Norbut 108b5056b6 SPARK-346 2018-01-16 11:39:22 -06:00
Jake Norbut 8a39f08634 moving formatted name cache so non-glbx spreads can make use of it as well 2018-01-16 11:19:38 -06:00
Jake Norbut 4e6e97abe1 SPARK-341 2018-01-16 10:32:35 -06:00
Eric Harding 6d256ffa7f Fix copy constructor and c# MDConsumerHandle blit code 2018-01-16 10:22:06 -05:00
Jake Norbut dc42247c57 SPARK-342 2018-01-16 09:17:26 -06:00
Eric Harding 97ef233dfe Implement misc function 2018-01-16 09:37:36 -05:00
Eric Harding 5f7d4df386 merge from master 2018-01-16 08:24:14 -05:00
John Colvin 29597855c0 SPARK-337 OrderVM.try_change_price should not ignore result of calling order_gateway to change the price. 2018-01-15 17:27:43 -05:00
John Colvin 643677b3b0 Ladder uses OrderRecordImmutable order template 2018-01-15 17:27:34 -05:00
John Colvin 7540617425 buildsparkd.cmd accepts d/r arguments (debug/release) 2018-01-15 14:01:39 -05:00
Taha Afzal 5323394cb4 SPARK-331, Adding sec res to SpeaderUtils 2018-01-14 16:01:57 -05:00
Taha Afzal a1676c74af SPARK-331, Integrating SpreaderStartStateWorker with new Order 2018-01-14 16:01:57 -05:00
John Colvin 4dafd0da9c SPARK-355 Ladder size should default to zero 2018-01-12 18:26:51 -05:00
Jake Norbut 59702d4562 Contract Picker - ListBox is sorted by ToString (not good) 2018-01-12 17:21:36 -06:00
John Colvin 508161f12b OrderTicketVM correctly sets the OrderDef's side before sending 2018-01-12 18:05:41 -05:00
John Colvin e22090c76c ShowOrderTicketHandler uses valid OrderDefinition defaults 2018-01-12 18:00:18 -05:00
John Colvin 8495c3ecf1 SPARK-348 Nonworking orders should not be displayed in ladder 2018-01-12 17:49:18 -05:00
Eric Harding b2033cf52e spark-338 more complex than it looked 2018-01-12 17:36:29 -05:00
Jake Norbut 1dc084ac93 OrderBook - double click to modify, context menu, some dead code removal 2018-01-12 12:50:42 -06:00
Pedro Pinto 7656810934 Fixed clang build. 2018-01-12 10:15:18 -05:00
Pedro Pinto 5d930d40bf Fixed NaN price in order entry. 2018-01-12 10:15:00 -05:00
Pedro Pinto 750b166d82 Made logging lazy with respect to msg arg evaluation. 2018-01-12 09:58:45 -05:00
Eric Harding 2935368f66 fold this in 2018-01-12 08:50:23 -05:00
Eric Harding 162cd66fee This might work 2018-01-11 22:00:18 -05:00
John Colvin 5ed39dee62 hook up OrderTicket/Modify to new OrdersModel 2018-01-11 17:33:07 -05:00
Jake Norbut 2b74fe79f6 Complete Order template so we can send orders to sim 2018-01-11 15:12:21 -06:00
Eric Harding 7bb3758bae Merged MDTempBranch into master 2018-01-11 15:15:15 -05:00
Michael Harding 1549c4d4f4 Replace menu icon with expander arrow in spark menus (tool bars) 2018-01-11 15:09:56 -05:00
Eric Harding af5ffad7aa Merge branch 'master' of bitbucket.org:bluetradesys/spark into MDTempBranch 2018-01-11 14:56:00 -05:00
John Colvin b384afb8e4 revise new order model Ladder changes (per eric's comments) 2018-01-11 14:30:37 -05:00
John Colvin c01b630222 Merge branch 'new-order-model' 2018-01-11 14:05:24 -05:00
Jake Norbut f766edbbb7 OrderBook - populating cancel commands 2018-01-11 12:19:47 -06:00
John Colvin 19230dac85 Merge remote-tracking branch 'origin/master' into new-order-model 2018-01-11 11:45:05 -05:00
Pedro Pinto 074f0cbeea Fixed market orders 2018-01-11 00:01:16 +00:00
John Colvin c3f7fdaa6f removing unused _test_data in OrdersModel 2018-01-10 17:55:38 -05:00
Eric Harding 7cfc556ea2 Fix typo in SQL 2018-01-10 17:34:52 -05:00
Jake Norbut 1b48adfc99 OrderBook Grid - saves and restores filter and sort criteria 2018-01-10 16:08:36 -06:00
Eric Harding 013f8ed184 run SyntheticSecurityService in main 2018-01-10 16:58:11 -05:00
Eric Harding 6ec7443677 spark-335 Hide details of syntheticsecurityservice in preparation for using in mdconsumer. 2018-01-10 16:57:44 -05:00
John Colvin 415dc4f580 SPARK-330 Ladder - hook up [new] OrdersModel 2018-01-10 16:53:30 -05:00
John Colvin 6e9857379c deleting SampleOrderService 2018-01-10 16:12:17 -05:00
Jake Norbut 26cfafd6b0 more of SPARK-328 - adding filtering to grid 2018-01-10 13:22:11 -06:00
John Colvin 70181f1158 OrdersModel.on_orders uses service (not test data)' 2018-01-10 14:03:04 -05:00
Pedro Pinto 5d97bde3bf Improved test harness for order manager. 2018-01-10 11:39:09 -05:00
Pedro Pinto 0c48b7f0b2 Fixed a few bugs in iceberg order. 2018-01-10 11:39:09 -05:00
Eric Harding 9d62b4592e spark 334 Load/save security metadata 2018-01-10 11:19:39 -05:00
Jake Norbut ae5820f187 fixing RegexFinder filter 2018-01-10 09:44:24 -06:00
Michael Harding 1b7cb04b5b Icons and Blue 2018-01-10 09:37:06 -05:00
Eric Harding dba3c541be SyntheticSecurityService spark-322 2018-01-09 18:17:47 -05:00
Pedro Pinto 3afe48a446 Added a few more notes for spark. 2018-01-09 16:18:39 -05:00
Pedro Pinto 3b14feae59 Finished first cut of iceberg order. 2018-01-09 16:18:39 -05:00
Pedro Pinto 1d8891e23b Made ChildOrder a bit easier to use. 2018-01-09 16:18:39 -05:00
Eric Harding d0d5706a03 Add market_segment to shared memory dumper 2018-01-09 10:13:06 -05:00
John Colvin a2b215091a remove RegexOptions.Compiled from camel_to_title_case fn 2018-01-08 20:15:25 -05:00
Pedro Pinto ea64fad8f1 Initial cut of iceberg order. 2018-01-08 12:23:24 -05:00
Pedro Pinto e6f7cc9842 Added a bit more logging. 2018-01-08 11:58:14 -05:00
Jake Norbut 0d5bf06587 More of Spark-328 2018-01-08 09:22:54 -06:00
Eric Harding 4a84764dde Simplify SecurityIDRecorder - have it record securities to DB when key is assigned. 2018-01-05 21:36:13 -05:00
Taha Afzal e7ecf32423 SPARK-331, SpreaderOrder state machine interface has the new Order calls now 2018-01-05 17:20:22 -05:00
Taha Afzal 5b4996295b SPARK-331, SpreaderOrder derives from the the new Order base class 2018-01-05 16:30:08 -05:00
Eric Harding fcc29ec2d1 Load security db in mdp3 startup 2018-01-05 12:35:17 -05:00
Pedro Pinto ff613f8d5c Fixed a few bugs in native order management. 2018-01-05 11:52:04 -05:00
Pedro Pinto 7e5211ad59 Update docker container. 2018-01-05 11:02:38 -05:00
Pedro Pinto 638ff85b3a Adding support for more native order types.
Market, Stop, Stop Limit
2018-01-05 11:02:31 -05:00
Jake Norbut 0e7f911b22 Order Book - some of SPARK-238; in case machine starts on fire 2018-01-04 15:15:07 -06:00
Taha Afzal e397816a84 SPARK-331, removing derivation from SpreaderBase 2018-01-04 15:17:45 -05:00
Taha Afzal 1926802a7b Merge branch 'master' of bitbucket.org:bluetradesys/spark 2018-01-04 14:28:22 -05:00
Taha Afzal a7f93091e8 SPARK-331, removing old SpreaderOrderMan 2018-01-04 14:28:11 -05:00
Eric Harding d97b4db80a Fix SecurityDB on windows so I can use it as a no-op for now 2018-01-03 17:23:28 -05:00
Eric Harding 4a6e31deb6 spark-320 implement securitydb 2018-01-03 17:14:57 -05:00
Taha Afzal 90f5a5d078 docker/linux 2018-01-03 17:07:24 -05:00
Pedro Pinto 279fbc9f13 Fixed clang build 2018-01-03 21:58:47 +00:00
Pedro Pinto 40627ffee7 Minor changes. 2018-01-03 16:54:50 -05:00
Taha Afzal d1861cb404 SPARK-327 (restrcutured SpreaderBookkeepingData to be more efficent) 2018-01-03 15:00:34 -05:00
Eric Harding 8fe166633d Add .vscode to excluded files for replication to linux 2018-01-03 12:50:02 -05:00
Eric Harding 7316757164 Add -t to buildsparkd to get colors to show across ssh. 2018-01-03 12:49:42 -05:00
Pedro Pinto 606e62ab69 Order execution/cancel/update works.
Need more testing, but looking good.
2018-01-03 11:22:30 -05:00
Pedro Pinto 1a79dcbfe0 Minor update to container. 2018-01-03 11:22:19 -05:00
Pedro Pinto 207b7d7c52 Minor build tweaks. 2018-01-03 08:39:20 -05:00
Pedro Pinto 7bf24f01c4 Fixed a few bugs in the order manager. Almost there. 2018-01-03 08:39:20 -05:00
Eric Harding d7761125ff Add WindowsQuick c_cpp profile for vscode. Mostly disables tag parser which was consuming 8+ hours of cpu time on launch. 2017-12-29 19:27:26 -05:00
Pedro Pinto 0737e2af58 Started to remove old order service. 2017-12-29 17:27:48 -05:00
Pedro Pinto 8b12d7c475 Updated orderman client cli to use new service. 2017-12-29 17:27:48 -05:00
John Colvin b01d7bc1c1 darken DataGrid SelectedRowBackground for clearer distinction in RowHeaderCell style 2017-12-29 16:23:38 -05:00
John Colvin 8c851283e2 DataGrid RowHeaderCell background indicates IsSelected 2017-12-29 16:23:38 -05:00
Pedro Pinto 994580a40e Fixed build. 2017-12-29 15:58:53 -05:00
Pedro Pinto 672aa14990 Order service boots, connects to gateway. More tests in order. 2017-12-29 15:58:53 -05:00
Pedro Pinto 07a3f99f78 Added a log pretty-printer and precise time stamps to log msgs.
We now get a total order for log messages that makes sense and also
the possiblity of measuring the time between any log messages
precisely. This can be used to provide latency logs for the spreader
or any other critical part of the system.
2017-12-29 15:58:53 -05:00
Pedro Pinto e981bfb7ba Changed polling mechanism in mercury to avoid using concurrent queue
This avoids the overhead of pushing/poping from the queue for polling
actors.
2017-12-29 15:58:53 -05:00
Pedro Pinto a066e44da7 Prettier logging. 2017-12-29 15:58:53 -05:00
Pedro Pinto 0e6f37d6ee Improved logging with respect to threading information. 2017-12-29 15:58:53 -05:00
Pedro Pinto 67342349d5 Improved log readability. 2017-12-29 15:58:53 -05:00
Pedro Pinto 2f47dd8bcf Cleaned up a bit. 2017-12-29 15:58:53 -05:00
John Colvin 0a21fcdebd fix MarketView and TimeAndSales price columns' sort 2017-12-29 15:55:31 -05:00
John Colvin c879e5b52a undo last push (live filtering already implemented, doh!) 2017-12-29 15:25:54 -05:00
John Colvin 79681c7bdf grid column filters live filtering (i.e respond to row value changes) 2017-12-29 15:24:21 -05:00
John Colvin 8f6b94ddd6 remove StatePublisher and StateSubject, add SingleValuePump 2017-12-29 14:26:56 -05:00
Taha Afzal 1e69d8967e Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-29 14:01:04 -05:00
Taha Afzal e2d77e684c Post Hedging hooked to SingleFillHegder 2017-12-29 14:00:57 -05:00
John Colvin b4f1615ee9 simplify SparkCommandParamObserver 2017-12-29 13:09:44 -05:00
John Colvin 2d049e0dce forgot to bind columns' FilterActive in Fills and TimeAndSales 2017-12-29 13:09:44 -05:00
Taha Afzal dc32824373 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-28 19:59:03 -05:00
Taha Afzal bac1f12665 Post hedge params added 2017-12-28 19:58:56 -05:00
John Colvin cd914d6cbf MarketView minor code style 2017-12-28 18:50:33 -05:00
John Colvin caf32dda5c SPARK-211 / SPARK-262, SPARK-300 / SPARK-304 - fills... 2017-12-28 18:50:33 -05:00
John Colvin 180ece821a MarketView default sorting criteria 2017-12-28 18:50:33 -05:00
John Colvin 663555ffca SPARK-300 / SPARK-301, SPARK-324 2017-12-28 18:50:33 -05:00
John Colvin 2a18362735 fix grid time filter 2017-12-28 18:50:32 -05:00
John Colvin 1c97648562 common grid filters ignore null states in load_state 2017-12-28 18:50:32 -05:00
John Colvin a73d1e3fb9 add Current() method to StatePublisher and StateSubject 2017-12-28 18:50:32 -05:00
John Colvin 04405be4a8 GenericCollectionExtensions new c# styling 2017-12-28 18:50:32 -05:00
John Colvin 4ecb2eacb4 add ToLArray() => ToList().ToArray() global extension 2017-12-28 18:50:32 -05:00
Taha Afzal 39434506dc comments 2017-12-28 15:06:26 -05:00
Taha Afzal 0223bcd817 Spreader state workers access bookkeeping_data is accessed via a function 2017-12-28 11:41:02 -05:00
Taha Afzal 868c4e0e6d cleanup 2017-12-27 18:38:49 -05:00
Taha Afzal 4093654258 added a few asserts 2017-12-27 16:50:47 -05:00
Taha Afzal 6dca404da2 SPARK-311 (IQuoterStateWorker name change) 2017-12-27 13:34:11 -05:00
Taha Afzal 97eefceec0 SPARK-311 (SpreaderOrderUpdateMessage name change) 2017-12-27 12:44:30 -05:00
Taha Afzal 7e721bed08 Fixing build 2017-12-27 11:54:20 -05:00
Taha Afzal 4f1ac553de SPARK-311 (SpreaderOrderUpdateMessage has an init) 2017-12-27 11:41:19 -05:00
Taha Afzal d40a9a9a68 SPARK-311 2017-12-27 11:08:40 -05:00
Taha Afzal b37d1822cf Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-26 19:01:26 -05:00
Taha Afzal cdae8e1fb3 N legged changes broke the hedge price test 2017-12-26 19:01:21 -05:00
Jake Norbut 48556e958e OrderBook - checkin in before family visit 2017-12-26 15:43:01 -06:00
Taha Afzal e22f8d6c28 n legged if 2017-12-26 16:36:57 -05:00
Taha Afzal 850c38601a merging 2017-12-26 15:17:38 -05:00
Pedro Pinto b76bec20ad Added .clang-format, applied it to a couple of files. 2017-12-24 13:00:05 -05:00
Pedro Pinto a68ff5342c Pretified logging subsystems. 2017-12-22 17:44:09 -05:00
Pedro Pinto 8ca60dd822 Backend is code complete except for spreader integration. 2017-12-22 15:56:05 -05:00
Eric Harding 919ab75fe5 Adjust margins on constrols in BTSMessageBox so it looks less like they were randomly generated. (thanks Michael) 2017-12-22 12:37:00 -05:00
Eric Harding 4c4c3b4394 Make btsmessagebox show up when called. 2017-12-22 12:14:49 -05:00
Pedro Pinto 8c925b46e1 Service integration, first cut. 2017-12-22 12:11:22 -05:00
Eric Harding 4b2be30348 Add a diagnostic button to Orders window 2017-12-22 11:48:22 -05:00
Jake Norbut 53748ceb0f OrderBook - lost updates sample 2017-12-22 10:20:34 -06:00
Taha Afzal 78b6036708 merging 2017-12-21 17:59:58 -05:00
Taha Afzal 9ecd076b92 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-21 17:38:55 -05:00
Taha Afzal 4668fa126d SPARK-309 (n legged hedge) 2017-12-21 17:38:52 -05:00
Pedro Pinto dac73c4cdb Fixed gcc build 2017-12-21 22:15:20 +00:00
Pedro Pinto 747c4d2dda Fixed clang compilation. 2017-12-21 16:58:19 -05:00
Pedro Pinto 6fc59d37ff Merge 2017-12-21 16:37:29 -05:00
Pedro Pinto 3cff22eba1 Limit order is code complete. 2017-12-21 16:36:36 -05:00
Eric Harding 796bd30972 Clean up md2 namespace 2017-12-21 16:33:28 -05:00
Eric Harding bff5e1e3c6 Dont' crash service base when null supplied as qualifier 2017-12-21 15:43:25 -05:00
Eric Harding e085cf83e4 delete more unused methods 2017-12-21 15:02:34 -05:00
Eric Harding a89fa7fc33 Add killsparkd because sparkd doesn't seem to listen to SIGHUP from windows. Remove some unused docker commands 2017-12-21 15:02:34 -05:00
Jake Norbut c4c9101353 Order Book - Fake Order Service woes 2017-12-21 14:02:14 -06:00
Eric Harding 1016f6e320 Delete some unused methods 2017-12-21 14:34:49 -05:00
Taha Afzal c7018ce54c Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-21 13:44:27 -05:00
Taha Afzal 48c75f5345 SPARK-309 (changed names of variables) 2017-12-21 13:44:23 -05:00
Eric Harding 8b7d24aa40 Change terribly named folder "structure" and "structure.h" 2017-12-21 10:11:30 -05:00
Eric Harding 630a781c02 Get rid of warning about "taskName" being called "label" now in tasks.json 2017-12-21 10:11:30 -05:00
Taha Afzal c9991818ac Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-21 09:58:26 -05:00
Taha Afzal e9adf17b2c SPARK-309 2017-12-21 09:58:20 -05:00
John Colvin 6b51cf2bb4 SPARK-324 TimeAndSales - implement extended selection for SparkCommands 2017-12-20 22:19:46 -05:00
John Colvin df76553ead SPARK-308 MarketView - implement extended selection for SparkCommands 2017-12-20 22:17:21 -05:00
John Colvin 1c9c632533 factor out common GridVM behavior into Security[MD]Grid/Row base classes 2017-12-20 22:12:29 -05:00
John Colvin 4389984542 fix ListBoxEx 2017-12-20 20:21:09 -05:00
John Colvin 6acfdc68bb create SparkCommandParamObserver 2017-12-20 20:21:09 -05:00
John Colvin c509a2ab83 move Fills files to Modules/Trading/Fills/ 2017-12-20 20:21:09 -05:00
John Colvin 3b0c45e2d7 unify all numeric grid column filters into a generic class 2017-12-20 20:21:09 -05:00
Jake Norbut 482199f4b2 Order Book - taking my first step into a larger world 2017-12-20 16:06:06 -06:00
Jake Norbut 065481e6bf Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-20 16:04:33 -06:00
Jake Norbut a0fcf326d3 Order Book - taking my first step into a larger world 2017-12-20 16:04:26 -06:00
Eric Harding 8bb9b32811 Add /d to vscode.cmd 2017-12-20 14:56:38 -05:00
Eric Harding 42b318e83a Add [ImportingConstructor] to OrdersModel 2017-12-20 10:36:32 -05:00
Taha Afzal bf85b6c596 merging 2017-12-19 21:56:32 -05:00
Taha Afzal e457a4b3a6 SPARK-310 (order interaction behind switch) 2017-12-19 20:28:12 -05:00
Pedro Pinto b1b0e128ec More limit order work. 2017-12-19 18:44:54 -05:00
Pedro Pinto cc23cf0d4c initial native order support 2017-12-19 23:21:44 +00:00
Pedro Pinto c1aa9a2068 Updated service 2017-12-19 23:21:44 +00:00
Pedro Pinto ae03b515a0 Added async factory. 2017-12-19 23:21:44 +00:00
Pedro Pinto 0440c8fb6f Added fill recording. 2017-12-19 23:21:44 +00:00
Eric Harding c2984972a6 New OrdersModel for Orders UI to work against 2017-12-19 17:36:47 -05:00
Taha Afzal 355b29458b tests:moving order update to common 2017-12-19 16:20:20 -05:00
Eric Harding 652ef37147 Specify maximum icon width in SparkWindow base style. (Fixes Fills icon on Picker) 2017-12-19 12:46:06 -05:00
Pedro Pinto ce2208218b Cleaned up merge. 2017-12-19 11:43:59 -05:00
Pedro Pinto deb8f8e440 Orderman2 2017-12-19 11:30:00 -05:00
Pedro Pinto dba051e374 Orderman2 2017-12-19 11:30:00 -05:00
Pedro Pinto fea0ec2279 Orderman2 2017-12-19 11:30:00 -05:00
Pedro Pinto abef2b94f1 Orderman2 2017-12-19 11:30:00 -05:00
Pedro Pinto 20c4cb912d Orderman2 2017-12-19 11:26:02 -05:00
Pedro Pinto 1f9ccafa16 More orderman2 2017-12-19 11:26:02 -05:00
Pedro Pinto 645b80caf5 Added support for batching of events.
This allows natural synopsis policies like cache all or cache N to be
overlayed on top of the event without affecting the event members.
2017-12-19 11:26:02 -05:00
Pedro Pinto a2442baf6c Orderman2 2017-12-19 11:26:02 -05:00
Pedro Pinto f0458d9f7e Replicating externals is not so bad. 2017-12-19 11:26:02 -05:00
Pedro Pinto fd2a422468 Orderman2 2017-12-19 11:26:02 -05:00
Pedro Pinto 199a7a2da3 Made generated API C++ a bit more readeable. 2017-12-19 11:25:48 -05:00
Pedro Pinto 4afe973eb2 Added FIX gw. 2017-12-19 11:25:48 -05:00
Pedro Pinto 38b5ebecc4 Added FIX gw. 2017-12-19 11:25:48 -05:00
Pedro Pinto dbc7ba5598 Refactor. 2017-12-19 11:25:48 -05:00
Pedro Pinto ed2f42f91a refacor 2017-12-19 11:25:48 -05:00
Pedro Pinto b04ec71146 Refactor 2017-12-19 11:25:48 -05:00
Pedro Pinto bd5bb0716b Refactor 2017-12-19 11:25:48 -05:00
Pedro Pinto 533132b4c1 Merged 2017-12-19 11:25:48 -05:00
Pedro Pinto 753134cbc5 Upgraded docker container 2017-12-19 11:23:28 -05:00
Pedro Pinto 8ccd3ee96d Refactor. 2017-12-19 11:22:58 -05:00
Pedro Pinto 6b87c2ea78 Refactor. 2017-12-19 11:22:58 -05:00
Pedro Pinto 6316c28f57 Refactor. 2017-12-19 11:22:58 -05:00
Pedro Pinto 718c4620b0 Event broker is code complete. 2017-12-19 11:22:58 -05:00
Pedro Pinto 2010f59029 Refactor. 2017-12-19 11:22:26 -05:00
Pedro Pinto f4f9baa7b4 Revamping order management. 2017-12-19 11:22:26 -05:00
Eric Harding d15d8a3db7 comment out ShowP&L menu 2017-12-19 10:40:17 -05:00
Jake Norbut 20ec9094b4 Contract Picker - removing static/fake CBOE exchange; using distinct list of exchanges actually present in MD 2017-12-19 09:13:07 -06:00
Taha Afzal 5b6e76f9ae Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-18 22:21:50 -05:00
Taha Afzal 7334f10c7b SPART-310/311 2017-12-18 22:21:46 -05:00
Eric Harding 705e61f2cf Add bold left border on FloatingWindow (goes away when maximized) 2017-12-18 16:28:30 -05:00
Michael Harding 3c3c94b4c3 Unset FocusVisualStyle for SparkMenuButton 2017-12-18 16:18:43 -05:00
Taha Afzal 8086059272 SPART-310/311 2017-12-18 16:09:14 -05:00
Jake Norbut 4b8f3418f0 ContractPicker - Security type check should actually check security types 2017-12-18 13:27:53 -06:00
Jake Norbut c3abd88794 ContractPicker - fixing null ref when SecurityCriteria doesn't actually contain any SecurityKeys 2017-12-18 13:19:30 -06:00
Eric Harding 9f6c1e7435 add menu collapse button. WPF is hard without snoop 2017-12-18 12:50:37 -05:00
Eric Harding 079d6f125f SparkCommand needs a CanExecuteChanged event handler 2017-12-18 11:50:03 -05:00
Eric Harding 71413f6543 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-18 10:52:33 -05:00
Eric Harding 4d1f500559 Clean up markup in style 2017-12-18 10:52:10 -05:00
Pedro Pinto 1b670b8852 Made unit tests self-aware 2017-12-18 10:49:39 -05:00
Eric Harding 18abe69558 Fix context menu style on SparkWindow 2017-12-18 10:48:20 -05:00
Pedro Pinto f73085d9c0 Made unit tests self-aware 2017-12-18 15:36:51 +00:00
Eric Harding d3792fa2c8 Merge branch 'TempBranch' of bitbucket.org:bluetradesys/spark 2017-12-18 09:10:19 -05:00
Taha Afzal 3693453e21 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-18 07:18:46 -05:00
Taha Afzal 9659a0c9e4 SPARK-251 2017-12-18 07:18:42 -05:00
Eric Harding 9fa64e6e1f convert SparkWindowView to UserControl and use Xaml instead of code. Also add style to contextmenu 2017-12-16 20:27:27 -05:00
John Colvin 01bef02822 SPARK-307 / SPARK-300 Market View - implement SparkCommand menu 2017-12-15 19:50:55 -05:00
Taha Afzal 8df6ccbae5 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-15 19:16:12 -05:00
Taha Afzal 4584da8459 SPARK-251 2017-12-15 19:16:09 -05:00
Jake Norbut d2b43c794b SecurityPicker can now update a previous SecurityCriteria selection 2017-12-15 16:28:22 -06:00
Jake Norbut 94785a3a80 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-15 16:19:31 -06:00
Eric Harding 42854afd2b Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-15 17:07:14 -05:00
Eric Harding c6b5d2d11d Add remaining commands to TimeAndSales. 2017-12-15 17:07:11 -05:00
Jake Norbut 326411f942 Contract Picker - minor refactoring; actually reflect passed in criteria clauses 2017-12-15 15:56:06 -06:00
Michael Harding e513f73881 Launcher menu item disabled style 2017-12-15 14:35:45 -05:00
John Colvin 039314e7c3 ObservableDistictCollection unit test 2017-12-15 13:32:24 -05:00
Taha Afzal e763c65694 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-15 12:49:04 -05:00
Taha Afzal 0e4490d991 SPARK-287 done 2017-12-15 12:49:00 -05:00
Eric Harding 7151a196fc remove some unused icons 2017-12-15 12:06:45 -05:00
John Colvin 849ddba4de SPARK-211 / SPARK-257: build filterable grid 2017-12-14 21:20:56 -05:00
Eric Harding 4fd3dd38ea Add TimeAndSales update command as a sample for jake 2017-12-14 17:31:01 -05:00
Eric Harding 50bd7aff0e Add the idea of a PartialCommand to SparkCommands. This is a SparkCommand without a payload. It cannot be posted to the bus until a payload is provided by calling .complete() on it 2017-12-14 16:53:24 -05:00
Jake Norbut 4e86357645 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-14 14:10:30 -06:00
Jake Norbut 48bcab1818 Spark-289 - edit/multi behavior change 2017-12-14 14:10:19 -06:00
Eric Harding 23e297ed4d Remove while(true); in ExchangeSim.cpp (pull this to cool your room down a little) 2017-12-14 14:02:49 -05:00
Taha Afzal 9fb23d9e36 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-14 12:45:55 -05:00
Taha Afzal 838f4cacb2 SPARK-287 spreader_WORKING.on_book remains 2017-12-14 12:45:51 -05:00
Jake Norbut 8502d2a6aa Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-14 11:05:18 -06:00
Jake Norbut 5622efbb93 Picker - setting Margin to a binding so it can vary based on single or multi modes 2017-12-14 11:05:05 -06:00
Taha Afzal bc1a364808 SPARK-287 spreader_WORKING test tamed (was getting too big) 2017-12-14 11:23:51 -05:00
Taha Afzal 96c3233bb1 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-13 23:22:24 -05:00
Taha Afzal a5b2f0519c SPARK-287 spreader_WORKING test does more now 2017-12-13 23:22:21 -05:00
Eric Harding 1d70aa55a6 Change TimeAndSales to SparkWindow pattern 2017-12-13 17:23:21 -05:00
Eric Harding 2397bde141 Add SparkWindow base type 2017-12-13 17:23:21 -05:00
Taha Afzal f4360d7abe Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-12 18:34:05 -05:00
Taha Afzal 89f3f86c92 SPARK-287 spreader_WAITING_FOR_CANCEL_ACK done 2017-12-12 18:33:52 -05:00
Jake Norbut 4a39ce13e6 SecurityPicker - necessary messaging changes to pipe the icon and launched-from-menu item over to the picker window 2017-12-12 14:34:05 -06:00
Jake Norbut d1c7a7e228 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-12 12:45:57 -06:00
Jake Norbut 90cd63d726 removing unnecessary command binding 2017-12-12 12:24:55 -06:00
Jake Norbut 4257772130 Security Picker - reorg 2017-12-12 12:14:56 -06:00
Jake Norbut 3f5447d7d9 Contract Picker - messing around 2017-12-12 10:14:41 -06:00
Taha Afzal 9ad8a11ac7 SPARK-287 spreader_WAITING_FOR_CANCEL_ACK base 2017-12-12 11:08:49 -05:00
Jake Norbut 1f5537e8ee ContractPicker - BTS Window Style 2017-12-12 09:23:36 -06:00
Jake Norbut f75ee3324b SecurityPicker - Window is shown at mouse location 2017-12-12 08:39:19 -06:00
Taha Afzal 80884e7b27 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-11 17:59:54 -05:00
Taha Afzal c4827fe9cf SPARK-287 working state done 2017-12-11 17:59:50 -05:00
Eric Harding 7e8fb900a8 Add time to buildsparkd 2017-12-11 15:36:39 -05:00
Kevin Darby 50929d1a69 cleaned up public margin api 2017-12-11 13:52:37 -05:00
Jake Norbut a05c0c0f22 ContractPicker - Upper casing Exchange listbox 2017-12-11 12:20:42 -06:00
Michael Harding 396996f707 Add Tooltip to LauncherMenuButton 2017-12-11 12:48:40 -05:00
Eric Harding 17b2ec8ae5 Make spark build commands more resilient to vsbuildcmd switching directory for no reason 2017-12-11 11:47:28 -05:00
Taha Afzal d1f23ba4e2 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-11 11:30:02 -05:00
Taha Afzal da5bca5349 SPARK-287 (going on and on) 2017-12-11 11:29:53 -05:00
Michael Harding ec849ad79c Add Collapsed Style to launcher menu button 2017-12-11 10:59:36 -05:00
Taha Afzal 6faeaed7f2 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-09 18:43:31 -05:00
Taha Afzal 81fda682b3 SPARK-287 2017-12-09 18:43:27 -05:00
Taha Afzal cb7a5c1d54 SPARK-287 2017-12-08 23:14:25 -05:00
Michael Harding 78eda54c05 Merged SPARK-252-clean-up-launcher-menu into master 2017-12-08 17:31:40 -05:00
Michael Harding e6a570db07 Fix launcher menu Item FocusVisualStyle 2017-12-08 17:25:23 -05:00
Michael Harding de898a6228 Bind Icon for Spark menu items 2017-12-08 17:14:52 -05:00
Michael Harding 0141e8e057 Add Animations to Spark launcher menu Items 2017-12-08 16:20:59 -05:00
Michael Harding f5e09ccb4f Static Launcher Menu Item Style 2017-12-08 16:20:59 -05:00
Michael Harding f82951ad48 Update the BTSColorExtension to allow better organiation of BTSColors.cs 2017-12-08 16:20:59 -05:00
Jake Norbut 8614759433 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-08 15:01:46 -06:00
Jake Norbut c4deae2b0f Contract Picker - double click security in single-pick mode 2017-12-08 15:01:39 -06:00
Eric Harding 361431a144 move sparkmenu into it's own folder 2017-12-08 10:54:30 -05:00
Taha Afzal 4a6cc10a39 In SpreaderLegData WORKING on_book done 2017-12-08 00:15:49 -05:00
Taha Afzal e498348b03 merging 2017-12-07 18:25:06 -05:00
Taha Afzal 128c071563 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-07 18:17:56 -05:00
Taha Afzal fd9521b66b In SpreaderLegData WORKING in progress 2017-12-07 18:17:53 -05:00
Kevin Darby 6d56a8f057 added methods to MarginServiceCore api for last_result and last_valid_result 2017-12-07 12:55:17 -05:00
Kevin Darby 8a244d89b2 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-07 12:40:21 -05:00
Kevin Darby a25f518679 move externals pointer 2017-12-07 12:40:00 -05:00
Jake Norbut 9fc0c55e48 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-07 11:33:24 -06:00
Jake Norbut 38f582615e Contract Picker - more GUI organization, keyboard nav, button accelerators 2017-12-07 11:33:13 -06:00
Kevin Darby 2638927ef1 Merge branch 'master' of bitbucket.org:bluetradesys/spark into limits 2017-12-07 11:59:37 -05:00
Taha Afzal e3d9081d76 In SpreaderLegData WORKING in progress 2017-12-06 18:36:53 -05:00
Taha Afzal a4296f1b79 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-06 17:54:35 -05:00
Taha Afzal c191158e0e In SpreaderLegData WAITING_FOR_FIRST_CONNECT 2017-12-06 17:54:32 -05:00
Kevin Darby 6c56959e4c Merge branch 'master' of bitbucket.org:bluetradesys/spark into limits 2017-12-06 17:26:33 -05:00
Kevin Darby cbd2a58b5c successful connection to CME span for futures 2017-12-06 17:23:41 -05:00
Jake Norbut 3da394552b Contract Picker - reorganizing some things, GUI changes 2017-12-06 12:16:30 -06:00
Eric Harding 01a22b00e3 move TimeAndSales folder 2017-12-06 12:27:17 -05:00
Eric Harding 77b76e3b75 Missed one folder in yesterdays cleanup 2017-12-06 11:59:13 -05:00
Taha Afzal b607a53edd Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-06 10:17:18 -05:00
Taha Afzal 07ba7a8f59 In SpreaderLegData quoter is stored as a pointer vs value 2017-12-06 10:17:14 -05:00
Eric Harding 13adbb1d42 Remove ViewLocator service 2017-12-05 20:36:05 -05:00
Jake Norbut 31392df28d Contract Picker Model - OK and Cancel buttons behave as one would expect 2017-12-05 18:43:35 -06:00
Taha Afzal d2b9f6d620 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-05 18:38:56 -05:00
Taha Afzal ef68015e05 SPARK-287 WAITING_FOR_FIRST_CONN 2017-12-05 18:38:54 -05:00
Jake Norbut 81bb056dba Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-05 16:30:12 -06:00
Jake Norbut 6141d2969e Contract Picker - fixing bool logic 2017-12-05 16:29:58 -06:00
Eric Harding 02a0279903 Found a test folder in the wrong place 2017-12-05 17:29:35 -05:00
Eric Harding 682350aef1 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-05 17:24:07 -05:00
Eric Harding 7e84dc628d Clean up spark subfolders 2017-12-05 17:24:00 -05:00
Jake Norbut f05603f6ba Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-05 11:53:19 -06:00
Jake Norbut cac172ff1d Contract Picker Model - adding proper null checks in the func so linq won't NRE 2017-12-05 11:53:03 -06:00
Taha Afzal f478a4621b Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-05 10:13:09 -05:00
Taha Afzal 2a793e63ab SPARK-287 spreader WAITING_FOR_FIRST_CONN tests partially done 2017-12-05 10:13:06 -05:00
Eric Harding 225134d4e4 Remove reference to deleted SecurityConverter 2017-12-05 10:04:12 -05:00
Taha Afzal 8761e7420a SPARK-287 spreader data creation factored out for the other tests 2017-12-04 19:47:52 -05:00
Taha Afzal 336e85bf97 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-04 19:23:42 -05:00
Taha Afzal 3039c51032 SPARK-287 start state tests completed 2017-12-04 19:23:39 -05:00
Eric Harding a573a63a62 Remove SecurityConverter which didn't do what it said it did anyway 2017-12-04 15:50:31 -05:00
Eric Harding fa4274aa9f Delete unused c# algo stuff 2017-12-04 15:05:16 -05:00
Eric Harding c29aef63e0 Update TimeAndSales to SecurityCriteria 2017-12-04 15:05:16 -05:00
Taha Afzal 5c5b96af83 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-04 13:17:29 -05:00
Taha Afzal 448c7fe2a8 SPARK-210 setup 2017-12-04 13:17:17 -05:00
Jake Norbut 115371e039 Contract Picker should pass selection onto next window now 2017-12-04 12:14:32 -06:00
Eric Harding ae40deb941 Add CanExecute to SparkCmd and update ShowMarketViewTag to use SecurityCriteria+extension methods 2017-12-04 12:30:51 -05:00
Eric Harding 0f081d29a8 Change security_in_criteria to not test once first matchis found 2017-12-04 12:30:51 -05:00
Taha Afzal 055ced0590 better comments 2017-12-04 09:48:46 -05:00
Taha Afzal 299d513102 SPARK-286 2017-12-03 10:12:17 -05:00
Taha Afzal 76c9eae2cf Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-01 22:56:37 -05:00
Taha Afzal 724c3549fb SPARK-286, just WORKING state is left 2017-12-01 22:56:34 -05:00
Eric Harding f6996e6b49 add BeholderCollection : ObservableCollection which subscribes to IObservable 2017-12-01 22:39:06 -05:00
Taha Afzal afc4139458 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-01 21:54:30 -05:00
Taha Afzal 2396ee0a64 SPARK-286 2017-12-01 21:54:27 -05:00
Eric Harding cd45576fb0 Add SecurityCriteriaExtensions 2017-12-01 16:34:35 -05:00
Taha Afzal 9e5c0e9c68 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-12-01 15:57:34 -05:00
Taha Afzal 2ca4a3ea75 SPARK-286 start state 2017-12-01 15:57:30 -05:00
Eric Harding c0d1e91a8a Change PickOne to take SecurityMD so downstream doesn't have to do the lookup 2017-12-01 15:28:13 -05:00
Taha Afzal d49e4ce234 factored common test functions out 2017-11-30 19:02:27 -05:00
Kevin Darby 76fed35a76 curl.... 2017-11-30 18:15:13 -05:00
Taha Afzal 01afc3a2f1 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-30 18:03:19 -05:00
Taha Afzal 4484056c98 test file name changed 2017-11-30 18:03:14 -05:00
Eric Harding c64abce1b9 Change ShowPickX tags to use SecurityCriteria so jake can integrate his UI 2017-11-30 17:34:00 -05:00
Taha Afzal 8ccf75a7fe Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-30 15:49:07 -05:00
Taha Afzal c5678e894e SPARK-285 done 2017-11-30 15:49:03 -05:00
Jake Norbut 58522154b7 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-30 09:30:09 -06:00
Jake Norbut 98437807c8 commit before merge because git says my files will be overwritten 2017-11-30 09:28:29 -06:00
Eric Harding a4b282834a merge LauncherReorg branch 2017-11-30 09:53:09 -05:00
Taha Afzal 08b2294145 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-29 19:10:56 -05:00
Taha Afzal 8c16ddfbc4 cycle_back 2017-11-29 19:10:54 -05:00
Eric Harding d4b0520dc6 Add stack trace to logged unhandled exceptions (c#) 2017-11-29 17:33:55 -05:00
Eric Harding 4cdad2c60a Add very basic button style to launcher menus. Updated style coming soon. 2017-11-29 17:33:27 -05:00
Jake Norbut fec0eab8ce Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-29 15:16:46 -06:00
Jake Norbut 512d907d54 Contract picker - View, Criteria Clause, and auto-generating name clause on select 2017-11-29 15:16:32 -06:00
Taha Afzal bca935e446 enabling a previoulsy disabled test 2017-11-29 16:00:01 -05:00
Taha Afzal 3797e6784e merging 2017-11-29 15:42:26 -05:00
Taha Afzal e3f9b2a078 SPARK-285 mostly done 2017-11-29 15:33:04 -05:00
Taha Afzal 10d7d5a801 SPARK-285 on_book done 2017-11-29 12:15:03 -05:00
Eric Harding d5910673c3 Remove IFavorites 2017-11-29 10:16:11 -05:00
Eric Harding 83a7fb54aa Remove unintentional commit. 2017-11-29 10:12:45 -05:00
Eric Harding 95ee540724 Add IShellDaemon interface 2017-11-29 10:12:44 -05:00
Taha Afzal 2f2bbe60c1 SPARK-285 working state test partally done 2017-11-28 20:53:04 -05:00
Eric Harding 90dac39122 remove non-generic ITag 2017-11-28 15:18:46 -05:00
Eric Harding 51e178c6b5 fix merge issues 2017-11-28 14:14:28 -05:00
Eric Harding d4ee0cfc97 merge from master 2017-11-28 13:21:24 -05:00
Taha Afzal cd681b9ab5 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-28 09:45:49 -05:00
Taha Afzal 240e255b8d SPARK-285 end state test 2017-11-28 09:45:45 -05:00
Taha Afzal 590231799d SPARK-285 test re-org 2017-11-27 23:20:06 -05:00
Kevin Darby 0d72bb47d4 clarify porfolio_id / account 2017-11-27 18:08:41 -05:00
Kevin Darby 3f5ba37aca ready to start testing positions / margins 2017-11-27 17:59:07 -05:00
Jake Norbut 23b0b637f9 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-27 16:29:10 -06:00
Jake Norbut cdb0b8312d Contract Picker work 2017-11-27 16:28:44 -06:00
Taha Afzal e85e648510 SPARK-285 test re-org 2017-11-27 11:58:45 -05:00
Taha Afzal 967d47858c SPARK-285 End State test 2017-11-24 16:02:26 -05:00
Taha Afzal de1b74cd92 SPARK-285 file name change 2017-11-24 10:18:45 -05:00
Taha Afzal 30db05a722 SPARK-285 state name change 2017-11-24 09:55:24 -05:00
Taha Afzal 9eed4d1275 SPARK-285 (end state can potentially transfer control at the start, this simplifies a lot of things 2017-11-23 23:35:57 -05:00
Taha Afzal d270847b27 SPARK-285 WAITING_FOR_CANCEL_ACK done 2017-11-23 13:51:18 -05:00
Eric Harding df0134d7b4 remove our ObserveOnDispatcher use Rx one 2017-11-22 16:50:44 -05:00
Taha Afzal 2b58c0b425 SPARK-285 WAITING_FOR_FIRST_ACL_CANCELLED done 2017-11-22 16:36:18 -05:00
Eric Harding 800f87fca7 Launcher menu structure looks right 2017-11-22 16:34:22 -05:00
Eric Harding 27b66cac06 OrderTicketHandler 2017-11-22 14:30:26 -05:00
Eric Harding 63d784feaa Enable Show picker tags in SparkTags 2017-11-22 14:15:58 -05:00
Eric Harding b26a2ef784 fills window 2017-11-22 13:37:06 -05:00
Taha Afzal 27418a9cbc SPARK-285 WAITING_FOR_FIRST_ACL_CANCELLED half way done 2017-11-22 12:35:19 -05:00
Eric Harding ec7bd46cbb IShellWindowFactory should take the version number also 2017-11-22 11:01:26 -05:00
Eric Harding 2c4bceca45 Add Time and sales 2017-11-22 10:48:43 -05:00
Eric Harding 79e578c0ac Add ShowWindow bus tag 2017-11-21 21:16:29 -05:00
Taha Afzal fb55a676c1 SPARK-285 WAITING_FOR_FIRST_ACK state test completed 2017-11-21 19:31:48 -05:00
Taha Afzal 9ab1911838 SPARK-285 WAITING_FOR_SIZE state test completed 2017-11-21 17:05:37 -05:00
Eric Harding ba997e67ba Update and simplify IShellModule api and separate concerns. 2017-11-21 15:49:11 -05:00
Kevin Darby 32ddfe1848 rename function 2017-11-21 12:29:17 -05:00
Taha Afzal 0908a56eda SPARK-285 start state test completed 2017-11-20 18:43:04 -05:00
Taha Afzal 7f2138b308 SPARK-285 start 2017-11-20 13:29:48 -05:00
Kevin Darby d6e10e1ffc cleaned up risk limiter ambiguity 2017-11-20 12:42:34 -05:00
Eric Harding 0a6102cc77 Simplify IShellModule menu interaction 2017-11-20 11:55:34 -05:00
Eric Harding 010b22fb9f Deleted unimplemented tests. 2017-11-20 11:53:18 -05:00
Eric Harding 75a5872632 Move IBus to top level folder under spark. 2017-11-20 11:52:59 -05:00
Taha Afzal 7ea0c395a1 fixing tests, asserts were missing 2017-11-20 11:12:04 -05:00
Taha Afzal 26daef09af hedging price/qty test 2017-11-17 19:14:56 -05:00
Kevin Darby 5b677125bb fix test 2017-11-17 18:02:47 -05:00
Kevin Darby bf6dfba165 Merge branch 'master' of bitbucket.org:bluetradesys/spark into limits 2017-11-17 17:53:37 -05:00
Kevin Darby c48beff9da margin / position feedback into limits; needs more work 2017-11-17 17:52:40 -05:00
Taha Afzal c5c5e35670 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-17 16:58:37 -05:00
Taha Afzal 27fe42e906 pricing tests with fractional price mults 2017-11-17 16:58:34 -05:00
Jake Norbut 954bb59392 ContractPicker - the start of something grand 2017-11-17 14:19:54 -06:00
Eric Harding 45a58d6735 Remove unused GenericCellStore which was broken by changes in IBus 2017-11-17 13:53:20 -05:00
Jake Norbut 7acbacfbf9 adding a parameterless ToString for Security 2017-11-17 09:35:37 -06:00
Jake Norbut 3c5facf934 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-16 16:03:03 -06:00
Jake Norbut 32be7accad From Eric - Bus now uses ReplaySubject 2017-11-16 16:02:32 -06:00
Taha Afzal 387c225851 SpreaderLegData has SpreaderPorpertyData exposed as a cons ref& function now 2017-11-16 10:21:11 -05:00
Taha Afzal 87e1d1bf37 In LegPropertyData, made the public member vars private and exposed them through functions 2017-11-15 22:52:39 -05:00
Taha Afzal 0614333213 In LegPropertyData, made the public member vars private and exposed them through functions 2017-11-15 22:28:44 -05:00
Taha Afzal 4f1585f15f made the public member vars private and exposed them through functions 2017-11-15 22:14:36 -05:00
Taha Afzal 40e9c4a151 SPARK-283 spreader bookkeeper data test 2017-11-15 20:18:27 -05:00
Taha Afzal 0bb0a4ed34 SPARK-283 book traversal test 2017-11-15 12:55:57 -05:00
Taha Afzal 08a62988f0 SPARK-283 more tests 2017-11-15 10:18:09 -05:00
Taha Afzal 4f77edbe93 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-14 22:31:49 -05:00
Taha Afzal 812ba5cd0f Spark-283 partially done 2017-11-14 22:31:46 -05:00
Kevin Darby c33473a5f0 Merge branch 'master' of bitbucket.org:bluetradesys/spark into limits 2017-11-14 15:58:44 -05:00
Eric Harding 6eeaf21d9c Support window to submit problems to the server with logs/screenshots/etc 2017-11-14 11:55:31 -05:00
Taha Afzal c04bc9db6a adding test skeletons 2017-11-14 10:04:41 -05:00
Taha Afzal ff363d1398 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-13 22:11:58 -05:00
Taha Afzal 3670313d2a added logs to hedger and streamlined the state switching 2017-11-13 22:11:55 -05:00
Kevin Darby a8050617c5 a simple position service, wrong for exchange traded spreads until I can get at the leg fills 2017-11-13 17:29:27 -05:00
Eric Harding 6b770ea137 Add support button option to BTSMessageBox 2017-11-13 16:12:51 -05:00
Eric Harding 6790b6cf34 Add extension methods that help when interacting with protobuf apis 2017-11-13 16:12:51 -05:00
Eric Harding 5f1432057d Logger.nonull should not accept a struct to check for null. 2017-11-13 16:12:51 -05:00
Taha Afzal 712b3dee1c merging 2017-11-13 15:53:59 -05:00
Taha Afzal eb69640394 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-13 15:53:41 -05:00
Taha Afzal 1afb53a951 SPARK-278 for 2 legged spreads 2017-11-13 15:53:38 -05:00
Kevin Darby d03574ccc7 Merge branch 'master' of bitbucket.org:bluetradesys/spark into limits 2017-11-13 15:37:57 -05:00
Kevin Darby 20a344a0a5 clean up fwd decl 2017-11-13 15:36:11 -05:00
Kevin Darby 6e77ccf152 fixed limits bug after writing another test 2017-11-13 15:29:23 -05:00
Jake Norbut f3658e5a45 CME audit file creation script 2017-11-13 14:00:59 -06:00
Eric Harding 59d960af31 Delete some unused code 2017-11-13 14:02:59 -05:00
Eric Harding 440c33a267 Rename OrdersModel DemoOrdersModel to make it's temporary nature more obvious 2017-11-13 13:59:16 -05:00
Eric Harding ff8c4abc49 Make ImportedResources.ToSecurity accept the bus so dependencies are clear. 2017-11-13 12:06:11 -05:00
Eric Harding dc06d44f82 Remove ImportedResources.UserName singleton. 2017-11-13 11:40:47 -05:00
Eric Harding 4781fdac1e Re-use the same ~/spark directory when doing windows->linux replication 2017-11-13 11:14:46 -05:00
Eric Harding 94a738129e Make SecuritySource an instance isntead of static singleton 2017-11-13 10:07:16 -05:00
Pedro Pinto 7f7fec6ae2 Fixed build. 2017-11-13 09:36:09 -05:00
Pedro Pinto 501f3ff4f2 Docker linux again 2017-11-13 09:26:16 -05:00
Pedro Pinto fb48b84504 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-13 09:25:58 -05:00
Pedro Pinto 377695716d Updated docker 2017-11-13 09:25:48 -05:00
Pedro Pinto 93af8949fa Merged 2017-11-13 09:24:54 -05:00
Pedro Pinto c44282085e Tweaks to order building. 2017-11-13 09:22:11 -05:00
Pedro Pinto ae5a6d2493 Fixed some warnings reported by newer clang. 2017-11-13 09:19:40 -05:00
Taha Afzal 0514b84f42 order generation done in one place only 2017-11-12 22:00:44 -05:00
Taha Afzal 3e025f1805 spark-267 done 2017-11-10 18:30:38 -05:00
Taha Afzal 6b5efceb60 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-10 17:50:38 -05:00
Taha Afzal 7bd1302f22 Spark-267 better logging 2017-11-10 17:50:35 -05:00
Eric Harding 36ab9439a2 Convert SecuritySelectorControl to use SecurityImmutable 2017-11-10 17:38:16 -05:00
Eric Harding cd5c329bab IEnumerable.Cast<T> does not run implicit conversion operators 2017-11-10 17:15:27 -05:00
Eric Harding 1eee21118f Enable override port for unison and ssh in buildsparkd.cmd/runsparkd.cmd - SPARKVM_PORT and SPARKVM_UNISON_PORT 2017-11-10 16:14:57 -05:00
Eric Harding 4b4eed91f0 Fix stringly typed oneof in OrderTypeVM 2017-11-10 14:02:20 -05:00
Eric Harding fa19edb6ba Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-10 13:18:17 -05:00
Eric Harding a37483f146 Switch shell to use immutable security type 2017-11-10 13:18:13 -05:00
Taha Afzal 5998b599be merging 2017-11-10 12:59:19 -05:00
Taha Afzal 0da87235de Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-10 12:47:46 -05:00
Taha Afzal cf80d06e07 Spark-267 2017-11-10 12:47:43 -05:00
Eric Harding eafa6ed68d Make c# api friendlier to immutable types. Rename Result.result to Result.value 2017-11-10 11:18:45 -05:00
Taha Afzal b7b3cbb59d merging 2017-11-10 09:37:35 -05:00
Taha Afzal a1793af2f4 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-10 09:37:03 -05:00
Taha Afzal b2a4ae0bc0 Spark-280 pimpl 2017-11-10 09:36:59 -05:00
Kevin Darby 3066c234f6 Merge branch 'master' of bitbucket.org:bluetradesys/spark into limits 2017-11-09 13:24:21 -05:00
Kevin Darby 11c3982fce user, account, risklimits tests pass 2017-11-09 13:23:37 -05:00
Taha Afzal 801819838d Spark-278 2017-11-08 10:42:18 -05:00
Taha Afzal 885b22102f spark-278 partially done 2017-11-08 07:45:26 -05:00
Kevin Darby 423041c472 User/Account service with some (perhaps insufficient) level of authentication to prevent unauthorized account or user modifications 2017-11-07 16:45:56 -05:00
Taha Afzal 85fb331fd9 spark-269 done 2017-11-07 09:36:21 -05:00
Taha Afzal f9a954494d Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-06 23:03:41 -05:00
Taha Afzal 78c8da8652 spark-269 almost done 2017-11-06 23:03:37 -05:00
Kevin Darby cd08199dae . 2017-11-06 17:28:02 -05:00
Kevin Darby d7cbeab1d7 Merge branch 'master' of bitbucket.org:bluetradesys/spark into limits 2017-11-06 16:02:04 -05:00
Kevin Darby fb9f6544b4 implement UserServiceServer and AccountServiceServer on top of IStore 2017-11-06 16:01:26 -05:00
Jake Norbut 48301936b2 ignore leg fills on spreads 2017-11-06 14:06:58 -06:00
Taha Afzal 7fdece2991 merging 2017-11-06 11:58:36 -05:00
Taha Afzal 5fb7a4547d merging 2017-11-06 10:46:53 -05:00
Taha Afzal 1cfd724839 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-06 10:41:24 -05:00
Taha Afzal 761b1301f8 Spark-269 2017-11-06 10:41:12 -05:00
Pedro Pinto c324eec7c1 Refactored main.cpp slightly. 2017-11-06 09:05:38 -05:00
Pedro Pinto f787a9018e Added utility to read PB's from string. 2017-11-06 09:05:07 -05:00
Pedro Pinto 7de639eb66 Build tweaks. 2017-11-06 09:04:54 -05:00
Kevin Darby 7ab3258383 . 2017-11-03 15:18:02 -04:00
Pedro Pinto 3d96274508 Merged 2017-11-03 18:47:03 +00:00
Pedro Pinto 8f7ad5b947 Added Google Benchmark support in sparkd. 2017-11-03 18:21:41 +00:00
Pedro Pinto 037b5ab19a Working around bogus warning. 2017-11-03 18:18:32 +00:00
Taha Afzal 8f3a6b0fa0 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-03 14:00:35 -04:00
Taha Afzal 2596c4a2b8 WaitingForSize state 2017-11-03 14:00:30 -04:00
Eric Harding 626bc903d6 Merge branch 'master' into HEAD 2017-11-03 13:45:30 -04:00
Eric Harding 4422292ff5 Make c# protobuf and immutable protobuf implement common IImmutableMessage interface 2017-11-03 13:45:17 -04:00
Taha Afzal ae99bb3f03 QuoterStartStateWorker 2017-11-03 11:36:18 -04:00
Taha Afzal 4f850c85a7 merge 2017-11-02 23:47:36 -04:00
Taha Afzal dccb675d18 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-11-02 23:47:02 -04:00
Taha Afzal a12d9471ef Quoter states 2017-11-02 23:46:21 -04:00
Pedro Pinto 6829f3e384 Basics of exchange simulator work. 2017-11-02 14:44:09 +00:00
Kevin Darby 69bd47322e limits backend builds 2017-11-01 18:03:23 -04:00
Pedro Pinto cfe51b38df Fixed clang build 2017-11-01 21:03:55 +00:00
Pedro Pinto fbeeefe7cf Merged 2017-11-01 21:03:39 +00:00
Pedro Pinto 82964b713c Improved exchange simulator. 2017-11-01 20:57:53 +00:00
Pedro Pinto a60b3838b9 Specified full domain name of mdreplay site so we can work from home. 2017-11-01 17:06:58 +00:00
Pedro Pinto b9795a0fd7 Cleaned up order manager command line driver. 2017-11-01 17:06:35 +00:00
Pedro Pinto d6a83c1c7f Added sleep utility to bts_chrono. 2017-11-01 17:06:10 +00:00
Pedro Pinto 595570a518 Fixed a bug in Sqlite result code check. 2017-11-01 17:05:54 +00:00
Pedro Pinto e35a152f25 Made MD replay a bit more robust when no file is present. 2017-11-01 17:05:29 +00:00
Pedro Pinto 5dc43562e5 Cleaned up assert logging. 2017-11-01 17:05:05 +00:00
Taha Afzal 54c6160795 SPARK-268, hedger state handlers 2017-11-01 10:18:44 -04:00
Taha Afzal 394852a492 hedger states 2017-11-01 07:39:27 -04:00
Taha Afzal e02d22eead Spark-268, 2 more state handlers for Hedger 2017-10-31 23:35:55 -04:00
Taha Afzal 1c66f1c6f3 Spark-268 more work 2017-10-31 17:35:23 -04:00
Taha Afzal 8d579c2f0b IHedgerStateWorker get a build_once 2017-10-31 15:47:51 -04:00
Kevin Darby 3258021c42 user/account model backend boilerplate 2017-10-31 13:35:20 -04:00
Taha Afzal 9792f7d0a1 moving state and price/qty inner classes out from SingleFillHedger 2017-10-31 13:10:50 -04:00
Pedro Pinto d4f49279e1 Updated docker for linux 2017-10-31 16:47:02 +00:00
Pedro Pinto b1b4a8b5ea Fixed clang build. 2017-10-31 16:45:27 +00:00
Pedro Pinto b20207cdd0 Merged 2017-10-31 12:30:52 -04:00
Pedro Pinto 6aaf85bb1c Merge remote-tracking branch 'refs/remotes/origin/master' 2017-10-31 12:29:45 -04:00
Pedro Pinto fc21f1224e Tweaked linux main/win vm build setup. 2017-10-31 16:28:25 +00:00
Taha Afzal 682aaac9bc Spark-268 work 2017-10-31 11:11:47 -04:00
Taha Afzal 931577038b hedger state worker scaffolding complete 2017-10-30 21:50:16 -04:00
Taha Afzal 788c767a5f changing the namespace from bts::spreader to bts::orderman 2017-10-30 19:57:02 -04:00
Taha Afzal dd0238b4b5 deleting SpreaderBase and some test users 2017-10-30 19:47:01 -04:00
Taha Afzal ea118e41e6 merging 2017-10-30 19:41:45 -04:00
Taha Afzal 734c7f07e3 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-10-30 19:34:07 -04:00
Taha Afzal 580f8c3b98 Removing ordertemplate usage 2017-10-30 19:34:02 -04:00
Taha Afzal 966897bfc6 Getting rid of SpreaderBase 2017-10-30 19:09:15 -04:00
Taha Afzal 6274015cb3 IHedgeStateWorker sheds some headers 2017-10-30 18:51:34 -04:00
Taha Afzal 281cd705f0 SpreaderUtils 2017-10-30 18:33:56 -04:00
Taha Afzal 21356c17f7 SpreaderHedgerData headers 2017-10-30 17:45:24 -04:00
Pedro Pinto ab21552386 Updated git ignore to ignore CLion stuff 2017-10-30 21:34:01 +00:00
Pedro Pinto 5a38269d16 ExchangeSim was interfering with the orderman test driver. 2017-10-30 21:31:34 +00:00
Taha Afzal a3a5748ed9 LegPropertyData headers fixed 2017-10-30 17:11:07 -04:00
Pedro Pinto 0a2ed5f7e0 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-10-30 17:03:31 -04:00
Pedro Pinto b5a054632e Fixed cmd line driver for order manager. 2017-10-30 21:02:40 +00:00
Taha Afzal b98a2750f4 more hedger work 2017-10-30 14:55:06 -04:00
Taha Afzal b7e2e1536f Cleaning up hedger headers 2017-10-30 14:04:08 -04:00
Taha Afzal b7bf9ba2d4 SPARK-268 (not complete) 2017-10-30 12:10:12 -04:00
Taha Afzal 9b9616c4bf merge 2017-10-30 10:13:47 -04:00
Taha Afzal 51ec0dbb07 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-10-30 10:13:04 -04:00
Taha Afzal 6e82155d86 Spark-249-Spreader Order : Create state handlers 2017-10-30 10:12:55 -04:00
Pedro Pinto 73282f5e7b Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-10-30 13:32:25 +00:00
Pedro Pinto 493586a0ca More work on exchange simulator. 2017-10-30 13:32:11 +00:00
Kevin Darby 4740eb5879 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-10-27 15:25:34 -04:00
Eric Harding 7637c872b6 Externals pointer got moved backwards somehow. Updated it to head so unison.exe is available 2017-10-27 09:53:38 -04:00
Eric Harding 8be0c3e03e code cleanup in diff 2017-10-26 17:55:10 -04:00
Kevin Darby 2dc57b6809 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-10-26 10:08:44 -04:00
Taha Afzal ffeb86dd8c Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-10-25 17:43:26 -04:00
Eric Harding cc9fcb4b59 Improved sync_with 2017-10-25 17:38:48 -04:00
Eric Harding e2cd9820af Fix buildprops 2017-10-25 17:38:47 -04:00
Kevin Darby f421296812 remove unneeded tools 2017-10-25 16:32:07 -04:00
Taha Afzal 9aca77729c Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-10-25 15:38:46 -04:00
Taha Afzal 2521352737 Case 248 SpreaderOrder : move state into the pimpl structure 2017-10-25 15:38:43 -04:00
Taha Afzal 149d68b805 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-10-24 10:10:25 -04:00
Taha Afzal 4884981837 Merge branch 'master' of bitbucket.org:bluetradesys/spark 2017-10-23 11:40:34 -04:00
Taha Afzal 0d11726104 merging 2017-10-21 09:08:48 -04:00
1622 changed files with 94800 additions and 40739 deletions

No files matched your search

+1
View File
@@ -0,0 +1 @@
IndentWidth: 3
+11
View File
@@ -1,4 +1,7 @@
nohup.out
build/
cmake-build-debug/
.idea/
.dir-locals.el
*.pyc
.vscode/*
@@ -6,7 +9,15 @@ build/
.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
+101 -65
View File
@@ -1,66 +1,102 @@
{
"configurations": [
{
"name": "Linux",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
},
{
"name": "Windows",
"intelliSenseMode": "clang-x64",
"includePath": [
"${workspaceRoot}/src",
"${workspaceRoot}/build/src",
"${workspaceRoot}/build/gcc_debug/src",
"${workspaceRoot}/externals/windows/include",
"${workspaceRoot}/externals/linux/include",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
"${workspaceRoot}/externals/windows/vscode/usr/include"
],
"defines": [
"__linux__",
"__x86_64__"
],
"browse": {
"path": [
"${workspaceRoot}/src",
"${workspaceRoot}/build/src",
"${workspaceRoot}/build/gcc_debug/src",
"${workspaceRoot}/externals/windows/include",
"${workspaceRoot}/externals/linux/include",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
"${workspaceRoot}/externals/windows/vscode/usr/include/*"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 3
{
"configurations": [
{
"name": "Linux",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceRoot}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"cStandard": "c11",
"cppStandard": "c++17"
},
{
"name": "Windows",
"intelliSenseMode": "clang-x64",
"includePath": [
"${workspaceRoot}/src",
"${workspaceRoot}/build/src",
"${workspaceRoot}/build/ninja_debug/src",
"${workspaceRoot}/externals/windows/include",
"${workspaceRoot}/externals/linux/include",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
"${workspaceRoot}/externals/windows/vscode/usr/include"
],
"defines": [
"__linux__",
"__x86_64__"
],
"browse": {
"path": [
"${workspaceRoot}/src",
"${workspaceRoot}/build/src",
"${workspaceRoot}/build/ninja_debug/src",
"${workspaceRoot}/externals/windows/include",
"${workspaceRoot}/externals/linux/include",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
"${workspaceRoot}/externals/windows/vscode/usr/include/*"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"cStandard": "c11",
"cppStandard": "c++17"
},
{
"name": "WindowsQuick",
"intelliSenseMode": "clang-x64",
"includePath": [
"${workspaceRoot}/src",
"${workspaceRoot}/build/src",
"${workspaceRoot}/build/ninja_debug/src",
"${workspaceRoot}/externals/windows/include",
"${workspaceRoot}/externals/linux/include",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu/c++/6",
"${workspaceRoot}/externals/windows/vscode/usr/include/c++/6/backward",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include",
"${workspaceRoot}/externals/windows/vscode/usr/local/include",
"${workspaceRoot}/externals/windows/vscode/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed",
"${workspaceRoot}/externals/windows/vscode/usr/include/x86_64-linux-gnu",
"${workspaceRoot}/externals/windows/vscode/usr/include"
],
"defines": [
"__linux__",
"__x86_64__"
],
"browse": {
"path": [
"${workspaceRoot}/src"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "${workspaceRoot}/.vscode/browse.vc.db"
},
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
+314 -163
View File
@@ -1,164 +1,315 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/build/gcc_debug/src/server/sparkd/sparkd",
"args": ["run"],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/build/gcc_debug/src/server/sparkd",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "Client Launch",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net462/spark.exe",
"args": [],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true
},
{
"name": "Client Attach",
"type": "clr",
"request": "attach",
"processId":"${command:pickProcess}"
},
{
"name": "SparkVM Launch",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"args": ["configcheck", "System"],
"stopAtEntry": true,
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["bts@sparkvm"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Docker Launch",
"type": "cppdbg",
"request": "launch",
"program": "/bts/build/gcc_debug/src/server/sparkd/sparkd",
"args": ["test"],
"stopAtEntry": false,
"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": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["-p 2000","root@localhost"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/bts/": "${workspaceRoot}"
}
},
{
"name": "Docker attach",
"type": "cppdbg",
"request": "attach",
"program": "/bts/build/gcc_debug/src/server/sparkd/sparkd",
"processId": "${command:pickRemoteProcess}",
"MIMode": "gdb",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["-p 2000","root@localhost"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/bts/": "${workspaceRoot}"
}
},
{
"name": "Python",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "${config:python.pythonPath}",
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
"args": [ "DEBUG" ],
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": "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": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["bts@edge-asp051"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/bts/": "${workspaceRoot}"
}
}
]
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/build/ninja_debug/src/server/sparkd/sparkd",
"args": ["run"],
"stopAtEntry": false,
"cwd": "${workspaceRoot}/build/ninja_debug/src/server/sparkd",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "Client Launch",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/spark.exe",
"args": [],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "SDK Launch",
"type": "clr",
"request": "launch",
"program": "${workspaceRoot}/build/Debug/bin/net471/spark_sdk.exe",
"args": ["md","GLBX","Future","ES","ESM8"],
"cwd": "${workspaceRoot}",
"stopAtEntry": false,
"externalConsole": true,
"requireExactSource": false
},
{
"name": "Client Attach",
"type": "clr",
"request": "attach",
"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/src/server/sparkd/sparkd",
"args": ["test", "[spreader]"],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["bts@sparkvm"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Admin Service Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"args": ["test", "[admin_service]"],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["bts@sparkvm"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Limiter Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"args": ["test", "[limiter]"],
"stopAtEntry": false,
"cwd": "/home/bts/spark/build/ninja_debug/src/server/sparkd/",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"preLaunchTask": "",
"logging": {
"engineLogging": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "enable pretty-printer",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["bts@sparkvm"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "MD Tests",
"type": "cppdbg",
"request": "launch",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"args": ["test", "[md]"],
"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-printing",
"ignoreFailures": true
},
{
"description": "Skip STL",
"text": "skip -gfi /usr/include/c++/7/bits/*.h",
"ignoreFailures": true
}
],
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["bts@sparkvm"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "SparkVM attach",
"type": "cppdbg",
"request": "attach",
"program": "/home/bts/spark/build/ninja_debug/src/server/sparkd/sparkd",
"processId": "${command:pickRemoteProcess}",
"MIMode": "gdb",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["bts@sparkvm"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/home/bts/spark/": "${workspaceRoot}"
}
},
{
"name": "Python",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "${config:python.pythonPath}",
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {},
"envFile": "${workspaceRoot}/.env",
"args": [ "DEBUG" ],
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit",
"RedirectOutput"
]
},
{
"name": "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": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["bts@edge-asp051"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/bts/": "${workspaceRoot}"
}
},
{
"name": "Docker Launch",
"type": "cppdbg",
"request": "launch",
"program": "/bts/build/gcc_debug/src/server/sparkd/sparkd",
"args": ["test"],
"stopAtEntry": false,
"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": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\program files\\git\\usr\\bin\\ssh.exe",
"pipeArgs": ["-p 2000","root@localhost"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/bts/": "${workspaceRoot}"
}
}
]
}
+20 -9
View File
@@ -4,9 +4,9 @@
"version": "2.0.0",
"tasks": [
{
"taskName": "client_build",
"label": "client_build",
"type": "shell",
"command": ".\\tools\\clientbuild.cmd",
"command": ".\\tools\\buildspark.cmd",
"problemMatcher":"$msCompile",
"presentation": {
"echo": true,
@@ -20,19 +20,30 @@
}
},
{
"taskName": "server_build",
"label": "server_build",
"type": "shell",
"command": ".\\tools\\ssh_serverbuild.cmd",
"problemMatcher": {
"base": "$gcc",
"fileLocation": "relative"
"command": ".\\tools\\buildsparkd.cmd",
"problemMatcher": {
"base": "$gcc",
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceFolder}"
],
"pattern": {
"regexp": "(.?)(home)(.?)(bts)(.?)(spark)(.?)(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)",
"file": 8,
"line": 9,
"column": 10,
"severity": 11,
"message": 12
}
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
"panel": "new"
},
"group": {
"kind": "build",
+3 -3
View File
@@ -28,14 +28,14 @@ if (WIN32)
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF /LTCG")
add_subdirectory(src/lib)
else ()
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \
-Wall -pedantic -Wextra -Werror -Wno-missing-braces --std=c++14 -fdiagnostics-color")
-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()
+63 -35
View File
@@ -1,10 +1,10 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.12
VisualStudioVersion = 15.0.27130.2024
MinimumVisualStudioVersion = 15.0.26124.0
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_api", "src\client\spark_api\spark_api.csproj", "{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spark_lib", "build\src\lib\spark_lib.vcxproj", "{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spark_lib", "build\src\lib\spark_lib.vcxproj", "{502FD050-679A-3B50-B438-098500700919}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spark", "src\client\spark\Spark.csproj", "{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}"
EndProject
@@ -12,7 +12,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sparkcmd", "src\client\spar
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_core", "src\client\spark_core\spark_core.csproj", "{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "build\ZERO_CHECK.vcxproj", "{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "build\ZERO_CHECK.vcxproj", "{2256015B-E7D5-3614-8F39-814CA68A4444}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "spark_sdk", "src\client\spark_sdk\spark_sdk.csproj", "{6963C314-83C4-4667-B0D0-C2F7AE208C29}"
ProjectSection(ProjectDependencies) = postProject
{502FD050-679A-3B50-B438-098500700919} = {502FD050-679A-3B50-B438-098500700919}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -50,22 +55,22 @@ Global
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x64.Build.0 = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.ActiveCfg = Release|x64
{DC9A8975-8211-4FC9-A9BA-C8B9D26AD481}.RelWithDebInfo|x86.Build.0 = Release|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Debug|Any CPU.ActiveCfg = Debug|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Debug|x64.ActiveCfg = Debug|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Debug|x64.Build.0 = Debug|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Debug|x86.ActiveCfg = Debug|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Release|Any CPU.ActiveCfg = Release|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Release|x64.ActiveCfg = Release|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Release|x64.Build.0 = Release|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.Release|x86.ActiveCfg = Release|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{9186D3A8-1C5C-372A-A4EE-E1045BCCB0C7}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
{502FD050-679A-3B50-B438-098500700919}.Debug|Any CPU.ActiveCfg = Debug|x64
{502FD050-679A-3B50-B438-098500700919}.Debug|x64.ActiveCfg = Debug|x64
{502FD050-679A-3B50-B438-098500700919}.Debug|x64.Build.0 = Debug|x64
{502FD050-679A-3B50-B438-098500700919}.Debug|x86.ActiveCfg = Debug|x64
{502FD050-679A-3B50-B438-098500700919}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{502FD050-679A-3B50-B438-098500700919}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{502FD050-679A-3B50-B438-098500700919}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{502FD050-679A-3B50-B438-098500700919}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
{502FD050-679A-3B50-B438-098500700919}.Release|Any CPU.ActiveCfg = Release|x64
{502FD050-679A-3B50-B438-098500700919}.Release|x64.ActiveCfg = Release|x64
{502FD050-679A-3B50-B438-098500700919}.Release|x64.Build.0 = Release|x64
{502FD050-679A-3B50-B438-098500700919}.Release|x86.ActiveCfg = Release|x64
{502FD050-679A-3B50-B438-098500700919}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{502FD050-679A-3B50-B438-098500700919}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{502FD050-679A-3B50-B438-098500700919}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{502FD050-679A-3B50-B438-098500700919}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|Any CPU.ActiveCfg = Debug|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x64.ActiveCfg = Debug|x64
{9A4D4D07-1AB6-4B2B-B111-A4F34D6C267E}.Debug|x64.Build.0 = Debug|x64
@@ -126,22 +131,42 @@ Global
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x64.Build.0 = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.ActiveCfg = Release|x64
{6E449EB6-20AC-4FA6-B8D9-10F4BB7E1FEE}.RelWithDebInfo|x86.Build.0 = Release|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Debug|Any CPU.ActiveCfg = Debug|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Debug|x64.ActiveCfg = Debug|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Debug|x64.Build.0 = Debug|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Debug|x86.ActiveCfg = Debug|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Release|Any CPU.ActiveCfg = Release|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Release|x64.ActiveCfg = Release|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Release|x64.Build.0 = Release|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.Release|x86.ActiveCfg = Release|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{33E7E6C5-04E3-36A8-A751-639BE5E72B9B}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|Any CPU.ActiveCfg = Debug|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|x64.ActiveCfg = Debug|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|x64.Build.0 = Debug|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Debug|x86.ActiveCfg = Debug|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|Any CPU.ActiveCfg = Release|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|x64.ActiveCfg = Release|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|x64.Build.0 = Release|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.Release|x86.ActiveCfg = Release|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{2256015B-E7D5-3614-8F39-814CA68A4444}.RelWithDebInfo|x86.ActiveCfg = RelWithDebInfo|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|Any CPU.ActiveCfg = Debug|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x64.ActiveCfg = Debug|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x64.Build.0 = Debug|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Debug|x86.ActiveCfg = Debug|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|Any CPU.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|Any CPU.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x64.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x64.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x86.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.MinSizeRel|x86.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|Any CPU.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x64.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x64.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.Release|x86.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|Any CPU.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|Any CPU.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x64.Build.0 = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x86.ActiveCfg = Release|x64
{6963C314-83C4-4667-B0D0-C2F7AE208C29}.RelWithDebInfo|x86.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -149,4 +174,7 @@ Global
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {422D1620-0166-4C26-9A81-CA8A2EB1AB58}
EndGlobalSection
GlobalSection(Performance) = preSolution
HasPerformanceSessions = true
EndGlobalSection
EndGlobal
+17
View File
@@ -0,0 +1,17 @@
{
"files.associations": {
"chrono": "cpp",
"future": "cpp",
"system_error": "cpp",
"ios": "cpp",
"utility": "cpp",
"iosfwd": "cpp",
"xhash": "cpp",
"xstring": "cpp",
"xtree": "cpp",
"xutility": "cpp",
"exception": "cpp",
"bitset": "cpp",
"xlocale": "cpp"
}
}
+1 -1
View File
@@ -15,7 +15,7 @@
</PropertyGroup>
<PropertyGroup Label="Output">
<BaseOutputPath>$(SparkRoot)\build\$(Configuration)\$(SolutionName)</BaseOutputPath>
<BaseOutputPath>$(SparkRoot)\build\$(Configuration)</BaseOutputPath>
<OutputPath>$(BaseOutputPath)\bin</OutputPath>
<BaseIntermediateOutputPath>$(BaseOutputPath)\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(BaseOutputPath)\obj\$(MSBuildProjectName)</IntermediateOutputPath>
+30
View File
@@ -0,0 +1,30 @@
using bts.api;
using bts.api.admin;
using bts.api.core;
using bts.spark;
using mbts.spark.utilities;
using mbts.utils;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel.Composition;
using System.Linq;
using System.Reactive.Linq;
using System.Threading.Tasks;
namespace mbts.spark {
[Export]
class AdminModel {
readonly AdminService _service;
[ImportingConstructor]
private AdminModel(AdminService service) {
_service = service;
on_admin_data = _service.subscribei_admin_data().Table().Replay(1).RefCount();
}
public IObservable<TableUpdate<AdminDataImmutable, int>> on_admin_data { get; }
}
}
+65
View File
@@ -0,0 +1,65 @@
using bts.api;
using mbts;
using mbts.config;
using mbts.spark;
using mbts.ui;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Diagnostics;
using System.Linq;
using System.Reactive.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace bts.ui {
[Export, Export(typeof(IShellDaemon))]
class AboutDaemon : IShellDaemon, IDisposable {
readonly string _user;
readonly IBrowserWindowManager _browser;
IDisposable _dispose;
[ImportingConstructor]
public AboutDaemon(IBus bus, [Import("username")]string username, IBrowserWindowManager browser) {
_user = username;
_browser = browser;
_dispose = bus.subscribe(SparkTags.About).ObserveOnDispatcher().Subscribe(_ => show_about());
}
[Conditional("DEBUG")]
private void enable_crash_on_dblclick(Window w) {
w.MouseDoubleClick += (o,e) => {
throw new DebugException("Too many or too few clicks on BTS logo.");
};
}
void show_about() {
Window about = Application.LoadComponent(new Uri("/view/Shell/About.xaml", UriKind.Relative)) as Window;
enable_crash_on_dblclick(about);
if (about != null) {
about.DataContext = new { Version = Configuration.get<bts.config.System>().version, User = _user };
about.Topmost = true;
about.CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, (a, b) => about.Close()));
about.CommandBindings.Add(new CommandBinding(ApplicationCommands.Open, (arg, e) => {
if (e.Parameter != null) {
string param = e.Parameter.ToString();
if (!string.IsNullOrEmpty(param) && param.IndexOf("http") == 0) {
Process.Start(param);
}
else if (!string.IsNullOrEmpty(param)) {
Uri address = new Uri("bts://" + param);
_browser.Pages.Add(address);
}
}
}));
about.Show();
}
}
public void Dispose() {
Disposable.dispose(ref _dispose);
}
}
}
@@ -0,0 +1,43 @@
using bts.api;
using bts.log;
using mbts;
using mbts.spark;
using mbts.ui;
using System;
using System.ComponentModel.Composition;
using System.Linq;
using System.Reactive.Linq;
namespace bts {
[Export, Export(typeof(IShellDaemon))]
class DeleteSyntheticDaemon : IShellDaemon, IDisposable {
readonly OrdersModel _orders_model;
IDisposable _dispose;
[ImportingConstructor]
public DeleteSyntheticDaemon(IBus bus, OrdersModel orders_model) {
_orders_model = orders_model;
_dispose = bus.subscribe(SparkTags.SyntheticDeleteTag)
.ObserveOnDispatcher()
.Subscribe(_delete_synthetic);
}
public void Dispose() =>
Disposable.dispose(ref _dispose);
async void _delete_synthetic(uint id) {
var (orders, orders_success) = await _orders_model.on_orders.FirstAsyncTask(SparkUtils.DefaultTimeOut);
if (!orders_success) {
Logger.warn(Subsystem.Ui, $"Ignoring request to delete synthetic security ({id}) because the orders lookup timed out (must confirm no working orders).");
} else if (orders.state.Values.Any(o => o.Def.SecurityKey == id && o.is_non_terminal())) {
Logger.warn(Subsystem.Ui, $"Ignoring request to delete synthetic security ({id}) because non-terminal-orders were detected.");
} else {
var (strategy, strategy_success) = await _orders_model.spreader.lookup_strategy_async(id);
if (strategy_success) {
var deleted_strategy = strategy.with(deleted: true);
await _orders_model.spreader.save_strategy(id, deleted_strategy);
}
}
}
}
}
@@ -0,0 +1,21 @@
using bts.api.core;
using bts.api.diagnostic;
using mbts.ui;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bts.spark {
[Export(typeof(IShellDaemon))]
class DiagnosticDaemon : IShellDaemon {
readonly ShellDiagnosticsServiceServer _service;
[ImportingConstructor]
public DiagnosticDaemon(ServiceContext context, CompositionContainer container) {
_service = new ShellDiagnosticsServiceServer(container, context);
}
}
}
+82
View File
@@ -0,0 +1,82 @@
using bts.api;
using bts.api.core;
using bts.support;
using mbts;
using mbts.spark;
using mbts.ui;
using System;
using System.ComponentModel.Composition;
using System.Reactive.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace bts.spark
{
[Export, Export(typeof(IShellDaemon))]
public class ErrorReporter : IShellDaemon, IDisposable {
readonly ErrorReportService _svc;
readonly string _username;
IDisposable _dispose;
[ImportingConstructor]
public ErrorReporter(ErrorReportService svc, IBus bus, [Import("username")] string username) {
_svc = svc;
_username = username;
_dispose = bus.subscribe(SparkTags.Support).ObserveOnDispatcher().Subscribe(msg => show_support_window(msg, "Report a problem"));
}
public void Dispose() {
Disposable.dispose(ref _dispose);
}
public async Task report_error(string message, string title = null, MessageBoxImage? image = null) {
var result = await BTSMessageBox.ShowAsync(message, title = "Error", BTSMessageBoxButtons.OK | BTSMessageBoxButtons.Support, image ?? MessageBoxImage.Error);
if (result == BTSMessageBoxButtons.Support) {
show_support_window(message, title);
}
}
public void show_support_window(string message, string title) {
view.controls.SupportRequestWindow.Show(_svc, new ErrorReport() {
User = _username,
ErrorTitle = title,
ErrorMessage = message,
});
}
}
static class ErrorReporterExtensions
{
public static bool handle_error<T, TError>(this ErrorReporter error_reporter, Result<T> result, string template, TError error, bool error_ok) =>
handle_error(error_reporter, result, template, error, error_ok, false, true);
public static TRV handle_error<T, TError, TRV>(this ErrorReporter error_reporter, Result<T> result, string template, TError error, bool error_ok, TRV successful_rv, TRV unsuccessful_rv = default) =>
handle_error(error_reporter, result, template, _ => error, _ => error_ok, _ => successful_rv, () => unsuccessful_rv).result;
public static bool handle_error<T, TError>(this ErrorReporter error_reporter, Result<T> result, string template, Func<T, TError> get_error, Func<TError, bool> get_error_ok) =>
handle_error(error_reporter, result, template, get_error, get_error_ok, _ => true, () => false).result;
public static (TRV result, string error) handle_error<T, TError, TRV>(this ErrorReporter error_reporter, Result<T> result, string template, Func<T, TError> get_error, Func<TError, bool> get_error_ok, Func<T, TRV> get_successful_rv) =>
handle_error(error_reporter, result, template, get_error, get_error_ok, get_successful_rv, () => default);
public static (TRV result, string error) handle_error<T, TError, TRV>(
this ErrorReporter error_reporter, Result<T> result, string template,
Func<T, TError> get_error, Func<TError, bool> get_error_ok,
Func<T, TRV> get_successful_rv, Func<TRV> get_unsuccessful_rv
) {
if (result.success) {
TError error = get_error(result.value);
if (get_error_ok(error))
return (get_successful_rv(result.value), string.Empty);
else {
string error_msg = template.fmt(error);
error_reporter.report_error(error_msg).ignore();
return (get_unsuccessful_rv(), error_msg);
}
} else {
error_reporter.report_error(result.error_message).ignore();
return (get_unsuccessful_rv(), result.error_message);
}
}
}
}
+80
View File
@@ -0,0 +1,80 @@
using bts.api;
using bts.api.synthetic;
using bts.log;
using mbts;
using mbts.co2;
using mbts.spark;
using mbts.ui;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Reactive.Linq;
using System.Threading.Tasks;
using System.Linq;
using SecurityKey = System.UInt32;
namespace bts {
[Export(typeof(IShellDaemon))]
class MDSource : IObserver<List<SecurityAndHandle>>, IShellDaemon, IDisposable {
readonly IBus _bus;
readonly MDConsumer _consumer = new MDConsumer();
readonly Co2RelayControl _relay;
HashSet<SecurityKey> _deleted_synthetics = new HashSet<SecurityKey>();
List<IDisposable> _dispose = new List<IDisposable>();
IReadOnlyDictionary<SecurityKey, SecurityMD> _exchange_sec_map = new Dictionary<SecurityKey, SecurityMD>();
[ImportingConstructor]
public MDSource(IBus bus, SyntheticSecurityService ss) {
_bus = bus;
_relay = new Co2RelayControl(_consumer);
_relay.preload_securities((co2.MDRequest.Types.Flags)0xff).ignore();
_dispose.Add(_consumer.on_security.Subscribe(this));
_dispose.Add(
ss.subscribei_metadata()
.Select(upd => upd.all.ToDictionary(i => i.SecurityKey, i => i.Strategy))
.Subscribe(t => {
_deleted_synthetics = new HashSet<uint>(t.Where(kv => kv.Value.Deleted).Select(kv => kv.Key));
_bus.post(SparkTags.SyntheticstrategiesTag, t);
}));
new DataPersistor(_bus);
Task.Run(run);
}
[Export]
MDConsumer consumer => _consumer;
public void OnCompleted() { }
public void OnError(Exception error) => Logger.error(Subsystem.gen, error.ToString());
public void OnNext(List<SecurityAndHandle> values) {
if (values.Count > 0) {
var temp = _exchange_sec_map.ToDictionary(k => k.Key, k => k.Value);
foreach (var v in values) {
temp.Add(v.security.Id, new SecurityMD(v.security, v.handle));
}
_exchange_sec_map = temp;
}
}
public void Dispose() => Disposable.dispose(_dispose);
async Task run() {
int exch_sec_count = 0, deleted_synth_count = 0;
while (true) {
var exch = _exchange_sec_map;
var deleted_synths = _deleted_synthetics;
if (exch.Count > exch_sec_count || deleted_synths.Count != deleted_synth_count) {
exch_sec_count = exch.Count;
deleted_synth_count = deleted_synths.Count;
exch = exch.Where(kv => !deleted_synths.Contains(kv.Key)).ToDictionary();
try {
Logger.log(Level.Info, Subsystem.gen, String.Format("MDSource publishing {0} securities", exch.Count));
_bus.post(SparkTags.SecuritiesTag, exch);
} catch (Exception e) {
Logger.error(Subsystem.md, $"Error in publish_securities: {e}");
}
}
await Task.Delay(TimeSpan.FromSeconds(1));
}
}
}
}
@@ -0,0 +1,39 @@
using mbts;
using mbts.ui;
using System;
using System.ComponentModel.Composition;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using bts.api;
using mbts.spark;
using bts.spark;
using bts.api.orderman;
using System.Windows;
namespace bts
{
[Export, Export(typeof(IShellDaemon))]
class ModifyOrderDaemon : IShellDaemon, IDisposable {
readonly IBus _bus;
IDisposable _dispose;
[ImportingConstructor]
public ModifyOrderDaemon(IBus bus) {
_bus = bus;
//_dispose = Disposable.Create(
// bus.subscribe(SparkTags.ShowModifyOrderTag).Subscribe(show_modify_order)
//);
_dispose = null;
}
void show_modify_order(OrderRecordImmutable record) {
// lauch the order ticket
}
public void Dispose() {
Disposable.dispose(ref _dispose);
}
}
}
@@ -0,0 +1,70 @@
using bts.api;
using bts.api.core;
using bts.api.orderman;
using bts.spark;
using mbts;
using mbts.spark;
using mbts.ui;
using mbts.ui.spark;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Reactive.Linq;
using System.Windows;
namespace bts.shell {
[Export(typeof(IShellDaemon))]
class OrderTicketDaemon : IShellDaemon {
readonly IBus _bus;
readonly OrdersModel _model;
readonly ErrorReporter _error_reporter;
IReadOnlyDictionary<uint, SecurityMD> _md_map;
TableUpdate<OrderRecordImmutable, uint> _orders;
IDisposable _dispose;
[ImportingConstructor]
public OrderTicketDaemon(IBus bus, OrdersModel model, ErrorReporter error_reporter) {
_bus = bus;
_model = model;
_error_reporter = error_reporter;
_dispose = Disposable.Create(
model.on_orders.ObserveOnDispatcher().Subscribe(o => _orders = o),
bus.subscribe(SparkTags.SecuritiesTag).ObserveOnDispatcher().Subscribe(m =>_md_map = m),
bus.subscribe(SparkTags.ShowOrderTicketFromSecurityTag).ObserveOnDispatcher().Subscribe(_show_order_ticket),
bus.subscribe(SparkTags.ShowOrderTicketTag).ObserveOnDispatcher().Subscribe(_show_order_ticket),
bus.subscribe(SparkTags.ShowModifyOrderTag).ObserveOnDispatcher().Subscribe(_show_modify_order)
);
}
public void Dispose() =>
Disposable.dispose(ref _dispose);
static void _show_order_window(Window window) =>
window.Show(-200, -160, true);
void _show_order_ticket(SecurityMD smd) =>
_show_order_window(new OrderTicket {
DataContext = new NewOrderTicketVM(_model, smd,
Observable.Return(_model.factory.default_ladder_settings(smd.security)))
});
void _show_order_ticket((OrderDefinitionImmutable def, double price, uint size) ops) {
if (_md_map.TryGetValue(ops.def.SecurityKey, out SecurityMD smd))
_show_order_window(new OrderTicket {
DataContext = new NewOrderTicketVM(_model, smd, ops.def, ops.price, ops.size,
Observable.Return(_model.factory.default_ladder_settings(smd.security).calculator_buttons))
});
}
void _show_modify_order(uint order_key) {
if (_orders.state.TryGetValue(order_key, out OrderRecordImmutable ori) && _md_map.TryGetValue(ori.Def.SecurityKey, out SecurityMD smd)
&& (ori.HasDef && ori.Def.HasCustomDef && !(ori.Def.CustomDef.HasStop || ori.Def.CustomDef.HasStopLimit)))
_show_order_window(new OrderModificationDialog {
DataContext = new ExistingOrderTicketVM(_model,
Observable.Return(new OrderRecordTuple(ori, smd)),
Observable.Return(_model.factory.default_ladder_settings(smd.security).calculator_buttons)
)
});
}
}
}
@@ -0,0 +1,130 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using bts.api;
using mbts.spark;
using mbts.ui;
using System.ComponentModel.Composition;
using mbts;
using System.Windows;
using System.Windows.Input;
using bts.spark;
using System.Reactive.Linq;
namespace bts {
[Export, Export(typeof(IShellDaemon))]
class SecurityPickerDaemon : IShellDaemon, IDisposable {
readonly IBus _bus;
IDisposable _dispose;
[ImportingConstructor]
public SecurityPickerDaemon(IBus bus) {
_bus = bus;
_dispose = Disposable.Create(
bus.subscribe(SparkTags.ShowPickOne).ObserveOnDispatcher().Subscribe(show_pick_one),
bus.subscribe(SparkTags.FilterPickOne).ObserveOnDispatcher().Subscribe(show_filtered_pick_one),
bus.subscribe(SparkTags.ShowPickMultiple).ObserveOnDispatcher().Subscribe(show_pick_multiple),
bus.subscribe(SparkTags.ShowAndEditPickMultiple).ObserveOnDispatcher().Subscribe(show_and_edit_pick_multiple)
);
}
void show_pick_one(PartialCommand<SecurityMD> message) {
var vm = new ContractPickerModel(_bus, false, null);
var view = new ContractPickerView(vm);
Window picker = new Window {
Content = view,
Title = $"Select a Security for {message.title}",
Icon = message.icon,
Height = view.Height,
Width = view.Width
};
picker.Style = picker.TryFindResource("BTSWindow") as Style;
view.Height = Double.NaN;
view.Width = Double.NaN;
vm.ok_action = () => {
picker.Close();
message.complete(vm.result).execute(_bus);
};
picker.move_to_mouse();
picker.Show();
}
void show_filtered_pick_one((PartialCommand<SecurityMD> message, SecurityCriteria global_filter) message_and_filter) {
var vm = new ContractPickerModel(_bus, false, null, message_and_filter.global_filter);
var view = new ContractPickerView(vm);
Window picker = new Window {
Content = view,
Title = $"Select a Security for {message_and_filter.message.title}",
Icon = message_and_filter.message.icon,
Height = view.Height,
Width = view.Width
};
picker.Style = picker.TryFindResource("BTSWindow") as Style;
view.Height = Double.NaN;
view.Width = Double.NaN;
vm.ok_action = () => {
picker.Close();
message_and_filter.message.complete(vm.result).execute(_bus);
};
picker.move_to_mouse();
picker.Show();
}
void show_pick_multiple(PartialCommand<SecurityCriteria> message) {
var vm = new ContractPickerModel(_bus, true, null);
var view = new ContractPickerView(vm);
Window picker = new Window
{
Content = view,
Title = $"Select Securities for {message.title}",
Icon = message.icon,
Height = view.Height,
Width = view.Width,
};
picker.Style = picker.TryFindResource("BTSWindow") as Style;
view.Height = Double.NaN;
view.Width = Double.NaN;
vm.ok_action = () => {
picker.Close();
message.complete(vm.result_criteria).execute(_bus);
};
picker.move_to_mouse();
picker.Show();
}
void show_and_edit_pick_multiple((PartialCommand<SecurityCriteria> message, SecurityCriteria existing_criteria) message_and_data) {
var vm = new ContractPickerModel(_bus, true, message_and_data.existing_criteria);
var view = new ContractPickerView(vm);
Window picker = new Window {
Content = view,
Title = $" {message_and_data.message.title} security selection",
Icon = message_and_data.message.icon,
Height = view.Height,
Width = view.Width,
};
picker.Style = picker.TryFindResource("BTSWindow") as Style;
view.Height = Double.NaN;
view.Width = Double.NaN;
vm.ok_action = () => {
picker.Close();
message_and_data.message.complete(vm.result_criteria).execute(_bus);
};
picker.move_to_mouse();
picker.Show();
}
public void Dispose() {
Disposable.dispose(ref _dispose);
}
}
}
@@ -7,12 +7,16 @@ using System.Text;
using System.Threading.Tasks;
using bts.api.user;
using bts.api.persistence;
using bts.support;
using bts.api.orderman;
using bts.api.synthetic;
using bts.api.diagnostic;
using bts.api.admin;
namespace Spark
{
public class ShellServices
{
[Export]
public static ServiceContext context { get; } = new ServiceContext();
@@ -25,5 +29,17 @@ namespace Spark
[Export]
public PersistenceService generic_settings => context.locate<PersistenceService>();
[Export]
public ErrorReportService error_service => context.locate<ErrorReportService>();
[Export]
public OrderService order_service => context.locate<OrderService>();
[Export]
public AdminService admin_service => context.locate<AdminService>();
[Export]
public SyntheticSecurityService synthetic_security_service => context.locate<SyntheticSecurityService>();
}
}
+38
View File
@@ -0,0 +1,38 @@
using mbts.ui.shell;
using System.Windows.Input;
using System.Windows.Media;
namespace mbts.ui {
interface IMenuItemVM {
string name { get; }
string group { get; }
ImageSource icon { get; }
ICommand command { get; }
object parameter { get; }
}
class MenuItemVM : ViewModelBase, IMenuItemVM {
object _parameter;
public MenuItemVM(string name, ICommand command, ImageSource icon = null, string group = null, object parameter = null) {
this.name = name;
this.group = group;
this.command = command;
this.icon = icon;
_parameter = parameter;
}
public string name { get; }
public string group { get; }
public ImageSource icon { get; }
public ICommand command { get; }
public object parameter {
get => _parameter;
set {
_parameter = value;
command.TryRaiseCanExecuteChanged();
RaisePropertyChanged();
}
}
}
}
File renamed without changes.

Before

Width:  |  Height:  |  Size: 326 B

After

Width:  |  Height:  |  Size: 326 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 326 B

After

Width:  |  Height:  |  Size: 326 B

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -10,8 +10,8 @@ namespace mbts.ui
{
public class Icons
{
static readonly string base_uri = "pack://application:,,,/uicore/Images/Icons/";
private static ResourceDictionary _resources = (ResourceDictionary)Application.LoadComponent(new Uri("/uicore/Images/Vector/Icons.xaml", UriKind.RelativeOrAbsolute));
static readonly string base_uri = "pack://application:,,,/Images/Icons/";
private static ResourceDictionary _resources = (ResourceDictionary)Application.LoadComponent(new Uri("/Images/Vector/Icons.xaml", UriKind.RelativeOrAbsolute));
private static Uri uri(string filename) {
return new Uri(base_uri + filename);
@@ -30,26 +30,22 @@ namespace mbts.ui
public static ImageSource Sheets { get { return (DrawingImage)_resources["Sheets"]; } }
public static ImageSource Trades { get { return (DrawingImage)_resources["Trades"]; } }
public static ImageSource Depth { get { return (DrawingImage)_resources["Depth"]; } }
public static ImageSource Ladder { get { return (DrawingImage)_resources["Ladder"]; } }
public static ImageSource SheetsRed { get { return load_image("SheetsRed.png"); } }
public static ImageSource SheetsGreen { get { return load_image("SheetsGreen.png"); } }
public static ImageSource Spreads { get { return (DrawingImage)_resources["Spreads"]; } }
public static ImageSource BlueSpreads { get { return load_image("BlueSpread.ico"); } }
public static ImageSource MMTN { get { return load_image("mmtn.ico"); } }
public static ImageSource Reports { get { return (DrawingImage)_resources["Reports"]; } }
public static ImageSource Risk { get { return (DrawingImage)_resources["Risk"]; } }
public static ImageSource Eye { get { return (DrawingImage)_resources["Eye"]; } }
public static ImageSource Coins { get { return (DrawingImage)_resources["Coins"]; } }
public static ImageSource Loading { get { return load_image("loading.ico"); } }
public static ImageSource DataCopy { get { return load_image("DataCopy.ico"); } }
public static ImageSource Import { get { return load_image("Import.ico"); } }
public static ImageSource Refresh { get { return load_image("Refresh.png"); } }
public static ImageSource FavoriteWindow { get { return load_image("FavoriteWindow.png"); } }
public static ImageSource RubberStamp { get { return load_image("RubberStamp.png"); } }
public static ImageSource Ticket { get { return load_image("Ticket.png"); } }
//public static ImageSource Ticket { get { return load_image("Ticket.png"); } } // replaced with AddOrders
public static ImageSource Date { get { return load_image("Date.png"); } }
public static ImageSource RFQArrows { get { return load_image("RFQArrows.png"); } }
public static ImageSource Cube3d { get { return (DrawingImage)_resources["Cube"]; /*return load_image("Cube-Molecule.png");*/ } }
public static ImageSource Algo { get { return Cube3d; } }
@@ -57,7 +53,6 @@ namespace mbts.ui
public static ImageSource Math { get { return (DrawingImage)_resources["Surface"]; } }
public static ImageSource Abacus { get { return load_image("Abacus.png"); } }
public static ImageSource Add_New { get { return load_image("Add-New.png"); } }
public static ImageSource Delete { get { return load_image("Delete.png"); } }
public static ImageSource Up_Arrow { get { return load_image("Arrowhead-Up.png"); } }
public static ImageSource Down_Arrow { get { return load_image("Arrowhead-Down.png"); } }
@@ -73,20 +68,48 @@ namespace mbts.ui
public static ImageSource Window { get { return (DrawingImage)_resources["Window"]; } }
public static ImageSource ActiveWindow { get { return (DrawingImage)_resources["ActiveWindow"]; } }
public static ImageSource Trash { get { return (DrawingImage)_resources["Trash"]; } }
public static ImageSource Trash2 { get { return (DrawingImage)_resources["Trash2"]; } }
public static ImageSource Crucible { get { return (DrawingImage)_resources["Crucible"]; } }
public static ImageSource Accounting { get { return (DrawingImage)_resources["Accounting"]; } }
public static ImageSource Add { get { return (DrawingImage)_resources["Add"]; } }
public static ImageSource AddEncircled { get { return (DrawingImage)_resources["AddEncircled"]; } }
public static ImageSource Beaker { get { return (DrawingImage)_resources["Beaker"]; } }
public static ImageSource Book { get { return (DrawingImage)_resources["Book"]; } }
public static ImageSource AddOrders { get { return (DrawingImage)_resources["AddOrders"]; } }
public static ImageSource CancelOrders { get { return (DrawingImage)_resources["CancelOrders"]; } }
public static ImageSource CancelBuys { get { return (DrawingImage)_resources["CancelBuys"]; } }
public static ImageSource CancelSells { get { return (DrawingImage)_resources["CancelSells"]; } }
public static ImageSource CancelSelected { get { return (DrawingImage)_resources["CancelSelected"]; } }
public static ImageSource LadderCancelOrders { get { return (DrawingImage)_resources["LadderCancelOrders"]; } }
public static ImageSource LadderCancelBuys { get { return (DrawingImage)_resources["LadderCancelBuys"]; } }
public static ImageSource LadderCancelSells { get { return (DrawingImage)_resources["LadderCancelSells"]; } }
public static ImageSource Synthetics { get { return (DrawingImage)_resources["Synthetics"]; } }
public static ImageSource AddSynthetic { get { return (DrawingImage)_resources["AddSynthetic"]; } }
public static ImageSource RemoveSynthetic { get { return (DrawingImage)_resources["RemoveSynthetic"]; } }
public static ImageSource ModifySynthetic { get { return (DrawingImage)_resources["ModifySynthetic"]; } }
public static ImageSource CloneSynthetic { get { return (DrawingImage)_resources["CloneSynthetic"]; } }
public static ImageSource ModifyOrder { get { return (DrawingImage)_resources["ModifyOrder"]; } }
public static ImageSource Clock { get { return (DrawingImage)_resources["Clock"]; } }
public static ImageSource Defrag { get { return (DrawingImage)_resources["Defrag"]; } }
public static ImageSource Display { get { return (DrawingImage)_resources["Display"]; } }
public static ImageSource Export => (DrawingImage)_resources["Export"];
public static ImageSource Filter { get { return (DrawingImage)_resources["Filter"]; } }
public static ImageSource FilterActive { get { return (DrawingImage)_resources["FilterActive"]; } }
public static ImageSource FilterError { get { return (DrawingImage)_resources["FilterError"]; } }
public static ImageSource Import => (DrawingImage)_resources["Import"];
public static ImageSource Knight { get { return (DrawingImage)_resources["Knight"]; } }
public static ImageSource Payment { get { return (DrawingImage)_resources["Payment"]; } }
public static ImageSource Spawn { get { return (DrawingImage)_resources["Spawn"]; } }
public static ImageSource Target { get { return (DrawingImage)_resources["Target"]; } }
public static ImageSource Tetris { get { return (DrawingImage)_resources["Tetris"]; } }
public static ImageSource ViewSettings => (DrawingImage)_resources["ViewSettings"];
public static ImageSource Wrench { get { return (DrawingImage)_resources["Wrench"]; } }
public static ImageSource Support => (DrawingImage)_resources["SupportIcon"];
}
}
File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 245 B

After

Width:  |  Height:  |  Size: 245 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 448 B

After

Width:  |  Height:  |  Size: 448 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 442 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 399 B

After

Width:  |  Height:  |  Size: 399 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 750 B

After

Width:  |  Height:  |  Size: 750 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 677 B

After

Width:  |  Height:  |  Size: 677 B

File renamed without changes.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 107 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

File renamed without changes.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

+778
View File
@@ -0,0 +1,778 @@
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mbts="clr-namespace:mbts.ui">
<DrawingImage x:Key="FavoritesGold">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Geometry="M1540.22,2082.07L1546.95,2102.78 1568.73,2102.78 1551.11,2115.58 1557.84,2136.29 1540.22,2123.49 1522.6,2136.29 1529.33,2115.58 1511.71,2102.78 1533.49,2102.78 1540.22,2082.07z">
<GeometryDrawing.Pen>
<Pen Thickness="1" Brush="Black" />
</GeometryDrawing.Pen>
<GeometryDrawing.Brush>
<SolidColorBrush Color="#ffd932" />
</GeometryDrawing.Brush>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="FavoritesWhite">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Geometry="M1540.22,2082.07L1546.95,2102.78 1568.73,2102.78 1551.11,2115.58 1557.84,2136.29 1540.22,2123.49 1522.6,2136.29 1529.33,2115.58 1511.71,2102.78 1533.49,2102.78 1540.22,2082.07z">
<GeometryDrawing.Pen>
<Pen Thickness="1" Brush="Black" />
</GeometryDrawing.Pen>
<GeometryDrawing.Brush>
<SolidColorBrush Color="#ffd932" />
</GeometryDrawing.Brush>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Window">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Geometry="
M 32.868601,3.8869994 C31.026201,3.8869996 29.534,5.3791947 29.534,7.2190399 29.534,9.0588851 31.026201,10.553 32.868601,10.553 34.7085,10.553 36.202,9.0588851 36.202,7.2190399 36.202,5.3791947 34.7085,3.8869996 32.868601,3.8869994z
M 42.868601,3.8869994 C41.026201,3.8869996 39.534,5.3791947 39.534,7.2190399 39.534,9.0588851 41.026201,10.553 42.868601,10.553 44.7085,10.553 46.202,9.0588851 46.202,7.2190399 46.202,5.3791947 44.7085,3.8869996 42.868601,3.8869994z
M 52.868601,3.8869994 C51.026201,3.8869996 49.534,5.3791947 49.534,7.2190399 49.534,9.0588851 51.026201,10.553 52.868601,10.553 54.7085,10.553 56.202,9.0588851 56.202,7.2190399 56.202,5.3791947 54.7085,3.8869996 52.868601,3.8869994z
M5.2010002,14.812L5.2010002,43.573997 56.098,43.573997 56.098,14.812z
M0,0L63.999001,0 63.999001,48.792999 0,48.792999z">
<GeometryDrawing.Pen>
<Pen Thickness="1" Brush="Black" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="ActiveWindow">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="
M 32.868601,3.8869994 C31.026201,3.8869996 29.534,5.3791947 29.534,7.2190399 29.534,9.0588851 31.026201,10.553 32.868601,10.553 34.7085,10.553 36.202,9.0588851 36.202,7.2190399 36.202,5.3791947 34.7085,3.8869996 32.868601,3.8869994z
M 42.868601,3.8869994 C41.026201,3.8869996 39.534,5.3791947 39.534,7.2190399 39.534,9.0588851 41.026201,10.553 42.868601,10.553 44.7085,10.553 46.202,9.0588851 46.202,7.2190399 46.202,5.3791947 44.7085,3.8869996 42.868601,3.8869994z
M 52.868601,3.8869994 C51.026201,3.8869996 49.534,5.3791947 49.534,7.2190399 49.534,9.0588851 51.026201,10.553 52.868601,10.553 54.7085,10.553 56.202,9.0588851 56.202,7.2190399 56.202,5.3791947 54.7085,3.8869996 52.868601,3.8869994z
M5.2010002,14.812L5.2010002,43.573997 56.098,43.573997 56.098,14.812z
M0,0L63.999001,0 63.999001,48.792999 0,48.792999z">
<GeometryDrawing.Pen>
<Pen Thickness="1" Brush="Black" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Trash">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M33.978,27.679999L33.978,58.098995 41.374,58.098995 41.374,27.679999z M14.841001,27.679999L14.841001,58.098995 22.237,58.098995 22.237,27.679999z M4.0320003,22.430001L52.183002,22.430001 52.183002,63.995998 4.0320003,63.995998z M15.974001,0L40.194999,0 40.194999,7.7200003 56.166999,7.7200003 56.166999,15.995 0,15.995 0,7.7200003 15.974001,7.7200003z">
<!--<GeometryDrawing.Pen>
<Pen Thickness="1" Brush="Black" />
</GeometryDrawing.Pen>-->
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Trash2">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Transparent" Geometry="M0,12.568994L23.662999,12.568994 20.910989,31.999999 2.7520113,31.999999z M8.0689915,1.6269979L8.0689915,4.6679968 15.594984,4.6679968 15.594984,1.6269979z M6.4420097,0L17.221997,0 17.221997,4.6679968 23.662999,4.6679968 23.662999,8.7949938 0,8.7949938 0,4.6679968 6.4420097,4.6679968z">
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="2"/>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Undo">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="F1M-198.67,4280.19C-197.609,4277.78 -197.035,4275.17 -197.035,4272.46 -197.035,4267.33 -199.032,4262.51 -202.665,4258.88 -206.286,4255.25 -211.107,4253.26 -216.235,4253.26 -221.365,4253.26 -226.186,4255.25 -229.811,4258.88 -232.498,4261.57 -234.282,4264.92 -235.032,4268.56L-225.835,4278.86 -252.503,4278.86 -250.373,4251.38 -241.577,4261.22C-240.214,4258.14 -238.303,4255.3 -235.844,4252.85 -230.61,4247.61 -223.644,4244.72 -216.235,4244.72 -208.822,4244.72 -201.861,4247.61 -196.627,4252.85 -191.39,4258.08 -188.503,4265.05 -188.503,4272.46 -188.503,4275.11 -188.894,4277.71 -189.617,4280.19L-198.67,4280.19z">
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Crucible">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="m 430.4375 225.625 c -1.92352 0.0276 -3.82501 0.82944 -5.1875 2.1875 L 330.0625 323 288 280.9375 c -1.38915 -1.39371 -3.34472 -2.2056 -5.3125 -2.2056 -1.96778 0 -3.92335 0.81189 -5.3125 2.2056 l -23.9375 23.9375 c -1.3844 1.38804 -2.18997 3.33646 -2.18997 5.29687 0 1.96042 0.80557 3.90884 2.18997 5.29688 l 71.3125 71.3125 c 1.38804 1.3844 3.33646 2.18997 5.29687 2.18997 1.96042 0 3.90884 -0.80557 5.29688 -2.18997 l 4.34375 -4.34375 19.59375 -19.59375 100.5 -100.5 c 1.3844 -1.38804 2.18997 -3.33646 2.18997 -5.29688 0 -1.96041 -0.80557 -3.90883 -2.18997 -5.29687 l -23.9375 -23.9375 c -1.41413 -1.40955 -3.40982 -2.21706 -5.40625 -2.1875 z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Cube">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M37.063741,37.405188L33.240929,50.771959 33.345182,50.829412C33.743126,51.061163,34.109612,51.337603,34.437061,51.651468L34.468327,51.682901 44.707291,44.003126 44.641921,43.880777C44.347813,43.295671,44.183001,42.63962,44.183001,41.946699L44.185978,41.833834z M24.591099,31.982382L10.519234,39.24213 10.504738,39.424831C10.479679,39.661278,10.436295,39.892527,10.375957,40.117252L10.337856,40.24584 10.451912,40.307037C10.495525,40.332783,10.538376,40.360497,10.58033,40.390192L26.361021,51.547636 26.448517,51.467699C27.339916,50.69132,28.485014,50.17779,29.750544,50.054647L30.015249,50.035364 34.145618,35.590685 29.192999,32.51112C29.04261,32.417593,28.908485,32.31176,28.79232,32.197899L28.716364,32.117622 28.685419,32.139805C28.132467,32.49791 27.465902,32.706999 26.748449,32.706999 26.030621,32.706999 25.363836,32.49791 24.810755,32.139805z M28.780092,24.040133L28.448082,26.492748 28.685419,26.630915C29.607006,27.227547 30.212999,28.238197 30.212999,29.385599 30.212999,29.614918 30.188759,29.838802 30.142603,30.055031L30.080193,30.287708 30.111809,30.297695C30.268356,30.353413,30.424189,30.42791,30.574446,30.521399L34.837221,33.172018 35.327473,31.457518C35.410911,31.165865,35.525216,30.895145,35.662153,30.652515L35.756067,30.497255 35.710442,30.474535C33.991901,29.570229,32.844,27.933699,32.844,26.065052L32.845716,26.006275z M53.770291,20.119031L44.688253,25.319921 44.720247,25.537884C44.740581,25.711212 44.750998,25.887079 44.750998,26.065052 44.750998,28.912514 42.084275,31.221001 38.797749,31.221001L38.67025,31.218208 38.672958,31.305962C38.671358,31.615515,38.625373,31.944508,38.53014,32.277802L37.755445,34.986586 44.966217,39.470285 44.977812,39.451984C45.814164,38.264851 47.230547,37.483999 48.837201,37.483999 49.078189,37.483999 49.314904,37.501568 49.546028,37.535442L49.656656,37.554392 54.505396,20.597714 54.402527,20.541037C54.290171,20.475618,54.180146,20.40689,54.0726,20.334991z M9.6452522,14.786494L9.5807686,14.857854C9.0475883,15.420187,8.3894768,15.871748,7.6484566,16.172216L7.5149994,16.222663 7.5149994,34.615192 7.5420074,34.625397C8.4930382,35.010883,9.2904701,35.676405,9.8216705,36.51416L9.9140587,36.668142 23.306246,29.758877 23.300888,29.725224C23.289059,29.61356 23.282999,29.500257 23.282999,29.385599 23.282999,27.893976 24.307062,26.633465 25.717823,26.213213L26.001564,26.143343 26.439465,22.908201z M25.594164,6.962996L10.989891,11.757046 10.982574,11.849259C10.963779,12.026639,10.935814,12.201424,10.899147,12.373173L10.896881,12.382581 26.821791,20.083639 28.28179,9.2974239 28.12504,9.2381914C27.074772,8.8124379,26.207533,8.0535914,25.667171,7.0996943z M34.637348,6.8116302L34.599276,6.8923512C33.894737,8.2938632,32.502018,9.3174334,30.841724,9.5606082L30.738474,9.5731842 29.162455,21.21555 33.69524,23.407539 33.705906,23.391473C34.750082,21.903184 36.639784,20.909001 38.797749,20.909001 40.441011,20.909001 41.929324,21.486123 43.006821,22.41919L43.020344,22.431472 51.760321,17.426437 51.737371,17.368303C51.521266,16.762437 51.403998,16.112631 51.403998,15.436536 51.403998,14.921415 51.472072,14.421554 51.600069,13.944759L51.681425,13.670171z M30.077951,0C32.588049,0,34.668222,1.7676992,35.036192,4.0752702L35.064489,4.2886443 52.961684,11.489869 53.021899,11.423252C54.161165,10.222043 55.804663,9.4679997 57.631995,9.4679992 61.070987,9.4680003 63.858998,12.139764 63.858998,15.436536 63.858998,18.733305 61.070987,21.405001 57.631995,21.405001L57.456546,21.40075 52.402265,39.080206 52.428996,39.108406C53.093061,39.879898 53.492,40.868822 53.492,41.946699 53.492,44.410421 51.407745,46.407999 48.837201,46.407999 48.033874,46.407999 47.278115,46.212923 46.618644,45.869505L46.615751,45.867823 35.872695,53.925859 35.950705,54.189234C36.069708,54.632677 36.132998,55.097586 36.132998,55.5767 36.132998,58.641745 33.540598,61.126001 30.342699,61.126001 27.144098,61.126001 24.550999,58.641745 24.550999,55.5767 24.550999,55.193407 24.591516,54.819208 24.668669,54.457815L24.711109,54.281561 8.605793,42.894129C8.5577812,42.860109,8.5120659,42.824305,8.4686737,42.786901L8.4553757,42.77429 8.3729744,42.833338C7.5921974,43.338846 6.6510086,43.634001 5.6380043,43.634001 2.935627,43.634001 0.74499893,41.535135 0.74499893,38.9454 0.74499893,36.841322 2.1911545,35.061296 4.1829567,34.467758L4.2889977,34.438908 4.2889977,16.456114 4.1295319,16.420828C1.7547989,15.835048 0,13.768469 0,11.309781 0,8.3958501 2.4649048,6.0340006 5.5053978,6.0339997 7.5959015,6.0340006 9.4142189,7.1503434 10.346516,8.7949429L10.425873,8.9434187 25.113558,4.1221313 25.119768,4.0752702C25.48749,1.7676992,27.566404,0,30.077951,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Risk">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M3.3500004,28.921999L16.410999,28.921999 16.410999,29.396999 16.410999,32.959999 16.410999,38.421999 25.514,38.421999 25.514,42.458 25.495,42.458 25.495,47.602999 34.698,47.602999 34.698,51.640999 25.495,51.640999 25.495,51.671 21.458,51.671 21.458,42.458 16.410999,42.458 12.453001,42.458 12.374001,42.458 12.374001,32.959999 3.3500004,32.959999z M54.794001,20.069L59.39695,23.324425 64,26.580851 59.39695,29.837375 54.794001,33.094 54.794001,30.650999 33.583,30.650999 33.583,22.698998 54.794001,22.698998z M14.7162,0.3409996L24.9141,0.3409996C25.97705,0.3409996,26.865667,1.1746159,27.071213,2.1986313L27.086924,2.3030968 27.124624,2.3546333C27.940995,3.4717503 29.881758,6.1571293 30.565413,7.3636971 30.565413,7.3636971 34.096944,13.338465 34.877442,15.061705L34.890623,15.092 40.170837,15.092C41.324416,15.092 42.257998,16.195044 42.257998,17.396999 42.257998,18.600256 41.324416,19.702 40.170837,19.702L33.450961,19.702C32.370606,19.702,31.482553,18.733671,31.375766,17.621177L31.37387,17.581701 29.230907,13.962816 22.261399,18.123934 26.40747,22.377669C27.150276,23.141019,27.230264,24.306093,26.654201,25.155003L26.643522,25.169146 26.636381,25.286112C26.628118,25.36014,26.616044,25.434453,26.600019,25.508835L24.851152,33.574084C24.592043,34.765377 23.418798,35.519273 22.228654,35.261475 21.03861,35.004976 20.280681,33.829283 20.53979,32.64039L22.288656,24.57524 22.309726,24.495231 17.488041,19.548167 17.480572,19.539678 17.253374,19.529043C16.366886,19.445599,15.589428,19.018761,15.078829,18.394262L15.074381,18.388281 12.282196,21.977999 12.216562,21.901865 12.1124,21.994324C11.720974,22.306216,11.1803,22.469,10.5833,22.469L2.1626606,22.469C0.96679688,22.469 0,21.817864 0,20.624998 0,19.428434 0.96679688,18.779999 2.1626606,18.779999L9.5252495,18.779999 9.3850002,18.617311 14.600033,11.548028C14.600033,11.548028,15.127697,11.125361,15.599133,10.798839L15.614553,10.78836 15.604,10.776026 24.149192,5.6036739 23.803184,4.9510002 14.7162,4.9510002C13.500099,4.9510002 12.514999,3.8623199 12.514999,2.6472778 12.514999,1.4298038 13.500099,0.3409996 14.7162,0.3409996z M34.6091,0C36.912666,0 38.780001,1.8671761 38.780001,4.1704998 38.780001,6.4739532 36.912666,8.3409996 34.6091,8.3409996 32.304335,8.3409996 30.437,6.4739532 30.437,4.1704998 30.437,1.8671761 32.304335,0 34.6091,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Reports">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M55.859353,59.282085C56.00929,59.285538,56.143475,59.392647,56.172002,59.547607L55.789193,65.810493C55.674588,66.466682,55.295579,65.802589,55.295579,65.802589L54.473962,64.431519C51.7422,68.327347 47.221295,70.881996 42.101273,70.881996 36.226228,70.881996 31.13625,67.53186 28.632329,62.638653 28.382323,62.158161 28.059378,61.686871 27.969502,61.146481 27.66084,59.337914 29.858891,59.01112 30.614098,59.864002 30.926646,60.216797 31.299044,60.827484 31.563321,61.306576 33.567227,65.081306 37.533479,67.649055 42.101273,67.649055 46.122369,67.649055 49.669251,65.651596 51.828099,62.602253L50.338567,62.323559C50.338567,62.323559,49.473847,62.210258,50.067658,61.849567L55.794392,59.287113C55.816193,59.283215,55.837933,59.28159,55.859353,59.282085z M40.764077,45.717999L43.468282,45.717999 43.468282,47.945969C44.940877,48.043633,45.939504,48.464172,46.57486,48.781933L46.850839,48.919876 45.9889,51.849625 45.591931,51.649216C44.965676,51.336708 43.994244,50.849598 42.497052,50.849598 41.307038,50.849598 40.589589,51.340611 40.589589,52.155632 40.589589,52.883549 41.269242,53.390064 43.278195,54.159683 46.150391,55.237812 47.377004,56.67535 47.377004,58.964413 47.377004,61.232674 45.806714,62.99192 43.348592,63.516731L43.348592,66.047997 40.616887,66.047997 40.616887,63.706738C39.216088,63.607735,37.791692,63.200325,36.902394,62.633808L36.672002,62.482704 37.5286,59.474827 37.945279,59.724831C38.568932,60.09864 39.856541,60.726257 41.489224,60.726257 42.825127,60.726257 43.684468,60.136341 43.684468,59.230118 43.684468,58.503498 43.274297,57.873283 41.294038,57.157166 39.122395,56.362843 36.898515,55.19091 36.898515,52.516441 36.898515,50.313221 38.372449,48.646427 40.764077,48.112602z M42.010037,40.691002C47.882275,40.691002 52.973134,44.039906 55.477063,48.93552 55.725755,49.413418 56.051247,49.888626 56.139745,50.42767 56.447038,52.237579 54.249299,52.563072 53.493916,51.708893 53.181527,51.354805 52.809136,50.742821 52.546143,50.264954 50.543599,46.492958 46.577512,43.922722 42.010037,43.922722 37.98795,43.922722 34.44249,45.919983 32.28362,48.96946L33.773167,49.248013C33.773167,49.248013,34.636472,49.363979,34.044091,49.72456L28.316394,52.28698C28.141854,52.318275,27.969985,52.199879,27.940001,52.026585L28.322789,45.767639C28.43744,45.104939,28.815036,45.774227,28.815036,45.774227L29.632752,47.140041C32.366937,43.245621,36.88775,40.691002,42.010037,40.691002z M21.804616,0L44.531026,0C48.257512,0,51.280999,3.0222199,51.280999,6.7460904L51.280999,38.274937 50.537671,37.898952C49.215222,37.269638,47.812577,36.778652,46.348977,36.444992L45.879922,36.344151 45.879922,6.7460904C45.879922,6.0039101,45.273122,5.3972201,44.531026,5.3972206L22.158713,5.3972206 21.794215,17.167999C21.794215,17.167999,21.325417,24.9519,12.747249,24.0117L5.3957184,23.8125 5.3957184,57.253899C5.3957189,57.998699,6.0024966,58.602901,6.7473038,58.602901L21.820422,58.602901 21.860354,58.884754C22.115357,60.533066,22.574946,62.114872,23.212727,63.604115L23.393945,64 6.7473038,64C3.0207885,64,2.9307267E-07,60.980499,0,57.253899L0,23.0051 2.6718498,20.1863 2.6743804,20.1094 16.677035,5.3972206 16.637936,5.3972206 12.89565,9.3464394 16.817534,5.1914101 16.872334,5.1914101 16.997233,5.0612788 17.007634,5.0612788z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Spreads">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="F1M70.546875,54.3758316040039L77.484375,54.3758316040039 77.484375,89.0633316040039 70.546875,89.0633316040039 70.546875,54.3758316040039z M48.5625,54.3758316040039L65.90625,71.7195816040039 48.5625,89.0633316040039 48.5625,75.1883316040039 8.109375,75.1883316040039 8.109375,68.2508316040039 48.5625,68.2508316040039 48.5625,54.3758316040039z M37.03125,19.6883316040039L37.03125,33.5633316040039 77.484375,33.5633316040039 77.484375,40.5008316040039 37.03125,40.5008316040039 37.03125,54.3758316040039 19.6875,37.0320816040039 37.03125,19.6883316040039z M8.109375,19.6883316040039L15.046875,19.6883316040039 15.046875,54.3758316040039 8.109375,54.3758316040039 8.109375,19.6883316040039z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Depth">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M0,27.006001L37.806999,27.006001 37.806999,31.806 0,31.806z M0,18.003L37.806999,18.003 37.806999,22.806 0,22.806z M0,8.9999999L37.806999,8.9999999 37.806999,13.803 0,13.803z M0,0L37.806999,0 37.806999,4.8030009 0,4.8030009z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Ladder" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M -2.7407407 21.999952 V 25 H 11.37037 v -3.000048 z m 0 -4.999952 v 2.999952 H 11.37037 V 17 Z m 0 -5 v 3 H 11.37037 v -3 z m 0 -5 v 3 H 11.37037 V 7 Z m -1 -7 c 0.552 0 1.0810413 0.45297098 1 1 V 5 H 11.37037 V 1 c 0 -0.5529995 0.448 -1 1 -1 0.552 0 1 0.4470005 1 1 0 11.544484 0 19.62158 0 30 0 0.553 -0.448 1 -1 1 -0.552 0 -0.918958 -0.45297 -1 -1 V 27 H -2.7407407 v 4 c 0 0.553 -0.448 1 -1 1 -0.552 0 -1 -0.447 -1 -1 0 -11.54448 0 -19.621581 0 -30 0 -0.5529995 0.448 -1 1 -1 z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Trades">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M50.14375,33.389126C50.416863,33.394688,50.653496,33.587773,50.705998,33.864617L50.015995,45.114388C49.810295,46.291462,49.130394,45.097489,49.130394,45.097489L47.65659,42.640538C42.747776,49.635197 34.633152,54.221001 25.433924,54.221001 14.884193,54.221001 5.7437552,48.204125 1.2449617,39.419205 0.80087067,38.552021 0.21358696,37.705738 0.052086769,36.736958 -0.49735315,33.490925 3.4507786,32.901036 4.8049124,34.432404 5.3674143,35.067692 6.034036,36.16407 6.5079177,37.026051 10.106778,43.799416 17.2321,48.413819 25.433924,48.413819 32.656544,48.413819 39.026364,44.826695 42.903977,39.351506L40.229367,38.854115C40.229367,38.854115,38.677464,38.647118,39.742466,37.996033L50.024895,33.398526C50.064972,33.391365,50.104733,33.388333,50.14375,33.389126z M23.030291,9.0310004L27.889918,9.0310004 27.889918,13.028299C30.539786,13.205498,32.324932,13.958096,33.464161,14.528294L33.964176,14.775793 32.417435,20.038878 31.706417,19.68068C30.579987,19.11958 28.839241,18.244583 26.149073,18.244583 24.006916,18.244583 22.723183,19.122181 22.723183,20.590876 22.723183,21.894272 23.943314,22.804369 27.551308,24.187165 32.706444,26.124659 34.911,28.702853 34.911,32.817341 34.911,36.892929 32.090527,40.05172 27.673611,40.989117L27.673611,45.540001 22.767485,45.540001 22.767485,41.330414C20.252919,41.155815,17.695551,40.424118,16.101811,39.404721L15.683999,39.137619 17.221739,33.731438 17.969059,34.180634C19.088988,34.851235 21.402748,35.97873 24.340325,35.97873 26.734886,35.97873 28.276728,34.921635 28.276728,33.291336 28.276728,31.986641 27.547409,30.853846 23.986016,29.57255 20.083815,28.144253 16.095511,26.04406 16.095511,21.239174 16.095511,17.280985 18.737379,14.291395 23.030291,13.329098z M25.268765,0C35.819447,2.7347414E-07 44.961449,6.0155495 49.458798,14.804573 49.902695,15.669173 50.490094,16.516972 50.651287,17.48427 51.198281,20.734265 47.255726,21.318962 45.901341,19.789065 45.336346,19.153567 44.669552,18.051968 44.19566,17.19517 40.5957,10.421881 33.473275,5.8072398 25.268765,5.8072393 18.047545,5.8072398 11.678013,9.3918336 7.8003562,14.867073L10.474627,15.367072C10.474627,15.367072,12.026909,15.574172,10.962921,16.223872L0.67933281,20.826762C0.36037083,20.880062,0.057029126,20.669165,0.00099972012,20.354063L0.69093342,9.1118043C0.89552094,7.9296158,1.5738537,9.124924,1.5738539,9.124924L3.0452772,11.583379C7.9566038,4.584462,16.073666,2.7347414E-07,25.268765,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Sheets" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M22.1575,13.53399L21.794301,25.304994C21.794301,25.304994,21.3242,33.088695,12.747401,32.148692L5.3958107,31.949492 5.3958107,65.390895C5.3958107,66.135493,6.0026208,66.7391,6.7473808,66.7391L44.5313,66.7391C45.2734,66.7391,45.8802,66.135493,45.8802,65.390895L45.8802,14.883091C45.8802,14.140891,45.2734,13.53399,44.5313,13.53399z M21.804701,8.1369996L44.5313,8.1369996C48.257802,8.1370001,51.279999,11.15899,51.279999,14.883091L51.279999,65.390895C51.279999,69.117496,48.257802,72.136996,44.5313,72.136996L6.7473808,72.136996C3.0208105,72.136996,5.8073994E-07,69.117496,0,65.390895L0,31.142392 2.6718808,28.322993 2.6745006,28.246392 16.6771,13.53399 16.638001,13.53399 12.8945,17.483192 16.816401,13.328391 16.872401,13.328391 16.9961,13.19799 17.0078,13.19799z M30.352,0L55.255002,0 60.581002,0 60.581002,4.747 60.581002,55.207999 55.255002,55.207999 55.255002,4.747 30.352,4.747z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Surface">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="m 127.71875,0.03125 c 1.96953,0.68706766 3.77873,1.728511 5.53125,2.84375 5.68444,-0.1664634 11.35972,0.1351305 17.03125,0.46875 -1.73194,-1.1492389 -3.57847,-2.1023993 -5.53125,-2.8125 -5.6651,-0.45913017 -11.34995,-0.58354857 -17.03125,-0.5 z m -4.25,0.125 c -5.70361,0.2336956 -11.37548,0.81394241 -17.03125,1.5625 1.95847,0.6900238 3.78385,1.7005175 5.53125,2.8125 C 117.61899,3.7613446 123.30363,3.2513106 129,3 127.28567,1.8094865 125.39256,0.94326338 123.46875,0.15625 z M 149,0.90625 c 1.96418,0.6694319 3.78573,1.7017145 5.53125,2.8125 5.71276,0.5944911 11.3908,1.4529283 17.03125,2.53125 C 169.85207,5.0455955 167.95676,4.1939604 166.03125,3.40625 160.39919,2.2891664 154.71106,1.4856327 149,0.90625 z m -46.8125,1.4375 C 96.464888,3.3096165 90.767826,4.4520829 85.15625,5.9375 87.106815,6.6380546 88.941831,7.6391195 90.6875,8.75 96.310308,7.3225043 101.99157,6.1139557 107.71875,5.1875 106.00019,4.0048872 104.11138,3.1307925 102.1875,2.34375 z m 32.46875,1.5 c 2.00275,1.4247295 3.75993,3.1494432 5.53125,4.84375 5.68351,-0.080003 11.36274,0.089238 17.03125,0.5 -1.73044,-1.7529327 -3.58348,-3.3699033 -5.53125,-4.875 -5.66508,-0.4641114 -11.35053,-0.55229 -17.03125,-0.46875 z m -4.28125,0.125 C 124.103,4.2953783 119.00738,4.7504024 113.34375,5.5 c 1.99941,1.4415661 3.79164,3.1353901 5.53125,4.875 5.65135,-0.7706117 11.33386,-1.2798945 17.03125,-1.53125 -1.66132,-1.8295873 -3.58341,-3.3698478 -5.53125,-4.875 z m 39.9375,0.34375 c 1.96346,0.6759081 3.78484,1.7011488 5.53125,2.8125 5.74468,1.2638733 11.4064,2.8505892 17.03125,4.5625 -1.72987,-1.168721 -3.60534,-2.0558794 -5.53125,-2.84375 C 181.73627,7.0795573 176.0521,5.5785891 170.3125,4.3125 z m -14.375,0.375 c 1.9717,1.4743322 3.79243,3.136185 5.53125,4.875 5.71797,0.542825 11.39215,1.453188 17.03125,2.53125 -1.6913,-1.79287 -3.58414,-3.3704114 -5.53125,-4.875 C 167.33901,6.0657565 161.63964,5.35834 155.9375,4.6875 z m -46.84375,1.46875 c -5.72932,0.9221197 -11.402883,2.1554082 -17.03125,3.5625 1.99347,1.451281 3.791265,3.135015 5.53125,4.875 5.62016,-1.451631 11.30209,-2.635724 17.03125,-3.5625 -1.69439,-1.7852366 -3.54058,-3.4272419 -5.53125,-4.875 z M 80.90625,7.0625 c -5.768034,1.593637 -11.417957,3.561289 -17.03125,5.625 1.930762,0.74325 3.819326,1.676529 5.53125,2.84375 5.568779,-2.194858 11.293752,-3.937501 17.03125,-5.625 C 84.697913,8.7506893 82.833288,7.8508336 80.90625,7.0625 z m 96.3125,1.03125 c 2.01998,1.5283684 3.9853,3.332564 5.53125,4.875 5.75001,1.241656 11.41327,2.827536 17.03125,4.5625 -1.70386,-1.770251 -3.54256,-3.428678 -5.53125,-4.875 -5.59469,-1.822363 -11.3081,-3.215876 -17.03125,-4.5625 z M 141.5625,10.1875 c 1.98812,2.171216 3.79154,4.502672 5.53125,6.875 5.68335,-0.07635 11.3631,0.08322 17.03125,0.5 -1.70296,-2.41177 -3.58181,-4.690977 -5.53125,-6.90625 -5.82598,-0.440889 -11.98586,-0.537879 -17.03125,-0.46875 z m -4.25,0.125 c -5.69916,0.210199 -11.37949,0.783222 -17.03125,1.53125 1.96864,2.199545 3.78641,4.526916 5.53125,6.90625 5.65033,-0.779208 11.33395,-1.279899 17.03125,-1.53125 -1.7175,-2.400101 -3.58197,-4.691155 -5.53125,-6.90625 z m -49.5,0.5625 c -5.756209,1.627414 -11.443914,3.488666 -17.03125,5.625 1.986252,1.443163 3.797302,3.109802 5.53125,4.84375 C 81.914775,19.260145 87.586406,17.35867 93.34375,15.75 91.661607,13.944308 89.760517,12.380286 87.8125,10.875 z m 75.03125,0.15625 c 1.99219,2.183637 3.78522,4.525295 5.53125,6.90625 6.28774,0.687745 11.37979,1.450824 17.03125,2.53125 -1.68349,-2.427307 -3.58184,-4.691013 -5.53125,-6.90625 -5.63506,-1.107989 -11.31933,-1.943258 -17.03125,-2.53125 z M 116,12.5 c -5.73799,0.878008 -11.39825,2.174659 -17.03125,3.5625 2.03956,2.148921 3.76403,4.56042 5.5625,6.90625 5.61994,-1.453285 11.29946,-2.648737 17.03125,-3.5625 C 119.8176,17.015603 118.00451,14.67882 116,12.5 z m -56.40625,1.84375 c -5.792814,2.278458 -11.419014,4.940887 -17.03125,7.625 1.967004,0.694041 3.777949,1.728013 5.53125,2.84375 5.58415,-2.744879 11.247417,-5.328478 17.03125,-7.625 -1.725645,-1.141384 -3.572016,-2.162277 -5.53125,-2.84375 z M 184.125,14.4375 c 2.02152,2.155746 3.78605,4.526439 5.53125,6.90625 5.75343,1.228401 11.41327,2.827536 17.03125,4.5625 C 205.01516,23.467587 203.10649,21.216187 201.15625,19 195.55578,17.209943 189.86603,15.703904 184.125,14.4375 z m -89.40625,2.78125 c -5.757378,1.612569 -11.421181,3.531225 -17.03125,5.59375 2.013414,2.164294 3.785804,4.526096 5.53125,6.90625 C 88.826875,27.652066 94.492577,25.733692 100.25,24.125 98.572893,21.691803 96.66853,19.434409 94.71875,17.21875 z m -28.1875,0.9375 c -5.809395,2.239258 -11.434051,4.908712 -17.03125,7.625 1.996367,1.448111 3.791108,3.134858 5.53125,4.875 C 60.587618,27.843081 66.305928,25.370353 72.0625,23 70.325483,21.271546 68.515383,19.599256 66.53125,18.15625 z m 81.9375,0.90625 C 150.4643,21.946692 152.27759,24.946629 154,28 c 5.68473,-0.186058 11.35951,0.135118 17.03125,0.46875 -1.70966,-3.061344 -3.58704,-6.02118 -5.53125,-8.9375 -5.66815,-0.423667 -11.34913,-0.552311 -17.0Line truncated
<GeometryDrawing.Pen>
<Pen Brush="White" Thickness="2" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Analytics">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M17.9349,52.632801L13.5176,60.285198 22.3529,60.285198z M4.1452103,50.3647L4.1452103,52.622398 59.855499,52.622398 59.855499,50.3647z M17.062819,7.9790001L21.601147,36.012657 25.301687,19.424307 28.011845,37.14275 33.26696,12.41387 36.744106,37.14275 40.357449,27.929331 43.067604,37.14275 46.822746,19.489307 50.89698,37.14275 56.015999,23.676769 56.015999,42.608997 8.1710005,42.608997 8.1710005,23.135174 13.86557,31.999594z M4.1452103,3.8098803L4.1452103,45.6199 59.855499,45.6199 59.855499,3.8098803z M0,0L64,0 64,64 0,64z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Orders">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M50.14375,33.389126C50.416863,33.394688,50.653496,33.587773,50.705998,33.864617L50.015995,45.114388C49.810295,46.291462,49.130394,45.097489,49.130394,45.097489L47.65659,42.640538C42.747776,49.635197 34.633152,54.221001 25.433924,54.221001 14.884193,54.221001 5.7437552,48.204125 1.2449617,39.419205 0.80087067,38.552021 0.21358696,37.705738 0.052086769,36.736958 -0.49735315,33.490925 3.4507786,32.901036 4.8049124,34.432404 5.3674143,35.067692 6.034036,36.16407 6.5079177,37.026051 10.106778,43.799416 17.2321,48.413819 25.433924,48.413819 32.656544,48.413819 39.026364,44.826695 42.903977,39.351506L40.229367,38.854115C40.229367,38.854115,38.677464,38.647118,39.742466,37.996033L50.024895,33.398526C50.064972,33.391365,50.104733,33.388333,50.14375,33.389126z M23.030291,9.0310004L27.889918,9.0310004 27.889918,13.028299C30.539786,13.205498,32.324932,13.958096,33.464161,14.528294L33.964176,14.775793 32.417435,20.038878 31.706417,19.68068C30.579987,19.11958 28.839241,18.244583 26.149073,18.244583 24.006916,18.244583 22.723183,19.122181 22.723183,20.590876 22.723183,21.894272 23.943314,22.804369 27.551308,24.187165 32.706444,26.124659 34.911,28.702853 34.911,32.817341 34.911,36.892929 32.090527,40.05172 27.673611,40.989117L27.673611,45.540001 22.767485,45.540001 22.767485,41.330414C20.252919,41.155815,17.695551,40.424118,16.101811,39.404721L15.683999,39.137619 17.221739,33.731438 17.969059,34.180634C19.088988,34.851235 21.402748,35.97873 24.340325,35.97873 26.734886,35.97873 28.276728,34.921635 28.276728,33.291336 28.276728,31.986641 27.547409,30.853846 23.986016,29.57255 20.083815,28.144253 16.095511,26.04406 16.095511,21.239174 16.095511,17.280985 18.737379,14.291395 23.030291,13.329098z M25.268765,0C35.819447,2.7347414E-07 44.961449,6.0155495 49.458798,14.804573 49.902695,15.669173 50.490094,16.516972 50.651287,17.48427 51.198281,20.734265 47.255726,21.318962 45.901341,19.789065 45.336346,19.153567 44.669552,18.051968 44.19566,17.19517 40.5957,10.421881 33.473275,5.8072398 25.268765,5.8072393 18.047545,5.8072398 11.678013,9.3918336 7.8003562,14.867073L10.474627,15.367072C10.474627,15.367072,12.026909,15.574172,10.962921,16.223872L0.67933281,20.826762C0.36037083,20.880062,0.057029126,20.669165,0.00099972012,20.354063L0.69093342,9.1118043C0.89552094,7.9296158,1.5738537,9.124924,1.5738539,9.124924L3.0452772,11.583379C7.9566038,4.584462,16.073666,2.7347414E-07,25.268765,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Admin" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M18.660349,20.393C14.879011,20.393 11.806,23.468643 11.806,27.249899 11.806,31.026154 14.879011,34.103001 18.660349,34.103001 22.444386,34.103001 25.519998,31.026154 25.519998,27.249899 25.519998,23.468643 22.444386,20.393 18.660349,20.393z M50.07317,8.7561953C49.408178,8.7706149 48.735172,8.9156297 48.090648,9.2053407 45.51765,10.359123 44.36155,13.394207 45.51765,15.96858 46.671449,18.541552 49.709146,19.691384 52.283444,18.540251 54.856342,17.378819 56.012442,14.352736 54.856342,11.771862 53.990993,9.8450501 52.068145,8.7129386 50.07317,8.7561953z M15.597473,8.6000007L21.868224,8.6000007 22.20032,14.327933 22.20032,14.531032C23.236712,14.816134,24.218506,15.221134,25.133898,15.736836L25.253695,15.615635 29.675461,11.900828 34.111725,16.338337 30.296556,20.624846 30.165057,20.758946C30.683352,21.674349,31.08955,22.659951,31.378649,23.696451L31.544045,23.696451 37.293999,24.196451 37.293999,30.468565 31.566147,30.803267 31.378649,30.803267C31.08955,31.836972,30.683352,32.821373,30.165057,33.736874L30.280955,33.853974 33.993225,38.274582 29.558261,42.709496 25.271895,38.896988 25.133898,38.758988C24.218506,39.274586,23.236712,39.678185,22.20032,39.963387L22.20032,40.146988 21.868224,45.897 15.597473,45.897 15.093578,40.166485 15.093578,39.959488C14.064985,39.671688,13.084595,39.265385,12.174301,38.749787L12.040102,38.881485 7.7381763,42.709496 3.3033104,38.274582 6.9999428,33.869675 7.1522102,33.721176C6.6379356,32.807072,6.2343292,31.83057,5.9464817,30.803267L5.7499523,30.803267 0,30.468565 0,24.196451 5.7278118,23.696451 5.9464817,23.696451C6.2343292,22.665051,6.6379356,21.687248,7.1522102,20.775946L7.0128822,20.640444 3.1874237,16.338337 7.6209869,11.900828 12.027203,15.600036 12.174301,15.744536C13.084595,15.231535,14.064985,14.825334,15.093578,14.537533L15.093578,14.350033z M52.888157,0L57.259197,1.6601361 56.091211,5.7941664 56.035212,5.937414C56.665401,6.3971274,57.240894,6.9413698,57.753986,7.5533617L57.878984,7.4947021 61.949226,6.0845716 63.865797,10.35405 60.071657,12.331821 59.933659,12.393021C60.053354,13.18731,60.075457,13.977598,60.003952,14.758987L60.12245,14.803286 63.999998,16.682059 62.337223,21.053194 58.253977,19.771912 58.12108,19.721113C57.656389,20.352705,57.112095,20.928097,56.496105,21.441189L56.549604,21.556988 57.962284,25.627228 53.691446,27.541302 51.712375,23.744456 51.653774,23.615557C50.862186,23.736756,50.066597,23.760056,49.285309,23.687157L49.241009,23.800455 47.366036,27.678 42.991099,26.017823 44.277584,21.928082 44.325682,21.799183C43.696789,21.334391,43.121297,20.784899,42.607106,20.171606L42.487208,20.225006 38.469066,21.753483 36.553693,17.486847 40.297138,15.390477 40.441637,15.327978C40.321941,14.53499,40.299839,13.744601,40.372736,12.963413L40.24384,12.915114 36.321998,11.158738 37.984774,6.7851217 42.113513,7.9530752 42.263212,8.009104C42.728206,7.3840535,43.269797,6.8124616,43.879186,6.3033789L43.82189,6.1652506 42.29051,2.1496897 46.562749,0.22918414 48.656518,3.977782 48.722916,4.1289099C49.511906,4.0091622,50.299695,3.9843827,51.075585,4.0534113L51.127785,3.9218233z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Eye">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M33.597977,10.759002C37.946865,10.759002 41.485962,14.285001 41.485962,18.649 41.485962,23 37.946865,26.535 33.597977,26.535 29.23909,26.535 25.709992,23 25.709992,18.649 25.709992,17.784 25.849955,16.953001 26.109888,16.174002 26.779719,16.881001 27.70948,17.327002 28.759213,17.327002 30.778696,17.327002 32.418278,15.691001 32.418278,13.668001 32.418278,12.663001 32.008381,11.748001 31.348551,11.087002 32.058369,10.876001 32.818176,10.759002 33.597977,10.759002z M33.606682,4.3679962C25.92741,4.3679957 19.698065,10.594956 19.698065,18.27293 19.698065,25.953894 25.92741,32.177862 33.606682,32.177862 41.295838,32.177862 47.515175,25.953894 47.515175,18.27293 47.515175,10.594956 41.295838,4.3679957 33.606682,4.3679962z M34.867642,1.546141E-09C36.890393,2.6508449E-05 58.705193,0.41938579 68.893006,18.299923 68.893006,18.299923 57.1442,36.139837 34.44656,34.768854 34.44656,34.768854 14.428583,36.59984 0,18.299923 0,18.299923 9.0791523,0.4590019 34.716553,0.0010111886 34.716553,0.0010114873 34.768162,-1.4442128E-06 34.867642,1.546141E-09z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Coins">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M3.3390064,47.374004L26.00104,47.374004C26.17504,47.881321 26.361041,48.388939 26.575041,48.889757 27.610043,51.333344 29.086045,53.523722 30.968048,55.406689 31.135048,55.573593 31.309048,55.733997 31.476048,55.894005L3.3390064,55.894005C1.4960022,55.894005,0,54.398552,0,52.555387L0,50.712622C0,48.869556,1.4960022,47.374004,3.3390064,47.374004z M8.6740417,35.422004L25.713049,35.422004C25.220049,37.198282 24.972049,39.03446 24.972049,40.910738 24.972049,41.932125 25.046049,42.947113 25.193049,43.942001L8.6740417,43.942001C6.8310413,43.942001,5.3350391,42.44632,5.3350391,40.60354L5.3350391,38.760464C5.3350391,36.917886,6.8310413,35.422004,8.6740417,35.422004z M44.333998,28.91725L44.333998,31.014374C42.649975,31.25297 41.419993,31.901375 40.634958,32.963784 39.852975,34.026392 39.458993,35.225903 39.458993,36.554114 39.458993,37.565422 39.677987,38.455833 40.118966,39.221838 40.555979,39.98354 41.125986,40.573252 41.829967,40.99555 42.53297,41.425255 43.508984,41.850658 44.758986,42.28466 46.149979,42.776463 47.048965,43.183067 47.451004,43.502871 47.852982,43.819578 48.055986,44.291979 48.055986,44.913282 48.055986,45.51469 47.852982,46.022491 47.451004,46.448399 47.048965,46.874603 46.41597,47.0849 45.560011,47.0849 43.728954,47.0849 42.649975,46.093193 42.325999,44.11248L38.810005,45.030586C39.521005,48.178713,41.360971,49.909225,44.333998,50.214329L44.333998,52.91765 46.607986,52.91765 46.607986,50.202824C48.391985,50.015223 49.755999,49.390217 50.701008,48.33131 51.646992,47.273104 52.118979,45.952789 52.118979,44.36648 52.118979,43.331467 51.888998,42.429262 51.431965,41.65526 50.970966,40.886349 50.360981,40.276442 49.59096,39.839542 48.826006,39.401939 47.763016,38.933239 46.41597,38.440628 45.185011,37.991329 44.384962,37.612823 44.008986,37.307821 43.633984,36.999621 43.446972,36.561912 43.446972,35.991115 43.446972,35.429106 43.641979,34.952402 44.032972,34.558096 44.419996,34.163196 44.935011,33.967896 45.576002,33.967896 46.85701,33.967896 47.797989,34.850602 48.407976,36.612617L51.545002,35.327107C50.795002,32.756988,49.14699,31.319575,46.607986,31.015068L46.607986,28.91725z M3.3390026,23.690004L34.347016,23.690004C33.139015,24.471167 32.010015,25.379241 30.975014,26.414426 29.286014,28.103764 27.917013,30.053523 26.909013,32.203998L3.3390026,32.203998C1.4960022,32.203998,0,30.708376,0,28.865226L0,27.028776C0,25.185925,1.4960022,23.690004,3.3390026,23.690004z M45.470961,22.415C55.686974,22.415 63.96701,30.694868 63.959991,40.924053 63.959991,51.140034 55.680992,59.419998 45.464003,59.419998 41.41096,59.419998 37.659003,58.110893 34.613955,55.900974 31.696961,53.777658 29.412962,50.819633 28.130979,47.380901 27.716977,46.285692 27.408993,45.137482 27.215939,43.948774 27.055966,42.96047 26.96899,41.952459 26.968991,40.917248 26.96899,39.007633 27.255978,37.164823 27.796994,35.428709 28.150998,34.306995 28.597959,33.23199 29.145994,32.210482 31.195984,28.371248 34.553958,25.346428 38.626961,23.723612 40.743967,22.882503 43.053967,22.415 45.470961,22.415z M3.3390045,11.952L38.153052,11.952C39.996056,11.952,41.492057,13.448001,41.492057,15.290001L41.492057,17.133002C41.492057,18.976003,39.996056,20.472003,38.153052,20.472004L3.3390045,20.472004C1.4960022,20.472003,0,18.976003,0,17.133002L0,15.290001C0,13.448001,1.4960022,11.952,3.3390045,11.952z M8.6735134,0L43.487543,0C45.330534,0,46.826027,1.4958782,46.826027,3.3386841L46.826027,5.1814384C46.826027,7.0245428,45.330534,8.5200005,43.487543,8.5200005L8.6735134,8.5200005C6.8304424,8.5200005,5.3350277,7.0245428,5.3350277,5.1814384L5.3350277,3.3386841C5.3350277,1.4958782,6.8304424,0,8.6735134,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="BombIcon">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black"
Geometry="M14.200889,0C15.299896,0 16.59991,0.50000046 17.998923,1.4989944 19.597936,2.5990016 20.397944,4.5970043 21.196948,6.4960083 22.495954,9.6950015 23.495961,11.693005 26.093989,11.594006 26.793992,11.594006 27.293996,12.093014 27.293996,12.693005 27.293996,13.393002 26.793992,13.892012 26.193997,13.892012 21.896949,14.092009 20.297938,10.394007 19.097932,7.3960032 18.398921,5.6969966 17.698918,4.0979957 16.699916,3.3979983 15.899907,2.8979978 14.600901,1.9989949 13.700884,2.4989952 12.701883,2.9980039 12.30187,5.0970048 12.20188,6.3960022L13.900898,6.2959961C14.600901,6.2959961,15.100904,6.6960057,15.199904,7.3960032L15.399903,9.6950015C16.799909,10.19401 18.098929,10.894008 19.197938,11.893001 23.995965,15.991012 24.494979,23.287025 20.397944,28.084026 16.099906,32.78203 8.8038569,33.381029 4.0068054,29.184019 -0.79122243,25.086023 -1.3902263,17.79001 2.8067985,12.993009 3.9068136,11.693005 5.405819,10.594005 7.0048309,9.9940128L6.9048391,7.9960098C6.9048391,7.3960032,7.3048363,6.7959966,8.0038471,6.6960057L9.9028645,6.5959992C9.9028645,5.3970083 10.302861,1.6989915 12.701883,0.50000046 13.10188,0.099990942 13.700884,0 14.200889,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="CancelMail">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M10.659519,13.581999C10.787763,13.581999 10.916255,13.630751 11.01375,13.728755 11.207739,13.924762 11.207739,14.241775 11.01175,14.435782L8.5898266,16.850518 11.012901,19.265967C11.20889,19.460974 11.20889,19.776986 11.013901,19.972994 10.916906,20.070997 10.787913,20.119999 10.65992,20.119999 10.531927,20.119999 10.403934,20.070997 10.30694,19.973994L7.8819971,17.556247 5.4570541,19.973994C5.3600597,20.070997 5.2320671,20.119999 5.1040735,20.119999 4.9760809,20.119999 4.8470879,20.070997 4.7500935,19.972994 4.5551033,19.776986 4.5551033,19.460974 4.7510929,19.265967L7.1741672,16.850518 4.752244,14.435782C4.5562544,14.241775 4.5562544,13.924762 4.7502441,13.728755 4.9452333,13.532748 5.2642155,13.533748 5.4572048,13.727755L7.8819966,16.144916 10.306789,13.727755C10.403284,13.630751,10.531276,13.582,10.659519,13.581999z M7.7229891,10.151996C4.0159941,10.151996 0.99999809,13.156997 0.99999809,16.850998 0.99999809,20.544999 4.0159941,23.55 7.7229891,23.55 10.503235,23.55 12.895357,21.859687 13.917652,19.456124L14.034025,19.162648 14.034025,18.772999 14.164453,18.772999 14.191419,18.682897C14.357855,18.100457 14.44698,17.485905 14.44698,16.850998 14.44698,13.156997 11.429984,10.151996 7.7229891,10.151996z M28.477001,10.135L31.999016,13.663 28.424001,17.244999 27.716998,16.538999 29.693872,14.558 21.322995,14.558 21.322995,13.558 30.482195,13.558 27.769998,10.841z M7.4592972,5.1720018L15.45899,8.869 22.849004,5.1720018z M4.6849804,4.1720018L25.465012,4.1720018 25.465012,10.408002 24.465011,10.408002 24.465011,5.4821377 15.476991,9.9780006 5.6849813,5.4540205 5.6849813,9.4246554 5.7953281,9.3948154C6.4117265,9.2363219 7.0576777,9.1519957 7.7229891,9.1519957 11.981983,9.1519957 15.446978,12.605997 15.446978,16.850998 15.446978,17.514279 15.362384,18.158249 15.203383,18.772749L24.465023,18.772999 24.465023,16.665997 25.465026,16.665997 25.465026,19.772997 14.868521,19.772997 14.839026,19.844827C13.664856,22.607125 10.917235,24.550001 7.7229891,24.550001 3.4649954,24.550001 0,21.095999 0,16.850998 0,13.733575 1.8686953,11.042744 4.5478315,9.8331947L4.6849804,9.7732801z M7.8089724,0L29.631012,0 29.631012,7.2790012 28.63101,7.2790012 28.63101,1 8.8089738,1 8.8089738,3.1080008 7.8089724,3.1080008z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Display">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M2,2L2,25 30,25 30,2z M1,0L31,0C31.552002,0,32,0.44702148,32,1L32,26C32,26.552979,31.552002,27,31,27L17,27 17,30 25,30 25,32 7,32 7,30 15,30 15,27 1,27C0.44799805,27,0,26.552979,0,26L0,1C0,0.44702148,0.44799805,0,1,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Target">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M16.2,11.1C19,11.1 21.2,13.3 21.2,16.1 21.2,18.9 19,21.1 16.2,21.1 13.4,21.1 11.2,18.9 11.2,16.1 11.2,13.4 13.4,11.1 16.2,11.1z M16.2,6C10.6,6 6,10.6 6,16.1 6,21.7 10.5,26.2 16.1,26.2 21.7,26.2 26.2,21.7 26.2,16.1 26.3,10.6 21.7,6 16.2,6z M15.3,0L16.8,0 16.8,5.1999998C22.2,5.5,26.6,9.6999998,27.1,15L32,15 32,16.5 27.1,16.5 27.1,16.7C26.8,22.3,22.3,26.8,16.7,27.1L16.7,32 15.2,32 15.2,27.1 15.5,27.1 16,27.1C10.2,27,5.5,22.5,5.1999998,16.7L5.1999998,16.5 5.1999998,16.4 0,16.4 0,15 5.3000002,15C5.9000001,9.6999998,10.3,5.5,15.7,5.1999998L15.6,5.1999998 15.3,5.1999998z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Wrench">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M5.5803752,0C7.1813383,0 8.8833761,0.6000061 10.084373,1.8009948 11.785374,3.5029907 12.285377,5.8049927 11.685397,7.9060059L24.094478,20.31601C26.096505,19.714996 28.398524,20.216003 30.099524,21.916992 31.500535,23.317993 32.101552,25.320007 31.901538,27.121002L28.998504,24.118988C27.69753,22.817993 25.496465,22.817993 24.094478,24.118988 22.693467,25.519989 22.693467,27.622009 24.094478,29.02301L26.997514,31.924988C25.195498,32.225006 23.194447,31.625 21.793437,30.123993 20.191436,28.522003 19.591456,26.119995 20.191436,24.118988L7.7823553,11.709015C5.6803512,12.309998 3.3783338,11.80899 1.6773333,10.108002 0.37629925,8.7070007 -0.224718,6.8049927 0.076309212,5.0039978L2.978307,7.9060059C4.2793407,9.2070007 6.4813823,9.2070007 7.8823928,7.9060059 9.2834034,6.605011 9.2834034,4.4030151 7.8823928,3.0020142L4.9803342,0.10000607C5.1803479,0,5.3803615,0,5.5803752,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Clock" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M25.700012,16.000016L28.800019,16.000016 28.800019,17.099989 25.700012,17.099989z M23.200012,8.599998L17.200012,16.300004C17.200012,16.500016,17.100006,16.800002,17,17.000014L20.100006,22.50001 15.700012,17.699965C15,17.599989 14.5,17.000014 14.5,16.300004 14.5,15.599991 15,15.000017 15.700012,14.89998L15.800019,14.89998z M15.700012,2.9999971C8.7000124,3.2000091,3.0000002,9.0000224,3,16.000016L6.1000063,16.000016 6.1000063,17.099989 3.1000061,17.099989 3.1000061,17.300002C3.7000124,23.699959,9.1000063,28.79999,15.700012,29.000002L15.800019,29.000002 15.800019,26.000006 16.900025,26.000006 16.900025,29.000002 17.100006,29.000002C23.800019,28.500004 29.100006,22.899971 29.100006,16.099991 29.100006,9.3000092 23.800019,3.7000086 17.100006,3.2000089L16.900025,3.2000089 16.900025,6.2000065 15.800019,6.2000065 15.800019,2.9999971z M16,0C24.800019,0 32,7.2000055 32,16.000016 32,24.799994 24.800019,32 16,32 7.2000124,32 2.3106986E-07,24.799994 0,16.000016 2.3106986E-07,7.2000055 7.2000124,0 16,0z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Payment" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M28.000001,6.0000026L28.000001,15 6.0010006,15 6.0010006,17.000003 30.001,17.000003 30.001,6.0000026z M14.231,2.9540056L14.979999,2.9540056 14.979999,3.987005C15.704998,4.009005,16.200997,4.178005,16.550998,4.3600049L16.248998,5.0620046C15.994998,4.9340047 15.499998,4.7010047 14.725999,4.7010047 13.796,4.7010047 13.445001,5.1900046 13.445001,5.6160046 13.445001,6.1710043 13.893,6.4470041 14.943999,6.8310037 16.187998,7.2780037 16.816998,7.8320036 16.816998,8.7800031 16.816998,9.6210027 16.151998,10.409003 14.907999,10.591002L14.907999,11.698002 14.146,11.698002 14.146,10.622003C13.445001,10.611002,12.720001,10.420002,12.297002,10.154003L12.587001,9.4400029C13.022001,9.696003 13.651,9.8980026 14.328,9.8980026 15.185999,9.8980026 15.765998,9.4620028 15.765998,8.8540034 15.765998,8.2680035 15.293999,7.9060035 14.4,7.5870035 13.167001,7.1610038 12.406001,6.6710041 12.406001,5.7440041 12.406001,4.8600047 13.119,4.189005 14.231,4.0290052z M2,2.0000002L2,13 26.000001,13 26.000001,2.0000002z M0,0L28.000001,0 28.000001,4.0000031 32.001,4.0000031 32.001,19.000003 4.0010006,19.000003 4.0010006,15 0,15z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Accounting">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M7,26L19,26 19,28 7,28z M12.732999,14.533003L13.867999,14.533003 13.867999,15.486002C14.643999,15.519002,15.164999,15.671002,15.546999,15.844003L15.210999,17.068001C14.909999,16.949001 14.376999,16.700003 13.543999,16.700003 12.790999,16.700003 12.547999,17.003002 12.547999,17.307001 12.547999,17.664001 12.952999,17.892002 13.936999,18.238001 15.315999,18.693001 15.870998,19.289001 15.870998,20.264 15.870998,21.228001 15.141998,22.052 13.809999,22.268999L13.809999,23.372999 12.674999,23.372999 12.674999,22.344C11.898999,22.310999,11.146,22.116999,10.705999,21.878L11.052999,20.610001C11.539999,20.860001 12.223,21.087999 12.975999,21.087999 13.635999,21.087999 14.087999,20.85 14.087999,20.416 14.087999,20.004 13.716999,19.744001 12.859999,19.474001 11.620999,19.083 10.775999,18.542002 10.775999,17.490002 10.775999,16.537003 11.492999,15.790002 12.732999,15.562002z M2,12L2,30 24,30 24,12z M2,7L2,10 24,10 24,7z M2,2L2,5 24,5 24,2z M0,0L26,0 26,32 0,32z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Add">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M12.099998,0L19.799995,0 19.799995,12.1 32,12.1 32,19.799996 19.900002,19.799996 19.900002,31.999999 12.199997,31.999999 12.199997,19.900003 0,19.900003 0,12.199999 12.099998,12.199999z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="AddEncircled">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Transparent" Geometry="M14.100037,6L14.100037,14.099998 6,14.099998 6,18 14.100037,18 14.100037,26.099998 18,26.099998 18,18 26,18 26,14.099998 17.900024,14.099998 17.900024,6z M16,0C24.800049,0 32,7.1999969 32,16 32,24.800003 24.800049,32 16,32 7.2000122,32 0,24.800003 0,16 0,7.1999969 7.2000122,0 16,0z">
<GeometryDrawing.Pen>
<Pen Thickness="2" Brush="Black"/>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Beaker">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M454.352,398.431L331,190.879V87.42c17.459-6.192,30-22.865,30-42.42c0-24.813-20.187-45-45-45H196
c-24.813,0-45,20.187-45,45c0,19.555,12.541,36.228,30,42.42v103.459L57.659,398.413c-14.085,23.476-14.442,51.715-0.953,75.539
C70.196,497.776,94.594,512,121.972,512h268.055c27.378,0,51.776-14.224,65.266-38.048
C468.779,450.134,468.427,421.903,454.352,398.431z M196,30h120c8.271,0,15,6.729,15,15s-6.729,15-15,15H196
c-8.271,0-15-6.729-15-15S187.729,30,196,30z M208.895,202.664c1.378-2.319,2.105-4.966,2.105-7.664V90h90v30h-15
c-8.284,0-15,6.716-15,15s6.716,15,15,15h15v30h-15c-8.284,0-15,6.716-15,15s6.716,15,15,15h21.466l65.8,110.716
C362.112,326.413,347.079,332,331,332c-34.968,0-64.739-25.95-65.036-26.213c0,0-0.001-0.001-0.002-0.001
C264.139,304.162,227.422,272,181,272c-4.587,0-9.215,0.321-13.872,0.94L208.895,202.664z M429.187,459.171
C421.094,473.466,406.454,482,390.027,482H121.972c-16.427,0-31.066-8.534-39.16-22.829c-8.093-14.295-7.88-31.238,0.604-45.377
l61.501-103.482C157.353,304.799,169.477,302,181,302c34.968,0,64.74,25.951,65.006,26.186C247.551,329.566,284.39,362,331,362
c22.25,0,42.237-7.287,57.631-15.43l39.953,67.224c0.011,0.018,0.021,0.036,0.032,0.054
C437.067,427.933,437.281,444.876,429.187,459.171z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Book">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Transparent" Geometry="M16.378574,2.0941912E-05C17.053625,-0.0029775997,17.669592,0.31702943,17.669592,0.31702964L27.747614,10.181254C30.078613,11.977292,28.301632,12.163302,28.301632,12.163302L14.005584,15.500376C11.924586,18.496447,15.130586,19.519465,15.130586,19.519465L30.870606,16.081391C32.66065,16.035383,31.786623,17.428421,31.786623,17.428421L15.130586,21.214503C12.353603,22.20553,10.869592,20.092476,10.869592,20.092476L0.76355401,8.8182232C-1.4574583,4.6071207,1.8735417,3.616101,1.8735417,3.616101L16.08762,0.023016395C16.184605,0.0080166093,16.282566,2.082104E-05,16.378574,2.0941912E-05z">
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="2"/>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Defrag">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M26.84801,26.411987L31.841998,26.411987 31.841998,31.915009 26.84801,31.915009z M10.497003,26.411987L18.709003,26.411987 18.709003,31.915009 10.497003,31.915009z M20.052005,18.708984L25.386005,18.708984 25.386005,31.915009 20.052005,31.915009z M10.497003,14.221985L18.709003,14.221985 18.709003,25.057983 10.497003,25.057983z M20.052005,9.5660095L25.386005,9.5660095 25.386005,17.18399 20.052005,17.18399z M26.84801,7.07901L31.841998,7.07901 31.841998,25.057983 26.84801,25.057983z M10.497003,1.9949951L18.709003,1.9949951 18.709003,12.686005 10.497003,12.686005z M0,0L9.2280055,0 9.2280055,32 0,32z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Knight">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Geometry="M38.642,39.289c-3.895-3.373-2.645-7.564-0.338-13.896c1.898-5.21,4.051-11.118,1.445-16.945 c-1.789-4.001-6.2-8.319-13.215-8.442L25.963,0c-2.518,0-6.289,0.283-9.953,2.734c-0.286,0.191-0.462,0.51-0.472,0.855 c-0.01,0.345,0.148,0.672,0.424,0.879c0.583,0.438,0.94,1.313,1.138,2.049c-2.711,0.486-3.37,1.934-4.01,3.34 c-0.676,1.486-1.443,3.17-5.15,4.794c-1.008,0.442-1.693,1.499-1.789,2.757c-0.092,1.221,0.412,2.334,1.315,2.905 c0.385,0.244,0.778,0.269,1.094,0.289c0.382,0.025,0.657,0.043,1.07,0.409c0.327,0.292,0.593,0.621,0.827,0.912 c0.388,0.481,0.722,0.896,1.268,1.021c0.77,0.181,1.694-0.278,2.761-0.843c0.693-0.368,1.479-0.784,2.073-0.904 c0.754-0.15,1.721-0.323,2.52-0.323c0.684,0,0.909,0.134,0.928,0.114c0.18,1.047-1.972,2.48-3.87,3.745 c-3.333,2.224-7.481,4.988-6.394,9.455c0.17,0.699,0.523,2.123,3.82,3.819C6.66,39.331,1.21,41.742,1.21,43.609 c0,1.244,1.142,2.041,7.165,2.703C12.421,46.757,17.793,47,23.5,47s11.079-0.243,15.125-0.688 c6.022-0.662,7.165-1.459,7.165-2.703C45.79,42.247,42.89,40.596,38.642,39.289z">
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="3"/>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Spawn">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M27,22.000013C25.346001,22.000013 24,23.345991 24,25.000013 24,26.654005 25.346001,28.000013 27,28.000013 28.653999,28.000013 30,26.654005 30,25.000013 30,23.345991 28.653999,22.000013 27,22.000013z M5,22C3.3460007,22 2,23.346 2,25 2,26.654 3.3460007,28 5,28 6.6540003,28 8,26.654 8,25 8,23.346 6.6540003,22 5,22z M16,2C14.346,2 13,3.3460007 13,5 13,6.6540003 14.346,8 16,8 17.654,8 19,6.6540003 19,5 19,3.3460007 17.654,2 16,2z M16,0C18.757,0 21,2.243 21,5 21,6.2061872 20.570676,7.3139925 19.856814,8.178627L19.749571,8.3023939 26.702677,20.009615 26.74309,20.006532C26.828189,20.002204 26.913844,20.000013 27,20.000013 29.757004,20.000013 32,22.242994 32,25.000013 32,27.757002 29.757004,30.000013 27,30.000013 24.242996,30.000013 22,27.757002 22,25.000013 22,23.104563 23.060166,21.452075 24.618662,20.604373L24.703606,20.560808 18.143555,9.5162544 17.944359,9.6064529C17.346375,9.8598127 16.68925,10 16,10 15.224594,10 14.489846,9.8225756 13.834221,9.5061913L13.749143,9.4625559 7.9581623,20.972196 7.9896793,20.994624C9.2092552,21.907268 10,23.363032 10,25 10,27.757 7.757,30 5,30 2.243,30 0,27.757 0,25 0,22.243 2.243,20 5,20 5.3446255,20 5.6812191,20.035047 6.0064049,20.101764L6.1420031,20.133139 12.151809,8.1885796 12.143186,8.178627C11.429324,7.3139925 11,6.2061872 11,5 11,2.243 13.243,0 16,0z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Tetris">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black" Geometry="M106.965,252.716H262.11c5.522,0,10-4.477,10-10v-77.572c0-5.523-4.478-10-10-10h-67.572V10c0-5.523-4.478-10-10-10 h-77.572c-5.522,0-10,4.477-10,10v232.716C96.965,248.239,101.443,252.716,106.965,252.716z M116.965,20h57.572v145.144 c0,5.523,4.478,10,10,10h67.572v57.572H116.965V20z"/>
<GeometryDrawing Brush="Black" Geometry="M417.253,193.93h-77.571c-5.522,0-10,4.477-10,10v67.572H262.11c-5.522,0-10,4.477-10,10v67.572H29.393 c-5.522,0-10,4.477-10,10v77.572c0,5.523,4.478,10,10,10h387.86c5.522,0,10-4.477,10-10V203.93 C427.253,198.407,422.776,193.93,417.253,193.93z M39.393,369.075h290.289v57.572H39.393V369.075z M407.253,426.646h-57.571 v-67.572c0-5.523-4.478-10-10-10H272.11v-57.572h67.572c5.522,0,10-4.477,10-10V213.93h57.571V426.646z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Filter">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="White" Geometry="M0,0L32,0 21.306,17.372993 21.272003,17.372993 21.272003,31.352 10.692001,31.352 10.692001,17.372993z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="FilterActive">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="PaleGreen" Geometry="M0,0L32,0 21.306,17.372993 21.272003,17.372993 21.272003,31.352 10.692001,31.352 10.692001,17.372993z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="FilterError">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Red" Geometry="M0,0L32,0 21.306,17.372993 21.272003,17.372993 21.272003,31.352 10.692001,31.352 10.692001,17.372993z"/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="CancelIcon">
<DrawingImage.Drawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="1" />
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<GeometryGroup>
<EllipseGeometry Center="3.5,3.5" RadiusX="7" RadiusY="7" />
<LineGeometry StartPoint="0.5,0.5" EndPoint="7,7" />
<LineGeometry StartPoint="0.5,7" EndPoint="7,0.5" />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="PauseIcon">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black"
Geometry="M18.51899,0L29.981999,0 29.981999,32 18.51899,32z M0,0L11.464992,0 11.464992,32 0,32z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="PlayIcon">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black"
Geometry="M0,0L25.194,16 0,32z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<!-- help / support -->
<DrawingImage x:Key="SupportIcon">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black"
Geometry="M23.679005,26.495C23.99901,26.495 24.265014,26.59 24.475017,26.78 24.685019,26.967 24.79102,27.204 24.79102,27.491 24.79102,27.783 24.68802,28.024 24.481016,28.214 24.271013,28.405 24.00301,28.5 23.679005,28.5 23.354001,28.5 23.085997,28.403 22.870994,28.208 22.655991,28.006 22.54899,27.766 22.54899,27.491 22.54899,27.207 22.655991,26.97 22.870994,26.78 23.085997,26.59 23.354001,26.495 23.679005,26.495z M23.734006,19.5C24.110011,19.5 24.460016,19.541 24.785021,19.625 25.110025,19.708 25.392029,19.839 25.632032,20.017 25.874036,20.195 26.062038,20.422 26.19904,20.7 26.333042,20.978 26.401043,21.311 26.401043,21.7 26.401043,21.947 26.373043,22.171 26.316042,22.371 26.259041,22.572 26.17704,22.762 26.067039,22.94 25.958037,23.118 25.822035,23.289 25.660033,23.453 25.498031,23.617 25.311028,23.786 25.101026,23.961 24.959023,24.078 24.835021,24.187 24.72802,24.289 24.620018,24.39 24.531017,24.49 24.460016,24.589 24.389015,24.689 24.335014,24.794 24.299014,24.905 24.262013,25.017 24.244013,25.144 24.244013,25.285 24.244013,25.383 24.257013,25.482 24.283013,25.583 24.310014,25.685 24.345015,25.77 24.390016,25.838L22.791993,25.838C22.751992,25.733 22.719992,25.615 22.697992,25.483 22.674991,25.351 22.663991,25.226 22.663991,25.109 22.663991,24.922 22.681992,24.752 22.718992,24.599 22.754992,24.445 22.809993,24.3 22.882994,24.164 22.955995,24.029 23.046997,23.898 23.155998,23.775 23.266,23.652 23.393002,23.529 23.539003,23.407 23.694005,23.278 23.828007,23.157 23.943009,23.046 24.059011,22.935 24.157012,22.823 24.238013,22.712 24.320014,22.6 24.380015,22.485 24.420015,22.365 24.460016,22.246 24.481016,22.113 24.481016,21.967 24.481016,21.841 24.459016,21.725 24.414016,21.618 24.369015,21.51 24.306014,21.419 24.222013,21.341 24.140012,21.264 24.03901,21.203 23.918009,21.159 23.799007,21.115 23.667005,21.092 23.521003,21.092 23.204998,21.092 22.876994,21.158 22.536989,21.29 22.195985,21.422 21.87398,21.621 21.569976,21.888L21.569976,20.059C21.88298,19.872 22.222985,19.733 22.59099,19.64 22.959995,19.547 23.341001,19.5 23.734006,19.5z M23.985949,18C20.670016,18 17.972007,20.69101 17.972007,24 17.972007,27.309021 20.670016,30 23.985949,30 27.302003,30 30.000989,27.309021 30.000989,24 30.000989,20.69101 27.302003,18 23.985949,18z M14,2C10.968,2 8.5,4.467 8.5,7.5 8.5,10.438219 10.81616,12.84526 13.717461,12.992831L13.973991,12.99934 13.99997,12.999012 14.027442,12.999304 14.28254,12.992831C17.18384,12.84526 19.5,10.438219 19.5,7.5 19.5,4.467 17.032,2 14,2z M14,0C18.136,0 21.5,3.3640003 21.5,7.5 21.5,9.95575 20.314059,12.13934 18.484733,13.508212L18.265061,13.664531 18.342722,13.68891C19.921902,14.202736,21.408062,14.995103,22.721599,16.037384L22.786062,16.089699 22.966662,16.064397C23.300515,16.021905 23.640717,16 23.985949,16 28.405035,16 32.000998,19.588989 32.000998,24 32.000998,28.411011 28.405035,32 23.985949,32 19.566984,32 15.971998,28.411011 15.971998,24 15.971998,20.96743 17.671191,18.323394 20.169134,16.967021L20.4065,16.845489 20.189965,16.712549C18.448412,15.669154,16.455822,15.076083,14.409823,15.006025L14.033219,14.999578 14,15 13.960834,14.999503 13.690718,15.00291C7.2160797,15.166433,1.9999962,20.449734,1.9999962,26.921989L0,26.928989 0,26.921989C0,20.80439,3.9878531,15.595488,9.51441,13.731782L9.7309766,13.661711 9.5152669,13.508212C7.6859417,12.13934 6.5,9.95575 6.5,7.5 6.5,3.3640003 9.8640003,0 14,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<!-- 'menu' three dots -->
<DrawingImage x:Key="MenuIcon">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="M23,14C24.10498,14 25,14.89502 25,16 25,17.10498 24.10498,18 23,18 21.89502,18 21,17.10498 21,16 21,14.89502 21.89502,14 23,14z M16,14C17.105,14 18,14.895 18,16 18,17.105 17.105,18 16,18 14.895,18 14,17.105 14,16 14,14.895 14.895,14 16,14z M9,14C10.105,14 11,14.895 11,16 11,17.105 10.105,18 9,18 7.8950005,18 7,17.105 7,16 7,14.895 7.8950005,14 9,14z M16,2C8.2799997,2 2,8.2800002 2,16 2,23.72 8.2799997,30 16,30 23.72,30 30,23.72 30,16 30,8.2800002 23.72,2 16,2z M16,0C24.822,0 32,7.178 32,16 32,24.822 24.822,32 16,32 7.1780005,32 0,24.822 0,16 0,7.178 7.1780005,0 16,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<!-- expander arrow -->
<DrawingImage x:Key="ArrowIcon">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="M299.152955025434,0L496.426178902388,0 268.890046089888,280.247772216797 198.190201729536,367.407897949219 199.87503144145,369.495361328125 271.502137154341,457.706451416016 498.999970406294,738 301.717621773481,738 101.234124153852,491.008697509766 99.5304498374462,488.936553955078 98.6409082114697,490.003173828125 0,368.488952636719 98.6409082114697,246.945526123047z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="CancelBuys">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="{mbts:BTSColor MarketData.bid}"
Geometry="m 24.706673 31.196264 -3.086182 3.086182 5.965481 5.963348 -5.965481 5.96548 3.086182 3.084049 5.963348 -5.963348 5.96548 5.963348 3.084049 -3.084049 -5.963347 -5.96548 5.963347 -5.963348 -3.084049 -3.086182 -5.96548 5.965481 z M 5.3507926 32.045363 H 17.816449 v 2.401501 H 5.3507926 Z m 0 -4.937233 H 24.132994 v 2.401501 H 5.3507926 Z m 0 9.874466 h 5.5381524 v 2.401501 H 5.3507926 Z M 1.3730469 0 A 1.3741374 1.3741374 0 0 0 0 1.3730469 V 45.630859 a 1.3741374 1.3741374 0 0 0 1.3730469 1.373047 H 16.853516 a 17.906029 17.906029 0 0 1 -0.05859 -1.373047 17.906029 17.906029 0 0 1 0.06836 -1.375 H 2.7480469 V 2.7480469 H 33.326172 V 27.783203 a 17.906029 17.906029 0 0 1 1.375 -0.05859 17.906029 17.906029 0 0 1 1.373047 0.06836 V 1.3730469 A 1.3741374 1.3741374 0 0 0 34.701172 0 Z M 10.662215 24.759265 V 5.1202697 h 7.148923 q 3.286862 0 5.05355 1.2051818 1.766687 1.2051838 1.766687 3.3964241 0 1.5886494 -1.081924 2.7801354 -1.068231 1.191488 -2.739053 1.657126 v 0.05479 q 2.095375 0.26021 3.341644 1.547564 1.259962 1.287354 1.259962 3.136214 0 2.697964 -1.93103 4.286613 -1.931032 1.574956 -5.272673 1.574956 z M 15.085783 8.3797408 v 4.6563852 h 1.944726 q 1.369526 0 2.150155 -0.657372 0.794325 -0.671068 0.794325 -1.835164 0 -2.1638492 -3.23208 -2.1638492 z m 0 7.9432472 v 5.176805 h 2.39667 q 1.533868 0 2.39667 -0.712152 0.876495 -0.712155 0.876495 -1.944728 0 -1.17779 -0.862802 -1.848858 -0.849105 -0.671067 -2.382974 -0.671067 z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="CancelSells">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="{mbts:BTSColor MarketData.ask}"
Geometry="m 19.060265 26.797642 v -2.144583 q 0.583058 0.489233 1.266644 0.737201 0.683586 0.241265 1.380576 0.241265 0.408811 0 0.710393 -0.07372 0.308284 -0.07372 0.509339 -0.201055 0.207756 -0.134036 0.308284 -0.308283 0.100527 -0.18095 0.100527 -0.388706 0 -0.281477 -0.160844 -0.502637 -0.160844 -0.22116 -0.44232 -0.408811 -0.274775 -0.187651 -0.656779 -0.361898 -0.382004 -0.174248 -0.824324 -0.355197 -1.125906 -0.469128 -1.682158 -1.146012 -0.549549 -0.676884 -0.549549 -1.635245 0 -0.750604 0.301582 -1.28675 0.301582 -0.542847 0.817622 -0.891342 0.522743 -0.348495 1.206328 -0.509339 0.683586 -0.167545 1.447594 -0.167545 0.750604 0 1.326961 0.09383 0.583059 0.08712 1.072292 0.274775 v 2.003845 q -0.241266 -0.167545 -0.529444 -0.29488 -0.281477 -0.127335 -0.583059 -0.207757 -0.301582 -0.08712 -0.603164 -0.127334 -0.29488 -0.04021 -0.562953 -0.04021 -0.3686 0 -0.670182 0.07372 -0.301582 0.06702 -0.509339 0.194353 -0.207756 0.127334 -0.321687 0.308284 -0.113931 0.174247 -0.113931 0.395407 0 0.241266 0.127334 0.435619 0.127335 0.187651 0.361899 0.361898 0.234564 0.167546 0.569655 0.335091 0.335091 0.160844 0.757306 0.335091 0.576356 0.241266 1.03208 0.516041 0.462426 0.268073 0.790816 0.609866 0.328389 0.341793 0.502636 0.784113 0.174248 0.435618 0.174248 1.018677 0 0.804219 -0.308284 1.353768 -0.301582 0.542848 -0.824324 0.884641 -0.522743 0.335091 -1.219732 0.482531 -0.690288 0.14744 -1.460998 0.14744 -0.790815 0 -1.50791 -0.134036 -0.710393 -0.134037 -1.233135 -0.40211 z m 6.620223 3.788289 -1.556212 1.556212 3.008102 3.007026 -3.008102 3.008101 1.556212 1.555136 3.007026 -3.007026 3.008101 3.007026 1.555136 -1.555136 -3.007026 -3.008101 3.007026 -3.007026 -1.555136 -1.556212 -3.008101 3.008102 z m -9.76023 2.917766 h 2.792621 v 1.21096 h -2.792621 z m 0 -2.489606 h 6.285825 v 1.21096 h -6.285825 z m 0 -2.489607 h 9.470951 v 1.210961 H 15.920258 Z M 13.914475 14.855173 a 0.69291063 0.69291063 0 0 0 -0.692361 0.692361 v 22.317061 a 0.69291063 0.69291063 0 0 0 0.692361 0.692361 h 7.806047 a 9.0291392 9.0291392 0 0 1 -0.02954 -0.692361 9.0291392 9.0291392 0 0 1 0.03447 -0.693345 H 14.60782 V 16.24088 h 15.419061 v 12.624011 a 9.0291392 9.0291392 0 0 1 0.693346 -0.02954 9.0291392 9.0291392 0 0 1 0.692361 0.03447 V 15.547534 a 0.69291063 0.69291063 0 0 0 -0.692361 -0.692361 z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="AddOrders" x:Shared="False">
<!-- Ticket icon -->
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="M 5.3507926 32.045363 H 17.81645 v 2.401501 H 5.3507926 Z m 0 -4.937233 H 24.132995 v 2.401501 H 5.3507926 Z M 18.799228 22.222041 v 2.32929 h -1.567173 v -2.264886 q -2.179014 -0.01073 -4.057475 -0.987533 v -2.973336 q 0.622575 0.504501 1.856993 0.933864 1.234417 0.429362 2.200482 0.493766 v -3.907198 q -2.511771 -0.933863 -3.4349 -2.018003 -0.912395 -1.094874 -0.912395 -2.662047 0 -1.685248 1.191482 -2.8659947 1.19148 -1.1914807 3.155813 -1.3846939 V 4.918734 h 1.567173 v 1.9535992 q 2.264887 0.1073411 3.38123 0.7299162 V 10.500446 Q 20.677689 9.5880506 18.799228 9.3841034 v 4.0682086 q 2.35076 0.847992 3.370495 1.942866 1.019736 1.08414 1.019736 2.629845 0 1.781854 -1.137811 2.876728 -1.13781 1.08414 -3.25242 1.32029 z M 17.232055 12.829737 V 9.4270397 q -1.492034 0.2683516 -1.492034 1.5564393 0 1.105608 1.492034 1.846258 z m 1.567173 3.628113 v 3.25242 q 1.53497 -0.236149 1.53497 -1.53497 0 -1.051939 -1.53497 -1.71745 z m 13.258587 13.65074 h -3.954117 l 0.0014 7.641804 -7.643169 -10e-7 0.0014 3.952751 h 7.640439 l 0.0014 7.641803 h 3.951385 l 0.0014 -7.641802 7.640437 -10e-7 0.0014 -3.952751 -7.643169 10e-7 z M 5.3507926 36.982596 h 5.5381524 v 2.401501 H 5.3507926 Z M 1.3730469 0 A 1.3741374 1.3741374 0 0 0 0 1.3730469 V 45.630859 a 1.3741374 1.3741374 0 0 0 1.3730469 1.373047 H 16.853516 a 17.906029 17.906029 0 0 1 -0.05859 -1.373047 17.906029 17.906029 0 0 1 0.06836 -1.375 H 2.7480469 V 2.7480469 H 33.326172 V 27.783203 a 17.906029 17.906029 0 0 1 1.375 -0.05859 17.906029 17.906029 0 0 1 1.373047 0.06836 V 1.3730469 A 1.3741374 1.3741374 0 0 0 34.701172 0 Z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="CancelOrders">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="m 26.463403 27.963318 h -2.359042 l -0.683586 -2.137882 h -3.417929 l -0.676884 2.137882 h -2.345638 l 3.498351 -9.610414 h 2.566798 z M 22.92484 24.163384 21.89276 20.933106 q -0.113931 -0.361899 -0.160844 -0.864535 h -0.05361 q -0.03351 0.422214 -0.167545 0.837727 l -1.045485 3.257086 z m 2.065112 7.055953 -1.51223 1.51223 2.923087 2.922042 -2.923087 2.923086 1.51223 1.511185 2.922042 -2.922042 2.923086 2.922042 1.511185 -1.511185 -2.922041 -2.923086 2.922041 -2.922042 -1.511185 -1.51223 -2.923086 2.923087 z m -9.484387 0.416058 h 6.108175 v 1.176737 h -6.108175 z m 0 -2.419244 h 9.203284 v 1.176735 h -9.203284 z m 0 4.83849 h 2.713696 v 1.176736 H 15.505565 Z M 13.556469 15.93316 a 0.67332766 0.67332766 0 0 0 -0.672794 0.672793 v 21.686339 a 0.67332766 0.67332766 0 0 0 0.672794 0.672793 h 7.585433 a 8.7739586 8.7739586 0 0 1 -0.02871 -0.672793 8.7739586 8.7739586 0 0 1 0.0335 -0.673751 H 14.230219 V 17.279703 h 14.983289 v 12.267233 a 8.7739586 8.7739586 0 0 1 0.67375 -0.02871 8.7739586 8.7739586 0 0 1 0.672794 0.0335 V 16.605953 A 0.67332766 0.67332766 0 0 0 29.887258 15.93316 Z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="CancelSelected">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="m 24.706673 31.196264 -3.086181 3.086182 5.96548 5.963348 -5.96548 5.96548 3.086181 3.084049 5.963348 -5.963348 5.96548 5.963348 3.084049 -3.084049 -5.963347 -5.96548 5.963347 -5.963348 -3.084049 -3.086182 -5.96548 5.965481 z M 5.3507926 32.045363 H 17.81645 v 2.401501 H 5.3507926 Z m 0 -4.937233 H 24.132994 v 2.401501 H 5.3507926 Z M 26.434166 6.0031559 14.993666 17.443656 9.6399578 12.089946 6.0100982 15.719802 c 2.9622322 2.959826 6.0772448 6.092263 8.9969908 8.970151 L 30.064121 9.6329208 Z M 5.3507926 36.982596 h 5.5381524 v 2.401501 H 5.3507926 Z M 1.3730469 0 A 1.3741374 1.3741374 0 0 0 0 1.3730469 V 45.630859 a 1.3741374 1.3741374 0 0 0 1.3730469 1.373047 H 16.853516 a 17.906029 17.906029 0 0 1 -0.05859 -1.373047 17.906029 17.906029 0 0 1 0.06836 -1.375 H 2.7480469 V 2.7480469 H 33.326172 V 27.783203 a 17.906029 17.906029 0 0 1 1.375 -0.05859 17.906029 17.906029 0 0 1 1.373047 0.06836 V 1.3730469 A 1.3741374 1.3741374 0 0 0 34.701172 0 Z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="ModifyOrder">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Brush="Black"
Geometry="m 18.887708 18.355738 v 1.910329 h -1.285291 v -1.857509 q -1.787082 -0.0088 -3.327671 -0.809909 v -2.438532 q 0.510595 0.413758 1.522982 0.765893 1.012387 0.352134 1.804689 0.404954 V 13.12654 q -2.059987 -0.765892 -2.817076 -1.655032 -0.748286 -0.897943 -0.748286 -2.1832341 0 -1.382128 0.977174 -2.3504979 0.977173 -0.9771733 2.588188 -1.1356339 V 4.1647166 h 1.285291 v 1.6022121 q 1.85751 0.088034 2.77306 0.5986287 v 2.376908 Q 20.428297 7.9941795 18.887708 7.8269156 V 11.16339 q 1.927937 0.695466 2.764256 1.593409 0.83632 0.88914 0.83632 2.156824 0 1.461358 -0.933157 2.359301 -0.933156 0.88914 -2.667419 1.082814 z M 17.602417 10.652795 V 7.8621291 q -1.223667 0.2200841 -1.223667 1.2764876 0 0.9067463 1.223667 1.5141783 z m 1.285291 2.975537 v 2.667419 q 1.258881 -0.193674 1.258881 -1.258881 0 -0.86273 -1.258881 -1.408538 z M 7.8581956 26.412174 H 18.081699 v 1.969551 H 7.8581956 Z m 0 -4.04919 H 23.262109 v 1.969551 H 7.8581956 Z m 23.8237084 -0.610988 -12.064762 12.064763 4.39301 4.393009 12.064761 -12.064762 z m -0.0014 3.48158 0.91143 0.91143 -8.583182 8.583183 -0.91143 -0.91143 z m -12.817392 9.398532 -1.583992 5.915617 5.914283 -1.585326 z M 7.8581956 30.461364 H 12.40022 v 1.969551 H 7.8581956 Z M 4.5959132 0.13069836 A 1.1269761 1.1269761 0 0 0 3.4698314 1.2567801 V 37.554094 a 1.1269761 1.1269761 0 0 0 1.1260818 1.126082 H 15.310509 a 8.0150307 8.0150307 0 0 1 -0.01762 -0.337985 8.0150307 8.0150307 0 0 1 0.240273 -1.915781 H 5.7235967 V 2.3844637 H 30.801741 V 20.486667 a 8.0150307 8.0150307 0 0 1 0.863383 -0.04966 8.0150307 8.0150307 0 0 1 1.390383 0.12334 V 1.2567801 A 1.1269761 1.1269761 0 0 0 31.929425 0.13069836 Z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<!--DrawingImage x:Key="LadderCancelBuys">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="{mbts:BTSColor MarketData.bid}"
Geometry="M 9.9417804 -0.02293875 1.9154138 8.0034278 17.4301 23.512569 1.9154138 39.027256 9.9417804 47.048077 25.450922 31.538936 40.965607 47.048077 48.986428 39.027256 33.47729 23.512569 48.986428 8.0034278 40.965607 -0.02293875 25.450922 15.491746 Z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="LadderCancelSells">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="{mbts:BTSColor MarketData.ask}"
Geometry="M 9.9417804 -0.02293875 1.9154138 8.0034278 17.4301 23.512569 1.9154138 39.027256 9.9417804 47.048077 25.450922 31.538936 40.965607 47.048077 48.986428 39.027256 33.47729 23.512569 48.986428 8.0034278 40.965607 -0.02293875 25.450922 15.491746 Z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="LadderCancelOrders">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="M 9.9417804 -0.02293875 1.9154138 8.0034278 17.4301 23.512569 1.9154138 39.027256 9.9417804 47.048077 25.450922 31.538936 40.965607 47.048077 48.986428 39.027256 33.47729 23.512569 48.986428 8.0034278 40.965607 -0.02293875 25.450922 15.491746 Z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage-->
<DrawingImage x:Key="Synthetics" x:Shared="False">
<!-- Spreads icon -->
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="m 69.641861 87.129943 a 36.813842 36.813842 0 0 0 -36.813776 36.813767 36.813842 36.813842 0 0 0 31.044618 36.31355 l 1.208194 21.35839 1.804543 31.90967 a 41.092964 41.092964 0 0 0 -29.828154 39.50509 41.092964 41.092964 0 0 0 41.09258 41.0931 41.092964 41.092964 0 0 0 41.093104 -41.0931 41.092964 41.092964 0 0 0 -0.10284 -2.9068 41.092964 41.092964 0 0 0 -38.048841 -38.03902 l -2.962092 -52.36321 a 36.813842 36.813842 0 0 0 20.093347 -12.61939 l 33.150946 15.70705 v 5.3e-4 a 27.542416 27.542416 0 0 0 -0.12557 2.49907 27.542416 27.542416 0 0 0 27.54251 27.54249 27.542416 27.542416 0 0 0 27.5425 -27.5425 27.542416 27.542416 0 0 0 -27.5425 -27.5425 27.542416 27.542416 0 0 0 -22.44618 11.61479 l -31.44563 -14.89935 a 36.813842 36.813842 0 0 0 1.55701 -10.53786 36.813842 36.813842 0 0 0 -36.813769 -36.813767 z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="AddSynthetic" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="M 36.50044 86.999995 A 36.813842 36.813842 0 0 0 -0.3133356 123.81377 36.813842 36.813842 0 0 0 30.731282 160.12732 l 1.208194 21.35839 1.804543 31.90967 a 41.092964 41.092964 0 0 0 -29.8281546 39.50509 41.092964 41.092964 0 0 0 41.0925806 41.0931 41.092964 41.092964 0 0 0 41.093099 -41.0931 41.092964 41.092964 0 0 0 -0.102836 -2.9068 41.092964 41.092964 0 0 0 -38.04884 -38.03902 l -2.962092 -52.36321 a 36.813842 36.813842 0 0 0 20.093347 -12.61939 l 33.150948 15.70705 v 5.3e-4 a 27.542416 27.542416 0 0 0 -0.125574 2.49907 27.542416 27.542416 0 0 0 27.542513 27.54249 27.542416 27.542416 0 0 0 27.5425 -27.5425 27.542416 27.542416 0 0 0 -27.5425 -27.5425 27.542416 27.542416 0 0 0 -22.44618 11.61479 L 71.757201 134.35163 A 36.813842 36.813842 0 0 0 73.314213 123.81377 36.813842 36.813842 0 0 0 36.50044 86.999995 Z m 116.60981 115.628085 0.007 37.48967 h -37.49716 l 0.007 19.39257 h 37.48344 L 153.11751 297 h 19.38493 l 0.007 -37.48968 h 37.48342 L 210 240.11775 h -37.49727 l 0.007 -37.48967 z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="RemoveSynthetic" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="M 37.03498 86.999995 A 36.813842 36.813842 0 0 0 0.22120379 123.81377 36.813842 36.813842 0 0 0 31.265822 160.12731 l 1.208194 21.35839 1.804543 31.90967 a 41.092964 41.092964 0 0 0 -29.8281552 39.50509 41.092964 41.092964 0 0 0 41.0925812 41.0931 41.092964 41.092964 0 0 0 41.093099 -41.0931 41.092964 41.092964 0 0 0 -0.102836 -2.9068 41.092964 41.092964 0 0 0 -38.04884 -38.03902 l -2.962092 -52.36321 a 36.813842 36.813842 0 0 0 20.093346 -12.61938 l 33.150949 15.70704 v 5.3e-4 a 27.542416 27.542416 0 0 0 -0.125574 2.49907 27.542416 27.542416 0 0 0 27.542503 27.54249 27.542416 27.542416 0 0 0 27.5425 -27.5425 27.542416 27.542416 0 0 0 -27.5425 -27.54249 27.542416 27.542416 0 0 0 -22.44618 11.61479 L 72.29174 134.35163 A 36.813842 36.813842 0 0 0 73.848752 123.81377 36.813842 36.813842 0 0 0 37.03498 86.999995 Z m 94.72671 153.117755 0.008 18.80608 c 0 0 -6.42588 -1.1e-4 78.75576 1.3e-4 l 0.009 -18.80621 c 0 0 4.48208 0 -78.77178 0 z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="ModifySynthetic" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="M 37.03498 86.999995 A 36.813842 36.813842 0 0 0 0.2212037 123.81377 36.813842 36.813842 0 0 0 31.265822 160.12732 l 1.208194 21.35839 1.804543 31.90967 a 41.092964 41.092964 0 0 0 -29.8281553 39.50509 41.092964 41.092964 0 0 0 41.0925813 41.0931 41.092964 41.092964 0 0 0 41.093099 -41.0931 41.092964 41.092964 0 0 0 -0.102836 -2.9068 41.092964 41.092964 0 0 0 -38.04884 -38.03902 l -2.962092 -52.36321 a 36.813842 36.813842 0 0 0 20.093347 -12.61939 l 33.150948 15.70705 v 5.3e-4 a 27.542416 27.542416 0 0 0 -0.125574 2.49907 27.542416 27.542416 0 0 0 27.542503 27.54249 27.542416 27.542416 0 0 0 27.5425 -27.5425 27.542416 27.542416 0 0 0 -27.5425 -27.5425 27.542416 27.542416 0 0 0 -22.44618 11.61479 L 72.291741 134.35163 A 36.813842 36.813842 0 0 0 73.848753 123.81377 36.813842 36.813842 0 0 0 37.03498 86.999995 Z m 145.03189 90.486735 -76.71431 76.71435 27.93311 27.93293 L 210 205.41986 Z m -0.008 22.13769 5.79522 5.79544 -54.57645 54.57644 -5.7952 -5.79522 z m -81.50016 59.76108 -10.071854 37.61451 37.606034 -10.0803 z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="CloneSynthetic" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="m 139.80129 180.78831 a 20.783495 20.783495 0 0 0 -20.78345 20.78346 20.783495 20.783495 0 0 0 17.52643 20.50105 l 0.68209 12.05803 1.01877 18.01482 a 23.1993 23.1993 0 0 0 -16.83968 22.30284 23.1993 23.1993 0 0 0 23.1991 23.19938 23.1993 23.1993 0 0 0 23.19935 -23.19938 23.1993 23.1993 0 0 0 -0.058 -1.64105 23.1993 23.1993 0 0 0 -21.4807 -21.47518 l -1.67225 -29.56198 a 20.783495 20.783495 0 0 0 11.34383 -7.12437 l 18.71558 8.86752 v 3.1e-4 a 15.549251 15.549251 0 0 0 -0.0708 1.41086 15.549251 15.549251 0 0 0 15.5493 15.54927 15.549251 15.549251 0 0 0 15.54931 -15.54927 15.549251 15.549251 0 0 0 -15.54931 -15.54932 15.549251 15.549251 0 0 0 -12.67213 6.5572 l -17.75282 -8.41152 a 20.783495 20.783495 0 0 0 0.87902 -5.94921 20.783495 20.783495 0 0 0 -20.78345 -20.78346 z M 31.983713 88.265691 A 30.676234 30.676234 0 0 0 1.3075339 118.94187 30.676234 30.676234 0 0 0 27.17639 149.20122 l 1.006764 17.79752 1.503689 26.58969 A 34.241941 34.241941 0 0 0 4.8316412 226.50722 34.241941 34.241941 0 0 0 39.073263 260.74928 34.241941 34.241941 0 0 0 73.315316 226.50722 34.241941 34.241941 0 0 0 73.229625 224.08505 34.241941 34.241941 0 0 0 41.524291 192.3879 L 39.05604 148.75469 A 30.676234 30.676234 0 0 0 55.799422 138.2392 l 27.624018 13.08837 v 4.4e-4 a 22.950541 22.950541 0 0 0 -0.104638 2.08242 22.950541 22.950541 0 0 0 22.950618 22.9506 22.950541 22.950541 0 0 0 22.95062 -22.9506 22.950541 22.950541 0 0 0 -22.95062 -22.95061 22.950541 22.950541 0 0 0 -18.703946 9.67837 L 61.362463 127.72286 A 30.676234 30.676234 0 0 0 62.65989 118.94187 30.676234 30.676234 0 0 0 31.983713 88.265691 Z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="ViewSettings" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="M22.889013,19.178117C23.365026,19.178117 23.75202,19.56508 23.75202,20.040055 23.75202,20.516007 23.365026,20.904069 22.889013,20.904069 22.413031,20.904069 22.02503,20.516007 22.02503,20.040055 22.02503,19.56508 22.413031,19.178117 22.889013,19.178117z M22.889013,15.528093C20.40003,15.528092 18.375006,17.552018 18.375006,20.040055 18.375006,22.529069 20.40003,24.554093 22.889013,24.554093 25.37702,24.554093 27.402014,22.529069 27.402014,20.040055 27.402014,17.552018 25.37702,15.528092 22.889013,15.528093z M22.167028,12.426042L23.834021,12.426042 23.834021,13.935075 23.981024,13.958024C24.912024,14.12404,25.772009,14.500016,26.509008,15.03505L26.62702,15.12404 27.757025,13.993058 28.935034,15.171037 27.806005,16.301042 27.940008,16.484025C28.422033,17.167008,28.769018,17.950089,28.943029,18.796037L28.996008,19.093034 30.500006,19.093034 30.500006,20.759049 29.02503,20.759049 28.997015,20.980119C28.848028,21.952043,28.472021,22.85109,27.924017,23.619035L27.805029,23.779069 28.935034,24.909074 27.757025,26.088029 26.62702,24.958024 26.61701,24.966081C25.866034,25.536027,24.981024,25.938004,24.019018,26.117082L23.834021,26.147111 23.834021,27.426042 22.167028,27.426042 22.167028,26.177018 21.949011,26.149064C20.942022,25.995011,20.014013,25.596086,19.228033,25.016007L19.151007,24.957047 18.019018,26.088029 16.841009,24.909074 17.972021,23.779069 17.863013,23.633073C17.294012,22.839005,16.908026,21.905046,16.767034,20.894059L16.75202,20.759049 15.500006,20.759049 15.500006,19.093034 16.783026,19.093034 16.812017,18.91005C16.991034,17.947038,17.393011,17.063004,17.963019,16.312028L17.972021,16.301042 16.841009,15.171037 18.019018,13.993058 19.15003,15.123063 19.310034,15.005021C20.078009,14.458024,20.977026,14.081071,21.949011,13.932023L22.167028,13.905046z M16.000014,6.0000114C14.346014,6.0000114 13.000014,7.3460112 13.000014,9.0000114 13.000014,10.654011 14.346014,12.000011 16.000014,12.000011 17.654014,12.000011 19.000014,10.654011 19.000014,9.0000114 19.000014,7.3460112 17.654014,6.0000114 16.000014,6.0000114z M16.000014,4.0000114C18.757014,4.0000114 21.000014,6.2430115 21.000014,9.0000114 21.000014,11.757011 18.757014,14.000011 16.000014,14.000011 13.243014,14.000011 11.000014,11.757011 11.000014,9.0000114 11.000014,6.2430115 13.243014,4.0000114 16.000014,4.0000114z M16.000123,0C24.651189,0 31.47924,8.0160384 31.765244,8.3580403 32.078245,8.7290418 32.078245,9.2720447 31.765244,9.6440461 31.700243,9.7220466 30.130231,11.580056 27.56321,13.533065L26.352201,11.941058C27.853213,10.798052 29.000222,9.6770465 29.645226,9.0010433 27.881213,7.1610341 22.366171,2.0000095 16.000123,2.0000095 9.6350741,2.0000095 4.1210318,7.1590343 2.3550186,9.0000434 4.013031,10.731052 8.9770689,15.388074 14.846114,15.946077L14.657112,17.936087C6.6410513,17.175083 0.49200439,9.9510479 0.23400211,9.6430461 -0.078000069,9.2720447 -0.078000069,8.7290418 0.23400211,8.3580403 0.52000427,8.0160384 7.3480568,0 16.000123,0z"
/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Export" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="M23.471008,4.2230202L32,12.800012 23.471008,20.360005 23.471008,16.322012C23.471008,16.322012 8.7430115,12.294 5.0610046,20.360005 5.0610046,18.343985 6.3990173,8.2560073 23.471008,8.2560073z M0,0L21.334015,0 21.334015,2.1340014 21.334015,4.2690102 19.200012,4.2690102 19.200012,2.1340014 2.1340027,2.1340014 2.1340027,23.466997 19.200012,23.466997 19.200012,21.331989 21.334015,21.331989 21.334015,23.466997 21.334015,25.601 19.200012,25.601 0,25.601 0,23.466997 0,2.1340014z"
/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<DrawingImage x:Key="Import" x:Shared="False">
<DrawingImage.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing
Brush="Black"
Geometry="M13.594002,4.2219891L13.594002,8.255989C30.661003,8.255989 32,18.345018 32,20.360004 28.319,12.293011 13.594002,16.32399 13.594002,16.32399L13.594002,20.360004 5.0610008,12.798993z M0,0L21.333,0 21.333,2.1329974 21.333,4.2670025 19.201,4.2670025 19.201,2.1329974 2.1330032,2.1329974 2.1330032,23.467003 19.201,23.467003 19.201,21.332998 21.333,21.332998 21.333,23.467003 21.333,25.6 19.201,25.6 0,25.6 0,23.467003 0,2.1329974z"
/>
</DrawingGroup.Children>
</DrawingGroup>
</DrawingImage.Drawing>
</DrawingImage>
<!-- Pin
<Path Data="F1M3,11L3,7 0,7 0,6 1,6 1,1 1,0 6,0 6,1 6,6 7,6 7,7 4,7 4,11 3,11z M2,1L2,6 4,6 4,1 2,1z" />
Unpin
<Path Data="F1M0,3L4,3 4,0 5,0 5,1 10,1 11,1 11,6 10,6 5,6 5,7 4,7 4,4 0,4 0,3z M10,2L5,2 5,4 10,4 10,2z" />
-->
</ResourceDictionary>
@@ -0,0 +1,56 @@
using bts.api;
using bts.spark;
using mbts;
using mbts.co2;
using mbts.spark;
using mbts.ui;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Media;
using static mbts.ui.shell.ProtoBufSerializationHelper;
namespace bts.shell
{
[Export(typeof(IShellModule))]
class MarketShellModule : IShellModule
{
[ImportingConstructor]
public MarketShellModule(IBus bus, MDConsumer consumer, OrdersModel orders_model, [Import("username")]string user_name) {
_tsf = new TimeAndSalesWindowFactory(this, bus, consumer);
_mvf = new MarketViewWindowFactory(this, bus, orders_model);
}
TimeAndSalesWindowFactory _tsf;
MarketViewWindowFactory _mvf;
#region IShellModule
public ImageSource icon => Icons.Date;
public string name => "Market";
public int priority => 10;
public IEnumerable<SparkCommand> actions => new [] {
SparkCommands.PickMarketView,
SparkCommands.PickTimeAndSales
};
public Task<IShellWindow> create(Stream load_stream) {
if (try_deserialize(load_stream, out ShellSerializationHeader header)) {
if (header.name == _tsf.name) return _tsf.load_window(load_stream, header.version);
if (header.name == _mvf.name) return _mvf.load_window(load_stream, header.version);
}
return null;
}
public void Dispose() {
Disposable.dispose(ref _tsf);
Disposable.dispose(ref _mvf);
}
#endregion
}
}
@@ -0,0 +1,307 @@
using bts.api;
using bts.api.orderman;
using mbts.co2;
using mbts.collections;
using mbts.spark.utilities;
using mbts.ui;
using mbts.ui.controls;
using mbts.ui.spark;
using mbts.ui.utility;
using mbts.utils;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using System.Reactive.Linq;
using System.Windows.Input;
namespace mbts.spark {
partial class MarketViewVM {
public class Row : SecurityMDRow, IDisposable, IEquatable<Row>, DIYGrid.IRowVM, DIYGrid.IActionableRowVM {
readonly IBus _bus;
readonly OrdersModel _orders_model;
readonly AnimationManager _animation = new AnimationManager();
readonly ObservableCollection<OrderRecordImmutable> _orders = new ObservableCollection<OrderRecordImmutable>();
readonly ObservableFilterCollection<OrderRecordImmutable> _working_orders, _working_bids, _working_asks;
readonly string _security_text, _security_key_text;
readonly Property<double> _bid_price, _ask_price, _last_price, _day_change, _settlement, _session_high, _session_low;
readonly Property<ushort> _bid_size, _ask_size;
readonly CellProperty<int> _position;
readonly CellProperty<ushort> _last_size;
readonly CellProperty<ulong> _volume;
readonly CellProperty<bool> _inside_bids, _inside_asks;
readonly CellProperty<int> _working_bid_volume, _working_ask_volume;
readonly CellProperty<double> _working_best_bid, _working_best_ask;
readonly CellProperty<string> _working_bids_text, _working_asks_text;
readonly MyOrderSummarizer _order_summarizer = new MyOrderSummarizer();
ulong _bbo_ref, _last_ref;
public Row(IBus bus, SecurityMD smd, OrdersModel orders_model) : base(smd) {
_bus = bus;
_orders_model = orders_model;
_security_text = smd.security.ToString();
_security_key_text = security_key.ToString();
string format_price(double price) => security.ContractSpec.format(price);
_position = new CellProperty<int>(0);
_bid_price = backing(nameof(bid_price), double.NaN);
_ask_price = backing(nameof(ask_price), double.NaN);
_bid_size = backing<ushort>(nameof(bid_size), 0);
_ask_size = backing<ushort>(nameof(ask_size), 0);
_last_price = backing(nameof(last_price), double.NaN);
_last_size = new CellProperty<ushort>(0);
_day_change = backing(nameof(day_change), double.NaN);
_session_low = backing(nameof(session_low), double.NaN);
_session_high = backing(nameof(session_high), double.NaN);
_settlement = backing(nameof(settlement), double.NaN);
_volume = new CellProperty<ulong>(0);
_inside_bids = new CellProperty<bool>();
_inside_asks = new CellProperty<bool>();
_working_bid_volume = new CellProperty<int>();
_working_ask_volume = new CellProperty<int>();
//
_working_orders = new ObservableFilterCollection<OrderRecordImmutable>(_orders, o => o.is_active());
_working_bids = new ObservableFilterCollection<OrderRecordImmutable>(_working_orders, o => o.Def.Side == Side.Buy);
_working_asks = new ObservableFilterCollection<OrderRecordImmutable>(_working_orders, o => o.Def.Side == Side.Sell);
_working_best_bid = new CellProperty<double>(format_price, double.NaN);
_working_best_ask = new CellProperty<double>(format_price, double.NaN);
_working_bids_text = new CellProperty<string>(string.Empty);
_working_asks_text = new CellProperty<string>(string.Empty);
//
default_command = new DelegateCommand(_show_ladder);
bid_price_click = new DelegateCommand(() => _show_order_ticket(MarketViewView.Columns.Bid));
bid_size_click = new DelegateCommand(() => _show_order_ticket(MarketViewView.Columns.BidSize));
working_bids_click = new DelegateCommand(() => _show_order_book(MarketViewView.Columns.WorkingBids));
ask_price_click = new DelegateCommand(() => _show_order_ticket(MarketViewView.Columns.Ask));
ask_size_click = new DelegateCommand(() => _show_order_ticket(MarketViewView.Columns.AskSize));
working_asks_click = new DelegateCommand(() => _show_order_book(MarketViewView.Columns.WorkingAsks));
_animation.AnimationsChanged += on_animations_changed;
void on_animations_changed() => RaisePropertyChanged(nameof(animations));
_dispose = Disposable.Create(
_orders_model.on_security_orders(security.Id).ObserveOnDispatcher().Subscribe(_on_orders),
_position.ObserveOnDispatcher().Subscribe(v => _animation.animate_position(v.newval > v.oldval)),
_inside_bids.ObserveOnDispatcher().Subscribe(v => _animation.animate_working_bids_inside(v.newval)),
_inside_asks.ObserveOnDispatcher().Subscribe(v => _animation.animate_working_asks_inside(v.newval)),
_day_change.ObserveOnDispatcher().Subscribe(v => _animation.animate_day_change(v.newval > v.oldval)),
Disposable.Create(() => _animation.AnimationsChanged -= on_animations_changed)
);
}
public event Action invalidated;
#region Bound Properties
public bool inside_bids => _inside_bids.value;
public bool inside_asks => _inside_asks.value;
public int position => _position.value;
public double last_price => _last_price.Value;
public ushort last_size => _last_size.value;
public double bid_price => _bid_price.Value;
public ushort bid_size => _bid_size.Value;
public double ask_price => _ask_price.Value;
public ushort ask_size => _ask_size.Value;
public ulong volume => _volume.value;
public double settlement => _settlement.Value;
public double day_change => _day_change.Value;
public double session_low => _session_low.Value;
public double session_high => _session_high.Value;
public int working_bid_volume => _working_bid_volume.value;
public int working_ask_volume => _working_ask_volume.value;
public string working_bids_text => OrderUtils.order_collection_summary(_order_summarizer.best_working_bid, _order_summarizer.best_working_bid_qty, _order_summarizer.working_bid_qty, security.ContractSpec);
public string working_asks_text => OrderUtils.order_collection_summary(_order_summarizer.best_working_ask, _order_summarizer.best_working_ask_qty, _order_summarizer.working_ask_qty, security.ContractSpec);
public double working_best_bid => _working_best_bid.value;
public double working_best_ask => _working_best_ask.value;
public IList<CellAnimation> animations => _animation.get_animations().ToList();
public ICommand bid_price_click { get; }
public ICommand bid_size_click { get; }
public ICommand working_bids_click { get; }
public ICommand ask_price_click { get; }
public ICommand ask_size_click { get; }
public ICommand working_asks_click { get; }
public ICommand default_command { get; }
#endregion
public void refresh() {
bool dirty = false;
if (md.md.get_bbo(ref _bbo_ref, out NativePriceSize b, out NativePriceSize a)) {
_bid_price.set(b.price);
_bid_size.set(b.size);
_ask_price.set(a.price);
_ask_size.set(a.size);
_inside_bids.on_next_distinct(_bid_price.Value >= _working_best_bid.value, ref dirty);
_inside_asks.on_next_distinct(_ask_price.Value <= _working_best_ask.value, ref dirty);
}
if (md.md.get_last_trade(ref _last_ref, out NativePriceSize ps, out DateTime ts, out ulong v)) {
_last_price.set(ps.price);
_last_size.on_next_distinct(ps.size, ref dirty);
_volume.on_next_distinct(v, ref dirty);
}
_settlement.set(md.md.settlement_price);
_session_low.set(md.md.session_low);
_session_high.set(md.md.session_high);
_day_change.set(last_price - settlement);
if (dirty)
invalidated?.Invoke();
}
public bool Equals(Row other) =>
other != null &&
other.security_key == security_key;
public override bool Equals(object obj) =>
Equals(obj as Row);
public override int GetHashCode() =>
security_key.GetHashCode();
#region Show Windows
void _show_ladder() => _bus.post(SparkTags.ShowLadderTag, md);
void _show_order_book(MarketViewView.Columns col) {
switch (col) {
case MarketViewView.Columns.WorkingBids: _show_order_book(Side.Buy); break;
case MarketViewView.Columns.WorkingAsks: _show_order_book(Side.Sell); break;
}
}
void _show_order_book(Side side) =>
_bus.post(SparkTags.ShowOrderBookTag, new bts.shell.OrderBookWindowFactory.OrderBookStartupData(
new List<SortingCriteria>(),
new bts.shell.OrderBookWindowFactory.FilterStates {
statuses = new[] { OrderStatus.Working },
sides = new[] { side },
security_criteria = new SecurityCriteria(security)
}));
void _show_order_ticket(MarketViewView.Columns col) {
var order = _orders_model.factory.order(security);
switch (col) {
case MarketViewView.Columns.Bid:
order.Side = Side.Sell;
_bus.post(SparkTags.ShowOrderTicketTag, (order, bid_price, 0u));
break;
case MarketViewView.Columns.BidSize:
order.Side = Side.Sell;
_bus.post(SparkTags.ShowOrderTicketTag, (order, bid_price, bid_size));
break;
case MarketViewView.Columns.Ask:
order.Side = Side.Buy;
_bus.post(SparkTags.ShowOrderTicketTag, (order, ask_price, 0u));
break;
case MarketViewView.Columns.AskSize:
order.Side = Side.Buy;
_bus.post(SparkTags.ShowOrderTicketTag, (order, ask_price, ask_size));
break;
case MarketViewView.Columns.Last:
_bus.post(SparkTags.ShowOrderTicketTag, (order, last_price, 0u));
break;
case MarketViewView.Columns.LastSize:
_bus.post(SparkTags.ShowOrderTicketTag, (order, last_price, last_size));
break;
}
}
#endregion
#region Callbacks
void _on_orders(ITableUpdateTransform<OrderRecordImmutable, uint> orders) {
foreach (var o in orders.removed)
_order_summarizer.remove_order(o);
foreach (var o in orders.added)
_order_summarizer.add_order(o);
bool dirty = false;
_refresh_orders(ref dirty);
if (dirty)
invalidated?.Invoke();
}
void _refresh_orders(ref bool dirty) {
_position.on_next_distinct(_order_summarizer.position, ref dirty);
_working_bid_volume.on_next_distinct(_order_summarizer.working_bid_qty, ref dirty);
_working_ask_volume.on_next_distinct(_order_summarizer.working_ask_qty, ref dirty);
_working_best_bid.on_next_distinct(_order_summarizer.best_working_bid, ref dirty);
_working_best_ask.on_next_distinct(_order_summarizer.best_working_ask, ref dirty);
_inside_bids.on_next_distinct(_order_summarizer.best_working_bid >= bid_price, ref dirty);
_inside_asks.on_next_distinct(_order_summarizer.best_working_ask <= ask_price, ref dirty);
RaisePropertyChanged(nameof(working_bids_text), nameof(working_asks_text));
}
#endregion
class MyOrderSummarizer {
SortedSetMap<double, OrderRecordImmutable> _bids, _asks;
int _best_bid_working_qty, _best_ask_working_qty, _position, _working_bid_qty, _working_ask_qty;
public MyOrderSummarizer() {
_bids = new SortedSetMap<double, OrderRecordImmutable>(
OrderDataHelper.CompareUtils.bid_price_comparer,
OrderDataHelper.CompareUtils.order_record_id_eq_comparer);
_asks = new SortedSetMap<double, OrderRecordImmutable>(
OrderDataHelper.CompareUtils.ask_price_comparer,
OrderDataHelper.CompareUtils.order_record_id_eq_comparer);
}
// bid
public double best_working_bid => _bids.Count > 0 ? _bids.at_index(0).Key : double.NaN;
public int best_working_bid_qty => _best_bid_working_qty;
public int working_bid_qty => _working_bid_qty;
// ask
public double best_working_ask => _asks.Count > 0 ? _asks.at_index(0).Key : double.NaN;
public int best_working_ask_qty => _best_ask_working_qty;
public int working_ask_qty => _working_ask_qty;
// pos
public int position => _position;
public void add_order(OrderRecordImmutable o) {
// This is a market data form - not an orders form - so just show data for root/non-child orders.
if (o.has_parent())
return;
switch (o.side()) {
case Side.Buy:
_position += (int)o.filled();
if (o.is_active()) {
_working_bid_qty += o.working_quantity();
_bids.add(o.price(), o);
}
break;
case Side.Sell:
_position -= (int)o.filled();
if (o.is_active()) {
_working_ask_qty += o.working_quantity();
_asks.add(o.price(), o);
}
break;
default: return;
}
_refresh();
}
public void remove_order(OrderRecordImmutable o) {
// This is a market data form - not an orders form - so just show data for root/non-child orders.
if (o.has_parent())
return;
switch (o.side()) {
case Side.Buy:
_position -= (int)o.filled();
if (o.is_active()) {
_working_bid_qty -= o.working_quantity();
_bids.remove(o.price(), o);
}
break;
case Side.Sell:
_position += (int)o.filled();
if (o.is_active()) {
_working_ask_qty -= o.working_quantity();
_asks.remove(o.price(), o);
}
break;
default: return;
}
_refresh();
}
void _refresh() {
_best_bid_working_qty = _bids.Count > 0 ? _bids.at_index(0).Sum(o => o.working_quantity()) : 0;
_best_ask_working_qty = _asks.Count > 0 ? _asks.at_index(0).Sum(o => o.working_quantity()) : 0;
}
}
}
}
}
@@ -0,0 +1,164 @@
using bts.api;
using mbts.spark.filters;
using mbts.ui;
using mbts.ui.utility;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows.Data;
using System.Windows.Media;
using System.Reactive.Linq;
using static bts.shell.MarketViewWindowFactory;
using static mbts.ui.controls.DIYGrid;
using static mbts.ui.spark.MarketViewView;
namespace mbts.spark {
partial class MarketViewVM : SecurityMDGrid<MarketViewVM.Row, SecurityMD> {
readonly IBus _bus;
readonly OrdersModel _orders_model;
public MarketViewVM(IBus bus, OrdersModel orders_model, IObservable<StartupData> state)
: base(RXCollection.Create(state.SelectMany(s => s.security_criteria.subscribe_md(bus)), SecurityDataHelper.EqualityComparer.MDComparer), null) {
_bus = bus;
_orders_model = orders_model;
security_filter = new RegexFilterVM<Row>(r => r.security.ToString(), nameof(Row.security));
// Columns
const string size_col_header = "Qty", working_col_header = "Working";
const double working_orders_col_width = 105;
IMultiValueConverter price_converter = new ui.spark.converters.TickDisplayConverter();
add_col(Columns.Security, "Security", r => r.security.ToString(), nameof(Row.security), DefaultColumnWidths.Security, security_filter, DataGridFilterKnownTemplates.Regex);
add_col(Columns.Volume, "Volume", r => r.volume.ToString(), nameof(Row.volume), 64, volume_filter, DataGridFilterKnownTemplates.ULongMinMax);
add_col(Columns.Last, "Last", r => r.format_price(r.last_price), nameof(Row.last_price), DefaultColumnWidths.Price, last_price_filter, DataGridFilterKnownTemplates.DoubleMinMax);
add_col(Columns.LastSize, size_col_header, r => r.last_size.ToString(), nameof(Row.last_size), DefaultColumnWidths.Size, last_size_filter, DataGridFilterKnownTemplates.UShortMinMax);
add_col(Columns.Position, "Pos", r => r.position.ToString(), nameof(Row.position), DefaultColumnWidths.Size, position_filter, DataGridFilterKnownTemplates.IntMinMax, true);
add_hl_working_orders_col(Columns.WorkingBids, working_col_header, nameof(Row.working_bids_text), nameof(Row.working_best_bid), nameof(Row.working_bids_click), working_bid_volume_filter, BTSColors.MarketData.bid_brush);
add_hl_size_col(Columns.BidSize, size_col_header, nameof(Row.bid_size), nameof(Row.bid_size_click), bid_size_filter, BTSColors.MarketData.bid_brush);
add_hl_price_col(Columns.Bid, "Bid", nameof(Row.bid_price), nameof(Row.bid_price_click), bid_price_filter, BTSColors.header_text_brush, BTSColors.MarketData.bid_brush);
add_hl_price_col(Columns.Ask, "Ask", nameof(Row.ask_price), nameof(Row.ask_price_click), ask_price_filter, BTSColors.header_text_brush, BTSColors.MarketData.ask_brush);
add_hl_size_col(Columns.AskSize, size_col_header, nameof(Row.ask_size), nameof(Row.ask_size_click), ask_size_filter, BTSColors.MarketData.ask_brush);
add_hl_working_orders_col(Columns.WorkingAsks, working_col_header, nameof(Row.working_asks_text), nameof(Row.working_best_ask), nameof(Row.working_asks_click), working_ask_volume_filter, BTSColors.MarketData.ask_brush);
add_col(Columns.Settlement, "Settlement", r => r.format_price(r.settlement), nameof(Row.settlement), DefaultColumnWidths.Price, settlement_filter, DataGridFilterKnownTemplates.DoubleMinMax);
add_col(Columns.DayChange, "Change", r => r.format_price(r.day_change), nameof(Row.day_change), DefaultColumnWidths.Price, day_change_filter, DataGridFilterKnownTemplates.DoubleMinMax, true);
add_col(Columns.SessionLow, "Low", r => r.format_price(r.session_low), nameof(Row.session_low), DefaultColumnWidths.Price, session_low_filter, DataGridFilterKnownTemplates.DoubleMinMax);
add_col(Columns.SessionHigh, "High", r => r.format_price(r.session_high), nameof(Row.session_high), DefaultColumnWidths.Price, session_high_filter, DataGridFilterKnownTemplates.DoubleMinMax);
add_col(Columns.SecurityKey, "Security Key", r => r.security_key.ToString(), nameof(Row.security_key), DefaultColumnWidths.SecurityKey, security_key_filter, DataGridFilterKnownTemplates.Regex);
//
void add_col(Columns col_key, string header, Func<Row, string> get_text, string prop, double width, IDataGridColumnFilter filter, string filter_template, bool is_animatable = false) =>
columns.Add(new RenderTextColumn<Row, Columns>(col_key, get_text, filter, filter_template) {
Header = header,
sort_member_path = prop,
Width = width,
padding = is_animatable ? AnimatableCellPadding : DefaultCellPadding
});
void add_hl_price_col(Columns col_key, string header, string prop, string command_prop, IDataGridColumnFilter filter, Brush foreground, Brush background) =>
add_hl_col(col_key, header, price_binding(prop), prop, command_prop, filter, DataGridFilterKnownTemplates.DoubleMinMax, DefaultColumnWidths.Price, foreground, background, SelectionFill);
void add_hl_size_col(Columns col_key, string header, string prop, string command_prop, IDataGridColumnFilter filter, Brush foreground) =>
add_hl_col(col_key, header, new Binding(prop), prop, command_prop, filter, DataGridFilterKnownTemplates.UShortMinMax, DefaultColumnWidths.Size, foreground, null, null);
void add_hl_working_orders_col(Columns col_key, string header, string text_prop, string sort_prop, string command_prop, IDataGridColumnFilter filter, Brush foreground) =>
add_hl_col(col_key, header, new Binding(text_prop), sort_prop, command_prop, filter, DataGridFilterKnownTemplates.IntMinMax, working_orders_col_width, foreground, null, null);
void add_hl_col(
Columns col_key, string header, BindingBase binding, string prop, string command_prop,
IDataGridColumnFilter filter, string filter_template, double width, Brush foreground, Brush background, Brush background_overlay) =>
columns.Add(new HyperlinkElementColumn<Row, Columns>(
col_key, binding, new Binding(command_prop), filter, filter_template) {
Header = header,
sort_member_path = prop,
foreground = foreground,
background = background,
background_overlay = background_overlay,
Width = DefaultColumnWidths.Price
});
BindingBase price_binding(string prop) {
var mb = new MultiBinding { Converter = price_converter };
mb.Bindings.Add(new Binding(prop) { Mode = BindingMode.OneWay });
mb.Bindings.Add(new Binding($"{nameof(Row.security)}.{nameof(SecurityImmutable.ContractSpec)}") { Mode = BindingMode.OneWay });
return mb;
}
//
_resources.AddRange(
state.ObserveOnDispatcher().Subscribe(s => {
using (rows_view.DeferRefresh()) {
rows_view.SetSortingCriteria(s.sorting_criteria);
var filters = s.filters;
if (filters != null) {
security_filter.load_state(filters.security);
bid_price_filter.load_state(filters.bid_price);
bid_size_filter.load_state(filters.bid_size);
ask_price_filter.load_state(filters.ask_price);
ask_size_filter.load_state(filters.ask_size);
last_price_filter.load_state(filters.last_price);
last_size_filter.load_state(filters.last_size);
day_change_filter.load_state(filters.day_change);
settlement_filter.load_state(filters.settlement);
session_low_filter.load_state(filters.session_low);
session_high_filter.load_state(filters.session_high);
position_filter.load_state(filters.position);
working_bid_volume_filter.load_state(filters.working_bid_volume);
working_ask_volume_filter.load_state(filters.working_ask_volume);
volume_filter.load_state(filters.volume);
security_key_filter.load_state(filters.security_key);
}
}
}), DataGridFilterHelper.hook_filters(rows_view,
security_filter, bid_price_filter, bid_size_filter, ask_price_filter, ask_size_filter, last_price_filter, last_size_filter, day_change_filter, settlement_filter,
session_low_filter, session_high_filter, position_filter, working_bid_volume_filter, working_ask_volume_filter, volume_filter, security_key_filter),
WorkLoop.Start("MarketView", _refresh)
);
}
public ObservableCollection<ColumnBase> columns { get; } = new ObservableCollection<ColumnBase>();
#region Filters
public IDataGridColumnPersistentFilter<Row, string> security_filter { get; }
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> bid_price_filter { get; } = new DoubleMinMax<Row>(r => r.bid_price, nameof(Row.bid_price));
public IDataGridColumnPersistentFilter<Row, UShortMinMaxState> bid_size_filter { get; } = new UShortMinMax<Row>(r => r.bid_size, nameof(Row.bid_size));
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> ask_price_filter { get; } = new DoubleMinMax<Row>(r => r.ask_price, nameof(Row.ask_price));
public IDataGridColumnPersistentFilter<Row, UShortMinMaxState> ask_size_filter { get; } = new UShortMinMax<Row>(r => r.ask_size, nameof(Row.ask_size));
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> last_price_filter { get; } = new DoubleMinMax<Row>(r => r.last_price, nameof(Row.last_price));
public IDataGridColumnPersistentFilter<Row, UShortMinMaxState> last_size_filter { get; } = new UShortMinMax<Row>(r => r.last_size, nameof(Row.last_size));
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> day_change_filter { get; } = new DoubleMinMax<Row>(r => r.day_change, nameof(Row.day_change));
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> settlement_filter { get; } = new DoubleMinMax<Row>(r => r.settlement, nameof(Row.settlement));
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> session_low_filter { get; } = new DoubleMinMax<Row>(r => r.session_low, nameof(Row.session_low));
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> session_high_filter { get; } = new DoubleMinMax<Row>(r => r.session_high, nameof(Row.session_high));
public IDataGridColumnPersistentFilter<Row, IntMinMaxState> position_filter { get; } = new IntMinMax<Row>(r => r.position, nameof(Row.position));
public IDataGridColumnPersistentFilter<Row, IntMinMaxState> working_bid_volume_filter { get; } = new IntMinMax<Row>(r => r.working_bid_volume, nameof(Row.working_bid_volume));
public IDataGridColumnPersistentFilter<Row, IntMinMaxState> working_ask_volume_filter { get; } = new IntMinMax<Row>(r => r.working_ask_volume, nameof(Row.working_ask_volume));
public IDataGridColumnPersistentFilter<Row, ULongMinMaxState> volume_filter { get; } = new ULongMinMax<Row>(r => r.volume, nameof(Row.volume));
public IDataGridColumnPersistentFilter<Row, string> security_key_filter { get; } = new RegexFilterVM<Row>(r => r.security_key.ToString(), nameof(Row.security_key));
public FilterStates get_filter_states() {
return new FilterStates {
security = security_filter.get_state(),
bid_price = bid_price_filter.get_state(),
bid_size = bid_size_filter.get_state(),
ask_price = ask_price_filter.get_state(),
ask_size = ask_size_filter.get_state(),
last_price = last_price_filter.get_state(),
last_size = last_size_filter.get_state(),
day_change = day_change_filter.get_state(),
settlement = settlement_filter.get_state(),
session_low = session_low_filter.get_state(),
session_high = session_high_filter.get_state(),
position = position_filter.get_state(),
working_bid_volume = working_bid_volume_filter.get_state(),
working_ask_volume = working_ask_volume_filter.get_state(),
volume = volume_filter.get_state(),
security_key = security_key_filter.get_state()
};
}
#endregion
protected override Row row_factory(SecurityMD smd) => new Row(_bus, smd, _orders_model);
protected override void on_row_removed(Row row) => row.Dispose();
protected override IEnumerable<SortingCriteria> get_default_sorting() { yield return new SortingCriteria(nameof(Row.security), true); }
void _refresh() {
foreach (var r in _row_vms) r.refresh();
}
}
}
@@ -0,0 +1,43 @@
<UserControl
x:Class="mbts.ui.spark.MarketViewView"
x:ClassModifier="internal"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:mbts.ui.controls"
xmlns:usp="clr-namespace:mbts.ui.spark"
FocusManager.IsFocusScope="True"
Background="{StaticResource CommonBackground}"
>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/view/Controls/DataGridEx/Filters/Views/FilterTemplates.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<AdornerDecorator>
<c:DIYGrid
x:Name="_grid"
Columns="{Binding columns}"
CurrentRow="{Binding current_row}"
Rows="{Binding rows_view}"
>
<c:DIYGrid.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{x:Static c:DIYGrid.DefaultRowCommand}"/>
<KeyBinding Key="Return" Command="{x:Static c:DIYGrid.DefaultRowCommand}"/>
</c:DIYGrid.InputBindings>
<c:DIYGrid.CommandBindings>
<CommandBinding
Command="{x:Static c:DIYGrid.DefaultRowCommand}"
Executed="{x:Static c:DIYGrid.DefaultRowActionExecuted}"
CanExecute="{x:Static c:DIYGrid.DefaultRowActionCanExecute}"
/>
</c:DIYGrid.CommandBindings>
<c:DIYGrid.RowTemplate>
<DataTemplate>
<usp:MarketViewRowView usp:GridAnimation.RowAnimation="{Binding animations}"/>
</DataTemplate>
</c:DIYGrid.RowTemplate>
</c:DIYGrid>
</AdornerDecorator>
</UserControl>
@@ -0,0 +1,23 @@
using mbts.spark;
using mbts.ui.controls;
using System.Linq;
using System.Windows.Controls;
namespace mbts.ui.spark {
/// <summary>
/// Interaction logic for MarketSheetsView.xaml
/// </summary>
partial class MarketViewView : UserControl {
public enum Columns { Security, Volume, Last, LastSize, Position, WorkingBids, Bid, BidSize, Ask, AskSize, WorkingAsks, Settlement, DayChange, SessionLow, SessionHigh, SecurityKey }
public MarketViewView() {
InitializeComponent();
AdornerHelper.attach_continuously_on_loaded(
() => new GridAnimation.DIYGridAnimationAdorner<Columns>(
_grid, _grid.descendants_of_type<DIYGridRowsPresenter>().First()),
_grid);
}
}
class MarketViewRowView : DIYGrid.HighPerformanceRow<MarketViewVM.Row, MarketViewView.Columns> { }
}
@@ -0,0 +1,70 @@
using bts.api;
using bts.shell;
using bts.spark;
using mbts.ui;
using mbts.ui.spark;
using mbts.utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Linq;
using System.Windows;
namespace mbts.spark {
class MarketViewWindow : SparkWindow<MarketViewWindowFactory.StartupData>, ISharedWindow {
const string _window_type = "MarketView", _thread_id = "MarketView";
readonly OrdersModel _orders_model;
readonly AllowOnce _init_guard = new AllowOnce("MarketView");
MarketViewVM _vm;
MarketViewView _view;
MarketViewWindowFactory.StartupData _state;
IReadOnlyList<SparkCommand> _commands;
IDisposable _subscriptions;
public MarketViewWindow(MarketViewWindowFactory factory, IBus bus, OrdersModel orders_model, MarketViewWindowFactory.StartupData state)
: base("Market View", bus, factory, SparkCommands.ShowMarketView.icon) {
_orders_model = orders_model;
_state = state;
Icon.Freeze();
}
event Action<MarketViewWindowFactory.StartupData> _state_changed;
public override string window_type => _window_type;
public override UIElement Content => _view;
public override IEnumerable<SparkCommand> Commands => _commands;
public override MarketViewWindowFactory.StartupData SaveState => _state = new MarketViewWindowFactory.StartupData(_state.security_criteria, _vm.rows_view.GetSortingCriteria(), _vm.get_filter_states());
public override double MinWidth => 1035 + SPARK_MENU_COLLAPSED_WIDTH + LAUNCHER_BUTTON_BORDER_WIDTH;
public string thread_id => _thread_id;
public void thread_init() {
_init_guard.check_access();
Logger.notnull(_state);
var state_src = Observable.FromEvent<Action<MarketViewWindowFactory.StartupData>, MarketViewWindowFactory.StartupData>(cb => _state_changed += cb, cb => _state_changed -= cb).StartWith(_state);
_vm = new MarketViewVM(_bus, _orders_model, state_src);
_view = new MarketViewView { DataContext = _vm };
var update_securities_tag = new SparkTags.SparkTag<SecurityCriteria>("MarketView Callback");
var update_securities_cmd = SparkCommand.create("Update Market View", Icon, update_securities_tag);
_commands = new List<SparkCommand> {
SparkCommand.create("Change Securities", Icons.Admin, SparkTags.ShowAndEditPickMultiple, () => (update_securities_cmd, _state.security_criteria)),
SparkCommands.ShowLadders.complete(_vm.selected_security_mds_observable(), smds => smds.Count > 0),
SparkCommands.ShowOrderTicketFromSecurity.complete(_vm.current_security_md, md => md.HasValue, ObjectHelper.ValueOrDefault),
SparkCommands.ShowFills.complete(_vm.selected_securities_observable(), _ => true,
secs => new FillsWindowFactory.StartupData(new FillsWindowFactory.FilterStates {
security = secs.Count > 0 ? new SecurityCriteria(secs) : _state.security_criteria
})
),
SparkCommands.ShowTimeAndSales.complete(_vm.selected_securities_observable(), _ => true, secs => secs.Count > 0 ? new SecurityCriteria(secs) : _state.security_criteria),
SparkCommands.ShowSyntheticCreate.complete(_vm.selected_securities_observable(), secs => secs.Count > 0 && secs.Count < 3, secs => new SecurityCriteria(secs))
};
_subscriptions = _bus.subscribe(update_securities_tag).ObserveOnDispatcher().Subscribe(c =>
_state_changed?.Invoke(_state = new MarketViewWindowFactory.StartupData(c, _vm.rows_view.GetSortingCriteria(), _vm.get_filter_states())));
}
public override void Dispose() {
Disposable.dispose(ref _subscriptions);
_vm.Dispose();
Commands.OfType<IDisposable>().DisposeAll();
}
}
}
@@ -0,0 +1,89 @@
using bts.api;
using mbts.spark;
using mbts.spark.filters;
using mbts.ui;
using ProtoBuf;
using System;
using System.Collections.Generic;
using System.Reactive.Linq;
using System.Threading.Tasks;
namespace bts.shell {
class MarketViewWindowFactory : ShellWindowFactory<MarketViewWindowFactory.StartupData> {
readonly IBus _bus;
readonly OrdersModel _orders_model;
public MarketViewWindowFactory(MarketShellModule module, IBus bus, OrdersModel orders_model) : base(module, "MarketView") {
_bus = bus;
_orders_model = orders_model;
_dispose = bus.subscribe(SparkTags.ShowMarketViewTag).ObserveOnDispatcher().Subscribe(_show);
}
public override Task<IShellWindow> load(StartupData state) =>
Task.FromResult(_create(state));
void _show(SecurityCriteria criteria) =>
_bus.post(SparkTags.ShowWindow, _create(new StartupData(criteria, new List<SortingCriteria> { new SortingCriteria(nameof(MarketViewVM.Row.security), true) }, null)));
IShellWindow _create(StartupData state) => new MarketViewWindow(this, _bus, _orders_model, state);
[ProtoContract]
public class StartupData {
public const int Version = 1;
[ProtoMember(1)]
public readonly SecurityCriteria security_criteria;
[ProtoMember(2)]
public readonly List<SortingCriteria> sorting_criteria;
[ProtoMember(3)]
public readonly FilterStates filters;
StartupData() { }
public StartupData(SecurityCriteria security_criteria)
: this (security_criteria, new List<SortingCriteria>(), null) { }
public StartupData(SecurityCriteria security_criteria, List<SortingCriteria> sorting_criteria, FilterStates filters) {
this.security_criteria = security_criteria;
this.sorting_criteria = sorting_criteria;
this.filters = filters;
}
}
[ProtoContract]
public class FilterStates {
[ProtoMember(1)]
public string security;
[ProtoMember(2)]
public DoubleMinMaxState bid_price;
[ProtoMember(3)]
public UShortMinMaxState bid_size;
[ProtoMember(4)]
public DoubleMinMaxState ask_price;
[ProtoMember(5)]
public UShortMinMaxState ask_size;
[ProtoMember(6)]
public DoubleMinMaxState last_price;
[ProtoMember(7)]
public UShortMinMaxState last_size;
[ProtoMember(8)]
public DoubleMinMaxState day_change;
[ProtoMember(9)]
public DoubleMinMaxState settlement;
[ProtoMember(10)]
public DoubleMinMaxState session_low;
[ProtoMember(11)]
public DoubleMinMaxState session_high;
[ProtoMember(12)]
public IntMinMaxState position;
[ProtoMember(13)]
public IntMinMaxState working_bid_volume;
[ProtoMember(14)]
public IntMinMaxState working_ask_volume;
[ProtoMember(15)]
public ULongMinMaxState volume;
[ProtoMember(16)]
public string security_key;
}
}
}
@@ -0,0 +1,99 @@
using bts.api;
using bts.co2;
using mbts.co2;
using mbts.collections.extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Linq;
namespace mbts.spark {
struct TradeInfo {
public readonly SecurityImmutable security;
public readonly TradeMessageImmutable trade;
public TradeInfo(SecurityImmutable security, TradeMessageImmutable trade) {
this.security = security;
this.trade = trade;
}
}
class TimeAndSalesModel {
static readonly TimeSpan _poll_interval = TimeSpan.FromSeconds(0.4);
public TimeAndSalesModel(IBus bus, MDConsumer consumer, SecurityCriteria security_criteria) {
trades = security_criteria.subscribe_md_map(bus)
.Scan(new Dictionary<ChannelKey, ChannelConsumer>(),
(cache, md_map) => {
var copy = new Dictionary<ChannelKey, ChannelConsumer>(cache);
copy.sync_with_demux(md_map, get_channel_key, get_channel_consumer, update_channel_consumer);
return copy;
}
).Select(cache =>
Observable.Interval(_poll_interval)
.Select(_ => new List<TradeInfo>(cache.Values.SelectMany(c => c.read_trades())))
).SelectMany(_ => _);
ChannelKey get_channel_key(KeyValuePair<uint, SecurityMD> md_kv) =>
new ChannelKey(md_kv.Value.security.Symbol, md_kv.Value.security.security_type(), md_kv.Value.security.Exchange);
ChannelConsumer get_channel_consumer(IGrouping<ChannelKey, KeyValuePair<uint, SecurityMD>> channel_sec_group) {
var key = channel_sec_group.Key;
var rv = new ChannelConsumer(consumer.get_channel(key.symbol, key.type, key.exchange));
rv.set_securities(channel_sec_group);
return rv;
}
void update_channel_consumer(KeyValuePair<ChannelKey, ChannelConsumer> channel_kv, IEnumerable<KeyValuePair<uint, SecurityMD>> security_kvs) =>
channel_kv.Value.set_securities(security_kvs);
}
public IObservable<IReadOnlyList<TradeInfo>> trades { get; }
private class ChannelKey : IEquatable<ChannelKey> {
public readonly string symbol;
public readonly SecurityType type;
public readonly Venue exchange;
public ChannelKey(string symbol, SecurityType type, Venue exchange) {
this.symbol = symbol;
this.type = type;
this.exchange = exchange;
}
public bool Equals(ChannelKey other) =>
other != null &&
other.symbol == symbol &&
other.type == type &&
other.exchange == exchange;
public override bool Equals(object obj) =>
Equals(obj as ChannelKey);
public override int GetHashCode() =>
symbol.GetHashCode() ^
type.GetHashCode() ^
exchange.GetHashCode();
}
private class ChannelConsumer {
readonly MDConsumerChannel _channel;
Dictionary<uint, SecurityImmutable> _securities = new Dictionary<uint, SecurityImmutable>();
long _cursor = 0;
public ChannelConsumer(MDConsumerChannel channel) =>
_channel = channel;
public void set_securities(IEnumerable<KeyValuePair<uint, SecurityMD>> securities) =>
_securities = securities.ToDictionary(kv => kv.Key, kv => kv.Value.security);
public IEnumerable<TradeInfo> read_trades() {
var copy = _securities;
foreach (var tm in _channel.read_trades(ref _cursor)) {
if (copy.TryGetValue(tm.Key, out SecurityImmutable sec))
yield return new TradeInfo(sec, tm);
}
}
}
}
}
@@ -0,0 +1,136 @@
using bts.api;
using bts.co2;
using mbts.spark.filters;
using mbts.ui;
using mbts.ui.controls;
using mbts.ui.spark;
using mbts.ui.utility;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using System.Windows.Input;
using static bts.shell.TimeAndSalesWindowFactory;
namespace mbts.spark {
class TimeAndSalesVM : SecurityGrid<TimeAndSalesVM.Row, TradeInfo> {
readonly IBus _bus;
public TimeAndSalesVM(IBus bus, TimeAndSalesModel model, IReadOnlyCollection<SortingCriteria> sorting_criteria, FilterStates filters)
: base(RXCollection.CreateBuffer(model.trades, 1000), sorting_criteria) {
_bus = bus;
show_ladder = DelegateCommandParamObserver.Create(current_row_observable, r => _show_ladder_async(r).ignore(), r => r != null);
security_filter = new RegexFilterVM<Row>(r => r.security.ToString(), nameof(Row.security));
if (filters != null) {
time_filter.load_state(filters.time);
security_filter.load_state(filters.security);
price_filter.load_state(filters.price);
size_filter.load_state(filters.size);
trade_key_filter.load_state(filters.trade_key);
security_key_filter.load_state(filters.security_key);
}
// Columns
add_column(TimeAndSalesView.Columns.Security, "Security", DIYGrid.DefaultColumnWidths.Security, security_filter, DataGridFilterKnownTemplates.Regex);
add_column(TimeAndSalesView.Columns.Time, "Time", DIYGrid.DefaultColumnWidths.Time, time_filter, DataGridFilterKnownTemplates.TimeFilter);
add_column(TimeAndSalesView.Columns.Price, "Price", DIYGrid.DefaultColumnWidths.Price, price_filter, DataGridFilterKnownTemplates.DoubleMinMax);
add_column(TimeAndSalesView.Columns.Size, "Size", DIYGrid.DefaultColumnWidths.Size, size_filter, DataGridFilterKnownTemplates.UIntMinMax);
add_column(TimeAndSalesView.Columns.TradeKey, "Trade Key", DIYGrid.DefaultColumnWidths.TradeKey, trade_key_filter, DataGridFilterKnownTemplates.Regex);
add_column(TimeAndSalesView.Columns.SecurityKey, "Security Key", DIYGrid.DefaultColumnWidths.SecurityKey, security_key_filter, DataGridFilterKnownTemplates.Regex);
void add_column(TimeAndSalesView.Columns col_key, string header, double width, IDataGridColumnFilter filter, string filter_template) =>
columns.Add(new DIYGrid.RenderTextColumn<Row>(r => r[col_key], filter, filter_template) { Header = header, Width = width });
//
_resources.AddRange(
show_ladder,
DataGridFilterHelper.hook_filters(
rows_view, time_filter, security_filter, price_filter, size_filter, trade_key_filter, security_key_filter
)
);
}
public ObservableCollection<DIYGrid.ColumnBase> columns { get; } = new ObservableCollection<DIYGrid.ColumnBase>();
public DelegateCommandParamObserver<Row> show_ladder { get; }
#region Filters
public IDataGridColumnPersistentFilter<Row, TimeFilterTuple> time_filter { get; } = new TimeFilterVM<Row>(r => r.time, nameof(Row.time));
public IDataGridColumnPersistentFilter<Row, string> security_filter { get; }
public IDataGridColumnPersistentFilter<Row, DoubleMinMaxState> price_filter { get; } = new DoubleMinMax<Row>(r => r.price, nameof(Row.price));
public IDataGridColumnPersistentFilter<Row, UIntMinMaxState> size_filter { get; } = new UIntMinMax<Row>(r => r.size, nameof(Row.size));
public IDataGridColumnPersistentFilter<Row, string> security_key_filter { get; } = new RegexFilterVM<Row>(r => r.security_key.ToString(), nameof(Row.security_key));
public IDataGridColumnPersistentFilter<Row, string> trade_key_filter { get; } = new RegexFilterVM<Row>(r => r.trade_key.ToString(), nameof(Row.trade_key));
public FilterStates get_filter_states() =>
new FilterStates {
time = time_filter.get_state(),
security = security_filter.get_state(),
price = price_filter.get_state(),
size = size_filter.get_state(),
trade_key = trade_key_filter.get_state(),
security_key = security_key_filter.get_state()
};
#endregion
protected override IEnumerable<SortingCriteria> get_default_sorting() {
yield return new SortingCriteria(nameof(Row.time), false);
}
protected override Row row_factory(TradeInfo row_model) =>
new Row(this, row_model.security, row_model.trade);
async Task _show_ladder_async(Row row) {
var smd_lookup = await SparkUtils.get_security_md_async(_bus, row.security.Id);
if (smd_lookup.success) _bus.post(SparkTags.ShowLadderTag, smd_lookup.result);
}
public class Row : SecurityRow, DIYGrid.IRowVM {
readonly uint _trade_key;
readonly string
_security_text,
_time_text,
_price_text,
_size_text,
_trade_key_text,
_security_key_text;
public Row(TimeAndSalesVM parent, SecurityImmutable security, TradeMessageImmutable trade) : base(security) {
_trade_key = trade.Key;
time = trade.Time.lldatetime();
price = trade.Mantissa * Math.Pow(10, trade.Exponent);
size = trade.Size;
show_ladder = new DelegateCommand(() => parent._show_ladder_async(this).ignore());
_security_text = security.ToString();
_time_text = time.ToString("M/d h:mm:ss tt");
_price_text = security.ContractSpec.format(price);
_size_text = size.ToString();
_trade_key_text = _trade_key.ToString();
_security_key_text = security_key.ToString();
}
public event Action invalidated;
public uint trade_key => _trade_key;
public DateTime time { get; }
public double price { get; }
public uint size { get; }
public ICommand show_ladder { get; }
public string this[TimeAndSalesView.Columns col] {
get {
switch (col) {
case TimeAndSalesView.Columns.Security: return _security_text;
case TimeAndSalesView.Columns.Time: return _time_text;
case TimeAndSalesView.Columns.Price: return _price_text;
case TimeAndSalesView.Columns.Size: return _size_text;
case TimeAndSalesView.Columns.TradeKey: return _trade_key_text;
case TimeAndSalesView.Columns.SecurityKey: return _security_key_text;
default: return null;
}
}
}
void _invalidate() =>
invalidated?.Invoke();
}
}
}
@@ -0,0 +1,41 @@
<UserControl
x:Class="mbts.ui.spark.TimeAndSalesView"
x:ClassModifier="internal"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:mbts.ui.controls"
xmlns:usp="clr-namespace:mbts.ui.spark"
FocusManager.IsFocusScope="True"
Background="{StaticResource CommonBackground}"
>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/view/Resources/Converters.xaml"/>
<ResourceDictionary Source="/view/Controls/DataGridEx/Filters/Views/FilterTemplates.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<AdornerDecorator>
<Grid>
<c:DIYGrid Columns="{Binding columns}" Rows="{Binding rows_view}" CurrentRow="{Binding current_row}">
<c:DIYGrid.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{x:Static c:DIYGrid.DefaultRowCommand}"/>
<KeyBinding Key="Return" Command="{x:Static c:DIYGrid.DefaultRowCommand}"/>
</c:DIYGrid.InputBindings>
<c:DIYGrid.CommandBindings>
<CommandBinding
Command="{x:Static c:DIYGrid.DefaultRowCommand}"
Executed="{x:Static c:DIYGrid.DefaultRowActionExecuted}"
CanExecute="{x:Static c:DIYGrid.DefaultRowActionCanExecute}"
/>
</c:DIYGrid.CommandBindings>
<c:DIYGrid.RowTemplate>
<DataTemplate>
<usp:TimeAndSalesRowView/>
</DataTemplate>
</c:DIYGrid.RowTemplate>
</c:DIYGrid>
</Grid>
</AdornerDecorator>
</UserControl>
@@ -0,0 +1,17 @@
using mbts.spark;
using mbts.ui.controls;
using System.Windows.Controls;
namespace mbts.ui.spark {
/// <summary>
/// Interaction logic for TimeAndSalesView.xaml
/// </summary>
partial class TimeAndSalesView : UserControl {
public enum Columns { Time, Security, Price, Size, OrderType, TradeKey, SecurityKey }
public TimeAndSalesView() =>
InitializeComponent();
}
class TimeAndSalesRowView : DIYGrid.HighPerformanceRow<TimeAndSalesVM.Row, TimeAndSalesView.Columns> { }
}
@@ -0,0 +1,90 @@
using bts.api;
using bts.shell;
using bts.spark;
using mbts.co2;
using mbts.ui;
using mbts.ui.spark;
using mbts.utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Linq;
using System.Windows;
using System.Windows.Media;
using static bts.shell.TimeAndSalesWindowFactory;
namespace mbts.spark {
class TimeAndSalesWindow : SparkWindow<StartupData>, ISlowWindow {
const string _window_type = "TimeAndSales";
readonly MDConsumer _consumer;
readonly TimeAndSalesWindowFactory _factory;
SingleValuePump<TimeAndSalesVM> _vm;
StartupData _state;
TimeAndSalesView _view;
SparkCommand[] _commands;
IDisposable _subscriptions;
public TimeAndSalesWindow(TimeAndSalesWindowFactory factory, IBus bus, MDConsumer consumer, StartupData state, ImageSource icon)
: base("Time And Sales", bus, factory, SparkCommands.ShowTimeAndSales.icon) {
Logger.assert(state != null);
_consumer = consumer;
_factory = factory;
_state = state;
Icon.Freeze();
}
public override string window_type => _window_type;
public override IEnumerable<SparkCommand> Commands => _commands;
public override UIElement Content => _view;
public override double MinWidth => 444 + SPARK_MENU_COLLAPSED_WIDTH + LAUNCHER_BUTTON_BORDER_WIDTH;
public override StartupData SaveState => _state = new StartupData(_state.security_criteria, _vm.value.rows_view.GetSortingCriteria(), _vm.value.get_filter_states());
public override void Dispose() =>
_dispose_resources();
public void thread_init() {
_dispose_resources();
_vm = new SingleValuePump<TimeAndSalesVM>();
var update_securities_tag = new SparkTags.SparkTag<SecurityCriteria>("TimeAndSales Callback");
var update_securities_cmd = SparkCommand.create("Update Time and Sales", Icon, update_securities_tag);
var current_smd_source = _vm.observable.SelectMany(vm => vm.current_security_md_observable(_bus)).ObserveOnDispatcher();
var selected_secs_source = _vm.observable.SelectMany(vm => vm.selected_securities_observable()).ObserveOnDispatcher();
_commands = new SparkCommand[] {
SparkCommand.create("Change Securities", Icons.Admin, SparkTags.ShowAndEditPickMultiple, () => (update_securities_cmd, _state.security_criteria)),
SparkCommands.ShowLadder.complete(current_smd_source, md => md.HasValue, ObjectHelper.ValueOrDefault),
SparkCommands.ShowOrderTicketFromSecurity.complete(current_smd_source, md => md.HasValue, ObjectHelper.ValueOrDefault),
SparkCommands.ShowFills.complete(selected_secs_source, always_true, get_fills_startup_data),
SparkCommands.ShowMarketView.complete(selected_secs_source, always_true, secs => secs.Count > 0 ? new SecurityCriteria(secs) : _state.security_criteria)
};
_subscriptions = _bus.subscribe(update_securities_tag).ObserveOnDispatcher().Subscribe(update_criteria);
_initialize();
bool always_true<T>(T _) => true;
FillsWindowFactory.StartupData get_fills_startup_data(IReadOnlyList<SecurityImmutable> secs) =>
new FillsWindowFactory.StartupData(new FillsWindowFactory.FilterStates {
security = secs.Count > 0 ? new SecurityCriteria(secs) : _state.security_criteria
});
void update_criteria(SecurityCriteria c) {
_state = new StartupData(c, _vm.value.rows_view.GetSortingCriteria(), _vm.value.get_filter_states());
_initialize();
}
}
void _dispose_resources() {
Disposable.dispose(ref _subscriptions);
Disposable.dispose(ref _vm);
if (_commands != null) {
_commands.OfType<IDisposable>().DisposeAll();
_commands = null;
}
}
void _initialize() {
var model = new TimeAndSalesModel(_bus, _consumer, _state.security_criteria);
_vm.value = new TimeAndSalesVM(_bus, model, _state.sorting_criteria, _state.filters);
if (_view == null)
_view = new TimeAndSalesView();
_view.DataContext = _vm.value;
}
}
}
@@ -0,0 +1,75 @@
using bts.api;
using bts.spark;
using mbts;
using mbts.co2;
using mbts.spark;
using mbts.spark.filters;
using mbts.ui;
using ProtoBuf;
using System;
using System.Collections.Generic;
using System.Reactive.Linq;
using System.Threading.Tasks;
namespace bts.shell {
class TimeAndSalesWindowFactory : ShellWindowFactory<TimeAndSalesWindowFactory.StartupData> {
readonly IBus _bus;
readonly MDConsumer _consumer;
IReadOnlyDictionary<uint, SecurityMD> _securities = new Dictionary<uint, SecurityMD>();
public TimeAndSalesWindowFactory(IShellModule module, IBus bus, MDConsumer consumer) : base(module, "TimeAndSales") {
_bus = bus;
_consumer = consumer;
_dispose = Disposable.Create(
bus.subscribe(SparkTags.SecuritiesTag).Subscribe(s => _securities = s),
bus.subscribe(SparkTags.ShowTimeAndSalesTag).ObserveOnDispatcher().Subscribe(show)
);
}
public override Task<IShellWindow> load(StartupData state) =>
Task.FromResult<IShellWindow>(new TimeAndSalesWindow(this, _bus, _consumer, state, SparkCommands.PickTimeAndSales.icon));
public async void show(SecurityCriteria criteria) {
var w = await load(new StartupData(criteria));
_bus.post(SparkTags.ShowWindow, w);
}
[ProtoContract]
public class StartupData {
[ProtoMember(1)]
public readonly SecurityCriteria security_criteria;
[ProtoMember(2)]
public readonly List<SortingCriteria> sorting_criteria;
[ProtoMember(3)]
public FilterStates filters;
StartupData() { }//for ptorobuf
public StartupData(SecurityCriteria security_criteria)
: this (security_criteria, new List<SortingCriteria>(), null) { }
public StartupData(SecurityCriteria security_criteria, List<SortingCriteria> sorting_criteria, FilterStates filters) {
this.security_criteria = security_criteria;
this.sorting_criteria = sorting_criteria;
this.filters = filters;
}
}
[ProtoContract]
public class FilterStates {
[ProtoMember(1)]
public TimeFilterTuple time;
[ProtoMember(2)]
public string security;
[ProtoMember(3)]
public DoubleMinMaxState price;
[ProtoMember(4)]
public UIntMinMaxState size;
[ProtoMember(5)]
public string trade_key;
[ProtoMember(6)]
public string security_key;
}
}
}
@@ -0,0 +1,58 @@
using mbts;
using mbts.ui;
using mbts.ui.shell;
using mbts.spark;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using bts.spark;
using System.IO;
using System.Windows.Media;
using bts.api;
using System.ComponentModel.Composition;
namespace bts.ui {
[Export(typeof(IShellModule))]
class SettingsShellModule : IShellModule {
readonly IBus _bus;
IDisposable _dispose;
WorkspacesModel ws_model;
[ImportingConstructor]
public SettingsShellModule(IBus bus, WorkspacesModel ws) {
// todo: settings dialog
ws_model = ws;
_dispose = bus.subscribe(SparkTags.ShowWorkspaces).Subscribe(_ => show_workspaces_dialog());
_bus = bus;
}
public ImageSource icon => Icons.Admin;
public string name => "Settings";
public int priority => 40;
public IEnumerable<SparkCommand> actions => new []{
SparkCommands.ShowWorkspaces
//SparkCommands.ShowSettings
};
public Task<IShellWindow> create(Stream load_stream) {
throw new NotImplementedException();
}
public void show_workspaces_dialog()
{
WorkspacesDialogView ws_dialog = new WorkspacesDialogView(ws_model);
ws_dialog.Show();
}
public void Dispose() {
Disposable.dispose(ref _dispose);
}
}
}
@@ -0,0 +1,436 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sp="clr-namespace:bts.spark;assembly=spark_api"
xmlns:msp="clr-namespace:mbts.spark"
xmlns:u="clr-namespace:mbts.ui"
xmlns:c="clr-namespace:mbts.ui.controls"
xmlns:cv="clr-namespace:mbts.ui.converters"
xmlns:usp="clr-namespace:mbts.ui.spark"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/view/Resources/Converters.xaml"/>
<ResourceDictionary Source="/view/Resources/ComboBoxes.xaml"/>
<ResourceDictionary Source="/view/Resources/DataGrid.xaml"/>
<ResourceDictionary Source="/view/Resources/DataTemplates.xaml"/>
<ResourceDictionary Source="/view/Controls/Popup/PopupControl.xaml"/>
<ResourceDictionary Source="/Modules/Spreader/ParameterSectionView.xaml"/>
</ResourceDictionary.MergedDictionaries>
<sys:Double x:Key="GroupLevelIndent">18</sys:Double>
<sys:Double x:Key="RowHeaderWidth">285</sys:Double>
<sys:Double x:Key="RowHeight">16</sys:Double>
<sys:Double x:Key="NegativeRowHeight">-16</sys:Double>
<sys:Double x:Key="ItemsHostCanBeDisabledCollapsedHeight">15</sys:Double>
<Thickness
x:Key="GroupLevelMargin"
Left="{StaticResource GroupLevelIndent}"
/>
<Thickness
x:Key="GroupContentAlignedWithHeaderMargin"
Left="{StaticResource GroupLevelIndent}"
Top="{StaticResource NegativeRowHeight}"
/>
<cv:SyntheticPriceCalcDisplayTextConverter x:Key="SyntheticPriceCalcDisplayConverter"/>
<cv:TickFactorsTextConverter x:Key="TickFactorsTextConverter"/>
<usp:RowHeaderGroupIndentConverter
x:Key="RowHeaderGroupIndentConverter"
Indent="{StaticResource GroupLevelIndent}"
/>
<usp:RowHeaderGroupIndentConverter
x:Key="ReverseRowHeaderGroupIndentConverter"
Indent="{StaticResource GroupLevelIndent}"
Reverse="True"
/>
<usp:RowGroupExpanderWidthConverter
x:Key="RowGroupExpanderWidthConverter"
Indent="{StaticResource GroupLevelIndent}"
Offset="{StaticResource RowHeight}"
RowHeaderWidth="{StaticResource RowHeaderWidth}"
/>
<usp:DataGridParameterCellTemplateConverter x:Key="ParameterCellTemplateConverter">
<usp:DataGridParameterCellTemplateConverter.BooleanTemplate>
<DataTemplate>
<CheckBox HorizontalAlignment="Left" IsChecked="{Binding value}"/>
</DataTemplate>
</usp:DataGridParameterCellTemplateConverter.BooleanTemplate>
<usp:DataGridParameterCellTemplateConverter.DoubleTemplate>
<DataTemplate>
<TextBlock Text="{Binding value}"/>
</DataTemplate>
</usp:DataGridParameterCellTemplateConverter.DoubleTemplate>
<usp:DataGridParameterCellTemplateConverter.IntTemplate>
<DataTemplate>
<TextBlock Text="{Binding value}"/>
</DataTemplate>
</usp:DataGridParameterCellTemplateConverter.IntTemplate>
<usp:DataGridParameterCellTemplateConverter.UIntTemplate>
<DataTemplate>
<TextBlock Text="{Binding value}"/>
</DataTemplate>
</usp:DataGridParameterCellTemplateConverter.UIntTemplate>
<usp:DataGridParameterCellTemplateConverter.QuantityMeasureTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="AbsoluteLabel" Text="{x:Static cv:QuantityMeasureCaseDisplayTextConverter.ABSOLUTE_TEXT}" FontSize="10" FontStyle="Italic"/>
<TextBlock x:Name="RatioLabel" Text="{x:Static cv:QuantityMeasureCaseDisplayTextConverter.RATIO_TEXT}" FontSize="10" FontStyle="Italic"/>
<TextBlock x:Name="AbsoluteValue" Grid.Column="1" HorizontalAlignment="Left" Text="{Binding absolute}"/>
<TextBlock x:Name="RatioValue" Grid.Column="1" HorizontalAlignment="Left" Text="{Binding ratio}"/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding quantity_case}" Value="{u:Enum absolute, Type={u:Nested sp:QuantityMeasure.QuantityOneofCase}}">
<Setter Property="Visibility" TargetName="AbsoluteLabel" Value="Visible"/>
<Setter Property="Visibility" TargetName="AbsoluteValue" Value="Visible"/>
<Setter Property="Visibility" TargetName="RatioLabel" Value="Collapsed"/>
<Setter Property="Visibility" TargetName="RatioValue" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding quantity_case}" Value="{u:Enum Ratio, Type={u:Nested sp:QuantityMeasure.QuantityOneofCase}}">
<Setter Property="Visibility" TargetName="RatioLabel" Value="Visible"/>
<Setter Property="Visibility" TargetName="RatioValue" Value="Visible"/>
<Setter Property="Visibility" TargetName="AbsoluteLabel" Value="Collapsed"/>
<Setter Property="Visibility" TargetName="AbsoluteValue" Value="Collapsed"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</usp:DataGridParameterCellTemplateConverter.QuantityMeasureTemplate>
</usp:DataGridParameterCellTemplateConverter>
<usp:DataGridParameterCellTemplateConverter x:Key="ParameterCellEditingTemplateConverter">
<usp:DataGridParameterCellTemplateConverter.BooleanTemplate>
<DataTemplate>
<CheckBox HorizontalAlignment="Left" IsChecked="{Binding value}" IsEnabled="{Binding enabled}"/>
</DataTemplate>
</usp:DataGridParameterCellTemplateConverter.BooleanTemplate>
<usp:DataGridParameterCellTemplateConverter.DoubleTemplate>
<DataTemplate>
<c:TickUpDownDouble Value="{Binding value}" IsEnabled="{Binding enabled}" Increment="{Binding tick_increment, FallbackValue={u:Double 1}}"/>
</DataTemplate>
</usp:DataGridParameterCellTemplateConverter.DoubleTemplate>
<usp:DataGridParameterCellTemplateConverter.IntTemplate>
<DataTemplate>
<c:TickUpDownInt Value="{Binding value}" IsEnabled="{Binding enabled}"/>
</DataTemplate>
</usp:DataGridParameterCellTemplateConverter.IntTemplate>
<usp:DataGridParameterCellTemplateConverter.UIntTemplate>
<DataTemplate>
<c:TickUpDownUInt Value="{Binding value}" IsEnabled="{Binding enabled}"/>
</DataTemplate>
</usp:DataGridParameterCellTemplateConverter.UIntTemplate>
<usp:DataGridParameterCellTemplateConverter.QuantityMeasureTemplate>
<DataTemplate>
<Grid IsEnabled="{Binding enabled}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<ComboBox
VerticalAlignment="Center" Margin="-2,0,0,0" Padding="3,3,0,3"
ItemsSource="{u:EnumBindingSource {u:Nested sp:QuantityMeasure.QuantityOneofCase}, Except=None}"
SelectedItem="{Binding quantity_case}"
>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource QuantityMeasureCaseDisplayConverter}}" FontSize="10" FontStyle="Italic"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<c:TickUpDownDouble x:Name="AbsoluteTickUpDown" Grid.Column="1" HorizontalAlignment="Stretch" Margin="0,0,-2,0" Value="{Binding absolute}"/>
<c:TickUpDownDouble x:Name="RatioTickUpDown" Grid.Column="1" HorizontalAlignment="Stretch" Value="{Binding ratio}"/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding quantity_case}" Value="{u:Enum absolute, Type={u:Nested sp:QuantityMeasure.QuantityOneofCase}}">
<Setter Property="Visibility" TargetName="AbsoluteTickUpDown" Value="Visible"/>
<Setter Property="Visibility" TargetName="RatioTickUpDown" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding quantity_case}" Value="{u:Enum Ratio, Type={u:Nested sp:QuantityMeasure.QuantityOneofCase}}">
<Setter Property="Visibility" TargetName="RatioTickUpDown" Value="Visible"/>
<Setter Property="Visibility" TargetName="AbsoluteTickUpDown" Value="Collapsed"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</usp:DataGridParameterCellTemplateConverter.QuantityMeasureTemplate>
</usp:DataGridParameterCellTemplateConverter>
<Style x:Key="ExpanderToggleButton" TargetType="ToggleButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Grid Background="Transparent">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="12" />
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Path
x:Name="arrow"
Data="M0,0L3.5,3.5 0,7"
HorizontalAlignment="Center"
Margin="0,5,0,0"
SnapsToDevicePixels="False"
Stroke="#77333333"
StrokeThickness="2"
VerticalAlignment="Top"
/>
<ContentPresenter
Grid.Column="1"
ContentSource="{TemplateBinding Content}"
Margin="3,0,0,0"
/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Data" TargetName="arrow" Value="M0,0L3.5,3.5 7,0"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Stroke" TargetName="arrow" Value="Black"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Stroke" TargetName="arrow" Value="Black"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Stroke" TargetName="arrow" Value="#FF707070"/>
<Setter Property="Foreground" Value="Gray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ControlTemplate x:Key="GroupItemTemplate" TargetType="GroupItem">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<ToggleButton
x:Name="ExpanderToggle"
HorizontalAlignment="Left"
IsChecked="True"
Style="{StaticResource ExpanderToggleButton}"
Width="{Binding Name.level, Converter={StaticResource RowGroupExpanderWidthConverter}}"
Panel.ZIndex="1"
>
<usp:ParameterSectionView SectionTitle="{Binding Name.name}" Description="{Binding Name.description}"/>
</ToggleButton>
<ItemsPresenter x:Name="ItemsHost" Grid.Row="1" Margin="{StaticResource GroupLevelMargin}"/>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Name}" Value="{x:Null}">
<Setter Property="Visibility" TargetName="ExpanderToggle" Value="Collapsed"/>
<Setter Property="Margin" TargetName="ItemsHost" Value="0"/>
</DataTrigger>
<DataTrigger Binding="{Binding Name.can_be_disabled}" Value="{u:True}">
<Setter Property="Margin" TargetName="ItemsHost" Value="{StaticResource GroupContentAlignedWithHeaderMargin}"/>
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsChecked, ElementName=ExpanderToggle}" Value="False"/>
<Condition Binding="{Binding Name.can_be_disabled}" Value="{u:True}"/>
</MultiDataTrigger.Conditions>
<Setter Property="Height" TargetName="ItemsHost" Value="{StaticResource ItemsHostCanBeDisabledCollapsedHeight}"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsChecked, ElementName=ExpanderToggle}" Value="False"/>
<Condition Binding="{Binding Name.can_be_disabled}" Value="{u:False}"/>
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
</MultiDataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style x:Key="GroupItemStyle" TargetType="GroupItem">
<Setter Property="Template" Value="{StaticResource GroupItemTemplate}"/>
</Style>
<ControlTemplate x:Key="DataGridRowTemplate" TargetType="DataGridRow">
<Border
x:Name="DGR_Border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True"
>
<SelectiveScrollingGrid Margin="{Binding section_count, Converter={StaticResource ReverseRowHeaderGroupIndentConverter}}">
<SelectiveScrollingGrid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</SelectiveScrollingGrid.ColumnDefinitions>
<DataGridRowHeader
Background="Transparent"
Padding="{Binding section_count, Converter={StaticResource RowHeaderGroupIndentConverter}}"
Content="{Binding display_name}"
SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"
Visibility="{Binding
HeadersVisibility,
ConverterParameter={x:Static DataGridHeadersVisibility.Row},
Converter={x:Static DataGrid.HeadersVisibilityConverter},
RelativeSource={RelativeSource AncestorType=DataGrid}}"
/>
<DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</SelectiveScrollingGrid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="usp:ExecutionStrategyEditor.RowHasErrors" Value="True">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="BorderThickness" Value="1"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style x:Key="DataGridRowStyle" TargetType="DataGridRow">
<Setter Property="BorderThickness" Value="1,0"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Template" Value="{StaticResource DataGridRowTemplate}"/>
<Setter Property="usp:ExecutionStrategyEditor.RowHasErrors" Value="{Binding has_errors}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding read_only}" Value="True">
<Setter Property="TextElement.Foreground" Value="{u:BTSColor UI.input_disabled_text_dark}"/>
<Setter Property="ToolTip">
<Setter.Value>
<TextBlock Foreground="Black" Text="{Binding display_name, StringFormat='{}Can\&apos;t change \&apos;{0}\&apos; after creation'}"/>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding display_name}" Value="{x:Static sys:String.Empty}">
<Setter Property="Background" Value="Transparent"/>
</DataTrigger>
</Style.Triggers>
</Style>
<DataGridTextColumn x:Key="AddColumnPlaceholder" x:Shared="False" IsReadOnly="True">
<DataGridTextColumn.Header>
<c:PopupControl
ShowExpanderArrow="False" PopupPlacement="Right" Header="Add Leg" Padding="6,0"
Background="{StaticResource Button.Static.BackgroundBrush}"
IsOpen="{Binding IsNewLegPopupOpen, RelativeSource={RelativeSource AncestorType=usp:ExecutionStrategyEditor}, Mode=TwoWay}"
IsEnabled="{Binding CanUserAddNewLeg, RelativeSource={RelativeSource AncestorType=usp:ExecutionStrategyEditor}}"
>
<msp:ContractPickerView
CloseOnOK="False" CloseOnCancel="False"
DataContext="{Binding ContractPickerModel, RelativeSource={RelativeSource AncestorType=usp:ExecutionStrategyEditor}}"
/>
</c:PopupControl>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataTemplate x:Key="RemovableColumnHeaderTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button
Command="{Binding RemoveLegCommand, RelativeSource={RelativeSource AncestorType=usp:ExecutionStrategyEditor}}"
CommandParameter="{Binding}" Style="{StaticResource RoundCloseButton}"
/>
<TextBlock Grid.Column="1" Margin="4,0,0,0" Text="{Binding Converter={StaticResource SecurityTextConverter}}"/>
</Grid>
</DataTemplate>
<ControlTemplate x:Key="ExecutionStrategyEditorTemplate" TargetType="usp:ExecutionStrategyEditor">
<Border
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}"
Padding="{TemplateBinding Padding}"
>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" IsEnabled="{TemplateBinding IsNew}">Name</TextBlock>
<TextBox
x:Name="PART_Name_TextBox" Grid.Column="1" Margin="6,0,0,0" HorizontalAlignment="Stretch" IsEnabled="{TemplateBinding IsNew}"
Text="{Binding SyntheticName, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}, ValidatesOnDataErrors=True, ValidatesOnNotifyDataErrors=True, NotifyOnValidationError=True}"
>
<u:Behavior.BindingUpdateGroups>
<u:BindingUpdateGroupCollection>
<u:BindingUpdateGroup Source="{Binding DataContext, Source={u:DirectReference PART_Name_TextBox}}" Target="{Binding Source={u:DirectReference PART_Name_TextBox}}">
<u:PropertyTuple PropertyName="Text" Type="{x:Type TextBox}"/>
</u:BindingUpdateGroup>
</u:BindingUpdateGroupCollection>
</u:Behavior.BindingUpdateGroups>
</TextBox>
<TextBlock
Grid.Column="2" VerticalAlignment="Center" Margin="6,0,0,0" Text="Ticks" IsEnabled="{TemplateBinding IsNew}"
Visibility="{Binding LegTuples.Count, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource IntNotZeroVisibilityConverter}}"
/>
<ComboBox
x:Name="PART_Tick_ComboBox" Grid.Column="3" Margin="6,0,0,0" IsEnabled="{TemplateBinding IsNew}" HorizontalAlignment="Stretch"
ItemsSource="{TemplateBinding AvailableTickFactors}" SelectedItem="{Binding TickFactors, RelativeSource={RelativeSource TemplatedParent}}"
Visibility="{Binding LegTuples.Count, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource IntNotZeroVisibilityConverter}}"
>
<ComboBox.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource ComboBox.DelineatedGroupContainerStyle}"/>
</ComboBox.GroupStyle>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource TickFactorsTextConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Grid.Column="4" VerticalAlignment="Center" Margin="6,0,0,0">Pricing</TextBlock>
<ComboBox
Grid.Column="5" Margin="6,0,0,0" IsEnabled="False"
ItemsSource="{x:Static usp:ExecutionStrategyEditor.PriceCalcItems}" SelectedItem="{Binding PriceCalc, RelativeSource={RelativeSource TemplatedParent}}"
>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource SyntheticPriceCalcDisplayConverter}}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<c:HelpButton Grid.Column="6" Margin="3,0,0,0"/>
</Grid>
<c:DataGridEx
x:Name="PART_DataGrid"
Grid.Row="1"
Margin="0,4,0,0"
BorderBrush="Transparent"
BorderThickness="0"
GridLinesVisibility="None"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
HeadersVisibility="All"
RowHeaderWidth="{StaticResource RowHeaderWidth}"
RowStyle="{StaticResource DataGridRowStyle}"
ItemsSource="{Binding ParameterRowsView, RelativeSource={RelativeSource TemplatedParent}}"
>
<DataGrid.Resources>
<Style x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}" TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Rectangle Fill="{u:BTSColor header}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
<DataGrid.GroupStyle>
<GroupStyle ContainerStyle="{StaticResource GroupItemStyle}"/>
</DataGrid.GroupStyle>
</c:DataGridEx>
</Grid>
</Border>
</ControlTemplate>
<Style TargetType="usp:ExecutionStrategyEditor">
<Setter Property="ParameterCellTemplateConverter" Value="{StaticResource ParameterCellTemplateConverter}"/>
<Setter Property="ParameterCellEditingTemplateConverter" Value="{StaticResource ParameterCellEditingTemplateConverter}"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Template" Value="{StaticResource ExecutionStrategyEditorTemplate}"/>
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
</Style>
</ResourceDictionary>
@@ -0,0 +1,319 @@
using bts.api;
using bts.spark;
using mbts.spark;
using mbts.ui.adorners;
using mbts.ui.controls;
using mbts.ui.utility;
using mbts.user.settings;
using mbts.utils;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using static mbts.spark.SyntheticEditorVM;
namespace mbts.ui.spark {
/// <summary>
/// Interaction logic for ExecutionStrategyEditor.xaml
/// </summary>
partial class ExecutionStrategyEditor : Control {
static ExecutionStrategyEditor() =>
DefaultStyleKeyProperty.OverrideMetadata(typeof(ExecutionStrategyEditor), new FrameworkPropertyMetadata(typeof(ExecutionStrategyEditor)));
public ExecutionStrategyEditor() =>
AdornerHelper.attach_continuously_on_loaded(() => new ExecutionStrategyErrorAdorner(this), this);
#region SyntheticName
public static readonly DependencyProperty SyntheticNameProperty = DependencyProperty.Register("SyntheticName", typeof(string), typeof(ExecutionStrategyEditor),
new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public string SyntheticName { get => GetValue(SyntheticNameProperty) as string; set => SetValue(SyntheticNameProperty, value); }
#endregion
#region TickFactors
public static readonly DependencyProperty TickFactorsProperty = DependencyProperty.Register("TickFactors", typeof(TickFactors), typeof(ExecutionStrategyEditor),
new FrameworkPropertyMetadata(new TickFactors(), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public TickFactors TickFactors { get => GetValue(TickFactorsProperty) as TickFactors; set => SetValue(TickFactorsProperty, value); }
#endregion
#region AvailableTickFactors
public static readonly DependencyProperty AvailableTickFactorsProperty = DependencyProperty.Register(
nameof(AvailableTickFactors), typeof(IEnumerable), typeof(ExecutionStrategyEditor), new PropertyMetadata(new TickFactors[0]));
public IEnumerable AvailableTickFactors { get => GetValue(AvailableTickFactorsProperty) as IEnumerable; set => SetValue(AvailableTickFactorsProperty, value); }
#endregion
#region IsNew
public static readonly DependencyProperty IsNewProperty =
DependencyProperty.Register(
nameof(IsNew),
typeof(bool),
typeof(ExecutionStrategyEditor),
new PropertyMetadata(false, OnIsNewChanged));
static void OnIsNewChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) =>
d.CoerceValue(CanUserAddNewLegProperty);
public bool IsNew {
get => (bool)GetValue(IsNewProperty);
set => SetValue(IsNewProperty, value);
}
#endregion
#region CanUserAddNewLeg
public static readonly DependencyProperty CanUserAddNewLegProperty =
DependencyProperty.Register(
nameof(CanUserAddNewLeg),
typeof(bool),
typeof(ExecutionStrategyEditor),
new PropertyMetadata(false, null, CoerceCanUserAddNewLeg));
static object CoerceCanUserAddNewLeg(DependencyObject d, object baseValue) {
var value = (bool)baseValue;
if (value) {
if (!((ExecutionStrategyEditor)d).IsNew)
return false;
}
return value;
}
public bool CanUserAddNewLeg {
get => (bool)GetValue(CanUserAddNewLegProperty);
set => SetValue(CanUserAddNewLegProperty, value);
}
#endregion
#region IsNewLegPopupOpen
public static readonly DependencyProperty IsNewLegPopupOpenProperty = DependencyProperty.Register("IsNewLegPopupOpen", typeof(bool), typeof(ExecutionStrategyEditor),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public bool IsNewLegPopupOpen { get => (bool)GetValue(IsNewLegPopupOpenProperty); set => SetValue(IsNewLegPopupOpenProperty, value); }
#endregion
#region PriceCalc
public static readonly DependencyProperty PriceCalcProperty = DependencyProperty.Register("PriceCalc", typeof(SyntheticContract.Types.PriceCalc), typeof(ExecutionStrategyEditor),
new FrameworkPropertyMetadata(SyntheticContract.Types.PriceCalc.Diff, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public SyntheticContract.Types.PriceCalc PriceCalc { get => (SyntheticContract.Types.PriceCalc)GetValue(PriceCalcProperty); set => SetValue(PriceCalcProperty, value); }
public static readonly IEnumerable<SyntheticContract.Types.PriceCalc> PriceCalcItems = EnumHelper.get_values<SyntheticContract.Types.PriceCalc>();
#endregion
#region LegTuples
public static readonly DependencyProperty LegTuplesProperty = DependencyProperty.Register("LegTuples", typeof(IReadOnlyCollection<LegSpreaderParamsTuple>), typeof(ExecutionStrategyEditor),
new FrameworkPropertyMetadata(new LegSpreaderParamsTuple[0], FrameworkPropertyMetadataOptions.AffectsMeasure, ConnectLegTuples, CoerceLegTuples));
static object CoerceLegTuples(DependencyObject d, object baseValue) =>
baseValue as IReadOnlyCollection<LegSpreaderParamsTuple> ?? new LegSpreaderParamsTuple[0];
public IReadOnlyCollection<LegSpreaderParamsTuple> LegTuples { get => GetValue(LegTuplesProperty) as IReadOnlyCollection<LegSpreaderParamsTuple>; set => SetValue(LegTuplesProperty, value); }
#endregion
#region ParameterRows
public static readonly DependencyProperty ParameterRowsProperty = DependencyProperty.Register("ParameterRows", typeof(IEnumerable<IParameterRowVM>), typeof(ExecutionStrategyEditor),
new PropertyMetadata(Enumerable.Empty<IParameterRowVM>(), OnParameterRowsChanged));
static void OnParameterRowsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
ExceptionAssert.Argument.IsNot<INotifyCollectionChanged>(e.NewValue, nameof(ParameterRows));
((ExecutionStrategyEditor)d)._on_new_parameter_rows(e.NewValue as IEnumerable<IParameterRowVM>);
}
ObservableCollection<IParameterRowVM> _rows;
void _on_new_parameter_rows(IEnumerable<IParameterRowVM> new_rows) {
if (_rows == null) {
_rows = new ObservableCollection<IParameterRowVM>(new_rows);
var rows_view = ParameterRowsView = CollectionViewSource.GetDefaultView(_rows);
Action set_group_descriptions = () => {
int n_groups = _rows.Count == 0 ? 0 : _rows.Max(r => r.section_path.Length);
for (int i = 0; i < n_groups; i++)
rows_view.GroupDescriptions.Add(new PropertyGroupDescription($"[{i}]"));
};
set_group_descriptions();
_rows.CollectionChanged += (s, e) => {
rows_view.GroupDescriptions.Clear();
set_group_descriptions();
};
}
}
public IEnumerable<IParameterRowVM> ParameterRows { get => GetValue(ParameterRowsProperty) as IEnumerable<IParameterRowVM>; set => SetValue(ParameterRowsProperty, value); }
#endregion
#region ParameterRowsView (ReadOnly)
static readonly DependencyPropertyKey ParameterRowsViewPropertyKey = DependencyProperty.RegisterReadOnly("ParameterRowsView", typeof(ICollectionView), typeof(ExecutionStrategyEditor),
new PropertyMetadata());
public static readonly DependencyProperty ParameterRowsViewProperty = ParameterRowsViewPropertyKey.DependencyProperty;
public ICollectionView ParameterRowsView { get => GetValue(ParameterRowsViewProperty) as ICollectionView; set => SetValue(ParameterRowsViewPropertyKey, value); }
#endregion
#region ParameterCellTemplateConverter
public static readonly DependencyProperty ParameterCellTemplateConverterProperty = DependencyProperty.Register("ParameterCellTemplateConverter", typeof(IValueConverter), typeof(ExecutionStrategyEditor),
new PropertyMetadata(ConnectLegTuples));
public IValueConverter ParameterCellTemplateConverter { get => GetValue(ParameterCellTemplateConverterProperty) as IValueConverter; set => SetValue(ParameterCellTemplateConverterProperty, value); }
#endregion
#region ParameterCellEditingTemplateConverter
public static readonly DependencyProperty ParameterCellEditingTemplateConverterProperty = DependencyProperty.Register("ParameterCellEditingTemplateConverter", typeof(IValueConverter), typeof(ExecutionStrategyEditor),
new PropertyMetadata(ConnectLegTuples));
public IValueConverter ParameterCellEditingTemplateConverter { get => GetValue(ParameterCellEditingTemplateConverterProperty) as IValueConverter; set => SetValue(ParameterCellEditingTemplateConverterProperty, value); }
#endregion
#region RowHasError
public static readonly DependencyProperty RowHasErrorsProperty = DependencyProperty.RegisterAttached("RowHasErrors", typeof(bool), typeof(ExecutionStrategyEditor), new PropertyMetadata(false));
public static bool GetRowHasErrors(DependencyObject d) { return (bool)d.GetValue(RowHasErrorsProperty); }
public static void SetRowHasErrors(DependencyObject d, bool value) { d.SetValue(RowHasErrorsProperty, value); }
#endregion
#region CellDataType
public static readonly DependencyProperty CellDataTypeProperty = DependencyProperty.RegisterAttached("CellDataType", typeof(Type), typeof(ExecutionStrategyEditor), new PropertyMetadata(null));
public static Type GetCellDataType(DependencyObject d) { return d.GetValue(CellDataTypeProperty) as Type; }
public static void SetCellDataType(DependencyObject d, Type value) { d.SetValue(CellDataTypeProperty, value); }
#endregion
#region RemoveLegCommand
public static readonly DependencyProperty RemoveLegCommandProperty = DependencyProperty.Register("RemoveLegCommand", typeof(ICommand), typeof(ExecutionStrategyEditor));
public ICommand RemoveLegCommand { get => GetValue(RemoveLegCommandProperty) as ICommand; set => SetValue(RemoveLegCommandProperty, value); }
#endregion
#region ContractPickerModel
public static readonly DependencyProperty ContractPickerModelProperty = DependencyProperty.Register(nameof(ContractPickerModel), typeof(mbts.spark.ContractPickerModel), typeof(ExecutionStrategyEditor));
public mbts.spark.ContractPickerModel ContractPickerModel { get => GetValue(ContractPickerModelProperty) as mbts.spark.ContractPickerModel; set => SetValue(ContractPickerModelProperty, value); }
#endregion
public override void OnApplyTemplate() =>
_connect_leg_tuples();
static void ConnectLegTuples(DependencyObject d, DependencyPropertyChangedEventArgs e) =>
((ExecutionStrategyEditor)d)._connect_leg_tuples();
void _connect_leg_tuples() {
Disposable.dispose(ref _dg_line_adorner);
Disposable.dispose(ref _legs_collection_changed_sub);
var dg = (DataGridEx)GetTemplateChild("PART_DataGrid");
if (dg != null) {
var legs = LegTuples;
dg.Columns.SetItems(legs.Select(_column_factory));
if (IsNew) dg.Columns.Add((DataGridColumn)FindResource("AddColumnPlaceholder"));
_dg_line_adorner = AdornerHelper.attach_continuously_on_loaded(() => new ExecutionStrategyGridLineAdorner(dg), dg);
_legs_collection_changed_sub = (legs as INotifyCollectionChanged)?.Subscribe((s, e) => dg.Columns.ReflectChange(legs, _column_factory, e));
}
}
DataGridColumn _column_factory(LegSpreaderParamsTuple l) {
var col = new DataGridColumnInternal(l.leg.Security, ParameterCellTemplateConverter, ParameterCellEditingTemplateConverter) { Width = 75, };
if (IsNew) col.HeaderTemplate = (DataTemplate)FindResource("RemovableColumnHeaderTemplate");
DataGridEx.SetRightBorder(col, new DataGridExVerticalLine(false, true, Colors.DarkGray, 1));
return col;
}
IDisposable _legs_collection_changed_sub, _dg_line_adorner;
private class DataGridColumnInternal : DataGridDynamicColumn {
readonly IValueConverter _cell_template_converter, _cell_editing_template_converter;
public DataGridColumnInternal(Security security, IValueConverter cell_template_converter, IValueConverter cell_editing_template_converter) {
Header = security;
SetValue(DataGridEx.CellKeyProperty, security);
_cell_template_converter = cell_template_converter;
_cell_editing_template_converter = cell_editing_template_converter;
}
// I decided this was an easy and simple enough solution to justify breaking the mvvm paradigm
// The alternative - within strict bounds of the paradigm - is to change the DataGridParameterCellTemplateConverter into an IMultiValueConverter, bound to data_type AND read_only
protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem) {
if (dataItem is SyntheticEditorVM.RowVM row_vm) {
if (row_vm.read_only || row_vm.get_cell(Header) is SyntheticEditorVM.ICell cell_vm && !cell_vm.enabled)
return base.GenerateElement(cell, dataItem);
}
return base.GenerateEditingElement(cell, dataItem);
}
protected override FrameworkElement generate_element_internal() =>
_generate_element(_cell_template_converter);
protected override FrameworkElement generate_editing_element_internal() =>
_generate_element(_cell_editing_template_converter);
FrameworkElement _generate_element(IValueConverter cell_template_converter) {
var rv = new ContentControl();
rv.SetBinding(ContentControl.ContentProperty, new Binding());
rv.SetBinding(ContentControl.ContentTemplateProperty, new Binding("data_type") { Converter = cell_template_converter });
return rv;
}
}
class ExecutionStrategyErrorAdorner : NotifyDataErrorAdorner<ExecutionStrategyEditor, SyntheticEditorVM>, IDisposable {
readonly ChildProperty<TextBox> _name_text_box;
readonly ChildProperty<ComboBox> _tick_combo_box;
public ExecutionStrategyErrorAdorner(ExecutionStrategyEditor editor) : base(editor) {
_name_text_box = child_property<TextBox>("PART_Name_TextBox");
_tick_combo_box = child_property<ComboBox>("PART_Tick_ComboBox");
}
protected override void OnRender(DrawingContext drawing_context) {
const double y_offset = 10;
string leg_count_msg = _vm.GetErrors(nameof(SyntheticEditorVM.leg_count)).Cast<string>().FirstOrDefault();
if (leg_count_msg != null) {
this.draw_relative_text(RelativePosition.Below, leg_count_msg, drawing_context, _name_text_box.value, new SolidColorBrush(BTSColors.MarketData.driver_background), 0, y_offset);
} else {
if (_vm != null && _vm.GetErrors(nameof(SyntheticEditorVM.name)).Cast<string>().Any())
this.draw_border(drawing_context, _name_text_box.value, null, new Pen(Brushes.Red, 1));
if (_vm != null && _vm.GetErrors(nameof(SyntheticEditorVM.tick_factors)).Cast<string>().Any())
this.draw_border(drawing_context, _tick_combo_box.value, null, new Pen(Brushes.Red, 1));
string error_text = string.Join(", ", _vm.AllErrors);
this.draw_relative_text(RelativePosition.Below, error_text, drawing_context, _name_text_box.value, BTSColors.header_error_text_brush, 0, y_offset);
}
}
}
}
[ValueConversion(typeof(int), typeof(Thickness))]
class RowHeaderGroupIndentConverter : IValueConverter {
public double Indent { get; set; }
public bool Reverse { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) =>
new Thickness(((int)value + 1) * (Reverse ? -Indent : Indent), 0, 0, 0);
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) =>
throw new NotImplementedException();
}
[ValueConversion(typeof(int), typeof(double))]
class RowGroupExpanderWidthConverter : IValueConverter {
public double Indent { get; set; }
public double RowHeaderWidth { get; set; }
public double Offset { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) =>
RowHeaderWidth - (int)value * Indent - Offset;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
}
[ValueConversion(typeof(Type), typeof(DataTemplate))]
class DataGridParameterCellTemplateConverter : IValueConverter {
public DataTemplate DoubleTemplate { get; set; }
public DataTemplate BooleanTemplate { get; set; }
public DataTemplate IntTemplate { get; set; }
public DataTemplate UIntTemplate { get; set; }
public DataTemplate QuantityMeasureTemplate { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
Type t = (Type)value;
if (t == typeof(double)) return DoubleTemplate;
else if (t == typeof(bool)) return BooleanTemplate;
else if (t == typeof(int)) return IntTemplate;
else if (t == typeof(uint)) return UIntTemplate;
else if (t == typeof(QuantityMeasure)) return QuantityMeasureTemplate;
else return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) =>
throw new NotImplementedException();
}
}
@@ -8,12 +8,11 @@ using System.Windows.Media;
namespace mbts.ui.spark
{
internal partial class SyntheticEditor : Control {
internal class SyntheticEditorGridLineAdorner : DataGridExVerticalLineAdorner
{
public SyntheticEditorGridLineAdorner(DataGridEx grid) : base(grid) { }
internal partial class ExecutionStrategyEditor : Control {
internal class ExecutionStrategyGridLineAdorner : DataGridExVerticalLineAdorner {
public ExecutionStrategyGridLineAdorner(DataGridEx grid) : base(grid) { }
private ItemsPresenter _items_presenter;
ItemsPresenter _items_presenter;
protected override IEnumerable<IDisposable> get_other_hooks() {
_items_presenter = _grid.visual_children_where(el => el is ItemsPresenter).Cast<ItemsPresenter>().FirstOrDefault();
@@ -23,7 +22,7 @@ namespace mbts.ui.spark
}
}
private void _items_presenter_SizeChanged(object sender, SizeChangedEventArgs e) { InvalidateVisual(); }
void _items_presenter_SizeChanged(object sender, SizeChangedEventArgs e) { InvalidateVisual(); }
protected override void draw_vertical_line(DrawingContext dc, double x, DataGridExVerticalLine line) {
if (_items_presenter != null) dc.DrawLine(line.pen.Value, new Point(x - 10, 58), new Point(x - 10, _items_presenter.ActualHeight + 58));
Loaded 100 of 1622 files, more files were not shown because too many files have changed in this diff. Show more