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,158 @@
1
+ """
2
+ 选币Alpha因子模块
3
+
4
+ 包含用于选币的Alpha因子计算(101个WorldQuant Alpha因子)
5
+ """
6
+
7
+ # 导入所有alpha因子函数
8
+ from .alpha1 import alpha1_factor
9
+ from .alpha2 import alpha2_factor
10
+ from .alpha3 import alpha3_factor
11
+ from .alpha4 import alpha4_factor
12
+ from .alpha5 import alpha5_factor
13
+ from .alpha6 import alpha6_factor
14
+ from .alpha7 import alpha7_factor
15
+ from .alpha8 import alpha8_factor
16
+ from .alpha9 import alpha9_factor
17
+ from .alpha10 import alpha10_factor
18
+ from .alpha11 import alpha11_factor
19
+ from .alpha12 import alpha12_factor
20
+ from .alpha13 import alpha13_factor
21
+ from .alpha14 import alpha14_factor
22
+ from .alpha15 import alpha15_factor
23
+ from .alpha16 import alpha16_factor
24
+ from .alpha17 import alpha17_factor
25
+ from .alpha18 import alpha18_factor
26
+ from .alpha19 import alpha19_factor
27
+ from .alpha20 import alpha20_factor
28
+ from .alpha21 import alpha21_factor
29
+ from .alpha22 import alpha22_factor
30
+ from .alpha23 import alpha23_factor
31
+ from .alpha24 import alpha24_factor
32
+ from .alpha25 import alpha25_factor
33
+ from .alpha26 import alpha26_factor
34
+ from .alpha27 import alpha27_factor
35
+ from .alpha28 import alpha28_factor
36
+ from .alpha29 import alpha29_factor
37
+ from .alpha30 import alpha30_factor
38
+ from .alpha31 import alpha31_factor
39
+ from .alpha32 import alpha32_factor
40
+ from .alpha33 import alpha33_factor
41
+ from .alpha34 import alpha34_factor
42
+ from .alpha35 import alpha35_factor
43
+ from .alpha36 import alpha36_factor
44
+ from .alpha37 import alpha37_factor
45
+ from .alpha38 import alpha38_factor
46
+ from .alpha39 import alpha39_factor
47
+ from .alpha40 import alpha40_factor
48
+ from .alpha41 import alpha41_factor
49
+ from .alpha42 import alpha42_factor
50
+ from .alpha43 import alpha43_factor
51
+ from .alpha44 import alpha44_factor
52
+ from .alpha45 import alpha45_factor
53
+ from .alpha46 import alpha46_factor
54
+ from .alpha47 import alpha47_factor
55
+ from .alpha48 import alpha48_factor
56
+ from .alpha49 import alpha49_factor
57
+ from .alpha50 import alpha50_factor
58
+ from .alpha51 import alpha51_factor
59
+ from .alpha52 import alpha52_factor
60
+ from .alpha53 import alpha53_factor
61
+ from .alpha54 import alpha54_factor
62
+ from .alpha55 import alpha55_factor
63
+ from .alpha56 import alpha56_factor
64
+ from .alpha57 import alpha57_factor
65
+ from .alpha58 import alpha58_factor
66
+ from .alpha59 import alpha59_factor
67
+ from .alpha60 import alpha60_factor
68
+ from .alpha61 import alpha61_factor
69
+ from .alpha62 import alpha62_factor
70
+ from .alpha63 import alpha63_factor
71
+ from .alpha64 import alpha64_factor
72
+ from .alpha65 import alpha65_factor
73
+ from .alpha66 import alpha66_factor
74
+ from .alpha67 import alpha67_factor
75
+ from .alpha68 import alpha68_factor
76
+ from .alpha69 import alpha69_factor
77
+ from .alpha70 import alpha70_factor
78
+ from .alpha71 import alpha71_factor
79
+ from .alpha72 import alpha72_factor
80
+ from .alpha73 import alpha73_factor
81
+ from .alpha74 import alpha74_factor
82
+ from .alpha75 import alpha75_factor
83
+ from .alpha76 import alpha76_factor
84
+ from .alpha77 import alpha77_factor
85
+ from .alpha78 import alpha78_factor
86
+ from .alpha79 import alpha79_factor
87
+ from .alpha80 import alpha80_factor
88
+ from .alpha81 import alpha81_factor
89
+ from .alpha82 import alpha82_factor
90
+ from .alpha83 import alpha83_factor
91
+ from .alpha84 import alpha84_factor
92
+ from .alpha85 import alpha85_factor
93
+ from .alpha86 import alpha86_factor
94
+ from .alpha87 import alpha87_factor
95
+ from .alpha88 import alpha88_factor
96
+ from .alpha89 import alpha89_factor
97
+ from .alpha90 import alpha90_factor
98
+ from .alpha91 import alpha91_factor
99
+ from .alpha92 import alpha92_factor
100
+ from .alpha93 import alpha93_factor
101
+ from .alpha94 import alpha94_factor
102
+ from .alpha95 import alpha95_factor
103
+ from .alpha96 import alpha96_factor
104
+ from .alpha97 import alpha97_factor
105
+ from .alpha98 import alpha98_factor
106
+ from .alpha99 import alpha99_factor
107
+ from .alpha100 import alpha100_factor
108
+ from .alpha101 import alpha101_factor
109
+
110
+ # 导出所有alpha因子函数
111
+ __all__ = [
112
+ 'alpha1_factor', 'alpha2_factor', 'alpha3_factor', 'alpha4_factor', 'alpha5_factor',
113
+ 'alpha6_factor', 'alpha7_factor', 'alpha8_factor', 'alpha9_factor', 'alpha10_factor',
114
+ 'alpha11_factor', 'alpha12_factor', 'alpha13_factor', 'alpha14_factor', 'alpha15_factor',
115
+ 'alpha16_factor', 'alpha17_factor', 'alpha18_factor', 'alpha19_factor', 'alpha20_factor',
116
+ 'alpha21_factor', 'alpha22_factor', 'alpha23_factor', 'alpha24_factor', 'alpha25_factor',
117
+ 'alpha26_factor', 'alpha27_factor', 'alpha28_factor', 'alpha29_factor', 'alpha30_factor',
118
+ 'alpha31_factor', 'alpha32_factor', 'alpha33_factor', 'alpha34_factor', 'alpha35_factor',
119
+ 'alpha36_factor', 'alpha37_factor', 'alpha38_factor', 'alpha39_factor', 'alpha40_factor',
120
+ 'alpha41_factor', 'alpha42_factor', 'alpha43_factor', 'alpha44_factor', 'alpha45_factor',
121
+ 'alpha46_factor', 'alpha47_factor', 'alpha48_factor', 'alpha49_factor', 'alpha50_factor',
122
+ 'alpha51_factor', 'alpha52_factor', 'alpha53_factor', 'alpha54_factor', 'alpha55_factor',
123
+ 'alpha56_factor', 'alpha57_factor', 'alpha58_factor', 'alpha59_factor', 'alpha60_factor',
124
+ 'alpha61_factor', 'alpha62_factor', 'alpha63_factor', 'alpha64_factor', 'alpha65_factor',
125
+ 'alpha66_factor', 'alpha67_factor', 'alpha68_factor', 'alpha69_factor', 'alpha70_factor',
126
+ 'alpha71_factor', 'alpha72_factor', 'alpha73_factor', 'alpha74_factor', 'alpha75_factor',
127
+ 'alpha76_factor', 'alpha77_factor', 'alpha78_factor', 'alpha79_factor', 'alpha80_factor',
128
+ 'alpha81_factor', 'alpha82_factor', 'alpha83_factor', 'alpha84_factor', 'alpha85_factor',
129
+ 'alpha86_factor', 'alpha87_factor', 'alpha88_factor', 'alpha89_factor', 'alpha90_factor',
130
+ 'alpha91_factor', 'alpha92_factor', 'alpha93_factor', 'alpha94_factor', 'alpha95_factor',
131
+ 'alpha96_factor', 'alpha97_factor', 'alpha98_factor', 'alpha99_factor', 'alpha100_factor',
132
+ 'alpha101_factor',
133
+ ]
134
+
135
+ # 创建alpha因子字典,方便批量调用
136
+ ALPHA_FACTORS = {
137
+ 1: alpha1_factor, 2: alpha2_factor, 3: alpha3_factor, 4: alpha4_factor, 5: alpha5_factor,
138
+ 6: alpha6_factor, 7: alpha7_factor, 8: alpha8_factor, 9: alpha9_factor, 10: alpha10_factor,
139
+ 11: alpha11_factor, 12: alpha12_factor, 13: alpha13_factor, 14: alpha14_factor, 15: alpha15_factor,
140
+ 16: alpha16_factor, 17: alpha17_factor, 18: alpha18_factor, 19: alpha19_factor, 20: alpha20_factor,
141
+ 21: alpha21_factor, 22: alpha22_factor, 23: alpha23_factor, 24: alpha24_factor, 25: alpha25_factor,
142
+ 26: alpha26_factor, 27: alpha27_factor, 28: alpha28_factor, 29: alpha29_factor, 30: alpha30_factor,
143
+ 31: alpha31_factor, 32: alpha32_factor, 33: alpha33_factor, 34: alpha34_factor, 35: alpha35_factor,
144
+ 36: alpha36_factor, 37: alpha37_factor, 38: alpha38_factor, 39: alpha39_factor, 40: alpha40_factor,
145
+ 41: alpha41_factor, 42: alpha42_factor, 43: alpha43_factor, 44: alpha44_factor, 45: alpha45_factor,
146
+ 46: alpha46_factor, 47: alpha47_factor, 48: alpha48_factor, 49: alpha49_factor, 50: alpha50_factor,
147
+ 51: alpha51_factor, 52: alpha52_factor, 53: alpha53_factor, 54: alpha54_factor, 55: alpha55_factor,
148
+ 56: alpha56_factor, 57: alpha57_factor, 58: alpha58_factor, 59: alpha59_factor, 60: alpha60_factor,
149
+ 61: alpha61_factor, 62: alpha62_factor, 63: alpha63_factor, 64: alpha64_factor, 65: alpha65_factor,
150
+ 66: alpha66_factor, 67: alpha67_factor, 68: alpha68_factor, 69: alpha69_factor, 70: alpha70_factor,
151
+ 71: alpha71_factor, 72: alpha72_factor, 73: alpha73_factor, 74: alpha74_factor, 75: alpha75_factor,
152
+ 76: alpha76_factor, 77: alpha77_factor, 78: alpha78_factor, 79: alpha79_factor, 80: alpha80_factor,
153
+ 81: alpha81_factor, 82: alpha82_factor, 83: alpha83_factor, 84: alpha84_factor, 85: alpha85_factor,
154
+ 86: alpha86_factor, 87: alpha87_factor, 88: alpha88_factor, 89: alpha89_factor, 90: alpha90_factor,
155
+ 91: alpha91_factor, 92: alpha92_factor, 93: alpha93_factor, 94: alpha94_factor, 95: alpha95_factor,
156
+ 96: alpha96_factor, 97: alpha97_factor, 98: alpha98_factor, 99: alpha99_factor, 100: alpha100_factor,
157
+ 101: alpha101_factor,
158
+ }
@@ -0,0 +1,87 @@
1
+ """
2
+ Alpha#1 因子
3
+
4
+ 公式: (rank(Ts_ArgMax(SignedPower(((returns < 0) ? stddev(returns, 20) : close), 2.), 5)) -0.5)
5
+
6
+ 说明:
7
+ 此alpha因子基于WorldQuant的101个alpha因子公式实现。
8
+ 适配crypto交易数据格式(open_price, high_price, low_price, close_price, volume, quote_volume)。
9
+
10
+ 标签:待补充
11
+ """
12
+
13
+ import pandas as pd
14
+ import numpy as np
15
+ from typing import Optional
16
+ from .alpha_utils import (
17
+ ts_sum, sma, stddev, correlation, covariance,
18
+ ts_rank, product, ts_min, ts_max, delta, delay,
19
+ rank, scale, ts_argmax, ts_argmin, decay_linear,
20
+ sign, abs, log, signed_power
21
+ )
22
+
23
+
24
+ def alpha1_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#1 因子计算
30
+
31
+ Args:
32
+ data_slice: 数据切片,必须包含以下列:
33
+ - open_price: 开盘价
34
+ - high_price: 最高价
35
+ - low_price: 最低价
36
+ - close_price: 收盘价
37
+ - volume: 成交量
38
+ - quote_volume: 成交额(用于计算vwap)
39
+ **kwargs: 其他可选参数
40
+
41
+ Returns:
42
+ 因子值(最后一个时间点的值)
43
+ """
44
+ try:
45
+ if len(data_slice) < 2:
46
+ return 0.0
47
+
48
+ # 提取数据列
49
+ open_price = data_slice['open_price']
50
+ high_price = data_slice['high_price']
51
+ low_price = data_slice['low_price']
52
+ close_price = data_slice['close_price']
53
+ volume = data_slice['volume']
54
+ quote_volume = data_slice.get('quote_volume', volume * close_price) # 如果没有quote_volume,使用volume*close_price估算
55
+
56
+ # 计算收益率
57
+ returns = close_price.pct_change().fillna(0)
58
+
59
+ # 计算VWAP (Volume Weighted Average Price)
60
+ # vwap = quote_volume / volume,如果volume为0则使用close_price
61
+ vwap = (quote_volume / (volume + 1e-10)).fillna(close_price)
62
+
63
+ # 计算adv20 (20日平均成交量)
64
+ adv20 = sma(volume, 20)
65
+
66
+ # 实现Alpha因子逻辑
67
+ inner = close_price.copy()
68
+ inner[returns < 0] = stddev(returns, 20)
69
+ result = rank(ts_argmax(inner ** 2, 5))
70
+
71
+ # 返回最后一个值(如果是Series)或直接返回值
72
+ if isinstance(result, pd.Series):
73
+ result_value = result.iloc[-1] if len(result) > 0 else 0.0
74
+ elif isinstance(result, (int, float, np.number)):
75
+ result_value = float(result)
76
+ else:
77
+ result_value = 0.0
78
+
79
+ # 处理NaN和无穷大
80
+ if pd.isna(result_value) or np.isinf(result_value):
81
+ return 0.0
82
+
83
+ return float(result_value)
84
+
85
+ except Exception as e:
86
+ # 如果计算出错,返回0
87
+ return 0.0
@@ -0,0 +1,90 @@
1
+ """
2
+ Alpha#10 因子
3
+
4
+ 公式: rank(((0 < ts_min(delta(close, 1), 4)) ? delta(close, 1) : ((ts_max(delta(close, 1), 4) < 0)? delta(close, 1) : (-1 * delta(close, 1)))))
5
+
6
+ 说明:
7
+ 此alpha因子基于WorldQuant的101个alpha因子公式实现。
8
+ 适配crypto交易数据格式(open_price, high_price, low_price, close_price, volume, quote_volume)。
9
+
10
+ 标签:待补充
11
+ """
12
+
13
+ import pandas as pd
14
+ import numpy as np
15
+ from typing import Optional
16
+ from .alpha_utils import (
17
+ ts_sum, sma, stddev, correlation, covariance,
18
+ ts_rank, product, ts_min, ts_max, delta, delay,
19
+ rank, scale, ts_argmax, ts_argmin, decay_linear,
20
+ sign, abs, log, signed_power
21
+ )
22
+
23
+
24
+ def alpha10_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#10 因子计算
30
+
31
+ Args:
32
+ data_slice: 数据切片,必须包含以下列:
33
+ - open_price: 开盘价
34
+ - high_price: 最高价
35
+ - low_price: 最低价
36
+ - close_price: 收盘价
37
+ - volume: 成交量
38
+ - quote_volume: 成交额(用于计算vwap)
39
+ **kwargs: 其他可选参数
40
+
41
+ Returns:
42
+ 因子值(最后一个时间点的值)
43
+ """
44
+ try:
45
+ if len(data_slice) < 2:
46
+ return 0.0
47
+
48
+ # 提取数据列
49
+ open_price = data_slice['open_price']
50
+ high_price = data_slice['high_price']
51
+ low_price = data_slice['low_price']
52
+ close_price = data_slice['close_price']
53
+ volume = data_slice['volume']
54
+ quote_volume = data_slice.get('quote_volume', volume * close_price) # 如果没有quote_volume,使用volume*close_price估算
55
+
56
+ # 计算收益率
57
+ returns = close_price.pct_change().fillna(0)
58
+
59
+ # 计算VWAP (Volume Weighted Average Price)
60
+ # vwap = quote_volume / volume,如果volume为0则使用close_price
61
+ vwap = (quote_volume / (volume + 1e-10)).fillna(close_price)
62
+
63
+ # 计算adv20 (20日平均成交量)
64
+ adv20 = sma(volume, 20)
65
+
66
+ # 实现Alpha因子逻辑
67
+ delta_close = delta(close_price, 1)
68
+ cond_1 = ts_min(delta_close, 4) > 0
69
+ cond_2 = ts_max(delta_close, 4) < 0
70
+ alpha = -1 * delta_close
71
+ alpha[cond_1 | cond_2] = delta_close
72
+ result = alpha
73
+
74
+ # 返回最后一个值(如果是Series)或直接返回值
75
+ if isinstance(result, pd.Series):
76
+ result_value = result.iloc[-1] if len(result) > 0 else 0.0
77
+ elif isinstance(result, (int, float, np.number)):
78
+ result_value = float(result)
79
+ else:
80
+ result_value = 0.0
81
+
82
+ # 处理NaN和无穷大
83
+ if pd.isna(result_value) or np.isinf(result_value):
84
+ return 0.0
85
+
86
+ return float(result_value)
87
+
88
+ except Exception as e:
89
+ # 如果计算出错,返回0
90
+ return 0.0
@@ -0,0 +1,74 @@
1
+ """
2
+ Alpha#100 因子
3
+
4
+ 公式: Alpha#100 (未在参考文件中找到)
5
+
6
+ 说明:
7
+ 此alpha因子基于WorldQuant的101个alpha因子公式实现。
8
+ 适配crypto交易数据格式(open_price, high_price, low_price, close_price, volume, quote_volume)。
9
+
10
+ 标签:待补充
11
+ """
12
+
13
+ import pandas as pd
14
+ import numpy as np
15
+ from typing import Optional
16
+ from .alpha_utils import (
17
+ ts_sum, sma, stddev, correlation, covariance,
18
+ ts_rank, product, ts_min, ts_max, delta, delay,
19
+ rank, scale, ts_argmax, ts_argmin, decay_linear,
20
+ sign, abs, log, signed_power
21
+ )
22
+
23
+
24
+ def alpha100_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#100 因子计算
30
+
31
+ Args:
32
+ data_slice: 数据切片,必须包含以下列:
33
+ - open_price: 开盘价
34
+ - high_price: 最高价
35
+ - low_price: 最低价
36
+ - close_price: 收盘价
37
+ - volume: 成交量
38
+ - quote_volume: 成交额(用于计算vwap)
39
+ **kwargs: 其他可选参数
40
+
41
+ Returns:
42
+ 因子值(最后一个时间点的值)
43
+ """
44
+ try:
45
+ if len(data_slice) < 2:
46
+ return 0.0
47
+
48
+ # 提取数据列
49
+ open_price = data_slice['open_price']
50
+ high_price = data_slice['high_price']
51
+ low_price = data_slice['low_price']
52
+ close_price = data_slice['close_price']
53
+ volume = data_slice['volume']
54
+ quote_volume = data_slice.get('quote_volume', volume * close_price) # 如果没有quote_volume,使用volume*close_price估算
55
+
56
+ # 计算收益率
57
+ returns = close_price.pct_change().fillna(0)
58
+
59
+ # 计算VWAP (Volume Weighted Average Price)
60
+ # vwap = quote_volume / volume,如果volume为0则使用close_price
61
+ vwap = (quote_volume / (volume + 1e-10)).fillna(close_price)
62
+
63
+ # 计算adv20 (20日平均成交量)
64
+ adv20 = sma(volume, 20)
65
+
66
+ # TODO: 实现Alpha#100因子
67
+ # 公式: Alpha#100 (未在参考文件中找到)
68
+ # 注意:此alpha在参考文件中未找到实现,需要手动实现
69
+
70
+ return 0.0
71
+
72
+ except Exception as e:
73
+ # 如果计算出错,返回0
74
+ return 0.0
@@ -0,0 +1,86 @@
1
+ """
2
+ Alpha#101 因子
3
+
4
+ 公式: ((close - open) / ((high - low) + .001))
5
+
6
+ 说明:
7
+ 此alpha因子基于WorldQuant的101个alpha因子公式实现。
8
+ 适配crypto交易数据格式(open_price, high_price, low_price, close_price, volume, quote_volume)。
9
+
10
+ 标签:待补充
11
+ """
12
+
13
+ import pandas as pd
14
+ import numpy as np
15
+ from typing import Optional
16
+ from .alpha_utils import (
17
+ ts_sum, sma, stddev, correlation, covariance,
18
+ ts_rank, product, ts_min, ts_max, delta, delay,
19
+ rank, scale, ts_argmax, ts_argmin, decay_linear,
20
+ sign, abs, log, signed_power
21
+ )
22
+
23
+
24
+ def alpha101_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#101 因子计算
30
+
31
+ Args:
32
+ data_slice: 数据切片,必须包含以下列:
33
+ - open_price: 开盘价
34
+ - high_price: 最高价
35
+ - low_price: 最低价
36
+ - close_price: 收盘价
37
+ - volume: 成交量
38
+ - quote_volume: 成交额(用于计算vwap)
39
+ **kwargs: 其他可选参数
40
+
41
+ Returns:
42
+ 因子值(最后一个时间点的值)
43
+ """
44
+ try:
45
+ if len(data_slice) < 2:
46
+ return 0.0
47
+
48
+ # 提取数据列
49
+ open_price = data_slice['open_price']
50
+ high_price = data_slice['high_price']
51
+ low_price = data_slice['low_price']
52
+ close_price = data_slice['close_price']
53
+ volume = data_slice['volume']
54
+ quote_volume = data_slice.get('quote_volume', volume * close_price) # 如果没有quote_volume,使用volume*close_price估算
55
+
56
+ # 计算收益率
57
+ returns = close_price.pct_change().fillna(0)
58
+
59
+ # 计算VWAP (Volume Weighted Average Price)
60
+ # vwap = quote_volume / volume,如果volume为0则使用close_price
61
+ vwap = (quote_volume / (volume + 1e-10)).fillna(close_price)
62
+
63
+ # 计算adv20 (20日平均成交量)
64
+ adv20 = sma(volume, 20)
65
+
66
+ # 实现Alpha因子逻辑
67
+
68
+ result = (close_price - open_price) /((high_price - low_price) + 0.001)
69
+
70
+ # 返回最后一个值(如果是Series)或直接返回值
71
+ if isinstance(result, pd.Series):
72
+ result_value = result.iloc[-1] if len(result) > 0 else 0.0
73
+ elif isinstance(result, (int, float, np.number)):
74
+ result_value = float(result)
75
+ else:
76
+ result_value = 0.0
77
+
78
+ # 处理NaN和无穷大
79
+ if pd.isna(result_value) or np.isinf(result_value):
80
+ return 0.0
81
+
82
+ return float(result_value)
83
+
84
+ except Exception as e:
85
+ # 如果计算出错,返回0
86
+ return 0.0
@@ -0,0 +1,86 @@
1
+ """
2
+ Alpha#11 因子
3
+
4
+ 公式: ((rank(ts_max((vwap - close), 3)) + rank(ts_min((vwap - close), 3))) *rank(delta(volume, 3)))
5
+
6
+ 说明:
7
+ 此alpha因子基于WorldQuant的101个alpha因子公式实现。
8
+ 适配crypto交易数据格式(open_price, high_price, low_price, close_price, volume, quote_volume)。
9
+
10
+ 标签:待补充
11
+ """
12
+
13
+ import pandas as pd
14
+ import numpy as np
15
+ from typing import Optional
16
+ from .alpha_utils import (
17
+ ts_sum, sma, stddev, correlation, covariance,
18
+ ts_rank, product, ts_min, ts_max, delta, delay,
19
+ rank, scale, ts_argmax, ts_argmin, decay_linear,
20
+ sign, abs, log, signed_power
21
+ )
22
+
23
+
24
+ def alpha11_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#11 因子计算
30
+
31
+ Args:
32
+ data_slice: 数据切片,必须包含以下列:
33
+ - open_price: 开盘价
34
+ - high_price: 最高价
35
+ - low_price: 最低价
36
+ - close_price: 收盘价
37
+ - volume: 成交量
38
+ - quote_volume: 成交额(用于计算vwap)
39
+ **kwargs: 其他可选参数
40
+
41
+ Returns:
42
+ 因子值(最后一个时间点的值)
43
+ """
44
+ try:
45
+ if len(data_slice) < 2:
46
+ return 0.0
47
+
48
+ # 提取数据列
49
+ open_price = data_slice['open_price']
50
+ high_price = data_slice['high_price']
51
+ low_price = data_slice['low_price']
52
+ close_price = data_slice['close_price']
53
+ volume = data_slice['volume']
54
+ quote_volume = data_slice.get('quote_volume', volume * close_price) # 如果没有quote_volume,使用volume*close_price估算
55
+
56
+ # 计算收益率
57
+ returns = close_price.pct_change().fillna(0)
58
+
59
+ # 计算VWAP (Volume Weighted Average Price)
60
+ # vwap = quote_volume / volume,如果volume为0则使用close_price
61
+ vwap = (quote_volume / (volume + 1e-10)).fillna(close_price)
62
+
63
+ # 计算adv20 (20日平均成交量)
64
+ adv20 = sma(volume, 20)
65
+
66
+ # 实现Alpha因子逻辑
67
+
68
+ result = ((rank(ts_max((vwap - close_price), 3)) + rank(ts_min((vwap - close_price), 3))) *rank(delta(volume, 3)))
69
+
70
+ # 返回最后一个值(如果是Series)或直接返回值
71
+ if isinstance(result, pd.Series):
72
+ result_value = result.iloc[-1] if len(result) > 0 else 0.0
73
+ elif isinstance(result, (int, float, np.number)):
74
+ result_value = float(result)
75
+ else:
76
+ result_value = 0.0
77
+
78
+ # 处理NaN和无穷大
79
+ if pd.isna(result_value) or np.isinf(result_value):
80
+ return 0.0
81
+
82
+ return float(result_value)
83
+
84
+ except Exception as e:
85
+ # 如果计算出错,返回0
86
+ return 0.0
@@ -0,0 +1,86 @@
1
+ """
2
+ Alpha#12 因子
3
+
4
+ 公式: (sign(delta(volume, 1)) * (-1 * delta(close, 1)))
5
+
6
+ 说明:
7
+ 此alpha因子基于WorldQuant的101个alpha因子公式实现。
8
+ 适配crypto交易数据格式(open_price, high_price, low_price, close_price, volume, quote_volume)。
9
+
10
+ 标签:待补充
11
+ """
12
+
13
+ import pandas as pd
14
+ import numpy as np
15
+ from typing import Optional
16
+ from .alpha_utils import (
17
+ ts_sum, sma, stddev, correlation, covariance,
18
+ ts_rank, product, ts_min, ts_max, delta, delay,
19
+ rank, scale, ts_argmax, ts_argmin, decay_linear,
20
+ sign, abs, log, signed_power
21
+ )
22
+
23
+
24
+ def alpha12_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#12 因子计算
30
+
31
+ Args:
32
+ data_slice: 数据切片,必须包含以下列:
33
+ - open_price: 开盘价
34
+ - high_price: 最高价
35
+ - low_price: 最低价
36
+ - close_price: 收盘价
37
+ - volume: 成交量
38
+ - quote_volume: 成交额(用于计算vwap)
39
+ **kwargs: 其他可选参数
40
+
41
+ Returns:
42
+ 因子值(最后一个时间点的值)
43
+ """
44
+ try:
45
+ if len(data_slice) < 2:
46
+ return 0.0
47
+
48
+ # 提取数据列
49
+ open_price = data_slice['open_price']
50
+ high_price = data_slice['high_price']
51
+ low_price = data_slice['low_price']
52
+ close_price = data_slice['close_price']
53
+ volume = data_slice['volume']
54
+ quote_volume = data_slice.get('quote_volume', volume * close_price) # 如果没有quote_volume,使用volume*close_price估算
55
+
56
+ # 计算收益率
57
+ returns = close_price.pct_change().fillna(0)
58
+
59
+ # 计算VWAP (Volume Weighted Average Price)
60
+ # vwap = quote_volume / volume,如果volume为0则使用close_price
61
+ vwap = (quote_volume / (volume + 1e-10)).fillna(close_price)
62
+
63
+ # 计算adv20 (20日平均成交量)
64
+ adv20 = sma(volume, 20)
65
+
66
+ # 实现Alpha因子逻辑
67
+
68
+ result = sign(delta(volume, 1)) * (-1 * delta(close_price, 1))
69
+
70
+ # 返回最后一个值(如果是Series)或直接返回值
71
+ if isinstance(result, pd.Series):
72
+ result_value = result.iloc[-1] if len(result) > 0 else 0.0
73
+ elif isinstance(result, (int, float, np.number)):
74
+ result_value = float(result)
75
+ else:
76
+ result_value = 0.0
77
+
78
+ # 处理NaN和无穷大
79
+ if pd.isna(result_value) or np.isinf(result_value):
80
+ return 0.0
81
+
82
+ return float(result_value)
83
+
84
+ except Exception as e:
85
+ # 如果计算出错,返回0
86
+ return 0.0