Framework v7
This page is about a previous version of the SigTech framework.
Please see Release notes | SigTech framework v8: Latest for information on the latest framework version.
Pages in this category
Release notes | SigTech framework v7 (this page)
On this page
v7.40.0 - v7.48.0 (Dec 2021 - Apr 2022)
In this section
v7.48.0 (11 Apr 2022)
Custom trade sizing methods now available
You can now define your own custom sizing methods in terms of quantities. Previously, custom sizing was only available via the traded instrument. The below code block demonstrates how to define a custom sizing method.
Default configuration now available for single stock strategy start date
Previously, retrieving single stock strategies via the sig.get_single_stock_strategy
call would allow you to specify a minimum start date or revert to a default. You can now configure this default via the environment flag DEFAULT_RS_START_DATE
. The following code block demonstrates this new functionality.
Rolling options strategies can now target notional values based on NAV
Previously, rolling option strategies would allow either a fixed target at each roll or a custom value. You can now set the target to scale with the size of the strategy via the target_type
parameter. This parameter takes two values:
StrikeNotionalAsProportionOfNAV
SpotNotionalAsProportionOfNAV
The following code block demonstrates this added functionality using a rolling option straddle.
Drawdown plot added to the performance report
The performance report now includes a drawdown plot with additional enhancements.
v7.46.0 (07 Mar 2022)
Calculate the approximate return of a signal strategy
You can now calculate the approximate return of a signal strategy based on its weights, without having to construct the entire strategy. This allows you to perform multiple evaluations quickly and efficiently. The following code block demonstrates this new functionality.
v7.45.0 (24 Feb 2022)
Add expected returns to portfolio optimisations
You can now add your own estimates of expected returns when using the PortfolioOptimizer
. Previously, functionality had been limited to the historical mean returns. Whilst this is still the default behaviour, you now have the option of using proprietary models for stock predictions and inputting your expectations into the optimisation framework during portfolio construction.
The following code block compares the previous and new approaches.
New IntradaySignalStrategy
building block added
IntradaySignalStrategy
building block addedThe new IntradaySignalStrategy
building block clones the functionality of the existing SignalStrategy
class but sets the defaults of certain parameters to intraday-focused values. This offers a more efficient way of creating intraday strategies.
The default parameters are: use_signal_for_rebalance_dates=True
, t0_execution=True
, execution_delay='5 minutes'
.
The following code block demonstrates the use of this new building block.
New SigMaster method creates customised universes on different dates
The new SIGMaster
method get_universe_generator()
returns an object offering the same filtering capabilities as SIGMaster
but can also be applied to a customised universe across different dates.
Applying the filter using apply()
returns a {date: universe}
dictionary. The following code block demonstrates this added functionality.
This dictionary can be used as an input for the EquityUniverseFilter
for more advanced filtering operations.
New methods for bulk data retrieval during strategy construction
You can now retrieve bulk data in advance when building strategies. This allows for the construction of a large number of strategies in one go, rather than building them individually.
The following code block demonstrates the use of these new methods in the specific case of reinvestment strategies.
A more general approach is offered by sig.calc_history(list_of_strategies)
. This retrieves all of the data used by the listed strategies and then runs those strategies.
This functionality replaces the existing DAGs methods.
Functions added to convert factor exposures to stock weights
More predefined functions have been added to convert factor exposures to stock weights when using the EquityFactorBasket
.
Functions to weight stocks by their market cap or cumulative factor score are accessible through sig.EquityFactorBasket.AVAILABLE_FACTOR_TO_WEIGHT_FUNCTIONS
.
You now have the option of combining factor scores after normalisation (z_score=True
) and/or only take the long leg (rather than both long & short legs) when ranking stocks using the proportion
keyword by passing long_only=True
.
The following code block demonstrates these new functions.
v7.44.0 (07 Feb 2022)
New argument added to the initialisation function
Previously, attempting to initialise your environment more than once - with init()
- would terminate the notebook execution and generate a long error message. This error message has been simplified and an additional argument - repeat_mode
- has been added to the init()
function. Attempts to initialise an already initialised environment will produce different behaviours based on the value of repeat_mode
:
'
reinit'
- Destroys the current environment and creates a new one. A warning message explaining these actions is printed'error'
- The execution terminates and a clearer error message is printed'warning'
- A warning is printed and the init() has no effect (default)
These behaviours are described in the code block below:
Delta Hedging Rebalance Dates
When hedging an option using the DeltaHedgingStrategy
, you can now choose for hedge adjustments to occur only on dates when the options are rolled. This can be achieved by setting the rebalance_hedge_on_roll
parameter to True
. This reduces turnover from the hedge rebalancing and concentrates trading on the same day for both the options strategy and hedge. However, the delta will not be exactly hedged between trades. The below code block demonstrates the use of this new functionality.
You can also pass a list of dates to rebalance the hedge on, using the custom_hedge_dates
parameter. The below code block demonstrates this new feature.
New threshold function added to SignalStrategy for rebalancing
The SIGNALCHANGE
function has been added to the AVAILABLE_THRESHOLD_FUNCTIONS
for the SignalStrategy
. When applied, the function will trigger a rebalance if the signal value changes. This replaces the previous approach which would rebalance an instrument regardless of whether or not the signal value had changed.
The following code block demonstrates the use of this new function.
v7.43.0 (26 Jan 2022)
Back-adjusted futures prices now available
You now have the ability to work with back-adjusted futures series in order to avoid triggering spurious trading signals during the roll. The following code block demonstrates this functionality by setting the back_adjusted
parameter to True
.
v7.42.0 (21 Jan 2022)
Custom aggregation metrics added to EquityUniverseFilter
EquityUniverseFilter
You can now access the full set of methods and properties available for a single stock when implementing custom aggregation metrics via the EquityUniverseFilter
. These new capabilities are accessible by passing an additional argument - stock_obj
- to the aggregation function.
The code block below demonstrates the use of this new functionality.
v7.41.0 (18 Jan 2022)
New functionality for hedging FX forwards
A new parameter has been added to the FXForwardHedgingStrategy
class which allows you to hedge using multiple FX Forwards in different currencies. By setting the use_holdings_for_hedge_ccy
parameter to True
, the currencies of the bottom level assets in your strategy will be hedged in proportion to their respective weights.
This replaces the previous approach of hedging the total value of the strategy in its currency into the FXForwardHedgingStrategy
currency. This change allows for a better hedge of complex, multi-currency strategies. The below code block demonstrates the construction of a strategy using the use_holdings_for_hedge_ccy
parameter.
As hedges are applied after orders are placed, this added functionality may not be suitable for high turnover strategies.
Execution points parameter added
A new option ('EXECUTION_PTS'
) has been added for the type of strategy time points. This gives the times where orders are executed on all levels in the strategy. This can be used as an input to interactive_portfolio_table
, historic_positions
and strategy_dt_list
.
Example:
Custom roll schedule added to RollingFXForward
The RollingFXForwardStrategy
now allows you to input a rolling frequency or a custom roll schedule . In particular it allows for the monthly or daily roll of longer term forwards. This replaces the previous approach which restricted you to a roll offset from the forward maturity.
The below code block demonstrates the use of the rolling_frequencies
parameter - set to roll monthly - when trading a 3 month rolling EUR USD forward.
This can be contrasted with the use of the custom_roll_dates
parameter which allows you to specify a particular roll schedule. The following code block demonstrates the use of this parameter, setting a schedule containing only two dates.
New functionality added to the PerformanceReport
Two new views have been added to the PerformanceReport
which allow for the inclusion of currency based metrics. The following code block demonstrates how to include these new views.
The new aum
argument allows you to pass a representative AUM figure. This is useful in strategies where initial_cash=0
as it avoids dividing by zero. Following on from the above code block, the use of this new argument is demonstrated below.
In addition, you can now generate a PerformanceReport
with compounded metrics by passing compound_metrics=True
. The below code block demonstrates this feature by building on the examples provided above.
New technical indicators added to the platform
A new set of indicators (MACD
, KDJ
, RSI
, BOLL
, WR
, ADX
) for the technical analysis of price movements has been added to sigtech.framework.signal.library.technical_indictors
.
v7.40.0 (20 Dec 2021)
New methods available for defining and applying custom risk measures when sizing a strategy
It is now possible to define a custom risk measure and use it to size positions in a strategy. The addition of a new parameter - sizing_method
- and a new option - CUSTOM
- for the existing unit_type
parameter replaces the previously used PV01
mechanism for sizing swaps. The following code block describes this new functionality, where the ‘pv01_to_notional'
method is defined on rates instruments - like swaps - to trade PV01.
This method can be used as part of building a custom strategy. Please see our Custom strategies page to learn more.
Wider range of swap data now available via Default Universe datasets
The extension of the DefaultUniverses
functionality allows for easy access and caching of returns series for single stocks, as well as returns, PV01, and rates for forward starting swaps.
The following code block demonstrates the retrieval of a single stock strategy returns series for specific stock tickers:
This can be contrasted with the code block below which demonstrates the retrieval of data for a USD 5Y swap starting in 3 months and a USD 3Y swap starting immediately:
Additional parameters added to the Basket Strategy
The BasketStrategy
has been extended to include: 1) unit types used for weights, and 2) long-short constituent conversion.
The parameters added to the strategy are:
convert_long_short_weight: Determines if the strategy applies long-short conversion (default is False)
use_db_for_short_version: Determines if the long-short conversion examines the object cache for the same short strategy (default is False)
unit_type: Sets the units used for weighting (default is 'WEIGHT')
The below code block demonstrates the use of these new features.
v7.30.0 - v7.38.0 (Oct 2021 - Dec 2021)
In this section
v7.38.0 (13 Dec 2021)
Greater Flexibility when Retrieving Futures Contracts
The new get_future_curve
method allows users to retrieve all of the contracts within a FuturesContractGroup
with a price on the requested date. This creates a more efficient process by removing the need to search for contracts expiring after the specified date.
Once the required contracts have been retrieved, the plot_curve_on_dates
__ and plot_end_on_curve_on_dates
methods allow users to generate visualisations of all available contract prices.
New Credit Index Trading Strategy Available
Users now have the ability to construct strategies that trade credit index instruments, with the introduction of the RollingCreditIndexStrategy
. This added functionality also allows for the reinvestment of coupons. The following code block demonstrates how this strategy can be built:
v7.37.0 (03 Dec 2021)
New Function for Swaption Volatility Data
Users can now retrieve daily, at-the-money swaption normal volatility data. This data is available for both rolling and fixed expiry swaptions.
If you would like to access SigTech's swaptions data, please contact sales@Sigtech.com
.
Extra Features Added to the Rolling Swap Strategy
New functionality has been added which allows for the retrieval of:
The daily spot or forward swap fair rate
The swap's DV01
The daily P&L for entering a fair swap on the previous day and holding it for one day.
The below code block demonstrates the use of the fair_swap_rate
:
Retrieve the Most Liquid Stock from a Given Ticker
The get_most_liquid_stock
function has been added to the platform. The function returns the most liquid stock within a specified tradable ticker, exchange ticker, or list of tickers. The following code block demonstrates the use of the function.
Strike Optimisation now Available for Options
A new function has been added which allows users to search for the option strike at a given price level. This facilitates price-targeted investing. The code block below demonstrates the use of this new functionality.
Time and Timezone Optionality now Available for Instrument Time Series
Users now have the option of including the time and UTC timezone when calling the history()
method on financial instruments. The below code block demonstrates this new functionality.
Flow Decorators Renamed to Job
The Flow
decorators previously used on the SigTech platform have been replaced by Job
. Hence, FunctionFlow
and StrategyFlow
are now FunctionJob
and StrategyJob
. The below code block demonstrates these changes.
New Functions Available for Retrieval of Raw Market Data
Two new functions for the extraction of raw data have been added to the SigTech platform. These functions facilitate the retrieval of raw market data and allow for the viewing of market swap rates, deposit rates, FRAs, and futures. The below code block demonstrates how these functions can be used.
Add Custom Futures Data
Users wanting to supplement the futures data currently available on the SigTech platform can now upload and utilise their own custom data. This added functionality allows for the utilisation of both individual futures contracts and contract groups.
When extending a contract's history back to a date prior to the one provided by SigTech, it is necessary to alter theFuturesContractGroup.first_contract
string to be the new first contract.
New Strategy for Rolling Asset Swaps now Available
For users interested in systematically rolling into OTR bonds, a new RollingAssetSwap
strategy has been added to the SigTech platform. This added functionality also includes a method for calculating carry and roll down returns. The below code block provides an example of this new feature:
Market Data Widget Available
Users can now view live market data within the SigTech Research Environment. The following code block demonstrates how to generate the market data widget:
v7.35.0 (15 Nov 2021)
RFPriceIndex
now accepts customisable roll table
RFPriceIndex
now accepts customisable roll tableUsers are now able to apply a custom_roll_table
table within the RFPriceIndex
class in order to hold any desired contracts. The following code block demonstrates this functionality.
Swaps can now be created using custom roll tables
A list of tuples (swap trade date, swap strat date) can now be passed into the RollingSwapStrategy
to allow for more flexibility when creating swap strategies. Please see below code block for an example:
OIS Swaps are now available
As per below example, OIS swaps are now available on the SigTech platform. You can use them by passing in the OIS
as the swap_type
argument when instantiating a RollingSwapStrategy
object. In the below example a RollingSwapStrategy
object is created which will trade 6M forward 10Y OIS swaps and roll them every 6 months.
Signal Report
SigTech has introduced an experimental feature called the Signal Report on the platform. This feature allows applying an extensive range of analytical tools on a given data set and strategy, below code block provides a simple example of how it can be used. We would appreciate any feedback on the usability of this feature.
Additional optimizers
The method require_equal_risk_contribution
has been added to the portfolio optimizers, a simple demonstration of its use can be viewed in below code block.
v7.33.0 (29 Oct 2021)
New operator added to SIGMaster filter
The SIGMaster filter method now accepts the operator 'not in'
. This restricts the filter to only include records not contained in the list specified by the user. In the code block below, the filter will exclude all records where the EXCHANGE_COUNTRY_ISO2
is either US
or JP
.
New custom_roll_table
parameter added to RollingSwapStrategy
custom_roll_table
parameter added to RollingSwapStrategy
The RollingSwapStrategy
now provides users with the option of specifying a custom_roll_table
. The following code block demonstrates the creation of a RollingSwapStrategy
which includes this parameter.
New parameter available when configuring your research environment
When configuring the research environment, the parameter HISTORY_DATA_CLEAN
can be applied to determine whether to use clean or dirty data. When the parameter is set to True
clean data is used, and when set to False
, dirty data is used. The default value is None
which has the effect that clean data will be used if available, otherwise it will use dirty data. The code block below demonstrates this call within the wider context of environment setup.
Strike value class added for rolling option strategies
A range of strike values have been added for any rolling option strategy inheriting from the RollingOptionStrategyBase
class. The below code block demonstrates how AVAILABLE_STRIKE_VALUES
can retrieve the available alternatives for the strike_type
argument, where the variable straddle
is used in this example to represent an instantiated object of the Straddle
class.
Caching user-created strategies
A strategy service has been added to the platform allowing users to cache the results of strategies. To gain access to this feature, please contact John.McCann@Sigtech.com.
v7.32.0 (26 Oct 2021)
New Swaption building blocks now available
A range of swaption strategy classes have been added to therolling_swaption_basket
module.These classes include: SwaptionStrangle
, DynamicSwaptionsStrategy
, and DynamicMultiSwaptionsStrategy
.
v7.31.0 (21 Oct 2021)
The RollingFXForwardStrategy
can now be used with a fixed notional
The RollingFXForwardStrategy
class now includes a number of new parameters allowing the use of fixed notional in the FX forward strategy. By setting the optional parameter set_weight_from_initial_cash
to True
the initial FX forward and subsequent rolled forward will have the notional equal to initial_cash
. The default value is False
. The following code block demonstrates the use of this parameter.
v7.30.0 (20 Oct 2021)
Parameter changes for strategy methods
A number of changes have been made to the methods on the Strategy
class. These changes are described in the following table.
New parameters added to RollingFutureStrategy
class
RollingFutureStrategy
classThe RollingFutureStrategy
class now includes the parameter rolling_approach
. Its default value is 'weight'
, which rolls the full value of the previous contract into the new contract, taking price differences into consideration. The alternative value for this parameter is contracts
, which sets an initial investment value in one contract and rolls the same number of units into subsequent contracts. The following code block demonstrates this functionality.
An optional parameter, fixed_contracts
, overwrites the default behaviour and trades a specified number of contracts throughout the strategy. When set, the strategy will subsequently roll into the same number of contracts. Its default value, None
, rolls the initial investment into subsequent contracts as per the value assigned to rolling_approach
. This functionality is demonstrated in the following code block.
New generate_data_for_FX_curve_override
method
generate_data_for_FX_curve_override
methodThe generate_data_for_FX_curve_override
method on the FXCurveMarket
class has been added to the platform. The method allows users to override existing or missing FX curves. The code block below includes the parameters for this method.
v7.28.0 & earlier (Jun 2021 - Sep 2021)
In this section
Sep 2021
Delta hedging now available on swaptions
The update allows the DeltaHedgingStrategy
to hedge the delta for any swaptions trading strategy inheriting from the OptionStrategyBase
class. The following code block demonstrates a call to the DeltaHedingStrategy
where the variable st
is an option strategy.
Intraday rebalancing now available with signal data
The platform now allows intraday rebalancing for strategies inheriting from the signal_strategy
class. This can be achieved in two ways:
By specifying a signal with intraday values and setting the
use_signal_for_rebalance_dates
parameter to‘True’
By specifying a
rebalance_frequency
parameter in an intraday format (e.g.'2h'
)
The below code block demonstrates intraday rebalancing at one hour intervals with the rebalance_frequency
parameter, the variable signal_obj
is a signal object converted from a pandas Dataframe.
Simplification of ticker
command
ticker
commandWhen assigning a ticker to your strategy, the previous command db_ticker
has been simplified to ticker
. The code block below demonstrates its use.
Cleanup of logging messages
The logging messages generated by the platform, as per the default or user-defined logging level, have been edited to remove any unnecessary information. This change should streamline the user experience.
Trading Economics calendar update
The Trading Economics calendars, which list specific events (e.g. bond auctions), have been updated to include the time of day when these events occur.
CBOE FX intraday data now available
The raw CBOE FX intraday dataset is now available. It can be accessed via the Market Data window via the FX > FX Spot Rates pathway. If you would like access to this or any other dataset, please contact John.McCann@Sigtech.com.
Intraday history retrieval
Querying intraday data for specific time periods is now possible. The code block below queries price data for the Crude Oil December 2019 contract between 12:00:00 on January 4th 2019 and 10:00:00 on October 4th 2020.
Easily access signal strategy methods
Access assorted allocation and threshold functions using the following code strings:
These functions allow users to normalize or rebalance their strategy’s weights without accessing the specific area of the Framework Signal library. Additional functions are available within the allocation functions module.
Dividend reinvestment methodologies
An assortment of dividend reinvestment methodologies have been added to the EquityFactorBasket
strategy. These are accessible through the reinvest_dividends
input. The following parameters are available:
The post_div
parameter reinvests dividends into a portfolio's constituents on a pro rata basis. The individual_stock
parameter reinvests the dividend into the stock paying the dividend.
JupyterLab v3.1.4 update
The version of JupyterLab utilised within the SaaS production window has been updated. This update heralds several new and exciting changes to the functionality available to users of the platform.
Code-completion function added
In the interests of user efficiency the SigTech platform now includes a code-completion feature. The added functionality is made available via Jedi and the Jedi Language Server. This feature is automatically available within the platform and requires no action by the user to enable.
Strategy templates now available within the SigTech research environment
A set of pre-made strategy templates have been added to the SigTech platform. These templates are easily accessible via the Template button in the initial Launcher notebook. From these templates, users can easily navigate to the relevant user guide tutorials.
Debugging feature now available
Identify, isolate and remedy bugs within your code with the aid of SigTech's new debugging feature. This feature can be enabled and disabled with the toggle button on the right of the notebook toolbar.
Drag and drop code snippets into your notebooks
The SigTech platform now allows users to save time by dragging and dropping pre-written snippets of code into their notebooks.
Memory monitoring facility added
Users can now track their memory usage with a green health bar located on the right hand side of the research environment menu.
Strategy widget now available
Visually interact with the performance of your strategy with the new SigTech strategy widget. The widget displays of a range of plots and numerical performance metrics. Once you have defined your strategy's name (e.g. my_strategy) the widget can be generated in one of two ways:
Within a notebook cell
As a pop-up to allow for easy sharing
Aug 2021
🔎 Instantly search across all documentation, example strategies and the framework source code:
📚Instant access to all example strategies: You can now access our library of example notebooks from every instance of the research environment. See example notebooks.
👀 Frame source code revealed: Browse our entire framework source code and see what's going on under the hood. See framework source code.
📖 New User Guide content
pageAsset swapspageRolling swap strategypageLME FuturespageCustom sizing for rolling futuresJul 2021
🔧 Data API
You can now make requests to the Data API via personal access tokens. To find out more, contact us at support@sigtech.com.
📈 Market Data UI improvements
The Market Data UI now shows timeseries visualisations when viewing an instrument – use the dropdown to switch between an instrument's various available timeseries.
We've also added a history of recent updates for each timeseries.
🐍 Python Framework updates
27 Jul
Addition of new Xccy swap instrument
Support for ON, TN and SN rolling FX forward strategies
19 Jul
Additional features added in portfolio optimization allocation function.
New building block for equity factor strategies.
7 Jul
Added asset swap structure.
Docs improved for quant-lib module.
6 Jul
Automatic data point filtering based on entitlements.
📖 User Guide – new content
pageStrategy deploymentpageDefault strategiespageFutures modellingpagePortfolio optimisationJun 2021
Market Data overhaul
Our Market Data interface has undergone a complete overhaul:
Search our entire database
Easier browsing through UI improvements, better organisation and clearer naming
Improved code samples
More information available for all data
Let us know your feedback at support@sigtech.com.
Python Framework updates
30 Jun
Constant dv01 rolling swap strategy.
Preferred data points can be provided.
StrategyService enhanced with get + put many capabilities.
23 Jun
Credit Index functionality added.
Support for IBES estimates.
21 Jun
Added flag to keep stocks with missing values when filtering.
Added new swap currency definitions.
Methods provided for sizing swap trades using pv01 quantities.
21 Jun
Methods provided for sizing swap trades using pv01 quantities.
Added optimised intraday history "intraday_history_df" method for retrieving multiple fields
Allowed RollingFutureStrategy front offset from expiry date rather than min(expiry date, first delivery notice date)
DAG implementation for EQ/CM/FX Options
Removed FxPricer class - move functionality to TradePricer.
Fixed bug with FxCross class to properly allow for non-USD currency pairs
Added doc strings to utils modules
Added TRBC sector filters to EquityUniverseFilter
Added better error message for allocation function on SignalStrategy
HistoricalDObject.history() can automatically calculate arbitrary data points from intraday data
Last updated