以下是一个可以帮助您实现KDJ金叉共振买入交易策略的代码示例,包含日线、周线和月线的判断条件。

import tushare as ts
import pandas as pd
# 获取股票数据(以600519为例)
df = ts.get_k_data('600519', start='20100101', end='20210601')
df.index = pd.to_datetime(df['date'])
df = df[['open', 'high', 'low', 'close', 'volume']]
# 计算KDJ指标
def KDJ(df, n=9, m1=3, m2=3):
high_list = df['high'].rolling(n, min_periods=n).max()
low_list = df['low'].rolling(n, min_periods=n).min()
rsv = (df['close'] - low_list) / (high_list - low_list) * 100
k_value = rsv.ewm(com=m1).mean()
d_value = k_value.ewm(com=m2).mean()
j_value = 3 * k_value - 2 * d_value
return k_value, d_value, j_value
# 判断金叉共振买入条件
def buy_signal(df):
kdj_day = KDJ(df, 9, 3, 3)
kdj_week = KDJ(df, 9*5, 3*5, 3*5)
kdj_month = KDJ(df, 9*20, 3*20, 3*20)
k_day, d_day, j_day = kdj_day
k_week, d_week, j_week = kdj_week
k_month, d_month, j_month = kdj_month
if k_day[-1] > d_day[-1] and k_day[-2] < d_day[-2] \
and k_week[-1] > d_week[-1] and k_week[-2] < d_week[-2] \
and k_month[-1] > d_month[-1] and k_month[-2] < d_month[-2]:
return True
else:
return False
# 按照金叉共振买入信号进行交易
def trade(df):
position = 0 # 0表示空仓,1表示持仓
for i in range(20, len(df)):
if buy_signal(df.iloc[:i+1]):
if position == 0:
position = 1
buy_price = df.iloc[i]['close']
print('buy at', buy_price, 'on', df.index[i].date())
elif position == 1:
sell_price = df.iloc[i]['close']
position = 0
print('sell at', sell_price, 'on', df.index[i].date())

上述代码中, KDJ函数用于计算KDJ指标,buy_signal函数用于判断金叉共振买入条件是否满足,trade函数则是实现按照金叉共振信号进行交易的逻辑。
您可以将股票数据以DataFrame的形式传入 trade函数进行试验。需要注意的是,此处仅提供一个简单的交易策略示例,具体的买入、卖出点位需根据实际市场情况和个人风险承受能力进行科学调整。
