cyqnt-trd 0.1.2__py3-none-any.whl → 0.1.7__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 (40) hide show
  1. cyqnt_trd/CHANGELOG_0.1.7.md +111 -0
  2. cyqnt_trd/__init__.py +1 -1
  3. cyqnt_trd/backtesting/factor_test.py +3 -2
  4. cyqnt_trd/get_data/__init__.py +16 -1
  5. cyqnt_trd/get_data/get_futures_data.py +3 -3
  6. cyqnt_trd/get_data/get_kline_with_factor.py +808 -0
  7. cyqnt_trd/get_data/get_web3_trending_data.py +389 -0
  8. cyqnt_trd/online_trading/__init__.py +1 -0
  9. cyqnt_trd/online_trading/realtime_price_tracker.py +142 -2
  10. cyqnt_trd/trading_signal/example_usage.py +123 -7
  11. cyqnt_trd/trading_signal/factor/__init__.py +23 -0
  12. cyqnt_trd/trading_signal/factor/adx_factor.py +116 -0
  13. cyqnt_trd/trading_signal/factor/ao_factor.py +66 -0
  14. cyqnt_trd/trading_signal/factor/bbp_factor.py +68 -0
  15. cyqnt_trd/trading_signal/factor/cci_factor.py +65 -0
  16. cyqnt_trd/trading_signal/factor/ema_factor.py +102 -0
  17. cyqnt_trd/trading_signal/factor/macd_factor.py +97 -0
  18. cyqnt_trd/trading_signal/factor/momentum_factor.py +44 -0
  19. cyqnt_trd/trading_signal/factor/stochastic_factor.py +76 -0
  20. cyqnt_trd/trading_signal/factor/stochastic_tsi_factor.py +129 -0
  21. cyqnt_trd/trading_signal/factor/uo_factor.py +92 -0
  22. cyqnt_trd/trading_signal/factor/williams_r_factor.py +60 -0
  23. cyqnt_trd/trading_signal/factor_details.json +107 -0
  24. cyqnt_trd/trading_signal/selected_alpha/alpha1.py +4 -2
  25. cyqnt_trd/trading_signal/selected_alpha/alpha15.py +4 -2
  26. cyqnt_trd/trading_signal/selected_alpha/generate_alphas.py +1 -0
  27. {cyqnt_trd-0.1.2.dist-info → cyqnt_trd-0.1.7.dist-info}/METADATA +16 -12
  28. {cyqnt_trd-0.1.2.dist-info → cyqnt_trd-0.1.7.dist-info}/RECORD +34 -23
  29. {cyqnt_trd-0.1.2.dist-info → cyqnt_trd-0.1.7.dist-info}/WHEEL +1 -1
  30. test/real_time_trade.py +467 -10
  31. test/test_now_factor.py +1082 -0
  32. test/track_k_line_continue.py +372 -0
  33. cyqnt_trd/test_script/get_symbols_by_volume.py +0 -227
  34. cyqnt_trd/test_script/test_alpha.py +0 -261
  35. cyqnt_trd/test_script/test_kline_data.py +0 -479
  36. test/test_example_usage.py +0 -381
  37. test/test_get_data.py +0 -310
  38. test/test_realtime_price_tracker.py +0 -546
  39. {cyqnt_trd-0.1.2.dist-info → cyqnt_trd-0.1.7.dist-info}/licenses/LICENSE +0 -0
  40. {cyqnt_trd-0.1.2.dist-info → cyqnt_trd-0.1.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,97 @@
1
+ """
2
+ MACD(移动平均收敛散度)因子
3
+
4
+ 基于MACD指标的交易因子
5
+ """
6
+
7
+ import pandas as pd
8
+ import numpy as np
9
+
10
+
11
+ def _ema(data: np.ndarray, period: int) -> float:
12
+ """计算指数移动平均"""
13
+ if len(data) < period:
14
+ return np.mean(data)
15
+
16
+ # 使用最后period个值计算EMA
17
+ alpha = 2.0 / (period + 1.0)
18
+ ema = data[-period]
19
+
20
+ for i in range(-period + 1, 0):
21
+ ema = alpha * data[i] + (1 - alpha) * ema
22
+
23
+ return ema
24
+
25
+
26
+ def macd_level_factor(
27
+ data_slice: 'pd.DataFrame',
28
+ fast_period: int = 12,
29
+ slow_period: int = 26
30
+ ) -> float:
31
+ """
32
+ MACD Level因子
33
+
34
+ 当MACD线在信号线上方时看多,在下方时看空
35
+
36
+ Args:
37
+ data_slice: 数据切片,必须包含至少 slow_period+9 行数据
38
+ 最后一行是当前数据点,前面 slow_period+8 行是历史数据
39
+ fast_period: 快速EMA周期(默认12)
40
+ slow_period: 慢速EMA周期(默认26)
41
+
42
+ Returns:
43
+ 因子值:1.0(看多)、-1.0(看空)或 0(数据不足或中性)
44
+ """
45
+ # 需要足够的数据来计算MACD和信号线(信号线通常是9期EMA)
46
+ signal_period = 9
47
+ min_period = max(slow_period, fast_period) + signal_period
48
+
49
+ if len(data_slice) < min_period + 1:
50
+ return 0.0
51
+
52
+ # 获取收盘价
53
+ close_prices = data_slice['close_price'].values
54
+
55
+ # 计算快速和慢速EMA
56
+ fast_ema = _ema(close_prices, fast_period)
57
+ slow_ema = _ema(close_prices, slow_period)
58
+
59
+ # MACD线 = 快速EMA - 慢速EMA
60
+ macd_line = fast_ema - slow_ema
61
+
62
+ # 计算MACD历史值以计算信号线
63
+ # 需要计算过去signal_period个时间点的MACD值
64
+ macd_values = []
65
+ for i in range(signal_period):
66
+ # 计算第i个历史时间点的MACD值
67
+ # 需要从当前时间点往前推i+1个周期
68
+ lookback = i + 1
69
+ if len(data_slice) < slow_period + lookback:
70
+ return 0.0
71
+
72
+ # 获取到第i个历史时间点的数据(不包括当前时间点)
73
+ # 例如:i=0时,取data_slice[:-1](不包括最后一行)
74
+ # i=1时,取data_slice[:-2](不包括最后两行)
75
+ close_subset = data_slice.iloc[:-(lookback)]['close_price'].values
76
+ if len(close_subset) < slow_period:
77
+ return 0.0
78
+
79
+ fast_ema_val = _ema(close_subset, fast_period)
80
+ slow_ema_val = _ema(close_subset, slow_period)
81
+ macd_val = fast_ema_val - slow_ema_val
82
+ macd_values.append(macd_val)
83
+
84
+ # 计算信号线(MACD的EMA)
85
+ if len(macd_values) < signal_period:
86
+ return 0.0
87
+
88
+ signal_line = _ema(np.array(macd_values), signal_period)
89
+
90
+ # 根据MACD和信号线的关系返回因子
91
+ if macd_line > signal_line:
92
+ return 1.0 # MACD在信号线上方,看多
93
+ elif macd_line < signal_line:
94
+ return -1.0 # MACD在信号线下方,看空
95
+ else:
96
+ return 0.0 # 中性
97
+
@@ -0,0 +1,44 @@
1
+ """
2
+ Momentum(动量指标)因子
3
+
4
+ 基于动量指标的交易因子
5
+ """
6
+
7
+ import pandas as pd
8
+ import numpy as np
9
+
10
+
11
+ def momentum_factor(data_slice: 'pd.DataFrame', period: int = 10) -> float:
12
+ """
13
+ 动量指标因子
14
+
15
+ 当动量为正时看多,为负时看空
16
+
17
+ Args:
18
+ data_slice: 数据切片,必须包含至少 period+1 行数据
19
+ 最后一行是当前数据点,前面 period 行是历史数据
20
+ period: 动量计算周期(默认10)
21
+
22
+ Returns:
23
+ 因子值:1.0(看多)、-1.0(看空)或 0(数据不足)
24
+ """
25
+ if len(data_slice) < period + 1:
26
+ return 0.0
27
+
28
+ # 当前收盘价
29
+ current_close = data_slice.iloc[-1]['close_price']
30
+
31
+ # period期前的收盘价
32
+ past_close = data_slice.iloc[-period-1]['close_price']
33
+
34
+ # 计算动量
35
+ momentum = current_close - past_close
36
+
37
+ # 根据动量值返回因子
38
+ if momentum > 0:
39
+ return 1.0 # 正动量,看多
40
+ elif momentum < 0:
41
+ return -1.0 # 负动量,看空
42
+ else:
43
+ return 0.0 # 中性
44
+
@@ -0,0 +1,76 @@
1
+ """
2
+ Stochastic(随机指标)因子
3
+
4
+ 基于Stochastic %K指标的交易因子
5
+ """
6
+
7
+ import pandas as pd
8
+ import numpy as np
9
+
10
+
11
+ def stochastic_k_factor(
12
+ data_slice: 'pd.DataFrame',
13
+ period: int = 14,
14
+ k_smooth: int = 3,
15
+ d_smooth: int = 3,
16
+ oversold: float = 20.0,
17
+ overbought: float = 80.0
18
+ ) -> float:
19
+ """
20
+ Stochastic %K因子
21
+
22
+ 当Stochastic %K低于oversold时看多,高于overbought时看空
23
+
24
+ Args:
25
+ data_slice: 数据切片,必须包含至少 period+1 行数据
26
+ 最后一行是当前数据点,前面 period 行是历史数据
27
+ period: Stochastic计算周期(默认14)
28
+ k_smooth: %K平滑周期(默认3)
29
+ d_smooth: %D平滑周期(默认3,未使用但保留参数)
30
+ oversold: 超卖阈值(默认20)
31
+ overbought: 超买阈值(默认80)
32
+
33
+ Returns:
34
+ 因子值:1.0(看多)、-1.0(看空)或 0(数据不足或中性)
35
+ """
36
+ if len(data_slice) < period + k_smooth:
37
+ return 0.0
38
+
39
+ # 计算Stochastic %K
40
+ # 需要period+k_smooth行数据来计算平滑后的%K
41
+ k_values = []
42
+ for i in range(k_smooth):
43
+ if len(data_slice) < period + i + 1:
44
+ return 0.0
45
+
46
+ # 获取最近period+1行数据(包括当前点)
47
+ high_prices = data_slice.iloc[-period-i-1:]['high_price'].values
48
+ low_prices = data_slice.iloc[-period-i-1:]['low_price'].values
49
+ close_prices = data_slice.iloc[-period-i-1:]['close_price'].values
50
+
51
+ # 计算最高价和最低价
52
+ highest_high = np.max(high_prices)
53
+ lowest_low = np.min(low_prices)
54
+
55
+ # 当前收盘价
56
+ current_close = close_prices[-1]
57
+
58
+ # 计算%K
59
+ if highest_high == lowest_low:
60
+ k = 50.0 # 中性值
61
+ else:
62
+ k = 100.0 * (current_close - lowest_low) / (highest_high - lowest_low)
63
+
64
+ k_values.append(k)
65
+
66
+ # 平滑%K(简单移动平均)
67
+ k_smoothed = np.mean(k_values)
68
+
69
+ # 根据Stochastic %K值返回因子
70
+ if k_smoothed < oversold:
71
+ return 1.0 # 超卖,看多
72
+ elif k_smoothed > overbought:
73
+ return -1.0 # 超买,看空
74
+ else:
75
+ return 0.0 # 中性
76
+
@@ -0,0 +1,129 @@
1
+ """
2
+ Stochastic TSI(随机TSI)因子
3
+
4
+ 基于Stochastic TSI指标的交易因子
5
+ """
6
+
7
+ import pandas as pd
8
+ import numpy as np
9
+
10
+
11
+ def _ema(data: np.ndarray, period: int) -> float:
12
+ """计算指数移动平均"""
13
+ if len(data) < period:
14
+ return np.mean(data)
15
+
16
+ alpha = 2.0 / (period + 1.0)
17
+ ema = data[-period]
18
+
19
+ for i in range(-period + 1, 0):
20
+ ema = alpha * data[i] + (1 - alpha) * ema
21
+
22
+ return ema
23
+
24
+
25
+ def stochastic_tsi_fast_factor(
26
+ data_slice: 'pd.DataFrame',
27
+ r_period: int = 3,
28
+ s_period: int = 3,
29
+ tsi_period1: int = 14,
30
+ tsi_period2: int = 14,
31
+ oversold: float = 20.0,
32
+ overbought: float = 80.0
33
+ ) -> float:
34
+ """
35
+ Stochastic TSI Fast因子
36
+
37
+ 当Stochastic TSI低于oversold时看多,高于overbought时看空
38
+
39
+ Args:
40
+ data_slice: 数据切片,必须包含足够的历史数据
41
+ 最后一行是当前数据点
42
+ r_period: %K平滑周期(默认3)
43
+ s_period: %D平滑周期(默认3)
44
+ tsi_period1: TSI第一个周期(默认14)
45
+ tsi_period2: TSI第二个周期(默认14)
46
+ oversold: 超卖阈值(默认20)
47
+ overbought: 超买阈值(默认80)
48
+
49
+ Returns:
50
+ 因子值:1.0(看多)、-1.0(看空)或 0(数据不足或中性)
51
+ """
52
+ # 需要足够的数据来计算TSI和Stochastic
53
+ min_period = tsi_period1 + tsi_period2 + max(r_period, s_period) + 10
54
+
55
+ if len(data_slice) < min_period + 1:
56
+ return 0.0
57
+
58
+ # 计算价格变化
59
+ close_prices = data_slice['close_price'].values
60
+ price_changes = np.diff(close_prices)
61
+
62
+ # 计算TSI
63
+ # TSI = 100 * (EMA(EMA(price_change, period1), period2) / EMA(EMA(abs(price_change), period1), period2))
64
+
65
+ # 计算第一个EMA
66
+ ema1_values = []
67
+ ema1_abs_values = []
68
+
69
+ for i in range(len(price_changes) - tsi_period1 + 1):
70
+ subset = price_changes[i:i+tsi_period1]
71
+ ema1 = _ema(subset, tsi_period1)
72
+ ema1_values.append(ema1)
73
+
74
+ abs_subset = np.abs(subset)
75
+ ema1_abs = _ema(abs_subset, tsi_period1)
76
+ ema1_abs_values.append(ema1_abs)
77
+
78
+ if len(ema1_values) < tsi_period2:
79
+ return 0.0
80
+
81
+ # 计算第二个EMA
82
+ ema2 = _ema(np.array(ema1_values[-tsi_period2:]), tsi_period2)
83
+ ema2_abs = _ema(np.array(ema1_abs_values[-tsi_period2:]), tsi_period2)
84
+
85
+ # 计算TSI
86
+ if ema2_abs == 0:
87
+ tsi = 0.0
88
+ else:
89
+ tsi = 100.0 * ema2 / ema2_abs
90
+
91
+ # 计算Stochastic TSI
92
+ # 需要r_period个TSI值来计算%K
93
+ tsi_history = []
94
+ for i in range(r_period):
95
+ if len(ema1_values) < tsi_period2 + i:
96
+ return 0.0
97
+
98
+ ema2_val = _ema(np.array(ema1_values[-(tsi_period2 + i):-i if i > 0 else None]), tsi_period2)
99
+ ema2_abs_val = _ema(np.array(ema1_abs_values[-(tsi_period2 + i):-i if i > 0 else None]), tsi_period2)
100
+
101
+ if ema2_abs_val == 0:
102
+ tsi_val = 0.0
103
+ else:
104
+ tsi_val = 100.0 * ema2_val / ema2_abs_val
105
+
106
+ tsi_history.append(tsi_val)
107
+
108
+ if len(tsi_history) < r_period:
109
+ return 0.0
110
+
111
+ # 计算%K(Stochastic of TSI)
112
+ tsi_array = np.array(tsi_history)
113
+ highest_tsi = np.max(tsi_array)
114
+ lowest_tsi = np.min(tsi_array)
115
+ current_tsi = tsi_history[-1]
116
+
117
+ if highest_tsi == lowest_tsi:
118
+ stoch_tsi = 50.0
119
+ else:
120
+ stoch_tsi = 100.0 * (current_tsi - lowest_tsi) / (highest_tsi - lowest_tsi)
121
+
122
+ # 根据Stochastic TSI值返回因子
123
+ if stoch_tsi < oversold:
124
+ return 1.0 # 超卖,看多
125
+ elif stoch_tsi > overbought:
126
+ return -1.0 # 超买,看空
127
+ else:
128
+ return 0.0 # 中性
129
+
@@ -0,0 +1,92 @@
1
+ """
2
+ UO(终极震荡指标,Ultimate Oscillator)因子
3
+
4
+ 基于UO指标的交易因子
5
+ """
6
+
7
+ import pandas as pd
8
+ import numpy as np
9
+
10
+
11
+ def uo_factor(
12
+ data_slice: 'pd.DataFrame',
13
+ period1: int = 7,
14
+ period2: int = 14,
15
+ period3: int = 28,
16
+ oversold: float = 30.0,
17
+ overbought: float = 70.0
18
+ ) -> float:
19
+ """
20
+ 终极震荡指标(UO)因子
21
+
22
+ 当UO低于oversold时看多,高于overbought时看空
23
+
24
+ Args:
25
+ data_slice: 数据切片,必须包含至少 period3+1 行数据
26
+ 最后一行是当前数据点,前面 period3 行是历史数据
27
+ period1: 第一个周期(默认7)
28
+ period2: 第二个周期(默认14)
29
+ period3: 第三个周期(默认28)
30
+ oversold: 超卖阈值(默认30)
31
+ overbought: 超买阈值(默认70)
32
+
33
+ Returns:
34
+ 因子值:1.0(看多)、-1.0(看空)或 0(数据不足或中性)
35
+ """
36
+ if len(data_slice) < period3 + 1:
37
+ return 0.0
38
+
39
+ # 计算Buying Pressure (BP) 和 True Range (TR)
40
+ bp_list = []
41
+ tr_list = []
42
+
43
+ for i in range(period3):
44
+ if len(data_slice) < period3 - i + 1:
45
+ return 0.0
46
+
47
+ idx = -(period3 - i + 1)
48
+ current_close = data_slice.iloc[idx]['close_price']
49
+ current_low = data_slice.iloc[idx]['low_price']
50
+
51
+ if idx == -1:
52
+ prev_close = data_slice.iloc[-2]['close_price']
53
+ current_high = data_slice.iloc[-1]['high_price']
54
+ else:
55
+ prev_close = data_slice.iloc[idx-1]['close_price']
56
+ current_high = data_slice.iloc[idx]['high_price']
57
+
58
+ # Buying Pressure = Close - min(Low, Previous Close)
59
+ bp = current_close - min(current_low, prev_close)
60
+ bp_list.append(bp)
61
+
62
+ # True Range
63
+ tr1 = current_high - current_low
64
+ tr2 = abs(current_high - prev_close)
65
+ tr3 = abs(current_low - prev_close)
66
+ tr = max(tr1, tr2, tr3)
67
+ tr_list.append(tr)
68
+
69
+ # 计算三个周期的平均值
70
+ bp1 = np.sum(bp_list[-period1:])
71
+ tr1 = np.sum(tr_list[-period1:])
72
+ avg1 = bp1 / tr1 if tr1 != 0 else 0.0
73
+
74
+ bp2 = np.sum(bp_list[-period2:])
75
+ tr2 = np.sum(tr_list[-period2:])
76
+ avg2 = bp2 / tr2 if tr2 != 0 else 0.0
77
+
78
+ bp3 = np.sum(bp_list[-period3:])
79
+ tr3 = np.sum(tr_list[-period3:])
80
+ avg3 = bp3 / tr3 if tr3 != 0 else 0.0
81
+
82
+ # 计算UO(加权平均)
83
+ uo = 100.0 * (4.0 * avg1 + 2.0 * avg2 + avg3) / 7.0
84
+
85
+ # 根据UO值返回因子
86
+ if uo < oversold:
87
+ return 1.0 # 超卖,看多
88
+ elif uo > overbought:
89
+ return -1.0 # 超买,看空
90
+ else:
91
+ return 0.0 # 中性
92
+
@@ -0,0 +1,60 @@
1
+ """
2
+ Williams %R(威廉百分比变动)因子
3
+
4
+ 基于Williams %R指标的交易因子
5
+ """
6
+
7
+ import pandas as pd
8
+ import numpy as np
9
+
10
+
11
+ def williams_r_factor(
12
+ data_slice: 'pd.DataFrame',
13
+ period: int = 14,
14
+ oversold: float = -80.0,
15
+ overbought: float = -20.0
16
+ ) -> float:
17
+ """
18
+ Williams %R因子
19
+
20
+ 当Williams %R低于oversold时看多,高于overbought时看空
21
+
22
+ Args:
23
+ data_slice: 数据切片,必须包含至少 period+1 行数据
24
+ 最后一行是当前数据点,前面 period 行是历史数据
25
+ period: Williams %R计算周期(默认14)
26
+ oversold: 超卖阈值(默认-80)
27
+ overbought: 超买阈值(默认-20)
28
+
29
+ Returns:
30
+ 因子值:1.0(看多)、-1.0(看空)或 0(数据不足或中性)
31
+ """
32
+ if len(data_slice) < period + 1:
33
+ return 0.0
34
+
35
+ # 获取最近period+1行数据
36
+ high_prices = data_slice.iloc[-period-1:]['high_price'].values
37
+ low_prices = data_slice.iloc[-period-1:]['low_price'].values
38
+ close_prices = data_slice.iloc[-period-1:]['close_price'].values
39
+
40
+ # 计算最高价和最低价(不包括当前行)
41
+ highest_high = np.max(high_prices[:-1])
42
+ lowest_low = np.min(low_prices[:-1])
43
+
44
+ # 当前收盘价
45
+ current_close = close_prices[-1]
46
+
47
+ # 计算Williams %R
48
+ if highest_high == lowest_low:
49
+ williams_r = -50.0 # 中性值
50
+ else:
51
+ williams_r = -100.0 * (highest_high - current_close) / (highest_high - lowest_low)
52
+
53
+ # 根据Williams %R值返回因子
54
+ if williams_r < oversold:
55
+ return 1.0 # 超卖,看多
56
+ elif williams_r > overbought:
57
+ return -1.0 # 超买,看空
58
+ else:
59
+ return 0.0 # 中性
60
+
@@ -0,0 +1,107 @@
1
+ {
2
+ "ma_factor_5": "5期移动平均因子:当前价格高于过去5期平均价格时看多(1.0),否则看空(-1.0)",
3
+ "ma_factor_10": "10期移动平均因子:当前价格高于过去10期平均价格时看多(1.0),否则看空(-1.0)",
4
+ "rsi_factor_14": "14期RSI相对强弱指标因子:RSI低于30时看多(1.0),高于70时看空(-1.0),否则中性(0.0)",
5
+ "ma_cross_factor_5_20": "5日与20日移动平均交叉因子:短期均线上穿长期均线时看多(1.0),下穿时看空(-1.0),否则中性(0.0)",
6
+ "alpha1_factor": "Alpha#1因子:基于收益率与波动率的时序排名因子。当收益率为负时使用20期收益率标准差,否则使用收盘价,计算平方后的5期时序最大值位置排名",
7
+ "alpha2_factor": "Alpha#2因子:负相关因子,计算成交量对数2期差值的排名与收盘价相对开盘价变化排名的6期相关性,捕捉价量背离信号",
8
+ "alpha3_factor": "Alpha#3因子:负相关因子,计算开盘价排名与成交量排名的10期相关性,识别开盘价与成交量的反向关系",
9
+ "alpha4_factor": "Alpha#4因子:基于最低价的时序排名因子,计算最低价排名的9期时序排名,负值表示低价的相对位置",
10
+ "alpha5_factor": "Alpha#5因子:结合开盘价与VWAP关系的因子,计算开盘价相对10期VWAP均值的排名,乘以收盘价相对VWAP偏离度的排名",
11
+ "alpha6_factor": "Alpha#6因子:负相关因子,计算开盘价与成交量的10期相关性,捕捉开盘价与成交量的反向关系",
12
+ "alpha7_factor": "Alpha#7因子:条件因子,当20期平均成交量小于当前成交量时,计算收盘价7期差值的60期时序排名与价格变化方向的乘积,否则返回-1",
13
+ "alpha8_factor": "Alpha#8因子:基于开盘价与收益率乘积的因子,计算5期开盘价总和与5期收益率总和的乘积,减去10期延迟后的差值排名",
14
+ "alpha9_factor": "Alpha#9因子:价格变化方向因子,当5期内最小价格变化大于0或最大价格变化小于0时,返回价格变化值,否则返回负的价格变化值",
15
+ "alpha10_factor": "Alpha#10因子:价格变化方向的排名因子,当4期内最小价格变化大于0或最大价格变化小于0时,返回价格变化值,否则返回负的价格变化值,然后进行排名",
16
+ "alpha11_factor": "Alpha#11因子:VWAP与收盘价关系的因子,计算VWAP与收盘价差值的3期最大值和最小值的排名之和,乘以成交量3期差值的排名",
17
+ "alpha12_factor": "Alpha#12因子:价量关系因子,计算成交量1期差值的符号与收盘价1期差值的负值乘积,捕捉价量背离",
18
+ "alpha13_factor": "Alpha#13因子:负协方差排名因子,计算收盘价排名与成交量排名的5期协方差的排名,识别价量关系的反向变化",
19
+ "alpha14_factor": "Alpha#14因子:收益率变化与价量相关性因子,计算收益率3期差值的排名,乘以开盘价与成交量的10期相关性",
20
+ "alpha15_factor": "Alpha#15因子:负时序排名因子,计算最高价排名与成交量排名的3期相关性,然后对相关性进行排名,再计算3期时序排名总和",
21
+ "alpha16_factor": "Alpha#16因子:负协方差排名因子,计算最高价排名与成交量排名的5期协方差的排名,识别高价与成交量的反向关系",
22
+ "alpha17_factor": "Alpha#17因子:复合排名因子,计算收盘价10期时序排名的排名、收盘价二阶差值的排名、以及成交量相对20期平均成交量比值的5期时序排名的乘积",
23
+ "alpha18_factor": "Alpha#18因子:负排名因子,计算收盘价与开盘价差值的5期标准差加上价差,再加上收盘价与开盘价的10期相关性,然后进行排名",
24
+ "alpha19_factor": "Alpha#19因子:长期收益率因子,计算收盘价相对7期前价格变化与7期差值的符号,乘以1加上250期收益率总和的排名",
25
+ "alpha20_factor": "Alpha#20因子:开盘价相对位置因子,计算开盘价相对前一期最高价、收盘价、最低价差值的三个排名乘积",
26
+ "alpha21_factor": "Alpha#21因子:条件因子,当8期均价加标准差小于2期均价,或成交量相对20期平均成交量小于1时返回-1,否则返回1",
27
+ "alpha22_factor": "Alpha#22因子:负时序变化因子,计算最高价与成交量5期相关性的5期差值,乘以收盘价20期标准差的排名",
28
+ "alpha23_factor": "Alpha#23因子:条件因子,当20期最高价均值小于当前最高价时,返回最高价2期差值的负值,否则返回0",
29
+ "alpha24_factor": "Alpha#24因子:条件因子,当100期均价变化率小于等于5%时,返回收盘价与100期最低价差值的负值,否则返回收盘价3期差值的负值",
30
+ "alpha25_factor": "Alpha#25因子:复合排名因子,计算负收益率、20期平均成交量、VWAP、以及最高价与收盘价差值的乘积排名",
31
+ "alpha26_factor": "Alpha#26因子:基于价格与成交量关系的时序因子,捕捉价格变化与成交量变化的时序相关性",
32
+ "alpha27_factor": "Alpha#27因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
33
+ "alpha28_factor": "Alpha#28因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
34
+ "alpha29_factor": "Alpha#29因子:复合时序排名因子,计算收盘价5期差值的多重排名与对数缩放的时序最小值,加上负收益率6期延迟的5期时序排名",
35
+ "alpha30_factor": "Alpha#30因子:基于价格变化方向的排名因子,分析价格变化趋势的一致性",
36
+ "alpha31_factor": "Alpha#31因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
37
+ "alpha32_factor": "Alpha#32因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
38
+ "alpha33_factor": "Alpha#33因子:开盘价相对收盘价排名因子,计算开盘价与收盘价比值的排名,反映开盘相对收盘的位置",
39
+ "alpha34_factor": "Alpha#34因子:波动率与价格变化排名因子,计算收益率2期与5期标准差比值的排名,加上收盘价1期差值的排名,然后进行排名",
40
+ "alpha35_factor": "Alpha#35因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
41
+ "alpha36_factor": "Alpha#36因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
42
+ "alpha37_factor": "Alpha#37因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
43
+ "alpha38_factor": "Alpha#38因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
44
+ "alpha39_factor": "Alpha#39因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
45
+ "alpha40_factor": "Alpha#40因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
46
+ "alpha41_factor": "Alpha#41因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
47
+ "alpha42_factor": "Alpha#42因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
48
+ "alpha43_factor": "Alpha#43因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
49
+ "alpha44_factor": "Alpha#44因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
50
+ "alpha45_factor": "Alpha#45因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
51
+ "alpha46_factor": "Alpha#46因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
52
+ "alpha47_factor": "Alpha#47因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
53
+ "alpha48_factor": "Alpha#48因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
54
+ "alpha49_factor": "Alpha#49因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
55
+ "alpha50_factor": "Alpha#50因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
56
+ "alpha51_factor": "Alpha#51因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
57
+ "alpha52_factor": "Alpha#52因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
58
+ "alpha53_factor": "Alpha#53因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
59
+ "alpha54_factor": "Alpha#54因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
60
+ "alpha55_factor": "Alpha#55因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
61
+ "alpha56_factor": "Alpha#56因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
62
+ "alpha57_factor": "Alpha#57因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
63
+ "alpha58_factor": "Alpha#58因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
64
+ "alpha59_factor": "Alpha#59因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
65
+ "alpha60_factor": "Alpha#60因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
66
+ "alpha61_factor": "Alpha#61因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
67
+ "alpha62_factor": "Alpha#62因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
68
+ "alpha63_factor": "Alpha#63因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
69
+ "alpha64_factor": "Alpha#64因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
70
+ "alpha65_factor": "Alpha#65因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
71
+ "alpha66_factor": "Alpha#66因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
72
+ "alpha67_factor": "Alpha#67因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
73
+ "alpha68_factor": "Alpha#68因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
74
+ "alpha69_factor": "Alpha#69因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
75
+ "alpha70_factor": "Alpha#70因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
76
+ "alpha71_factor": "Alpha#71因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
77
+ "alpha72_factor": "Alpha#72因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
78
+ "alpha73_factor": "Alpha#73因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
79
+ "alpha74_factor": "Alpha#74因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
80
+ "alpha75_factor": "Alpha#75因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
81
+ "alpha76_factor": "Alpha#76因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
82
+ "alpha77_factor": "Alpha#77因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
83
+ "alpha78_factor": "Alpha#78因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
84
+ "alpha79_factor": "Alpha#79因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
85
+ "alpha80_factor": "Alpha#80因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
86
+ "alpha81_factor": "Alpha#81因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
87
+ "alpha82_factor": "Alpha#82因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
88
+ "alpha83_factor": "Alpha#83因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
89
+ "alpha84_factor": "Alpha#84因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
90
+ "alpha85_factor": "Alpha#85因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
91
+ "alpha86_factor": "Alpha#86因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
92
+ "alpha87_factor": "Alpha#87因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
93
+ "alpha88_factor": "Alpha#88因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
94
+ "alpha89_factor": "Alpha#89因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
95
+ "alpha90_factor": "Alpha#90因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
96
+ "alpha91_factor": "Alpha#91因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
97
+ "alpha92_factor": "Alpha#92因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
98
+ "alpha93_factor": "Alpha#93因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
99
+ "alpha94_factor": "Alpha#94因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
100
+ "alpha95_factor": "Alpha#95因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
101
+ "alpha96_factor": "Alpha#96因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
102
+ "alpha97_factor": "Alpha#97因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式",
103
+ "alpha98_factor": "Alpha#98因子:基于价格变化与成交量时序关系的因子,分析价格变化与成交量的时序动态",
104
+ "alpha99_factor": "Alpha#99因子:基于价格与成交量相关性的因子,识别价格与成交量的相关性模式",
105
+ "alpha100_factor": "Alpha#100因子:基于价格变化与成交量关系的因子,分析价格变化与成交量的动态关系",
106
+ "alpha101_factor": "Alpha#101因子:基于价格波动与成交量相关性的因子,识别价格波动与成交量的关系模式"
107
+ }
@@ -54,11 +54,13 @@ def alpha1_factor(
54
54
  quote_volume = data_slice.get('quote_volume', volume * close_price) # 如果没有quote_volume,使用volume*close_price估算
55
55
 
56
56
  # 计算收益率
57
- returns = close_price.pct_change().fillna(0)
57
+ returns = close_price.pct_change()
58
+ returns = returns.fillna(0).infer_objects(copy=False)
58
59
 
59
60
  # 计算VWAP (Volume Weighted Average Price)
60
61
  # vwap = quote_volume / volume,如果volume为0则使用close_price
61
- vwap = (quote_volume / (volume + 1e-10)).fillna(close_price)
62
+ vwap = (quote_volume / (volume + 1e-10))
63
+ vwap = vwap.fillna(close_price).infer_objects(copy=False)
62
64
 
63
65
  # 计算adv20 (20日平均成交量)
64
66
  adv20 = sma(volume, 20)
@@ -54,11 +54,13 @@ def alpha15_factor(
54
54
  quote_volume = data_slice.get('quote_volume', volume * close_price) # 如果没有quote_volume,使用volume*close_price估算
55
55
 
56
56
  # 计算收益率
57
- returns = close_price.pct_change().fillna(0)
57
+ returns = close_price.pct_change()
58
+ returns = returns.fillna(0).infer_objects(copy=False)
58
59
 
59
60
  # 计算VWAP (Volume Weighted Average Price)
60
61
  # vwap = quote_volume / volume,如果volume为0则使用close_price
61
- vwap = (quote_volume / (volume + 1e-10)).fillna(close_price)
62
+ vwap = (quote_volume / (volume + 1e-10))
63
+ vwap = vwap.fillna(close_price).infer_objects(copy=False)
62
64
 
63
65
  # 计算adv20 (20日平均成交量)
64
66
  adv20 = sma(volume, 20)
@@ -131,3 +131,4 @@ if __name__ == "__main__":
131
131
  print(f"Generated alpha{alpha_num}.py")
132
132
 
133
133
 
134
+