diff --git a/examples/cta_backtesting/backtesting.ipynb b/examples/cta_backtesting/backtesting.ipynb new file mode 100644 index 00000000..13273a23 --- /dev/null +++ b/examples/cta_backtesting/backtesting.ipynb @@ -0,0 +1,93 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#%%\n", + "from vnpy.app.cta_strategy.backtesting import BacktestingEngine, OptimizationSetting\n", + "from vnpy.app.cta_strategy.strategies.atr_rsi_strategy import (\n", + " AtrRsiStrategy,\n", + ")\n", + "from datetime import datetime" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#%%\n", + "engine = BacktestingEngine()\n", + "engine.set_parameters(\n", + " vt_symbol=\"IF88.CFFEX\",\n", + " interval=\"1m\",\n", + " start=datetime(2019, 1, 1),\n", + " end=datetime(2019, 4, 30),\n", + " rate=0.3/10000,\n", + " slippage=0.2,\n", + " size=300,\n", + " pricetick=0.2,\n", + " capital=1_000_000,\n", + ")\n", + "engine.add_strategy(AtrRsiStrategy, {})" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "#%%\n", + "engine.load_data()\n", + "engine.run_backtesting()\n", + "df = engine.calculate_result()\n", + "engine.calculate_statistics()\n", + "engine.show_chart()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "setting = OptimizationSetting()\n", + "setting.set_target(\"sharpe_ratio\")\n", + "setting.add_parameter(\"atr_length\", 3, 39, 1)\n", + "setting.add_parameter(\"atr_ma_length\", 10, 30, 1)\n", + "\n", + "engine.run_ga_optimization(setting)" + ] + } + ], + "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.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tests/backtesting/backtesting_portfolio.ipynb b/examples/cta_backtesting/portfolio.ipynb similarity index 100% rename from tests/backtesting/backtesting_portfolio.ipynb rename to examples/cta_backtesting/portfolio.ipynb diff --git a/tests/trader/run.py b/examples/vn_trader/run.py similarity index 100% rename from tests/trader/run.py rename to examples/vn_trader/run.py diff --git a/tests/backtesting/GA_Pre_Final.ipynb b/tests/backtesting/GA_Pre_Final.ipynb deleted file mode 100644 index de3b6d46..00000000 --- a/tests/backtesting/GA_Pre_Final.ipynb +++ /dev/null @@ -1,279 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import random\n", - "import multiprocessing\n", - "import numpy as np\n", - "from deap import creator, base, tools, algorithms\n", - "from vnpy.app.cta_strategy.backtesting import BacktestingEngine,OptimizationSetting\n", - "from vnpy.app.cta_strategy.strategies.boll_channel_strategy import BollChannelStrategy\n", - "from vnpy.app.cta_strategy.strategies.atr_rsi_strategy import AtrRsiStrategy\n", - "from datetime import datetime\n", - "import multiprocessing #多进程\n", - "from functools import lru_cache" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "setting = OptimizationSetting()\n", - "#setting.add_parameter('atr_length', 10, 50, 2)\n", - "#setting.add_parameter('atr_ma_length', 10, 50, 2)\n", - "#setting.add_parameter('rsi_length', 4, 50, 2)\n", - "#setting.add_parameter('rsi_entry', 4, 30, 1)\n", - "setting.add_parameter('boll_window', 4, 50, 2)\n", - "#setting.add_parameter('boll_dev', 4, 50, 2)\n", - "setting.add_parameter('cci_window', 4, 50, 2)\n", - "setting.add_parameter('atr_window', 4, 50, 2)\n", - "\n", - "\n", - "local_setting = setting.generate_setting()\n", - "total_sample = len(local_setting)\n", - "print(\"数据总体:\",total_sample)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "setting_names = random.choice(local_setting).keys()\n", - "setting_names" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def parameter_generate():\n", - " setting_param = list(random.choice(local_setting).values())\n", - " return setting_param" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "parameter_generate()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "setting=dict(zip(setting_names,parameter_generate()))\n", - "setting" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def object_func(strategy_avg):\n", - " \"\"\"\"\"\"\n", - " return run_backtesting(tuple(strategy_avg))\n", - " #return run_backtesting(strategy_avg)\n", - " \n", - "\n", - "@lru_cache(maxsize=1000000)\n", - "def run_backtesting(strategy_avg):\n", - " # 创建回测引擎对象\n", - " engine = BacktestingEngine()\n", - " engine.set_parameters(\n", - " vt_symbol=\"IF88.CFFEX\",\n", - " interval=\"1m\",\n", - " start=datetime(2016, 1, 1),\n", - " end=datetime(2019, 1,1),\n", - " rate=0.3/10000,\n", - " slippage=0.2,\n", - " size=300,\n", - " pricetick=0.2,\n", - " capital=1_000_000,\n", - " )\n", - " \n", - " setting=dict(zip(setting_names,strategy_avg))\n", - " \n", - "\n", - " #加载策略 \n", - " #engine.initStrategy(TurtleTradingStrategy, setting)\n", - " engine.add_strategy(BollChannelStrategy, setting)\n", - " engine.load_data()\n", - " engine.run_backtesting()\n", - " engine.calculate_result()\n", - " result = engine.calculate_statistics(output=False)\n", - "\n", - " return_drawdown_ratio = round(result['return_drawdown_ratio'],2) #收益回撤比\n", - " sharpe_ratio= round(result['sharpe_ratio'],2) #夏普比率\n", - " return return_drawdown_ratio , sharpe_ratio" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "object_func(parameter_generate())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "target_names = [\"return_drawdown_ratio\" , \"sharpe_ratio\"]\n", - "def show_result(hof):\n", - " for i in range(len(hof)):\n", - " solution = hof[i] \n", - " parameter=dict(zip(setting_names,solution))\n", - " result=dict(zip(target_names,list(object_func(solution))))\n", - " print({**parameter, **result})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from time import time\n", - "#设置优化方向:最大化收益回撤比,最大化夏普比率\n", - "creator.create(\"FitnessMax\", base.Fitness, weights=(1.0, 1.0)) # 1.0 求最大值;-1.0 求最小值\n", - "creator.create(\"Individual\", list, fitness=creator.FitnessMax)\n", - "\n", - "def optimize(population=None):\n", - " \"\"\"\"\"\" \n", - " start = time() \n", - " toolbox = base.Toolbox() \n", - "\n", - " # 初始化 \n", - " toolbox.register(\"individual\", tools.initIterate, creator.Individual,parameter_generate) \n", - " toolbox.register(\"population\", tools.initRepeat, list, toolbox.individual) \n", - " toolbox.register(\"mate\", tools.cxTwoPoint) \n", - " toolbox.register(\"mutate\", tools.mutUniformInt,low = 4,up = 40,indpb=1) \n", - " toolbox.register(\"evaluate\", object_func) \n", - " toolbox.register(\"select\", tools.selNSGA2) \n", - " pool = multiprocessing.Pool(multiprocessing.cpu_count())\n", - " toolbox.register(\"map\", pool.map)\n", - " #toolbox.register(\"map\", futures.map)\n", - " \n", - " \n", - " #遗传算法参数设置\n", - " MU = 80 #设置每一代选择的个体数\n", - " LAMBDA = 100 #设置每一代产生的子女数\n", - " POP=100\n", - " CXPB, MUTPB, NGEN = 0.95, 0.05,30 #分别为种群内部个体的交叉概率、变异概率、产生种群代数\n", - " \n", - " if population==None:\n", - " LAMBDA = POP = int(pow(total_sample, 1/2.7))\n", - " MU = int(0.8*POP) \n", - " \n", - " pop = toolbox.population(POP) #设置族群里面的个体数量\n", - " hof = tools.ParetoFront() #解的集合:帕累托前沿(非占优最优集)\n", - "\n", - " stats = tools.Statistics(lambda ind: ind.fitness.values)\n", - " np.set_printoptions(suppress=True) #对numpy默认输出的科学计数法转换\n", - " stats.register(\"mean\", np.mean, axis=0) #统计目标优化函数结果的平均值\n", - " stats.register(\"std\", np.std, axis=0) #统计目标优化函数结果的标准差\n", - " stats.register(\"min\", np.min, axis=0) #统计目标优化函数结果的最小值\n", - " stats.register(\"max\", np.max, axis=0) #统计目标优化函数结果的最大值\n", - " print(\"开始运行遗传算法,每代族群总数:%s, 优良品种筛选个数:%s,迭代次数:%s,交叉概率:%s,突变概率:%s\" %(POP,MU,NGEN,CXPB,MUTPB))\n", - " \n", - "\n", - " #运行算法\n", - " algorithms.eaMuPlusLambda(pop, toolbox, MU, LAMBDA, CXPB, MUTPB, NGEN, stats,\n", - " halloffame=hof) #esMuPlusLambda是一种基于(μ+λ)选择策略的多目标优化分段遗传算法\n", - "\n", - " end = time()\n", - " cost = int((end - start))\n", - "\n", - " print(\"遗传算法优化完成,耗时%s秒\"% (cost))\n", - " print(\"输出帕累托前沿解集:\")\n", - " show_result(hof)\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "optimize()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - " MU = 80 #设置每一代选择的个体数\n", - " POP = 100 #设置每一代产生的子女数\n", - " CXPB, MUTPB, NGEN = 0.95, 0.05,20 \n", - " print(\"开始运行遗传算法,每代族群总数:%s, 优良品种筛选个数:%s,迭代次数:%s,交叉概率:%s,突变概率:%s\" %(POP,MU,NGEN,CXPB,MUTPB))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "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.7.1" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tests/backtesting/genetic_algorithm.ipynb b/tests/backtesting/genetic_algorithm.ipynb deleted file mode 100644 index c9e92e12..00000000 --- a/tests/backtesting/genetic_algorithm.ipynb +++ /dev/null @@ -1,189 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import random\n", - "import multiprocessing\n", - "import numpy as np\n", - "from deap import creator, base, tools, algorithms\n", - "from vnpy.app.cta_strategy.backtesting import BacktestingEngine\n", - "from boll_channel_strategy import BollChannelStrategy\n", - "from datetime import datetime\n", - "import multiprocessing #多进程\n", - "from scoop import futures #多进程" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def parameter_generate():\n", - " '''\n", - " 根据设置的起始值,终止值和步进,随机生成待优化的策略参数\n", - " '''\n", - " parameter_list = []\n", - " p1 = random.randrange(4,50,2) #布林带窗口\n", - " p2 = random.randrange(4,50,2) #布林带通道阈值\n", - " p3 = random.randrange(4,50,2) #CCI窗口\n", - " p4 = random.randrange(18,40,2) #ATR窗口 \n", - "\n", - " parameter_list.append(p1)\n", - " parameter_list.append(p2)\n", - " parameter_list.append(p3)\n", - " parameter_list.append(p4)\n", - "\n", - " return parameter_list" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def object_func(strategy_avg):\n", - " \"\"\"\n", - " 本函数为优化目标函数,根据随机生成的策略参数,运行回测后自动返回2个结果指标:收益回撤比和夏普比率\n", - " \"\"\"\n", - " # 创建回测引擎对象\n", - " engine = BacktestingEngine()\n", - " engine.set_parameters(\n", - " vt_symbol=\"IF88.CFFEX\",\n", - " interval=\"1m\",\n", - " start=datetime(2018, 9, 1),\n", - " end=datetime(2019, 1,1),\n", - " rate=0,\n", - " slippage=0,\n", - " size=300,\n", - " pricetick=0.2,\n", - " capital=1_000_000,\n", - " )\n", - "\n", - " setting = {'boll_window': strategy_avg[0], #布林带窗口\n", - " 'boll_dev': strategy_avg[1], #布林带通道阈值\n", - " 'cci_window': strategy_avg[2], #CCI窗口\n", - " 'atr_window': strategy_avg[3],} #ATR窗口 \n", - "\n", - " #加载策略 \n", - " #engine.initStrategy(TurtleTradingStrategy, setting)\n", - " engine.add_strategy(BollChannelStrategy, setting)\n", - " engine.load_data()\n", - " engine.run_backtesting()\n", - " engine.calculate_result()\n", - " result = engine.calculate_statistics(Output=False)\n", - "\n", - " return_drawdown_ratio = round(result['return_drawdown_ratio'],2) #收益回撤比\n", - " sharpe_ratio= round(result['sharpe_ratio'],2) #夏普比率\n", - " return return_drawdown_ratio , sharpe_ratio" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "#设置优化方向:最大化收益回撤比,最大化夏普比率\n", - "creator.create(\"FitnessMulti\", base.Fitness, weights=(1.0, 1.0)) # 1.0 求最大值;-1.0 求最小值\n", - "creator.create(\"Individual\", list, fitness=creator.FitnessMulti)\n", - "\n", - "def optimize():\n", - " \"\"\"\"\"\" \n", - " toolbox = base.Toolbox() #Toolbox是deap库内置的工具箱,里面包含遗传算法中所用到的各种函数\n", - "\n", - " # 初始化 \n", - " toolbox.register(\"individual\", tools.initIterate, creator.Individual,parameter_generate) # 注册个体:随机生成的策略参数parameter_generate() \n", - " toolbox.register(\"population\", tools.initRepeat, list, toolbox.individual) #注册种群:个体形成种群 \n", - " toolbox.register(\"mate\", tools.cxTwoPoint) #注册交叉:两点交叉 \n", - " toolbox.register(\"mutate\", tools.mutUniformInt,low = 4,up = 40,indpb=0.6) #注册变异:随机生成一定区间内的整数\n", - " toolbox.register(\"evaluate\", object_func) #注册评估:优化目标函数object_func() \n", - " toolbox.register(\"select\", tools.selNSGA2) #注册选择:NSGA-II(带精英策略的非支配排序的遗传算法)\n", - " #pool = multiprocessing.Pool()\n", - " #toolbox.register(\"map\", pool.map)\n", - " #toolbox.register(\"map\", futures.map)\n", - "\n", - " #遗传算法参数设置\n", - " MU = 40 #设置每一代选择的个体数\n", - " LAMBDA = 160 #设置每一代产生的子女数\n", - " pop = toolbox.population(400) #设置族群里面的个体数量\n", - " CXPB, MUTPB, NGEN = 0.5, 0.35,40 #分别为种群内部个体的交叉概率、变异概率、产生种群代数\n", - " hof = tools.ParetoFront() #解的集合:帕累托前沿(非占优最优集)\n", - "\n", - " #解的集合的描述统计信息\n", - " #集合内平均值,标准差,最小值,最大值可以体现集合的收敛程度\n", - " #收敛程度低可以增加算法的迭代次数\n", - " stats = tools.Statistics(lambda ind: ind.fitness.values)\n", - " np.set_printoptions(suppress=True) #对numpy默认输出的科学计数法转换\n", - " stats.register(\"mean\", np.mean, axis=0) #统计目标优化函数结果的平均值\n", - " stats.register(\"std\", np.std, axis=0) #统计目标优化函数结果的标准差\n", - " stats.register(\"min\", np.min, axis=0) #统计目标优化函数结果的最小值\n", - " stats.register(\"max\", np.max, axis=0) #统计目标优化函数结果的最大值\n", - "\n", - " #运行算法\n", - " algorithms.eaMuPlusLambda(pop, toolbox, MU, LAMBDA, CXPB, MUTPB, NGEN, stats,\n", - " halloffame=hof) #esMuPlusLambda是一种基于(μ+λ)选择策略的多目标优化分段遗传算法\n", - "\n", - " return pop" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "optimize()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "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.7.1" - }, - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tests/backtesting/getdata.py b/tests/backtesting/getdata.py deleted file mode 100644 index d5b01fdf..00000000 --- a/tests/backtesting/getdata.py +++ /dev/null @@ -1,65 +0,0 @@ -from time import time - -import rqdatac as rq - -from vnpy.trader.object import BarData -from vnpy.trader.constant import Exchange, Interval -from vnpy.trader.database import database_manager - -USERNAME = "" -PASSWORD = "" -FIELDS = ["open", "high", "low", "close", "volume"] - -rq.init(USERNAME, PASSWORD, ("rqdatad-pro.ricequant.com", 16011)) - - -def generate_bar_from_row(row, symbol, exchange): - """""" - bar = BarData( - symbol=symbol, - exchange=Exchange(exchange), - interval=Interval.MINUTE, - open_price=row["open"], - high_price=row["high"], - low_price=row["low"], - close_price=row["close"], - volume=row["volume"], - datetime=row.name.to_pydatetime(), - gateway_name="DB" - ) - return bar - - -def download_minute_bar(vt_symbol): - """下载某一合约的分钟线数据""" - print(f"开始下载合约数据{vt_symbol}") - symbol, exchange = vt_symbol.split(".") - - start = time() - - df = rq.get_price( - symbol, - frequency="1m", - fields=FIELDS, - start_date='20100416', - end_date='20190416' - ) - - bars = [] - for ix, row in df.iterrows(): - bar = generate_bar_from_row(row, symbol, exchange) - bars.append(bar) - - database_manager.save_bar_data(bars) - - end = time() - cost = (end - start) * 1000 - - print( - "合约%s的分钟K线数据下载完成%s - %s,耗时%s毫秒" - % (symbol, df.index[0], df.index[-1], cost) - ) - - -if __name__ == "__main__": - download_minute_bar("IF88.CFFEX") diff --git a/tests/backtesting/run_ga.py b/tests/backtesting/run_ga.py deleted file mode 100644 index 4ce1c6b3..00000000 --- a/tests/backtesting/run_ga.py +++ /dev/null @@ -1,27 +0,0 @@ -from vnpy.app.cta_strategy.backtesting import BacktestingEngine, OptimizationSetting -from vnpy.app.cta_strategy.strategies.atr_rsi_strategy import ( - AtrRsiStrategy, -) -from datetime import datetime - -if __name__ == "__main__": - engine = BacktestingEngine() - engine.set_parameters( - vt_symbol="IF88.CFFEX", - interval="1m", - start=datetime(2019, 1, 1), - end=datetime(2019, 4, 30), - rate=0.3 / 10000, - slippage=0.2, - size=300, - pricetick=0.2, - capital=1_000_000, - ) - engine.add_strategy(AtrRsiStrategy, {}) - - setting = OptimizationSetting() - setting.set_target("sharpe_ratio") - setting.add_parameter("atr_length", 3, 39, 1) - setting.add_parameter("atr_ma_length", 10, 30, 1) - - engine.run_ga_optimization(setting) diff --git a/tests/backtesting/turtle.ipynb b/tests/backtesting/turtle.ipynb deleted file mode 100644 index a7ef84f1..00000000 --- a/tests/backtesting/turtle.ipynb +++ /dev/null @@ -1,170 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "#%%\n", - "from vnpy.app.cta_strategy.backtesting import BacktestingEngine, OptimizationSetting\n", - "from vnpy.app.cta_strategy.strategies.atr_rsi_strategy import (\n", - " AtrRsiStrategy,\n", - ")\n", - "from datetime import datetime" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "#%%\n", - "engine = BacktestingEngine()\n", - "engine.set_parameters(\n", - " vt_symbol=\"IF88.CFFEX\",\n", - " interval=\"1m\",\n", - " start=datetime(2019, 1, 1),\n", - " end=datetime(2019, 4, 30),\n", - " rate=0.3/10000,\n", - " slippage=0.2,\n", - " size=300,\n", - " pricetick=0.2,\n", - " capital=1_000_000,\n", - ")\n", - "engine.add_strategy(AtrRsiStrategy, {})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "#%%\n", - "engine.load_data()\n", - "engine.run_backtesting()\n", - "df = engine.calculate_result()\n", - "engine.calculate_statistics()\n", - "engine.show_chart()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "scrolled": true - }, - - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2019-05-03 16:19:04.193703\t开始运行遗传算法,每代族群总数:11, 优良品种筛选个数:8,迭代次数:30,交叉概率:0.95,突变概率:0.050000000000000044\n", - "gen\tnevals\tmean \tstd \tmin \tmax \n", - "0 \t11 \t[0.58423524]\t[0.30377007]\t[0.13231977]\t[1.2382818]\n", - "1 \t11 \t[0.90248989]\t[0.15747112]\t[0.68707859]\t[1.2382818]\n", - "2 \t11 \t[1.09406088]\t[0.18860523]\t[0.86284921]\t[1.46762684]\n", - "3 \t11 \t[1.21413386]\t[0.12138014]\t[1.02072108]\t[1.46762684]\n", - "4 \t11 \t[1.29561806]\t[0.09930932]\t[1.2382818] \t[1.46762684]\n", - "5 \t11 \t[1.41029058]\t[0.09930932]\t[1.2382818] \t[1.46762684]\n", - "6 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "7 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "8 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "9 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "10 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "11 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "12 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "13 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "14 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "15 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "16 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "17 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "18 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "19 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "20 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "21 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "22 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "23 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "24 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "25 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "26 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "27 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "28 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "29 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "30 \t11 \t[1.46762684]\t[0.] \t[1.46762684]\t[1.46762684]\n", - "2019-05-03 16:19:58.256354\t遗传算法优化完成,耗时54秒\n" - ] - }, - { - "data": { - "text/plain": [ - "[({'atr_length': 38, 'atr_ma_length': 25}, 1.4676268402266743)]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "setting = OptimizationSetting()\n", - "setting.set_target(\"sharpe_ratio\")\n", - "setting.add_parameter(\"atr_length\", 3, 39, 1)\n", - "setting.add_parameter(\"atr_ma_length\", 10, 30, 1)\n", - "\n", - "engine.run_ga_optimization(setting)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "result = _" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(result)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "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.7.1" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -}