Les ressources ont été chargées... Je charge...

FMZ PINE Scénario Doc

Auteur:L'inventeur de la quantification - un petit rêve, Créé: 2022-04-28 16:05:05, Mis à jour: 2024-10-12 17:25:27

Modifier les valeurs des champs

type order
    float price
    float amount
    string symbol

if strategy.position_size == 0 and open > close
    strategy.entry("long", strategy.long, 1)
    
order1 = order.new(strategy.opentrades.entry_price(strategy.opentrades - 1), strategy.opentrades.size(strategy.opentrades - 1), syminfo.ticker)

if strategy.position_size != 0
    runtime.log(order1)
    order1.price := 999
    order1.amount := 100
    runtime.log(order1)
    runtime.error("stop")

La valeur d'un champ objet peut être modifiée en utilisant le:=opérateur de réaffectation.

Collection d'objets

L'exemple déclare un tableau vide qui contiendra des objets du type d'ordre défini par l'utilisateur:

type order
    float price
    float amount
    string symbol

arrOrder = array.new<order>()

order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")

array.push(arrOrder, order1)
array.push(arrOrder, order2)

runtime.log(arrOrder)
runtime.error("stop")

ou

type order
    float price
    float amount
    string symbol

var array<order> arrOrder = na
arrOrder := array.new<order>()

order1 = order.new(99, 1, "BTC_USDT")
order2 = order.new(100, 2, "ETH_USDT")

array.push(arrOrder, order1)
array.push(arrOrder, order2)

runtime.log(arrOrder)
runtime.error("stop")

Copie de l'objet

Dans Pine, les objets sont attribués par référence.

//@version=5
indicator("")
type pivotPoint
    int x
    float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivot1
pivot2.x := 2000
// Both plot the value 2000.
plot(pivot1.x)
plot(pivot2.x)

Dans l'exemple suivant, nous créons un objet pivot1 et définissons son champ x à 1000. Nous déclarons ensuite une variable pivot2 qui contient une référence à l'objet pivot1, de sorte que les deux pointent vers la même instance. Par conséquent, changer pivot2.x change également pivot1.x, car les deux se réfèrent au champ x du même objet.

Pour créer une copie qui est indépendante de l'objet d'origine, dans ce cas, nous pouvons utiliser la méthode de copie intégrée ((). Dans cet exemple, nous déclarons la variable pivot2 pour faire référence à l'instance copiée de l'objet pivot1. Maintenant, changer pivot2.x ne changera pas pivot1.x, car il se réfère au champ x d'un objet séparé:

//@version=5
indicator("")
type pivotPoint
    int x
    float y
pivot1 = pivotPoint.new()
pivot1.x := 1000
pivot2 = pivotPoint.copy(pivot1)
pivot2.x := 2000
// Plots 1000 and 2000.
plot(pivot1.x)
plot(pivot2.x)

Il convient de noter que la méthode de copie de TradingView est une copie superficielle. Si un objet a des types de champs spéciaux (array, etc.), ces champs dans la copie superficielle de l'objet pointeront vers la même instance que l'objet. La plateforme FMZ implémente directement la copie profonde, et aucun traitement supplémentaire n'est requis.

Copie en profondeur

//@version=5

indicator("test deepCopy")

type orderInfo
    float price
    float amount

type labelInfo
    orderInfo order
    string labelMsg

labelInfo1 = labelInfo.new(orderInfo.new(100, 0.1), "test labelInfo1")
labelInfo2 = labelInfo.copy(labelInfo1)

labelInfo1.labelMsg := "labelInfo1->2"    // Modify the base type field of labelInfo1 to see if it affects labelInfo2
labelInfo1.order.price := 999             // Modify the composite type field of labelInfo1 to see if it affects labelInfo2

runtime.log(labelInfo1)
runtime.log(labelInfo2)
runtime.error("stop")

Les résultats des tests montrent que labelInfo.copy(labelInfo1) est une copie profonde lorsqu'il est exécuté et que la modification de n'importe quel champ de labelInfo1 n'affectera pas labelInfo2.

Les méthodes

Les méthodes dans le langage Pine sont des fonctions spécialisées associées à une instance spécifique d'un type intégré ou défini par l'utilisateur. Dans la plupart des cas, elles sont essentiellement les mêmes que les fonctions régulières, mais fournissent une syntaxe plus courte et plus pratique. Les utilisateurs peuvent accéder aux méthodes directement sur des variables en utilisant la notation en points, tout comme pour accéder aux champs des objets Pine. Pine comprend des méthodes intégrées pour tous les types spéciaux, y compris les tableaux, les matrices, les cartes, les lignes, les lignes de remplissage, etc. Ces méthodes offrent aux utilisateurs un moyen plus concis d'appeler des programmes spécialisés de ces types dans des scripts.

Méthodes intégrées

Par exemple, un code de script comme ceci:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    array.push(sourceArray, sourceInput)
    array.shift(sourceArray)
    // Update the mean and standard deviaiton values.
    sampleMean := array.avg(sourceArray)
    sampleDev  := array.stdev(sourceArray) * multiplier

// Calculate bands.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Peut être réécrit équivalemment comme:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    sourceArray.push(sourceInput)
    sourceArray.shift()
    // Update the mean and standard deviaiton values.
    sampleMean := sourceArray.avg()
    sampleDev  := sourceArray.stdev() * multiplier

// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Vous pouvez voir que après PINE soutientMethods, le codearray.avg(sourceArray)peut être écrite sous forme de méthodes:sourceArray.avg()- Je ne sais pas. Notez que FMZ ne prend pas en charge les appels commearray.avg currently.

Méthodes définies par l'utilisateur

Pine permet aux utilisateurs de définir des méthodes personnalisées qui fonctionnent avec des objets de tout type intégré ou défini par l'utilisateur.

  1. Le mot clé méthode doit être inclus avant le nom de la fonction.
  2. Le type du premier paramètre de la méthode doit être déclaré explicitement car il représente le type d'objet auquel la méthode sera associée.

Par exemple, dans le code suivant, le code pour le calcul de l'indicateur Bollinger est encapsulé sous forme de méthode définie par l'utilisateur:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
var float        sampleMean  = na
var float        sampleDev   = na

// Identify if `n` bars have passed.
if bar_index % n == 0
    // Update the queue.
    sourceArray.push(sourceInput)
    sourceArray.shift()
    // Update the mean and standard deviaiton values.
    sampleMean := sourceArray.avg()
    sampleDev  := sourceArray.stdev() * multiplier

// Calculate band values.
float highBand = sampleMean + sampleDev
float lowBand  = sampleMean - sampleDev

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Modifié en:

//@version=5
indicator("Custom Sample BB", overlay = true)

float sourceInput  = input.source(close, "Source")
int   samplesInput = input.int(20, "Samples")
int   n            = input.int(10, "Bars")
float multiplier   = input.float(2.0, "StdDev")

var array<float> sourceArray = array.new<float>(samplesInput)
method maintainQueue(array<float> srcArray, float value, bool takeSample = true) =>
    if takeSample
        srcArray.push(value)
        srcArray.shift()
    srcArray

method calcBB(array<float> srcArray, float mult, bool calculate = true) =>
    var float mean = na
    var float dev  = na
    if calculate
        mean := srcArray.avg()
        dev  := srcArray.stdev() * mult
    [mean, mean + dev, mean - dev]

bool newSample = bar_index % n == 0

[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)

plot(sampleMean, "Basis", color.orange)
plot(highBand, "Upper", color.lime)
plot(lowBand, "Lower", color.red)

Vous pouvez voir que le premier paramètre dans la liste de paramètres des méthodes définies par l'utilisateur déclarées avec la méthode de mot clé: maintainQueue et calcBB est de typearray<float>, ce qui signifie que la méthode est une méthode d'une variable de typearray<float>, vous pouvez donc voir que le code suivant est appelé pour calculer l'indicateur de Bollinger.

[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)

Méthodes de surcharge

Les méthodes définies par l'utilisateur peuvent remplacer et surcharger les méthodes intégrées et les méthodes définies par l'utilisateur existantes avec le même identifiant. Cette fonctionnalité permet aux utilisateurs de définir plusieurs routines associées à différentes signatures d'arguments sous le même nom de méthode. À titre d'exemple simple, supposons que nous voulons définir une méthode pour identifier le type d'une variable. Puisque nous devons spécifier explicitement le type d'objet associé à une méthode définie par l'utilisateur, nous devons définir des surcharges pour chaque type que nous voulons qu'elle reconnaisse.

//@version=5
indicator("Type Inspection")

// @function   Identifies an object's type.
// @param this Object to inspect.
// @returns    (string) A string representation of the type.
method getType(int this) =>
    na(this) ? "int(na)" : "int"

method getType(float this) =>
    na(this) ? "float(na)" : "float"

method getType(bool this) =>
    na(this) ? "bool(na)" : "bool"

method getType(color this) =>
    na(this) ? "color(na)" : "color"

method getType(string this) =>
    na(this) ? "string(na)" : "string"

a = 1             // a.getType(): float
b = 1.0           // b.getType(): float
c = true          // c.getType(): bool
d = color.white   // d.getType(): string(na)
e = "1"           // e.getType(): string

runtime.log("a.getType():", a.getType())
runtime.log("b.getType():", b.getType())
runtime.log("c.getType():", c.getType())
runtime.log("d.getType():", d.getType())
runtime.log("e.getType():", e.getType())
runtime.error("stop")

Le type de base de chaque variable détermine quelle surcharge degetType()Sur la plateforme FMZ, comme la mise en œuvre sous-jacente des scripts PINE est Javascript, le type numérique sera jugé comme des données en virgule flottante (float).

Fonction intégrée

Lors de l'appel d'une fonction, vous pouvez passer des arguments. Vous pouvez attribuer des noms d'arguments pour attribuer des valeurs. Vous pouvez directement passer des variables dans les positions d'arguments correspondantes. L'utilisation mixte est également prise en charge. Par exemple:

plot(close, title="test plot")     // Pass the argument close directly; specify the argument title and assign the string "test plot"

Après avoir spécifié l'attribution du nom d'argument, vous ne pouvez plus passer directement la variable en tant qu'argument, et les arguments suivants doivent être écrits sous la forme d'attribution du nom d'argument.

// plot(close, title="test", color.red)    // Although the third argument of plot is the color value, but this will report an error
plot(close, title="test", color=color.red) // Correct writing
plot(close, "test", color.red)             // Correct writing

le délai

Temps.en_secondes

Convertir le temps écoulé entimeframel'argument en secondes.

timeframe.in_seconds(timeframe)

Exemple

// Get chart timeframe:
i_tf = input.timeframe("1D")

// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)

plot(tf)

RetoursUne représentation int du nombre de secondes dans une barre d'untimeframe.

Les arguments

  • timeframe(simple chaîne) Temps. optionnel. Le paramètre par défaut est timeframe.period.

Les commentairesPour letimeframeLa fonction >= 1M calcule le nombre de secondes en fonction des 30,4167 (365/12) jours du mois.

Voir aussi input.timeframe timeframe.period

le ticker

ticker.heikinashi

Crée un identifiant de ticker pour demander une valeur de représentation int moyenne lissée.

ticker.heikinashi(symbol)

Exemple

heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)

RetoursValeur de chaîne du code de stock qui peut être fourni à la fonction request.security.

Les arguments

  • symbol(simple chaîne) identifiant du code du produit.

Voir aussi syminfo.tickerid syminfo.ticker request.security

une demande

request.data

Demandez des données externes.

request.data(url, attribute)

Exemple

/*backtest
start: 2024-09-01 16:00:00
end: 2024-10-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

var chart_data = "https://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data"
spotPrice = request.data(chart_data, "$.spot_close_price")
futuresPrice = request.data(chart_data, "$.future_close_price")
diff = futuresPrice - spotPrice

plot(diff, "perpetual-spot difference")
plot(futuresPrice, "futures prices", overlay=true)
plot(spotPrice, "spot prices", overlay=true)

if diff > 80 and strategy.position_size >= 0
    runtime.log("diff > 80")
    strategy.entry("Enter Short", strategy.short)
if diff < 60 and strategy.position_size <= 0
    runtime.log("diff < 60")
    strategy.entry("Enter Short", strategy.long)

Valeur de retourL'argument attribut spécifie la série de données.

Les arguments

  • url(chaîne simple) L'URL de la source de données demandée et le format de données de la réponse de la source de données doivent satisfaire aux exigences (y compris au moins les attributs temps et données):{"data": [], "schema": ["time", "data"]}Vous pouvez vous référer au format de données dans l'exemple:

    {
        "data": [
            [1720051200000, "{\"spot_close_price\" : 57050.01, \"future_close_price\" : 57045.9}"],
            [1720137600000, "{\"spot_close_price\" : 56628.79, \"future_close_price\" : 56604.9}"],
            // ...
        ],
        "schema": ["time", "data"]
    }
    
  • attribute(simple string) spécifie le nom de l'attribut et renvoie les données requises. Par exemple:"$.spot_close_price", utiliser$.comme préfixe, et le nom de l'attribut est compatible avec l'attribut dans le champ de données dans les données dans la réponse lors de la demande de la source de données

Si une erreur s'affiche, vous devez vérifier si l'intervalle de temps demandé parrequest.dataest cohérent avec la plage de temps définie pour le backtest. Si aucune donnée ne peut être interrogée dans la série de temps du backtest, une erreur est signalée.

L'instruction SQL de requête de données-données dans cet exemple est:

WITH latest_data AS (
    SELECT 
        klines.spot_1d.Time AS time,
        CONCAT('{\"spot_close_price\" : ', klines.spot_1d.Close, ', \"future_close_price\" : ', klines.future_1d.Close, '}') AS data
    FROM 
        klines.spot_1d
    JOIN 
        klines.future_1d
    ON 
        klines.spot_1d.Time = klines.future_1d.Time
    WHERE
        klines.spot_1d.Symbol = 'btc_usdt'
    AND 
        klines.future_1d.Symbol = 'btc_usdt.swap'
    AND 
        klines.spot_1d.Exchange = 'Binance'
    AND 
        klines.future_1d.Exchange = 'Binance'
    ORDER BY 
        klines.spot_1d.Time DESC
    LIMIT 100
)
SELECT * FROM latest_data
ORDER BY time ASC;

Vous pouvez interroger et créer des liens de données sur leExploration des donnéesLa page de la plateforme FMZ, qui est lahttps://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/datautilisé dans l'exemple.

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)

RetoursSérie demandée

Les arguments

  • symbolUn symbole.
  • timeframeUne chaîne vide est interprétée comme la résolution actuelle du graphique.
  • expression(série int/float/bool/color) Une expression peut être calculée et renvoyée à partir de l'appel request.security.
  • gaps(barmerge_gaps) Stratégie de fusion pour les données demandées (les données demandées fusionnent automatiquement avec les données OHLC de la série principale). Valeur possible: barmerge.gaps_on, barmerge.gaps_off. barmerge.gaps_on - les données demandées sont fusionnées avec des lacunes possibles (pas de valeurs). barmerge.gaps_off - les données demandées sont fusionnées en continu sans lacunes, toutes les lacunes sont remplies avec les valeurs existantes précédentes les plus proches. Valeur par défaut est barmerge.gaps_off.
  • lookahead(barmerge_lookahead) Stratégie de fusion pour la position de données demandée. Valeur possible: barmerge.lookahead_on, barmerge.lookahead_off. Valeur par défaut est barmerge.lookahead_off à partir de la version 3. Notez que le comportement est le même en temps réel et ne diffère que sur l'historique.
  • ignore_invalid_symbol(const bool) Un argument facultatif. Détermine le comportement de la fonction si le symbole spécifié n'est pas trouvé: si false, le script s'arrête et renvoie une erreur d'exécution; si true, la fonction renvoie na et l'exécution se poursuit. La valeur par défaut est false.
  • currency(simple chaîne) Monnaie dans laquelle doivent être converties les valeurs liées à la monnaie du symbole (par exemple OHLC).expressionest ensuite calculé en fonction des valeurs converties. Les taux de conversion utilisés sont basés sur les taux quotidiens des paires FX_IDC de la journée précédente (par rapport à la barre où le calcul est effectué). Facultatif. Le paramètre par défaut est syminfo.currency. Les valeurs possibles: une chaîne de trois lettres avec le code de la devise au format ISO 4217 (par exemple USD) ou l'une des constantes de l'espace de noms de la devise.*, par exemple currency.USD.

Les commentairesLe code PineScript qui utilise cette fonction pourrait calculer différemment sur les données historiques et en temps réel. Si vous souhaitez spécifier des arguments supplémentaires pour le symbole demandé, par exemple session ou type de réglage, vous pouvez utiliser leticker.new() fonction. Il n'est pas possible de passer un spread à cette fonction en utilisant la variable ticker. Vous pouvez utiliser la variable ticker.new une variable ou une représentation en chaîne du ticker, par exemple AAPL+MSFT*TSLA. À l'heure actuelle, jusqu'à 40 appels request.security peuvent être présents dans un script. Veuillez noter que l'utilisation de cette variable/fonction peut entraîner la repeinture de l'indicateur.

Les valeurs admissibles de l'argument de résolution sont les suivantes: 1S, 5S, 15S, 30S - pour les intervalles de secondes (la résolution du graphique doit être inférieure ou égale à la résolution requise) de 1 à 1440 pour les minutes de 1D à 365D par jour de 1 W à 52 W pendant des semaines de 1M à 12M pendant des mois

Voir aussi syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

str

str.contains

Retourne vrai si lesourcela chaîne contient lestrsous-chaîne, faux sinon.

str.contains(source, str)

Exemple

// If the current chart is a continuous futures chart, e.g "BTC1!", then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)

RetoursC'est vrai sistra été trouvé dans lesourceLa chaîne, fausse sinon.

Les arguments

  • source(Série de chaîne) Chaîne de source.
  • strLa sous-chaîne à rechercher.

Voir aussi str.pos str.match

str.endswith

Retourne vrai si lesourcela chaîne se termine par la sous-chaîne spécifiée dansstrFaux, sinon.

str.endswith(source, str)

RetoursC'est vrai sisourcela chaîne se termine par la sous-chaîne spécifiée dansstrFaux, sinon.

Les arguments

  • source(Série de chaîne) Chaîne de source.
  • strLa sous-chaîne à rechercher.

Voir aussi str.startswith

str.startswith

Retourne vrai si lesourcela chaîne commence par la sous-chaîne spécifiée dansstrFaux, sinon.

str.startswith(source, str)

RetoursC'est vrai sisourcela chaîne commence par la sous-chaîne spécifiée dansstrFaux, sinon.

Les arguments

  • source(Série de chaîne) Chaîne de source.
  • strLa sous-chaîne à rechercher.

Voir aussi str.endswith

str.substring

Renvoie une nouvelle chaîne qui est une sous-chaîne de lasourceLa sous-chaîne commence par le caractère de l'index spécifié parbegin_poset s'étend jusqu'à end_pos - 1 dusource string.

str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)

Exemple

sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":")        // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
    runtime.log(tkr)

RetoursLa sous-chaîne extraite de la chaîne source.

Les arguments

  • source(chaîne de série) Chaîne de source à partir de laquelle extraire la sous-chaîne.
  • begin_pos(série int) La position initiale de la sous-chaîne extraite. Elle est inclusive (la sous-chaîne extraite comprend le caractère à cette position).
  • end_pos(série int) La position de fin. Elle est exclusive (la chaîne extraite n'inclut PAS le caractère de cette position).source string.

Les commentairesL'indexation des chaînes commence à 0 sibegin_posest égal àend_pos, la fonction renvoie une chaîne vide.

Voir aussi str.contains str.pos str.match

str.tonumber

str.tonumber(string)

RetoursUne version flottante de la chaîne si elle contient un nombre valide, sinon.

Les arguments

  • string(chaîne de série) Représentation en chaîne d'un int ou d'un float.

str.format

Converti la chaîne de formatage et les valeurs (s) en chaîne formatée. La chaîne de formatage peut contenir du texte littéral et un espace réservé entre crochets {} pour chaque valeur à formater. Chaque espace réservé se compose de l'index de l'argument requis (à partir de 0) qui le remplacera, et d'un spécificateur de format optionnel. L'index représente la position de cet argument dans la liste des arguments str.format.

str.format(formatString, arg0, arg1, ...)

Exemple

// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)

// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)

// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)

// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)

// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)

// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)

// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)

// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)

// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)

RetoursLa chaîne formatée.

Les arguments

  • formatString(Série de chaîne) Format de chaîne.
  • arg0, arg1, ...(série int/float/bool/string/na/int[]/float[]/bool[]/string[]) Valeur à mettre en forme.

Les commentairesLes crochets bouclés dans un motif non cité doivent être équilibrés. Par exemple, ab {0} de et ab } de sont des motifs valides, mais ab {0} de, ab } de et { ne le sont pas.

str.length

Renvoie un entier correspondant au nombre de caractères de cette chaîne.

str.length(string)

RetoursLe nombre de caractères dans la chaîne source.

Les arguments

  • string(Série de chaîne) Chaîne de source.

str.lower

Renvoie une nouvelle chaîne avec toutes les lettres converties en minuscules.

str.lower(source)

RetoursUne nouvelle chaîne avec toutes les lettres converties en minuscules.

Les arguments

  • source(chaîne de série) Chaîne à convertir.

Voir aussi str.upper

str.upper

Renvoie une nouvelle chaîne avec toutes les lettres converties en majuscules.

str.upper(source)

RetoursUne nouvelle chaîne avec toutes les lettres converties en majuscules.

Les arguments

  • source(chaîne de série) Chaîne à convertir.

Voir aussi str.lower

str.match

Renvoie la nouvelle sous-chaîne de lasourcechaîne si elle correspond à unregexl'expression régulière, ou autrement.

str.match(source, regex) 

Exemple

s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")

// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")

if barstate.islastconfirmedhistory
    runtime.log(tickerid) // "EXCHANGE_NAME:SYMBOL_NAME"

RetoursLa nouvelle sous-chaîne dusourcechaîne si elle correspond à unregexl'expression régulière, ou autrement.

Les arguments

  • source(Série de chaîne) Chaîne de source.
  • regex(chaîne de séries) L'expression régulière à laquelle cette chaîne doit correspondre.

Les commentairesLa fonction renvoie la première occurrence de l'expression régulière dans lesourceUne corde. Le signe dans leregexla chaîne doit être échappée avec une barre arrière supplémentaire, par exemple \d signifie expression régulière \d.

Voir aussi str.contains str.substring

str.pos

Retourne la position de la première occurrence de lastrla chaîne dans lesourceUne chaîne, sinon.

str.pos(source, str)

RetoursLa position de lastrla chaîne dans lesource string.

Les arguments

  • source(Série de chaîne) Chaîne de source.
  • strLa sous-chaîne à rechercher.

Les commentairesL'indexation des chaînes commence à 0.

Voir aussi str.contains str.match str.substring

str.replace

Renvoie une nouvelle chaîne avec la N + 1e occurrence de latargetchaîne et l'apparition précédente detargetchaîne remplacée par lereplacementchaîne, où N est spécifié dansoccurrence. N est l'indice de correspondance de la chaîne cible à remplacer dans la chaîne source.

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

Exemple

var source = "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"

// Replace first occurrence of "EXCHANGE1" with "EXCHANGE2" replacement string
var newSource = str.replace(source, "EXCHANGE1",  "EXCHANGE2", 0)

if barstate.islastconfirmedhistory
    // Display "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"
    runtime.log(newSource)

RetoursUne chaîne traitée.

Les arguments

  • source(Série de chaîne) Chaîne de source.
  • target(Série de chaîne) Chaîne à remplacer.
  • replacement(chaîne de série) Chaîne à insérer au lieu de la chaîne cible.
  • occurrence(série int) L'indice de correspondance de l'occurrence de la chaîne cible à remplacer dans la chaîne source Indexation commence à 0 pour la première correspondance.

Voir aussi str.replace_all str.match

Remplacer tout

Remplace chaque occurrence de la chaîne cible dans la chaîne source par la chaîne de remplacement.

str.replace_all(source, target, replacement)

RetoursUne chaîne traitée.

Les arguments

  • source(Série de chaîne) Chaîne de source.
  • target(Série de chaîne) Chaîne à remplacer.
  • replacement(chaîne de série) Chaîne à remplacer pour chaque occurrence de la chaîne cible.

str.split

Divise une chaîne en un tableau de sous-chaînes et renvoie son ID de tableau.

str.split(string, separator)

RetoursL'identifiant d'une série de chaînes.

Les arguments

  • string(Série de chaîne) Chaîne de source.
  • separatorLa chaîne qui sépare chaque sous-chaîne.

str.tostring

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

RetoursLa représentation en chaîne de lavalueJe vous en prie. Si levalueL'argument est une chaîne, il est retourné tel quel. Lorsque levalueest na, la fonction renvoie la chaîne NaN.

Les arguments

  • value(série int/float/bool/string/int[]/float[]/bool[]/string[]) Identifiant de valeur ou de tableau dont les éléments sont convertis en chaîne.
  • format(chaîne de série) Chaîne de format. Accepte ces constantes de format.* format.mintick, format.percent, format.volume. Facultatif. La valeur par défaut est #.##########.

Les commentairesLa mise en forme des valeurs flottantes arrondira également ces valeurs si nécessaire, par exemple str.tostring ((3.99, #) renverra 4. Pour afficher les zéros, utilisez 0 au lieu de #. Par exemple, #.000. Lorsque vous utilisez format.mintick, la valeur sera arrondi à la plus proche qui peut être divisé par syminfo.mintick sans le reste. Si l'argument x est une chaîne, la même valeur de chaîne sera renvoyée. Les arguments de type Bool renvoient true ou false. Lorsque x est na, la fonction renvoie NaN.

couleur

color.new

La couleur de la fonction applique la transparence spécifiée à la couleur donnée.

color.new(color, transp)

Exemple

plot(close, color=color.new(color.red, 50))

RetoursCouleur avec transparence spécifiée.

Les arguments

  • color(couleur de série)
  • transp(série int/float) Les valeurs possibles sont comprises entre 0 (non transparente) et 100 (invisible).

Les commentairesL'utilisation d'arguments qui ne sont pas des constantes (par exemple, simple, input ou series) aura un impact sur les couleurs affichées dans l'onglet Settings/Style du script.

color.rgb

Crée une nouvelle couleur avec transparence en utilisant le modèle de couleur RVB.

color.rgb(red, green, blue, transp)

Exemple

plot(close, color=color.rgb(255, 0, 0, 50))

RetoursCouleur avec transparence spécifiée.

Les arguments

  • red(série int/float) composante de couleur rouge. Les valeurs possibles sont de 0 à 255.
  • green(série int/float) composante de couleur verte. Les valeurs possibles sont de 0 à 255.
  • blue(série int/float) Composante de couleur bleue. Les valeurs possibles sont de 0 à 255.
  • transp(série int/float) Facultatif. Transparence des couleurs. Les valeurs possibles sont de 0 (opaque) à 100 (invisible). La valeur par défaut est 0.

Les commentairesL'utilisation d'arguments qui ne sont pas des constantes (par exemple, simple, input ou series) aura un impact sur les couleurs affichées dans l'onglet Settings/Style du script.

temps d'exécution

runtime.debug

Imprimez des informations sur les variables sur la console.

Fonctions spécifiques à la langue FMZ PINE,runtime.debug(value), avec seulement un argument.

runtime.log

Contenu de sortie dans le journal.

Fonctions spécifiques à la langue FMZ PINE,runtime.log(1, 2, 3, close, high, ...), vous pouvez passer plusieurs arguments.

runtime.error

Lorsqu'il est appelé, provoque une erreur d'exécution avec le message d'erreur spécifié dans lemessage argument.

runtime.error(message)

Les argumentsmessage (chaîne de séries) Message d'erreur.

l'entrée

l'entrée

Ajout d'une entrée à l'onglet Entrées des paramètres de votre script, ce qui vous permet de fournir des options de configuration aux utilisateurs de script. Cette fonction détecte automatiquement le type d'argument utilisé pour defval et utilise le widget d'entrée correspondant.

input(defval, title, tooltip, inline, group)
input(defval, title, inline, group, tooltip)

Exemple

i_switch = input(true, "On/Off")     // Set true, the default is checked.
plot(i_switch ? open : na)

i_len = input(7, "Length")
i_src = input(close, "Source")       // Drop-down box, select close by default.
plot(ta.sma(i_src, i_len))

i_col = input(color.red, "Plot Color")
plot(close, color=i_col)

i_text = input("Hello!", "Message")
runtime.log(i_text)

RetoursValeur de la variable d'entrée.

Les arguments

  • defval(const int/float/bool/string/color ou type source intégré) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet Settings/Inputs du script, à partir duquel les utilisateurs du script peuvent la modifier.close, hlc3, etc.
  • title(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.
  • tooltip(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.
  • inline(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.
  • group(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.

Les commentairesLe résultat de la fonction d'entrée doit toujours être attribué à une variable, voir les exemples ci-dessus.

Voir aussi input.bool input.color input.int input.float input.string input.timeframe input.source

input.source

Ajout d'une entrée à l'onglet Entrées des paramètres de votre script, ce qui vous permet de fournir des options de configuration aux utilisateurs de script. Cette fonction ajoute un menu déroulant qui permet à l'utilisateur de sélectionner une source pour le calcul, par exemple close, hl2, etc. Si le script ne comprend qu'un seul appel input.source(), l'utilisateur peut également sélectionner une sortie d'un autre indicateur sur son graphique comme source.

input.source(defval, title, tooltip, inline, group)

Exemple

i_src = input.source(close, "Source")
plot(i_src)

RetoursValeur de la variable d'entrée.

Les arguments

  • defval(série int/float) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet Settings/Inputs du script, à partir duquel l'utilisateur peut la modifier.
  • title(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.
  • tooltip(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.
  • inline(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.
  • group(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.

Les commentairesLe résultat de la fonction input.source doit toujours être attribué à une variable, voir les exemples ci-dessus.

Voir aussi input.bool input.int input.float input.string input.timeframe input.color input

input.string

Ajoute une entrée à l'onglet Entrées des paramètres du script, ce qui vous permet de fournir des options de configuration aux utilisateurs du script.

input.string(defval, title, options, tooltip, inline, group, confirm)

Exemple

i_text = input.string("Hello!", "Message")
runtime.log(i_text)

RetoursValeur de la variable d'entrée.

Les arguments

  • defval(const string) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet Settings/Inputs du script, à partir duquel l'utilisateur peut la modifier.optionsl'argument, la valeur doit être l'un d'entre eux.
  • title(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.
  • options(Liste des constantes: [...]) Une liste d'options à choisir.
  • tooltip(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.
  • inline(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.
  • group(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.
  • confirm(const bool) Si true, alors l'utilisateur sera invité à confirmer la valeur d'entrée avant que l'indicateur soit ajouté au graphique.

Les commentairesLe résultat de la fonction input.string doit toujours être affecté à une variable, voir les exemples ci-dessus.

Voir aussi input.bool input.int input.float input.timeframe input.source input.color input

input.bool

Ajout d'une entrée à l'onglet Entrées des paramètres du script, ce qui vous permet de fournir des options de configuration aux utilisateurs du script.

input.bool(defval, title, tooltip, inline, group, confirm)

Exemple

i_switch = input.bool(true, "On/Off")
plot(i_switch ? open : na)

RetoursValeur de la variable d'entrée.

Les arguments

  • defval(const bool) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet Settings/Inputs du script, à partir duquel l'utilisateur peut la modifier.
  • title(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.
  • tooltip(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.
  • inline(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.
  • group(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.
  • confirm(const bool) Si true, alors l'utilisateur sera invité à confirmer la valeur d'entrée avant que l'indicateur soit ajouté au graphique.

Les commentairesLe résultat de la fonction input.bool doit toujours être attribué à une variable, voir les exemples ci-dessus.

Voir aussi input.int input.float input.string input.timeframe input.source input.color input

input.int

Ajouter une entrée à l'onglet Entrées des paramètres du script, ce qui vous permet de fournir des options de configuration aux utilisateurs du script.

input.int(defval, title, minval, maxval, step, tooltip, inline, group, confirm) 
input.int(defval, title, options, tooltip, inline, group, confirm)

Exemple

i_len1 = input.int(10, "Length 1", minval=5, maxval=21, step=1)
plot(ta.sma(close, i_len1))

i_len2 = input.int(10, "Length 2", options=[5, 10, 21])
plot(ta.sma(close, i_len2))

RetoursValeur de la variable d'entrée.

Les arguments

  • defval(const int) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet Settings/Inputs du script, à partir duquel les utilisateurs du script peuvent la modifier.optionsl'argument, la valeur doit être l'un d'entre eux.
  • title(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.
  • minval(const int) Valeur minimale possible de la variable d'entrée.
  • maxval(const int) Valeur maximale possible de la variable d'entrée.
  • step(const int) Valeur d'étape utilisée pour augmenter/décrémenter l'entrée. Facultatif. Par défaut, 1.
  • options(tuple de valeurs int const: [val1, val2,...]) Une liste d'options à choisir dans un menu déroulant, séparées par des virgules et entre parenthèses carrées: [val1, val2,...].minval, maxvaletsteples arguments ne peuvent pas être utilisés.
  • tooltip(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.
  • inline(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.
  • group(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.
  • confirm(const bool) Si true, alors l'utilisateur sera invité à confirmer la valeur d'entrée avant que l'indicateur soit ajouté au graphique.

Les commentairesRésultat deinput.intLa fonction doit toujours être attribuée à une variable, voir les exemples ci-dessus.

Voir aussi input.bool input.float input.string input.timeframe input.source input.color input

input.float

Ajoute une entrée à l'onglet Entrées des paramètres du script, ce qui vous permet de fournir des options de configuration aux utilisateurs du script.

input.float(defval, title, minval, maxval, step, tooltip, inline, group, confirm)
input.float(defval, title, options, tooltip, inline, group, confirm)

Exemple

i_angle1 = input.float(0.5, "Sin Angle", minval=-3.14, maxval=3.14, step=0.02)
plot(math.sin(i_angle1) > 0 ? close : open, "sin", color=color.green)

i_angle2 = input.float(0, "Cos Angle", options=[-3.14, -1.57, 0, 1.57, 3.14])
plot(math.cos(i_angle2) > 0 ? close : open, "cos", color=color.red)

RetoursValeur de la variable d'entrée.

Les arguments

  • defval(const int/float) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet Settings/Inputs du script, à partir duquel les utilisateurs du script peuvent la modifier.optionsl'argument, la valeur doit être l'un d'entre eux.
  • title(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.
  • minval(const int/float) Valeur minimale possible de la variable d'entrée.
  • maxval(const int/float) Valeur maximale possible de la variable d'entrée.
  • step(const int/float) Valeur d'étape utilisée pour augmenter/décrémenter l'entrée. Facultatif. La valeur par défaut est 1.
  • options(tuple de valeurs const int/float: [val1, val2,...]) Une liste d'options à choisir dans un menu déroulant, séparées par des virgules et entre parenthèses carrées: [val1, val2,...].minval, maxvaletsteples arguments ne peuvent pas être utilisés.
  • tooltip(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.
  • inline(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.
  • group(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.
  • confirm(const bool) Si true, alors l'utilisateur sera invité à confirmer la valeur d'entrée avant que l'indicateur soit ajouté au graphique.

Les commentairesLe résultat de la fonction input.float doit toujours être attribué à une variable, voir les exemples ci-dessus.

Voir aussi input.bool input.int input.string input.timeframe input.source input.color input

input.color

Ajout d'une entrée à l'onglet Entrées des paramètres de votre script, ce qui vous permet de fournir des options de configuration aux utilisateurs de script.

input.color(defval, title, tooltip, inline, group, confirm) 

Exemple

i_col = input.color(color.red, "Plot Color")
plot(close, color=i_col)

RetoursValeur de la variable d'entrée.

Les arguments

  • defval(const color) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet Settings/Inputs du script, à partir duquel l'utilisateur peut la modifier.
  • title(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.
  • tooltip(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.
  • inline(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.
  • group(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.
  • confirm(const bool) Si true, alors l'utilisateur sera invité à confirmer la valeur d'entrée avant que l'indicateur soit ajouté au graphique.

Les commentairesLe résultat de la fonction input.color doit toujours être attribué à une variable, voir les exemples ci-dessus.

Voir aussi input.bool input.int input.float input.string input.timeframe input.source input

input.price

Ajout d'une entrée de prix à l'onglet Settings/Inputs du script.confirm = trueactive le mode d'entrée interactif où un prix est sélectionné en cliquant sur le graphique.

input.price(defval, title, tooltip, inline, group, confirm) 

Exemple

price1 = input.price(title="Date", defval=42)
plot(price1)

price2 = input.price(54, title="Date")
plot(price2)

RetoursValeur de la variable d'entrée.

Les arguments

  • defval(const int/float) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet Settings/Inputs du script, à partir duquel l'utilisateur peut la modifier.
  • title(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.
  • tooltip(const string) La chaîne qui sera affichée à l'utilisateur en faisant glisser le curseur sur l'icône de la pointe d'outil.
  • inline(const string) Combine tous les appels d'entrée en utilisant le même argument dans une ligne. La chaîne utilisée comme argument n'est pas affichée. Elle est seulement utilisée pour identifier les entrées appartenant à la même ligne.
  • group(const string) Crée un en-tête au-dessus de toutes les entrées en utilisant la même chaîne d'arguments de groupe. La chaîne est également utilisée comme texte de l'en-tête.
  • confirm(const bool) Si true, le mode d'entrée interactive est activé et la sélection est effectuée en cliquant sur le graphique lorsque l'indicateur est ajouté au graphique, ou en sélectionnant l'indicateur et en déplaçant la sélection après cela.

Les commentairesLors de l'utilisation du mode interactif, une entrée de temps peut être combinée avec une entrée de prix si les deux appels de fonction utilisent le même argument pour leurinline argument.

Voir aussi input.bool input.int input.float input.string input.resolution input.source input.color input

input.timeframe

Ajout d'une entrée à l'onglet Entrées des paramètres de votre script, ce qui vous permet de fournir des options de configuration aux utilisateurs du script. Cette fonction ajoute une liste déroulante qui permet à l'utilisateur de sélectionner un laps de temps spécifique via le sélecteur de laps de temps et le renvoie sous forme de chaîne. Le sélecteur inclut les bandes de temps personnalisées qu'un utilisateur peut avoir ajoutées en utilisant la liste déroulante de la chronologie du graphique.

input.timeframe(defval, title, options, tooltip, inline, group, confirm)

Exemple

i_res = input.timeframe('D', "Resolution", options=['D', 'W', 'M'])
s = request.security("syminfo.tickerid", i_res, close)
plot(s)

RetoursValeur de la variable d'entrée.

Les arguments

  • defval(const string) Détermine la valeur par défaut de la variable d'entrée proposée dans l'onglet Settings/Inputs du script, à partir duquel l'utilisateur peut la modifier.optionsl'argument, la valeur doit être l'un d'entre eux.
  • title(const string) Titre de l'entrée. Si elle n'est pas spécifiée, le nom de la variable est utilisé comme titre de l'entrée. Si le titre est spécifié, mais qu'il est vide, le nom sera une chaîne vide.
  • options(coucou)

Plus de

Les mendiantsPourquoi les stratégies de la place de la réplique de la stratégie de Pine ne peuvent pas être mises en œuvre

L'inventeur de la quantification - un petit rêveBien, nous allons vérifier.

Les mendiantsLe Traqueur de tendances optimisé de Zhang

L'inventeur de la quantification - un petit rêveBonjour, quelle est la stratégie spécifique?