续上篇文章,第二个小例子
一、策略分析
原始描述
建仓条件:expma周线exp1跟exp2金叉向上使用使用 B=50% 的资金买入股票,建仓成功后,卖出条件才能起作用
卖出条件S1:expma日线exp1和exp2死叉向下时卖出持仓股 S=50%
买入条件B1:expma日线exp1和exp2金叉向上时买入股票数为S(卖出条件S1卖出股数)
S1和B1就这样循环
清仓条件为:expma周线exp1和exp2死叉时
策略分析
市场环境:无
系统有效性:周线EMA1(快线)和EMA2(慢线)金叉向上直到两者死叉,系统有效时建立初始仓位
信号指示器:
- 买入:日线EMA1(快线)和EMA2(慢线)金叉向上
- 卖出:日线EMA1(快线)和EMA2(慢线)死叉向下
止损/止盈:无
资金管理:
- 初次建仓:使用50%的资金
- 买入:初次建仓时持股数的50%
- 卖出:初次建仓时持股数的50%
盈利目标:无
二、实现系统部件
自定义系统有效性策略
In [2]:
1 | def getNextWeekDateList(week): |
In [3]:
1 | def DEMO_CN(self): |
自定义信号指示器
In [4]:
1 | #这个例子不需要,已经有内建的SG_Cross函数可直接使用 |
自定义资金管理策略
In [5]:
1 | class DEMO_MM(MoneyManagerBase): |
三、构建并运行系统
修改设定公共参数
每个系统部件以及TradeManager都有自己的公共参数会影响系统运行,具体可以查看帮助及试验。
比如:这个例子当前使用系统有效条件进行初始建仓,那么必须设置系统公共参数cn_open_position为True。否则,没有建立初始仓位的话,后续没有卖出,不会有任何交易。
In [6]:
1 | #System参数 |
设定私有参数及待测试标的
In [7]:
1 | #账户参数 |
构建系统实例
In [8]:
1 | #创建模拟交易账户进行回测,初始资金30万 |
运行系统
In [9]:
1 | q = Query(start_date, end_date, ktype=Query.DAY) |
四、查看资金曲线及绩效统计
In [10]:
1 | #绘制资金收益曲线 |
In [11]:
1 | #回测统计 |
五、或许想看下图形
In [12]:
1 | my_sys.performance() |
六、或许想看看所有股票的情况
In [13]:
1 | import pandas as pd |
In [14]:
1 | #保存到CSV文件 |
Out[14]:
代码 | 股票 | 当前总资产 | |
---|---|---|---|
0 | SH600605 | 汇通能源 | 778089.17 |
1 | SH600606 | 绿地控股 | 459330.60 |
2 | SH603272 | 联翔股份 | 480224.00 |
3 | SH600354 | 敦煌种业 | 575339.00 |
4 | SZ300359 | 全通教育 | 441039.85 |
5 | SZ000725 | 京东方A | 465180.59 |
6 | BJ838163 | 方大新材 | 519824.00 |
7 | SZ300358 | 楚天科技 | 496350.30 |
8 | SH600355 | 精伦电子 | 390633.00 |
9 | SH603273 | 天元智能 | 543317.00 |