我有一个有效的 Python 脚本。它连接Kucoin API获取kline数据,然后在指定的时间间隔计算返回交易对的K,D,J值。然后我需要比较 k、d、j 的值,看看哪个更高,然后相应地开仓或平仓。
代码的问题在于,尽管它似乎确实从 Kucoin 获取数据,但 K、D、J 的值与您在 Kucoin 应用程序上看到的实际 kdj 指标值不匹配。所以我想寻求帮助修复代码,以便它返回的 k、d 和 j 的值是正确的,并且类似于我们在应用程序中看到的交易对(例如 BTC-USDT)
这里是获取 KDJ 值的函数:
def get_kdj_indicator(pair, tf):
tf = str(tf) + 'min'
try:
now = datetime.datetime.utcnow()
start_time = int((now - datetime.timedelta(hours=12)).timestamp())
end_time = int(now.timestamp())
response = client.get_kline_data(pair, tf, start_time, end_time)
#print(response)
df = pd.DataFrame(response, columns=['time', 'open', 'high', 'low', 'close', 'volume', 'amount'])
# Convert columns to pandas float
for column in ['open', 'high', 'low', 'close', 'volume', 'amount']:
df[column] = df[column].astype(float)
# Calculate KDJ indicator
highs = df['high'].to_numpy()
lows = df['low'].to_numpy()
closes = df['close'].to_numpy()
# Initialize KDJ parameters
k_values = []
d_values = []
rsv_values = []
k = 50
d = 50
# Calculate RSV values
rsv_values = []
for i in range(8, len(highs)):
high_period = max(highs[i-8:i+1])
low_period = min(lows[i-8:i+1])
close = closes[i]
if high_period == low_period:
rsv = 0
else:
rsv = (close - low_period) / (high_period - low_period) * 100
rsv_values.append(rsv)
# Calculate K and D values
for i in range(len(rsv_values)):
if i == 0:
k_values.append(k)
d_values.append(d)
else:
k = 2/3 * k + 1/3 * rsv_values[i]
d = 2/3 * d + 1/3 * k
k_values.append(k)
d_values.append(d)
# Calculate J values
j_values = [3*k - 2*d for k, d in zip(k_values, d_values)]
j = j_values[-1]
print("DEBUG get_kdj_indicator")
# Return the KDJ values as a tuple
return (k_values, d_values, j_values)
except Exception as e:
print(f"Error while getting KDJ indicator: {e}")
return None
以下是我连接Kucoin API的方式:
from kucoin.client import Client
import time, csv, datetime
import numpy as np
import pandas as pd
trading_pair = 'BTC-USDT'
trade_value = 10
time_frame = 15
print("ENTERED KUCION SANDBOX API MODE")
api_key = '63eeXXXXXXXXXbfe4'
api_secret = '4166643-XXXXXX-XXXXXXX-3caABCDE17d'
api_passphrase = 'passerword'
try:
client = Client(api_key, api_secret, api_passphrase, sandbox=True)
except Exception as e:
print(f"Error while connecting to Kucoin client: {e}")
exit()
以下是我们如何使用 kdj 指标函数开仓的示例:
kdj = get_kdj_indicator(trading_pair, time_frame)
if kdj is not None:
k, d, j = kdj[0], kdj[1], kdj[2]
print(k[-1], d[-1], j[-1])
if j[-1] >= k[-1] and k[-1] >= d[-1]:
open_position(trading_pair, trade_value, stop_loss):
我以前尝试使用 Ta-Lib 库,但无法使用 pip 安装 Ta-Lib,所以我停止使用它。我认为我们可以使用 kucoin API 发送查询/请求,然后在请求指定交易对时简单地返回 k、d 和 j 指标的值,但我认为他们不允许这样做。
我试过雇人,但他们无法计算 KDJ。
我正在使用来自这个 github 的文档和 python kucoin: https://github.com/sammchardy/python-kucoin/blob/develop/kucoin/client.py