cyqnt-trd 0.1.2__py3-none-any.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 (147) hide show
  1. cyqnt_trd/__init__.py +26 -0
  2. cyqnt_trd/backtesting/README.md +264 -0
  3. cyqnt_trd/backtesting/__init__.py +12 -0
  4. cyqnt_trd/backtesting/factor_test.py +332 -0
  5. cyqnt_trd/backtesting/framework.py +311 -0
  6. cyqnt_trd/backtesting/strategy_backtest.py +545 -0
  7. cyqnt_trd/diagnose_api.py +28 -0
  8. cyqnt_trd/get_data/__init__.py +15 -0
  9. cyqnt_trd/get_data/get_futures_data.py +472 -0
  10. cyqnt_trd/get_data/get_trending_data.py +771 -0
  11. cyqnt_trd/online_trading/__init__.py +13 -0
  12. cyqnt_trd/online_trading/realtime_price_tracker.py +1001 -0
  13. cyqnt_trd/test.py +119 -0
  14. cyqnt_trd/test_script/README.md +411 -0
  15. cyqnt_trd/test_script/get_network_info.py +192 -0
  16. cyqnt_trd/test_script/get_symbols_by_volume.py +227 -0
  17. cyqnt_trd/test_script/realtime_price_tracker.py +839 -0
  18. cyqnt_trd/test_script/test_alpha.py +261 -0
  19. cyqnt_trd/test_script/test_kline_data.py +479 -0
  20. cyqnt_trd/test_script/test_order.py +1360 -0
  21. cyqnt_trd/trading_signal/README.md +276 -0
  22. cyqnt_trd/trading_signal/__init__.py +17 -0
  23. cyqnt_trd/trading_signal/example_test_alpha.py +430 -0
  24. cyqnt_trd/trading_signal/example_usage.py +431 -0
  25. cyqnt_trd/trading_signal/factor/__init__.py +18 -0
  26. cyqnt_trd/trading_signal/factor/ma_factor.py +75 -0
  27. cyqnt_trd/trading_signal/factor/rsi_factor.py +56 -0
  28. cyqnt_trd/trading_signal/selected_alpha/__init__.py +158 -0
  29. cyqnt_trd/trading_signal/selected_alpha/alpha1.py +87 -0
  30. cyqnt_trd/trading_signal/selected_alpha/alpha10.py +90 -0
  31. cyqnt_trd/trading_signal/selected_alpha/alpha100.py +74 -0
  32. cyqnt_trd/trading_signal/selected_alpha/alpha101.py +86 -0
  33. cyqnt_trd/trading_signal/selected_alpha/alpha11.py +86 -0
  34. cyqnt_trd/trading_signal/selected_alpha/alpha12.py +86 -0
  35. cyqnt_trd/trading_signal/selected_alpha/alpha13.py +86 -0
  36. cyqnt_trd/trading_signal/selected_alpha/alpha14.py +87 -0
  37. cyqnt_trd/trading_signal/selected_alpha/alpha15.py +87 -0
  38. cyqnt_trd/trading_signal/selected_alpha/alpha16.py +86 -0
  39. cyqnt_trd/trading_signal/selected_alpha/alpha17.py +88 -0
  40. cyqnt_trd/trading_signal/selected_alpha/alpha18.py +88 -0
  41. cyqnt_trd/trading_signal/selected_alpha/alpha19.py +87 -0
  42. cyqnt_trd/trading_signal/selected_alpha/alpha2.py +86 -0
  43. cyqnt_trd/trading_signal/selected_alpha/alpha20.py +88 -0
  44. cyqnt_trd/trading_signal/selected_alpha/alpha21.py +89 -0
  45. cyqnt_trd/trading_signal/selected_alpha/alpha22.py +87 -0
  46. cyqnt_trd/trading_signal/selected_alpha/alpha23.py +88 -0
  47. cyqnt_trd/trading_signal/selected_alpha/alpha24.py +88 -0
  48. cyqnt_trd/trading_signal/selected_alpha/alpha25.py +86 -0
  49. cyqnt_trd/trading_signal/selected_alpha/alpha26.py +87 -0
  50. cyqnt_trd/trading_signal/selected_alpha/alpha27.py +88 -0
  51. cyqnt_trd/trading_signal/selected_alpha/alpha28.py +88 -0
  52. cyqnt_trd/trading_signal/selected_alpha/alpha29.py +87 -0
  53. cyqnt_trd/trading_signal/selected_alpha/alpha3.py +86 -0
  54. cyqnt_trd/trading_signal/selected_alpha/alpha30.py +87 -0
  55. cyqnt_trd/trading_signal/selected_alpha/alpha31.py +90 -0
  56. cyqnt_trd/trading_signal/selected_alpha/alpha32.py +86 -0
  57. cyqnt_trd/trading_signal/selected_alpha/alpha33.py +86 -0
  58. cyqnt_trd/trading_signal/selected_alpha/alpha34.py +87 -0
  59. cyqnt_trd/trading_signal/selected_alpha/alpha35.py +88 -0
  60. cyqnt_trd/trading_signal/selected_alpha/alpha36.py +86 -0
  61. cyqnt_trd/trading_signal/selected_alpha/alpha37.py +86 -0
  62. cyqnt_trd/trading_signal/selected_alpha/alpha38.py +87 -0
  63. cyqnt_trd/trading_signal/selected_alpha/alpha39.py +87 -0
  64. cyqnt_trd/trading_signal/selected_alpha/alpha4.py +86 -0
  65. cyqnt_trd/trading_signal/selected_alpha/alpha40.py +86 -0
  66. cyqnt_trd/trading_signal/selected_alpha/alpha41.py +86 -0
  67. cyqnt_trd/trading_signal/selected_alpha/alpha42.py +86 -0
  68. cyqnt_trd/trading_signal/selected_alpha/alpha43.py +86 -0
  69. cyqnt_trd/trading_signal/selected_alpha/alpha44.py +87 -0
  70. cyqnt_trd/trading_signal/selected_alpha/alpha45.py +88 -0
  71. cyqnt_trd/trading_signal/selected_alpha/alpha46.py +89 -0
  72. cyqnt_trd/trading_signal/selected_alpha/alpha47.py +86 -0
  73. cyqnt_trd/trading_signal/selected_alpha/alpha48.py +74 -0
  74. cyqnt_trd/trading_signal/selected_alpha/alpha49.py +88 -0
  75. cyqnt_trd/trading_signal/selected_alpha/alpha5.py +86 -0
  76. cyqnt_trd/trading_signal/selected_alpha/alpha50.py +86 -0
  77. cyqnt_trd/trading_signal/selected_alpha/alpha51.py +88 -0
  78. cyqnt_trd/trading_signal/selected_alpha/alpha52.py +87 -0
  79. cyqnt_trd/trading_signal/selected_alpha/alpha53.py +86 -0
  80. cyqnt_trd/trading_signal/selected_alpha/alpha54.py +86 -0
  81. cyqnt_trd/trading_signal/selected_alpha/alpha55.py +88 -0
  82. cyqnt_trd/trading_signal/selected_alpha/alpha56.py +86 -0
  83. cyqnt_trd/trading_signal/selected_alpha/alpha57.py +86 -0
  84. cyqnt_trd/trading_signal/selected_alpha/alpha58.py +74 -0
  85. cyqnt_trd/trading_signal/selected_alpha/alpha59.py +74 -0
  86. cyqnt_trd/trading_signal/selected_alpha/alpha6.py +86 -0
  87. cyqnt_trd/trading_signal/selected_alpha/alpha60.py +89 -0
  88. cyqnt_trd/trading_signal/selected_alpha/alpha61.py +88 -0
  89. cyqnt_trd/trading_signal/selected_alpha/alpha62.py +86 -0
  90. cyqnt_trd/trading_signal/selected_alpha/alpha63.py +74 -0
  91. cyqnt_trd/trading_signal/selected_alpha/alpha64.py +86 -0
  92. cyqnt_trd/trading_signal/selected_alpha/alpha65.py +86 -0
  93. cyqnt_trd/trading_signal/selected_alpha/alpha66.py +86 -0
  94. cyqnt_trd/trading_signal/selected_alpha/alpha67.py +74 -0
  95. cyqnt_trd/trading_signal/selected_alpha/alpha68.py +86 -0
  96. cyqnt_trd/trading_signal/selected_alpha/alpha69.py +74 -0
  97. cyqnt_trd/trading_signal/selected_alpha/alpha7.py +88 -0
  98. cyqnt_trd/trading_signal/selected_alpha/alpha70.py +74 -0
  99. cyqnt_trd/trading_signal/selected_alpha/alpha71.py +92 -0
  100. cyqnt_trd/trading_signal/selected_alpha/alpha72.py +86 -0
  101. cyqnt_trd/trading_signal/selected_alpha/alpha73.py +91 -0
  102. cyqnt_trd/trading_signal/selected_alpha/alpha74.py +86 -0
  103. cyqnt_trd/trading_signal/selected_alpha/alpha75.py +86 -0
  104. cyqnt_trd/trading_signal/selected_alpha/alpha76.py +74 -0
  105. cyqnt_trd/trading_signal/selected_alpha/alpha77.py +92 -0
  106. cyqnt_trd/trading_signal/selected_alpha/alpha78.py +86 -0
  107. cyqnt_trd/trading_signal/selected_alpha/alpha79.py +74 -0
  108. cyqnt_trd/trading_signal/selected_alpha/alpha8.py +87 -0
  109. cyqnt_trd/trading_signal/selected_alpha/alpha80.py +74 -0
  110. cyqnt_trd/trading_signal/selected_alpha/alpha81.py +86 -0
  111. cyqnt_trd/trading_signal/selected_alpha/alpha82.py +74 -0
  112. cyqnt_trd/trading_signal/selected_alpha/alpha83.py +86 -0
  113. cyqnt_trd/trading_signal/selected_alpha/alpha84.py +86 -0
  114. cyqnt_trd/trading_signal/selected_alpha/alpha85.py +86 -0
  115. cyqnt_trd/trading_signal/selected_alpha/alpha86.py +86 -0
  116. cyqnt_trd/trading_signal/selected_alpha/alpha87.py +74 -0
  117. cyqnt_trd/trading_signal/selected_alpha/alpha88.py +92 -0
  118. cyqnt_trd/trading_signal/selected_alpha/alpha89.py +74 -0
  119. cyqnt_trd/trading_signal/selected_alpha/alpha9.py +90 -0
  120. cyqnt_trd/trading_signal/selected_alpha/alpha90.py +74 -0
  121. cyqnt_trd/trading_signal/selected_alpha/alpha91.py +74 -0
  122. cyqnt_trd/trading_signal/selected_alpha/alpha92.py +92 -0
  123. cyqnt_trd/trading_signal/selected_alpha/alpha93.py +74 -0
  124. cyqnt_trd/trading_signal/selected_alpha/alpha94.py +86 -0
  125. cyqnt_trd/trading_signal/selected_alpha/alpha95.py +86 -0
  126. cyqnt_trd/trading_signal/selected_alpha/alpha96.py +92 -0
  127. cyqnt_trd/trading_signal/selected_alpha/alpha97.py +74 -0
  128. cyqnt_trd/trading_signal/selected_alpha/alpha98.py +87 -0
  129. cyqnt_trd/trading_signal/selected_alpha/alpha99.py +86 -0
  130. cyqnt_trd/trading_signal/selected_alpha/alpha_utils.py +342 -0
  131. cyqnt_trd/trading_signal/selected_alpha/create_all_alphas.py +279 -0
  132. cyqnt_trd/trading_signal/selected_alpha/generate_alphas.py +133 -0
  133. cyqnt_trd/trading_signal/selected_alpha/test_alpha.py +261 -0
  134. cyqnt_trd/trading_signal/signal/__init__.py +20 -0
  135. cyqnt_trd/trading_signal/signal/factor_based_signal.py +387 -0
  136. cyqnt_trd/trading_signal/signal/ma_signal.py +163 -0
  137. cyqnt_trd/utils/__init__.py +3 -0
  138. cyqnt_trd/utils/set_user.py +33 -0
  139. cyqnt_trd-0.1.2.dist-info/METADATA +148 -0
  140. cyqnt_trd-0.1.2.dist-info/RECORD +147 -0
  141. cyqnt_trd-0.1.2.dist-info/WHEEL +5 -0
  142. cyqnt_trd-0.1.2.dist-info/licenses/LICENSE +21 -0
  143. cyqnt_trd-0.1.2.dist-info/top_level.txt +2 -0
  144. test/real_time_trade.py +746 -0
  145. test/test_example_usage.py +381 -0
  146. test/test_get_data.py +310 -0
  147. test/test_realtime_price_tracker.py +546 -0
@@ -0,0 +1,276 @@
1
+ # 交易因子和信号策略模块
2
+
3
+ 本模块提供了交易因子(factor)和交易信号策略(signal)的框架,支持在信号策略中使用因子。
4
+
5
+ ## 目录结构
6
+
7
+ ```
8
+ trading_signal/
9
+ ├── factor/ # 交易因子模块
10
+ │ ├── __init__.py # 因子模块导出
11
+ │ ├── ma_factor.py # 移动平均线因子
12
+ │ └── rsi_factor.py # RSI因子
13
+ ├── signal/ # 交易信号策略模块
14
+ │ ├── __init__.py # 信号模块导出
15
+ │ ├── ma_signal.py # 基于移动平均线的信号策略
16
+ │ └── factor_based_signal.py # 基于因子的信号策略(可在signal中使用factor)
17
+ └── example_usage.py # 使用示例
18
+ ```
19
+
20
+ ## 因子(Factor)
21
+
22
+ 因子用于预测价格方向,函数签名:
23
+ ```python
24
+ factor_func(data: pd.DataFrame, index: int) -> float
25
+ ```
26
+
27
+ - **返回值**:
28
+ - 正数:看多
29
+ - 负数:看空
30
+ - 0:中性或数据不足
31
+
32
+ ### 已实现的因子
33
+
34
+ 1. **ma_factor**: 简单移动平均线因子
35
+ ```python
36
+ from cyqnt_trd.trading_signal.factor import ma_factor
37
+
38
+ # 使用MA5因子
39
+ factor_value = ma_factor(data, index, period=5)
40
+ ```
41
+
42
+ 2. **ma_cross_factor**: 移动平均线交叉因子
43
+ ```python
44
+ from cyqnt_trd.trading_signal.factor import ma_cross_factor
45
+
46
+ # 使用短期5日、长期20日均线交叉因子
47
+ factor_value = ma_cross_factor(data, index, short_period=5, long_period=20)
48
+ ```
49
+
50
+ 3. **rsi_factor**: RSI因子
51
+ ```python
52
+ from cyqnt_trd.trading_signal.factor import rsi_factor
53
+
54
+ # 使用RSI因子
55
+ factor_value = rsi_factor(data, index, period=14, oversold=30.0, overbought=70.0)
56
+ ```
57
+
58
+ ## 信号策略(Signal)
59
+
60
+ 信号策略用于生成买卖信号,函数签名:
61
+ ```python
62
+ signal_func(
63
+ data: pd.DataFrame,
64
+ index: int,
65
+ position: float,
66
+ entry_price: float,
67
+ entry_index: int,
68
+ take_profit: float,
69
+ stop_loss: float,
70
+ check_periods: int
71
+ ) -> str
72
+ ```
73
+
74
+ - **参数说明**:
75
+ - `check_periods`: 检查未来多少个周期(**只能为1**,因为实际使用时无法看到今天之后的数据)
76
+ - **返回值**:
77
+ - `'buy'`: 买入信号
78
+ - `'sell'`: 卖出信号
79
+ - `'hold'`: 持有(不操作)
80
+
81
+ ### 已实现的信号策略
82
+
83
+ 1. **ma_signal**: 基于移动平均线的交易信号
84
+ ```python
85
+ from cyqnt_trd.trading_signal.signal import ma_signal
86
+
87
+ # 需要包装成符合框架要求的函数
88
+ def ma_signal_wrapper(data, index, position, entry_price, entry_index,
89
+ take_profit, stop_loss, check_periods):
90
+ return ma_signal(data, index, position, entry_price, entry_index,
91
+ take_profit, stop_loss, check_periods, period=5)
92
+ ```
93
+
94
+ 2. **ma_cross_signal**: 基于移动平均线交叉的交易信号
95
+ ```python
96
+ from cyqnt_trd.trading_signal.signal import ma_cross_signal
97
+ ```
98
+
99
+ 3. **factor_based_signal**: 基于因子的交易信号(可在signal中使用factor)
100
+ ```python
101
+ from cyqnt_trd.trading_signal.signal import factor_based_signal
102
+ from cyqnt_trd.trading_signal.factor import ma_factor
103
+
104
+ # 使用factor中的ma_factor
105
+ def factor_signal_wrapper(data, index, position, entry_price, entry_index,
106
+ take_profit, stop_loss, check_periods):
107
+ factor_func = lambda d, i: ma_factor(d, i, period=5)
108
+ return factor_based_signal(
109
+ data, index, position, entry_price, entry_index,
110
+ take_profit, stop_loss, check_periods,
111
+ factor_func=factor_func
112
+ )
113
+ ```
114
+
115
+ 4. **multi_factor_signal**: 多因子组合策略
116
+ ```python
117
+ from cyqnt_trd.trading_signal.signal import multi_factor_signal
118
+ from cyqnt_trd.trading_signal.factor import ma_factor, rsi_factor
119
+
120
+ # 组合多个因子
121
+ def multi_factor_wrapper(data, index, position, entry_price, entry_index,
122
+ take_profit, stop_loss, check_periods):
123
+ factor_funcs = [
124
+ lambda d, i: ma_factor(d, i, period=5),
125
+ lambda d, i: rsi_factor(d, i, period=14)
126
+ ]
127
+ weights = [0.6, 0.4]
128
+ return multi_factor_signal(
129
+ data, index, position, entry_price, entry_index,
130
+ take_profit, stop_loss, check_periods,
131
+ factor_funcs=factor_funcs,
132
+ weights=weights
133
+ )
134
+ ```
135
+
136
+ ## 使用示例
137
+
138
+ ### 示例1: 使用因子进行因子测试
139
+
140
+ ```python
141
+ from cyqnt_trd.backtesting import BacktestFramework
142
+ from cyqnt_trd.trading_signal.factor import ma_factor
143
+
144
+ # 加载数据
145
+ framework = BacktestFramework(data_path='path/to/data.json')
146
+
147
+ # 创建因子包装函数
148
+ def ma_factor_wrapper(data, index):
149
+ return ma_factor(data, index, period=5)
150
+
151
+ # 测试因子
152
+ factor_results = framework.test_factor(
153
+ factor_func=ma_factor_wrapper,
154
+ forward_periods=2,
155
+ min_periods=10,
156
+ factor_name="MA5因子"
157
+ )
158
+
159
+ framework.print_factor_results(factor_results, save_dir='result')
160
+ ```
161
+
162
+ ### 示例2: 使用信号策略进行回测
163
+
164
+ ```python
165
+ from cyqnt_trd.backtesting import BacktestFramework
166
+ from cyqnt_trd.trading_signal.signal import ma_signal
167
+
168
+ # 加载数据
169
+ framework = BacktestFramework(data_path='path/to/data.json')
170
+
171
+ # 创建信号包装函数
172
+ def ma_signal_wrapper(data, index, position, entry_price, entry_index,
173
+ take_profit, stop_loss, check_periods):
174
+ return ma_signal(data, index, position, entry_price, entry_index,
175
+ take_profit, stop_loss, check_periods, period=5)
176
+
177
+ # 回测策略
178
+ backtest_results = framework.backtest_strategy(
179
+ signal_func=ma_signal_wrapper,
180
+ min_periods=10,
181
+ position_size=0.2,
182
+ initial_capital=10000.0,
183
+ commission_rate=0.00001,
184
+ take_profit=0.1,
185
+ stop_loss=0.5,
186
+ check_periods=1, # 只能为1,因为实际使用时无法看到未来数据
187
+ strategy_name="MA5策略"
188
+ )
189
+
190
+ framework.print_backtest_results(backtest_results)
191
+ framework.plot_backtest_results(backtest_results, save_dir='result')
192
+ ```
193
+
194
+ ### 示例3: 在信号策略中使用因子
195
+
196
+ ```python
197
+ from cyqnt_trd.backtesting import BacktestFramework
198
+ from cyqnt_trd.trading_signal.signal import factor_based_signal
199
+ from cyqnt_trd.trading_signal.factor import ma_factor
200
+
201
+ # 加载数据
202
+ framework = BacktestFramework(data_path='path/to/data.json')
203
+
204
+ # 创建基于因子的信号函数
205
+ def factor_signal_wrapper(data, index, position, entry_price, entry_index,
206
+ take_profit, stop_loss, check_periods):
207
+ factor_func = lambda d, i: ma_factor(d, i, period=5)
208
+ return factor_based_signal(
209
+ data, index, position, entry_price, entry_index,
210
+ take_profit, stop_loss, check_periods,
211
+ factor_func=factor_func
212
+ )
213
+
214
+ # 回测策略
215
+ backtest_results = framework.backtest_strategy(
216
+ signal_func=factor_signal_wrapper,
217
+ min_periods=10,
218
+ position_size=0.2,
219
+ initial_capital=10000.0,
220
+ commission_rate=0.00001,
221
+ take_profit=0.1,
222
+ stop_loss=0.5,
223
+ check_periods=1, # 只能为1,因为实际使用时无法看到未来数据
224
+ strategy_name="基于MA因子的策略"
225
+ )
226
+
227
+ framework.print_backtest_results(backtest_results)
228
+ framework.plot_backtest_results(backtest_results, save_dir='result')
229
+ ```
230
+
231
+ ## 扩展指南
232
+
233
+ ### 添加新因子
234
+
235
+ 1. 在 `factor/` 目录下创建新的因子文件(如 `macd_factor.py`)
236
+ 2. 实现因子函数,符合签名:`factor_func(data: pd.DataFrame, index: int) -> float`
237
+ 3. 在 `factor/__init__.py` 中导入并导出新因子
238
+
239
+ ### 添加新信号策略
240
+
241
+ 1. 在 `signal/` 目录下创建新的信号文件(如 `macd_signal.py`)
242
+ 2. 实现信号函数,符合签名:`signal_func(data, index, position, entry_price, entry_index, take_profit, stop_loss, check_periods) -> str`
243
+ 3. 如果需要使用factor中的因子,可以从 `cyqnt_trd.trading_signal.factor` 导入
244
+ 4. 在 `signal/__init__.py` 中导入并导出新信号
245
+
246
+ ### 在信号中使用因子
247
+
248
+ 信号策略可以直接导入并使用factor中的因子:
249
+
250
+ ```python
251
+ # 在signal模块的文件中
252
+ from ..factor.ma_factor import ma_factor
253
+ from ..factor.rsi_factor import rsi_factor
254
+
255
+ def my_signal(data, index, position, entry_price, entry_index,
256
+ take_profit, stop_loss, check_periods):
257
+ # 使用factor中的因子
258
+ ma_value = ma_factor(data, index, period=5)
259
+ rsi_value = rsi_factor(data, index, period=14)
260
+
261
+ # 基于因子值生成交易信号
262
+ if ma_value > 0 and rsi_value > 0:
263
+ return 'buy'
264
+ elif ma_value < 0 and rsi_value < 0:
265
+ return 'sell'
266
+ else:
267
+ return 'hold'
268
+ ```
269
+
270
+ ## 注意事项
271
+
272
+ 1. 因子函数和信号函数都需要处理数据不足的情况(返回0或'hold')
273
+ 2. 信号函数需要检查止盈止损条件
274
+ 3. 使用因子或信号时,通常需要创建包装函数来适配框架的参数要求
275
+ 4. 多因子组合时,注意权重的归一化
276
+
@@ -0,0 +1,17 @@
1
+ """
2
+ 交易信号模块
3
+
4
+ 提供因子计算和交易信号生成功能
5
+ """
6
+
7
+ # 导入子模块
8
+ from . import factor
9
+ from . import signal
10
+ from . import selected_alpha
11
+
12
+ __all__ = [
13
+ 'factor',
14
+ 'signal',
15
+ 'selected_alpha',
16
+ ]
17
+