续上篇文章,第二个小例子
一、策略分析
原始描述
建仓条件: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 |