fr

Webhooks: connectez votre stratégie TradingView avec Kryll

Avec l'arrivée des blocs Webhooks sur Kryll, les utilisateurs peuvent désormais piloter leurs stratégies de manière externe et personnalisée. Nous vous proposons dans cet article de voir comment piloter une stratégie Kryll via une stratégie PineScript.

Prérequis : Vous devez posséder à minima un compte Pro sur TradingView pour être en mesure de générer des appels Webhooks.

Création d'une stratégie TradingView

Nous utiliserons une stratégie d'exemple TradingView développée en Pinescript v5.

Dans cet exemple, la stratégie va utiliser deux indicateurs techniques non disponibles sur Kryll: le croisement de deux moyennes mobiles de RSI et l'indicateur Vortex. En fonction de la configuration de ces indicateurs, la stratégie va placer des ordres Long, Short ou Close.  

//@version=5
// KRYLL Webhook - Tradingview strategy Exemple
strategy("Demo Strat", overlay=true)

// inputs zone
rsi_length =  input.int(7, title="RSI Length", minval=2)
rsi_fma_length = input.int(7, title="Fast RSI MA Length", minval=2)
rsi_sma_length = input.int(14, title="Slow RSI MA Length", minval=4)
rsi_neutral =  input.int(20, title="RSI neutral zone", minval=2)
vortex_period = input.int(14, title="Vortex Length", minval=2)

// Vortex indicator computation
VMP = math.sum( math.abs( high - low[1]), vortex_period )
VMM = math.sum( math.abs( low - high[1]), vortex_period )
STR = math.sum( ta.atr(1), vortex_period )
VIP = VMP / STR
VIM = VMM / STR

// Fast and Slow RSI Moving Average computation
rsi = ta.rsi(close, rsi_length)
rsiFMA = ta.sma(rsi, rsi_fma_length)
rsiSMA = ta.sma(rsi, rsi_sma_length)

// Fast and Slow RSI cross detection
co = ta.crossover(rsiFMA, rsiSMA)
cu = ta.crossunder(rsiFMA, rsiSMA)


if (not na(rsiSMA))
    if (VIP < VIM)
        if( cu )
            strategy.entry("trade", strategy.short, comment="Short")
        else
            strategy.close(id="trade", comment="Close")
    if (VIP > VIM)
        if( co )
            strategy.entry("trade", strategy.long, comment="Long")
        else
            strategy.close(id="trade", comment="Close")

Étude de la stratégie Tradingview

Cette stratégie génère 3 types d'ordres en fonction de la configuration des indicateurs utilisés.

strategy.entry("trade", strategy.long, comment="Long")
La stratégie place un long
strategy.entry("trade", strategy.short, comment="Short")
La stratégie lance un short
strategy.close(id="trade", comment="Close")
La stratégie ferme une position

Il nous faudra donc créer une stratégie Kryll qui attendra un de ces 3 signaux pour executer l'opération correspondante. Dans cette stratégie TradingView, on peut constater qu'une position long ou short peuvent être suivies de leur opposé sans forcément passer par un close avant. Il faudra donc concevoir la stratégie en fonction.

Réalisation de la stratégie dans Kryll

L'implémentation de cette stratégie Kryll qui sera pilotée via Webhooks pourrait ressembler à ceci.

Le bloc OR attend l'un des 3 signaux

Chaque bloc webhook vous fournira une URL génerique à la stratégie et un message Payload spécifique à chaque bloc. Ces informations devront être fournies à TradingView au travers du code pinescript.

A ce stade notre stratégie est terminée, nous pouvons même la lancer.

Adaptation de la stratégie TradingView

Nous allons maintenant passer à la modification de votre stratégie TradingView pour lui permettre d'envoyer des signaux à la stratégie Kryll.

Tout d'abord, modifions le debut de la stratégie pour y ajouter quelques déclarations utiles pour la suite :

//@version=5
// KRYLL Webhook - Tradingview strategy Exemple
strategy("Demo Strat", overlay=true)

// Kryll Webhook declarations
payload_start="{\"action_id\" : \""
payload_end="\",\"pair\":\""+syminfo.ticker+"\"}"
kryll_action=""
payload=""
Ces informations vous seront utilisées pour la construction des messages à envoyer

Ajoutons ensuite les variables qui nous permettrons de stocker et utiliser les 'action_id' de nos différents blocs Webhook :

id_block_long = "put here your block id"
id_block_short = "put here your block id"
id_block_close = "put here your block id"
Ajoutez vos variables d'id de blocs au début de votre script pour une maintenance plus aisée

Modifions enfin des appels d'entrée/sortie/fermeture de position (strategy.entry et strategy.close) pour que la stratégie TradinvView puisse construire et  envoyer le bon message à Kryll.

if (not na(rsiSMA))
    if (VIP < VIM)
        if( cu )
            payload := payload_start + id_block_short + payload_end
            strategy.entry("trade", strategy.short, comment="Short", alert_message=payload)
        else
            payload := payload_start + id_block_close + payload_end
            strategy.close(id="trade", comment="Close", alert_message=payload)
    if (VIP > VIM)
        if( co )
            payload := payload_start + id_block_long + payload_end
            strategy.entry("trade", strategy.long, comment="Long", alert_message=payload)
        else
            payload := payload_start + id_block_close + payload_end
            strategy.close(id="trade", comment="Close", alert_message=payload)
On construit la payload avec les bons id de bloc puis le message est ajouté à l'alerte via la variable alert_message

Résultat Final

Voici a quoi ressemble le script finalisé.

//@version=5
// KRYLL Webhook - Tradingview strategy Exemple
strategy("Demo Strat", overlay=true)

// Kryll Webhook declarations
payload_start="{\"action_id\" : \""
payload_end="\",\"pair\":\""+syminfo.ticker+"\"}"
kryll_action=""
payload=""

id_block_long = "8f94aaf9-0f37-4730-8565-a40c8f151921"
id_block_short = "8f94aaf9-2f30-7430-2364-519a40c8f121"
id_block_close = "8f94aaf9-1a37-3540-5431-c8f121519a40"

// inputs zone
rsi_length =  input.int(7, title="RSI Length", minval=2)
rsi_fma_length = input.int(7, title="Fast RSI MA Length", minval=2)
rsi_sma_length = input.int(14, title="Slow RSI MA Length", minval=4)
rsi_neutral =  input.int(20, title="RSI neutral zone", minval=2)
vortex_period = input.int(14, title="Vortex Length", minval=2)

// Vortex indicator computation
VMP = math.sum( math.abs( high - low[1]), vortex_period )
VMM = math.sum( math.abs( low - high[1]), vortex_period )
STR = math.sum( ta.atr(1), vortex_period )
VIP = VMP / STR
VIM = VMM / STR

// Fast and Slow RSI Moving Average computation
rsi = ta.rsi(close, rsi_length)
rsiFMA = ta.sma(rsi, rsi_fma_length)
rsiSMA = ta.sma(rsi, rsi_sma_length)

// Fast and Slow RSI cross detection
co = ta.crossover(rsiFMA, rsiSMA)
cu = ta.crossunder(rsiFMA, rsiSMA)

if (not na(rsiSMA))
    if (VIP < VIM)
        if( cu )
            payload := payload_start + id_block_short + payload_end
            strategy.entry("trade", strategy.short, comment="Short", alert_message=payload)
        else
            payload := payload_start + id_block_close + payload_end
            strategy.close(id="trade", comment="Close", alert_message=payload)
    if (VIP > VIM)
        if( co )
            payload := payload_start + id_block_long + payload_end
            strategy.entry("trade", strategy.long, comment="Long", alert_message=payload)
        else
            payload := payload_start + id_block_close + payload_end
            strategy.close(id="trade", comment="Close", alert_message=payload)

Création d'une alerte dans Tradingview

Une fois votre script finalisé, placez-vous sur la paire et l'unité de temps sur lesquels vous souhaitez faire fonctionner votre stratégie TradingView. Dans notre cas, nous nous positionnons sur ETH/USDT et une unité de temps de 2h.

Rendez-vous ensuite dans le "Pine Editor" pour y coller notre stratégie et la sauver.

Ajoutons ensuite notre stratégie via le bouton 'Indicators' pour la faire apparaitre sur le graphique.

Notre TradingView configuré, créons maintenant l'alerte qui nous permettra d'envoyer des messages à notre stratégie par l'intermédiaire des appels webhooks.

Pour ce faire, cliquons sur le bouton 'Create Alert' et configurons là : sélectionnons notre stratégie en tant que condition, nommons notre alerte et configurons le message:

  {{strategy.order.alert_message}}
La stratégie place un long

Configurons ensuite l'URL webhook de la stratégie. Vous trouverez cet URL sur l'un des blocs webhook de votre stratégie Kryll.

Enfin, cliquez sur Create pour valider la creation de votre alerte.
Vous pourrez retrouver votre alerte dans la liste des alertes TradingView.

Laissez TradingView et Kryll trader pour vous.

Arrivé à ce stade, si votre alerte est active sur TradingView et votre stratégie lancée sur Kryll, les deux plateformes devraient communiquer.

Pour aller plus loin

Enrichissez vos creations

L'exemple décrit dans ce tutoriel reste simple et pourrait être enrichi via l'ajout d'un Take Profit ou encore d'un Stop Loss qui seraient alors de nouveaux blocs Webhook amenant à un autre flow.

Créez vos propres indicateurs

Le fait d'interfacer TradingView et Kryll ouvre une infinité de possibilités pour les utilisateurs de Kryll. Ils est dorénavant possible de créer vos propres indicateurs techniques, de les mixer ensemble, de cloner les indicateurs ou stratégies de la communauté TradingView et d'utiliser tout cela pour créer vos propres stratégies de trading automatisées !

Afin de vous aider dans cette tâche, voici deux "Templates" de stratégies qui pourront vous servir de point de départ à vos prochaines creations Spot et Futures.

//@version=5
// KRYLL Webhook - Tradingview strategy template
strategy("Kryll Spot Template", overlay=true)

payload_start="{\"action_id\" : \""
payload_end="\",\"pair\":\""+syminfo.ticker+"\"}"
kryll_action=""
payload=""
kryll_action="none"

id_block_buy = "put here your block id"
id_block_sell = "put here your block id"

// ----------------------- YOUR CODE HERE ---------------
// [...]
// In your code, set kryll_action to 'buy' or 'sell' mode, depending on the desired behavior.
//
// exemple
// kryll_action := 'sell'
// ----------------------- KRYLL FINAL CODE ---------------


if (kryll_action == "buy")
    payload := payload_start + id_block_buy + payload_end
    strategy.entry("trade", strategy.long, comment="Buy", alert_message=payload)

if (kryll_action == "sell")
    payload := payload_start + id_block_sell + payload_end
    strategy.entry("trade", strategy.close, comment="Sell", alert_message=payload)
Stratégie Spot (buy / sell)
//@version=5
// KRYLL Webhook - Tradingview strategy template
strategy("Kryll Futures Template", overlay=true)

payload_start="{\"action_id\" : \""
payload_end="\",\"pair\":\""+syminfo.ticker+"\"}"
kryll_action=""
payload=""
kryll_action="none"

id_block_long = "put here your block id"
id_block_short = "put here your block id"
id_block_close = "put here your block id"

// ----------------------- YOUR CODE HERE ---------------
// [...]
// In your code, set kryll_action to 'long', 'short' or 'close' mode depending on the desired behavior.
//
// exemple
// kryll_action := 'sell'
// ----------------------- KRYLL FINAL CODE ---------------


if (kryll_action == "long")
    payload := payload_start + id_block_long + payload_end
    strategy.entry("trade", strategy.long, comment="Long", alert_message=payload)

if (kryll_action == "short")
    payload := payload_start + id_block_short + payload_end
    strategy.entry("trade", strategy.short, comment="Short", alert_message=payload)

if (kryll_action == "close")
    payload := payload_start + id_block_close + payload_end
    strategy.entry("trade", strategy.close, comment="Close", alert_message=payload)
Stratégie futures (long/short/close)


Apprenez en plus

Divers Tutoriaux sont disponibles pour aller plus loin. L'équipe de Kryll vous propose plusieurs autres articles à ce sujet:


Kryll.io

Happy Trading,

Website : https://kryll.io
Twitter : @Kryll.io
Telegram EN : https://t.me/kryll_io
Telegram FR: https://t.me/kryll_fr
Telegram ES: https://t.me/kryll_es
Discord : https://discord.gg/PDcHd8K
Facebook : https://www.facebook.com/kryll.io
Support : support@kryll.io

Author image

About Nico