aeslone 2025-11-25 23:05 采纳率: 0%
浏览 3

Tradingview如何在实时交易中通过拖动的方式修改订单

如何像Tradingview里面的回放模式一样,让实时交易可以在TV里手动修改止盈止损单,而不需要到交易平台(在这个例子中是币安平台)修改

img

img

如上两图所示,在回放模式中,你以没有设置止盈止损的市价单卖出后,TV可以直接在图表里通过拖动设置止盈止损

假设此时我想要将止损往上调,我只需要在图表中,拖动上面的止损单(黄色),即可做出订单修改(如下图所示)

img

目前的问题是,在实时交易中,当你以没有设置止盈止损的市价单买入/卖出,你无法像回放模式那样,有按钮互动,可以通过简单的拖动设置订单的止盈止损。
而当你下了一个设置了止盈止损的多单/空单(通过TV里自带的多头/空头工具可以轻松实现),你无法通过拖动修改订单,只能自行到交易平台修改
假如实时交易有回放模式的拖动修改订单功能,那将会给在Tradingview里看图+交易的人带来巨大的便捷。
所以我想请问一下,想要实现这种功能,需要自行打造一个交易平台,还是可以打造一个TradingView的插件使用。
提前感谢各位指路,谢谢!

  • 写回答

2条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-11-25 23:11
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析:
      - 要实现在Tradingview实时交易中像回放模式那样手动修改止盈止损单,需要解决与Tradingview和币安交易平台之间交互的问题。涉及到如何获取实时交易数据,以及如何将在Tradingview上的拖动等操作转化为对币安平台订单的修改指令。
    2. 解决方案:
      - 使用Tradingview Pine Script结合Webhook
      • 首先,在Tradingview编写Pine Script代码来监听交易相关的操作,比如价格变动触发止盈止损调整的逻辑。例如:
    //@version=4
    study("Custom Stop Loss and Take Profit", overlay=true)
    
    // 假设我们有一个市价单
    var float myPosition = na
    var float stopLossPrice = na
    var float takeProfitPrice = na
    
    // 下单逻辑(这里只是示例,实际需要与币安API交互下单)
    if barstate.isnew
        myPosition := strategy.position_size
        stopLossPrice := low
        takeProfitPrice := high
    
    // 实时更新止损价格逻辑
    newStopLossPrice = input.float(stopLossPrice, title="Stop Loss Price")
    if newStopLossPrice != stopLossPrice
        stopLossPrice := newStopLossPrice
        // 这里需要通过Webhook将新的止损价格发送到币安平台更新订单
        // 示例Webhook发送代码(假设使用fetch函数,实际需要根据币安API要求调整)
        var url = "https://api.binance.com/api/v3/order"
        var data = {"symbol": "BTCUSDT", "stopPrice": newStopLossPrice, "side": "SELL", "type": "STOP_LOSS_LIMIT"}
        req = http.post(url, data)
        if req.status_code == 200
            log "Stop loss updated successfully"
        else
            log "Failed to update stop loss"
    
    // 实时更新止盈价格逻辑
    newTakeProfitPrice = input.float(takeProfitPrice, title="Take Profit Price")
    if newTakeProfitPrice != takeProfitPrice
        takeProfitPrice := newTakeProfitPrice
        // 这里需要通过Webhook将新的止盈价格发送到币安平台更新订单
        var url = "https://api.binance.com/api/v3/order"
        var data = {"symbol": "BTCUSDT", "stopPrice": newTakeProfitPrice, "side": "SELL", "type": "TAKE_PROFIT_LIMIT"}
        req = http.post(url, data)
        if req.status_code == 200
            log "Take profit updated successfully"
        else
            log "Failed to update take profit"
    
    
    // 这里可以添加图形化显示止损和止盈价格,方便手动拖动调整
    plot(stopLossPrice, color=color.red)
    plot(takeProfitPrice, color=color.green)
    
     - 然后,设置Webhook来将Tradingview中的数据变动发送到币安平台。币安平台需要有相应的API端点来接收并处理这些订单修改请求。
    
    • 利用Tradingview Widget API(如果币安支持)
      • 有些交易平台会提供与Tradingview的Widget API集成方式。首先,在币安平台注册并获取相关的API密钥和权限。
      • 在Tradingview中创建一个自定义Widget,通过Widget API与币安平台交互。例如,在Widget的初始化函数中设置与币安平台的连接,并监听用户的拖动等操作:
    // 假设这是在Tradingview自定义Widget的JavaScript代码
    var binanceApiKey = "your_api_key";
    var binanceSecret = "your_secret_key";
    
    // 初始化与币安平台的连接
    function initBinanceConnection() {
        // 这里需要根据币安API文档编写正确的连接代码,例如使用WebSocket连接
        var socket = new WebSocket('wss://stream.binance.com:9443/ws/btcusdt@trade');
        socket.onmessage = function(event) {
            var data = JSON.parse(event.data);
            // 处理实时交易数据,这里可以结合Pine Script中的逻辑进行订单调整
        };
    }
    
    // 监听用户拖动操作
    function handleDragEvent(event) {
        // 获取拖动后的止盈止损价格
        var newStopLossPrice = getNewStopLossPriceFromDrag(event);
        var newTakeProfitPrice = getNewTakeProfitPriceFromDrag(event);
        // 通过币安API修改订单
        var orderData = {
            "symbol": "BTCUSDT",
            "stopPrice": newStopLossPrice,
            "takeProfitPrice": newTakeProfitPrice,
            "side": "SELL",
            "type": "STOP_LOSS_LIMIT"
        };
        // 这里需要根据币安API要求编写正确的请求代码
        var xhr = new XMLHttpRequest();
        xhr.open('POST', 'https://api.binance.com/api/v3/order', true);
        xhr.setRequestHeader('Content-Type', 'application/json');
        xhr.setRequestHeader('X-MBX-APIKEY', binanceApiKey);
        xhr.send(JSON.stringify(orderData));
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log('Order updated successfully');
            } else {
                console.log('Failed to update order');
            }
        };
    }
    
    // 辅助函数,从拖动事件中获取新的止盈止损价格
    function getNewStopLossPriceFromDrag(event) {
        // 根据实际的拖动逻辑计算新价格
        return event.offsetX * 0.1; // 示例计算
    }
    
    function getNewTakeProfitPriceFromDrag(event) {
        // 根据实际的拖动逻辑计算新价格
        return event.offsetY * 0.2; // 示例计算
    }
    
    initBinanceConnection();
    document.addEventListener('drag', handleDragEvent);
    
    1. 方案优缺点:
      - 使用Tradingview Pine Script结合Webhook
      • 优点
      • 可以充分利用Tradingview的脚本编写能力,灵活实现各种交易逻辑。
      • 直接与交易平台API交互,可以确保数据的实时性和准确性。
      • 缺点
      • 开发难度相对较高,需要熟悉Tradingview Pine Script和交易平台的API文档。
      • Webhook的稳定性需要保证,可能会出现网络问题导致订单修改失败。
      • 利用Tradingview Widget API(如果币安支持)
      • 优点
      • 与Tradingview的集成相对紧密,开发相对简单一些,因为有现成的Widget API可以利用。
      • 可以直接在Tradingview界面上进行操作,用户体验较好。
      • 缺点
      • 依赖交易平台对Widget API的支持,如果币安不支持或支持不完善,可能无法实现完整功能。
      • 对于复杂的交易逻辑,可能不如Pine Script灵活。
    2. 总结:
      - 实现在Tradingview实时交易中像回放模式那样手动修改止盈止损单,主要有通过Tradingview Pine Script结合Webhook以及利用Tradingview Widget API(如果币安支持)这两种方式。两种方式各有优缺点,需要根据具体情况选择合适的方法来实现与币安平台的交互,从而达到在Tradingview中方便地修改止盈止损单的目的。

    需要注意的是,实际实现过程中,要严格按照币安等交易平台的API文档要求进行开发,确保交易安全和准确。同时,Tradingview的相关功能可能会随着版本更新而有所变化,需要及时关注和调整代码。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月25日