You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TradingView kNN指标PineScript转Python并实现Binance自动交易

问题解决方案

1. 准确转换Capissimo kNN PineScript到Python代码

要解决准确率不佳的问题,核心是1:1复现PineScript的逻辑细节,步骤如下:

  • 拆解PineScript核心逻辑
    先拿到该指标的开源PineScript代码,重点提取:

    • 特征集:比如收盘价、成交量、RSI(14)、MACD(12,26,9)等,确认每个指标的参数和计算方式(比如RSI是否用Wilder平滑)
    • kNN参数:k值、样本窗口大小、距离计算方式(通常是欧氏距离)、涨跌标签定义(比如下一根K线收盘价>当前收盘价标记为看涨)
    • 信号生成规则:比如当看涨样本占比>50%时输出买入信号
  • 复现数据与特征计算
    用python-binance或ccxt获取和TradingView完全一致的K线数据(周期、时间范围),然后用TA-Lib或自定义函数实现特征计算,确保和TradingView的指标输出完全匹配(可以逐K线对比数值)。示例代码片段:

    import talib
    import numpy as np
    import ccxt
    
    # 获取Binance历史K线
    binance = ccxt.binance({'apiKey': 'YOUR_KEY', 'secret': 'YOUR_SECRET'})
    bars = binance.fetch_ohlcv('BTC/USDT', '1h', limit=200)
    closes = np.array([bar[4] for bar in bars])
    volumes = np.array([bar[5] for bar in bars])
    
    # 计算RSI(和PineScript参数一致)
    rsi = talib.RSI(closes, timeperiod=14)
    # 计算MACD
    macd, signal, hist = talib.MACD(closes, fastperiod=12, slowperiod=26, signalperiod=9)
    
  • 实现kNN算法
    严格按照PineScript的逻辑编写kNN:

    1. 标准化特征(如果PineScript做了归一化,比如将特征缩放到0-1区间)
    2. 计算当前样本与历史样本的距离
    3. 筛选最近的k个样本,统计涨跌标签
    4. 生成交易信号
      示例代码片段:
    def knn_predict(current_features, historical_features, labels, k=5):
        # 计算欧氏距离
        distances = np.sqrt(np.sum((historical_features - current_features)**2, axis=1))
        # 获取最近k个样本的索引
        nearest_indices = distances.argsort()[:k]
        # 统计标签
        nearest_labels = labels[nearest_indices]
        # 投票生成信号:1=看涨,0=看跌
        return 1 if np.sum(nearest_labels) > k//2 else 0
    
    # 准备特征矩阵和标签
    features = np.column_stack((rsi[1:], macd[1:], volumes[1:]))
    # 标签:下一根K线是否上涨
    labels = np.where(closes[1:] > closes[:-1], 1, 0)
    # 预测当前信号
    current_features = features[-1]
    signal = knn_predict(current_features, features[:-1], labels[:-1], k=5)
    
  • 验证一致性
    把Python生成的信号和TradingView上的指标信号逐K线对比,调整细节直到完全匹配,这是提升准确率的关键。

2. 实现Binance平台持续执行交易

  • 配置API与交易基础逻辑
    使用python-binance库对接Binance API,注意将密钥存到环境变量避免硬编码:

    from binance.client import Client
    import os
    
    client = Client(os.getenv('BINANCE_API_KEY'), os.getenv('BINANCE_API_SECRET'))
    
  • 编写持续运行的循环
    用无限循环定期获取数据、生成信号、执行交易,添加异常处理避免崩溃:

    import time
    
    while True:
        try:
            # 获取最新K线数据
            bars = client.get_klines(symbol='BTCUSDT', interval=Client.KLINE_INTERVAL_1HOUR, limit=200)
            closes = np.array([float(bar[4]) for bar in bars])
            # ... 省略特征计算和kNN信号生成步骤 ...
    
            # 检查持仓状态
            balance = client.get_asset_balance(asset='BTC')
            has_position = float(balance['free']) > 0.0001
    
            # 执行交易
            if signal == 1 and not has_position:
                # 市价买入,用USDT余额的10%
                usdt_balance = float(client.get_asset_balance(asset='USDT')['free'])
                order = client.create_order(
                    symbol='BTCUSDT',
                    side=Client.SIDE_BUY,
                    type=Client.ORDER_TYPE_MARKET,
                    quoteOrderQty=usdt_balance * 0.1
                )
                print(f"买入订单执行:{order}")
            elif signal == 0 and has_position:
                # 市价卖出全部持仓
                btc_balance = float(balance['free'])
                order = client.create_order(
                    symbol='BTCUSDT',
                    side=Client.SIDE_SELL,
                    type=Client.ORDER_TYPE_MARKET,
                    quantity=btc_balance
                )
                print(f"卖出订单执行:{order}")
    
            # 等待下一个周期(比如55分钟,避免重复获取同一K线)
            time.sleep(55 * 60)
        except Exception as e:
            print(f"错误发生:{e}")
            time.sleep(60) # 出错后等待1分钟重试
    
  • 保持程序持续运行

    • 在VS Code中直接运行脚本,或者用nohup python your_script.py &(Linux/macOS)让程序后台运行
    • 用Binance测试网先做模拟交易,验证逻辑没问题再切换到实盘
    • 添加日志记录,将交易和信号信息写入文件,方便后续排查

内容的提问来源于stack exchange,提问作者user20900234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 14:58:10