Nom de fichier:

Créé le: 2022-05-06 14:27:06, Mis à jour le: 2025-01-23 10:19:06
comments   18
hits   13760

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。

Methods

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.MethodsEnsuite, 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.avgIl 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.

Fonctions intégrées

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)             // 正确写法

timeframe

timeframe.in_seconds

Elle sera transmise àtimeframeLa 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 timeframeLe 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 (36512) jours d’un mois.

Voir aussi input.timeframe timeframe.period

ticker

ticker.heikinashi

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

request

request.data

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ètreattributeSé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ête

Si le message est erroné, vérifiez.request.dataSi 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

request.security

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

str

str.contains

Si voussourceLa chaîne contientstrLa 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 cassourceTrouver dans une chaîne de caractèresstr, alors c’est vrai, sinon c’est faux.

paramètre

  • source(series string) Chaîne de source
  • str(series string) La sous-chaîne à rechercher.

Voir aussi str.pos str.match

str.endswith

Si voussourceLes chaînes de caractèresstrLa 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 voussourceLes chaînes de caractèresstrLa sous-chaîne indiquée dans la ligne de fin est vraie ou fausse.

paramètre

  • source(series string) Chaîne de source
  • str(series string) La sous-chaîne à rechercher.

Voir aussi str.startswith

str.startswith

Si voussourceLes chaînes de caractèresstrLa 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 voussourceLes chaînes de caractèresstrLa 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 source
  • str(series string) La sous-chaîne à rechercher.

Voir aussi str.endswith

str.substring

Retourne une nouvelle chaîne, qui estsourceLes sous-chaînes de chaînes de caractères.begin_posLes caractères commencent à l’index spécifié et s’étendent àsourceLe “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).sourceLa 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

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.

str.format

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.

str.length

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 source

str.lower

Retourne 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 à convertir

Voir aussi str.upper

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 à convertir

Voir aussi str.lower

str.match

Si une correspondanceregexUne expression régulière renvoiesourceLa 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 sourceLa nouvelle sous-chaîne de chaîne de caractères, si elle correspond à unregexL’expression régulière est ‘na’

paramètre

  • source(series string) Chaîne de source
  • regex(series string) Expression régulière correspondant à cette chaîne de caractères。

À noter Fonction RenvoiesourceExpression régulière qui apparaît pour la première fois dans une chaîne de caractères: regexLes 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

str.pos

Le retour.sourcePremière apparition dans la chaînestrLa position de la chaîne de caractères, sinon retourne ‘na’。

str.pos(source, str)

Retourne une valeur strLa chaîne de caractèressourcePosition dans la chaîne de caractères.

paramètre

  • source(series string) Chaîne de source
  • str(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

str.replace

Renvoie une nouvelle chaîne de caractères dont la première occurrence est N+1targetChaînes de caractères et précédentstargetLa chaîne est remplacée parreplacementUne chaîne de caractères où N estoccurrenceN 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 source
  • target(series string) est remplacé par une chaîne
  • replacement(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

str.replace_all

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 source
  • target(series string) est remplacé par une chaîne
  • replacement(series string) Chaque fois que la chaîne cible apparaît, elle est remplacée par une chaîne

str.split

Divise 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 source
  • separator(series string) Une chaîne séparant chaque sous-chaîne.

str.tostring

str.tostring(value)
str.tostring(value, format)
str.tostring(value[])
str.tostring(value[], format)

Retourne une valeur valueLes chaînes de caractères des paramètres sont représentées sous la forme: Si vousvalueSi le paramètre est une chaîne de caractères, elle est renvoyée comme telle. QuandvaluePour 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。

color

color.new

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.

color.rgb

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 à 255
  • green(series int/float) Le vert. Les valeurs possibles sont de 0 à 255
  • blue(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.

runtime

runtime.debug

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.

runtime.log

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.

runtime.error

L’appel peut entraîner des erreurs de fonctionnement et entraîner des erreurs de connexion.messageLe message d’erreur indiqué dans le paramètre:

runtime.error(message)

paramètre message (series string) est un message d’erreur.

input

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 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:closehlc3Et 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

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

input.string

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.optionsLorsque 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

input.bool

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

input.int

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.optionsLorsque 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 1
  • options (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ètreminvalmaxvaletstepParamètres
  • 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.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

input.float

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.optionsLorsque 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 1
  • options (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ètreminvalmaxvaletstepParamètres
  • 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.