我需要帮助使用 Python 代码从 Kucoin API 获取 KDJ 指标值

问题描述 投票:0回答:0

我有一个有效的 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

python python-3.x algorithmic-trading kucoin
© www.soinside.com 2019 - 2024. All rights reserved.