Modifier les valeurs des champs
type order
float price
float amount
string symbol
if strategy.position_size == 0 and open > close
strategy.entry("long", strategy.long, 1)
order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)
if strategy.position_size != 0
runtime.log(order1)
order1.price := 999
order1.amount := 100
runtime.log(order1)
runtime.error("stop")
La valeur d'un champ objet peut être modifiée en utilisant le:=
opérateur de réaffectation.
Collection d'objets
L'exemple déclare un tableau vide qui contiendra des objets du type d'ordre défini par l'utilisateur:
type order
float price
float amount
string symbol
arrOrder = array.new<order>()
order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")
array.push(arrOrder, order1)
array.push(arrOrder, order2)
runtime.log(arrOrder)
runtime.error("stop")
ou
type order
float price
float amount
string symbol
var array<order> arrOrder = na
arrOrder := array.new<order>()
order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")
array.push(arrOrder, order1)
array.push(arrOrder, order2)
runtime.log(arrOrder)
runtime.error("stop")
Copie de l'objet
Dans Pine, les objets sont attribués par référence.
//@version=5
indicator("")
type pivotPoint
int x
float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivot1
pivot2.x := 2000
// Both plot the value 2000.
plot(pivot1.x)
plot(pivot2.x)
Dans l'exemple suivant, nous créons un objet pivot1 et définissons son champ x à 1000. Nous déclarons ensuite une variable pivot2 qui contient une référence à l'objet pivot1, de sorte que les deux pointent vers la même instance. Par conséquent, changer pivot2.x change également pivot1.x, car les deux se réfèrent au champ x du même objet.
Pour créer une copie qui est indépendante de l'objet d'origine, dans ce cas, nous pouvons utiliser la méthode de copie intégrée ((). Dans cet exemple, nous déclarons la variable pivot2 pour faire référence à l'instance copiée de l'objet pivot1. Maintenant, changer pivot2.x ne changera pas pivot1.x, car il se réfère au champ x d'un objet séparé:
//@version=5
indicator("")
type pivotPoint
int x
float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivotPoint.copy(pivot1)
pivot2.x := 2000
// Plots 1000 and 2000.
plot(pivot1.x)
plot(pivot2.x)
Il convient de noter que la méthode de copie de TradingView
Copie en profondeur
//@version=5
indicator("test deepCopy")
type orderInfo
float price
float amount
type labelInfo
orderInfo order
string labelMsg
labelInfo1 = labelInfo.new(orderInfo.new(100, 0.1), "test labelInfo1")
labelInfo2 = labelInfo.copy(labelInfo1)
labelInfo1.labelMsg := "labelInfo1->2" // Modify the base type field of labelInfo1 to see if it affects labelInfo2
labelInfo1.order.price := 999 // Modify the composite type field of labelInfo1 to see if it affects labelInfo2
runtime.log(labelInfo1)
runtime.log(labelInfo2)
runtime.error("stop")
Les résultats des tests montrent que labelInfo.copy(labelInfo1) est une copie profonde lorsqu'il est exécuté et que la modification de n'importe quel champ de labelInfo1 n'affectera pas labelInfo2.
Les méthodes dans le langage Pine sont des fonctions spécialisées associées à une instance spécifique d'un type intégré ou défini par l'utilisateur. Dans la plupart des cas, elles sont essentiellement les mêmes que les fonctions régulières, mais fournissent une syntaxe plus courte et plus pratique. Les utilisateurs peuvent accéder aux méthodes directement sur des variables en utilisant la notation en points, tout comme pour accéder aux champs des objets Pine. Pine comprend des méthodes intégrées pour tous les types spéciaux, y compris les tableaux, les matrices, les cartes, les lignes, les lignes de remplissage, etc. Ces méthodes offrent aux utilisateurs un moyen plus concis d'appeler des programmes spécialisés de ces types dans des scripts.
Méthodes intégrées
Par exemple, un code de script comme ceci:
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
var float sampleMean = na
var float sampleDev = na
// Identify if `n` bars have passed.
if bar_index % n == 0
// Update the queue.
array.push(sourceArray, sourceInput)
array.shift(sourceArray)
// Update the mean and standard deviaiton values.
sampleMean := array.avg(sourceArray)
sampleDev := array.stdev(sourceArray) * multiplier
// Calculate bands.
float highBand = sampleMean + sampleDev
float lowBand = sampleMean - sampleDev
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
Peut être réécrit équivalemment comme:
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
var float sampleMean = na
var float sampleDev = na
// Identify if `n` bars have passed.
if bar_index % n == 0
// Update the queue.
sourceArray.push(sourceInput)
sourceArray.shift()
// Update the mean and standard deviaiton values.
sampleMean := sourceArray.avg()
sampleDev := sourceArray.stdev() * multiplier
// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand = sampleMean - sampleDev
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
Vous pouvez voir que après PINE soutientMethods
, le codearray.avg(sourceArray)
peut être écrite sous forme de méthodes:sourceArray.avg()
- Je ne sais pas.
Notez que FMZ ne prend pas en charge les appels commearray.avg
currently.
Méthodes définies par l'utilisateur
Pine permet aux utilisateurs de définir des méthodes personnalisées qui fonctionnent avec des objets de tout type intégré ou défini par l'utilisateur.
Par exemple, dans le code suivant, le code pour le calcul de l'indicateur Bollinger est encapsulé sous forme de méthode définie par l'utilisateur:
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
var float sampleMean = na
var float sampleDev = na
// Identify if `n` bars have passed.
if bar_index % n == 0
// Update the queue.
sourceArray.push(sourceInput)
sourceArray.shift()
// Update the mean and standard deviaiton values.
sampleMean := sourceArray.avg()
sampleDev := sourceArray.stdev() * multiplier
// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand = sampleMean - sampleDev
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
Modifié en:
//@version=5
indicator("Custom Sample BB", overlay = true)
float sourceInput = input.source(close, "Source")
int samplesInput = input.int(20, "Samples")
int n = input.int(10, "Bars")
float multiplier = input.float(2.0, "StdDev")
var array<float> sourceArray = array.new<float>(samplesInput)
method maintainQueue(array<float> srcArray, float value, bool takeSample = true) =>
if takeSample
srcArray.push(value)
srcArray.shift()
srcArray
method calcBB(array<float> srcArray, float mult, bool calculate = true) =>
var float mean = na
var float dev = na
if calculate
mean := srcArray.avg()
dev := srcArray.stdev() * mult
[mean, mean + dev, mean - dev]
bool newSample = bar_index % n == 0
[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)
plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)
Vous pouvez voir que le premier paramètre dans la liste de paramètres des méthodes définies par l'utilisateur déclarées avec la méthode de mot clé: maintainQueue et calcBB est de typearray<float>
, ce qui signifie que la méthode est une méthode d'une variable de typearray<float>
, vous pouvez donc voir que le code suivant est appelé pour calculer l'indicateur de Bollinger.
[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)
Méthodes de surcharge
Les méthodes définies par l'utilisateur peuvent remplacer et surcharger les méthodes intégrées et les méthodes définies par l'utilisateur existantes avec le même identifiant. Cette fonctionnalité permet aux utilisateurs de définir plusieurs routines associées à différentes signatures d'arguments sous le même nom de méthode. À titre d'exemple simple, supposons que nous voulons définir une méthode pour identifier le type d'une variable. Puisque nous devons spécifier explicitement le type d'objet associé à une méthode définie par l'utilisateur, nous devons définir des surcharges pour chaque type que nous voulons qu'elle reconnaisse.
//@version=5
indicator("Type Inspection")
// @function Identifies an object's type.
// @param this Object to inspect.
// @returns (string) A string representation of the type.
method getType(int this) =>
na(this) ? "int(na)" : "int"
method getType(float this) =>
na(this) ? "float(na)" : "float"
method getType(bool this) =>
na(this) ? "bool(na)" : "bool"
method getType(color this) =>
na(this) ? "color(na)" : "color"
method getType(string this) =>
na(this) ? "string(na)" : "string"
a = 1 // a.getType(): float
b = 1.0 // b.getType(): float
c = true // c.getType(): bool
d = color.white // d.getType(): string(na)
e = "1" // e.getType(): string
runtime.log("a.getType():", a.getType())
runtime.log("b.getType():", b.getType())
runtime.log("c.getType():", c.getType())
runtime.log("d.getType():", d.getType())
runtime.log("e.getType():", e.getType())
runtime.error("stop")
Le type de base de chaque variable détermine quelle surcharge degetType()
Sur la plateforme FMZ, comme la mise en œuvre sous-jacente des scripts PINE est Javascript, le type numérique sera jugé comme des données en virgule flottante (float).
Lors de l'appel d'une fonction, vous pouvez passer des arguments. Vous pouvez attribuer des noms d'arguments pour attribuer des valeurs. Vous pouvez directement passer des variables dans les positions d'arguments correspondantes. L'utilisation mixte est également prise en charge. Par exemple:
plot(close, title="test plot") // Pass the argument close directly; specify the argument title and assign the string "test plot"
Après avoir spécifié l'attribution du nom d'argument, vous ne pouvez plus passer directement la variable en tant qu'argument, et les arguments suivants doivent être écrits sous la forme d'attribution du nom d'argument.
// plot(close, title="test", color.red) // Although the third argument of plot is the color value, but this will report an error
plot(close, title="test", color=color.red) // Correct writing
plot(close, "test", color.red) // Correct writing
Convertir le temps écoulé entimeframe
l'argument en secondes.
timeframe.in_seconds(timeframe)
Exemple
// Get chart timeframe:
i_tf = input.timeframe("1D")
// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)
plot(tf)
RetoursUne représentation int du nombre de secondes dans une barre d'untimeframe
.
Les arguments
timeframe
(simple chaîne) Temps. optionnel. Le paramètre par défaut est timeframe.period.Les commentairesPour letimeframe
La fonction >=
Voir aussi
input.timeframe
timeframe.period
Crée un identifiant de ticker pour demander une valeur de représentation int moyenne lissée.
ticker.heikinashi(symbol)
Exemple
heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)
RetoursValeur de chaîne du code de stock qui peut être fourni à la fonction request.security.
Les arguments
symbol
(simple chaîne) identifiant du code du produit.Voir aussi
syminfo.tickerid
syminfo.ticker
request.security
Demandez des données externes.
request.data(url, attribute)
Exemple
/*backtest
start: 2024-09-01 16:00:00
end: 2024-10-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/
var chart_data = "https://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data"
spotPrice = request.data(chart_data, "$.spot_close_price")
futuresPrice = request.data(chart_data, "$.future_close_price")
diff = futuresPrice - spotPrice
plot(diff, "perpetual-spot difference")
plot(futuresPrice, "futures prices", overlay=true)
plot(spotPrice, "spot prices", overlay=true)
if diff > 80 and strategy.position_size >= 0
runtime.log("diff > 80")
strategy.entry("Enter Short", strategy.short)
if diff < 60 and strategy.position_size <= 0
runtime.log("diff < 60")
strategy.entry("Enter Short", strategy.long)
Valeur de retourL'argument attribut spécifie la série de données.
Les arguments
url
(chaîne simple) L'URL de la source de données demandée et le format de données de la réponse de la source de données doivent satisfaire aux exigences (y compris au moins les attributs temps et données):{"data": [], "schema": ["time", "data"]}
Vous pouvez vous référer au format de données dans l'exemple:
{
"data": [
[1720051200000, "{\"spot_close_price\" : 57050.01, \"future_close_price\" : 57045.9}"],
[1720137600000, "{\"spot_close_price\" : 56628.79, \"future_close_price\" : 56604.9}"],
// ...
],
"schema": ["time", "data"]
}
attribute
(simple string) spécifie le nom de l'attribut et renvoie les données requises. Par exemple:"$.spot_close_price"
, utiliser$.
comme préfixe, et le nom de l'attribut est compatible avec l'attribut dans le champ de données dans les données dans la réponse lors de la demande de la source de données
Si une erreur s'affiche, vous devez vérifier si l'intervalle de temps demandé parrequest.data
est cohérent avec la plage de temps définie pour le backtest. Si aucune donnée ne peut être interrogée dans la série de temps du backtest, une erreur est signalée.
L'instruction SQL de requête de données-données dans cet exemple est:
WITH latest_data AS (
SELECT
klines.spot_1d.Time AS time,
CONCAT('{\"spot_close_price\" : ', klines.spot_1d.Close, ', \"future_close_price\" : ', klines.future_1d.Close, '}') AS data
FROM
klines.spot_1d
JOIN
klines.future_1d
ON
klines.spot_1d.Time = klines.future_1d.Time
WHERE
klines.spot_1d.Symbol = 'btc_usdt'
AND
klines.future_1d.Symbol = 'btc_usdt.swap'
AND
klines.spot_1d.Exchange = 'Binance'
AND
klines.future_1d.Exchange = 'Binance'
ORDER BY
klines.spot_1d.Time DESC
LIMIT 100
)
SELECT * FROM latest_data
ORDER BY time ASC;
Vous pouvez interroger et créer des liens de données sur leExploration des donnéesLa page de la plateforme FMZ, qui est lahttps://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data
utilisé dans l'exemple.
Demandez une autre variété/résolution.
request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency)
Exemple
s = request.security(syminfo.tickerid, "D", close) // 1 Day
plot(s)
expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)
// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)
RetoursSérie demandée
Les arguments
symbol
Un symbole.timeframe
Une chaîne vide est interprétée comme la résolution actuelle du graphique.expression
(série int/float/bool/color) Une expression peut être calculée et renvoyée à partir de l'appel request.security.gaps
(barmerge_gaps) Stratégie de fusion pour les données demandées (les données demandées fusionnent automatiquement avec les données OHLC de la série principale). Valeur possible: barmerge.gaps_on, barmerge.gaps_off. barmerge.gaps_on - les données demandées sont fusionnées avec des lacunes possibles (pas de valeurs). barmerge.gaps_off - les données demandées sont fusionnées en continu sans lacunes, toutes les lacunes sont remplies avec les valeurs existantes précédentes les plus proches. Valeur par défaut est barmerge.gaps_off.lookahead
(barmerge_lookahead) Stratégie de fusion pour la position de données demandée. Valeur possible: barmerge.lookahead_on, barmerge.lookahead_off. Valeur par défaut est barmerge.lookahead_off à partir de la version 3. Notez que le comportement est le même en temps réel et ne diffère que sur l'historique.ignore_invalid_symbol
(const bool) Un argument facultatif. Détermine le comportement de la fonction si le symbole spécifié n'est pas trouvé: si false, le script s'arrête et renvoie une erreur d'exécution; si true, la fonction renvoie na et l'exécution se poursuit. La valeur par défaut est false.currency
(simple chaîne) Monnaie dans laquelle doivent être converties les valeurs liées à la monnaie du symbole (par exemple OHLC).expression
est ensuite calculé en fonction des valeurs converties. Les taux de conversion utilisés sont basés sur les taux quotidiens des paires FX_IDCLes commentairesLe code PineScript qui utilise cette fonction pourrait calculer différemment sur les données historiques et en temps réel.
Si vous souhaitez spécifier des arguments supplémentaires pour le symbole demandé, par exemple session ou type de réglage, vous pouvez utiliser leticker.new() fonction.
Il n'est pas possible de passer un spread à cette fonction en utilisant la variable
Les valeurs admissibles de l'argument de résolution sont les suivantes: 1S, 5S, 15S, 30S - pour les intervalles de secondes (la résolution du graphique doit être inférieure ou égale à la résolution requise) de 1 à 1440 pour les minutes de 1D à 365D par jour de 1 W à 52 W pendant des semaines de 1M à 12M pendant des mois
Voir aussi
syminfo.ticker
syminfo.tickerid
timeframe.period
ta.correlation
barmerge.lookahead_off
barmerge.lookahead_on
Retourne vrai si lesource
la chaîne contient lestr
sous-chaîne, faux sinon.
str.contains(source, str)
Exemple
// If the current chart is a continuous futures chart, e.g "BTC1!", then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)
RetoursC'est vrai sistr
a été trouvé dans lesource
La chaîne, fausse sinon.
Les arguments
source
(Série de chaîne) Chaîne de source.str
La sous-chaîne à rechercher.Voir aussi
str.pos
str.match
Retourne vrai si lesource
la chaîne se termine par la sous-chaîne spécifiée dansstr
Faux, sinon.
str.endswith(source, str)
RetoursC'est vrai sisource
la chaîne se termine par la sous-chaîne spécifiée dansstr
Faux, sinon.
Les arguments
source
(Série de chaîne) Chaîne de source.str
La sous-chaîne à rechercher.Voir aussi
str.startswith
Retourne vrai si lesource
la chaîne commence par la sous-chaîne spécifiée dansstr
Faux, sinon.
str.startswith(source, str)
RetoursC'est vrai sisource
la chaîne commence par la sous-chaîne spécifiée dansstr
Faux, sinon.
Les arguments
source
(Série de chaîne) Chaîne de source.str
La sous-chaîne à rechercher.Voir aussi
str.endswith
Renvoie une nouvelle chaîne qui est une sous-chaîne de lasource
La sous-chaîne commence par le caractère de l'index spécifié parbegin_pos
et s'étend jusqu'à source
string.
str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)
Exemple
sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":") // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
runtime.log(tkr)
RetoursLa sous-chaîne extraite de la chaîne source.
Les arguments
source
(chaîne de série) Chaîne de source à partir de laquelle extraire la sous-chaîne.begin_pos
(série int) La position initiale de la sous-chaîne extraite. Elle est inclusive (la sous-chaîne extraite comprend le caractère à cette position).end_pos
(série int) La position de fin. Elle est exclusive (la chaîne extraite n'inclut PAS le caractère de cette position).source
string.Les commentairesL'indexation des chaînes commence à 0 sibegin_pos
est égal àend_pos
, la fonction renvoie une chaîne vide.
Voir aussi
str.contains
str.pos
str.match
str.tonumber(string)
RetoursUne version flottante de la chaîne si elle contient un nombre valide, sinon.
Les arguments
string
(chaîne de série) Représentation en chaîne d'un int ou d'un float.Converti la chaîne de formatage et les valeurs (s) en chaîne formatée. La chaîne de formatage peut contenir du texte littéral et un espace réservé entre crochets {} pour chaque valeur à formater. Chaque espace réservé se compose de l'index de l'argument requis (à partir de 0) qui le remplacera, et d'un spécificateur de format optionnel. L'index représente la position de cet argument dans la liste des arguments str.format.
str.format(formatString, arg0, arg1, ...)
Exemple
// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)
// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)
// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)
// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)
// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)
// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)
// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)
// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)
// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)
RetoursLa chaîne formatée.
Les arguments
formatString
(Série de chaîne) Format de chaîne.arg0, arg1, ...
(série int/float/bool/string/na/int[]/float[]/bool[]/string[]) Valeur à mettre en forme.Les commentairesLes crochets bouclés dans un motif non cité doivent être équilibrés. Par exemple,
Renvoie un entier correspondant au nombre de caractères de cette chaîne.
str.length(string)
RetoursLe nombre de caractères dans la chaîne source.
Les arguments
string
(Série de chaîne) Chaîne de source.Renvoie une nouvelle chaîne avec toutes les lettres converties en minuscules.
str.lower(source)
RetoursUne nouvelle chaîne avec toutes les lettres converties en minuscules.
Les arguments
source
(chaîne de série) Chaîne à convertir.Voir aussi
str.upper
Renvoie une nouvelle chaîne avec toutes les lettres converties en majuscules.
str.upper(source)
RetoursUne nouvelle chaîne avec toutes les lettres converties en majuscules.
Les arguments
source
(chaîne de série) Chaîne à convertir.Voir aussi
str.lower
Renvoie la nouvelle sous-chaîne de lasource
chaîne si elle correspond à unregex
l'expression régulière, ou autrement.
str.match(source, regex)
Exemple
s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")
// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")
if barstate.islastconfirmedhistory
runtime.log(tickerid) // "EXCHANGE_NAME:SYMBOL_NAME"
RetoursLa nouvelle sous-chaîne dusource
chaîne si elle correspond à unregex
l'expression régulière, ou autrement.
Les arguments
source
(Série de chaîne) Chaîne de source.regex
(chaîne de séries) L'expression régulière à laquelle cette chaîne doit correspondre.Les commentairesLa fonction renvoie la première occurrence de l'expression régulière dans lesource
Une corde.
Le signe regex
la chaîne doit être échappée avec une barre arrière supplémentaire, par exemple
Voir aussi
str.contains
str.substring
Retourne la position de la première occurrence de lastr
la chaîne dans lesource
Une chaîne, sinon.
str.pos(source, str)
RetoursLa position de lastr
la chaîne dans lesource
string.
Les arguments
source
(Série de chaîne) Chaîne de source.str
La sous-chaîne à rechercher.Les commentairesL'indexation des chaînes commence à 0.
Voir aussi
str.contains
str.match
str.substring
Renvoie une nouvelle chaîne avec la N + 1e occurrence de latarget
chaîne et l'apparition précédente detarget
chaîne remplacée par lereplacement
chaîne, où N est spécifié dansoccurrence
. N est l'indice de correspondance de la chaîne cible à remplacer dans la chaîne source.
str.replace(source, target, replacement, occurrence)
Exemple
var source = "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"
// Replace first occurrence of "EXCHANGE1" with "EXCHANGE2" replacement string
var newSource = str.replace(source, "EXCHANGE1", "EXCHANGE2", 0)
if barstate.islastconfirmedhistory
// Display "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"
runtime.log(newSource)
RetoursUne chaîne traitée.
Les arguments
source
(Série de chaîne) Chaîne de source.target
(Série de chaîne) Chaîne à remplacer.replacement
(chaîne de série) Chaîne à insérer au lieu de la chaîne cible.occurrence
(série int) L'indice de correspondance de l'occurrence de la chaîne cible à remplacer dans la chaîne source Indexation commence à 0 pour la première correspondance.Voir aussi
str.replace_all
str.match
Remplace chaque occurrence de la chaîne cible dans la chaîne source par la chaîne de remplacement.
str.replace_all(source, target, replacement)
RetoursUne chaîne traitée.
Les arguments
source
(Série de chaîne) Chaîne de source.target
(Série de chaîne) Chaîne à remplacer.replacement
(chaîne de série) Chaîne à remplacer pour chaque occurrence de la chaîne cible.Divise une chaîne en un tableau de sous-chaînes et renvoie son ID de tableau.
str.split(string, separator)
RetoursL'identifiant d'une série de chaînes.
Les arguments
string
(Série de chaîne) Chaîne de source.separator
La chaîne qui sépare chaque sous-chaîne.str.tostring(value)
str.tostring(value, format)
str.tostring(value[])
str.tostring(value[], format)
RetoursLa représentation en chaîne de lavalue
Je vous en prie.
Si levalue
L'argument est une chaîne, il est retourné tel quel.
Lorsque levalue
est na, la fonction renvoie la chaîne
Les arguments
value
(série int/float/bool/string/int[]/float[]/bool[]/string[]) Identifiant de valeur ou de tableau dont les éléments sont convertis en chaîne.format
(chaîne de série) Chaîne de format. Accepte ces constantes de format.* format.mintick, format.percent, format.volume. Facultatif. La valeur par défaut est Les commentairesLa mise en forme des valeurs flottantes arrondira également ces valeurs si nécessaire, par exemple str.tostring ((3.99,
La couleur de la fonction applique la transparence spécifiée à la couleur donnée.
color.new(color, transp)
Exemple
plot(close, color=color.new(color.red, 50))
RetoursCouleur avec transparence spécifiée.
Les arguments
color
(couleur de série)transp
(série int/float) Les valeurs possibles sont comprises entre 0 (non transparente) et 100 (invisible).Les commentairesL'utilisation d'arguments qui ne sont pas des constantes (par exemple,
Crée une nouvelle couleur avec transparence en utilisant le modèle de couleur RVB.
color.rgb(red, green, blue, transp)
Exemple
plot(close, color=color.rgb(255, 0, 0, 50))
RetoursCouleur avec transparence spécifiée.
Les arguments
red
(série int/float) composante de couleur rouge. Les valeurs possibles sont de 0 à 255.green
(série int/float) composante de couleur verte. Les valeurs possibles sont de 0 à 255.blue
(série int/float) Composante de couleur bleue. Les valeurs possibles sont de 0 à 255.transp
(série int/float) Facultatif. Transparence des couleurs. Les valeurs possibles sont de 0 (opaque) à 100 (invisible). La valeur par défaut est 0.Les commentairesL'utilisation d'arguments qui ne sont pas des constantes (par exemple,
Imprimez des informations sur les variables sur la console.
Fonctions spécifiques à la langue FMZ PINE,runtime.debug(value)
, avec seulement un argument.
Contenu de sortie dans le journal.
Fonctions spécifiques à la langue FMZ PINE,runtime.log(1, 2, 3, close, high, ...)
, vous pouvez passer plusieurs arguments.
Lorsqu'il est appelé, provoque une erreur d'exécution avec le message d'erreur spécifié dans lemessage
argument.
runtime.error(message)
Les argumentsmessage (chaîne de séries) Message d'erreur.
Ajout d'une entrée à l'onglet Entrées des paramètres de votre script, ce qui vous permet de fournir des options de configuration aux utilisateurs de script. Cette fonction détecte automatiquement le type d'argument utilisé pour
input(defval, title, tooltip, inline, group)
input(defval, title, inline, group, tooltip)
Exemple
i_switch = input(true, "On/Off") // Set true, the default is checked.
plot(i_switch ? open : na)
i_len = input(7, "Length")
i_src = input(close, "Source") // Drop-down box, select close by default.
plot(ta.sma(i_src, i_len))
i_col = input(color.red, "Plot Color")
plot(close, color=i_col)
i_text = input("Hello!", "Message")
runtime.log(i_text)
RetoursValeur de la variable d'entrée.
Les arguments
defval
(const int/float/bool/string/color ou type source intégré) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet close
, hlc3
, etc.title
(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.tooltip
(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.inline
(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.group
(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.Les commentairesLe résultat de la fonction d'entrée doit toujours être attribué à une variable, voir les exemples ci-dessus.
Voir aussi
input.bool
input.color
input.int
input.float
input.string
input.timeframe
input.source
Ajout d'une entrée à l'onglet Entrées des paramètres de votre script, ce qui vous permet de fournir des options de configuration aux utilisateurs de script. Cette fonction ajoute un menu déroulant qui permet à l'utilisateur de sélectionner une source pour le calcul, par exemple close, hl2, etc. Si le script ne comprend qu'un seul appel input.source(), l'utilisateur peut également sélectionner une sortie d'un autre indicateur sur son graphique comme source.
input.source(defval, title, tooltip, inline, group)
Exemple
i_src = input.source(close, "Source")
plot(i_src)
RetoursValeur de la variable d'entrée.
Les arguments
defval
(série int/float) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet title
(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.tooltip
(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.inline
(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.group
(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.Les commentairesLe résultat de la fonction input.source doit toujours être attribué à une variable, voir les exemples ci-dessus.
Voir aussi
input.bool
input.int
input.float
input.string
input.timeframe
input.color
input
Ajoute une entrée à l'onglet Entrées des paramètres du script, ce qui vous permet de fournir des options de configuration aux utilisateurs du script.
input.string(defval, title, options, tooltip, inline, group, confirm)
Exemple
i_text = input.string("Hello!", "Message")
runtime.log(i_text)
RetoursValeur de la variable d'entrée.
Les arguments
defval
(const string) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet options
l'argument, la valeur doit être l'un d'entre eux.title
(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.options
(Liste des constantes: [tooltip
(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.inline
(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.group
(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.confirm
(const bool) Si true, alors l'utilisateur sera invité à confirmer la valeur d'entrée avant que l'indicateur soit ajouté au graphique.Les commentairesLe résultat de la fonction input.string doit toujours être affecté à une variable, voir les exemples ci-dessus.
Voir aussi
input.bool
input.int
input.float
input.timeframe
input.source
input.color
input
Ajout d'une entrée à l'onglet Entrées des paramètres du script, ce qui vous permet de fournir des options de configuration aux utilisateurs du script.
input.bool(defval, title, tooltip, inline, group, confirm)
Exemple
i_switch = input.bool(true, "On/Off")
plot(i_switch ? open : na)
RetoursValeur de la variable d'entrée.
Les arguments
defval
(const bool) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet title
(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.tooltip
(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.inline
(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.group
(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.confirm
(const bool) Si true, alors l'utilisateur sera invité à confirmer la valeur d'entrée avant que l'indicateur soit ajouté au graphique.Les commentairesLe résultat de la fonction input.bool doit toujours être attribué à une variable, voir les exemples ci-dessus.
Voir aussi
input.int
input.float
input.string
input.timeframe
input.source
input.color
input
Ajouter une entrée à l'onglet Entrées des paramètres du script, ce qui vous permet de fournir des options de configuration aux utilisateurs du script.
input.int(defval, title, minval, maxval, step, tooltip, inline, group, confirm)
input.int(defval, title, options, tooltip, inline, group, confirm)
Exemple
i_len1 = input.int(10, "Length 1", minval=5, maxval=21, step=1)
plot(ta.sma(close, i_len1))
i_len2 = input.int(10, "Length 2", options=[5, 10, 21])
plot(ta.sma(close, i_len2))
RetoursValeur de la variable d'entrée.
Les arguments
defval
(const int) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet options
l'argument, la valeur doit être l'un d'entre eux.title
(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.minval
(const int) Valeur minimale possible de la variable d'entrée.maxval
(const int) Valeur maximale possible de la variable d'entrée.step
(const int) Valeur d'étape utilisée pour augmenter/décrémenter l'entrée. Facultatif. Par défaut, 1.options
(tuple de valeurs int const: [val1, val2,...]) Une liste d'options à choisir dans un menu déroulant, séparées par des virgules et entre parenthèses carrées: [val1, val2,...].minval
, maxval
etstep
les arguments ne peuvent pas être utilisés.tooltip
(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.inline
(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.group
(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.confirm
(const bool) Si true, alors l'utilisateur sera invité à confirmer la valeur d'entrée avant que l'indicateur soit ajouté au graphique.Les commentairesRésultat deinput.intLa fonction doit toujours être attribuée à une variable, voir les exemples ci-dessus.
Voir aussi
input.bool
input.float
input.string
input.timeframe
input.source
input.color
input
Ajoute une entrée à l'onglet Entrées des paramètres du script, ce qui vous permet de fournir des options de configuration aux utilisateurs du script.
input.float(defval, title, minval, maxval, step, tooltip, inline, group, confirm)
input.float(defval, title, options, tooltip, inline, group, confirm)
Exemple
i_angle1 = input.float(0.5, "Sin Angle", minval=-3.14, maxval=3.14, step=0.02)
plot(math.sin(i_angle1) > 0 ? close : open, "sin", color=color.green)
i_angle2 = input.float(0, "Cos Angle", options=[-3.14, -1.57, 0, 1.57, 3.14])
plot(math.cos(i_angle2) > 0 ? close : open, "cos", color=color.red)
RetoursValeur de la variable d'entrée.
Les arguments
defval
(const int/float) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet options
l'argument, la valeur doit être l'un d'entre eux.title
(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.minval
(const int/float) Valeur minimale possible de la variable d'entrée.maxval
(const int/float) Valeur maximale possible de la variable d'entrée.step
(const int/float) Valeur d'étape utilisée pour augmenter/décrémenter l'entrée. Facultatif. La valeur par défaut est 1.options
(tuple de valeurs const int/float: [val1, val2,...]) Une liste d'options à choisir dans un menu déroulant, séparées par des virgules et entre parenthèses carrées: [val1, val2,...].minval
, maxval
etstep
les arguments ne peuvent pas être utilisés.tooltip
(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.inline
(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.group
(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.confirm
(const bool) Si true, alors l'utilisateur sera invité à confirmer la valeur d'entrée avant que l'indicateur soit ajouté au graphique.Les commentairesLe résultat de la fonction input.float doit toujours être attribué à une variable, voir les exemples ci-dessus.
Voir aussi
input.bool
input.int
input.string
input.timeframe
input.source
input.color
input
Ajout d'une entrée à l'onglet Entrées des paramètres de votre script, ce qui vous permet de fournir des options de configuration aux utilisateurs de script.
input.color(defval, title, tooltip, inline, group, confirm)
Exemple
i_col = input.color(color.red, "Plot Color")
plot(close, color=i_col)
RetoursValeur de la variable d'entrée.
Les arguments
defval
(const color) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet title
(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.tooltip
(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.inline
(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.group
(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.confirm
(const bool) Si true, alors l'utilisateur sera invité à confirmer la valeur d'entrée avant que l'indicateur soit ajouté au graphique.Les commentairesLe résultat de la fonction input.color doit toujours être attribué à une variable, voir les exemples ci-dessus.
Voir aussi
input.bool
input.int
input.float
input.string
input.timeframe
input.source
input
Ajout d'une entrée de prix à l'onglet confirm = true
active le mode d'entrée interactif où un prix est sélectionné en cliquant sur le graphique.
input.price(defval, title, tooltip, inline, group, confirm)
Exemple
price1 = input.price(title="Date", defval=42)
plot(price1)
price2 = input.price(54, title="Date")
plot(price2)
RetoursValeur de la variable d'entrée.
Les arguments
defval
(const int/float) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet title
(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.tooltip
(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.inline
(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.group
(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.confirm
(const bool) Si true, le mode d'entrée interactive est activé et la sélection est effectuée en cliquant sur le graphique lorsque l'indicateur est ajouté au graphique, ou en sélectionnant l'indicateur et en déplaçant la sélection après cela.Les commentairesLors de l'utilisation du mode interactif, une entrée de temps peut être combinée avec une entrée de prix si les deux appels de fonction utilisent le même argument pour leurinline
argument.
Voir aussi
input.bool
input.int
input.float
input.string
input.resolution
input.source
input.color
input
Ajout d'une entrée à l'onglet Entrées des paramètres de votre script, ce qui vous permet de fournir des options de configuration aux utilisateurs du script. Cette fonction ajoute une liste déroulante qui permet à l'utilisateur de sélectionner un laps de temps spécifique via le sélecteur de laps de temps et le renvoie sous forme de chaîne. Le sélecteur inclut les bandes de temps personnalisées qu'un utilisateur peut avoir ajoutées en utilisant la liste déroulante de la chronologie du graphique.
input.timeframe(defval, title, options, tooltip, inline, group, confirm)
Exemple
i_res = input.timeframe('D', "Resolution", options=['D', 'W', 'M'])
s = request.security("syminfo.tickerid", i_res, close)
plot(s)
RetoursValeur de la variable d'entrée.
Les arguments
defval
(const string) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet options
l'argument, la valeur doit être l'un d'entre eux.title
(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.options
(coucou)Les mendiantsPourquoi les stratégies de la place de la réplique de la stratégie de Pine ne peuvent pas être mises en œuvre
L'inventeur de la quantification - un petit rêveBien, nous allons vérifier.
Les mendiantsLe Traqueur de tendances optimisé de Zhang
L'inventeur de la quantification - un petit rêveBonjour, quelle est la stratégie spécifique?