In [1]:
from __future__ import print_function
from __future__ import division

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.set_context(rc={'figure.figsize': (14, 7) } )
figzize_me = figsize =(14, 7)
# import warnings; warnings.filterwarnings('ignore')


import os
import sys
# 使用insert 0即只使用github,避免交叉使用了pip安装的abupy,导致的版本不一致问题
sys.path.insert(0, os.path.abspath('../'))
import abupy
# 本章不使用沙盒数据
abupy.env.disable_example_env_ipython()


disable example env

附录A 量化环境部署

  • 本节建议对照阅读abu量化文档: 第19节 数据源

abu量化系统github地址 (您的star是我的动力!)

abu量化文档教程ipython notebook

A.2.1 数据模式的切换


In [2]:
from abupy import ABuSymbolPd
# 表A-1所示
ABuSymbolPd.make_kl_df('601398').tail()


Out[2]:
close high low p_change open pre_close volume date date_week key atr21 atr14
2017-04-17 4.83 4.83 4.75 0.42 4.79 4.81 112989883 20170417 0 483 0.062314 0.065713
2017-04-18 4.79 4.81 4.77 -0.83 4.80 4.83 61091798 20170418 1 484 0.061251 0.063876
2017-04-19 4.74 4.79 4.73 -1.04 4.77 4.79 89715577 20170419 2 485 0.063096 0.066456
2017-04-20 4.73 4.77 4.72 -0.21 4.73 4.74 64197339 20170420 3 486 0.063425 0.066710
2017-04-21 4.81 4.83 4.72 1.69 4.73 4.73 125002644 20170421 4 487 0.065643 0.069802

In [5]:
from abupy import EMarketDataFetchMode, abu

# 强制使用本地缓存数据
abupy.env.g_data_fetch_mode = \
    EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL

from abupy import AbuFactorBuyBreak
from abupy import AbuFactorAtrNStop
from abupy import AbuFactorPreAtrNStop
from abupy import AbuFactorCloseAtrNStop

# 设置初始资金数
read_cash = 1000000
# 设置选股因子,None为不使用选股因子
stock_pickers = None
# 买入因子依然延用向上突破因子
buy_factors = [{'xd': 60, 'class': AbuFactorBuyBreak},
               {'xd': 42, 'class': AbuFactorBuyBreak}]
# 卖出因子继续使用上一章使用的因子
sell_factors = [
    {'stop_loss_n': 1.0, 'stop_win_n': 3.0,
     'class': AbuFactorAtrNStop},
    {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.5},
    {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
]

In [7]:
# 择时股票池
choice_symbols = ['usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usTSLA', 'usWUBA', 'usVIPS']
# 使用run_loop_back运行策略
abupy.env.enable_example_env_ipython()
abu_result_tuple, _ = abu.run_loop_back(read_cash, 
                  buy_factors, sell_factors, stock_pickers, choice_symbols=choice_symbols, n_folds=2)
abupy.env.disable_example_env_ipython()


disable example env

In [8]:
from abupy import AbuMetricsBase
metrics = AbuMetricsBase(*abu_result_tuple)
metrics.fit_metrics()
metrics.plot_returns_cmp()


买入后卖出的交易数量:67
胜率:55.2239%
平均获利期望:14.1076%
平均亏损期望:-7.7029%
盈亏比:2.3543
策略收益: 50.4448%
基准收益: 15.0841%
策略年化收益: 25.2224%
基准年化收益: 7.5420%
策略买入成交比例:80.0000%
策略资金利用率比例:27.2194%
策略共执行504个交易日
/Users/Bailey/anaconda3/lib/python3.6/site-packages/statsmodels/nonparametric/kdetools.py:20: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  y = X[:m/2+1] + np.r_[0,X[m/2+1:],0]*1j

In [9]:
from abupy import EMarketSourceType
abupy.env.g_market_source = EMarketSourceType.E_MARKET_SOURCE_tx

In [10]:
# 强制走网络数据源
abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_NET
# 择时股票池
choice_symbols = ['601398', '600028', '601857', '601318', '600036', '000002', '600050', '600030']
# 使用run_loop_back运行策略
abu_result_tuple, _ = abu.run_loop_back(read_cash, 
                  buy_factors, sell_factors, stock_pickers, choice_symbols=choice_symbols, n_folds=2)


pid:22894 gen kl_pd complete:100%
pid:22936 pick times complete:100%
pid:22938 pick times complete:100%
pid:22937 pick times complete:100%
pid:22939 pick times complete:100%
pid:22940 pick times complete:100%
pid:22941 pick times complete:100%
pid:22943 pick times complete:100%
pid:22942 pick times complete:100%

In [11]:
from abupy import AbuMetricsBase
metrics = AbuMetricsBase(*abu_result_tuple)
metrics.fit_metrics()
metrics.plot_returns_cmp()


买入后卖出的交易数量:7
胜率:28.57%
平均获利期望:44.95%
平均亏损期望:-9.34%
盈亏比:3.8119
策略收益: 12.77%
基准收益: 17.83%
策略年化收益: 6.4%
基准年化收益: 8.93%
策略买入成交比例: 100.0%
策略资金利用率比例: 5.77%
策略共执行503个交易日

A.2.2 目标市场的切换

A.2.3 A股市场的回测示例

  • 相关内容请阅读abu量化文档:第8节 A股市场的回测, 第20节 A股全市场回测

A.2.4 港股市场的回测示例

  • 相关内容请阅读abu量化文档:第9节 港股市场的回测

In [ ]: