hikyuu 2.3.0__py3-none-win_amd64.whl → 2.5.0__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 (179) hide show
  1. hikyuu/__init__.py +438 -6
  2. hikyuu/__init__.pyi +791 -0
  3. hikyuu/analysis/__init__.pyi +487 -0
  4. hikyuu/analysis/analysis.pyi +517 -0
  5. hikyuu/core.pyi +482 -0
  6. hikyuu/cpp/__init__.pyi +3 -0
  7. hikyuu/cpp/boost_date_time-mt.dll +0 -0
  8. hikyuu/cpp/boost_serialization-mt.dll +0 -0
  9. hikyuu/cpp/boost_wserialization-mt.dll +0 -0
  10. hikyuu/cpp/core310.pyd +0 -0
  11. hikyuu/cpp/core311.pyd +0 -0
  12. hikyuu/cpp/core312.pyd +0 -0
  13. hikyuu/cpp/core312.pyi +12867 -0
  14. hikyuu/cpp/core313.pyd +0 -0
  15. hikyuu/cpp/core38.pyd +0 -0
  16. hikyuu/cpp/core39.pyd +0 -0
  17. hikyuu/cpp/hikyuu.dll +0 -0
  18. hikyuu/cpp/hikyuu.lib +0 -0
  19. hikyuu/cpp/sqlite3.dll +0 -0
  20. hikyuu/data/common_mysql.py +24 -7
  21. hikyuu/data/common_pytdx.py +17 -1
  22. hikyuu/data/em_block_to_mysql.py +3 -2
  23. hikyuu/data/em_block_to_sqlite.py +8 -3
  24. hikyuu/data/mysql_upgrade/0025.sql +61 -0
  25. hikyuu/data/mysql_upgrade/0026.sql +9 -0
  26. hikyuu/data/sqlite_upgrade/0025.sql +63 -0
  27. hikyuu/data/sqlite_upgrade/0026.sql +10 -0
  28. hikyuu/draw/__init__.pyi +35 -0
  29. hikyuu/draw/drawplot/__init__.py +3 -0
  30. hikyuu/draw/drawplot/__init__.pyi +134 -0
  31. hikyuu/draw/drawplot/bokeh_draw.pyi +796 -0
  32. hikyuu/draw/drawplot/common.pyi +10 -0
  33. hikyuu/draw/drawplot/echarts_draw.py +219 -24
  34. hikyuu/draw/drawplot/echarts_draw.pyi +682 -0
  35. hikyuu/draw/drawplot/matplotlib_draw.py +18 -3
  36. hikyuu/draw/drawplot/matplotlib_draw.pyi +1101 -0
  37. hikyuu/draw/elder.pyi +44 -0
  38. hikyuu/draw/kaufman.pyi +38 -0
  39. hikyuu/draw/volume.pyi +31 -0
  40. hikyuu/examples/notebook/Demo/Demo2.ipynb +1 -1
  41. hikyuu/extend.py +9 -3
  42. hikyuu/extend.pyi +636 -0
  43. hikyuu/fetcher/stock/zh_block_em.py +118 -51
  44. hikyuu/gui/data/EscapetimeThread.py +4 -4
  45. hikyuu/gui/data/ImportBlockInfoTask.py +3 -2
  46. hikyuu/gui/data/ImportHistoryFinanceTask.py +2 -0
  47. hikyuu/gui/data/MainWindow.py +48 -42
  48. hikyuu/gui/importdata.py +13 -26
  49. hikyuu/hub.py +2 -4
  50. hikyuu/hub.pyi +254 -0
  51. hikyuu/include/hikyuu/DataType.h +5 -0
  52. hikyuu/include/hikyuu/Stock.h +7 -0
  53. hikyuu/include/hikyuu/indicator/Indicator.h +8 -1
  54. hikyuu/include/hikyuu/indicator/Indicator2InImp.h +65 -0
  55. hikyuu/include/hikyuu/indicator/IndicatorImp.h +4 -3
  56. hikyuu/include/hikyuu/indicator/build_in.h +12 -0
  57. hikyuu/include/hikyuu/indicator/crt/ADVANCE.h +3 -1
  58. hikyuu/include/hikyuu/indicator/crt/CONTEXT.h +2 -2
  59. hikyuu/include/hikyuu/indicator/crt/CORR.h +4 -2
  60. hikyuu/include/hikyuu/indicator/crt/COST.h +3 -0
  61. hikyuu/include/hikyuu/indicator/crt/CYCLE.h +24 -0
  62. hikyuu/include/hikyuu/indicator/crt/DECLINE.h +3 -1
  63. hikyuu/include/hikyuu/indicator/crt/DISCARD.h +27 -0
  64. hikyuu/include/hikyuu/indicator/crt/DMA.h +2 -1
  65. hikyuu/include/hikyuu/indicator/crt/HSL.h +1 -13
  66. hikyuu/include/hikyuu/indicator/crt/INBLOCK.h +31 -0
  67. hikyuu/include/hikyuu/indicator/crt/INDEX.h +60 -0
  68. hikyuu/include/hikyuu/indicator/crt/INSUM.h +5 -2
  69. hikyuu/include/hikyuu/indicator/crt/ISINF.h +28 -0
  70. hikyuu/include/hikyuu/indicator/crt/ISINFA.h +28 -0
  71. hikyuu/include/hikyuu/indicator/crt/ISNA.h +29 -0
  72. hikyuu/include/hikyuu/indicator/crt/JUMPDOWN.h +24 -0
  73. hikyuu/include/hikyuu/indicator/crt/JUMPUP.h +24 -0
  74. hikyuu/include/hikyuu/indicator/crt/LASTVALUE.h +29 -0
  75. hikyuu/include/hikyuu/indicator/crt/LIUTONGPAN.h +1 -0
  76. hikyuu/include/hikyuu/indicator/crt/REPLACE.h +29 -0
  77. hikyuu/include/hikyuu/indicator/crt/SPEARMAN.h +3 -2
  78. hikyuu/include/hikyuu/indicator/crt/WINNER.h +38 -0
  79. hikyuu/include/hikyuu/indicator/imp/IContext.h +1 -1
  80. hikyuu/include/hikyuu/indicator/imp/ICorr.h +7 -22
  81. hikyuu/include/hikyuu/indicator/imp/ICost.h +31 -0
  82. hikyuu/include/hikyuu/indicator/imp/ICycle.h +30 -0
  83. hikyuu/include/hikyuu/indicator/imp/IDiscard.h +28 -0
  84. hikyuu/include/hikyuu/indicator/imp/IDma.h +7 -24
  85. hikyuu/include/hikyuu/indicator/imp/IHsl.h +30 -0
  86. hikyuu/include/hikyuu/indicator/imp/IInBlock.h +30 -0
  87. hikyuu/include/hikyuu/indicator/imp/IIndex.h +26 -0
  88. hikyuu/include/hikyuu/indicator/imp/IIsInf.h +26 -0
  89. hikyuu/include/hikyuu/indicator/imp/IIsInfa.h +26 -0
  90. hikyuu/include/hikyuu/indicator/imp/IIsNa.h +26 -0
  91. hikyuu/include/hikyuu/indicator/imp/IJumpDown.h +24 -0
  92. hikyuu/include/hikyuu/indicator/imp/IJumpUp.h +24 -0
  93. hikyuu/include/hikyuu/indicator/imp/ILastValue.h +26 -0
  94. hikyuu/include/hikyuu/indicator/imp/IReplace.h +26 -0
  95. hikyuu/include/hikyuu/indicator/imp/ISpearman.h +6 -21
  96. hikyuu/include/hikyuu/indicator/imp/IWinner.h +26 -0
  97. hikyuu/include/hikyuu/indicator_talib/imp/TaMavp.h +6 -20
  98. hikyuu/include/hikyuu/indicator_talib/imp/ta_defines.h +14 -65
  99. hikyuu/include/hikyuu/indicator_talib/imp/ta_imp.h +54 -90
  100. hikyuu/include/hikyuu/indicator_talib/ta_crt.h +11 -9
  101. hikyuu/include/hikyuu/strategy/RunPortfolioInStrategy.h +3 -4
  102. hikyuu/include/hikyuu/strategy/Strategy.h +4 -5
  103. hikyuu/include/hikyuu/trade_manage/TradeRecord.h +5 -1
  104. hikyuu/include/hikyuu/trade_sys/allocatefunds/build_in.h +1 -0
  105. hikyuu/include/hikyuu/trade_sys/allocatefunds/crt/AF_FixedWeightList.h +22 -0
  106. hikyuu/include/hikyuu/trade_sys/allocatefunds/imp/FixedWeightListAllocateFunds.h +25 -0
  107. hikyuu/include/hikyuu/trade_sys/moneymanager/MoneyManagerBase.h +17 -4
  108. hikyuu/include/hikyuu/trade_sys/moneymanager/build_in.h +2 -0
  109. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedCapital.h +6 -0
  110. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedCapitalFunds.h +26 -0
  111. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedCountTps.h +27 -0
  112. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedRisk.h +6 -0
  113. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_FixedUnits.h +6 -0
  114. hikyuu/include/hikyuu/trade_sys/moneymanager/crt/MM_WilliamsFixedRisk.h +7 -0
  115. hikyuu/include/hikyuu/trade_sys/moneymanager/imp/FixedCapitalFundsMM.h +28 -0
  116. hikyuu/include/hikyuu/trade_sys/moneymanager/imp/FixedCountTpsMM.h +44 -0
  117. hikyuu/include/hikyuu/trade_sys/multifactor/build_in.h +1 -0
  118. hikyuu/include/hikyuu/trade_sys/multifactor/crt/MF_Weight.h +30 -0
  119. hikyuu/include/hikyuu/trade_sys/multifactor/imp/WeightMultiFactor.h +41 -0
  120. hikyuu/include/hikyuu/trade_sys/portfolio/Portfolio.h +38 -37
  121. hikyuu/include/hikyuu/trade_sys/portfolio/build_in.h +1 -0
  122. hikyuu/include/hikyuu/trade_sys/portfolio/crt/PF_Simple.h +25 -1
  123. hikyuu/include/hikyuu/trade_sys/portfolio/crt/PF_WithoutAF.h +50 -0
  124. hikyuu/include/hikyuu/trade_sys/portfolio/imp/SimplePortfolio.h +53 -0
  125. hikyuu/include/hikyuu/trade_sys/portfolio/imp/WithoutAFPortfolio.h +57 -0
  126. hikyuu/include/hikyuu/trade_sys/selector/imp/MultiFactorSelector.h +7 -0
  127. hikyuu/include/hikyuu/trade_sys/signal/SignalBase.h +51 -5
  128. hikyuu/include/hikyuu/trade_sys/signal/build_in.h +2 -0
  129. hikyuu/include/hikyuu/trade_sys/signal/crt/SG_Bool.h +2 -1
  130. hikyuu/include/hikyuu/trade_sys/signal/crt/SG_Logic.h +37 -0
  131. hikyuu/include/hikyuu/trade_sys/signal/crt/SG_OneSide.h +28 -0
  132. hikyuu/include/hikyuu/trade_sys/signal/imp/OneSideSignal.h +46 -0
  133. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/AddSignal.h +19 -0
  134. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/AddValueSignal.h +19 -0
  135. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/DivSignal.h +19 -0
  136. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/DivValueSignal.h +22 -0
  137. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/MulSignal.h +19 -0
  138. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/MulValueSignal.h +19 -0
  139. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/OperatorSignal.h +68 -0
  140. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/OperatorValueSignal.h +67 -0
  141. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/SubSignal.h +19 -0
  142. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/SubValueSignal.h +22 -0
  143. hikyuu/include/hikyuu/trade_sys/signal/imp/logic/__init__.py +1 -0
  144. hikyuu/include/hikyuu/trade_sys/stoploss/crt/ST_Indicator.h +1 -1
  145. hikyuu/include/hikyuu/trade_sys/stoploss/imp/IndicatorStoploss.h +3 -4
  146. hikyuu/include/hikyuu/utilities/FilterNode.h +2 -2
  147. hikyuu/include/hikyuu/utilities/Log.h +42 -15
  148. hikyuu/include/hikyuu/utilities/datetime/Datetime.h +1 -1
  149. hikyuu/include/hikyuu/utilities/datetime/TimeDelta.h +2 -2
  150. hikyuu/include/hikyuu/utilities/db_connect/DBCondition.h +4 -0
  151. hikyuu/include/hikyuu/utilities/db_connect/SQLResultSet.h +2 -2
  152. hikyuu/include/hikyuu/utilities/db_connect/mysql/MySQLConnect.h +5 -1
  153. hikyuu/include/hikyuu/utilities/node/NodeServer.h +4 -4
  154. hikyuu/include/hikyuu/utilities/thread/MQStealThreadPool.h +2 -2
  155. hikyuu/include/hikyuu/utilities/thread/MQThreadPool.h +2 -2
  156. hikyuu/include/hikyuu/utilities/thread/StealThreadPool.h +5 -5
  157. hikyuu/include/hikyuu/utilities/thread/ThreadPool.h +2 -2
  158. hikyuu/include/hikyuu/utilities/thread/algorithm.h +16 -10
  159. hikyuu/include/hikyuu/version.h +4 -4
  160. hikyuu/indicator/indicator.py +1 -0
  161. hikyuu/interactive.py +3 -266
  162. hikyuu/trade_manage/__init__.pyi +584 -0
  163. hikyuu/trade_manage/broker.pyi +54 -0
  164. hikyuu/trade_manage/broker_easytrader.pyi +21 -0
  165. hikyuu/trade_manage/broker_mail.pyi +55 -0
  166. hikyuu/trade_manage/trade.pyi +590 -0
  167. hikyuu/util/__init__.pyi +55 -0
  168. hikyuu/util/check.pyi +59 -0
  169. hikyuu/util/mylog.pyi +70 -0
  170. hikyuu/util/notebook.pyi +23 -0
  171. hikyuu/util/singleton.pyi +18 -0
  172. hikyuu/util/slice.pyi +8 -0
  173. {hikyuu-2.3.0.dist-info → hikyuu-2.5.0.dist-info}/METADATA +3 -2
  174. {hikyuu-2.3.0.dist-info → hikyuu-2.5.0.dist-info}/RECORD +178 -95
  175. {hikyuu-2.3.0.dist-info → hikyuu-2.5.0.dist-info}/top_level.txt +1 -0
  176. hikyuu/deprecated.py +0 -651
  177. {hikyuu-2.3.0.dist-info → hikyuu-2.5.0.dist-info}/LICENSE +0 -0
  178. {hikyuu-2.3.0.dist-info → hikyuu-2.5.0.dist-info}/WHEEL +0 -0
  179. {hikyuu-2.3.0.dist-info → hikyuu-2.5.0.dist-info}/entry_points.txt +0 -0
@@ -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 */
@@ -0,0 +1,67 @@
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 OperatorValueSignal : public SignalBase {
15
+ public:
16
+ OperatorValueSignal();
17
+ explicit OperatorValueSignal(const string& name);
18
+ OperatorValueSignal(const string& name, const SignalPtr& sg, double value, int mode = 0);
19
+ virtual ~OperatorValueSignal();
20
+
21
+ virtual void _reset() override;
22
+ virtual SignalPtr _clone() override;
23
+ virtual void _calculate(const KData& kdata) override {}
24
+
25
+ protected:
26
+ double m_value{0.0};
27
+ SignalPtr m_sg;
28
+ int m_mode{0}; // 仅对-、/有效,0:(sg, value), 1: (value, sg)
29
+
30
+ //============================================
31
+ // 序列化支持
32
+ //============================================
33
+ #if HKU_SUPPORT_SERIALIZATION
34
+ friend class boost::serialization::access;
35
+ template <class Archive>
36
+ void serialize(Archive& ar, const unsigned int version) {
37
+ ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(SignalBase);
38
+ ar& BOOST_SERIALIZATION_NVP(m_sg);
39
+ ar& BOOST_SERIALIZATION_NVP(m_value);
40
+ ar& BOOST_SERIALIZATION_NVP(m_mode);
41
+ }
42
+ #endif
43
+ };
44
+
45
+ #define OPERATOR_SIGNAL_IMP(classname, name) \
46
+ public: \
47
+ classname() : OperatorValueSignal(name) {} \
48
+ classname(const SignalPtr& sg, double value) : OperatorValueSignal(name, sg, value) {} \
49
+ virtual ~classname() {} \
50
+ virtual SignalPtr _clone() override { \
51
+ return make_shared<classname>(m_sg, m_value); \
52
+ } \
53
+ virtual void _calculate(const KData&) override;
54
+
55
+ #if HKU_SUPPORT_SERIALIZATION
56
+ #define OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION \
57
+ private: \
58
+ friend class boost::serialization::access; \
59
+ template <class Archive> \
60
+ void serialize(Archive& ar, const unsigned int version) { \
61
+ ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(OperatorValueSignal); \
62
+ }
63
+ #else
64
+ #define OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
65
+ #endif
66
+
67
+ } /* 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 SubSignal : public OperatorSignal {
15
+ OPERATOR_SIGNAL_IMP(SubSignal, "SG_Sub")
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 SubValueSignal : public OperatorValueSignal {
15
+ OPERATOR_SIGNAL_IMP(SubValueSignal, "SG_AddValue")
16
+ OPERATOR_SIGNAL_NO_PRIVATE_MEMBER_SERIALIZATION
17
+
18
+ public:
19
+ SubValueSignal(double value, const SignalPtr& sg);
20
+ };
21
+
22
+ } /* namespace hku */
@@ -14,7 +14,7 @@
14
14
 
15
15
  namespace hku {
16
16
 
17
- StoplossPtr HKU_API ST_Indicator(const Indicator& op, const string& kpart = "CLOSE");
17
+ StoplossPtr HKU_API ST_Indicator(const Indicator& ind);
18
18
 
19
19
  } /* namespace hku */
20
20
 
@@ -17,17 +17,16 @@ namespace hku {
17
17
  class IndicatorStoploss : public StoplossBase {
18
18
  public:
19
19
  IndicatorStoploss(); // 仅用于序列化默认构造函数
20
- IndicatorStoploss(const Indicator& op, const string& kdata_part);
20
+ explicit IndicatorStoploss(const Indicator& ind);
21
21
  virtual ~IndicatorStoploss();
22
22
 
23
- virtual void _checkParam(const string& name) const override;
24
23
  virtual price_t getPrice(const Datetime& datetime, price_t price) override;
25
24
  virtual void _reset() override;
26
25
  virtual StoplossPtr _clone() override;
27
26
  virtual void _calculate() override;
28
27
 
29
28
  private:
30
- Indicator m_op;
29
+ Indicator m_ind;
31
30
  map<Datetime, price_t> m_result;
32
31
 
33
32
  //========================================
@@ -39,7 +38,7 @@ private:
39
38
  template <class Archive>
40
39
  void serialize(Archive& ar, const unsigned int version) {
41
40
  ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(StoplossBase);
42
- ar& BOOST_SERIALIZATION_NVP(m_op);
41
+ ar& BOOST_SERIALIZATION_NVP(m_ind);
43
42
  // m_result 每次系统运行时都要重新计算,不保存
44
43
  // ar & BOOST_SERIALIZATION_NVP(m_result);
45
44
  }