Moving Average Reversion Strategy for On-Line Portfolio Selection

Bin Li, Steven C. H. Hoi, Doyen Sahoo, Zhi-Yong Liu

Abstract


This project proposes a novel online portfolio selection strategy named ``On-Line Moving Average Reversion" (OLMAR). On-line portfolio selection has attracted increasing interests from artificial intelligence and machine learning communities recently. Empirical evidence shows that stock's high and low prices are temporary and stock price relatives are likely to follow mean reversion phenomenon. While existing mean reversion strategies are shown to achieve good empirical performance on many real datasets, they often make the single-period mean reversion assumption, which is not always satisfied, leading to poor performance in certain real datasets. To overcome the limitation, this article proposes a multiple-period mean reversion, or so-called (Simple/Exponential) ``Moving Average Reversion" (MAR), and a new on-line portfolio selection strategy named ``On-Line Moving Average Reversion'' (OLMAR), which exploits MAR by applying powerful online learning techniques. From our empirical results on real markets, we found that OLMAR can overcome the drawbacks of existing mean reversion algorithms and achieve significantly better results, especially on the datasets that failed existing mean reversion algorithms. In addition to superior performance, OLMAR also runs extremely fast, further supporting its practical applicability to a wide range of applications.

Publication


@article{LH12,
    author = {Bin Li and Steven C. H. Hoi},
    title = {On-Line Portfolio Selection with Moving Average Reversion},
    booktitle = {Proceedings of the International Conference on Machine Learning (ICML)},
    year = {2012}
}

Source Codes and Datasets of OLMAR


You need to aggress to this before downloading the code and data.

Matlab source codes for OLMAR: >> Click here to download (3.50M) <<

Note: The code was implemented by Dr. Bin Li. Feel free to send us your comments and suggestions.

Instructions for the OLMAR Code and Data


 demo_all;                                 % Run sample demo on nyse_o dataset
    1. Set simulation variables (required)
opts. quiet_mode = 0;               % Display nothing. 0: display; 1: no display
opts.display_interval = 500;     % If diaplay, display interval
opts.log_mode = 1;                   % Write .txt log file. 0: no log; 1: write log file
opts.mat_mode = 1;                 % Write .mat log file. 0: no mat; 1: write mat file
opts.analyze_mode = 1;           % Analyze and diaplay info. 0: no; 1: yes
opts.his = 0;                             %  Historical mode. 0: no; 1: yes
    1. Run OLMAR on NYSE (O) dataset with \epsilon = 0.5 and transaction cost rate = 0
demo_manager('olmar_start', 'nyse_o', {0.5, 0}, opts);

    1. Run Market on Sp500 dataset with transaction cost rate = 0
demo_manager('market_start', 'sp500', {0}, opts);

Links to Resources


Back to Steven Hoi's Homepage