Compare commits
12
Commits
2.14.0_rc0
..
2.14.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5ea2a8d6b6 | ||
|
|
6e64f7c6df | ||
|
|
8a210f39b6 | ||
|
|
2aacd141ad | ||
|
|
2688281a10 | ||
|
|
b62d9751cf | ||
|
|
26b5fe5699 | ||
|
|
2fccceb91d | ||
|
|
fa49a0de07 | ||
|
|
bd28a0fa54 | ||
|
|
14ebe5ef51 | ||
|
|
a9b4049307 |
No files matched your search
@@ -6,9 +6,14 @@ insert_anchor_links = "right"
|
||||
+++
|
||||
## 2.14.0
|
||||
### User Visible Changes
|
||||
- All ladders can now be recentered by (shift or alt) + double clicking over the Price column in a ladder
|
||||
- Added a Max Order Quantity setting to the Safety Checks tab on the Ladder settings. This setting allows for a user-defined maximum order quantity.
|
||||
- Added a Price Display Format setting to the Market Price and Size Display tab on the Ladder settings. This setting allows for price levels in the ladder to be displayed without a decimal separator.
|
||||
- Synthetic instrument creation with 3 legs no longer defaults to butterfly quantites
|
||||
### Bug Fixes
|
||||
- Fixed an issue where market transition were not observed by IAlgoOrder
|
||||
- Fixed a bug in error reporting
|
||||
- Fixed a bug in the PnL window where specifying a certain grouping order would lead to a UI failure
|
||||
|
||||
## 2.13.0
|
||||
### User Visible Changes
|
||||
|
||||
@@ -467,6 +467,10 @@ namespace mbts.spark {
|
||||
settings_invalidated?.Invoke();
|
||||
}
|
||||
|
||||
public void recenter_all_ladders() {
|
||||
_bus?.post(SparkTags.RequestRecenterLadder, null);
|
||||
}
|
||||
|
||||
public Task send_order_async((double price, Side? side, MouseButton button) args) {
|
||||
if (order_properties_vm != null && args.button != MouseButton.Middle) {
|
||||
var size_from_alternate = args.button == MouseButton.Right;
|
||||
|
||||
@@ -490,8 +490,14 @@ namespace mbts.spark {
|
||||
|
||||
protected override void OnMouseDoubleClick(MouseButtonEventArgs e) {
|
||||
var column = _column_for_point(e.GetPosition(this));
|
||||
if (column.column_type == ColumnType.Price)
|
||||
_scroll_to_center();
|
||||
if (column.column_type == ColumnType.Price) {
|
||||
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift) ||
|
||||
Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)) {
|
||||
_vm?.recenter_all_ladders();
|
||||
} else {
|
||||
_scroll_to_center();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region Row Utility Methods
|
||||
|
||||
@@ -195,6 +195,10 @@ void ICEExecutionGateway::on_trader_login_timeout_expired()
|
||||
const auto& ice = u.user_data().exchange_user_data().ice_data();
|
||||
if(auth_traders.find(ice.authorized_trader()) == auth_traders.end())
|
||||
{
|
||||
if(ice.authorized_trader() == "")
|
||||
continue;
|
||||
if(ice.company_id() <= 0)
|
||||
continue;
|
||||
if(me->nusers == -1)
|
||||
me->nusers = 0;
|
||||
me->nusers++;
|
||||
|
||||
+10
-7
@@ -12,19 +12,22 @@ env SDK_ROOT=/sdk \
|
||||
SDK_VERSION=$SDK_VERSION \
|
||||
SDK_BUILD_DATE=$SDK_BUILD_DATE
|
||||
|
||||
# copy sdk
|
||||
COPY include/ /sdk/include/
|
||||
COPY lib/ /sparkbin/
|
||||
COPY externals /sdk/externals/
|
||||
COPY spark.conf /sparkdata/conf/
|
||||
COPY futures.coconut /sparkdata/data/replay/futures.coconut
|
||||
|
||||
# add user bts
|
||||
RUN groupadd --gid 1000 $USERNAME && \
|
||||
useradd -s /bin/bash --uid 1000 --gid 1000 -m $USERNAME && \
|
||||
mkdir -p /sparkbin/plugins && \
|
||||
mkdir /sparkdata && \
|
||||
ln -s /sparkbin/ sdk/lib && \
|
||||
echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME && \
|
||||
chmod 0440 /etc/sudoers.d/$USERNAME && \
|
||||
chown -R bts.bts /sparkbin/plugins && \
|
||||
chown -R bts.bts /sparkdata
|
||||
|
||||
# copy sdk
|
||||
COPY include/ /sdk/include/
|
||||
COPY lib/ /sparkbin/
|
||||
COPY externals /sdk/externals/
|
||||
COPY spark.conf /sparkdata/conf/
|
||||
COPY --chown=$USERNAME futures.coconut /sparkdata/data/replay/futures.coconut
|
||||
|
||||
|
||||
@@ -212,30 +212,32 @@ void ICEListener::on_uds_future_spread(const Definition& def, bool& is_intereste
|
||||
fsec.alt_symbol(def.strategySymbol);
|
||||
|
||||
const auto& legs = def.legs;
|
||||
fsec.set_leg_count(legs.size());
|
||||
for(size_t x = 0; x < fsec.leg_count(); ++x)
|
||||
{
|
||||
const auto& leg = legs[x];
|
||||
if(leg.ratioPriceNumerator && leg.ratioPriceDenominator)
|
||||
if (legs.size() > 0) {
|
||||
fsec.set_leg_count(legs.size());
|
||||
for(size_t x = 0; x < fsec.leg_count(); ++x)
|
||||
{
|
||||
auto num = *leg.ratioPriceNumerator;
|
||||
auto denom = *leg.ratioPriceDenominator;
|
||||
fsec.legs[x].leg_price = num / (double) denom;
|
||||
const auto& leg = legs[x];
|
||||
if(leg.ratioPriceNumerator && leg.ratioPriceDenominator)
|
||||
{
|
||||
auto num = *leg.ratioPriceNumerator;
|
||||
auto denom = *leg.ratioPriceDenominator;
|
||||
fsec.legs[x].leg_price = num / (double) denom;
|
||||
}
|
||||
if(leg.ratioQtyNumerator && leg.ratioQtyDenominator)
|
||||
{
|
||||
auto num = *leg.ratioQtyNumerator;
|
||||
auto denom = *leg.ratioQtyDenominator;
|
||||
fsec.legs[x].leg_delta = num / (double) denom;
|
||||
}
|
||||
|
||||
fsec.legs[x].leg_quantity = leg.ratio;
|
||||
fsec.legs[x].leg_side = leg.side == onixs_ice::Side::Bid ? api::SIDE_BUY : api::SIDE_SELL;
|
||||
fsec.legs[x].exchange_key = ExchangeKey(leg.marketId);
|
||||
fsec.legs[x].key = invalid_security_key;
|
||||
}
|
||||
if(leg.ratioQtyNumerator && leg.ratioQtyDenominator)
|
||||
{
|
||||
auto num = *leg.ratioQtyNumerator;
|
||||
auto denom = *leg.ratioQtyDenominator;
|
||||
fsec.legs[x].leg_delta = num / (double) denom;
|
||||
}
|
||||
|
||||
fsec.legs[x].leg_quantity = leg.ratio;
|
||||
fsec.legs[x].leg_side = leg.side == onixs_ice::Side::Bid ? api::SIDE_BUY : api::SIDE_SELL;
|
||||
fsec.legs[x].exchange_key = ExchangeKey(leg.marketId);
|
||||
fsec.legs[x].key = invalid_security_key;
|
||||
add_security(fsec);
|
||||
is_interested = true;
|
||||
}
|
||||
add_security(fsec);
|
||||
is_interested = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
1. Verify pressing the shift or alt key while double clicking in the Price column in a Ladder Window recenters ALL ladders
|
||||
Launch 2 ladders
|
||||
Scroll both ladders so they are no longer centered at mid market
|
||||
Press the shift + double click while over the Price column
|
||||
You should observe both scrolled ladders are now centered once again
|
||||
The countdown timer is also reset via this spacebar action. This is more informational; I don't expect you to wait to verify that the timer is reset.
|
||||
@@ -1,10 +0,0 @@
|
||||
This isn't a setting exactly, but rather a test of keyboard functionality. Currently we are only testing the spacebar key.
|
||||
|
||||
1. Verify pressing the spacebar while in a Ladder Window recenters ALL ladders
|
||||
Launch 2 ladders
|
||||
Click one of the Ladder windows to make sure said window receives focus
|
||||
Scroll both ladders so they are no longer centered at mid market
|
||||
Press the spacebar
|
||||
You should observe both scrolled ladders are now centered once again
|
||||
The countdown timer is also reset via this spacebar action. This is more informational; I don't expect you to wait to verify that the timer is reset.
|
||||
|
||||
Reference in new issue
Block a user