{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Hikyuu pyecharts绘图\n", "==============" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1、引入交互式工具\n", "-----------------\n", "需从hikyuu.interactive引入,而不是直接从hikyuu库中引入(hikyuu是一个库,可用于编制其他的工具,而hikyuu.interactive.interactive是基于hikyuu库实现的交互式探索工具)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2023-10-03 22:29:18,639 [INFO] Note: NumExpr detected 12 cores but \"NUMEXPR_MAX_THREADS\" not set, so enforcing safe limit of 8. [numexpr.utils::_init_num_threads]\n", "2023-10-03 22:29:18,640 [INFO] NumExpr defaulting to 8 threads. [numexpr.utils::_init_num_threads]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "std::cout are redirected to python::stdout\n", "std::cerr are redirected to python::stderr\n", "2023-10-03 22:29:19.362 [HKU-I] - Using SQLITE3 BaseInfoDriver (BaseInfoDriver.cpp:58)\n", "2023-10-03 22:29:19.362 [HKU-T] - SQLITE3: D:/Hikyuu_data/stock.db (SQLiteBaseInfoDriver.cpp:32)\n", "2023-10-03 22:29:19.363 [HKU-I] - Loading market information... (StockManager.cpp:503)\n", "2023-10-03 22:29:19.364 [HKU-I] - Loading stock type information... (StockManager.cpp:516)\n", "2023-10-03 22:29:19.364 [HKU-I] - Loading stock information... (StockManager.cpp:427)\n", "2023-10-03 22:29:19.673 [HKU-I] - Loading stock weight... (StockManager.cpp:533)\n", "2023-10-03 22:29:20.218 [HKU-I] - Loading KData... (StockManager.cpp:135)\n", "2023-10-03 22:29:20.227 [HKU-I] - Preloading all day kdata to buffer! (StockManager.cpp:158)\n", "2023-10-03 22:29:20.308 [HKU-I] - 0.09s Loaded Data. (StockManager.cpp:146)\n", "CPU times: total: 1.3 s\n", "Wall time: 3.18 s\n" ] } ], "source": [ "%matplotlib inline\n", "\n", "%time from hikyuu.interactive import *\n", "# 设置绘图引擎为echarts\n", "use_draw_engine('echarts')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2、创建交易系统并运行\n", "--------------------" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#创建模拟交易账户进行回测,初始资金30万\n", "my_tm = crtTM(init_cash = 300000)\n", "\n", "#创建信号指示器(相对强弱信号)\n", "ind = RSI(C, 24)\n", "my_sg = SG_Band(ind, 30, 70)\n", "\n", "#固定每次买入1股\n", "my_mm = MM_FixedCount(1)\n", "\n", "#创建交易系统并运行\n", "sys = SYS_Simple(tm = my_tm, sg = my_sg, mm = my_mm)\n", "sys.set_param(\"buy_delay\", False)\n", "sys.set_param(\"sell_delay\", False)\n", "#日线信号\n", "candle_num = 500\n", "q = Query(-candle_num, constant.null_int64, Query.DAY)\n", "symbol = 'sh000001'\n", "sys.run(sm[symbol], q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3、绘制曲线观察\n", "---------------" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "chart = sys.plot()\n", "k = sm[symbol].get_kdata(q)\n", "c = CLOSE(k)\n", "chart.render_notebook()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "k.plot()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ind(c).plot(kref=k)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ind(c).bar(kref=k)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ind1 = TA_RSI(timeperiod=24)\n", "ind2 = RSI(24)\n", "chart = ind1(c).plot(kref=k)\n", "ind2(c).plot(kref=k, chart=chart)\n", "chart" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4、绘制资金收益曲线\n", "---------------------" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#绘制资金收益曲线\n", "x = my_tm.get_profit_curve(k.get_datetime_list(), q.ktype) # datetime is lost there\n", "x = PRICELIST(x)\n", "x.plot(kref=k).render_notebook()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "5、回测统计报告\n", "----------------------" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "帐户初始金额: 300000.00\n", "累计投入本金: 300000.00\n", "累计投入资产: 0.00\n", "累计借入现金: 0.00\n", "累计借入资产: 0.00\n", "累计红利: 0.00\n", "现金余额: 296372.56\n", "未平仓头寸净值: 3276.68\n", "当前总资产: 299649.24\n", "已平仓交易总成本: 0.00\n", "已平仓净利润总额: -399.85\n", "单笔交易最大占用现金比例%: 1.18\n", "交易平均占用现金比例%: 1.13\n", "已平仓帐户收益率%: -0.13\n", "帐户年复合收益率%: -0.05\n", "帐户平均年收益率%: -0.05\n", "赢利交易赢利总额: 0.00\n", "亏损交易亏损总额: -399.85\n", "已平仓交易总数: 2.00\n", "赢利交易数: 0.00\n", "亏损交易数: 2.00\n", "赢利交易比例%: 0.00\n", "赢利期望值: -199.92\n", "赢利交易平均赢利: 0.00\n", "亏损交易平均亏损: -199.92\n", "平均赢利/平均亏损比例: 0.00\n", "净赢利/亏损比例: 0.00\n", "最大单笔赢利: 0.00\n", "最大单笔亏损: -293.61\n", "赢利交易平均持仓时间: 0.00\n", "赢利交易最大持仓时间: 0.00\n", "亏损交易平均持仓时间: 138.00\n", "亏损交易最大持仓时间: 193.00\n", "空仓总时间: 534.00\n", "空仓时间/总时间%: 65.00\n", "平均空仓时间: 267.00\n", "最长空仓时间: 379.00\n", "最大连续赢利笔数: 0.00\n", "最大连续亏损笔数: 2.00\n", "最大连续赢利金额: 0.00\n", "最大连续亏损金额: -399.85\n", "R乘数期望值: -0.06\n", "交易机会频率/年: 0.90\n", "年度期望R乘数: -0.05\n", "赢利交易平均R乘数: 0.00\n", "亏损交易平均R乘数: -0.06\n", "最大单笔赢利R乘数: 0.00\n", "最大单笔亏损R乘数: -0.09\n", "最大连续赢利R乘数: 0.00\n", "最大连续亏损R乘数: -0.06\n", "\n" ] } ], "source": [ "#回测统计\n", "from datetime import datetime\n", "\n", "per = Performance()\n", "print(per.report(my_tm, Datetime(datetime.today())))\n" ] } ], "metadata": { "kernelspec": { "display_name": "hikyuu_env", "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.9.18" } }, "nbformat": 4, "nbformat_minor": 4 }