Implement a Financial Strategy by Using Stateflow

This example shows how to use a standalone Stateflow® chart to model a financial trading strategy known as Bollinger Bands. Standalone charts implement classic chart semantics with MATLAB® as the action language. You can program the chart by using the full functionality of MATLAB, including those functions that are restricted for code generation in Simulink®. For more information, see Create Stateflow Charts for Execution as MATLAB Objects.

Compute Bollinger Bands

The Bollinger Bands trading strategy is to maintain a moving average of N stock prices for some commodity and issuing trading instructions depending on the value of the stock:

  • "Buy" when the value of the stock drops K standard deviations below the moving average.

  • "Sell" when the value of the stock rises K standard deviations above the moving average.

  • "Hold" when the value of the stock is within K standard deviations of the moving average.

Typical implementations for this strategy use values of N = 20 and K = 2.

The file sf_stock_watch.sfx defines a standalone Stateflow chart that implements this financial strategy. The chart consists of two outer states in parallel decomposition.

  • The StockTicker subchart records the current price of a stock. The subchart hides the details for calculating stock prices. To access real-time market data from financial data providers, one possible implementation involves the use of the Datafeed Toolbox™. For details, see Datafeed Toolbox.

  • The FinancialAdvisor state uses the last N stock prices to compute high and low bands. Depending on the current price relative to these bands, the state generates "buy," "sell," or "hold" instructions. The action on every(1,sec) creates a MATLAB® timer to execute the chart every second. See Control Chart Execution by Using Temporal Logic.

Parallel decomposition is a common design pattern that enables your algorithm to preprocess input data. For more information, see State Decomposition.

Execute Standalone Chart

To execute the standalone chart, create a Stateflow chart object w:

w = sf_stock_watch();

The chart generates a stream of stock prices and issues "buy," "sell," or "hold" instructions.

Note: Chart execution continues until you delete the chart object.
Loading data... Ready in 5 4 3 2 1 0:
HOLD at 14.1942
SELL at 14.2802
SELL at 14.247
HOLD at 14.2025
BUY at 14.1444

To stop the chart execution, delete the chart object w:

delete(w);

Related Topics