Sig hej til Pine Script® v5 – Pine Script®
11 mins read

Sig hej til Pine Script® v5 – Pine Script®


I dag dimitterer Pine til v5! Den nye version af vores indikator- og strategiprogrammeringssprog bringer et væld af spændende nye funktioner og forbedringer. Pine er nu mere kraftfuld end nogensinde, og ændringer i v5 vil hjælpe os med at tage sproget til nye niveauer. Dette indlæg introducerer blot nogle få af de seneste tilgængelige funktioner; sørg for at læse vores Udgivelses noter og Migrationsvejledning.

v4 til v5 konverter

Eksisterende Pine-scripts, der bruger tidligere versioner af Pine, vil fortsætte med at køre uændret, men vi har leveret et konverteringsværktøj i Pine Editor for at hjælpe kodere med at konvertere deres v4-scripts til v5. Fremtidige forbedringer til Pine vil udelukkende blive udrullet til v5, så vi anbefaler at konvertere dine indikatorer og strategier, hvis du ønsker at drage fordel af de nye funktioner. Konverteringsværktøjet v4 til v5 er tilgængeligt, når et v4-script er indlæst i editoren fra Mere Drop down menu:

Bemærk, at ikke al v4-kode kan konverteres automatisk. Hvis du støder på konverteringsproblemer eller foretrækker at konvertere dine scripts manuelt, kan vores Migrationsvejledning dokumentere alle ændringerne mellem v4 og v5 vil guide dig.

Biblioteker

En vigtig tilføjelse til Pine, der følger med v5, er biblioteker. Biblioteker er en ny type publikation, der giver dig mulighed for at oprette brugerdefinerede funktioner, der skal genbruges i andre scripts. Når først et bibliotek er udgivet, kan andre scripts (det være sig indikatorer, strategier eller endda andre biblioteker) importere det og bruge dets funktioner. Du kan bruge biblioteker til at inkludere komplekse algoritmer eller ofte brugte funktioner, så du eller hele Pine-fællesskabet nemt kan genbruge dem.

For at begynde at arbejde med biblioteker, se vores Brugermanual side om biblioteker. I slutningen af ​​dette indlæg finder du bibliotekseksempler udgivet af medlemmer af vores PineCoders-team. Du kan se udgivne biblioteker fra script feed her.

Standardværdier for brugerdefinerede funktioner

En forbedring, der går hånd i hånd med biblioteker: Der kan defineres en standardværdi for parametre i brugerdefinerede funktioner, hvilket reelt gør dem valgfrie. I eksemplet nedenfor erklærer vi en brugerdefineret funktion customPow() der hæver grundlag til magten af eksp. Hvis eksp er ikke angivet når funktionen kaldes, 2 bruges:

//@version=5
indicator("")
customPow(base, exp = 2) =>
    result = 1
    for i = 1 to exp
        result *= base
plot(customPow(11)) // 11^2
plot(customPow(11, 4)) // 11^4

Kontakt

Den nye kontakt statement er et twist på det velkendte hvis udmelding. Hvis du nogensinde har været nødt til at skabe et stort træ af hvis ellers udsagn, vil du sætte pris på, hvor meget mere praktisk det er at opnå det ønskede resultat med kontakt. Du kan lære mere om det i vores Referencemanual. Se det i aktion i koden nedenfor. Det er vores indbyggede Gennemsnitligt sandt område indikator, som nu bruger en kontakt erklæring for at give forskellige udjævningsalgoritmer i sine beregninger:

//@version=5
indicator(title="Average True Range", shorttitle="ATR", timeframe="")
lengthInput = input.int(title="Length", defval=14, minval=1)
smoothingInput = input.string(title="Smoothing", defval="RMA", options = ["RMA", "SMA", "EMA", "WMA"])

maFunction(source, length) =>
    switch smoothingInput
        "RMA" => ta.rma(source, length)
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        => ta.wma(source, length)

plot(maFunction(ta.tr(true), lengthInput), title = "ATR", color=#B71C1C)

Tegnesamlinger

En stor forbedring af livskvaliteten for at arbejde med fyrretegninger: det nye linje.alle, label.all, box.allog tabel.alle indbyggede array-variabler indeholder altid ID’erne for alle tegninger af den angivne type tegnet af dit script.

Du kan f.eks. bruge det til at trimme antallet af tegninger, der vises på diagrammet, baseret på en brugerdefineret værdi. I scriptet nedenfor tegner vi en streg på hver ny daglig åben (op til en grænse på ~50, baseret på standardlinjegrænsen for scriptet). Vi kontrollerer derefter, om antallet af tilladte linjer, selvom scriptets input er overskredet, og sletter den ældste linje, hvis det er tilfældet:

//@version=5
indicator("Daily Open", overlay = true)

qtyOfLinesInput = input.int(10, "Draw only last n lines", minval = 0, maxval = 50)

if ta.change(time("1D"))
    line.new(bar_index, open, bar_index + 1, open, extend = extend.right)
    if array.size(line.all) > qtyOfLinesInput
        line.delete(array.get(line.all, 0))

Mens

En anden længe ventet Pine-funktion, der kommer med v5, er mens sløjfer. Det mens sætning opretter en loop, der stopper, når betingelsen er falsk eller en pause kommandoen bruges i løkken.

Som et eksempel er her en indikator, der beregner forskellen mellem den gennemsnitlige afstand, vi skal se tilbage for at finde op og ned volumen svarende til det samlede volumen af ​​de sidste n søjler. Jo længere vi skal se tilbage for at finde op eller ned volumen, jo mere bearish eller bullish er dens værdi:

//@version=5
var int MAX_BARS_BACK = 500
indicator("Volume bias", max_bars_back = MAX_BARS_BACK)

int lookBackInput = input.int(20, "Volume Look Back (bars)", minval = 2, maxval = int(MAX_BARS_BACK / 4))

// Stop the script if the chart does not contain volume data.
bool noVol = na(volume) and nz(math.sum(nz(volume), 200) == 0, true)
if noVol
    runtime.error("No volume data.")

volumeBias(lookBack, maxLookBack) =>
    bool  barUp = ta.rising(close, 1)
    bool  barDn = ta.falling(close, 1)
    float upVolume = 0.
    float dnVolume = 0.
    float avgVolume = math.sum(nz(volume), lookBack)
    int[] upBarNos = array.new_int(0)
    int[] dnBarNos = array.new_int(0)
    int   bar = 1
    bool  volumeFound = false
    while (not volumeFound) and bar < maxLookBack
        if barUp[bar] and upVolume < avgVolume
            upVolume += nz(volume[bar])
            array.push(upBarNos, bar)
        else if barDn[bar] and dnVolume < avgVolume
            dnVolume += nz(volume[bar])
            array.push(dnBarNos, bar)
        bar += 1
        volumeFound := upVolume >= avgVolume and dnVolume >= avgVolume
    float volumeBias = bar >= maxLookBack ? na : array.avg(dnBarNos) - array.avg(upBarNos)

float bias = volumeBias(lookBackInput, MAX_BARS_BACK)
plot(bias, "Volume Bias", bias > 0 ? color.lime : color.fuchsia)
hline(0)

Manuskriptet er mens loop udføres, indtil den nødvendige volumen er fundet i både op- og ned-volumen, og vi har ikke kigget tilbage forbi det maksimalt tilladte antal streger. Scriptet viser også en anden funktion tilføjet til Pine v5: runtime.error().

runtime.error()

Det runtime.error() funktion gør det nu muligt at standse udførelsen af ​​et script og vise en fejlmeddelelse på enhver betingelse, du kan definere i Pine. Dette vil være praktisk for scriptskabere, der ønsker at forhindre brugere i at bruge deres indikatorer forkert. Det kan også bruges som et uortodoks debugging-værktøj til at standse eksekvering under en loop eller inde fra en funktion, for eksempel.

For at bruge den nye funktion skal du blot ringe til runtime.error() fungere, når dine betingelser er opfyldt. Når det udføres, stopper det scriptet og viser det velkendte udråbstegn ved siden af ​​indikatorens navn. Når brugere klikker på udråbstegnsikonet, vises den besked, du brugte i funktionsopkaldet.

Koden nedenfor er en barebones VWAP indikator med to brugerdefinerede fejl. Den første vises, når symbolet ikke har nogen volumendata: VWAP beregnes ud fra volumen, så hvis der ikke er volumen, kan scriptet ikke fungere. Den anden vises, når tidsrammen på diagrammet er 1D eller højere. Grundlæggende VWAP beregninger akkumulerer volumenvægtede glidende gennemsnitsdata på hver ny søjle og nulstilles ved starten af ​​en ny dag, så indikatoren er kun nyttig på intradag tidsrammer.

//@version=5
indicator("VWAP with custom errors")
if na(volume) // Will be true on symbols with no volume data e.g. TVC:SPX
    runtime.error("There is no volume data for this symbol.")
else if timeframe.isdwm // Will be true on 1D and higher timeframes
    runtime.error("Session-based VWAP does not show meaningful data on timeframes >= 1D.
     Please switch to a lower timeframe.")
plot(ta.vwap)

Nye strategiparametre

Gode ​​nyheder for strategikodere! Vi har tilføjet en hel masse nye variabler og funktioner, der giver dig synlighed på handelsejendomme, statistikker og metrikker. Deres værdier opdateres, efterhånden som mægleremulatoren udfører dine ordrer, så du kan følge værdierne, efterhånden som din strategi skrider frem.

Klik her for at se Pine Reference Manual for detaljer om hver enkelt

strategy.closedtrades.entry_price() / strategy.opentrades.entry_price()

strategy.closedtrades.entry_bar_index() / strategy.opentrades.entry_bar_index()

strategy.closedtrades.entry_time() / strategy.opentrades.entry_time()

strategy.closedtrades.size() / strategy.opentrades.size()

strategy.closedtrades.profit() / strategy.opentrades.profit()

strategy.closedtrades.commission() / strategy.opentrades.commission()

strategy.closedtrades.max_runup() / strategy.opentrades.max_runup()

strategy.closedtrades.max_drawdown() / strategy.opentrades.max_drawdown()

strategy.closedtrades.exit_price()

strategy.closedtrades.exit_bar_index()

strategy.closedtrades.exit_time()

strategy.convert_to_account()

strategy.convert_to_symbol()

strategi.konto_valuta

Nye navnerum

Vores fællesskab af Pine-kodere fortæller os, at de sætter pris på den hidtil usete hastighed af tilføjelser, vi har lavet til Pine i de sidste par år, og vi har til hensigt at fastholde det samme tempo i fremtiden. Dette skaber dog en konstant strøm af nye Pine-funktioner og indbyggede variable. For at understøtte denne vanvittige vækst var vi nødt til bedre at organisere de ~600 nuværende navne, der bruges på sproget. Vi gjorde dette ved at tilføje nye navnerum for at gruppere funktioner på måder, der bedre afspejler deres brug. Mange funktionsparameternavne blev også omdøbt for at gøre dem nemmere at forstå.

Et eksempel på et nyt navneområde er ta., som nu omfatter alle variabler og funktioner relateret til teknisk analyse. Dette gør det nemmere for dig at gennemse referencemanualen og finde alle de variable og funktioner, der returnerer værdierne for almindelige indikatorer. Derfor, sma() er nu ta.sma(). Det er ikke nødvendigt at huske de nye navnerum; hvis du skriver det ældre navn på en funktion uden dens navneområde i editoren og trykker på Autofuldførelse genvejstast (Ctrl + Mellemrum eller Cmd + Mellemrum på MacOS), vises en popup, der viser matchende forslag:

Det samme gælder, når du søger i referencemanualen; Hvis du indtaster et velkendt funktionsnavn uden dets navneområde, vises dets nye navn. Du kan se den komplette liste over ændringer til v5 i vores Migrationsvejledning.

Udgivet Libraries

Følgende publikationer er eksempler på biblioteker udgivet på TradingView af PineCoders, som hjælper os med at teste nye Pine-funktioner:

ColorScheme fra RicardoSantos

Matrix_Functions_Lib_JD af Duyck

Enchanced_ta af HeWhoMustNotBeNamed

Vi håber, at du finder de nye funktioner nyttige. Og fortsæt gerne med at give os feedback og forslag – vi bygger TradingView til dig, og vi er altid ivrige efter at vide, hvad du synes om vores platformopdateringer.

Leave a Reply

Your email address will not be published. Required fields are marked *