test_doc
test_Simple_SYS_for_pg.cpp
浏览该文件的文档.
1 /*
2  * test_SYS_Simple.cpp
3  *
4  * Created on: 2013-4-20
5  * Author: fasiondog
6  */
7 
8 
9 #ifdef TEST_ALL_IN_ONE
10  #include <boost/test/unit_test.hpp>
11 #else
12  #define BOOST_TEST_MODULE test_hikyuu_trade_sys_suite
13  #include <boost/test/unit_test.hpp>
14 #endif
15 
16 #include "test_sys.h"
17 #include <hikyuu/StockManager.h>
18 #include <hikyuu/indicator/crt/MA.h>
19 #include <hikyuu/trade_manage/crt/crtTM.h>
20 #include <hikyuu/trade_sys/system/crt/SYS_Simple.h>
21 #include <hikyuu/trade_sys/signal/crt/SG_Cross.h>
22 #include <hikyuu/trade_sys/moneymanager/crt/MM_FixedCount.h>
23 #include <hikyuu/trade_sys/stoploss/crt/ST_FixedPercent.h>
24 #include <hikyuu/trade_sys/stoploss/crt/ST_Indicator.h>
25 #include <hikyuu/trade_sys/profitgoal/crt/PG_FixedPercent.h>
26 
27 
28 using namespace hku;
29 
37 BOOST_AUTO_TEST_CASE( test_SYS_Simple_for_pg) {
38  TradeRecordList tr_list;
39  price_t current_cash;
40 
41  StockManager& sm = StockManager::instance();
42 
43  //初始参数
44  Datetime init_date(199001010000LL); //账户初始日期
45  price_t init_cash = 100000; //账户初始金额
46  TradeCostPtr costfunc = TC_Zero(); //零成本函数
47  Stock stk = sm["sh600000"]; //选定标的
48  Datetime start_date(199911100000LL); //测试起始日期
49  Datetime end_date(200002250000LL); //测试结束日期
50 
51  KQuery query = KQueryByDate(start_date, end_date, KQuery::DAY);
52 
53  //构建系统部件
54  TMPtr tm = crtTM(init_date, init_cash, costfunc, "TEST_TM");
55  SGPtr sg = SG_Cross(OP(MA(5)), OP(MA(10)), "CLOSE");
56  MMPtr mm = MM_FixedCount(100);
57  STPtr st = ST_FixedPercent(0.01);
58  TPPtr tp = ST_Indicator(OP(MA(5)), "CLOSE");
59  PGPtr pg = PG_FixedPercent(0.01);
60  SYSPtr sys;
61 
63  sys = SYS_Simple();
64  sys->setParam("delay", false);
65  sys->setTM(tm->clone());
66  sys->setSG(sg->clone());
67  sys->setMM(mm->clone());
68  sys->setST(st->clone());
69  sys->setTP(tp->clone());
70  sys->setPG(pg->clone());
71  BOOST_CHECK(sys->readyForRun() == true);
72  sys->run(stk, query);
73  BOOST_CHECK(sys->getTM()->currentCash() != init_cash);
74  tr_list = sys->getTM()->getTradeList();
75  BOOST_CHECK(tr_list.size() != 1);
76  BOOST_CHECK(tr_list[0].business == BUSINESS_INIT);
77 
78  BOOST_CHECK(tr_list[1].stock == stk);
79  BOOST_CHECK(tr_list[1].datetime == Datetime(199912150000LL));
80  BOOST_CHECK(tr_list[1].business == BUSINESS_BUY);
81  BOOST_CHECK(std::fabs(tr_list[1].planPrice - 26.45) < 0.00001);
82  BOOST_CHECK(std::fabs(tr_list[1].realPrice - 26.45) < 0.00001);
83  BOOST_CHECK(std::fabs(tr_list[1].goalPrice - 26.45*1.01) < 0.00001);
84  BOOST_CHECK(tr_list[1].number == 100);
85  BOOST_CHECK(std::fabs(tr_list[1].cost.total - 0) < 0.00001);
86  BOOST_CHECK(std::fabs(tr_list[1].stoploss - 26.19) < 0.00001);
87  current_cash = init_cash - 2645;
88  BOOST_CHECK(std::fabs(tr_list[1].cash - current_cash) < 0.00001);
89  BOOST_CHECK(tr_list[1].from == PART_SIGNAL);
90 
91  BOOST_CHECK(tr_list[2].stock == stk);
92  BOOST_CHECK(tr_list[2].datetime == Datetime(199912160000LL));
93  BOOST_CHECK(tr_list[2].business == BUSINESS_SELL);
94  BOOST_CHECK(std::fabs(tr_list[2].planPrice - 26.00) < 0.00001);
95  BOOST_CHECK(std::fabs(tr_list[2].realPrice - 26.00) < 0.00001);
96  //BOOST_CHECK(std::fabs(tr_list[2].goalPrice - 26.00*1.01) < 0.00001);
97  BOOST_CHECK(tr_list[2].number == 100);
98  BOOST_CHECK(std::fabs(tr_list[2].cost.total - 0) < 0.00001);
99  BOOST_CHECK(std::fabs(tr_list[2].stoploss - 25.74) < 0.00001);
100  current_cash += 2600;
101  BOOST_CHECK(std::fabs(tr_list[2].cash - current_cash) < 0.00001);
102  BOOST_CHECK(tr_list[2].from == PART_STOPLOSS);
103 
104  BOOST_CHECK(tr_list[3].stock == stk);
105  BOOST_CHECK(tr_list[3].datetime == Datetime(200001050000LL));
106  BOOST_CHECK(tr_list[3].business == BUSINESS_BUY);
107  BOOST_CHECK(std::fabs(tr_list[3].planPrice - 25.28) < 0.00001);
108  BOOST_CHECK(std::fabs(tr_list[3].realPrice - 25.28) < 0.00001);
109  BOOST_CHECK(std::fabs(tr_list[3].goalPrice - 25.28*1.01) < 0.00001);
110  BOOST_CHECK(tr_list[3].number == 100);
111  BOOST_CHECK(std::fabs(tr_list[3].cost.total - 0) < 0.00001);
112  BOOST_CHECK(std::fabs(tr_list[3].stoploss - 25.03) < 0.00001);
113  current_cash -= 2528;
114  BOOST_CHECK(std::fabs(tr_list[3].cash - current_cash) < 0.00001);
115  BOOST_CHECK(tr_list[3].from == PART_SIGNAL);
116 
117  BOOST_CHECK(tr_list[4].stock == stk);
118  BOOST_CHECK(tr_list[4].datetime == Datetime(200001060000LL));
119  BOOST_CHECK(tr_list[4].business == BUSINESS_SELL);
120  BOOST_CHECK(std::fabs(tr_list[4].planPrice - 25.99) < 0.00001);
121  BOOST_CHECK(std::fabs(tr_list[4].realPrice - 25.99) < 0.00001);
122  //BOOST_CHECK(std::fabs(tr_list[4].goalPrice - 25.99*1.01) < 0.00001);
123  BOOST_CHECK(tr_list[4].number == 100);
124  BOOST_CHECK(std::fabs(tr_list[4].cost.total - 0) < 0.00001);
125  BOOST_CHECK(std::fabs(tr_list[4].stoploss - 25.73) < 0.00001);
126  current_cash += 2599;
127  BOOST_CHECK(std::fabs(tr_list[4].cash - current_cash) < 0.00001);
128  BOOST_CHECK(tr_list[4].from == PART_PROFITGOAL);
129 
131  sys = SYS_Simple();
132  sys->setParam("delay", true);
133  sys->setTM(tm->clone());
134  sys->setSG(sg->clone());
135  sys->setMM(mm->clone());
136  sys->setST(st->clone());
137  sys->setTP(tp->clone());
138  sys->setPG(pg->clone());
139  BOOST_CHECK(sys->readyForRun() == true);
140  sys->run(stk, query);
141  BOOST_CHECK(sys->getTM()->currentCash() != init_cash);
142  tr_list = sys->getTM()->getTradeList();
143  BOOST_CHECK(tr_list.size() != 1);
144  BOOST_CHECK(tr_list[0].business == BUSINESS_INIT);
145 
146  BOOST_CHECK(tr_list[1].stock == stk);
147  BOOST_CHECK(tr_list[1].datetime == Datetime(199912160000LL));
148  BOOST_CHECK(tr_list[1].business == BUSINESS_BUY);
149  BOOST_CHECK(std::fabs(tr_list[1].planPrice - 26.50) < 0.00001);
150  BOOST_CHECK(std::fabs(tr_list[1].realPrice - 26.50) < 0.00001);
151  BOOST_CHECK(std::fabs(tr_list[1].goalPrice - 26.50*1.01) < 0.00001);
152  BOOST_CHECK(tr_list[1].number == 100);
153  BOOST_CHECK(std::fabs(tr_list[1].cost.total - 0) < 0.00001);
154  BOOST_CHECK(std::fabs(tr_list[1].stoploss - 26.24) < 0.00001);
155  current_cash = init_cash - 2650;
156  BOOST_CHECK(std::fabs(tr_list[1].cash - current_cash) < 0.00001);
157  BOOST_CHECK(tr_list[1].from == PART_SIGNAL);
158 
159  BOOST_CHECK(tr_list[2].stock == stk);
160  BOOST_CHECK(tr_list[2].datetime == Datetime(199912170000LL));
161  BOOST_CHECK(tr_list[2].business == BUSINESS_SELL);
162  BOOST_CHECK(std::fabs(tr_list[2].planPrice - 26.00) < 0.00001);
163  BOOST_CHECK(std::fabs(tr_list[2].realPrice - 26.00) < 0.00001);
164  //BOOST_CHECK(std::fabs(tr_list[2].goalPrice - 26.00*1.01) < 0.00001);
165  BOOST_CHECK(tr_list[2].number == 100);
166  BOOST_CHECK(std::fabs(tr_list[2].cost.total - 0) < 0.00001);
167  BOOST_CHECK(std::fabs(tr_list[2].stoploss - 25.74) < 0.00001);
168  current_cash += 2600;
169  BOOST_CHECK(std::fabs(tr_list[2].cash - current_cash) < 0.00001);
170  BOOST_CHECK(tr_list[2].from == PART_STOPLOSS);
171 
172  BOOST_CHECK(tr_list[3].stock == stk);
173  BOOST_CHECK(tr_list[3].datetime == Datetime(200001060000LL));
174  BOOST_CHECK(tr_list[3].business == BUSINESS_BUY);
175  BOOST_CHECK(std::fabs(tr_list[3].planPrice - 25.18) < 0.00001);
176  BOOST_CHECK(std::fabs(tr_list[3].realPrice - 25.18) < 0.00001);
177  BOOST_CHECK(std::fabs(tr_list[3].goalPrice - 25.18*1.01) < 0.00001);
178  BOOST_CHECK(tr_list[3].number == 100);
179  BOOST_CHECK(std::fabs(tr_list[3].cost.total - 0) < 0.00001);
180  BOOST_CHECK(std::fabs(tr_list[3].stoploss - 24.93) < 0.00001);
181  current_cash -= 2518;
182  BOOST_CHECK(std::fabs(tr_list[3].cash - current_cash) < 0.00001);
183  BOOST_CHECK(tr_list[3].from == PART_SIGNAL);
184 
185  BOOST_CHECK(tr_list[4].stock == stk);
186  BOOST_CHECK(tr_list[4].datetime == Datetime(200001070000LL));
187  BOOST_CHECK(tr_list[4].business == BUSINESS_SELL);
188  BOOST_CHECK(std::fabs(tr_list[4].planPrice - 26.30) < 0.00001);
189  BOOST_CHECK(std::fabs(tr_list[4].realPrice - 26.30) < 0.00001);
190  //BOOST_CHECK(std::fabs(tr_list[4].goalPrice - 26.30*1.01) < 0.00001);
191  BOOST_CHECK(tr_list[4].number == 100);
192  BOOST_CHECK(std::fabs(tr_list[4].cost.total - 0) < 0.00001);
193  BOOST_CHECK(std::fabs(tr_list[4].stoploss - 26.04) < 0.00001);
194  current_cash += 2630;
195  BOOST_CHECK(std::fabs(tr_list[4].cash - current_cash) < 0.00001);
196  BOOST_CHECK(tr_list[4].from == PART_PROFITGOAL);
197 
198  /*for (auto iter = tr_list.begin(); iter != tr_list.end(); ++iter) {
199  std::cout << *iter << std::endl;
200  }*/
201 }
202 
BOOST_AUTO_TEST_CASE(test_SYS_Simple_for_pg)