Skip to content

Instantly share code, notes, and snippets.

@va2577
Created January 28, 2019 09:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save va2577/3c31ac58789f76dcf7d50dac9855e65d to your computer and use it in GitHub Desktop.
Save va2577/3c31ac58789f76dcf7d50dac9855e65d to your computer and use it in GitHub Desktop.
ベイズ最適化(Python, BayesianOptimization)(バックテスト、パラメーター)
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Moving Average Crossover Trading Strategy (backtest 18) Bayesian Optimization"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import math\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>open</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>close</th>\n",
" </tr>\n",
" <tr>\n",
" <th>time</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2017-12-27</th>\n",
" <td>113.226</td>\n",
" <td>113.379</td>\n",
" <td>113.147</td>\n",
" <td>113.347</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-12-28</th>\n",
" <td>113.346</td>\n",
" <td>113.348</td>\n",
" <td>112.664</td>\n",
" <td>112.866</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017-12-29</th>\n",
" <td>112.866</td>\n",
" <td>112.969</td>\n",
" <td>112.472</td>\n",
" <td>112.658</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-01</th>\n",
" <td>112.658</td>\n",
" <td>112.658</td>\n",
" <td>112.658</td>\n",
" <td>112.658</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018-01-02</th>\n",
" <td>112.594</td>\n",
" <td>112.789</td>\n",
" <td>112.570</td>\n",
" <td>112.773</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" open high low close\n",
"time \n",
"2017-12-27 113.226 113.379 113.147 113.347\n",
"2017-12-28 113.346 113.348 112.664 112.866\n",
"2017-12-29 112.866 112.969 112.472 112.658\n",
"2018-01-01 112.658 112.658 112.658 112.658\n",
"2018-01-02 112.594 112.789 112.570 112.773"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def read(filepath):\n",
" names = ['time', 'open', 'high', 'low', 'close']\n",
" dtype = { 'time': str, 'open': float, 'high': float, 'low': float, 'close': float }\n",
" df = pd.read_csv(filepath, header=0, names=names, index_col='time', usecols=names, dtype=dtype, parse_dates=['time'])\n",
" return df\n",
"\n",
"df = read('~/Documents/1/data/D/USDJPY.csv')\n",
"df.head()\n",
"df.tail()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 78.1 ms, sys: 0 ns, total: 78.1 ms\n",
"Wall time: 89 ms\n"
]
}
],
"source": [
"def test(df, periods1=5, periods2=20, pip=0.01, spread=0.3, unit=10000):\n",
" sp = pip * spread * unit\n",
" bs = pd.Series(np.full(df.index.size, np.nan), index=df.index)\n",
" pl = pd.Series(np.full(df.index.size, np.nan), index=df.index)\n",
" entry = ls = np.nan\n",
" ma1 = df['close'].rolling(periods1).mean()\n",
" ma2 = df['close'].rolling(periods2).mean()\n",
" df2 = pd.concat([df, ma1.shift(1), ma2.shift(1)], axis=1)\n",
" for row in df2.itertuples():\n",
" time, open_, high, low, close, ma1, ma2 = row\n",
" if np.isnan([ma1, ma2]).any():\n",
" continue\n",
" if ma2 < ma1:\n",
" if ls < 0:\n",
" # exit (short position)\n",
" pl[time] = (open_ - entry) * unit * ls - sp\n",
" if not 0 < ls:\n",
" # entry (long position)\n",
" bs[time] = ls = 1\n",
" entry = open_\n",
" if ma1 < ma2:\n",
" if 0 < ls:\n",
" # exit (long position)\n",
" pl[time] = (open_ - entry) * unit * ls - sp\n",
" if not ls < 0:\n",
" # entry (short position)\n",
" bs[time] = ls = -1\n",
" entry = open_\n",
" if not np.isnan(ls):\n",
" pl[time] = (close - entry) * unit * ls - sp\n",
" return bs, pl\n",
"\n",
"%time bs, pl = test(df)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"time\n",
"2017-10-17 -1.0\n",
"2017-10-23 1.0\n",
"2017-11-15 -1.0\n",
"2017-12-07 1.0\n",
"2018-01-02 -1.0\n",
"dtype: float64"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bs.dropna().head()\n",
"bs.dropna().tail()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"time\n",
"2017-10-17 19550.0\n",
"2017-10-23 -16750.0\n",
"2017-11-15 -4160.0\n",
"2017-12-07 11590.0\n",
"2018-01-02 -1820.0\n",
"dtype: float64"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pl.dropna().head()\n",
"pl.dropna().tail()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f971ad43a58>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"pl.dropna().cumsum().plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Optimization"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"def f(x, y):\n",
" x2 = int(x)\n",
" y2 = int(y)\n",
" if y2 <= x2:\n",
" return 0\n",
" bs, pl = test(df, periods1=x2, periods2=y2)\n",
" return pl.dropna().sum()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"from bayes_opt import BayesianOptimization\n",
"\n",
"# Bounded region of parameter space\n",
"pbounds = { 'x': (1, 200), 'y': (1, 200) }\n",
"\n",
"optimizer = BayesianOptimization(\n",
" f=f, # 最大化したい関数\n",
" pbounds=pbounds, # パラメーターの範囲\n",
" # random_state=None, # default\n",
" # verbose=2, # default\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"| iter | target | x | y |\n",
"-------------------------------------------------\n",
"| \u001b[0m 1 \u001b[0m | \u001b[0m-1.86e+05\u001b[0m | \u001b[0m 151.4 \u001b[0m | \u001b[0m 168.6 \u001b[0m |\n",
"| \u001b[95m 2 \u001b[0m | \u001b[95m 6.431e+0\u001b[0m | \u001b[95m 41.85 \u001b[0m | \u001b[95m 125.1 \u001b[0m |\n",
"| \u001b[0m 3 \u001b[0m | \u001b[0m 0.0 \u001b[0m | \u001b[0m 98.6 \u001b[0m | \u001b[0m 54.17 \u001b[0m |\n",
"| \u001b[0m 4 \u001b[0m | \u001b[0m 0.0 \u001b[0m | \u001b[0m 165.9 \u001b[0m | \u001b[0m 38.08 \u001b[0m |\n",
"| \u001b[0m 5 \u001b[0m | \u001b[0m 5.541e+0\u001b[0m | \u001b[0m 5.764 \u001b[0m | \u001b[0m 133.4 \u001b[0m |\n",
"| \u001b[0m 6 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.85 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 7 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 8 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 9 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 10 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 11 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 12 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 13 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 14 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 15 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 16 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 17 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 18 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 19 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 20 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 21 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 22 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 23 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 24 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 25 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 26 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 27 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 28 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 29 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"| \u001b[0m 30 \u001b[0m | \u001b[0m 6.431e+0\u001b[0m | \u001b[0m 41.84 \u001b[0m | \u001b[0m 125.1 \u001b[0m |\n",
"=================================================\n",
"CPU times: user 1min 10s, sys: 30.6 s, total: 1min 41s\n",
"Wall time: 1min 10s\n"
]
}
],
"source": [
"%%time\n",
"optimizer.maximize(\n",
" init_points=5, # 初期観測点の数\n",
" n_iter=25, # 何点評価するか\n",
" # acq='ucb', # default\n",
" # kappa=2.576, # default\n",
" # xi=0.0, # default\n",
" # **gp_params,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'target': 643099.9999999998,\n",
" 'params': {'x': 41.845420068232286, 'y': 125.07039719675709}}"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"optimizer.max"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f970f1ef358>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"test(df, periods1=int(optimizer.max['params']['x']), periods2=int(optimizer.max['params']['y']))[1].dropna().cumsum().plot()"
]
}
],
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment