Signals Framework is designed to enable you to create strategies based on any data stream. At the moment, we are offering historical data from crypto exchanges, which you can access in your strategy through the Bars method of the DataMarketplace object.
Select market(s) from the Data Marketplace
Single Market Strategies
For Single Market Strategies, the dropdown in the Markets section in the editor sidebar lets you select a single market that wil be available for your strategy. At any time, you can select a different market from the dropdown and replace the one already connected with your strategy. This way you can run the the model on different markets without a need of changing a single line of code.
Multi Market Strategies
For Multi Market Strategies, you can select multiple markets for a single strategy. Each selected market has indicated and index to the right of the dropdown, which can be used in code to reference the market. In the code, you can access the concrete market with array index operator indicated to the right next to each dropdown - e.g. use Markets[1] for the ETH/USDT asset pairing on Poloniex.
Initialize bars on the market(s)
Bars Method
Define the time scale of the constructed bars by specifing the period type and length. For 5-minute bars, the period type should be set to Minute and period to 5.
Parameters
Name
Type
Description
periodType
BarPeriodType
Period type together with period defines the time scale of Bars which you want to use. PeriodType could be Minute, Hour, or Day.
period
int
The number of periods which define the size of the Bar. For 5-minute bars, the BarPeriodType should be set to Minute and period to 5.
Example
// Using Bars method for initializing 1 day barsdailyBars =data.Bars(BarPeriodType.Day,1)// Using Bars method for initializing 5 hours barsfiveHourBar =data.Bars(BarPeriodType.Hour,5)
usingSignals.DataSeries.Bars;usingSignals.Framework;publicclassMyStrategy:SingleMarketStrategy{privateBars dailyBars;publicoverridevoidSetup(DataMarketplace data,IndicatorsMarketplace indicators) { dailyBars =data.Bars(BarPeriodType.Day,1).WithOffset(2); }publicoverridevoidRegisterActions() {OnUpdateOf(dailyBars).Do(() => { // Prints the latest close value valueLog("The latest close value is "+dailyBars[0].Close.ToString()); // Prints the previous close value valueLog("The previous close value is "+dailyBars[1].Close.ToString()); }); }}
OnMarket Method
This is an optional method, which is useful only in Multi Market Strategies. It allows you to define market on which you want to construct the series on. You don't need to use this method with Single Market Strategies - if this method is not used, the default value is applied - Markets[0] - i.e. the first market selected in the strategy settings in the sidebar.
Market on which you want to construct the data series.
Example
// Initiating 1 day bars with the second selected marketethBars =data.Bars(BarPeriodType.Day,1).OnMarket(Markets[1])
usingSignals.DataSeries.Bars;usingSignals.Framework;publicclassMyStrategy:SingleMarketStrategy{privateBars dailyBarsFirstMarket;privateBars dailyBarsSecondMarket;publicoverridevoidSetup(DataMarketplace data,IndicatorsMarketplace indicators) { dailyBarsFirstMarket =data.Bars(BarPeriodType.Day,1).OnMarket(Markets[0]).WithOffset(25); dailyBarsSecondMarket =data.Bars(BarPeriodType.Day,1).OnMarket(Markets[2]).WithOffset(25); }publicoverridevoidRegisterActions() {OnUpdateOf(dailyBarsFirstMarket).Do(() => { // Prints the latest close value on the first selected marketLog("1st Market: The latest close value is "+dailyBarsFirstMarket[0].Close.ToString()); // Prints the previous close value on the first selected marketLog("1st Market: The previous close value is "+dailyBarsFirstMarket[1].Close.ToString()); });OnUpdateOf(dailyBarsSecondMarket).Do(() => { // Prints the latest close value on the second selected marketLog("2nd Market: The latest close value is "+dailyBarsSecondMarket[0].Close.ToString()); // Prints the previous close value on the second selected marketLog("2nd Market: The previous close value is "+dailyBarsSecondMarket[1].Close.ToString()); }); }}
WithOffset Method
After you define what kind of data you want to use in your strategy, you need to also define the number of data points which your strategy needs to operate on, i.e. how many historical bars you can access at any moment.
Parameters
Name
Type
Description
offset
int
The number of bars that you want to access in the logic of your strategy.
Example
// Initiating 5 minute bars with 10 bars into the historyfiveMinuteBars =data.Bars(BarPeriodType.Minutes,5).WithOffset(10);// Initiating daily bars with 2 bars into the historydailyBars =data.Bars(BarPeriodType.Day,1).WithOffset(2);if (dailyBars[0].Close>dailyBars[1].Close) {Log("Today's close value is higher.");}
usingSignals.DataSeries.Bars;usingSignals.Framework;publicclassMyStrategy:SingleMarketStrategy{privateBars dailyBars;publicoverridevoidSetup(DataMarketplace data,IndicatorsMarketplace indicators) { dailyBars =data.Bars(BarPeriodType.Day,1).WithOffset(2); }publicoverridevoidRegisterActions() {OnUpdateOf(dailyBars).Do(() => { // Prints the latest close value valueLog("The latest close value is "+dailyBars[0].Close.ToString()); // Prints the previous close value valueLog("The previous close value is "+dailyBars[1].Close.ToString()); }); }}