ndex = bar_index float price = close float vol = volume
//@variable A BarInfo
instance whose fields persist through all iterations, starting from the first bar.
var BarInfo firstBar = BarInfo.new()
//@variable A BarInfo
instance declared on every bar.
BarInfo currentBar = BarInfo.new()
// Plot the index
fields of both instances to compare the difference.
plot(firstBar.index, “firstBar”)
plot(currentBar.index, “currentBar”)
Lorsqu'une variable d'un objet de type défini par l'utilisateur est attribuée à l'aide d'une déclaration de mot-clé var, ce mot-clé s'applique automatiquement à tous les champs de cet objet. Cela signifie qu'un objet déclaré par le mot-clé var conserve son état entre chaque itération sans avoir à réinitialiser sa valeur de champ à chaque itération.
- L'objet firstBar est déclaré avec le mot-clé var, de sorte que son champ {index, price, vol} conserve sa valeur à chaque iteration, depuis le premier à la fin du dernier.
- L'objet currentBar n'utilise pas de déclaration de mot-clé var, de sorte que ses champs sont réinitialisés à chaque entrée et qu'il y a un nouvel objet à chaque itération.
Vous pouvez comparer les différences entre les deux en traçant les champs d'index de deux objets. firstBar.index conserve la valeur précédemment définie à chaque iteration, tandis que currentBar.index est réinitialisé à chaque iteration comme la valeur bar_index de l'élément en cours.
**Type d'objet Utilisation du mot-clé varip**
```pine
//@version=5
indicator("Objects using `varip` fields demo")
//@type A custom type that counts the bars and ticks in the script's execution.
type Counter
int bars = 0
varip int ticks = 0
//@variable A `Counter` object whose reference persists throughout all bars.
var Counter counter = Counter.new()
// Add 1 to the `bars` and `ticks` fields. The `ticks` field is not subject to rollback on unconfirmed bars.
counter.bars += 1
counter.ticks += 1
// Plot both fields for comparison.
plot(counter.bars, "Bar counter", color.blue, 3)
plot(counter.ticks, "Tick counter", color.purple, 3)
Dans Pine, l’utilisation du mot-clé varip permet d’indiquer que le champ de l’objet persiste tout au long de l’exécution du script et ne se retourne pas dans la colonne non confirmée. Dans les déclarations de type Counter, le champ bars n’utilise pas le mot-clé varip, donc il se retourne dans chaque colonne non confirmée. Le champ ticks utilise le mot-clé varip, donc il ne se retourne pas dans la colonne non confirmée. L’objet counter est déclaré à l’aide du mot-clé var, donc il persistera tout au long de l’exécution du script. Dans chaque iteration, les champs bars et les champs ticks sont augmentés de 1 ≠. Les champs bars sont renvoyés dans chaque colonne non confirmée, tandis que les champs ticks ne le sont pas. Enfin, en traçant les champs counter.bars et counter.ticks, il est possible de comparer les différences entre eux. La valeur de counter.bars sera renvoyée dans chaque colonne non confirmée, tandis que la valeur de counter.ticks continuera d’augmenter jusqu’à la fin de l’exécution du script.
Modifier la valeur du champ
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")
À utiliser:=
L’opérateur de réattribution modifie la valeur du champ objet.
Ensemble d’objets
L’exemple déclare un tableau vide qui conserve les objets de type order définis 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")
Objets à copier
Dans Pine, les objets sont attribués par référence. Lorsqu’un objet existant est attribué à une nouvelle variable, ils pointent tous les deux vers le même objet.
//@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 ci-dessous, nous créons un objet pivot1 et nous définissons son champ x à 1000。 Ensuite, nous déclarons qu’un pivot2 contient une variable qui fait référence à cet objet pivot1 et donc les deux pointent vers la même instance。 Par conséquent, modifier pivot2.x modifie aussi pivot1.x, car les deux font référence au champ x du même objet。
Pour créer une copie indépendante de l’objet d’origine, dans ce cas nous pouvons utiliser la méthode built-in copy (). Dans cet exemple, nous déclarons que pivot2 fait référence à une variable de l’instance de copie de l’objet pivot1. Maintenant, changer pivot2.x ne change pas pivot1.x, car il fait référence à un champ de x 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 est à noter que la méthode de copie de TradingView est une copie superficielle. Si un objet a des champs de type spécial (array, etc.), les champs de la copie superficielle de cet objet pointeront vers la même instance que l’objet. La plate-forme FMZ implémente directement la copie profonde sans avoir besoin d’un traitement supplémentaire, par exemple:
Copies détaillées
//@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" // 修改 labelInfo1 的基础类型字段,看是否影响 labelInfo2
labelInfo1.order.price := 999 // 修改 labelInfo1 的复合类型字段,看是否影响 labelInfo2
runtime.log(labelInfo1)
runtime.log(labelInfo2)
runtime.error("stop")
Le résultat du test, labelInfo.copy ((labelInfo1) est une copie profonde lors de l’exécution, modifier labelInfo1 n’affecte aucun champ de labelInfo2。
Les méthodes du langage Pine sont des fonctions spécialisées associées à des types intégrés ou définis par l’utilisateur pour une instance particulière. Dans la plupart des cas, elles sont fondamentalement les mêmes que les fonctions ordinaires, mais offrent une grammaire plus courte et plus pratique. Les utilisateurs peuvent accéder aux méthodes directement en utilisant des points sur les variables, comme s’ils accédaient à des champs d’objets Pine.
Méthode intégrée
Un exemple de ce type de script:
//@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)
L’équivalent peut s’écrire
//@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 PINE est d’accord.Methods
Ensuite, le code.array.avg(sourceArray)
Si vous utilisez la formule de méthodes, vous pouvez écrire:sourceArray.avg()
。
Attention, FMZ n’est pas encore pris en chargearray.avg
Il y a un appel à ce genre.
Méthode définie par l’utilisateur
Pine permet à l’utilisateur de définir des méthodes personnalisées qui peuvent être utilisées avec n’importe quel type d’objet intégré ou défini par l’utilisateur. Les méthodes de définition sont essentiellement les mêmes que les fonctions de définition, mais avec deux différences clés:
1, le mot clé method doit être inclus avant le nom de la fonction. 2. les paramètres de la méthode, dont le premier type doit être une déclaration explicite, car il indique le type d’objets auxquels la méthode sera associée.
Par exemple, le code de calcul de l’indice de Brin est encapsulé dans le code suivant comme une méthode personnalisée:
//@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)
On peut voir que la méthode utilisateur qui utilise la déclaration de méthode de la clé:maintainQueue, calcBB, est la première dans la liste des paramètres.array<float>
type ≠ indique que la méthode estarray<float>
La méthode des variables de type, donc on peut voir que l’on appelle le code suivant pour calculer l’indicateur de Bryn.
[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)
Reload de méthodes
Les méthodes définies par l’utilisateur peuvent superposer et surcharger des méthodes existantes avec le même identifiant et des méthodes définies par l’utilisateur. Cette fonctionnalité permet à l’utilisateur de définir plusieurs routines associées à des signatures de paramètres différents sous le même nom de méthode. À titre d’exemple simple, supposons que nous voulions définir une méthode pour identifier les types de variables.
//@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")
Déterminer le type de base de chaque variablegetType()
Quel type de surcharge sera utilisé? Sur la plateforme FMZ, les types de valeur numériques seront jugés comme des données de type float car la base de script PINE est implémentée dans le langage Javascript.
Les paramètres peuvent être transmis lors de l’appel d’une fonction, l’attribution d’un nom de paramètre peut être spécifiée, les variables peuvent être transmises directement à la position de paramètre correspondante, et l’utilisation mixte est également prise en charge. Par exemple:
plot(close, title="test plot") // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"
Une fois que le nom d’un paramètre a été attribué, il n’est plus possible de transmettre directement la variable en tant que paramètre, et les paramètres ultérieurs doivent être écrits sous la forme d’une attribution de nom de paramètre.
// plot(close, title="test", color.red) // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red) // 正确写法
Elle sera transmise àtimeframe
La période de temps du paramètre est convertie 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)
Retourne une valeur
timeframe
Le nombre de secondes d’une ligne K est représenté sous la forme int ≠ ∞.
paramètre
timeframe
(simple string) Période de temps。 est facultative。 par défaut timeframe.period。À noter
Pourtimeframe
>= La fonction ‘1M’ est calculée en fonction du nombre de secondes de 30,4167 (365⁄12) jours d’un mois.
Voir aussi
input.timeframe
timeframe.period
Créer un identifiant de code qui demande une moyenne lisse de la valeur de la ligne K。
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)
Retourne une valeur La valeur de chaîne de caractères du code de stock peut être fournie à la fonction request.security 。
paramètre
symbol
(simple string) Identificateur de code de produit。Voir aussi
syminfo.tickerid
syminfo.ticker
request.security
Nous demandons 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, "永续-现货差价")
plot(futuresPrice, "期货价格", overlay=true)
plot(spotPrice, "现货价格", 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)
Retourne une valeur
paramètreattribute
Séries de données désignées.
paramètre
url
(simple string) La requête est envoyée au format suivant:{"data": [], "schema": ["time", "data"]}
Vous pouvez vous référer aux formats de données de 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) Indique le nom de l’attribut et renvoie les données souhaitées. Par exemple:"$.spot_close_price"
,utiliser$.
En tant que préfixe, le nom de l’attribut correspond à l’attribut dans le champ data dans les données qui sont répondues à la source de données de la requêteSi le message est erroné, vérifiez.request.data
Si la plage de temps demandée correspond à la plage de temps de réglage de la rétroaction, une erreur de requête de données non trouvées sur la séquence de temps de rétroaction sera signalée.
Dans cet exemple, data-data est une requête SQL:
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;
Les vidéos sont disponibles sur la plateforme FMZExploration des donnéesRecherche de page, création de liens de données, comme dans l’exemplehttps://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data
。
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)
Retourne une valeur Séries de requêtes
paramètre
symbol
(simple string) Le code du produit.timeframe
(simple string) Période de temps。 La chaîne vide sera interprétée comme étant la période de temps actuelle de la figure。expression
(series int/float/bool/color) peut être calculé à partir d’un appel request.security et renvoie une expression. Il peut s’agir d’une série ou d’un sous-ensemble contenant des éléments qui peuvent être convertis en série.gaps
(barmerge_gaps) Politique de fusion des données demandées (qui demande que les données soient fusionnées automatiquement avec les données de la série principale de l’OHLC). Valeur possible: barmerge.gaps_on, barmerge.gaps_off. barmerge.gaps_on - Les données demandées sont fusionnées avec les écarts possibles (valeur na).lookahead
(barmerge_lookahead) Donne la stratégie de fusion de données demandée. Valeur possible: barmerge.lookahead_on, barmerge.lookahead_off. Depuis la version 3, la valeur par défaut est barmerge.lookahead_off.ignore_invalid_symbol
(const bool) un paramètre optionnel. Si le produit spécifié n’est pas trouvé, le comportement de la fonction est déterminé: si false, le script s’arrête et retourne une erreur lors de l’exécution; si true, la fonction retourne na et continue l’exécution. La valeur par défaut est false.currency
(simple string) Convertir la valeur relative à la devise de la marchandise (… par exemple OHLC) en devise. Puis calculer la valeur après la conversion. expression . Le taux de conversion utilisé est basé sur le taux de change quotidien du jour précédent de la paire FX_IDC (… par rapport à la ligne K calculée). Optionnel.À noter
Le code PineScript qui utilise cette fonctionnalité permet d’effectuer des calculs différents pour les enregistrements historiques et les données en temps réel.
Si vous souhaitez spécifier des paramètres supplémentaires pour la marchandise demandée, tels que la période de transaction ou le type d’ajustement, vous pouvez utiliser la fonction ticker.new ().
Impossible d’utiliser la variable ‘ticker’ pour transmettre le décalage à cette fonction. Vous pouvez utiliser la variable ‘ticker.new’ ou la représentation en chaînes de caractères du code d’actions, par exemple AAPL+MSFT*TSLA”。
Actuellement, un script peut contenir jusqu’à 40 appels request.security.
Veuillez noter que l’utilisation de cette variable/fonction peut entraîner une redéfinition de l’indicateur.
Les paramètres de résolution autorisés sont:
1S, 5S, 15S, 30S - intervalles de secondes (la période du graphique doit être inférieure ou égale à la période demandée)
De 1 à 1440 minutes
de 1 à 365 jours
De 1 W à 52 W en quelques semaines
De 1 M à 12 M, plusieurs mois
Voir aussi
syminfo.ticker
syminfo.tickerid
timeframe.period
ta.correlation
barmerge.lookahead_off
barmerge.lookahead_on
Si voussource
La chaîne contientstr
La sous-chaîne, retourne true, sinon retourne false
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)
Retourne une valeur
Dans le cassource
Trouver dans une chaîne de caractèresstr
, alors c’est vrai, sinon c’est faux.
paramètre
source
(series string) Chaîne de sourcestr
(series string) La sous-chaîne à rechercher.Voir aussi
str.pos
str.match
Si voussource
Les chaînes de caractèresstr
La sous-chaîne indiquée au début de la chaîne de caractères retourne true ou false.
str.endswith(source, str)
Retourne une valeur
Si voussource
Les chaînes de caractèresstr
La sous-chaîne indiquée dans la ligne de fin est vraie ou fausse.
paramètre
source
(series string) Chaîne de sourcestr
(series string) La sous-chaîne à rechercher.Voir aussi
str.startswith
Si voussource
Les chaînes de caractèresstr
La sous-chaîne indiquée au début de la chaîne de caractères retourne true ou false.
str.startswith(source, str)
Retourne une valeur
Si voussource
Les chaînes de caractèresstr
La chaîne de caractères désignée dans le champ de la sous-chaîne débute par true, sinon par false.
paramètre
source
(series string) Chaîne de sourcestr
(series string) La sous-chaîne à rechercher.Voir aussi
str.endswith
Retourne une nouvelle chaîne, qui estsource
Les sous-chaînes de chaînes de caractères.begin_pos
Les caractères commencent à l’index spécifié et s’étendent àsource
Le “end_pos - 1’” de la chaîne de caractères.
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)
Retourne une valeur Les sous-chaînes extraites de la chaîne de caractères source.
paramètre
source
(series string) La chaîne de source à partir de laquelle est extraite la chaîne de sous-chaîne。begin_pos
(series int) La position initiale de la sous-chaîne extraite。 elle est exclusive ((la sous-chaîne extraite inclut les caractères de cette position)。end_pos
(series int) Localisation de la fin. Il est exclusif (la chaîne extraite n’inclut pas les caractères de cette position).source
La longueur de la chaîne de caractèresÀ noter
L’indexation de chaîne de caractères commence par 0 ≠ 0 ≠ 0 ≠ 0 ≠ 0 ≠ 0 ≠ 0 ≠ 0 ≠ 0 ≠ 0 ≠ 0 ≠ 0begin_pos
égalend_pos
, la fonction renvoie une chaîne de caractères vide ≠ .
Voir aussi
str.contains
str.pos
str.match
str.tonumber(string)
Retourne une valeur Si elle contient des nombres valides, elle est de type floating point, sinon na。
paramètre
string
(series string) est une expression de type int ou float.Conversion de chaînes de format et de valeurs en chaînes de format. Les chaînes de format peuvent contenir du texte et une case {} dans les parenthèses de chaque valeur à formater. Chaque case contient un index qui remplace les paramètres nécessaires (commençant par 0) et une case de format optionnelle. L’index indique la position du paramètre dans la liste de paramètres 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)
Retourne une valeur Une chaîne de caractères formatée.
paramètre
formatString
(series string) est une chaîne de caractères formatée。arg0, arg1, ...
(series int/float/bool/string/na/int[]/float[]/bool[]/string[]) La valeur à formater.À noter Tous les parenthèses dans les styles non cités doivent être équilibrés. Par exemple, “ab {0} de” et “ab ‘}’ de” sont des styles valides, mais “ab {0’}’ de”, “ab } de” et “‘{”” ne le sont pas.
Renvoie un nombre entier correspondant au nombre de caractères de la chaîne.
str.length(string)
Retourne une valeur Nombre de caractères dans la chaîne de caractères source.
paramètre
string
(series string) Chaîne de sourceRetourne une nouvelle chaîne de caractères où toutes les lettres ont été converties en minuscules.
str.lower(source)
Retourne une valeur Toutes les lettres sont converties en une nouvelle chaîne de caractères minuscules.
paramètre
source
(series string) La chaîne de caractères à convertirVoir aussi
str.upper
Renvoie une nouvelle chaîne de caractères où toutes les lettres sont transposées en majuscules.
str.upper(source)
Retourne une valeur Toutes les lettres ont été converties en une nouvelle chaîne de caractères en majuscules.
paramètre
source
(series string) La chaîne de caractères à convertirVoir aussi
str.lower
Si une correspondanceregex
Une expression régulière renvoiesource
La nouvelle sous-chaîne de la chaîne de caractères retourne ‘na’
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"
Retourne une valeur
source
La nouvelle sous-chaîne de chaîne de caractères, si elle correspond à unregex
L’expression régulière est ‘na’
paramètre
source
(series string) Chaîne de sourceregex
(series string) Expression régulière correspondant à cette chaîne de caractères。À noter
Fonction Renvoiesource
Expression régulière qui apparaît pour la première fois dans une chaîne de caractères:
regex
Les caractères en contre-classique <unk> dans une chaîne de caractères nécessitent l’utilisation de contre-classiques supplémentaires pour la translittération, par exemple \d représente l’expression régulière \d。
Voir aussi
str.contains
str.substring
Le retour.source
Première apparition dans la chaînestr
La position de la chaîne de caractères, sinon retourne ‘na’。
str.pos(source, str)
Retourne une valeur
str
La chaîne de caractèressource
Position dans la chaîne de caractères.
paramètre
source
(series string) Chaîne de sourcestr
(series string) La sous-chaîne à rechercher.À noter L’index de chaîne de caractères commence par 0。
Voir aussi
str.contains
str.match
str.substring
Renvoie une nouvelle chaîne de caractères dont la première occurrence est N+1target
Chaînes de caractères et précédentstarget
La chaîne est remplacée parreplacement
Une chaîne de caractères où N estoccurrence
N est l’index de correspondance qui apparaît dans la chaîne de 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 "EXCHANGE2:SYMBOL1 / EXCHANGE1:SYMBOL2"
runtime.log(newSource)
Retourne une valeur Chaînes traitées
paramètre
source
(series string) Chaîne de sourcetarget
(series string) est remplacé par une chaînereplacement
(series string) La chaîne à insérer au lieu de la chaîne cible.occurrence
(series int) L’index de correspondance de la chaîne cible à remplacer apparaît dans la chaîne source. Le premier index de correspondance commence à 0.Voir aussi
str.replace_all
str.match
On remplace les chaînes de caractères par des chaînes de caractères cibles qui apparaissent à chaque fois dans la chaîne source.
str.replace_all(source, target, replacement)
Retourne une valeur Chaînes traitées
paramètre
source
(series string) Chaîne de sourcetarget
(series string) est remplacé par une chaînereplacement
(series string) Chaque fois que la chaîne cible apparaît, elle est remplacée par une chaîneDivise les chaînes en sous-chaînes et renvoie leur ID d’array.
str.split(string, separator)
Retourne une valeur ID de la chaîne de caractères
paramètre
string
(series string) Chaîne de sourceseparator
(series string) Une chaîne séparant chaque sous-chaîne.str.tostring(value)
str.tostring(value, format)
str.tostring(value[])
str.tostring(value[], format)
Retourne une valeur
value
Les chaînes de caractères des paramètres sont représentées sous la forme:
Si vousvalue
Si le paramètre est une chaîne de caractères, elle est renvoyée comme telle.
Quandvalue
Pour na, la fonction renvoie la chaîne de caractères NaN.
paramètre
value
(series int/float/bool/string/int[]/float[]/bool[]/string[]) dont l’élément est converti en une valeur de chaîne ou en un ID d’array.format
(series string) Format string. Accepts these format.* constants: format.mintick, format.percent, format.volume. Optional. The default value is ‘#.##########’.À noter Les formats avec des valeurs en floats sont également encadrés si nécessaire, par exemple str.tostring ((3.99, ‘#’) renvoie 4。 Pour afficher le zéro suivi d’un zéro, utilisez ‘0’ au lieu de ‘#’. Par exemple, ‘#.000’ Lorsqu’on utilise format.mintick, cette valeur est ronde jusqu’au nombre le plus proche qui peut être divisé par syminfo.mintick sans résidu. Les chaînes retournées sont suivies de zéros. Si le paramètre x est une chaîne de caractères, elle renvoie la même valeur de chaîne de caractères。 Les arguments de type Bool renvoient soit true soit false. Lorsque x est na, la fonction renvoie NaN。
La couleur de fonction spécifie la transparence appliquée à une couleur donnée.
color.new(color, transp)
Exemple
plot(close, color=color.new(color.red, 50))
Retourne une valeur Les couleurs ont une certaine transparence.
paramètre
color
(series color)transp
(series int/float) Les valeurs disponibles sont de 0 (non visible) à 100 (non visible)À noter L’utilisation d’un nombre exorbitant de paramètres (par exemple, simple, input ou series) affectera la couleur affichée dans la page de balises des paramètres / balises de style du script. Veuillez consulter le manuel de l’utilisateur pour plus d’informations.
Créer de nouvelles couleurs avec transparence en utilisant le modèle de couleur RGB.
color.rgb(red, green, blue, transp)
Exemple
plot(close, color=color.rgb(255, 0, 0, 50))
Retourne une valeur Les couleurs ont une certaine transparence.
paramètre
red
(series int/float) Couleur rouge. Les valeurs possibles sont de 0 à 255green
(series int/float) Le vert. Les valeurs possibles sont de 0 à 255blue
(series int/float) La tonalité bleue. Les valeurs possibles sont de 0 à 255.transp
(series int/float) est facultative. La couleur est transparente. Les valeurs possibles vont de 0 (non-transparent) à 100 (transparent). La valeur par défaut est 0 (transparent).À noter L’utilisation d’un nombre exorbitant de paramètres (par exemple, simple, input ou series) affectera la couleur affichée dans la page de balises des paramètres / balises de style du script. Veuillez consulter le manuel de l’utilisateur pour plus d’informations.
Imprimer les informations sur les variables dans la console.
FMZ PINE possède une fonctionnalité spécifique.runtime.debug(value)
Il n’y a qu’un seul paramètre.
La sortie du journal.
FMZ PINE possède une fonctionnalité spécifique.runtime.log(1, 2, 3, close, high, ...)
, qui peut transmettre plusieurs paramètres.
L’appel peut entraîner des erreurs de fonctionnement et entraîner des erreurs de connexion.message
Le message d’erreur indiqué dans le paramètre:
runtime.error(message)
paramètre message (series string) est un message d’erreur.
Ajoutez l’input à la page de balises d’entrée des paramètres du script, qui vous permet de fournir des options de configuration aux utilisateurs du script. Cette fonction détecte automatiquement le type de paramètre utilisé dans la barre de défilement et utilise le plugin d’entrée correspondant.
input(defval, title, tooltip, inline, group)
input(defval, title, inline, group, tooltip)
Exemple
i_switch = input(true, "On/Off") // 设置true,默认勾选
plot(i_switch ? open : na)
i_len = input(7, "Length")
i_src = input(close, "Source") // 下拉框,默认选择close
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)
Retourne une valeur Valeur de la variable
paramètre
defval
(const int/float/bool/string/color or source-type built-ins) Définit la valeur par défaut de la variable d’entrée recommandée dans la page de balises de balises / balises d’entrée du script, à partir de laquelle les utilisateurs du script peuvent la modifier. La fonction de balisage de type source est une variable de balisage de série intégrée spécifiant la source de calcul:close
、hlc3
Et ainsi de suite.title
(const string) Titre de la chaîne de caractères. Si ce n’est pas spécifié, le nom de la variable est utilisé comme titre de la chaîne de caractères. Si un titre est spécifié mais vide, le nom est une chaîne de caractères vide.tooltip
(const string) Cette chaîne est affichée à l’utilisateur lorsque la souris est suspendue sur l’icône de l’invite de l’outil.inline
(const string) Combine tous les appels d’entrée utilisant les mêmes paramètres dans une seule ligne. Il n’affiche pas les chaînes utilisées comme paramètres. Il est utilisé uniquement pour identifier les entrées appartenant à la même ligne.group
(const string) Création d’un titre au-dessus de toutes les entrées en utilisant la même chaîne de caractères composite. Cette chaîne de caractères est également utilisée comme texte de titre.À noter Le retour d’une fonction d’entrée doit toujours être attribué à une variable. Voir l’exemple ci-dessus.
Voir aussi
input.bool
input.color
input.int
input.float
input.string
input.timeframe
input.source
Ajouter l’input à la page de balises d’entrée des paramètres du script, qui vous permet de fournir des options de configuration aux utilisateurs du script. Cette fonctionnalité a ajouté un menu déroulant permettant aux utilisateurs de choisir la source de calcul, par exemple close, hl2 etc. Si le script ne contient qu’un seul appel input.source (), les utilisateurs peuvent également choisir un autre indicateur sur le graphique comme source de sortie.
input.source(defval, title, tooltip, inline, group)
Exemple
i_src = input.source(close, "Source")
plot(i_src)
Retourne une valeur Valeur de la variable
paramètre
defval
(series int/float) Détermine la valeur par défaut de la variable d’entrée recommandée dans la page de balises de balises / balises d’entrée du script, à partir de laquelle l’utilisateur peut la modifier.title
(const string) Titre de la chaîne de caractères. Si ce n’est pas spécifié, le nom de la variable est utilisé comme titre de la chaîne de caractères. Si un titre est spécifié mais vide, le nom est une chaîne de caractères vide.tooltip
(const string) Cette chaîne est affichée à l’utilisateur lorsque la souris est suspendue sur l’icône de l’invite de l’outil.inline
(const string) Combine tous les appels d’entrée utilisant les mêmes paramètres dans une seule ligne. Il n’affiche pas les chaînes utilisées comme paramètres. Il est utilisé uniquement pour identifier les entrées appartenant à la même ligne.group
(const string) Création d’un titre au-dessus de toutes les entrées en utilisant la même chaîne de caractères composite. Cette chaîne de caractères est également utilisée comme texte de titre.À noter Le résultat de la fonction input.source doit toujours être attribué à une variable, comme dans l’exemple ci-dessus.
Voir aussi
input.bool
input.int
input.float
input.string
input.timeframe
input.color
input
Ajouter l’input à la barre d’options d’entrée du script, qui vous permet de fournir des options de configuration aux utilisateurs du script. Cette fonction ajoute le champ d’entrée de chaîne à l’entrée du script.
input.string(defval, title, options, tooltip, inline, group, confirm)
Exemple
i_text = input.string("Hello!", "Message")
runtime.log(i_text)
Retourne une valeur Valeur de la variable
paramètre
defval
(const string) Définit la valeur par défaut d’une variable d’entrée recommandée dans la page de balises de balises / balises d’entrée du script, à partir de laquelle l’utilisateur peut la modifier.options
Lorsque les paramètres sont utilisés ensemble, la valeur doit être l’une d’entre elles.title
(const string) Titre de la chaîne de caractères. Si ce n’est pas spécifié, le nom de la variable est utilisé comme titre de la chaîne de caractères. Si un titre est spécifié mais vide, le nom est une chaîne de caractères vide.options
(List of constants: [La liste des options disponibles.tooltip
(const string) Cette chaîne est affichée à l’utilisateur lorsque la souris est suspendue sur l’icône de l’invite de l’outil.inline
(const string) Combine tous les appels d’entrée utilisant les mêmes paramètres dans une seule ligne. Il n’affiche pas les chaînes utilisées comme paramètres. Il est utilisé uniquement pour identifier les entrées appartenant à la même ligne.group
(const string) Création d’un titre au-dessus de toutes les entrées en utilisant la même chaîne de caractères composite. Cette chaîne de caractères est également utilisée comme texte de titre.confirm
(const bool) Si true, l’utilisateur est invité à confirmer les valeurs de saisie. La valeur par défaut est false.À noter Le résultat de la fonction input.string devrait toujours être attribué à une variable, comme dans l’exemple ci-dessus.
Voir aussi
input.bool
input.int
input.float
input.timeframe
input.source
input.color
input
Ajoutez l’input à la page de balises d’entrée des paramètres du script, qui vous permet de fournir des options de configuration aux utilisateurs du script. Cette fonction ajoute une balise de sélection aux entrées du script.
input.bool(defval, title, tooltip, inline, group, confirm)
Exemple
i_switch = input.bool(true, "On/Off")
plot(i_switch ? open : na)
Retourne une valeur Valeur de la variable
paramètre
defval
(const bool) Détermine la valeur par défaut de la variable d’entrée recommandée dans la page de balises de balises / balises d’entrée du script, à partir de laquelle l’utilisateur peut la modifier.title
(const string) Titre de la chaîne de caractères. Si ce n’est pas spécifié, le nom de la variable est utilisé comme titre de la chaîne de caractères. Si un titre est spécifié mais vide, le nom est une chaîne de caractères vide.tooltip
(const string) Cette chaîne est affichée à l’utilisateur lorsque la souris est suspendue sur l’icône de l’invite de l’outil.inline
(const string) Combine tous les appels d’entrée utilisant les mêmes paramètres dans une seule ligne. Il n’affiche pas les chaînes utilisées comme paramètres. Il est utilisé uniquement pour identifier les entrées appartenant à la même ligne.group
(const string) Création d’un titre au-dessus de toutes les entrées en utilisant la même chaîne de caractères composite. Cette chaîne de caractères est également utilisée comme texte de titre.confirm
(const bool) Si true, l’utilisateur est invité à confirmer les valeurs de saisie. La valeur par défaut est false.À noter Le résultat de la fonction input.bool doit toujours être attribué à une variable, comme dans l’exemple ci-dessus.
Voir aussi
input.int
input.float
input.string
input.timeframe
input.source
input.color
input
Ajouter l’input à la page de balises d’entrée des paramètres du script, qui vous permet de fournir des options de configuration aux utilisateurs du script. Cette fonction ajoute les champs d’entrée entiers à l’entrée 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))
Retourne une valeur Valeur de la variable
paramètre
defval
(const int) Détermine la valeur par défaut d’une variable d’entrée recommandée dans la page de balises de balises / balises d’entrée du script, à partir de laquelle l’utilisateur du script peut la modifier.options
Lorsque les paramètres sont utilisés ensemble, la valeur doit être l’une d’entre elles.title
(const string) Titre de la chaîne de caractères. Si ce n’est pas spécifié, le nom de la variable est utilisé comme titre de la chaîne de caractères. Si un titre est spécifié mais vide, le nom est une chaîne de caractères vide.minval
(const int) La valeur la plus petite possible de la variable d’entrée.maxval
(const int) La valeur maximale possible de la variable d’entrée.step
(const int) valeur de longueur d’étape utilisée pour augmenter/réduire l’entrée. Optionnel. La valeur par défaut est 1options
(tuple of const int values: [val1, val2, …]) Liste des options sélectionnées dans le menu déroulant, séparées par des virgules et encadrées par des parenthèses carrées:[val1, val2, …] ne peut pas être utilisé avec ce paramètreminval
、maxval
etstep
Paramètrestooltip
(const string) Cette chaîne est affichée à l’utilisateur lorsque la souris est suspendue sur l’icône de l’invite de l’outil.inline
(const string) Combine tous les appels d’entrée utilisant les mêmes paramètres dans une seule ligne. Il n’affiche pas les chaînes utilisées comme paramètres. Il est utilisé uniquement pour identifier les entrées appartenant à la même ligne.group
(const string) Création d’un titre au-dessus de toutes les entrées en utilisant la même chaîne de caractères composite. Cette chaîne de caractères est également utilisée comme texte de titre.confirm
(const bool) Si true, l’utilisateur est invité à confirmer les valeurs de saisie. La valeur par défaut est false.À noter Le résultat de la fonction input.int doit toujours être attribué à une variable, comme dans l’exemple ci-dessus.
Voir aussi
input.bool
input.float
input.string
input.timeframe
input.source
input.color
input
Ajouter l’input à la page de balises d’entrée des paramètres du script, qui vous permet d’offrir des options de configuration aux utilisateurs du script. Cette fonction ajoute le champ d’entrée des points flottants à l’entrée 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)
Retourne une valeur Valeur de la variable
paramètre
defval
(const int/float) Détermine la valeur par défaut d’une variable d’entrée recommandée dans la page de balises de paramétrage / balise d’entrée du script, à partir de laquelle l’utilisateur du script peut la modifier.options
Lorsque les paramètres sont utilisés ensemble, la valeur doit être l’une d’entre elles.title
(const string) Titre de la chaîne de caractères. Si ce n’est pas spécifié, le nom de la variable est utilisé comme titre de la chaîne de caractères. Si un titre est spécifié mais vide, le nom est une chaîne de caractères vide.minval
(const int/float) La valeur la plus petite possible de la variable d’entrée.maxval
(const int/float) La valeur la plus élevée possible pour une variable de saisie.step
(const int/float) valeur de longueur d’étape utilisée pour augmenter/réduire l’entrée. Optionnel. La valeur par défaut est 1options
(tuple of const int/float values: [val1, val2, …]) Liste des options sélectionnées dans le menu déroulant, séparées par des virgules et encadrées par des parenthèses carrées:[val1, val2, …] ne peut pas être utilisé avec ce paramètreminval
、maxval
etstep
Paramètrestooltip
(const string) Cette chaîne est affichée à l’utilisateur lorsque la souris est suspendue sur l’icône de l’invite de l’outil.