Nouveau dans Pine : surcharges, nouvelles fonctions de chaînes de caractères, et plus encore!

Dec 23, 2021

L’équipe Pine a travaillé dur pour continuer à améliorer Pine depuis le lancement de la v5. Passons en revue certaines des fonctionnalités tant attendues qui ont été ajoutées au cours des deux derniers mois.

Surcharges de fonctions
Les surcharges de fonctions sont des variantes d’une fonction qui peuvent être définies dans une bibliothèque ou incluses dans un script. Les surcharges portent le même nom que la fonction originale, mais utilisent un nombre différent de paramètres ou des paramètres de types différents. Elles sont particulièrement utiles dans les bibliothèques, où les types de paramètres sont obligatoires.

Dans cet indicateur, nous définissons une surcharge de la fonction mult() qui accepte trois arguments :

//@version=5

indicator("Function overload")

// Two parameters
mult(x1, x2) =>
    x1 * x2

// Three parameters
mult(x1, x2, x3) =>
    x1 * x2 * x3

plot(mult(7, 4))
plot(mult(7, 4, 2))

Ici, nous définissons des surcharges qui fonctionnent différemment, selon le type d’arguments utilisés. Lorsque les surcharges ont la même quantité de paramètres que la fonction originale, les paramètres doivent être définis en utilisant des types différents et explicites :

//@version=5
indicator("Function overload")

// Accepts both 'int' and 'float' values because any 'int' can be automatically cast to 'float'
mult(float x1, float x2) =>
    x1 * x2

// Returns a 'bool' value instead of a number
mult(bool x1, bool x2) =>
    x1 and x2 ? true : false

mult(string x1, string x2) =>
    str.tonumber(x1) * str.tonumber(x2)

// Has three parameters, so explicit types are not required
mult(x1, x2, x3) =>
    x1 * x2 * x3

plot(mult(7, 4))
plot(mult(7.5, 4.2))
plot(mult(true, false) ? 1 : 0)
plot(mult("5", "6"))
plot(mult(7, 4, 2))

for…in

L’itération sur une matrice avec la structure for nécessite d’empêcher l’entrée de la boucle si la matrice est vide et de se protéger contre un indice de matrice hors limites.

La nouvelle structure for…in vous facilite la vie en itérant sur tous les éléments de la matrice pour vous. La syntaxe est simple : for array_element in array_id va itérer sur les éléments de array_id à partir de l’indice zéro, en assignant la valeur de l’élément du tableau à la variable array_element à chaque itération. Aucune itération ou erreur ne se produira si la matrice est vide, et les éléments de la matrice peuvent être ajoutés ou supprimés lors des itérations de la boucle.

Dans le script ci-dessous, nous utilisons for…in pour trouver le nombre le plus élevé dans la matrice a1 :

//@version=5
indicator("For...in cycle")
var int[] a1 = array.from(1, 3, 6, 3, 8, 0, -9, 5)

highest(array) =>
    var int highestNum = na
    for element in array
        if na(highestNum) or element > highestNum
            highestNum := element
    highestNum

plot(highest(a1))

Nouvelles fonctions de manipulation des chaînes

Ces nouvelles fonctions fournissent davantage de moyens de traiter les chaînes de caractères, et introduisent les expressions régulières dans Pine. Notez que, contrairement aux fonctions de chaînes de caractères définies par l’utilisateur utilisant des matrices, elles peuvent retourner des valeurs de forme « simple », que l’on peut utiliser pour créer des arguments symbol pour les fonctions  request.security(), par exemple.

str.contains(source, str)

Détermine si la chaîne source contient la sous-chaîne str. Par exemple, nous pouvons déterminer si le graphique actuel est un graphique continu de futures en recherchant la sous-chaîne « ! » dans la variable intégrée syminfo.tickerid:

var isContinuous = str.contains(syminfo.tickerid, "!")  
plot(isContinuous ? 1 : 0)

str.pos(source, str)

Renvoie la position de la chaîne str dans la chaîne source.

str.substring(source, begin_pos, end_pos)

Extrait une sous-chaîne de la chaîne source. Dans cet exemple, nous utilisons str.substring()et str.pos() pour extraire la sous-chaîne « AAPL » de la chaîne d’entrée s:

s = input.string("Time to sell some NASDAQ:AAPL") 
pos = str.pos(s, ":")  // Get the position of the ":" character
tkr = str.substring(s, pos + 1) // "AAPL"

str.replace(source, target, replacement, occurrence)

Contrairement à la fonction existante str.replace_all(), str.replace() permet le remplacement sélectif d’une sous-chaîne appariée par une chaîne de remplacement. Dans cet exemple, nous remplaçons le préfixe « FTX » par « BINANCE » pour le premier symbole de la chaîne :

var source = "FTX:BTCUSD / FTX:BTCEUR"
// Replace the first occurrence of "FTX" with the "BINANCE" replacement string
var newSource = str.replace(source, "FTX",  "BINANCE", 0)

str.lower(source) et str.upper(source)

Convertit toutes les lettres de la chaîne source en minuscules ou en majuscules :

s = str.lower("Time to Sell Some AAPL") // time to sell some aapl!
s = str.upper("Time to Sell Some AAPL!") // TIME TO SELL SOME AAPL!

str.startswith(source, str) et  str.endswith(source, str)

Détermine si la chaîne source commence ou se termine par la sous-chaîne str.

str.match(source, regex)

Extrait la sous-chaîne correspondant à l’expression régulière spécifiée. Par exemple, avec l’expression régulière [ \\\w]+ :[ \w]+, il est possible de trouver et de renvoyer le nom du symbole à partir de la chaîne source « Il est temps de vendre du NASDAQ:AAPL ! »:

s = « It’s time to sell some NASDAQ:AAPL! »

var string tickerId = str.match(s, "[\\w]+:[\\w]+") //"NASDAQ:AAPL"

Conversion de devises

La plupart des fonctions de l’espace de nom request.* peuvent désormais convertir les valeurs qu’elles renvoient dans une autre devise. Si l’argument currency (devise) est spécifié dans l’appel de la fonction, les valeurs de prix retournées par la fonction seront converties de la devise source à la devise cible. Le paramètre currency a été ajouté aux fonctions suivantes :

Boîtes de texte

Le dessin de boîte dans Pine supporte maintenant le texte! Il suffit d’ajouter l’argument text à la fonction box.new() lorsque vous dessinez la boîte et le texte sera affiché à l’intérieur. Vous pouvez affiner le comportement du texte en définissant les valeurs des paramètres text_size, text_color, text_valign et text_halign lorsque vous créez la boîte, ou en faisant référence à la boîte avec l’une des nouvelles fonctions suivantes :

À titre d’exemple de cette fonctionnalité, voici l’indicateur intégré Multi-Time Period Charts modifié pour afficher le numéro et le haut/bas de la semaine qu’il met en évidence :

Pour rester informé des nouvelles fonctionnalités de Pine, gardez un œil sur les notes de publication du manuel de l’utilisateur de Pine. Nos PineCoders diffusent également des mises à jour sur la chaîne Telegram Squawk Box, Twitteret le chat public Pine Script sur TradingView.

Nous espérons que vous trouverez ces fonctionnalités très demandées utiles. Continuez à nous faire part de vos commentaires et de vos suggestions d’amélioration. Nous construisons TradingView pour vous, et nous sommes toujours heureux de recevoir vos commentaires.

Look first Then leap

TradingView est conçu pour vous, assurez-vous donc de profiter au maximum de nos fonctionnalités exceptionnelles
Ouvrir le graphique