<jupyter_start><jupyter_text>Hikyuu 交互式工具示例============== 1、引入交互式工具-----------------需从hikyuu.interactive.interactive引入，而不是直接从hikyuu库中引入（hikyuu是一个库，可用于编制其他的工具，而hikyuu.interactive.interactive是基于hikyuu库实现的交互式探索工具）<jupyter_code>%matplotlib inline
%time from hikyuu.interactive.interactive import *
#use_draw_engine('echarts') #use_draw_engine('matplotlib')  #默认为'matplotlib'绘图<jupyter_output>Wall time: 6.93 s<jupyter_text>2、创建交易系统并运行--------------------<jupyter_code>#创建模拟交易账户进行回测，初始资金30万
my_tm = crtTM(initCash = 300000)

#创建信号指示器（以5日EMA为快线，5日EMA自身的10日EMA最为慢线，快线向上穿越慢线时买入，反之卖出）
my_sg = SG_Flex(OP(EMA(n=5)), slow_n=10)

#固定每次买入1000股
my_mm = MM_FixedCount(1000)

#创建交易系统并运行
sys = SYS_Simple(tm = my_tm, sg = my_sg, mm = my_mm)
sys.run(sm['sz000001'], Query(-150))<jupyter_output><empty_output><jupyter_text>3、绘制曲线观察---------------<jupyter_code>#绘制系统信号
sys.plot()

k = sm['sz000001'].getKData(Query(-150))
c = CLOSE(k)
fast = EMA(c, 5)
slow = EMA(fast, 10)

#绘制信号指示器使用两个指标
fast.plot(new=False)
slow.plot(new=False)<jupyter_output><empty_output><jupyter_text>4、绘制资金收益曲线---------------------<jupyter_code>#绘制资金收益曲线
x = my_tm.getProfitCurve(k.getDatetimeList(), KQuery.DAY)
x = PRICELIST(x)
x.plot()<jupyter_output><empty_output><jupyter_text>5、回测统计报告----------------------<jupyter_code>#回测统计
from datetime import datetime

per = Performance()
print(per.report(my_tm, Datetime(datetime.today())))<jupyter_output>帐户初始金额: 300000.00
累计投入本金: 300000.00
累计投入资产: 0.00
累计借入现金: 0.00
累计借入资产: 0.00
累计红利: 0.00
现金余额: 288500.00
未平仓头寸净值: 13300.00
当前总资产: 301800.00
已平仓交易总成本: 0.00
已平仓净利润总额: 2000.00
单笔交易最大占用现金比例%: 4.47
交易平均占用现金比例%: 3.79
已平仓帐户收益率%: 0.67
帐户年复合收益率%: 1.10
帐户平均年收益率%: 1.10
赢利交易赢利总额: 2740.00
亏损交易亏损总额: -740.00
已平仓交易总数: 6.00
赢利交易数: 3.00
亏损交易数: 3.00
赢利交易比例%: 50.00
赢利期望值: 333.33
赢利交易平均赢利: 913.33
亏损交易平均亏损: -246.67
平均赢利/平均亏损比例: 3.70
净赢利/亏损比例: 3.70
最大单笔赢利: 1330.00
最大单笔亏损: -280.00
赢利交易平均持仓时间: 33.67
赢利交易最大持仓时间: 50.00
亏损交易平均持仓时间: 7.00
亏损交易最大持仓时间: 13.00
空仓总时间: 79.00
空仓时间/总时间%: 39.00
平均空仓时间: 13.00
最长空仓时间: 35.00
最大连续赢利笔数: 1.00
最大连续亏损笔数: 3.00
最大连续赢利金额: 1690.00
最大连续亏损金额: -740.00
R乘数期望值: 0.04
交易机会频率/年: 10.95
年度期望R乘数: 0.44
赢利交易平均R乘数: 0.09
亏损交易平均R乘数: -0.02
最大单笔赢利R乘数: 0.15
最大单笔亏损R乘数: -0.02
最大连续赢利R乘数: 0.18
最大连续亏损R乘数: -0.02<jupyter_text>6、关于性能---------------经常有人问到性能问题，下面这段的代码使用之前的系统示例，遍历指定板块的所有股票，计算他们的“盈利交易比例%”（即胜率）。<jupyter_code>def test_func(stock, query):
    """计算指定stock的系统策略胜率，系统策略为之前的简单双均线交叉系统（每次固定买入100股）
    """
    #创建模拟交易账户进行回测，初始资金30万
    my_tm = crtTM(initCash = 1000000)

    #创建信号指示器（以5日EMA为快线，5日EMA自身的10日EMA最为慢线，快线向上穿越慢线时买入，反之卖出）
    my_sg = SG_Flex(OP(EMA(n=5)), slow_n=10)

    #固定每次买入1000股
    my_mm = MM_FixedCount(100)

    #创建交易系统并运行
    sys = SYS_Simple(tm = my_tm, sg = my_sg, mm = my_mm)
    sys.run(stock, query)
    
    per = Performance()
    per.statistics(my_tm, Datetime(datetime.today()))
    return per.get("赢利交易比例%".encode('gb2312'))

def total_func(blk, query):
    """遍历指定板块的所有的股票，计算系统胜率"""
    result = {}
    for s in blk:
        if s.valid and s.type != constant.STOCKTYPE_INDEX:
            result[s.name] = test_func(s, query)
    return result<jupyter_output><empty_output><jupyter_text>遍历所有当前有效且并非指数的证券。下面是我的机器执行结果，共计算4151支证券，最近500个交易日，共耗时2.89秒。机器配置：Intel i7-4700HQ 2.G。<jupyter_code>%time a = total_func(sm, Query(-500))
len(a)<jupyter_output>Wall time: 3.08 s
{'fraction_non_alphanumeric': 0.1750380517503805, 'fraction_numerical': 0.09497716894977169, 'mean_word_length': 4.836589698046181, 'pattern_counts': {'":': 0, '<': 26, '<?xml version=': 0, '>': 26, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '353870', 'license': 'MIT', 'n_tokens_mistral': 2246, 'n_tokens_neox': 2289, 'n_words': 219, 'path': '001-overview.ipynb', 'repo_name': 'fasiondog/hikyuu_examples', 'size': '3285'}