hikyuu 2.3.1__py3-none-win_amd64.whl → 2.5.1__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hikyuu/__init__.py +438 -6
- hikyuu/__init__.pyi +647 -496
- hikyuu/analysis/__init__.pyi +478 -466
- hikyuu/analysis/analysis.pyi +500 -486
- hikyuu/core.pyi +480 -468
- hikyuu/cpp/core310.pyd +0 -0
- hikyuu/cpp/core311.pyd +0 -0
- hikyuu/cpp/core312.pyd +0 -0
- hikyuu/cpp/core313.pyd +0 -0
- hikyuu/cpp/core38.pyd +0 -0
- hikyuu/cpp/core39.pyd +0 -0
- hikyuu/cpp/hikyuu.dll +0 -0
- hikyuu/cpp/hikyuu.lib +0 -0
- hikyuu/cpp/sqlite3.dll +0 -0
- hikyuu/data/common_mysql.py +24 -7
- hikyuu/data/common_pytdx.py +17 -1
- hikyuu/data/em_block_to_mysql.py +3 -2
- hikyuu/data/em_block_to_sqlite.py +8 -3
- hikyuu/data/mysql_upgrade/0026.sql +9 -0
- hikyuu/data/sqlite_upgrade/0026.sql +10 -0
- hikyuu/draw/__init__.pyi +35 -0
- hikyuu/draw/drawplot/__init__.pyi +134 -0
- hikyuu/draw/drawplot/bokeh_draw.pyi +796 -0
- hikyuu/draw/drawplot/common.pyi +10 -0
- hikyuu/draw/drawplot/echarts_draw.py +5 -12
- hikyuu/draw/drawplot/echarts_draw.pyi +682 -0
- hikyuu/draw/drawplot/matplotlib_draw.py +18 -3
- hikyuu/draw/drawplot/matplotlib_draw.pyi +1101 -0
- hikyuu/draw/elder.pyi +44 -0
- hikyuu/draw/kaufman.pyi +38 -0
- hikyuu/draw/volume.pyi +31 -0
- hikyuu/examples/notebook/Demo/Demo2.ipynb +1 -1
- hikyuu/extend.py +9 -3
- hikyuu/extend.pyi +524 -504
- hikyuu/fetcher/stock/zh_block_em.py +118 -51
- hikyuu/gui/data/EscapetimeThread.py +4 -4
- hikyuu/gui/data/ImportBlockInfoTask.py +3 -2
- hikyuu/gui/data/ImportHistoryFinanceTask.py +2 -0
- hikyuu/gui/data/MainWindow.py +48 -42
- hikyuu/gui/importdata.py +13 -26
- hikyuu/hub.py +2 -4
- hikyuu/hub.pyi +52 -58
- hikyuu/include/hikyuu/DataType.h +5 -0
- hikyuu/include/hikyuu/Stock.h +7 -0
- hikyuu/include/hikyuu/indicator/Indicator.h +1 -1
- hikyuu/include/hikyuu/indicator/Indicator2InImp.h +65 -0
- hikyuu/include/hikyuu/indicator/IndicatorImp.h +1 -3
- hikyuu/include/hikyuu/indicator/build_in.h +7 -0
- hikyuu/include/hikyuu/indicator/crt/COST.h +3 -0
- hikyuu/include/hikyuu/indicator/crt/CYCLE.h +24 -0
- hikyuu/include/hikyuu/indicator/crt/DISCARD.h +27 -0
- hikyuu/include/hikyuu/indicator/crt/HSL.h +1 -13
- hikyuu/include/hikyuu/indicator/crt/INBLOCK.h +31 -0
- hikyuu/include/hikyuu/indicator/crt/INDEX.h +35 -23
- hikyuu/include/hikyuu/indicator/crt/JUMPDOWN.h +24 -0
- hikyuu/include/hikyuu/indicator/crt/JUMPUP.h +24 -0
- hikyuu/include/hikyuu/indicator/crt/LASTVALUE.h +29 -0
- hikyuu/include/hikyuu/indicator/crt/LIUTONGPAN.h +1 -0
- hikyuu/include/hikyuu/indicator/crt/WINNER.h +38 -0
- hikyuu/include/hikyuu/indicator/imp/ICorr.h +6 -21
- hikyuu/include/hikyuu/indicator/imp/ICost.h +31 -0
- hikyuu/include/hikyuu/indicator/imp/ICycle.h +30 -0
- hikyuu/include/hikyuu/indicator/imp/IDiscard.h +28 -0
- hikyuu/include/hikyuu/indicator/imp/IDma.h +6 -23
- hikyuu/include/hikyuu/indicator/imp/IHsl.h +30 -0
- hikyuu/include/hikyuu/indicator/imp/IInBlock.h +30 -0
- hikyuu/include/hikyuu/indicator/imp/IIndex.h +26 -0
- hikyuu/include/hikyuu/indicator/imp/IJumpDown.h +24 -0
- hikyuu/include/hikyuu/indicator/imp/IJumpUp.h +24 -0
- hikyuu/include/hikyuu/indicator/imp/ILastValue.h +26 -0
- hikyuu/include/hikyuu/indicator/imp/ISpearman.h +5 -20
- hikyuu/include/hikyuu/indicator/imp/IWinner.h +26 -0
- hikyuu/include/hikyuu/indicator_talib/imp/TaMavp.h +5 -19
- hikyuu/include/hikyuu/indicator_talib/imp/ta_defines.h +12 -63
- hikyuu/include/hikyuu/indicator_talib/imp/ta_imp.h +7 -53
- hikyuu/include/hikyuu/strategy/RunPortfolioInStrategy.h +3 -4
- hikyuu/include/hikyuu/strategy/Strategy.h +4 -5
- hikyuu/include/hikyuu/trade_manage/TradeRecord.h +5 -1
- hikyuu/include/hikyuu/trade_sys/allocatefunds/build_in.h +1 -0
- hikyuu/include/hikyuu/trade_sys/allocatefunds/crt/AF_FixedWeightList.h +22 -0
- hikyuu/include/hikyuu/trade_sys/allocatefunds/imp/FixedWeightListAllocateFunds.h +25 -0
- hikyuu/include/hikyuu/trade_sys/moneymanager/MoneyManagerBase.h +17 -4
- hikyuu/include/hikyuu/trade_sys/moneymanager/build_in.h +2 -0
- hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedCapital.h +6 -0
- hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedCapitalFunds.h +26 -0
- hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedCountTps.h +27 -0
- hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedRisk.h +6 -0
- hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedUnits.h +6 -0
- hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_WilliamsFixedRisk.h +7 -0
- hikyuu/include/hikyuu/trade_sys/moneymanager/imp/FixedCapitalFundsMM.h +28 -0
- hikyuu/include/hikyuu/trade_sys/moneymanager/imp/FixedCountTpsMM.h +44 -0
- hikyuu/include/hikyuu/trade_sys/portfolio/Portfolio.h +38 -37
- hikyuu/include/hikyuu/trade_sys/portfolio/build_in.h +1 -0
- hikyuu/include/hikyuu/trade_sys/portfolio/crt/PF_Simple.h +25 -1
- hikyuu/include/hikyuu/trade_sys/portfolio/crt/PF_WithoutAF.h +50 -0
- hikyuu/include/hikyuu/trade_sys/portfolio/imp/SimplePortfolio.h +53 -0
- hikyuu/include/hikyuu/trade_sys/portfolio/imp/WithoutAFPortfolio.h +57 -0
- hikyuu/include/hikyuu/trade_sys/selector/imp/MultiFactorSelector.h +7 -0
- hikyuu/include/hikyuu/trade_sys/signal/SignalBase.h +51 -5
- hikyuu/include/hikyuu/trade_sys/signal/build_in.h +2 -0
- hikyuu/include/hikyuu/trade_sys/signal/crt/SG_Bool.h +2 -1
- hikyuu/include/hikyuu/trade_sys/signal/crt/SG_Logic.h +37 -0
- hikyuu/include/hikyuu/trade_sys/signal/crt/SG_OneSide.h +28 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/OneSideSignal.h +46 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/AddSignal.h +19 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/AddValueSignal.h +19 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/DivSignal.h +19 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/DivValueSignal.h +22 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/MulSignal.h +19 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/MulValueSignal.h +19 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/OperatorSignal.h +68 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/OperatorValueSignal.h +67 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/SubSignal.h +19 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/SubValueSignal.h +22 -0
- hikyuu/include/hikyuu/trade_sys/signal/imp/logic/__init__.py +1 -0
- hikyuu/include/hikyuu/trade_sys/stoploss/crt/ST_Indicator.h +1 -1
- hikyuu/include/hikyuu/trade_sys/stoploss/imp/IndicatorStoploss.h +3 -4
- hikyuu/include/hikyuu/utilities/FilterNode.h +2 -2
- hikyuu/include/hikyuu/utilities/Log.h +42 -15
- hikyuu/include/hikyuu/utilities/datetime/Datetime.h +1 -1
- hikyuu/include/hikyuu/utilities/datetime/TimeDelta.h +2 -2
- hikyuu/include/hikyuu/utilities/db_connect/DBCondition.h +4 -0
- hikyuu/include/hikyuu/utilities/db_connect/SQLResultSet.h +2 -2
- hikyuu/include/hikyuu/utilities/db_connect/mysql/MySQLConnect.h +5 -1
- hikyuu/include/hikyuu/utilities/node/NodeServer.h +4 -4
- hikyuu/include/hikyuu/utilities/thread/MQStealThreadPool.h +2 -2
- hikyuu/include/hikyuu/utilities/thread/MQThreadPool.h +2 -2
- hikyuu/include/hikyuu/utilities/thread/StealThreadPool.h +5 -5
- hikyuu/include/hikyuu/utilities/thread/ThreadPool.h +2 -2
- hikyuu/include/hikyuu/utilities/thread/algorithm.h +16 -10
- hikyuu/include/hikyuu/version.h +4 -4
- hikyuu/indicator/indicator.py +1 -0
- hikyuu/interactive.py +1 -318
- hikyuu/trade_manage/__init__.pyi +492 -478
- hikyuu/trade_manage/broker.pyi +18 -19
- hikyuu/trade_manage/broker_easytrader.pyi +4 -6
- hikyuu/trade_manage/broker_mail.pyi +24 -22
- hikyuu/trade_manage/trade.pyi +492 -478
- hikyuu/util/check.pyi +15 -17
- hikyuu/util/mylog.pyi +7 -8
- hikyuu/util/notebook.pyi +11 -9
- hikyuu/util/singleton.pyi +6 -8
- hikyuu/util/slice.pyi +2 -1
- {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/METADATA +2 -2
- {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/RECORD +149 -105
- {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/top_level.txt +1 -0
- hikyuu/cpp/__init__.pyi +0 -3
- hikyuu/cpp/core310.pyi +0 -12503
- hikyuu/cpp/core311.pyi +0 -12503
- hikyuu/cpp/core312.pyi +0 -12503
- hikyuu/cpp/core313.pyi +0 -12494
- hikyuu/cpp/core38.pyi +0 -12503
- hikyuu/cpp/core39.pyi +0 -12503
- hikyuu/deprecated.py +0 -651
- {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/LICENSE +0 -0
- {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/WHEEL +0 -0
- {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-18
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
#ifndef TRADE_SYS_PORTFOLIO_IMP_PF_WITHOUTAF_H_
|
|
10
|
+
#define TRADE_SYS_PORTFOLIO_IMP_PF_WITHOUTAF_H_
|
|
11
|
+
|
|
12
|
+
#include "../Portfolio.h"
|
|
13
|
+
#include "../../selector/crt/SE_Fixed.h"
|
|
14
|
+
#include "../../allocatefunds/crt/AF_EqualWeight.h"
|
|
15
|
+
|
|
16
|
+
namespace hku {
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @brief 无资金分配算法的投资组合
|
|
20
|
+
* @details
|
|
21
|
+
* <pre>
|
|
22
|
+
* 调仓模式 adjust_mode 说明:
|
|
23
|
+
* - "query" 模式,跟随输入参数 query 中的 ktype,此时 adjust_cycle 为以 query 中的 ktype
|
|
24
|
+
* 决定周期间隔;
|
|
25
|
+
* - "day" 模式,adjust_cycle 为调仓间隔天数
|
|
26
|
+
* - "week" | "month" | "quarter" | "year" 模式时,adjust_cycle
|
|
27
|
+
* 为对应的每周第N日、每月第n日、每季度第n日、每年第n日,在 delay_to_trading_day 为 false 时
|
|
28
|
+
* 如果当日不是交易日将会被跳过调仓;当 delay_to_trading_day 为 true时,如果当日不是交易日
|
|
29
|
+
* 将会顺延至当前周期内的第一个交易日,如指定每月第1日调仓,但当月1日不是交易日,则将顺延至当月
|
|
30
|
+
* 的第一个交易日
|
|
31
|
+
* </pre>
|
|
32
|
+
* @note 无资金分配算法模式下,仅支持全部在开盘时买卖或全部在收盘时买卖!
|
|
33
|
+
* @param tm 交易账户
|
|
34
|
+
* @param se 系统选择器
|
|
35
|
+
* @param adjust_cycle 调仓周期(受 adjust_mode 影响), 默认为1
|
|
36
|
+
* @param adjust_mode 调仓模式 "query" | "day" | "week" | "month" | "year"
|
|
37
|
+
* @param delay_to_trading_day true 时,如果当日不是交易日将会被顺延至当前周期内的第一个交易日
|
|
38
|
+
* @param trade_on_close 在收盘时执行交易
|
|
39
|
+
* @param sys_use_self_tm 使用原型系统自身交易账户进行计算(仅在无资金分配模式下有效),默认 false
|
|
40
|
+
* @param sell_at_not_selected 调仓日未选中的股票是否强制卖出,默认 false
|
|
41
|
+
* @return 组合实例
|
|
42
|
+
*/
|
|
43
|
+
PortfolioPtr HKU_API PF_WithoutAF(const TMPtr& tm = TradeManagerPtr(), const SEPtr& se = SE_Fixed(),
|
|
44
|
+
int adjust_cycle = 1, const string& adjust_mode = "query",
|
|
45
|
+
bool delay_to_trading_day = true, bool trade_on_close = true,
|
|
46
|
+
bool sys_use_self_tm = false, bool sell_at_not_selected = false);
|
|
47
|
+
|
|
48
|
+
} /* namespace hku */
|
|
49
|
+
|
|
50
|
+
#endif /* TRADE_SYS_PORTFOLIO_IMP_PF_WITHOUTAF_H_ */
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SimplePortfolio.h
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2016年2月21日
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#ifndef TRADE_SYS_PORTFOLIO_SIMPLE_H_
|
|
11
|
+
#define TRADE_SYS_PORTFOLIO_SIMPLE_H_
|
|
12
|
+
|
|
13
|
+
#include "hikyuu/trade_sys/allocatefunds/AllocateFundsBase.h"
|
|
14
|
+
#include "hikyuu/trade_sys/selector/SelectorBase.h"
|
|
15
|
+
#include "hikyuu/trade_sys/portfolio/Portfolio.h"
|
|
16
|
+
|
|
17
|
+
namespace hku {
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
* 资产组合
|
|
21
|
+
* @ingroup SimplePortfolio
|
|
22
|
+
*/
|
|
23
|
+
class HKU_API SimplePortfolio : public Portfolio {
|
|
24
|
+
PORTFOLIO_IMP(SimplePortfolio)
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
SimplePortfolio();
|
|
28
|
+
SimplePortfolio(const TradeManagerPtr& tm, const SelectorPtr& se, const AFPtr& af);
|
|
29
|
+
virtual ~SimplePortfolio();
|
|
30
|
+
|
|
31
|
+
private:
|
|
32
|
+
SystemList m_dlist_sys_list; // 因证券退市,无法执行卖出的系统(资产全部损失)
|
|
33
|
+
SystemWeightList m_delay_adjust_sys_list; // 延迟调仓卖出的系统列表
|
|
34
|
+
SystemWeightList m_tmp_selected_list;
|
|
35
|
+
SystemWeightList m_tmp_will_remove_sys;
|
|
36
|
+
|
|
37
|
+
//============================================
|
|
38
|
+
// 序列化支持
|
|
39
|
+
//============================================
|
|
40
|
+
#if HKU_SUPPORT_SERIALIZATION
|
|
41
|
+
private:
|
|
42
|
+
friend class boost::serialization::access;
|
|
43
|
+
template <class Archive>
|
|
44
|
+
void serialize(Archive& ar, const unsigned int version) {
|
|
45
|
+
ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Portfolio);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#endif /* HKU_SUPPORT_SERIALIZATION */
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
} /* namespace hku */
|
|
52
|
+
|
|
53
|
+
#endif /* TRADE_SYS_PORTFOLIO_SIMPLE_H_ */
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-18
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
#ifndef TRADE_SYS_PORTFOLIO_WITHOUTAF_H_
|
|
10
|
+
#define TRADE_SYS_PORTFOLIO_WITHOUTAF_H_
|
|
11
|
+
|
|
12
|
+
#include "hikyuu/trade_sys/portfolio/Portfolio.h"
|
|
13
|
+
|
|
14
|
+
namespace hku {
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* 无资金分配算法的资产组合
|
|
18
|
+
* @ingroup WithoutAFPortfolio
|
|
19
|
+
*/
|
|
20
|
+
class HKU_API WithoutAFPortfolio : public Portfolio {
|
|
21
|
+
PORTFOLIO_IMP(WithoutAFPortfolio)
|
|
22
|
+
|
|
23
|
+
public:
|
|
24
|
+
WithoutAFPortfolio();
|
|
25
|
+
WithoutAFPortfolio(const TradeManagerPtr& tm, const SelectorPtr& se);
|
|
26
|
+
virtual ~WithoutAFPortfolio();
|
|
27
|
+
|
|
28
|
+
private:
|
|
29
|
+
void initParam();
|
|
30
|
+
void _runMomentWithoutAFNotForceSell(const Datetime& date, const Datetime& nextCycle,
|
|
31
|
+
bool adjust);
|
|
32
|
+
void _runMomentWithoutAFForceSell(const Datetime& date, const Datetime& nextCycle, bool adjust);
|
|
33
|
+
|
|
34
|
+
private:
|
|
35
|
+
SystemList m_force_sell_sys_list; // 强制卖出的系统列表
|
|
36
|
+
list<SYSPtr> m_running_sys_list; // 当前运行中的系统列表,需要依次执行
|
|
37
|
+
SystemList m_selected_list; // 本轮周期内选中的系统列表
|
|
38
|
+
|
|
39
|
+
// 记录指派给SE的系统到内部实际系统映射
|
|
40
|
+
unordered_map<SYSPtr, SYSPtr> m_se_sys_to_pf_sys_dict;
|
|
41
|
+
|
|
42
|
+
//============================================
|
|
43
|
+
// 序列化支持
|
|
44
|
+
//============================================
|
|
45
|
+
#if HKU_SUPPORT_SERIALIZATION
|
|
46
|
+
private:
|
|
47
|
+
friend class boost::serialization::access;
|
|
48
|
+
template <class Archive>
|
|
49
|
+
void serialize(Archive& ar, const unsigned int version) {
|
|
50
|
+
ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Portfolio);
|
|
51
|
+
}
|
|
52
|
+
#endif /* HKU_SUPPORT_SERIALIZATION */
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
} /* namespace hku */
|
|
56
|
+
|
|
57
|
+
#endif /* TRADE_SYS_PORTFOLIO_WITHOUTAF_H_ */
|
|
@@ -30,6 +30,13 @@ public:
|
|
|
30
30
|
m_inds = inds;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
private:
|
|
34
|
+
ScoreRecordList filterOnlyShouldBuy(Datetime date, const ScoreRecordList& scores, size_t topn);
|
|
35
|
+
ScoreRecordList filterTopN(Datetime date, const ScoreRecordList& raw_scores, size_t topn,
|
|
36
|
+
bool only_should_buy);
|
|
37
|
+
ScoreRecordList filterTopNReverse(Datetime date, const ScoreRecordList& raw_scores, size_t topn,
|
|
38
|
+
bool only_should_buy, bool ignore_null);
|
|
39
|
+
|
|
33
40
|
private:
|
|
34
41
|
IndicatorList m_inds;
|
|
35
42
|
MFPtr m_mf;
|
|
@@ -44,6 +44,22 @@ public:
|
|
|
44
44
|
*/
|
|
45
45
|
bool shouldSell(const Datetime& datetime) const;
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* 获取指定时刻的买入信号数值,返回值小于等于0时,表示无买入信号
|
|
49
|
+
* @param datetime
|
|
50
|
+
* @return double
|
|
51
|
+
*/
|
|
52
|
+
double getBuyValue(const Datetime& datetime) const;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* 获取指定时刻的买出信号数值,返回值大于等于0时,表示无卖出信号
|
|
56
|
+
* @param datetime
|
|
57
|
+
* @return double
|
|
58
|
+
*/
|
|
59
|
+
double getSellValue(const Datetime& datetime) const;
|
|
60
|
+
|
|
61
|
+
double getValue(const Datetime& datetime) const;
|
|
62
|
+
|
|
47
63
|
/**
|
|
48
64
|
* 下一时刻是否可以买入,相当于最后时刻是否指示买入
|
|
49
65
|
*/
|
|
@@ -60,17 +76,21 @@ public:
|
|
|
60
76
|
/** 获取所有卖出指示日期列表 */
|
|
61
77
|
DatetimeList getSellSignal() const;
|
|
62
78
|
|
|
79
|
+
void _addSignal(const Datetime& datetime, double value);
|
|
80
|
+
|
|
63
81
|
/**
|
|
64
82
|
* 加入买入信号,在_calculate中调用
|
|
65
83
|
* @param datetime 发生买入信号的日期
|
|
84
|
+
* @param value 信号值,默认为1.0, 必须大于0,否则抛出异常
|
|
66
85
|
*/
|
|
67
|
-
void _addBuySignal(const Datetime& datetime);
|
|
86
|
+
void _addBuySignal(const Datetime& datetime, double value = 1.0);
|
|
68
87
|
|
|
69
88
|
/**
|
|
70
89
|
* 加入卖出信号,在_calculate中调用
|
|
71
90
|
* @param datetime
|
|
91
|
+
* @param value 信号值,默认为-1.0,必须小于0,否则抛出异常
|
|
72
92
|
*/
|
|
73
|
-
void _addSellSignal(const Datetime& datetime);
|
|
93
|
+
void _addSellSignal(const Datetime& datetime, double value = -1.0);
|
|
74
94
|
|
|
75
95
|
/**
|
|
76
96
|
* 指定交易对象,指K线数据
|
|
@@ -87,6 +107,9 @@ public:
|
|
|
87
107
|
void startCycle(const Datetime& start, const Datetime& end);
|
|
88
108
|
const Datetime& getCycleStart() const;
|
|
89
109
|
const Datetime& getCycleEnd() const;
|
|
110
|
+
bool ignoreCycle() const {
|
|
111
|
+
return m_ignore_cycle;
|
|
112
|
+
}
|
|
90
113
|
|
|
91
114
|
/** 复位操作 */
|
|
92
115
|
void reset();
|
|
@@ -116,17 +139,20 @@ private:
|
|
|
116
139
|
protected:
|
|
117
140
|
string m_name;
|
|
118
141
|
KData m_kdata;
|
|
142
|
+
bool m_calculated{false}; // 仅针对 setTO 时的计算
|
|
143
|
+
|
|
119
144
|
/* 多头持仓 */
|
|
120
145
|
bool m_hold_long;
|
|
121
146
|
/* 空头持仓 */
|
|
122
147
|
bool m_hold_short;
|
|
123
148
|
|
|
124
|
-
// 用
|
|
125
|
-
std::
|
|
126
|
-
std::
|
|
149
|
+
// 用 map 保存,以便获取是能保持顺序
|
|
150
|
+
std::map<Datetime, double> m_buySig;
|
|
151
|
+
std::map<Datetime, double> m_sellSig;
|
|
127
152
|
|
|
128
153
|
Datetime m_cycle_start;
|
|
129
154
|
Datetime m_cycle_end;
|
|
155
|
+
bool m_ignore_cycle{false}; // 特殊用途,用于 OperatorSignal
|
|
130
156
|
|
|
131
157
|
//============================================
|
|
132
158
|
// 序列化支持
|
|
@@ -142,8 +168,10 @@ private:
|
|
|
142
168
|
ar& BOOST_SERIALIZATION_NVP(m_hold_short);
|
|
143
169
|
ar& BOOST_SERIALIZATION_NVP(m_buySig);
|
|
144
170
|
ar& BOOST_SERIALIZATION_NVP(m_sellSig);
|
|
171
|
+
ar& BOOST_SERIALIZATION_NVP(m_ignore_cycle);
|
|
145
172
|
// m_kdata都是系统运行时临时设置,不需要序列化
|
|
146
173
|
// ar & BOOST_SERIALIZATION_NVP(m_kdata);
|
|
174
|
+
// ar & BOOST_SERIALIZATION_NVP(m_calculated);
|
|
147
175
|
}
|
|
148
176
|
|
|
149
177
|
template <class Archive>
|
|
@@ -154,8 +182,10 @@ private:
|
|
|
154
182
|
ar& BOOST_SERIALIZATION_NVP(m_hold_short);
|
|
155
183
|
ar& BOOST_SERIALIZATION_NVP(m_buySig);
|
|
156
184
|
ar& BOOST_SERIALIZATION_NVP(m_sellSig);
|
|
185
|
+
ar& BOOST_SERIALIZATION_NVP(m_ignore_cycle);
|
|
157
186
|
// m_kdata都是系统运行时临时设置,不需要序列化
|
|
158
187
|
// ar & BOOST_SERIALIZATION_NVP(m_kdata);
|
|
188
|
+
// ar & BOOST_SERIALIZATION_NVP(m_calculated);
|
|
159
189
|
}
|
|
160
190
|
|
|
161
191
|
BOOST_SERIALIZATION_SPLIT_MEMBER()
|
|
@@ -236,6 +266,22 @@ inline const Datetime& SignalBase::getCycleEnd() const {
|
|
|
236
266
|
return m_cycle_end;
|
|
237
267
|
}
|
|
238
268
|
|
|
269
|
+
inline double SignalBase::getValue(const Datetime& datetime) const {
|
|
270
|
+
return getBuyValue(datetime) + getSellValue(datetime);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
inline void SignalBase::_addBuySignal(const Datetime& datetime, double value) {
|
|
274
|
+
HKU_IF_RETURN(std::isnan(value), void());
|
|
275
|
+
HKU_CHECK(value > 0.0, "buy value muse be > 0", value);
|
|
276
|
+
_addSignal(datetime, value);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
inline void SignalBase::_addSellSignal(const Datetime& datetime, double value) {
|
|
280
|
+
HKU_IF_RETURN(std::isnan(value), void());
|
|
281
|
+
HKU_CHECK(value < 0.0, "sell value muse be > 0", value);
|
|
282
|
+
_addSignal(datetime, value);
|
|
283
|
+
}
|
|
284
|
+
|
|
239
285
|
} /* namespace hku */
|
|
240
286
|
|
|
241
287
|
#if FMT_VERSION >= 90000
|
|
@@ -18,10 +18,11 @@ namespace hku {
|
|
|
18
18
|
* 布尔信号指示器
|
|
19
19
|
* @param buy 买入指示(结果Indicator中相应位置>0则代表买入)
|
|
20
20
|
* @param sell 卖出指示(结果Indicator中相应位置>0则代表卖出)
|
|
21
|
+
* @param alternate 买入与卖出信号是否交替出现,默认为true
|
|
21
22
|
* @return 信号指示器
|
|
22
23
|
* @ingroup Signal
|
|
23
24
|
*/
|
|
24
|
-
SignalPtr HKU_API SG_Bool(const Indicator& buy, const Indicator& sell);
|
|
25
|
+
SignalPtr HKU_API SG_Bool(const Indicator& buy, const Indicator& sell, bool alternate = true);
|
|
25
26
|
|
|
26
27
|
} /* namespace hku */
|
|
27
28
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-08
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include "../SignalBase.h"
|
|
11
|
+
|
|
12
|
+
namespace hku {
|
|
13
|
+
|
|
14
|
+
HKU_API SignalPtr operator+(const SignalPtr& sg1, const SignalPtr& sg2);
|
|
15
|
+
HKU_API SignalPtr operator-(const SignalPtr& sg1, const SignalPtr& sg2);
|
|
16
|
+
HKU_API SignalPtr operator*(const SignalPtr& sg1, const SignalPtr& sg2);
|
|
17
|
+
HKU_API SignalPtr operator/(const SignalPtr& sg1, const SignalPtr& sg2);
|
|
18
|
+
|
|
19
|
+
HKU_API SignalPtr operator+(const SignalPtr& sg, double value);
|
|
20
|
+
HKU_API SignalPtr operator-(const SignalPtr& sg, double value);
|
|
21
|
+
HKU_API SignalPtr operator*(const SignalPtr& sg, double value);
|
|
22
|
+
HKU_API SignalPtr operator/(const SignalPtr& sg, double value);
|
|
23
|
+
|
|
24
|
+
HKU_API SignalPtr operator+(double value, const SignalPtr& sg);
|
|
25
|
+
HKU_API SignalPtr operator-(double value, const SignalPtr& sg);
|
|
26
|
+
HKU_API SignalPtr operator*(double value, const SignalPtr& sg);
|
|
27
|
+
HKU_API SignalPtr operator/(double value, const SignalPtr& sg);
|
|
28
|
+
|
|
29
|
+
inline SignalPtr operator&(const SignalPtr& sg1, const SignalPtr& sg2) {
|
|
30
|
+
return sg1 * sg2;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
inline SignalPtr operator|(const SignalPtr& sg1, const SignalPtr& sg2) {
|
|
34
|
+
return sg1 + sg2;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
} // namespace hku
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-13
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
#ifndef TRADE_SYS_SIGNAL_CRT_SG_ONESIDE_H_
|
|
10
|
+
#define TRADE_SYS_SIGNAL_CRT_SG_ONESIDE_H_
|
|
11
|
+
|
|
12
|
+
#include "../../../indicator/Indicator.h"
|
|
13
|
+
#include "../SignalBase.h"
|
|
14
|
+
|
|
15
|
+
namespace hku {
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* 根据输入指标构建单边信号(单纯的只包含买入或卖出信号),如果指标值大于0,则加入信号
|
|
19
|
+
* @param ind 指示指标
|
|
20
|
+
* @param is_buy 加入的是买入信号还是卖出信号
|
|
21
|
+
* @return 信号指示器
|
|
22
|
+
* @ingroup Signal
|
|
23
|
+
*/
|
|
24
|
+
SignalPtr HKU_API SG_OneSide(const Indicator& ind, bool is_buy);
|
|
25
|
+
|
|
26
|
+
} /* namespace hku */
|
|
27
|
+
|
|
28
|
+
#endif /* TRADE_SYS_SIGNAL_CRT_SG_ONESIDE_H_ */
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-13
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
#ifndef TRADE_SYS_SIGNAL_IMP_ONESIDESIGNAL_H_
|
|
10
|
+
#define TRADE_SYS_SIGNAL_IMP_ONESIDESIGNAL_H_
|
|
11
|
+
|
|
12
|
+
#include "../../../indicator/Indicator.h"
|
|
13
|
+
#include "../SignalBase.h"
|
|
14
|
+
|
|
15
|
+
namespace hku {
|
|
16
|
+
|
|
17
|
+
// 根据输入指标构建单边信号(单纯的只包含买入或卖出信号),如果指标值大于0,则加入信号
|
|
18
|
+
class OneSideSignal : public SignalBase {
|
|
19
|
+
public:
|
|
20
|
+
OneSideSignal();
|
|
21
|
+
OneSideSignal(const Indicator& ind, bool is_buy);
|
|
22
|
+
virtual ~OneSideSignal();
|
|
23
|
+
|
|
24
|
+
virtual SignalPtr _clone() override;
|
|
25
|
+
virtual void _calculate(const KData& kdata) override;
|
|
26
|
+
virtual void _checkParam(const string& name) const override;
|
|
27
|
+
|
|
28
|
+
private:
|
|
29
|
+
Indicator m_ind;
|
|
30
|
+
|
|
31
|
+
//============================================
|
|
32
|
+
// 序列化支持
|
|
33
|
+
//============================================
|
|
34
|
+
#if HKU_SUPPORT_SERIALIZATION
|
|
35
|
+
friend class boost::serialization::access;
|
|
36
|
+
template <class Archive>
|
|
37
|
+
void serialize(Archive& ar, const unsigned int version) {
|
|
38
|
+
ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(SignalBase);
|
|
39
|
+
ar& BOOST_SERIALIZATION_NVP(m_ind);
|
|
40
|
+
}
|
|
41
|
+
#endif
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
} /* namespace hku */
|
|
45
|
+
|
|
46
|
+
#endif /* TRADE_SYS_SIGNAL_IMP_ONESIDESIGNAL_H_ */
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-08
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include "OperatorSignal.h"
|
|
11
|
+
|
|
12
|
+
namespace hku {
|
|
13
|
+
|
|
14
|
+
class AddSignal : public OperatorSignal {
|
|
15
|
+
OPERATOR_SIGNAL_IMP(AddSignal, "SG_Add")
|
|
16
|
+
OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
} /* namespace hku */
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-08
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include "OperatorValueSignal.h"
|
|
11
|
+
|
|
12
|
+
namespace hku {
|
|
13
|
+
|
|
14
|
+
class AddValueSignal : public OperatorValueSignal {
|
|
15
|
+
OPERATOR_SIGNAL_IMP(AddValueSignal, "SG_AddValue")
|
|
16
|
+
OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
} /* namespace hku */
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-08
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include "OperatorSignal.h"
|
|
11
|
+
|
|
12
|
+
namespace hku {
|
|
13
|
+
|
|
14
|
+
class DivSignal : public OperatorSignal {
|
|
15
|
+
OPERATOR_SIGNAL_IMP(DivSignal, "SG_Div")
|
|
16
|
+
OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
} /* namespace hku */
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-08
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include "OperatorValueSignal.h"
|
|
11
|
+
|
|
12
|
+
namespace hku {
|
|
13
|
+
|
|
14
|
+
class DivValueSignal : public OperatorValueSignal {
|
|
15
|
+
OPERATOR_SIGNAL_IMP(DivValueSignal, "SG_DivValue")
|
|
16
|
+
OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
|
|
17
|
+
|
|
18
|
+
public:
|
|
19
|
+
DivValueSignal(double value, const SignalPtr& sg);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
} /* namespace hku */
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-08
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include "OperatorSignal.h"
|
|
11
|
+
|
|
12
|
+
namespace hku {
|
|
13
|
+
|
|
14
|
+
class MulSignal : public OperatorSignal {
|
|
15
|
+
OPERATOR_SIGNAL_IMP(MulSignal, "SG_Mul")
|
|
16
|
+
OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
} /* namespace hku */
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-08
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include "OperatorValueSignal.h"
|
|
11
|
+
|
|
12
|
+
namespace hku {
|
|
13
|
+
|
|
14
|
+
class MulValueSignal : public OperatorValueSignal {
|
|
15
|
+
OPERATOR_SIGNAL_IMP(MulValueSignal, "SG_MulValue")
|
|
16
|
+
OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
} /* namespace hku */
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 hikyuu.org
|
|
3
|
+
*
|
|
4
|
+
* Created on: 2025-02-08
|
|
5
|
+
* Author: fasiondog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include "hikyuu/trade_sys/signal/SignalBase.h"
|
|
11
|
+
|
|
12
|
+
namespace hku {
|
|
13
|
+
|
|
14
|
+
class OperatorSignal : public SignalBase {
|
|
15
|
+
public:
|
|
16
|
+
OperatorSignal();
|
|
17
|
+
explicit OperatorSignal(const string& name);
|
|
18
|
+
OperatorSignal(const string& name, const SignalPtr& sg1, const SignalPtr& sg2);
|
|
19
|
+
virtual ~OperatorSignal();
|
|
20
|
+
|
|
21
|
+
virtual void _reset() override;
|
|
22
|
+
virtual SignalPtr _clone() override;
|
|
23
|
+
virtual void _calculate(const KData& kdata) override {}
|
|
24
|
+
|
|
25
|
+
protected:
|
|
26
|
+
void sub_sg_calculate(SignalPtr& sg, const KData& kdata);
|
|
27
|
+
|
|
28
|
+
protected:
|
|
29
|
+
SignalPtr m_sg1;
|
|
30
|
+
SignalPtr m_sg2;
|
|
31
|
+
|
|
32
|
+
//============================================
|
|
33
|
+
// 序列化支持
|
|
34
|
+
//============================================
|
|
35
|
+
#if HKU_SUPPORT_SERIALIZATION
|
|
36
|
+
friend class boost::serialization::access;
|
|
37
|
+
template <class Archive>
|
|
38
|
+
void serialize(Archive& ar, const unsigned int version) {
|
|
39
|
+
ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(SignalBase);
|
|
40
|
+
ar& BOOST_SERIALIZATION_NVP(m_sg1);
|
|
41
|
+
ar& BOOST_SERIALIZATION_NVP(m_sg2);
|
|
42
|
+
}
|
|
43
|
+
#endif
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
#define OPERATOR_SIGNAL_IMP(classname, name) \
|
|
47
|
+
public: \
|
|
48
|
+
classname() : OperatorSignal(name) {} \
|
|
49
|
+
classname(const SignalPtr& sg1, const SignalPtr& sg2) : OperatorSignal(name, sg1, sg2) {} \
|
|
50
|
+
virtual ~classname() {} \
|
|
51
|
+
virtual SignalPtr _clone() override { \
|
|
52
|
+
return make_shared<classname>(m_sg1, m_sg2); \
|
|
53
|
+
} \
|
|
54
|
+
virtual void _calculate(const KData&) override;
|
|
55
|
+
|
|
56
|
+
#if HKU_SUPPORT_SERIALIZATION
|
|
57
|
+
#define OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION \
|
|
58
|
+
private: \
|
|
59
|
+
friend class boost::serialization::access; \
|
|
60
|
+
template <class Archive> \
|
|
61
|
+
void serialize(Archive& ar, const unsigned int version) { \
|
|
62
|
+
ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(OperatorSignal); \
|
|
63
|
+
}
|
|
64
|
+
#else
|
|
65
|
+
#define OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
|
|
66
|
+
#endif
|
|
67
|
+
|
|
68
|
+
} /* namespace hku */
|