{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import datetime as dt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from matplotlib import pyplot as plt\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from alphamind.api import *\n",
    "from PyFin.api import *\n",
    "\n",
    "plt.style.use('ggplot')\n",
    "engine = SqlEngine('postgres+psycopg2://postgres:A12345678!@10.63.6.220/alpha')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "u_name = 'zz500'\n",
    "benchmark = 905\n",
    "universe = Universe(u_name, [u_name])\n",
    "factor_coverage = engine.fetch_factor_coverage()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "flitered_coverage = factor_coverage[((factor_coverage.source == 'uqer'))\n",
    "                                    & (factor_coverage.universe == u_name) \n",
    "                                    & (factor_coverage.trade_date >= '2012-01-01')]\n",
    "coverage_report = flitered_coverage.groupby(['factor'])['coverage'].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "alpha_factors = {\n",
    "    'eps': LAST('eps_q'),\n",
    "    'roe': LAST('roe_q'),\n",
    "    'bdto': LAST('BDTO'),\n",
    "    'cfinc1': LAST('CFinc1'),\n",
    "    'chv': LAST('CHV'),\n",
    "    'rvol': LAST('RVOL'),\n",
    "    'val': LAST('VAL'),\n",
    "    'grev': LAST('GREV'),\n",
    "    #'droeafternonorecurring': LAST('DROEAfterNonRecurring')\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "alpha_factors.__len__()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "frequency = '2w'\n",
    "batch = 8\n",
    "start_date = '2012-01-01'\n",
    "end_date = '2017-11-02'\n",
    "method = 'risk_neutral'\n",
    "portfolio_risk_neutralize = ['SIZE']\n",
    "neutralize_risk = industry_styles + portfolio_risk_neutralize\n",
    "industry_lower = 1.\n",
    "industry_upper = 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-08 10:57:39,172 - ALPHA_MIND - INFO - Starting data package fetching ...\n",
      "2017-11-08 10:57:51,523 - ALPHA_MIND - INFO - Loading data is finished\n",
      "2017-11-08 10:57:52,015 - ALPHA_MIND - INFO - Data processing is finished\n"
     ]
    }
   ],
   "source": [
    "data_package = fetch_data_package(engine,\n",
    "                                  alpha_factors=alpha_factors,\n",
    "                                  start_date=start_date,\n",
    "                                  end_date=end_date,\n",
    "                                  frequency=frequency,\n",
    "                                  universe=universe,\n",
    "                                  benchmark=benchmark,\n",
    "                                  batch=batch,\n",
    "                                  neutralized_risk=neutralize_risk,\n",
    "                                  pre_process=[winsorize_normal],\n",
    "                                  post_process=[winsorize_normal],\n",
    "                                  warm_start=batch)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train_x = data_package['train']['x']\n",
    "train_y = data_package['train']['y']\n",
    "\n",
    "predict_x = data_package['predict']['x']\n",
    "predict_y = data_package['predict']['y']\n",
    "\n",
    "features = data_package['x_names']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0. Train Score on a specific date\n",
    "------------------------------------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "ref_date = list(train_x.keys())[-2]\n",
    "sample_train_x = train_x[ref_date]\n",
    "sample_train_y = train_y[ref_date].flatten()\n",
    "\n",
    "sample_test_x = predict_x[ref_date]\n",
    "sample_test_y = predict_y[ref_date].flatten()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.012317547736619416"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = LinearRegression(features, fit_intercept=False)\n",
    "model.fit(sample_train_x, sample_train_y)\n",
    "model.impl.score(sample_train_x, sample_train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.039304992699781494"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.impl.score(sample_test_x, sample_test_y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Train and test accuracy trend （Linear Regression）\n",
    "----------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dates = sorted(train_x.keys())\n",
    "accuray_table = pd.DataFrame(columns=['train', 'predict'])\n",
    "model_df = pd.Series()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-08 10:57:52,472 - ALPHA_MIND - INFO - trade_date: 2012-02-02 00:00:00 training finished\n",
      "2017-11-08 10:57:52,477 - ALPHA_MIND - INFO - trade_date: 2012-02-16 00:00:00 training finished\n",
      "2017-11-08 10:57:52,481 - ALPHA_MIND - INFO - trade_date: 2012-03-01 00:00:00 training finished\n",
      "2017-11-08 10:57:52,486 - ALPHA_MIND - INFO - trade_date: 2012-03-15 00:00:00 training finished\n",
      "2017-11-08 10:57:52,503 - ALPHA_MIND - INFO - trade_date: 2012-03-29 00:00:00 training finished\n",
      "2017-11-08 10:57:52,509 - ALPHA_MIND - INFO - trade_date: 2012-04-12 00:00:00 training finished\n",
      "2017-11-08 10:57:52,515 - ALPHA_MIND - INFO - trade_date: 2012-04-26 00:00:00 training finished\n",
      "2017-11-08 10:57:52,520 - ALPHA_MIND - INFO - trade_date: 2012-05-10 00:00:00 training finished\n",
      "2017-11-08 10:57:52,527 - ALPHA_MIND - INFO - trade_date: 2012-05-24 00:00:00 training finished\n",
      "2017-11-08 10:57:52,534 - ALPHA_MIND - INFO - trade_date: 2012-06-07 00:00:00 training finished\n",
      "2017-11-08 10:57:52,541 - ALPHA_MIND - INFO - trade_date: 2012-06-21 00:00:00 training finished\n",
      "2017-11-08 10:57:52,547 - ALPHA_MIND - INFO - trade_date: 2012-07-05 00:00:00 training finished\n",
      "2017-11-08 10:57:52,552 - ALPHA_MIND - INFO - trade_date: 2012-07-19 00:00:00 training finished\n",
      "2017-11-08 10:57:52,561 - ALPHA_MIND - INFO - trade_date: 2012-08-02 00:00:00 training finished\n",
      "2017-11-08 10:57:52,567 - ALPHA_MIND - INFO - trade_date: 2012-08-16 00:00:00 training finished\n",
      "2017-11-08 10:57:52,572 - ALPHA_MIND - INFO - trade_date: 2012-08-30 00:00:00 training finished\n",
      "2017-11-08 10:57:52,579 - ALPHA_MIND - INFO - trade_date: 2012-09-13 00:00:00 training finished\n",
      "2017-11-08 10:57:52,584 - ALPHA_MIND - INFO - trade_date: 2012-09-27 00:00:00 training finished\n",
      "2017-11-08 10:57:52,592 - ALPHA_MIND - INFO - trade_date: 2012-10-11 00:00:00 training finished\n",
      "2017-11-08 10:57:52,599 - ALPHA_MIND - INFO - trade_date: 2012-10-25 00:00:00 training finished\n",
      "2017-11-08 10:57:52,604 - ALPHA_MIND - INFO - trade_date: 2012-11-08 00:00:00 training finished\n",
      "2017-11-08 10:57:52,608 - ALPHA_MIND - INFO - trade_date: 2012-11-22 00:00:00 training finished\n",
      "2017-11-08 10:57:52,615 - ALPHA_MIND - INFO - trade_date: 2012-12-06 00:00:00 training finished\n",
      "2017-11-08 10:57:52,620 - ALPHA_MIND - INFO - trade_date: 2012-12-20 00:00:00 training finished\n",
      "2017-11-08 10:57:52,628 - ALPHA_MIND - INFO - trade_date: 2013-01-04 00:00:00 training finished\n",
      "2017-11-08 10:57:52,634 - ALPHA_MIND - INFO - trade_date: 2013-01-17 00:00:00 training finished\n",
      "2017-11-08 10:57:52,640 - ALPHA_MIND - INFO - trade_date: 2013-01-31 00:00:00 training finished\n",
      "2017-11-08 10:57:52,647 - ALPHA_MIND - INFO - trade_date: 2013-02-18 00:00:00 training finished\n",
      "2017-11-08 10:57:52,654 - ALPHA_MIND - INFO - trade_date: 2013-02-28 00:00:00 training finished\n",
      "2017-11-08 10:57:52,660 - ALPHA_MIND - INFO - trade_date: 2013-03-14 00:00:00 training finished\n",
      "2017-11-08 10:57:52,666 - ALPHA_MIND - INFO - trade_date: 2013-03-28 00:00:00 training finished\n",
      "2017-11-08 10:57:52,672 - ALPHA_MIND - INFO - trade_date: 2013-04-11 00:00:00 training finished\n",
      "2017-11-08 10:57:52,680 - ALPHA_MIND - INFO - trade_date: 2013-04-25 00:00:00 training finished\n",
      "2017-11-08 10:57:52,686 - ALPHA_MIND - INFO - trade_date: 2013-05-09 00:00:00 training finished\n",
      "2017-11-08 10:57:52,692 - ALPHA_MIND - INFO - trade_date: 2013-05-23 00:00:00 training finished\n",
      "2017-11-08 10:57:52,697 - ALPHA_MIND - INFO - trade_date: 2013-06-06 00:00:00 training finished\n",
      "2017-11-08 10:57:52,702 - ALPHA_MIND - INFO - trade_date: 2013-06-20 00:00:00 training finished\n",
      "2017-11-08 10:57:52,710 - ALPHA_MIND - INFO - trade_date: 2013-07-04 00:00:00 training finished\n",
      "2017-11-08 10:57:52,716 - ALPHA_MIND - INFO - trade_date: 2013-07-18 00:00:00 training finished\n",
      "2017-11-08 10:57:52,721 - ALPHA_MIND - INFO - trade_date: 2013-08-01 00:00:00 training finished\n",
      "2017-11-08 10:57:52,727 - ALPHA_MIND - INFO - trade_date: 2013-08-15 00:00:00 training finished\n",
      "2017-11-08 10:57:52,732 - ALPHA_MIND - INFO - trade_date: 2013-08-29 00:00:00 training finished\n",
      "2017-11-08 10:57:52,739 - ALPHA_MIND - INFO - trade_date: 2013-09-12 00:00:00 training finished\n",
      "2017-11-08 10:57:52,746 - ALPHA_MIND - INFO - trade_date: 2013-09-26 00:00:00 training finished\n",
      "2017-11-08 10:57:52,752 - ALPHA_MIND - INFO - trade_date: 2013-10-10 00:00:00 training finished\n",
      "2017-11-08 10:57:52,760 - ALPHA_MIND - INFO - trade_date: 2013-10-24 00:00:00 training finished\n",
      "2017-11-08 10:57:52,767 - ALPHA_MIND - INFO - trade_date: 2013-11-07 00:00:00 training finished\n",
      "2017-11-08 10:57:52,774 - ALPHA_MIND - INFO - trade_date: 2013-11-21 00:00:00 training finished\n",
      "2017-11-08 10:57:52,780 - ALPHA_MIND - INFO - trade_date: 2013-12-05 00:00:00 training finished\n",
      "2017-11-08 10:57:52,787 - ALPHA_MIND - INFO - trade_date: 2013-12-19 00:00:00 training finished\n",
      "2017-11-08 10:57:52,793 - ALPHA_MIND - INFO - trade_date: 2014-01-02 00:00:00 training finished\n",
      "2017-11-08 10:57:52,799 - ALPHA_MIND - INFO - trade_date: 2014-01-16 00:00:00 training finished\n",
      "2017-11-08 10:57:52,805 - ALPHA_MIND - INFO - trade_date: 2014-01-30 00:00:00 training finished\n",
      "2017-11-08 10:57:52,811 - ALPHA_MIND - INFO - trade_date: 2014-02-13 00:00:00 training finished\n",
      "2017-11-08 10:57:52,816 - ALPHA_MIND - INFO - trade_date: 2014-02-27 00:00:00 training finished\n",
      "2017-11-08 10:57:52,823 - ALPHA_MIND - INFO - trade_date: 2014-03-13 00:00:00 training finished\n",
      "2017-11-08 10:57:52,829 - ALPHA_MIND - INFO - trade_date: 2014-03-27 00:00:00 training finished\n",
      "2017-11-08 10:57:52,836 - ALPHA_MIND - INFO - trade_date: 2014-04-10 00:00:00 training finished\n",
      "2017-11-08 10:57:52,844 - ALPHA_MIND - INFO - trade_date: 2014-04-24 00:00:00 training finished\n",
      "2017-11-08 10:57:52,852 - ALPHA_MIND - INFO - trade_date: 2014-05-08 00:00:00 training finished\n",
      "2017-11-08 10:57:52,859 - ALPHA_MIND - INFO - trade_date: 2014-05-22 00:00:00 training finished\n",
      "2017-11-08 10:57:52,866 - ALPHA_MIND - INFO - trade_date: 2014-06-05 00:00:00 training finished\n",
      "2017-11-08 10:57:52,872 - ALPHA_MIND - INFO - trade_date: 2014-06-19 00:00:00 training finished\n",
      "2017-11-08 10:57:52,880 - ALPHA_MIND - INFO - trade_date: 2014-07-03 00:00:00 training finished\n",
      "2017-11-08 10:57:52,886 - ALPHA_MIND - INFO - trade_date: 2014-07-17 00:00:00 training finished\n",
      "2017-11-08 10:57:52,892 - ALPHA_MIND - INFO - trade_date: 2014-07-31 00:00:00 training finished\n",
      "2017-11-08 10:57:52,901 - ALPHA_MIND - INFO - trade_date: 2014-08-14 00:00:00 training finished\n",
      "2017-11-08 10:57:52,909 - ALPHA_MIND - INFO - trade_date: 2014-08-28 00:00:00 training finished\n",
      "2017-11-08 10:57:52,915 - ALPHA_MIND - INFO - trade_date: 2014-09-11 00:00:00 training finished\n",
      "2017-11-08 10:57:52,922 - ALPHA_MIND - INFO - trade_date: 2014-09-25 00:00:00 training finished\n",
      "2017-11-08 10:57:52,929 - ALPHA_MIND - INFO - trade_date: 2014-10-09 00:00:00 training finished\n",
      "2017-11-08 10:57:52,934 - ALPHA_MIND - INFO - trade_date: 2014-10-23 00:00:00 training finished\n",
      "2017-11-08 10:57:52,944 - ALPHA_MIND - INFO - trade_date: 2014-11-06 00:00:00 training finished\n",
      "2017-11-08 10:57:52,948 - ALPHA_MIND - INFO - trade_date: 2014-11-20 00:00:00 training finished\n",
      "2017-11-08 10:57:52,956 - ALPHA_MIND - INFO - trade_date: 2014-12-04 00:00:00 training finished\n",
      "2017-11-08 10:57:52,963 - ALPHA_MIND - INFO - trade_date: 2014-12-18 00:00:00 training finished\n",
      "2017-11-08 10:57:52,968 - ALPHA_MIND - INFO - trade_date: 2015-01-05 00:00:00 training finished\n",
      "2017-11-08 10:57:52,973 - ALPHA_MIND - INFO - trade_date: 2015-01-15 00:00:00 training finished\n",
      "2017-11-08 10:57:52,979 - ALPHA_MIND - INFO - trade_date: 2015-01-29 00:00:00 training finished\n",
      "2017-11-08 10:57:52,984 - ALPHA_MIND - INFO - trade_date: 2015-02-12 00:00:00 training finished\n",
      "2017-11-08 10:57:52,990 - ALPHA_MIND - INFO - trade_date: 2015-02-26 00:00:00 training finished\n",
      "2017-11-08 10:57:52,995 - ALPHA_MIND - INFO - trade_date: 2015-03-12 00:00:00 training finished\n",
      "2017-11-08 10:57:53,002 - ALPHA_MIND - INFO - trade_date: 2015-03-26 00:00:00 training finished\n",
      "2017-11-08 10:57:53,011 - ALPHA_MIND - INFO - trade_date: 2015-04-09 00:00:00 training finished\n",
      "2017-11-08 10:57:53,017 - ALPHA_MIND - INFO - trade_date: 2015-04-23 00:00:00 training finished\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-08 10:57:53,025 - ALPHA_MIND - INFO - trade_date: 2015-05-07 00:00:00 training finished\n",
      "2017-11-08 10:57:53,030 - ALPHA_MIND - INFO - trade_date: 2015-05-21 00:00:00 training finished\n",
      "2017-11-08 10:57:53,042 - ALPHA_MIND - INFO - trade_date: 2015-06-04 00:00:00 training finished\n",
      "2017-11-08 10:57:53,048 - ALPHA_MIND - INFO - trade_date: 2015-06-18 00:00:00 training finished\n",
      "2017-11-08 10:57:53,057 - ALPHA_MIND - INFO - trade_date: 2015-07-02 00:00:00 training finished\n",
      "2017-11-08 10:57:53,063 - ALPHA_MIND - INFO - trade_date: 2015-07-16 00:00:00 training finished\n",
      "2017-11-08 10:57:53,069 - ALPHA_MIND - INFO - trade_date: 2015-07-30 00:00:00 training finished\n",
      "2017-11-08 10:57:53,075 - ALPHA_MIND - INFO - trade_date: 2015-08-13 00:00:00 training finished\n",
      "2017-11-08 10:57:53,080 - ALPHA_MIND - INFO - trade_date: 2015-08-27 00:00:00 training finished\n",
      "2017-11-08 10:57:53,088 - ALPHA_MIND - INFO - trade_date: 2015-09-10 00:00:00 training finished\n",
      "2017-11-08 10:57:53,094 - ALPHA_MIND - INFO - trade_date: 2015-09-24 00:00:00 training finished\n",
      "2017-11-08 10:57:53,100 - ALPHA_MIND - INFO - trade_date: 2015-10-08 00:00:00 training finished\n",
      "2017-11-08 10:57:53,107 - ALPHA_MIND - INFO - trade_date: 2015-10-22 00:00:00 training finished\n",
      "2017-11-08 10:57:53,113 - ALPHA_MIND - INFO - trade_date: 2015-11-05 00:00:00 training finished\n",
      "2017-11-08 10:57:53,120 - ALPHA_MIND - INFO - trade_date: 2015-11-19 00:00:00 training finished\n",
      "2017-11-08 10:57:53,126 - ALPHA_MIND - INFO - trade_date: 2015-12-03 00:00:00 training finished\n",
      "2017-11-08 10:57:53,132 - ALPHA_MIND - INFO - trade_date: 2015-12-17 00:00:00 training finished\n",
      "2017-11-08 10:57:53,140 - ALPHA_MIND - INFO - trade_date: 2015-12-31 00:00:00 training finished\n",
      "2017-11-08 10:57:53,147 - ALPHA_MIND - INFO - trade_date: 2016-01-14 00:00:00 training finished\n",
      "2017-11-08 10:57:53,154 - ALPHA_MIND - INFO - trade_date: 2016-01-28 00:00:00 training finished\n",
      "2017-11-08 10:57:53,160 - ALPHA_MIND - INFO - trade_date: 2016-02-15 00:00:00 training finished\n",
      "2017-11-08 10:57:53,167 - ALPHA_MIND - INFO - trade_date: 2016-02-25 00:00:00 training finished\n",
      "2017-11-08 10:57:53,175 - ALPHA_MIND - INFO - trade_date: 2016-03-10 00:00:00 training finished\n",
      "2017-11-08 10:57:53,180 - ALPHA_MIND - INFO - trade_date: 2016-03-24 00:00:00 training finished\n",
      "2017-11-08 10:57:53,185 - ALPHA_MIND - INFO - trade_date: 2016-04-07 00:00:00 training finished\n",
      "2017-11-08 10:57:53,195 - ALPHA_MIND - INFO - trade_date: 2016-04-21 00:00:00 training finished\n",
      "2017-11-08 10:57:53,202 - ALPHA_MIND - INFO - trade_date: 2016-05-05 00:00:00 training finished\n",
      "2017-11-08 10:57:53,210 - ALPHA_MIND - INFO - trade_date: 2016-05-19 00:00:00 training finished\n",
      "2017-11-08 10:57:53,216 - ALPHA_MIND - INFO - trade_date: 2016-06-02 00:00:00 training finished\n",
      "2017-11-08 10:57:53,224 - ALPHA_MIND - INFO - trade_date: 2016-06-16 00:00:00 training finished\n",
      "2017-11-08 10:57:53,229 - ALPHA_MIND - INFO - trade_date: 2016-06-30 00:00:00 training finished\n",
      "2017-11-08 10:57:53,235 - ALPHA_MIND - INFO - trade_date: 2016-07-14 00:00:00 training finished\n",
      "2017-11-08 10:57:53,242 - ALPHA_MIND - INFO - trade_date: 2016-07-28 00:00:00 training finished\n",
      "2017-11-08 10:57:53,247 - ALPHA_MIND - INFO - trade_date: 2016-08-11 00:00:00 training finished\n",
      "2017-11-08 10:57:53,253 - ALPHA_MIND - INFO - trade_date: 2016-08-25 00:00:00 training finished\n",
      "2017-11-08 10:57:53,260 - ALPHA_MIND - INFO - trade_date: 2016-09-08 00:00:00 training finished\n",
      "2017-11-08 10:57:53,265 - ALPHA_MIND - INFO - trade_date: 2016-09-22 00:00:00 training finished\n",
      "2017-11-08 10:57:53,273 - ALPHA_MIND - INFO - trade_date: 2016-10-10 00:00:00 training finished\n",
      "2017-11-08 10:57:53,279 - ALPHA_MIND - INFO - trade_date: 2016-10-20 00:00:00 training finished\n",
      "2017-11-08 10:57:53,285 - ALPHA_MIND - INFO - trade_date: 2016-11-03 00:00:00 training finished\n",
      "2017-11-08 10:57:53,292 - ALPHA_MIND - INFO - trade_date: 2016-11-17 00:00:00 training finished\n",
      "2017-11-08 10:57:53,297 - ALPHA_MIND - INFO - trade_date: 2016-12-01 00:00:00 training finished\n",
      "2017-11-08 10:57:53,305 - ALPHA_MIND - INFO - trade_date: 2016-12-15 00:00:00 training finished\n",
      "2017-11-08 10:57:53,311 - ALPHA_MIND - INFO - trade_date: 2016-12-29 00:00:00 training finished\n",
      "2017-11-08 10:57:53,316 - ALPHA_MIND - INFO - trade_date: 2017-01-12 00:00:00 training finished\n",
      "2017-11-08 10:57:53,324 - ALPHA_MIND - INFO - trade_date: 2017-01-26 00:00:00 training finished\n",
      "2017-11-08 10:57:53,330 - ALPHA_MIND - INFO - trade_date: 2017-02-09 00:00:00 training finished\n",
      "2017-11-08 10:57:53,337 - ALPHA_MIND - INFO - trade_date: 2017-02-23 00:00:00 training finished\n",
      "2017-11-08 10:57:53,343 - ALPHA_MIND - INFO - trade_date: 2017-03-09 00:00:00 training finished\n",
      "2017-11-08 10:57:53,349 - ALPHA_MIND - INFO - trade_date: 2017-03-23 00:00:00 training finished\n",
      "2017-11-08 10:57:53,355 - ALPHA_MIND - INFO - trade_date: 2017-04-06 00:00:00 training finished\n",
      "2017-11-08 10:57:53,361 - ALPHA_MIND - INFO - trade_date: 2017-04-20 00:00:00 training finished\n",
      "2017-11-08 10:57:53,369 - ALPHA_MIND - INFO - trade_date: 2017-05-04 00:00:00 training finished\n",
      "2017-11-08 10:57:53,376 - ALPHA_MIND - INFO - trade_date: 2017-05-18 00:00:00 training finished\n",
      "2017-11-08 10:57:53,382 - ALPHA_MIND - INFO - trade_date: 2017-06-01 00:00:00 training finished\n",
      "2017-11-08 10:57:53,390 - ALPHA_MIND - INFO - trade_date: 2017-06-15 00:00:00 training finished\n",
      "2017-11-08 10:57:53,395 - ALPHA_MIND - INFO - trade_date: 2017-06-29 00:00:00 training finished\n",
      "2017-11-08 10:57:53,402 - ALPHA_MIND - INFO - trade_date: 2017-07-13 00:00:00 training finished\n",
      "2017-11-08 10:57:53,409 - ALPHA_MIND - INFO - trade_date: 2017-07-27 00:00:00 training finished\n",
      "2017-11-08 10:57:53,414 - ALPHA_MIND - INFO - trade_date: 2017-08-10 00:00:00 training finished\n",
      "2017-11-08 10:57:53,420 - ALPHA_MIND - INFO - trade_date: 2017-08-24 00:00:00 training finished\n",
      "2017-11-08 10:57:53,426 - ALPHA_MIND - INFO - trade_date: 2017-09-07 00:00:00 training finished\n",
      "2017-11-08 10:57:53,432 - ALPHA_MIND - INFO - trade_date: 2017-09-21 00:00:00 training finished\n",
      "2017-11-08 10:57:53,441 - ALPHA_MIND - INFO - trade_date: 2017-10-09 00:00:00 training finished\n",
      "2017-11-08 10:57:53,446 - ALPHA_MIND - INFO - trade_date: 2017-10-19 00:00:00 training finished\n",
      "2017-11-08 10:57:53,453 - ALPHA_MIND - INFO - trade_date: 2017-11-02 00:00:00 training finished\n"
     ]
    }
   ],
   "source": [
    "for ref_date in dates:\n",
    "    sample_train_x = train_x[ref_date]\n",
    "    sample_train_y = train_y[ref_date].flatten()\n",
    "    \n",
    "    model = LinearRegression(features, fit_intercept=False)\n",
    "    model.fit(sample_train_x, sample_train_y)\n",
    "    \n",
    "    accuray_table.loc[ref_date, 'train'] = mean_squared_error(model.predict(sample_train_x), sample_train_y)\n",
    "    model_df.loc[ref_date] = model\n",
    "    alpha_logger.info('trade_date: {0} training finished'.format(ref_date))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "portfolio_industry_neutralize = True\n",
    "\n",
    "settlement = data_package['settlement']\n",
    "industry_dummies = pd.get_dummies(settlement['industry'].values)\n",
    "risk_styles = settlement[portfolio_risk_neutralize].values\n",
    "final_res = np.zeros(len(dates))\n",
    "method = 'risk_neutral'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-08 10:57:53,728 - ALPHA_MIND - INFO - trade_date: 2012-02-02 00:00:00 predicting finished\n",
      "2017-11-08 10:57:53,857 - ALPHA_MIND - INFO - trade_date: 2012-02-16 00:00:00 predicting finished\n",
      "2017-11-08 10:57:53,986 - ALPHA_MIND - INFO - trade_date: 2012-03-01 00:00:00 predicting finished\n",
      "2017-11-08 10:57:54,102 - ALPHA_MIND - INFO - trade_date: 2012-03-15 00:00:00 predicting finished\n",
      "2017-11-08 10:57:54,226 - ALPHA_MIND - INFO - trade_date: 2012-03-29 00:00:00 predicting finished\n",
      "2017-11-08 10:57:54,353 - ALPHA_MIND - INFO - trade_date: 2012-04-12 00:00:00 predicting finished\n",
      "2017-11-08 10:57:54,477 - ALPHA_MIND - INFO - trade_date: 2012-04-26 00:00:00 predicting finished\n",
      "2017-11-08 10:57:54,593 - ALPHA_MIND - INFO - trade_date: 2012-05-10 00:00:00 predicting finished\n",
      "2017-11-08 10:57:54,723 - ALPHA_MIND - INFO - trade_date: 2012-05-24 00:00:00 predicting finished\n",
      "2017-11-08 10:57:54,849 - ALPHA_MIND - INFO - trade_date: 2012-06-07 00:00:00 predicting finished\n",
      "2017-11-08 10:57:54,974 - ALPHA_MIND - INFO - trade_date: 2012-06-21 00:00:00 predicting finished\n",
      "2017-11-08 10:57:55,095 - ALPHA_MIND - INFO - trade_date: 2012-07-05 00:00:00 predicting finished\n",
      "2017-11-08 10:57:55,214 - ALPHA_MIND - INFO - trade_date: 2012-07-19 00:00:00 predicting finished\n",
      "2017-11-08 10:57:55,334 - ALPHA_MIND - INFO - trade_date: 2012-08-02 00:00:00 predicting finished\n",
      "2017-11-08 10:57:55,458 - ALPHA_MIND - INFO - trade_date: 2012-08-16 00:00:00 predicting finished\n",
      "2017-11-08 10:57:55,594 - ALPHA_MIND - INFO - trade_date: 2012-08-30 00:00:00 predicting finished\n",
      "2017-11-08 10:57:55,761 - ALPHA_MIND - INFO - trade_date: 2012-09-13 00:00:00 predicting finished\n",
      "2017-11-08 10:57:55,886 - ALPHA_MIND - INFO - trade_date: 2012-09-27 00:00:00 predicting finished\n",
      "2017-11-08 10:57:56,013 - ALPHA_MIND - INFO - trade_date: 2012-10-11 00:00:00 predicting finished\n",
      "2017-11-08 10:57:56,160 - ALPHA_MIND - INFO - trade_date: 2012-10-25 00:00:00 predicting finished\n",
      "2017-11-08 10:57:56,291 - ALPHA_MIND - INFO - trade_date: 2012-11-08 00:00:00 predicting finished\n",
      "2017-11-08 10:57:56,422 - ALPHA_MIND - INFO - trade_date: 2012-11-22 00:00:00 predicting finished\n",
      "2017-11-08 10:57:56,560 - ALPHA_MIND - INFO - trade_date: 2012-12-06 00:00:00 predicting finished\n",
      "2017-11-08 10:57:56,687 - ALPHA_MIND - INFO - trade_date: 2012-12-20 00:00:00 predicting finished\n",
      "2017-11-08 10:57:56,808 - ALPHA_MIND - INFO - trade_date: 2013-01-04 00:00:00 predicting finished\n",
      "2017-11-08 10:57:56,935 - ALPHA_MIND - INFO - trade_date: 2013-01-17 00:00:00 predicting finished\n",
      "2017-11-08 10:57:57,087 - ALPHA_MIND - INFO - trade_date: 2013-01-31 00:00:00 predicting finished\n",
      "2017-11-08 10:57:57,206 - ALPHA_MIND - INFO - trade_date: 2013-02-18 00:00:00 predicting finished\n",
      "2017-11-08 10:57:57,328 - ALPHA_MIND - INFO - trade_date: 2013-02-28 00:00:00 predicting finished\n",
      "2017-11-08 10:57:57,445 - ALPHA_MIND - INFO - trade_date: 2013-03-14 00:00:00 predicting finished\n",
      "2017-11-08 10:57:57,565 - ALPHA_MIND - INFO - trade_date: 2013-03-28 00:00:00 predicting finished\n",
      "2017-11-08 10:57:57,683 - ALPHA_MIND - INFO - trade_date: 2013-04-11 00:00:00 predicting finished\n",
      "2017-11-08 10:57:57,801 - ALPHA_MIND - INFO - trade_date: 2013-04-25 00:00:00 predicting finished\n",
      "2017-11-08 10:57:57,917 - ALPHA_MIND - INFO - trade_date: 2013-05-09 00:00:00 predicting finished\n",
      "2017-11-08 10:57:58,037 - ALPHA_MIND - INFO - trade_date: 2013-05-23 00:00:00 predicting finished\n",
      "2017-11-08 10:57:58,172 - ALPHA_MIND - INFO - trade_date: 2013-06-06 00:00:00 predicting finished\n",
      "2017-11-08 10:57:58,302 - ALPHA_MIND - INFO - trade_date: 2013-06-20 00:00:00 predicting finished\n",
      "2017-11-08 10:57:58,415 - ALPHA_MIND - INFO - trade_date: 2013-07-04 00:00:00 predicting finished\n",
      "2017-11-08 10:57:58,529 - ALPHA_MIND - INFO - trade_date: 2013-07-18 00:00:00 predicting finished\n",
      "2017-11-08 10:57:58,643 - ALPHA_MIND - INFO - trade_date: 2013-08-01 00:00:00 predicting finished\n",
      "2017-11-08 10:57:58,758 - ALPHA_MIND - INFO - trade_date: 2013-08-15 00:00:00 predicting finished\n",
      "2017-11-08 10:57:58,895 - ALPHA_MIND - INFO - trade_date: 2013-08-29 00:00:00 predicting finished\n",
      "2017-11-08 10:57:59,031 - ALPHA_MIND - INFO - trade_date: 2013-09-12 00:00:00 predicting finished\n",
      "2017-11-08 10:57:59,144 - ALPHA_MIND - INFO - trade_date: 2013-09-26 00:00:00 predicting finished\n",
      "2017-11-08 10:57:59,260 - ALPHA_MIND - INFO - trade_date: 2013-10-10 00:00:00 predicting finished\n",
      "2017-11-08 10:57:59,372 - ALPHA_MIND - INFO - trade_date: 2013-10-24 00:00:00 predicting finished\n",
      "2017-11-08 10:57:59,485 - ALPHA_MIND - INFO - trade_date: 2013-11-07 00:00:00 predicting finished\n",
      "2017-11-08 10:57:59,610 - ALPHA_MIND - INFO - trade_date: 2013-11-21 00:00:00 predicting finished\n",
      "2017-11-08 10:57:59,753 - ALPHA_MIND - INFO - trade_date: 2013-12-05 00:00:00 predicting finished\n",
      "2017-11-08 10:57:59,877 - ALPHA_MIND - INFO - trade_date: 2013-12-19 00:00:00 predicting finished\n",
      "2017-11-08 10:58:00,000 - ALPHA_MIND - INFO - trade_date: 2014-01-02 00:00:00 predicting finished\n",
      "2017-11-08 10:58:00,120 - ALPHA_MIND - INFO - trade_date: 2014-01-16 00:00:00 predicting finished\n",
      "2017-11-08 10:58:00,232 - ALPHA_MIND - INFO - trade_date: 2014-01-30 00:00:00 predicting finished\n",
      "2017-11-08 10:58:00,349 - ALPHA_MIND - INFO - trade_date: 2014-02-13 00:00:00 predicting finished\n",
      "2017-11-08 10:58:00,459 - ALPHA_MIND - INFO - trade_date: 2014-02-27 00:00:00 predicting finished\n",
      "2017-11-08 10:58:00,575 - ALPHA_MIND - INFO - trade_date: 2014-03-13 00:00:00 predicting finished\n",
      "2017-11-08 10:58:00,689 - ALPHA_MIND - INFO - trade_date: 2014-03-27 00:00:00 predicting finished\n",
      "2017-11-08 10:58:00,816 - ALPHA_MIND - INFO - trade_date: 2014-04-10 00:00:00 predicting finished\n",
      "2017-11-08 10:58:00,961 - ALPHA_MIND - INFO - trade_date: 2014-04-24 00:00:00 predicting finished\n",
      "2017-11-08 10:58:01,093 - ALPHA_MIND - INFO - trade_date: 2014-05-08 00:00:00 predicting finished\n",
      "2017-11-08 10:58:01,213 - ALPHA_MIND - INFO - trade_date: 2014-05-22 00:00:00 predicting finished\n",
      "2017-11-08 10:58:01,328 - ALPHA_MIND - INFO - trade_date: 2014-06-05 00:00:00 predicting finished\n",
      "2017-11-08 10:58:01,446 - ALPHA_MIND - INFO - trade_date: 2014-06-19 00:00:00 predicting finished\n",
      "2017-11-08 10:58:01,561 - ALPHA_MIND - INFO - trade_date: 2014-07-03 00:00:00 predicting finished\n",
      "2017-11-08 10:58:01,678 - ALPHA_MIND - INFO - trade_date: 2014-07-17 00:00:00 predicting finished\n",
      "2017-11-08 10:58:01,794 - ALPHA_MIND - INFO - trade_date: 2014-07-31 00:00:00 predicting finished\n",
      "2017-11-08 10:58:01,929 - ALPHA_MIND - INFO - trade_date: 2014-08-14 00:00:00 predicting finished\n",
      "2017-11-08 10:58:02,082 - ALPHA_MIND - INFO - trade_date: 2014-08-28 00:00:00 predicting finished\n",
      "2017-11-08 10:58:02,210 - ALPHA_MIND - INFO - trade_date: 2014-09-11 00:00:00 predicting finished\n",
      "2017-11-08 10:58:02,327 - ALPHA_MIND - INFO - trade_date: 2014-09-25 00:00:00 predicting finished\n",
      "2017-11-08 10:58:02,451 - ALPHA_MIND - INFO - trade_date: 2014-10-09 00:00:00 predicting finished\n",
      "2017-11-08 10:58:02,568 - ALPHA_MIND - INFO - trade_date: 2014-10-23 00:00:00 predicting finished\n",
      "2017-11-08 10:58:02,681 - ALPHA_MIND - INFO - trade_date: 2014-11-06 00:00:00 predicting finished\n",
      "2017-11-08 10:58:02,797 - ALPHA_MIND - INFO - trade_date: 2014-11-20 00:00:00 predicting finished\n",
      "2017-11-08 10:58:02,905 - ALPHA_MIND - INFO - trade_date: 2014-12-04 00:00:00 predicting finished\n",
      "2017-11-08 10:58:03,016 - ALPHA_MIND - INFO - trade_date: 2014-12-18 00:00:00 predicting finished\n",
      "2017-11-08 10:58:03,135 - ALPHA_MIND - INFO - trade_date: 2015-01-05 00:00:00 predicting finished\n",
      "2017-11-08 10:58:03,250 - ALPHA_MIND - INFO - trade_date: 2015-01-15 00:00:00 predicting finished\n",
      "2017-11-08 10:58:03,367 - ALPHA_MIND - INFO - trade_date: 2015-01-29 00:00:00 predicting finished\n",
      "2017-11-08 10:58:03,481 - ALPHA_MIND - INFO - trade_date: 2015-02-12 00:00:00 predicting finished\n",
      "2017-11-08 10:58:03,597 - ALPHA_MIND - INFO - trade_date: 2015-02-26 00:00:00 predicting finished\n",
      "2017-11-08 10:58:03,714 - ALPHA_MIND - INFO - trade_date: 2015-03-12 00:00:00 predicting finished\n",
      "2017-11-08 10:58:03,834 - ALPHA_MIND - INFO - trade_date: 2015-03-26 00:00:00 predicting finished\n",
      "2017-11-08 10:58:03,957 - ALPHA_MIND - INFO - trade_date: 2015-04-09 00:00:00 predicting finished\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2017-11-08 10:58:04,070 - ALPHA_MIND - INFO - trade_date: 2015-04-23 00:00:00 predicting finished\n",
      "2017-11-08 10:58:04,193 - ALPHA_MIND - INFO - trade_date: 2015-05-07 00:00:00 predicting finished\n",
      "2017-11-08 10:58:04,303 - ALPHA_MIND - INFO - trade_date: 2015-05-21 00:00:00 predicting finished\n",
      "2017-11-08 10:58:04,422 - ALPHA_MIND - INFO - trade_date: 2015-06-04 00:00:00 predicting finished\n",
      "2017-11-08 10:58:04,535 - ALPHA_MIND - INFO - trade_date: 2015-06-18 00:00:00 predicting finished\n",
      "2017-11-08 10:58:04,646 - ALPHA_MIND - INFO - trade_date: 2015-07-02 00:00:00 predicting finished\n",
      "2017-11-08 10:58:04,765 - ALPHA_MIND - INFO - trade_date: 2015-07-16 00:00:00 predicting finished\n",
      "2017-11-08 10:58:04,886 - ALPHA_MIND - INFO - trade_date: 2015-07-30 00:00:00 predicting finished\n",
      "2017-11-08 10:58:05,005 - ALPHA_MIND - INFO - trade_date: 2015-08-13 00:00:00 predicting finished\n",
      "2017-11-08 10:58:05,121 - ALPHA_MIND - INFO - trade_date: 2015-08-27 00:00:00 predicting finished\n",
      "2017-11-08 10:58:05,236 - ALPHA_MIND - INFO - trade_date: 2015-09-10 00:00:00 predicting finished\n",
      "2017-11-08 10:58:05,351 - ALPHA_MIND - INFO - trade_date: 2015-09-24 00:00:00 predicting finished\n",
      "2017-11-08 10:58:05,455 - ALPHA_MIND - INFO - trade_date: 2015-10-08 00:00:00 predicting finished\n",
      "2017-11-08 10:58:05,570 - ALPHA_MIND - INFO - trade_date: 2015-10-22 00:00:00 predicting finished\n",
      "2017-11-08 10:58:05,686 - ALPHA_MIND - INFO - trade_date: 2015-11-05 00:00:00 predicting finished\n",
      "2017-11-08 10:58:05,804 - ALPHA_MIND - INFO - trade_date: 2015-11-19 00:00:00 predicting finished\n",
      "2017-11-08 10:58:05,924 - ALPHA_MIND - INFO - trade_date: 2015-12-03 00:00:00 predicting finished\n",
      "2017-11-08 10:58:06,042 - ALPHA_MIND - INFO - trade_date: 2015-12-17 00:00:00 predicting finished\n",
      "2017-11-08 10:58:06,159 - ALPHA_MIND - INFO - trade_date: 2015-12-31 00:00:00 predicting finished\n",
      "2017-11-08 10:58:06,273 - ALPHA_MIND - INFO - trade_date: 2016-01-14 00:00:00 predicting finished\n",
      "2017-11-08 10:58:06,388 - ALPHA_MIND - INFO - trade_date: 2016-01-28 00:00:00 predicting finished\n",
      "2017-11-08 10:58:06,511 - ALPHA_MIND - INFO - trade_date: 2016-02-15 00:00:00 predicting finished\n",
      "2017-11-08 10:58:06,622 - ALPHA_MIND - INFO - trade_date: 2016-02-25 00:00:00 predicting finished\n",
      "2017-11-08 10:58:06,737 - ALPHA_MIND - INFO - trade_date: 2016-03-10 00:00:00 predicting finished\n",
      "2017-11-08 10:58:06,857 - ALPHA_MIND - INFO - trade_date: 2016-03-24 00:00:00 predicting finished\n",
      "2017-11-08 10:58:06,981 - ALPHA_MIND - INFO - trade_date: 2016-04-07 00:00:00 predicting finished\n",
      "2017-11-08 10:58:07,090 - ALPHA_MIND - INFO - trade_date: 2016-04-21 00:00:00 predicting finished\n",
      "2017-11-08 10:58:07,203 - ALPHA_MIND - INFO - trade_date: 2016-05-05 00:00:00 predicting finished\n",
      "2017-11-08 10:58:07,319 - ALPHA_MIND - INFO - trade_date: 2016-05-19 00:00:00 predicting finished\n",
      "2017-11-08 10:58:07,441 - ALPHA_MIND - INFO - trade_date: 2016-06-02 00:00:00 predicting finished\n",
      "2017-11-08 10:58:07,559 - ALPHA_MIND - INFO - trade_date: 2016-06-16 00:00:00 predicting finished\n",
      "2017-11-08 10:58:07,675 - ALPHA_MIND - INFO - trade_date: 2016-06-30 00:00:00 predicting finished\n",
      "2017-11-08 10:58:07,790 - ALPHA_MIND - INFO - trade_date: 2016-07-14 00:00:00 predicting finished\n",
      "2017-11-08 10:58:07,911 - ALPHA_MIND - INFO - trade_date: 2016-07-28 00:00:00 predicting finished\n",
      "2017-11-08 10:58:08,029 - ALPHA_MIND - INFO - trade_date: 2016-08-11 00:00:00 predicting finished\n",
      "2017-11-08 10:58:08,144 - ALPHA_MIND - INFO - trade_date: 2016-08-25 00:00:00 predicting finished\n",
      "2017-11-08 10:58:08,261 - ALPHA_MIND - INFO - trade_date: 2016-09-08 00:00:00 predicting finished\n",
      "2017-11-08 10:58:08,378 - ALPHA_MIND - INFO - trade_date: 2016-09-22 00:00:00 predicting finished\n",
      "2017-11-08 10:58:08,491 - ALPHA_MIND - INFO - trade_date: 2016-10-10 00:00:00 predicting finished\n",
      "2017-11-08 10:58:08,610 - ALPHA_MIND - INFO - trade_date: 2016-10-20 00:00:00 predicting finished\n",
      "2017-11-08 10:58:08,722 - ALPHA_MIND - INFO - trade_date: 2016-11-03 00:00:00 predicting finished\n",
      "2017-11-08 10:58:08,834 - ALPHA_MIND - INFO - trade_date: 2016-11-17 00:00:00 predicting finished\n",
      "2017-11-08 10:58:08,954 - ALPHA_MIND - INFO - trade_date: 2016-12-01 00:00:00 predicting finished\n",
      "2017-11-08 10:58:09,067 - ALPHA_MIND - INFO - trade_date: 2016-12-15 00:00:00 predicting finished\n",
      "2017-11-08 10:58:09,185 - ALPHA_MIND - INFO - trade_date: 2016-12-29 00:00:00 predicting finished\n",
      "2017-11-08 10:58:09,294 - ALPHA_MIND - INFO - trade_date: 2017-01-12 00:00:00 predicting finished\n",
      "2017-11-08 10:58:09,411 - ALPHA_MIND - INFO - trade_date: 2017-01-26 00:00:00 predicting finished\n",
      "2017-11-08 10:58:09,522 - ALPHA_MIND - INFO - trade_date: 2017-02-09 00:00:00 predicting finished\n",
      "2017-11-08 10:58:09,636 - ALPHA_MIND - INFO - trade_date: 2017-02-23 00:00:00 predicting finished\n",
      "2017-11-08 10:58:09,748 - ALPHA_MIND - INFO - trade_date: 2017-03-09 00:00:00 predicting finished\n",
      "2017-11-08 10:58:09,864 - ALPHA_MIND - INFO - trade_date: 2017-03-23 00:00:00 predicting finished\n",
      "2017-11-08 10:58:09,981 - ALPHA_MIND - INFO - trade_date: 2017-04-06 00:00:00 predicting finished\n",
      "2017-11-08 10:58:10,098 - ALPHA_MIND - INFO - trade_date: 2017-04-20 00:00:00 predicting finished\n",
      "2017-11-08 10:58:10,211 - ALPHA_MIND - INFO - trade_date: 2017-05-04 00:00:00 predicting finished\n",
      "2017-11-08 10:58:10,325 - ALPHA_MIND - INFO - trade_date: 2017-05-18 00:00:00 predicting finished\n",
      "2017-11-08 10:58:10,444 - ALPHA_MIND - INFO - trade_date: 2017-06-01 00:00:00 predicting finished\n",
      "2017-11-08 10:58:10,561 - ALPHA_MIND - INFO - trade_date: 2017-06-15 00:00:00 predicting finished\n",
      "2017-11-08 10:58:10,676 - ALPHA_MIND - INFO - trade_date: 2017-06-29 00:00:00 predicting finished\n",
      "2017-11-08 10:58:10,786 - ALPHA_MIND - INFO - trade_date: 2017-07-13 00:00:00 predicting finished\n",
      "2017-11-08 10:58:10,899 - ALPHA_MIND - INFO - trade_date: 2017-07-27 00:00:00 predicting finished\n",
      "2017-11-08 10:58:11,015 - ALPHA_MIND - INFO - trade_date: 2017-08-10 00:00:00 predicting finished\n",
      "2017-11-08 10:58:11,132 - ALPHA_MIND - INFO - trade_date: 2017-08-24 00:00:00 predicting finished\n",
      "2017-11-08 10:58:11,245 - ALPHA_MIND - INFO - trade_date: 2017-09-07 00:00:00 predicting finished\n",
      "2017-11-08 10:58:11,356 - ALPHA_MIND - INFO - trade_date: 2017-09-21 00:00:00 predicting finished\n",
      "2017-11-08 10:58:11,477 - ALPHA_MIND - INFO - trade_date: 2017-10-09 00:00:00 predicting finished\n",
      "2017-11-08 10:58:11,587 - ALPHA_MIND - INFO - trade_date: 2017-10-19 00:00:00 predicting finished\n",
      "2017-11-08 10:58:11,705 - ALPHA_MIND - INFO - trade_date: 2017-11-02 00:00:00 predicting finished\n"
     ]
    }
   ],
   "source": [
    "for i, ref_date in enumerate(dates):\n",
    "    model = model_df[ref_date]\n",
    "    sample_test_x = predict_x[ref_date]\n",
    "    sample_test_y = predict_y[ref_date].flatten()\n",
    "    \n",
    "    cons = Constraints()\n",
    "    index = settlement.trade_date == ref_date\n",
    "    benchmark_w = settlement[index]['weight'].values\n",
    "    realized_r = settlement[index]['dx'].values\n",
    "    industry_names = settlement[index]['industry'].values\n",
    "    is_tradable = settlement[index]['isOpen'].values\n",
    "\n",
    "    cons.add_exposure(['total'], np.ones((len(is_tradable), 1)))\n",
    "    cons.set_constraints('total', benchmark_w.sum(), benchmark_w.sum())\n",
    "\n",
    "    if portfolio_industry_neutralize:\n",
    "        ind_exp = industry_dummies[index]\n",
    "\n",
    "        risk_tags = ind_exp.columns\n",
    "        cons.add_exposure(risk_tags, ind_exp.values)\n",
    "        benchmark_exp = benchmark_w @ ind_exp.values\n",
    "\n",
    "        for k, name in enumerate(risk_tags):\n",
    "            cons.set_constraints(name, benchmark_exp[k]*industry_lower, benchmark_exp[k]*industry_upper)\n",
    "\n",
    "    if portfolio_risk_neutralize:\n",
    "        risk_exp = risk_styles[index]\n",
    "\n",
    "        risk_tags = np.array(portfolio_risk_neutralize)\n",
    "        cons.add_exposure(risk_tags, risk_exp)\n",
    "\n",
    "        benchmark_exp = benchmark_w @ risk_exp\n",
    "        for k, name in enumerate(risk_tags):\n",
    "            cons.set_constraints(name, benchmark_exp[k], benchmark_exp[k])\n",
    "\n",
    "    y = model.predict(sample_test_x)\n",
    "    accuray_table.loc[ref_date, 'predict'] = mean_squared_error(y, sample_test_y)\n",
    "\n",
    "    is_tradable[:] = True\n",
    "    weights, analysis = er_portfolio_analysis(y,\n",
    "                                              industry_names,\n",
    "                                              realized_r,\n",
    "                                              constraints=cons,\n",
    "                                              detail_analysis=True,\n",
    "                                              benchmark=benchmark_w,\n",
    "                                              is_tradable=is_tradable,\n",
    "                                              method=method)\n",
    "    \n",
    "    final_res[i] = analysis['er']['total'] / benchmark_w.sum()\n",
    "    alpha_logger.info('trade_date: {0} predicting finished'.format(ref_date))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x2c911d095c0>"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2c88c88b400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "last_date = advanceDateByCalendar('china.sse', dates[-1], frequency)\n",
    "\n",
    "df = pd.Series(final_res, index=dates[1:] + [last_date])\n",
    "df.sort_index(inplace=True)\n",
    "df['2012-01-01':].cumsum().plot(figsize=(12, 6))\n",
    "plt.title('Prod factors model {1} \\n ({0}, eps_q &  roe_q, {2} - {3})'.format(method, model.__class__.__name__, start_date, end_date))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x2c9033eac88>"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nwgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2c88948e390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuray_table.plot(figsize=(12, 6))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>train</th>\n",
       "      <th>predict</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.008274</td>\n",
       "      <td>0.008498</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>median</th>\n",
       "      <td>0.005118</td>\n",
       "      <td>0.004741</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.009380</td>\n",
       "      <td>0.018147</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           train   predict\n",
       "mean    0.008274  0.008498\n",
       "median  0.005118  0.004741\n",
       "std     0.009380  0.018147"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuray_table.aggregate([np.mean, np.median, np.std])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
