TradingViewWebHook Signal-Ausführungsstrategien (lehrreich)

Schriftsteller:Kleine Träume, Datum: 28.4.2020 17:01:35
Tags:StudiumHandelsunterstützt

Siehe auch:https://www.fmz.com/bbs-topic/5533Video-Link zur B-Station:https://www.bilibili.com/video/BV1Wk4y1k7zz/

  • Aktualisiert am 29.7.2020 Zwei Anweisungen der SPK und der BPK wurden hinzugefügt: Verkauf von Leerpositionen nach Verkauf von Leerpositionen und Kauf von Leerpositionen nach Kauf von Leerpositionen.

/*
- 交互命令字符串格式
  action:amount
  action: buy , sell , long , short , cover_long , cover_short, spk , bpk
- 交易所类型
  eType变量取值: 0 spot , 1 futures

- TV文档链接
  https://www.tradingview.com/pine-script-docs/en/v4/Quickstart_guide.html
  https://cn.tradingview.com/chart/8xfTuX7F/

- TV webhook 发送请求
  https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"action:amount"]

- 引用类库
  引用数字货币交易类库
*/

// 参数
// var IsMarketOrder = false 
// var QuotePrecision = 2
// var BasePrecision = 2

// 期货参数
// var Ct = ""


// 全局变量
var BUY = "buy"
var SELL = "sell"
var LONG = "long"
var SHORT = "short"
var COVER_LONG = "cover_long"
var COVER_SHORT = "cover_short"
var SPK = "spk"
var BPK = "bpk"


function main() {
    // 清空日志,如不需要,可以删除
    LogReset(1)

	// 设置精度
    exchange.SetPrecision(QuotePrecision, BasePrecision)

    // 识别期货还是现货
    var eType = 0
    var eName = exchange.GetName()
    var patt = /Futures_/
    if (patt.test(eName)) {
        Log("添加的交易所为期货交易所:", eName, "#FF0000")
        eType = 1
        if (Ct == "") {
            throw "Ct 合约设置为空"
        } else {
        	Log(exchange.SetContractType(Ct), "设置合约:", Ct, "#FF0000")
        }
    } else {
    	Log("添加的交易所为现货交易所:", eName, "#32CD32")
    }
    
    var lastMsg = ""
    var acc = _C(exchange.GetAccount)
    while(true) {
        var cmd = GetCommand()
        if (cmd) {
            // 检测交互命令
            lastMsg = "命令:" + cmd + "时间:" + _D()
            var arr = cmd.split(":")
            if (arr.length != 2) {
                Log("cmd信息有误:", cmd, "#FF0000")
                continue
            }

            var action = arr[0]
            var amount = parseFloat(arr[1])

            if (eType == 0) {
                if (action == BUY) {               
                    var buyInfo = IsMarketOrder ? exchange.Buy(-1, amount) : $.Buy(amount)
                    Log("buyInfo:", buyInfo)
                } else if (action == SELL) {        
                    var sellInfo = IsMarketOrder ? exchange.Sell(-1, amount) : $.Sell(amount)
                    Log("sellInfo:", sellInfo)
                } else {
                	Log("现货交易所不支持!", "#FF0000")
                }
            } else if (eType == 1) {
            	var tradeInfo = null
            	var ticker = _C(exchange.GetTicker)
                if (action == LONG) {
                	exchange.SetDirection("buy")
                    tradeInfo = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
                } else if (action == SHORT) {        
                    exchange.SetDirection("sell")
                    tradeInfo = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
                } else if (action == COVER_LONG) {        
                    exchange.SetDirection("closebuy")
                    tradeInfo = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
                } else if (action == COVER_SHORT) {        
                	exchange.SetDirection("closesell")
                	tradeInfo = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
                } else if (action == SPK) {   // 卖出平多仓,卖出开空仓
                    exchange.SetDirection("closebuy")
                    var tradeInfo1 = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
                    exchange.SetDirection("sell")
                    var tradeInfo2 = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
                    tradeInfo = [tradeInfo1, tradeInfo2]
                } else if (action == BPK) {   // 买入平空仓,买入开多仓
                    exchange.SetDirection("closesell")
                    var tradeInfo1 = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
                    exchange.SetDirection("buy")
                    var tradeInfo2 = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
                    tradeInfo = [tradeInfo1, tradeInfo2]
                } else {
                	Log("期货交易所不支持!", "#FF0000")
                }
                if (tradeInfo) {
                    Log("tradeInfo:", tradeInfo)
                }
            } else {
            	throw "eType error, eType:" + eType
            }
            acc = _C(exchange.GetAccount)
        }
        var tbl = {
        	type : "table", 
        	title : "状态信息", 
        	cols : ["数据"], 
        	rows : []
        }
        tbl.rows.push([JSON.stringify(acc)])
        LogStatus(_D(), eName, "上次接收到的命令:", lastMsg, "\n", "`" + JSON.stringify(tbl) + "`")
    	Sleep(1000)
    }
}



Verwandt

Mehr

ÜbergewichtIch habe es heute Abend gelesen und habe es nicht verstanden. Kannst du es übersetzen?

ZZ791377920Welche Börsen unterstützt das?

ZZ791377920Die Anzahl der sofort gefüllten Transaktionen wird zu 10u, wenn Sie eine Bestellung aufgeben, wo ist das Setupproblem?

Das ist der Schlüssel.ReferenceError: 'QuotePrecision' ist nicht definiert bei main (__FILE__:13)

- Ich weiß nicht.Fragen Sie mich, ob ich nur die Menge in den Vertragstransaktionen einstellen kann, und wie sollte ich das schreiben, wenn ich jedes Mal voll bin?

15937556103Kann der Lehrer eine vollständige Strategie für den Vertrag schreiben?

15937556103/upload/asset/203b175e3c2c22ac9681c.png Warum ist das immer so?

Ich bin nicht derjenige.Hallo, kann man mehrere Transaktionen auf einem einzigen Roboter setzen? dann wird die URL der Warnung hinzugefügt, um den Namen des Paares zu nennen, ein Roboter läuft mehrere Paare von Transaktionen Warnung

7marslong,short,cover_long,cover_SHORT, soll ich jeweils einen Webhook hinzufügen?

- Das ist nicht wahr.Was bedeutet das, dass die Futures-Börse nicht unterstützt, ich möchte Bitcoin-Permanent-Kontrakte machen?

- Das ist nicht wahr.Was bedeutet das, dass die Futures-Börse nicht unterstützt, ich möchte Bitcoin-Permanent-Kontrakte machen?

- Das ist nicht wahr./upload/asset/1cd7a606f646b8c0d32be.png

UmgekehrtBruder, könntest du mir ein Lehrvideo veröffentlichen, wie man Futures-Kontrakte hinzufügt und einrichtet?

Schlagstoff/upload/asset/125e8fed0f51ab1f8122e.jpg Fehlermeldung mit der Spk-Anweisung

NachthimmelWie löst man das Problem, dass TV Alarme sendet und FMZ gelegentlich kein Signal empfängt? Insbesondere sind es zwei Strategien von TV, die gleichzeitig zwei Roboter an FMZ senden und gelegentlich ein Roboter nicht empfängt. Auch wenn zwei TV-Accounts registriert sind, kann das Problem auftreten, obwohl der Server, auf dem FMZ gehostet wird, derselbe ist.

Die Halbinsel ist nicht kalt.Spk, bpk, willst du die Zahlen nach spk addieren? Wenn ein Fernsehsignal mehrere Alarmmeldungen hat, kann die Gesamtzahl der mehrfachen Anmeldungen, die gleichzeitig vor dem Flachblatt erfolgen, wie eine leere Anmeldung geschrieben werden. Wie wird der Code geschrieben?

Melo23Vertrag Multiplikator, wo wählen

Kleine TräumeSchauen Sie sich die Strategieparameter an. Wenn Sie Futures-Objekte hinzufügen, müssen Sie einen Vertrag einrichten. Sonst weiß der Roboter nicht, welchen Vertrag er bedienen soll.

Richie, du bist ein guter Mann.Hallo, bitte erinnern Sie mich daran, dass der ct-Vertrag falsch eingestellt ist.

Kleine TräumeDas kann man, aber die Einstellungen für die Webhook-Einstellungen auf dem Fernseher müssen je nach Sorte angepasst werden.

Kleine TräumeDie Zahlung des Marktpreises der Bestellung ist der Betrag, der nachfolgend angegeben wird.

Kleine TräumeIch denke, Sie haben es falsch gemacht und haben nach der API-Dokumentation geprüft.

Das ist der Schlüssel.Ist es nicht notwendig, die gesamte Strategie zu kopieren, um es zu tunen?

Kleine TräumeCode 1 ist der falsche API KEY, überprüfen Sie es.

Das ist der Schlüssel.Jetzt kann ich in der Plattform testen, ob ich bestellen kann, aber wenn ich die Erweiterung API anrufe, gibt es einen Fehler, der zurückkehrt, code:1, data: [], ich bin direkt über einen Link zugegriffen, ähnlich wie ein Browser einen Link öffnet.

Kleine TräumeEs ist nicht einfach, den Code zu kopieren, sondern die gesamte Strategie.

Kleine TräumeWenn man sich mit der Art und Weise beschäftigt, wie man die TV-Signale sendet, dann muss man die Strategie ändern, wenn man Hip-Hop will.

Kleine TräumeDie Strategie selbst ist ein perfektes Beispiel, wie man Futures ausführen kann, wenn man den Befehl falsch verwendet hat.

Kleine TräumeDer Kommando, den Sie in Ihrem Webhook-Rückruf benutzt haben, ist falsch. Bitte lesen Sie den Code sorgfältig.

Ich bin nicht derjenige. 好的,已经在众包板块发布了信息,期望你的成果和合作,thanks.

Kleine TräumeDas ändert sich nicht, es ist möglich, Informationen in Crowdsourcing-Bereichen zu veröffentlichen, die von Entwicklern abgeholt werden.

Ich bin nicht derjenige.Kann ich dir die Änderungen direkt schicken, weil andere vielleicht noch eine Weile vertraut sind?

Kleine TräumeDie Plattform verfügt über ein Crowdfunding-Bereich, in dem Sie Ihre Anfragen veröffentlichen können.

Ich bin nicht derjenige.@ChiloChilo Dream, kann man eine Version dieser Strategie ändern, wenn es möglich ist, kann man natürlich bezahlen und erwarten Ihre Ergebnisse und Antworten, danke.

Kleine TräumeDas kann man tun, aber man muss diese Strategie ändern.

Kleine TräumeIch weiß nicht, was du meinst.

7marsIch habe vier Warnungen nach Long, Short, Coverlong und Covershort eingerichtet, aber da es sich um eine Strategie, nicht um ein Studium handelt, werden die vier Befehle immer gleichzeitig ausgelöst.

7marsWie unterscheidet man zwischen lang und kurz?

Kleine TräumeDie URL des Alarm-Webhooks kann unterschieden werden.

7marsEs wurde ein Problem gefunden, nur Handelswarnungen für Tradingview-Indikatoren zu empfangen, aber die Strategie, die ich geschrieben habe, setzte vier verschiedene Warnungen ein, aber es schien nicht zu erkennen, dass alle vier Signale gleichzeitig geöffnet wurden, als das Signal erzeugt wurde.

Kleine TräumeFernsehmeldungen und Anfragen Ich weiß nicht. Der Name des Roboter wird von einem anderen Roboter verwendet, der sich mit dem Roboter beschäftigt. Ich weiß nicht. In der Action-Seite gibt es eine Liste der Befehle, die Sie schreiben, und welche Befehle der Roboter erhält. Ich weiß nicht. Das Programm wird von der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webseite der Webse Ich weiß nicht.

Kleine TräumeEin Beispiel ist die FMZ-Anfänger-Tutorial, in dem man ein Futures-Exchange-Konto bedient, das Futures-Exchange konfiguriert und dann ein Futures-Exchange-Objekt auf dem Roboter hinzufügt.

- Das ist nicht wahr./upload/asset/1ccc5603d54593dcba809.png

- Das ist nicht wahr.Ich habe die Orte geändert, Gott helfe mir, um zu sehen, wo es nicht stimmt, ich werde keine Futures-Objekte hinzufügen, die in den Parametern des Vertrages eingestellt sind, dauerhaft sind Swap, der Kurs ist XXX_USD, der Kurs ist XXX_USDT.

Kleine TräumeFügen Sie Futures-Exchange-Objekte hinzu, auf deren Parameter Sie ein Kontrakt festlegen, permanent ist ein Swap, das Geld ist XXX_USD, das U ist XXX_USDT.

Kleine TräumeÜberprüfen Sie, ob Sie SPK ohne Lagerbestand anrufen können.

Kleine TräumeFernsehverbindungen, wie sie in der FMZ-Plattform-Literatur beschrieben sind, finden Sie unter https://www.fmz.com/digest-topic/5969.

Kleine TräumeDer Hebelwert kann an der Börse eingestellt werden. Oder Sie können den Hebelwert vor der Bestellung im Strategiecode setzen.

Kleine TräumeWenn man einen Vertragsaustausch läuft, muss man einen Vertrag aufstellen, sonst weiß man nicht, welchen Vertrag man bedienen soll.

Kleine TräumeIch weiß. Der Name des Roboter wird von einem anderen Roboter verwendet, der sich mit dem Roboter beschäftigt. Ich weiß. action wird in spk, bpk geschrieben.

NachthimmelIch möchte wissen, wie man das für SPK und BPK, die TV-Seite, einstellt.