使用cci、kdj和站上5日线为买入标志

This commit is contained in:
lzybetter
2026-07-23 15:17:10 +08:00
parent c81110214a
commit 93c19ce753
3 changed files with 62 additions and 4 deletions
+33 -1
View File
@@ -1,5 +1,6 @@
import requests
import pandas as pd
import numpy as np
CN_CODE_TYPE = {
"600":'sh',
@@ -18,7 +19,7 @@ CN_CODE_TYPE = {
"18":"sz"
}
## arbr指标
def calculate_brar(df: pd.DataFrame, N: int = 26) -> pd.DataFrame:
"""
计算AR和BR情绪指标
@@ -58,7 +59,37 @@ def calculate_brar(df: pd.DataFrame, N: int = 26) -> pd.DataFrame:
return data
## kdj计算
def calc_kdj_tdx(df, n=9, m1=3, m2=3):
# 1. 计算 RSV
low_min = df['low'].rolling(n).min()
high_max = df['high'].rolling(n).max()
rsv = (df['close'] - low_min) / (high_max - low_min) * 100
rsv = rsv.fillna(0) # 或者处理 NaN
# 2. 自定义 SMA 函数(通达信风格)
def sma_tdx(series, period, weight):
# period=N, weight=M。公式:Y = (X*M + PREV_Y*(N-M))/N
result = np.zeros(len(series))
# 初始化第一个有效值。通常,如果数据足够,初始值为 series[0]
result[0] = series[0] if not np.isnan(series[0]) else 0
for i in range(1, len(series)):
# 如果 series[i] 是 NaN(例如,前 n 天),则保持 0 或向前填充,但通常 RSV 已填充。
val = series[i] if not np.isnan(series[i]) else 0
result[i] = (val * weight + result[i - 1] * (period - weight)) / period
return result
# 3. 计算 K 和 D
k_series = sma_tdx(rsv.values, m1, 1) # K = SMA(RSV, 3, 1)
d_series = sma_tdx(k_series, m2, 1) # D = SMA(K, 3, 1)
df['K'] = k_series
df['D'] = d_series
df['J'] = 3 * df['K'] - 2 * df['D']
return df
## 获取历史k线
def get_history_k(code, start_date='19700101', end_date=None):
if '.' in code:
@@ -93,6 +124,7 @@ def get_history_k(code, start_date='19700101', end_date=None):
return df
## 获取当日5分钟的k线
def get_5min_k(code, start_date='19700101', end_date=None):
stock_code = ''