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
Kstandard deviations below the moving average.
"Sell" when the value of the stock rises
Kstandard deviations above the moving average.
"Hold" when the value of the stock is within
Kstandard deviations of the moving average.
Typical implementations for this strategy use values of
N = 20 and
K = 2.
sf_stock_watch.sfx defines a standalone Stateflow chart that implements this financial strategy. The chart consists of two outer states in parallel decomposition.
StockTickersubchart 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.
FinancialAdvisorstate uses the last
Nstock 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 = 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.2471 HOLD at 14.2025 BUY at 14.1444
To stop the chart execution, delete the chart object w: