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,86 @@
1
+ """
2
+ Alpha#78 因子
3
+
4
+ 公式: (rank(correlation(sum(((low * 0.352233) + (vwap * (1 - 0.352233))), 19.7428),sum(adv40, 19.7428), 6.83313))^rank(correlation(rank(vwap), rank(volume), 5.77492)))
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 alpha78_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#78 因子计算
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
+ adv40 = sma(volume, 40)
68
+ result = (rank(correlation(ts_sum(((low_price * 0.352233) + (vwap * (1 - 0.352233))), 20),ts_sum(adv40,20), 7)).pow(rank(correlation(rank(vwap), rank(volume), 6))))
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,74 @@
1
+ """
2
+ Alpha#79 因子
3
+
4
+ 公式: Alpha#79 (未在参考文件中找到)
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 alpha79_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#79 因子计算
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#79因子
67
+ # 公式: Alpha#79 (未在参考文件中找到)
68
+ # 注意:此alpha在参考文件中未找到实现,需要手动实现
69
+
70
+ return 0.0
71
+
72
+ except Exception as e:
73
+ # 如果计算出错,返回0
74
+ return 0.0
@@ -0,0 +1,87 @@
1
+ """
2
+ Alpha#8 因子
3
+
4
+ 公式: (-1 * rank(((sum(open, 5) * sum(returns, 5)) - delay((sum(open, 5) * sum(returns, 5)),10))))
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 alpha8_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#8 因子计算
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 = -1 * (rank(((ts_sum(open_price, 5) * ts_sum(returns, 5)) -
69
+ delay((ts_sum(open_price, 5) * ts_sum(returns, 5)), 10))))
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,74 @@
1
+ """
2
+ Alpha#80 因子
3
+
4
+ 公式: Alpha#80 (未在参考文件中找到)
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 alpha80_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#80 因子计算
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#80因子
67
+ # 公式: Alpha#80 (未在参考文件中找到)
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#81 因子
3
+
4
+ 公式: ((rank(Log(product(rank((rank(correlation(vwap, sum(adv10, 49.6054),8.47743))^4)), 14.9655))) < rank(correlation(rank(vwap), rank(volume), 5.07914))) * -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 alpha81_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#81 因子计算
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
+ adv10 = sma(volume, 10)
68
+ result = ((rank(log(product(rank((rank(correlation(vwap, ts_sum(adv10, 50),8)).pow(4))), 15))) < rank(correlation(rank(vwap), rank(volume), 5))) * -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
@@ -0,0 +1,74 @@
1
+ """
2
+ Alpha#82 因子
3
+
4
+ 公式: Alpha#82 (未在参考文件中找到)
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 alpha82_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#82 因子计算
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#82因子
67
+ # 公式: Alpha#82 (未在参考文件中找到)
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#83 因子
3
+
4
+ 公式: ((rank(delay(((high - low) / (sum(close, 5) / 5)), 2)) * rank(rank(volume))) / (((high -low) / (sum(close, 5) / 5)) / (vwap - close)))
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 alpha83_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#83 因子计算
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(delay(((high_price - low_price) / (ts_sum(close_price, 5) / 5)), 2)) * rank(rank(volume))) / (((high_price -low_price) / (ts_sum(close_price, 5) / 5)) / (vwap - close_price)))
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#84 因子
3
+
4
+ 公式: SignedPower(Ts_Rank((vwap - ts_max(vwap, 15.3217)), 20.7127), delta(close,4.96796))
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 alpha84_factor(
25
+ data_slice: pd.DataFrame,
26
+ **kwargs
27
+ ) -> float:
28
+ """
29
+ Alpha#84 因子计算
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 = pow(ts_rank((vwap - ts_max(vwap, 15)), 21), delta(close_price,5))
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