/*
* test_Stock.cpp
*
* Created on: 2011-12-10
* Author: fasiondog
*/
#include "doctest/doctest.h"
#include <cmath>
#include <hikyuu/StockManager.h>
#include <hikyuu/KQuery.h>
#include <hikyuu/KData.h>
#include <hikyuu/Stock.h>
using namespace hku;
#define MEMORY_CHECK \
{ \
Stock mem_stock = sm["sh000001"]; \
CHECK_EQ(mem_stock.isBuffer(KQuery::DAY), true); \
CHECK_EQ(mem_stock.isBuffer(KQuery::WEEK), false); \
CHECK_EQ(mem_stock.isBuffer(KQuery::MONTH), false); \
CHECK_EQ(mem_stock.isBuffer(KQuery::QUARTER), false); \
CHECK_EQ(mem_stock.isBuffer(KQuery::HALFYEAR), false); \
CHECK_EQ(mem_stock.isBuffer(KQuery::YEAR), false); \
CHECK_EQ(mem_stock.isBuffer(KQuery::MIN), false); \
CHECK_EQ(mem_stock.isBuffer(KQuery::MIN5), false); \
CHECK_EQ(mem_stock.isBuffer(KQuery::MIN15), false); \
CHECK_EQ(mem_stock.isBuffer(KQuery::MIN30), false); \
CHECK_EQ(mem_stock.isBuffer(KQuery::MIN60), false); \
}
/**
* @defgroup test_hikyuu_Stock test_hikyuu_Stock
* @ingroup test_hikyuu_base_suite
* @{
*/
/** @par 检测点 */
TEST_CASE("test_Stock_Relational_comparison") {
StockManager& sm = StockManager::instance();
Stock s1;
/** @arg 和Null<Stock>()进行相等比较 */
CHECK_EQ(s1, Null<Stock>());
/** @arg 和Null<Stock>()进行不等比较 */
s1 = sm.getStock("sh000001");
CHECK_NE(s1, Null<Stock>());
/** @arg 相等比较 */
Stock s2 = sm.getStock("sh000001");
CHECK_EQ(s1, s2);
/** @arg 不等比较 */
s2 = sm.getStock("sz000001");
CHECK_NE(s1, s2);
MEMORY_CHECK;
}
/** @par 检测点 */
TEST_CASE("test_Stock_getWeight") {
StockManager& sm = StockManager::instance();
Stock stock = sm.getStock("sz000001");
StockWeight weight;
/** @arg 查询全部权息信息 */
StockWeightList weightList = stock.getWeight();
CHECK_EQ(weightList.size(), 23);
weight = weightList.front();
CHECK_EQ(weight.datetime(), Datetime(199104030000L));
CHECK_EQ(weight.countAsGift(), 0.0);
CHECK_EQ(weight.countForSell(), 0.0);
CHECK_EQ(weight.priceForSell(), 0.0);
CHECK_EQ(weight.bonus(), 0.0);
CHECK_EQ(weight.increasement(), 0.0);
CHECK_EQ(weight.totalCount(), 150);
CHECK_EQ(weight.freeCount(), 68);
weight = weightList.back();
CHECK_EQ(weight.datetime(), Datetime(201108050000L));
CHECK_EQ(weight.countAsGift(), 0.0);
CHECK_EQ(weight.countForSell(), 0.0);
CHECK_EQ(weight.priceForSell(), 0.0);
CHECK_EQ(weight.bonus(), 0.0);
CHECK_EQ(weight.increasement(), 0.0);
CHECK_EQ(weight.totalCount(), 512335);
CHECK_EQ(weight.freeCount(), 310536);
/** @arg 查询指定日期范围内的权息信息,指定的起始日期和结束日期没有刚好对应的权息记录 */
weightList = stock.getWeight(Datetime(199501010000), Datetime(199701010000));
CHECK_EQ(weightList.size(), 2);
weight = weightList.front();
CHECK_EQ(weight.datetime(), Datetime(199509250000));
CHECK_EQ(weight.countAsGift(), 2.0);
CHECK_EQ(weight.countForSell(), 0.0);
CHECK_EQ(weight.priceForSell(), 0.0);
CHECK_EQ(weight.bonus(), 3.0);
CHECK_EQ(weight.increasement(), 0.0);
CHECK_EQ(weight.totalCount(), 51728);
CHECK_EQ(weight.freeCount(), 35721);
weight = weightList.back();
CHECK_EQ(weight.datetime(), Datetime(199605270000));
CHECK_EQ(weight.countAsGift(), 5.0);
CHECK_EQ(weight.countForSell(), 0.0);
CHECK_EQ(weight.priceForSell(), 0.0);
CHECK_EQ(weight.bonus(), 0.0);
CHECK_EQ(weight.increasement(), 5.0);
CHECK_EQ(weight.totalCount(), 103456);
CHECK_EQ(weight.freeCount(), 71393);
/** @arg 查询指定日期范围内的权息信息,指定的起始日期刚好存在对应权息记录,而结束日期没有 */
weightList = stock.getWeight(Datetime(199509250000), Datetime(199701010000));
CHECK_EQ(weightList.size(), 2);
weight = weightList.front();
CHECK_EQ(weight.datetime(), Datetime(199509250000));
CHECK_EQ(weight.countAsGift(), 2.0);
CHECK_EQ(weight.countForSell(), 0.0);
CHECK_EQ(weight.priceForSell(), 0.0);
CHECK_EQ(weight.bonus(), 3.0);
CHECK_EQ(weight.increasement(), 0.0);
CHECK_EQ(weight.totalCount(), 51728);
CHECK_EQ(weight.freeCount(), 35721);
weight = weightList.back();
CHECK_EQ(weight.datetime(), Datetime(199605270000));
CHECK_EQ(weight.countAsGift(), 5.0);
CHECK_EQ(weight.countForSell(), 0.0);
CHECK_EQ(weight.priceForSell(), 0.0);
CHECK_EQ(weight.bonus(), 0.0);
CHECK_EQ(weight.increasement(), 5.0);
CHECK_EQ(weight.totalCount(), 103456);
CHECK_EQ(weight.freeCount(), 71393);
/** @arg 查询指定日期范围内的权息信息,指定的结束日期刚好存在对应权息记录,而起始日期没有 */
weightList = stock.getWeight(Datetime(199501010000), Datetime(199605270000));
CHECK_EQ(weightList.size(), 1);
weight = weightList.front();
CHECK_EQ(weight.datetime(), Datetime(199509250000));
CHECK_EQ(weight.countAsGift(), 2.0);
CHECK_EQ(weight.countForSell(), 0.0);
CHECK_EQ(weight.priceForSell(), 0.0);
CHECK_EQ(weight.bonus(), 3.0);
CHECK_EQ(weight.increasement(), 0.0);
CHECK_EQ(weight.totalCount(), 51728);
CHECK_EQ(weight.freeCount(), 35721);
/** @arg 查询指定日期范围内的权息信息,结束日期为Null<Datetime>() */
weightList = stock.getWeight(Datetime(201101010000), Null<Datetime>());
CHECK_EQ(weightList.size(), 1);
weight = weightList.front();
CHECK_EQ(weight.datetime(), Datetime(201108050000));
CHECK_EQ(weight.countAsGift(), 0.0);
CHECK_EQ(weight.countForSell(), 0.0);
CHECK_EQ(weight.priceForSell(), 0.0);
CHECK_EQ(weight.bonus(), 0.0);
CHECK_EQ(weight.increasement(), 0.0);
CHECK_EQ(weight.totalCount(), 512335);
CHECK_EQ(weight.freeCount(), 310536);
/** @arg 查询指定日期范围内的权息信息,只指定起始日期,结束日期为默认值 */
weightList = stock.getWeight(Datetime(201101010000));
CHECK_EQ(weightList.size(), 1);
weight = weightList.front();
CHECK_EQ(weight.datetime(), Datetime(201108050000));
CHECK_EQ(weight.countAsGift(), 0.0);
CHECK_EQ(weight.countForSell(), 0.0);
CHECK_EQ(weight.priceForSell(), 0.0);
CHECK_EQ(weight.bonus(), 0.0);
CHECK_EQ(weight.increasement(), 0.0);
CHECK_EQ(weight.totalCount(), 512335);
CHECK_EQ(weight.freeCount(), 310536);
MEMORY_CHECK;
}
/** @par 检测点 */
TEST_CASE("test_Stock_getCount") {
StockManager& sm = StockManager::instance();
/** @arg 查询sh000001的日线数量*/
Stock stock = sm.getStock("sh000001");
CHECK_EQ(stock.getCount(KQuery::DAY), 5121);
/** @arg 查询sz000001的日线数量 */
stock = sm.getStock("Sz000001");
CHECK_EQ(stock.getCount(KQuery::DAY), 4937);
/** @arg 查询sh000001的周线数量*/
stock = sm.getStock("sh000001");
CHECK_EQ(stock.getCount(KQuery::WEEK), 1059);
/** @arg 查询sz000001的周线数量 */
stock = sm.getStock("Sz000001");
CHECK_EQ(stock.getCount(KQuery::WEEK), 1037);
/** @arg 查询sh000001的月线数量*/
stock = sm.getStock("sh000001");
CHECK_EQ(stock.getCount(KQuery::MONTH), 253);
/** @arg 查询sz000001的月线数量 */
stock = sm.getStock("Sz000001");
CHECK_EQ(stock.getCount(KQuery::MONTH), 250);
/** @arg 查询sh000001的季线数量*/
stock = sm.getStock("sh000001");
CHECK_EQ(stock.getCount(KQuery::QUARTER), 85);
/** @arg 查询sz000001的季线数量 */
stock = sm.getStock("Sz000001");
CHECK_EQ(stock.getCount(KQuery::QUARTER), 84);
/** @arg 查询sh000001的半年线数量*/
stock = sm.getStock("sh000001");
CHECK_EQ(stock.getCount(KQuery:
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++/Python的开源量化交易研究框架用于策略分析及回测(目前主要用于国内A股市场)
共1201个文件
cpp:437个
h:430个
py:150个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 139 浏览量
2024-04-14
08:24:15
上传
评论
收藏 53.74MB ZIP 举报
温馨提示
基于C++/Python的开源量化交易研究框架。Hikyuu Quant Framework是一款基于C++/Python的开源量化交易研究框架,用于策略分析及回测(目前主要用于国内A股市场)。其核心思想基于当前成熟的系统化交易方法,将整个系统化交易抽象为由市场环境判断策略、系统有效条件、信号指示器、止损/止盈策略、资金管理策略、盈利目标策略、移滑价差算法七大组件,你可以分别构建这些组件的策略资产库,在实际研究中对它们自由组合来观察系统的有效性、稳定性以及单一种类策略的效果。组合灵活,分类构建策略资产库 Hikyuu对系统化交易方法进行了良好的抽象,包含了九大策略组件:市场环境判断策略、系统有效条件、信号指示器、止损/止盈策略、资金管理策略、盈利目标策略、移滑价差算法、交易对象选择策略、资金分配策略。可以在此基础上构建自己的策略库,并进行灵活的组合和测试。在进行策略探索时,可以更加专注于某一方面的策略性能与影响性能保障,打造自己的专属应用 目前项目包含了3个主要组成部分:基于C++的核心库、对C++进行包装的Python库(hikyuu)、基于Python的交互式工具。代码简洁,探索更
资源推荐
资源详情
资源评论
收起资源包目录
基于C++/Python的开源量化交易研究框架用于策略分析及回测(目前主要用于国内A股市场) (1201个子文件)
make.bat 778B
.clang-format 3KB
test_Stock.cpp 87KB
TradeManager.cpp 78KB
_build_in.cpp 68KB
test_KData.cpp 60KB
IndicatorImp.cpp 46KB
System.cpp 41KB
H5KDataDriver.cpp 39KB
test_TradeManager.cpp 35KB
Stock.cpp 24KB
test_Indicator.cpp 23KB
_TradeManager.cpp 23KB
test_Datetime.cpp 22KB
AllocateFundsBase.cpp 21KB
StockManager.cpp 21KB
test_iniparser.cpp 20KB
Datetime.cpp 19KB
Performance.cpp 18KB
test_Simple_SYS_for_ev.cpp 16KB
KDataImp.cpp 16KB
MultiFactorBase.cpp 16KB
Portfolio.cpp 16KB
MySQLStatement.cpp 15KB
MySQLBaseInfoDriver.cpp 14KB
SQLiteBaseInfoDriver.cpp 14KB
MySQLKDataDriver.cpp 13KB
IniParser.cpp 13KB
test_TimeDelta.cpp 13KB
TdxKDataDriver.cpp 12KB
test_Simple_SYS_for_cn.cpp 12KB
test_ALIGN.cpp 12KB
_System.cpp 12KB
SQLiteKDataDriver.cpp 11KB
Indicator.cpp 11KB
_MultiFactor.cpp 10KB
_MoneyManager.cpp 10KB
StrategyBase.cpp 10KB
test_StockManager.cpp 9KB
Parameter.cpp 9KB
GlobalSpotAgent.cpp 9KB
os.cpp 9KB
test_Simple_SYS_for_pg.cpp 8KB
test_TransList.cpp 8KB
test_SPEARMAN.cpp 8KB
test_Simple_SYS_for_tp.cpp 8KB
test_MF_EqualWeight.cpp 8KB
SpotAgent.cpp 7KB
_Indicator.cpp 7KB
_Selector.cpp 7KB
_Signal.cpp 7KB
_StockManager.cpp 7KB
test_MA.cpp 7KB
test_RECOVER.cpp 7KB
test_TimeLine.cpp 7KB
MoneyManagerBase.cpp 7KB
_analysis.cpp 7KB
IAma.cpp 7KB
_Stock.cpp 7KB
test_MACD.cpp 7KB
test_Simple_SYS_for_base.cpp 7KB
test_export.cpp 7KB
test_SUMBARS.cpp 7KB
MySQLConnect.cpp 7KB
test_TIME.cpp 7KB
test_IKData.cpp 6KB
test_Simple_SYS_for_st.cpp 6KB
KDataTempCsvDriver.cpp 6KB
SQLiteConnect.cpp 6KB
test_Parameter.cpp 6KB
_Datetime.cpp 6KB
test_SAFTYLOSS.cpp 6KB
DataDriverFactory.cpp 6KB
TimeDelta.cpp 6KB
test_LLVBARS.cpp 6KB
test_mysql.cpp 6KB
KQuery.cpp 6KB
test_HHVBARS.cpp 6KB
test_sqlite.cpp 6KB
test_crtFixedATC.cpp 6KB
IKData.cpp 6KB
test_FILTER.cpp 6KB
main.cpp 5KB
_TimeDelta.cpp 5KB
IAlign.cpp 5KB
test_AMA.cpp 5KB
_Stoploss.cpp 5KB
QLBlockInfoDriver.cpp 5KB
_ProfitGoal.cpp 5KB
ISaftyLoss.cpp 5KB
test_LAST.cpp 5KB
SQLiteStatement.cpp 5KB
test_EVERY.cpp 5KB
_Condition.cpp 5KB
test_IC.cpp 5KB
test_EXIST.cpp 5KB
ICMultiFactor.cpp 5KB
test_BACKSET.cpp 5KB
test_ZHBOND10.cpp 5KB
IMacd.cpp 5KB
共 1201 条
- 1
- 2
- 3
- 4
- 5
- 6
- 13
资源评论
传奇开心果编程
- 粉丝: 8099
- 资源: 335
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功