test_doc
test_AllocateFunds.cpp
浏览该文件的文档.
1 /*
2  * test_AllocateFunds.cpp
3  *
4  * Created on: 2018-2-11
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 <hikyuu/StockManager.h>
17 #include <hikyuu/trade_manage/crt/crtTM.h>
18 #include <hikyuu/trade_sys/system/crt/SYS_Simple.h>
19 #include <hikyuu/trade_sys/selector/crt/SE_Fixed.h>
20 #include <hikyuu/trade_sys/allocatefunds/crt/AF_EqualWeight.h>
21 
22 using namespace hku;
23 
31 BOOST_AUTO_TEST_CASE( test_AllocateFunds) {
32  StockManager& sm = StockManager::instance();
33 
34  SEPtr se = SE_Fixed();
35  AFPtr af = AF_EqualWeight();
36  TMPtr tm = crtTM(Datetime(200101010000L), 100000);
37  TMPtr subtm = crtTM(Datetime(200101010000L), 0);
38  SYSPtr sys = SYS_Simple(subtm->clone());
39 
40  SystemList se_list;
41  SystemList hold_list;
42  SystemList ac_list;
43  SystemWeightList sw_list;
44 
46  BOOST_CHECK(!af->getTM());
47  af->setTM(tm);
48  BOOST_CHECK(af->getTM());
49 
51  AFPtr af2 = af->clone();
52  BOOST_CHECK(af2.get() != af.get());
53  BOOST_CHECK(af2->name() == af->name());
54  BOOST_CHECK(af2->getTM() == af->getTM());
55 
57  BOOST_CHECK(se_list.size() == 0);
58  BOOST_CHECK(hold_list.size() == 0);
59  sw_list = af->_allocateWeight(Datetime(201802100000L), se_list);
60  ac_list = af->getAllocatedSystemList(Datetime(201802100000L), se_list, hold_list);
61  BOOST_CHECK(sw_list.size() == 0);
62  BOOST_CHECK(ac_list.size() == 0);
63 
65  af->setParam<int>("max_sys_num", -1);
66  se->clear();
67  tm->reset();
68  sys->setTM(subtm->clone());
69  se->addStock(sm["sh600000"], sys);
70  se_list = se->getSelectedSystemList(Datetime(201802100000L));
71  BOOST_CHECK(se_list.size() == 1);
72 
73  sw_list = af->_allocateWeight(Datetime(201802100000L), se_list);
74  ac_list = af->getAllocatedSystemList(Datetime(201802100000L), se_list, se_list);
75  BOOST_CHECK(sw_list.size() == 1);
76  BOOST_CHECK(sw_list[0].getSYS() == se_list[0]);
77  BOOST_CHECK(ac_list.size() == 0);
78  BOOST_CHECK(tm->currentCash() == 100000);
79 
80 
82  af->setParam<int>("max_sys_num", 0);
83  tm->reset();
84  se->clear();
85  sys->setTM(subtm->clone());
86  se->addStock(sm["sh600000"], sys);
87  se_list = se->getSelectedSystemList(Datetime(201802100000L));
88  BOOST_CHECK(se_list.size() == 1);
89 
90  sw_list = af->_allocateWeight(Datetime(201802100000L), se_list);
91  ac_list = af->getAllocatedSystemList(Datetime(201802100000L), se_list, hold_list);
92  BOOST_CHECK(sw_list.size() == 1);
93  BOOST_CHECK(ac_list.size() == 0);
94  BOOST_CHECK(tm->currentCash() == 100000);
95 }
96 
BOOST_AUTO_TEST_CASE(test_AllocateFunds)