TradingViewWebHook stratégie d'exécution du signal (enseignement)

Auteur:Le petit rêve, Date: 28 février 2020 à 17h01
Les étiquettes:L'étudeAides au commerce

Article détaillé:https://www.fmz.com/bbs-topic/5533Le lien vidéo de la station B:https://www.bilibili.com/video/BV1Wk4y1k7zz/

  • Mise à jour le 29.7.2020 L'ajout de SPK et de BPK à deux directives, respectivement: vendre une position en surplus après avoir vendu une position ouverte et acheter une position ouverte après avoir acheté une position ouverte.

/*
- 交互命令字符串格式
  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)
    }
}



Relationnée

Plus de

sur surJe n'ai pas compris ce que vous avez écrit, mais je peux vous aider à le traduire.

Le numéro de téléphone:Quels sont les échanges que cela soutient?

Le numéro de téléphone:Le nombre de transactions instantanées remplies est de 10, et le montant de la commande devient de 10 u. Où est le problème de configuration?

Je vous en prie.Pourquoi est-ce que cela a donné une erreur, ReferenceError: 'QuotePrecision' n'est pas défini à main (__FILE__:13)

Je vous en prie!Demandez-moi si je peux mettre seulement le nombre de transactions dans le contrat, comment écrire si chaque transaction est pleine

15937556103Le professeur peut-il nous envoyer une stratégie complète sur le contrat?

15937556103/upload/asset/203b175e3c2c22ac9681c.png Vous pouvez télécharger le fichier en cliquant ici Pourquoi cela a-t-il toujours été ainsi?

Je vous en prie.Bonjour, est-il possible de placer plusieurs transactions sur un seul robot? puis l'URL de l'avertissement ajoute le nom de la paire de transactions, un robot exécute plusieurs paires de transactions

le7marslong,short,cover_long,cover_SHORT, est-ce que vous voulez ajouter des webhooks séparément?

Je ne sais pas.Je veux faire un contrat à durée indéterminée pour Bitcoin.

Je ne sais pas.Je veux faire un contrat à durée indéterminée pour Bitcoin.

Je ne sais pas./upload/asset/1cd7a606f646b8c0d32be.png

À l'envers de Q.Mon frère, si vous pouviez publier une vidéo pédagogique sur la façon d'ajouter et de configurer des contrats à terme, il serait préférable de parler plus en détail.

suc210/upload/asset/125e8fed0f51ab1f8122e.jpg Une erreur est signalée avec la commande spk

Le ciel nocturneComment résoudre le problème de la télévision émettant des alertes, FMZ ne reçoit pas le signal de temps en temps? En particulier, deux stratégies de télévision signalent à la fois deux robots à FMZ, parfois un robot ne reçoit pas.

La péninsule est fraîcheSpk, bpk, est-ce que tu veux ajouter le nombre après? Si le signal télévisé a plusieurs alertes, le nombre total d'alertes peut être débloqué en une seule fois, comme une liste vide.

mélon23Contract multiples où choisir

Le petit rêveRegardez les paramètres de stratégie, si vous ajoutez un objet de l'échange de contrats à terme, vous devez définir un contrat. Sinon, le robot ne sait pas quel contrat manipuler.

Richie, tu sais quoi?Bonjour, pourquoi le contrat ct est-il mis à l'écart?

Le petit rêveTout est possible, mais les paramètres, le webhook sur le téléviseur et les paramètres peuvent être modifiés en fonction de la variété.

Le petit rêveLe paiement de la facture au prix du marché, la quantité suivante est le montant.

Le petit rêveJe suppose que vous avez fait une erreur en vérifiant la documentation de l'API.

Je vous en prie.Si vous changez de clé, est-ce que vous devez copier la stratégie complète pour la mettre en place?

Le petit rêveLe code 1 est la mauvaise clé API, vérifiez.

Je vous en prie.Maintenant, j'essaie de commander dans la plateforme, mais une fois que j'ai appelé l'API d'extension, j'ai reçu un message d'erreur, code:1, data: [], j'ai accédé directement à un lien, un peu comme un navigateur ouvre un lien.

Le petit rêveNe vous contentez pas de copier le code, mais copiez la stratégie complète.

Le petit rêveLa télévision envoie des signaux, il y est écrit combien, la stratégie est moins importante.

Le petit rêveCette tactique est elle-même un parfait exemple d'exécution d'un futur si vous utilisez mal votre commande, vérifiez.

Le petit rêveVous pouvez exécuter des futures, votre commande utilisée dans le rappel webhook est fausse, veuillez lire attentivement le code en utilisant la commande des futures.

Je vous en prie. 好的,已经在众包板块发布了信息,期望你的成果和合作,thanks.

Le petit rêveIl n'y a pas de changement, vous pouvez publier des informations sur les plateformes de crowdsourcing et les développeurs peuvent les recevoir.

Je vous en prie.Si vous avez des questions sur les modifications, pouvez-vous les envoyer directement à vous?

Le petit rêveIl y a une section de crowdsourcing sur la plateforme où vous pouvez publier vos demandes.

Je vous en prie.@ChiloChilo Dream, si vous pouvez modifier une version de cette stratégie, si c'est possible, bien sûr, vous pouvez payer pour l'acheter, j'attends vos résultats et vos réponses, merci.

Le petit rêveIl est possible, mais cette stratégie doit être modifiée.

Le petit rêveJe ne comprends pas ce que tu veux dire.

le7marsJ'ai mis en place quatre alertes, long, short, coverlong et covershort, mais comme c'est en soi une stratégie et non une étude, les quatre instructions sont toujours déclenchées en même temps...

le7marsComment faire la différence? Long ou short?

Le petit rêveVous pouvez les identifier à partir de l'URL du webhook d'alerte.

le7marsLe problème a été détecté, il ne pouvait recevoir que les alertes de trading des indicateurs de tradingview, mais la stratégie que j'ai écrite, qui a mis en place quatre alertes différentes, ne semble pas être identifiable, et lorsque le signal est généré, les quatre signaux sont ouverts simultanément.

Le petit rêveUne demande d'alerte télévisée Je ne sais pas. Vous pouvez utiliser les données de votre ordinateur pour les télécharger sur votre ordinateur. Je ne sais pas. Dans l'action, où vous écrivez des instructions, les robots reçoivent des instructions. Je ne sais pas. Vous pouvez utiliser le code source de l'appareil en cliquant sur le lien suivant: https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515, "long:1"] Je ne sais pas.

Le petit rêveVoir le tutoriel FMZ pour débutants, pour utiliser le compte de l'échange à terme, configurer l'échange à terme et ajouter des objets d'échange à terme au robot.

Je ne sais pas./upload/asset/1ccc5603d54593dcba809.png

Je ne sais pas.J'ai changé ces endroits, Dieu m'aide à voir où c'est mal, je n'ajouterai pas d'objets d'échange à terme, je vais définir des contrats sur les paramètres, le permanent est le swap, le prix est XXX_USD, le prix U est XXX_USDT.

Le petit rêveAjouter un objet de l'échange de contrats à terme, définir des contrats sur les paramètres, perpétuellement un swap, le prix est XXX_USD, le prix U est XXX_USDT.

Le petit rêveJe vous demande de vérifier si vous avez appelé SPK sans avoir de stockage.

Le petit rêveLa connexion TV en direct peut être réalisée en utilisant la bibliothèque de la plateforme FMZ, http://www.fmz.com/digest-topic/5969.

Le petit rêveL'effet de levier peut être réglé sur l'échange; ou avant de passer une commande dans le code de la stratégie.

Le petit rêveIl y a des contrats qui se négocient, des contrats qui se mettent en place, des contrats qui ne savent pas quoi faire autrement.

Le petit rêveJe ne sais pas. Vous pouvez utiliser les données de votre ordinateur pour les télécharger sur votre ordinateur. Je ne sais pas. action est écrit comme spk, bpk

Le ciel nocturneJ'aimerais savoir comment le régler pour SPK et BPK, la télévision.