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.
Files changed (157) hide show
  1. hikyuu/__init__.py +438 -6
  2. hikyuu/__init__.pyi +647 -496
  3. hikyuu/analysis/__init__.pyi +478 -466
  4. hikyuu/analysis/analysis.pyi +500 -486
  5. hikyuu/core.pyi +480 -468
  6. hikyuu/cpp/core310.pyd +0 -0
  7. hikyuu/cpp/core311.pyd +0 -0
  8. hikyuu/cpp/core312.pyd +0 -0
  9. hikyuu/cpp/core313.pyd +0 -0
  10. hikyuu/cpp/core38.pyd +0 -0
  11. hikyuu/cpp/core39.pyd +0 -0
  12. hikyuu/cpp/hikyuu.dll +0 -0
  13. hikyuu/cpp/hikyuu.lib +0 -0
  14. hikyuu/cpp/sqlite3.dll +0 -0
  15. hikyuu/data/common_mysql.py +24 -7
  16. hikyuu/data/common_pytdx.py +17 -1
  17. hikyuu/data/em_block_to_mysql.py +3 -2
  18. hikyuu/data/em_block_to_sqlite.py +8 -3
  19. hikyuu/data/mysql_upgrade/0026.sql +9 -0
  20. hikyuu/data/sqlite_upgrade/0026.sql +10 -0
  21. hikyuu/draw/__init__.pyi +35 -0
  22. hikyuu/draw/drawplot/__init__.pyi +134 -0
  23. hikyuu/draw/drawplot/bokeh_draw.pyi +796 -0
  24. hikyuu/draw/drawplot/common.pyi +10 -0
  25. hikyuu/draw/drawplot/echarts_draw.py +5 -12
  26. hikyuu/draw/drawplot/echarts_draw.pyi +682 -0
  27. hikyuu/draw/drawplot/matplotlib_draw.py +18 -3
  28. hikyuu/draw/drawplot/matplotlib_draw.pyi +1101 -0
  29. hikyuu/draw/elder.pyi +44 -0
  30. hikyuu/draw/kaufman.pyi +38 -0
  31. hikyuu/draw/volume.pyi +31 -0
  32. hikyuu/examples/notebook/Demo/Demo2.ipynb +1 -1
  33. hikyuu/extend.py +9 -3
  34. hikyuu/extend.pyi +524 -504
  35. hikyuu/fetcher/stock/zh_block_em.py +118 -51
  36. hikyuu/gui/data/EscapetimeThread.py +4 -4
  37. hikyuu/gui/data/ImportBlockInfoTask.py +3 -2
  38. hikyuu/gui/data/ImportHistoryFinanceTask.py +2 -0
  39. hikyuu/gui/data/MainWindow.py +48 -42
  40. hikyuu/gui/importdata.py +13 -26
  41. hikyuu/hub.py +2 -4
  42. hikyuu/hub.pyi +52 -58
  43. hikyuu/include/hikyuu/DataType.h +5 -0
  44. hikyuu/include/hikyuu/Stock.h +7 -0
  45. hikyuu/include/hikyuu/indicator/Indicator.h +1 -1
  46. hikyuu/include/hikyuu/indicator/Indicator2InImp.h +65 -0
  47. hikyuu/include/hikyuu/indicator/IndicatorImp.h +1 -3
  48. hikyuu/include/hikyuu/indicator/build_in.h +7 -0
  49. hikyuu/include/hikyuu/indicator/crt/COST.h +3 -0
  50. hikyuu/include/hikyuu/indicator/crt/CYCLE.h +24 -0
  51. hikyuu/include/hikyuu/indicator/crt/DISCARD.h +27 -0
  52. hikyuu/include/hikyuu/indicator/crt/HSL.h +1 -13
  53. hikyuu/include/hikyuu/indicator/crt/INBLOCK.h +31 -0
  54. hikyuu/include/hikyuu/indicator/crt/INDEX.h +35 -23
  55. hikyuu/include/hikyuu/indicator/crt/JUMPDOWN.h +24 -0
  56. hikyuu/include/hikyuu/indicator/crt/JUMPUP.h +24 -0
  57. hikyuu/include/hikyuu/indicator/crt/LASTVALUE.h +29 -0
  58. hikyuu/include/hikyuu/indicator/crt/LIUTONGPAN.h +1 -0
  59. hikyuu/include/hikyuu/indicator/crt/WINNER.h +38 -0
  60. hikyuu/include/hikyuu/indicator/imp/ICorr.h +6 -21
  61. hikyuu/include/hikyuu/indicator/imp/ICost.h +31 -0
  62. hikyuu/include/hikyuu/indicator/imp/ICycle.h +30 -0
  63. hikyuu/include/hikyuu/indicator/imp/IDiscard.h +28 -0
  64. hikyuu/include/hikyuu/indicator/imp/IDma.h +6 -23
  65. hikyuu/include/hikyuu/indicator/imp/IHsl.h +30 -0
  66. hikyuu/include/hikyuu/indicator/imp/IInBlock.h +30 -0
  67. hikyuu/include/hikyuu/indicator/imp/IIndex.h +26 -0
  68. hikyuu/include/hikyuu/indicator/imp/IJumpDown.h +24 -0
  69. hikyuu/include/hikyuu/indicator/imp/IJumpUp.h +24 -0
  70. hikyuu/include/hikyuu/indicator/imp/ILastValue.h +26 -0
  71. hikyuu/include/hikyuu/indicator/imp/ISpearman.h +5 -20
  72. hikyuu/include/hikyuu/indicator/imp/IWinner.h +26 -0
  73. hikyuu/include/hikyuu/indicator_talib/imp/TaMavp.h +5 -19
  74. hikyuu/include/hikyuu/indicator_talib/imp/ta_defines.h +12 -63
  75. hikyuu/include/hikyuu/indicator_talib/imp/ta_imp.h +7 -53
  76. hikyuu/include/hikyuu/strategy/RunPortfolioInStrategy.h +3 -4
  77. hikyuu/include/hikyuu/strategy/Strategy.h +4 -5
  78. hikyuu/include/hikyuu/trade_manage/TradeRecord.h +5 -1
  79. hikyuu/include/hikyuu/trade_sys/allocatefunds/build_in.h +1 -0
  80. hikyuu/include/hikyuu/trade_sys/allocatefunds/crt/AF_FixedWeightList.h +22 -0
  81. hikyuu/include/hikyuu/trade_sys/allocatefunds/imp/FixedWeightListAllocateFunds.h +25 -0
  82. hikyuu/include/hikyuu/trade_sys/moneymanager/MoneyManagerBase.h +17 -4
  83. hikyuu/include/hikyuu/trade_sys/moneymanager/build_in.h +2 -0
  84. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedCapital.h +6 -0
  85. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedCapitalFunds.h +26 -0
  86. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedCountTps.h +27 -0
  87. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedRisk.h +6 -0
  88. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedUnits.h +6 -0
  89. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_WilliamsFixedRisk.h +7 -0
  90. hikyuu/include/hikyuu/trade_sys/moneymanager/imp/FixedCapitalFundsMM.h +28 -0
  91. hikyuu/include/hikyuu/trade_sys/moneymanager/imp/FixedCountTpsMM.h +44 -0
  92. hikyuu/include/hikyuu/trade_sys/portfolio/Portfolio.h +38 -37
  93. hikyuu/include/hikyuu/trade_sys/portfolio/build_in.h +1 -0
  94. hikyuu/include/hikyuu/trade_sys/portfolio/crt/PF_Simple.h +25 -1
  95. hikyuu/include/hikyuu/trade_sys/portfolio/crt/PF_WithoutAF.h +50 -0
  96. hikyuu/include/hikyuu/trade_sys/portfolio/imp/SimplePortfolio.h +53 -0
  97. hikyuu/include/hikyuu/trade_sys/portfolio/imp/WithoutAFPortfolio.h +57 -0
  98. hikyuu/include/hikyuu/trade_sys/selector/imp/MultiFactorSelector.h +7 -0
  99. hikyuu/include/hikyuu/trade_sys/signal/SignalBase.h +51 -5
  100. hikyuu/include/hikyuu/trade_sys/signal/build_in.h +2 -0
  101. hikyuu/include/hikyuu/trade_sys/signal/crt/SG_Bool.h +2 -1
  102. hikyuu/include/hikyuu/trade_sys/signal/crt/SG_Logic.h +37 -0
  103. hikyuu/include/hikyuu/trade_sys/signal/crt/SG_OneSide.h +28 -0
  104. hikyuu/include/hikyuu/trade_sys/signal/imp/OneSideSignal.h +46 -0
  105. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/AddSignal.h +19 -0
  106. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/AddValueSignal.h +19 -0
  107. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/DivSignal.h +19 -0
  108. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/DivValueSignal.h +22 -0
  109. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/MulSignal.h +19 -0
  110. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/MulValueSignal.h +19 -0
  111. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/OperatorSignal.h +68 -0
  112. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/OperatorValueSignal.h +67 -0
  113. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/SubSignal.h +19 -0
  114. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/SubValueSignal.h +22 -0
  115. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/__init__.py +1 -0
  116. hikyuu/include/hikyuu/trade_sys/stoploss/crt/ST_Indicator.h +1 -1
  117. hikyuu/include/hikyuu/trade_sys/stoploss/imp/IndicatorStoploss.h +3 -4
  118. hikyuu/include/hikyuu/utilities/FilterNode.h +2 -2
  119. hikyuu/include/hikyuu/utilities/Log.h +42 -15
  120. hikyuu/include/hikyuu/utilities/datetime/Datetime.h +1 -1
  121. hikyuu/include/hikyuu/utilities/datetime/TimeDelta.h +2 -2
  122. hikyuu/include/hikyuu/utilities/db_connect/DBCondition.h +4 -0
  123. hikyuu/include/hikyuu/utilities/db_connect/SQLResultSet.h +2 -2
  124. hikyuu/include/hikyuu/utilities/db_connect/mysql/MySQLConnect.h +5 -1
  125. hikyuu/include/hikyuu/utilities/node/NodeServer.h +4 -4
  126. hikyuu/include/hikyuu/utilities/thread/MQStealThreadPool.h +2 -2
  127. hikyuu/include/hikyuu/utilities/thread/MQThreadPool.h +2 -2
  128. hikyuu/include/hikyuu/utilities/thread/StealThreadPool.h +5 -5
  129. hikyuu/include/hikyuu/utilities/thread/ThreadPool.h +2 -2
  130. hikyuu/include/hikyuu/utilities/thread/algorithm.h +16 -10
  131. hikyuu/include/hikyuu/version.h +4 -4
  132. hikyuu/indicator/indicator.py +1 -0
  133. hikyuu/interactive.py +1 -318
  134. hikyuu/trade_manage/__init__.pyi +492 -478
  135. hikyuu/trade_manage/broker.pyi +18 -19
  136. hikyuu/trade_manage/broker_easytrader.pyi +4 -6
  137. hikyuu/trade_manage/broker_mail.pyi +24 -22
  138. hikyuu/trade_manage/trade.pyi +492 -478
  139. hikyuu/util/check.pyi +15 -17
  140. hikyuu/util/mylog.pyi +7 -8
  141. hikyuu/util/notebook.pyi +11 -9
  142. hikyuu/util/singleton.pyi +6 -8
  143. hikyuu/util/slice.pyi +2 -1
  144. {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/METADATA +2 -2
  145. {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/RECORD +149 -105
  146. {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/top_level.txt +1 -0
  147. hikyuu/cpp/__init__.pyi +0 -3
  148. hikyuu/cpp/core310.pyi +0 -12503
  149. hikyuu/cpp/core311.pyi +0 -12503
  150. hikyuu/cpp/core312.pyi +0 -12503
  151. hikyuu/cpp/core313.pyi +0 -12494
  152. hikyuu/cpp/core38.pyi +0 -12503
  153. hikyuu/cpp/core39.pyi +0 -12503
  154. hikyuu/deprecated.py +0 -651
  155. {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/LICENSE +0 -0
  156. {hikyuu-2.3.1.dist-info → hikyuu-2.5.1.dist-info}/WHEEL +0 -0
  157. {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
- // 用 set 保存,以便获取是能保持顺序
125
- std::set<Datetime> m_buySig;
126
- std::set<Datetime> m_sellSig;
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
@@ -17,6 +17,8 @@
17
17
  #include "crt/SG_Single.h"
18
18
  #include "crt/SG_Bool.h"
19
19
  #include "crt/SG_Band.h"
20
+ #include "crt/SG_Logic.h"
20
21
  #include "crt/SG_Manual.h"
22
+ #include "crt/SG_OneSide.h"
21
23
 
22
24
  #endif /* SIGNAL_BUILD_IN_H_ */
@@ -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 */