Wir programmieren einen Taschenrechner- Arithmetische OperatorenThema des heutigen Videos sind die arithmetischen Operatoren in Pine Script. Um gleichzeitig auch vertrauter mit der Programmierung zu werden, erstellen wir heute einen einfachen Taschenrechner mit Pine Script. Du wirst erkennen, wie schnell wir mit Pine Script zu sichtbaren Ergebnissen kommen ohne viele Zeilen Code schreiben zu müssen.
Hier der Skript-Code aus unserem Video:
Skript Code
// SCHRITT 1: VERSION UND SKRIPT-ART FESTLEGEN {
// --- über den Versionsaufruf in Zeile 6 teilen wir dem Compiler mit, dass wir mit der Version 5 von Pine Script arbeiten wollen
// --- Durch den indicator() Aufruf ist klar, wir programmieren einen Indikator
// --- Mit overlay = true legen wir fest, dass unser Ergebnis auf dem Chart ausgegeben werden soll
//@version=5
indicator("Taschenrechner", overlay = true)
//}
// SCHRITT 2: DEKLARATION DER KONSTANTEN {
// --- Wir deklarieren Konstanten mit unseren möglichen Rechenmethoden
METHOD_1 = "+ (Addition)"
METHOD_2 = "- (Subtraktion)"
METHOD_3 = "* (Multiplikation)"
METHOD_4 = "/ (Division)"
METHOD_5 = "% (Modulo/ Restwert nach Division)"
//}
// SCHRITT 3: BENUTZEREINGABEN {
// --- Hier legen wir ein Auswahlfeld an, in welchem der Benutzer die gewünschte Rechenart auswählt.
// --- Zur Auswahl stehen unsere oben deklarierten Rechenmethoden
i_calcType = input.string(METHOD_1, title = "Rechenart", options = )
// --- Wir legen 2 weitere Eingabefelder an, damit der Benutzer seine beiden Werte für die Berechnung eingeben kann
i_value1 = input.float(0, title = "Wert 1")
i_value2 = input.float(0, title = "Wert 2")
//}
// SCHRITT 4: SWITCH STATEMENT {
// --- Hier wird geprüft welche Berechnung aufgrund der Benutzereingaben erfolgen muss
// --- Die Berechnung wird durchgeführt
result = switch i_calcType
METHOD_1 => i_value1 + i_value2
METHOD_2 => i_value1 - i_value2
METHOD_3 => i_value1 * i_value2
METHOD_4 => i_value1 / i_value2
=> i_value1 % i_value2
//}
// SCHRITT 5: CHARTAUSGABE {
// --- Das Ergebnis wird auf dem Chart ausgegeben
// --- Wir verwenden hierfür tables, eine Art Tabelle auf dem Chart
// --- jede Zelle muss einzeln ausgewählt und befüllt werden
var resultDisplay = table.new(position = position.middle_center, columns = 2, rows = 4, bgcolor = color.silver, border_color = color.black, border_width = 1, frame_color = color.black, frame_width = 1)
if barstate.islast
table.cell(table_id = resultDisplay, column = 0, row = 0, text = "Rechenmethode:", text_size = size.huge)
table.cell(table_id = resultDisplay, column = 1, row = 0, text = i_calcType, text_size = size.huge)
table.cell(table_id = resultDisplay, column = 0, row = 1, text = "Wert 1:", text_size = size.huge)
table.cell(table_id = resultDisplay, column = 1, row = 1, text = str.tostring(i_value1), text_size = size.huge)
table.cell(table_id = resultDisplay, column = 0, row = 2, text = "Wert 2:", text_size = size.huge)
table.cell(table_id = resultDisplay, column = 1, row = 2, text = str.tostring(i_value2), text_size = size.huge)
table.cell(table_id = resultDisplay, column = 0, row = 3, text = "Ergebnis:", text_size = size.huge)
table.cell(table_id = resultDisplay, column = 1, row = 3, text = str.tostring(result), text_size = size.huge)
//}
Falls du weitere Fragen rund um TradingView oder Pine Script™ hast, schreibe es gerne in die Kommentare.
Dein Steven
Pinescript
PineScript Guide 6 - bgcolor() und barcolor()Hallo Scripter,
zuletzt haben wir uns den ersten Teil der visuellen Komponenten - plot(), hline() und fill() - angeschaut. Heute geht es weiter mit den Funktionen bgcolor() und barcolor().
█ Was schauen wir uns in diesem Video an?
In diesem Video beschäftigen wir uns mit den Funktionen "bgcolor()" und "barcolor()".
█ Was ist ist die "bgcolor()"-Funktion?
Ihr habt bestimmt schon einmal Indikatoren gesehen, welche den Hintergrund des Charts einfärben. Um das zu erreichen gibt es verschiedene Wege. Der einfachste ist die Funktion "bgcolor()" zu nutzen, welche als primären Parameter eine Farbe verwendet. Erweitert um den ternären Operator "? :" lässt sich der Hintergrund entsprechend unserer Bedingungen einfärben.
Im folgenden Beispiel färben wir den Hintergrund blau, wenn der Schlusskurs größer ist als der Eröffnungskurs und rot, wenn das Gegenteil der Fall ist.
bgcolor(close > open ? color.blue : color.yellow)
Wir verwenden im Beispiel den ternären Operator, welche wie folgt zu lesen ist:
WENN ? DANN : SONST
█ Was ist ist die "barcolor()"-Funktion?
Ähnlich wie bei der "bgcolor()"-Funktion lassen sich auch mit der "barcolor()"-Funktion Bestandteile des Charts einfärben. In diesem Fall färben wir den Körper der Kerze ein. Die Logik ist identisch, als primären Parameter verwenden wir eine Farbe.
barcolor(close > open ? color.blue : color.yellow)
█ Übung 6
Färbe den Charts lila ein, wenn der Preis den gleitenden Durchschnitt (SMA 20) nach oben kreuzt. Färbe die Kerze gelb, wenn der Preis den gleitenden Durchschnitt (SMA 20) nach unten kreuzt.
█ Lösung Übung 5
Übung 5: Berechne zwei gleitende Durchschnitte ( SMA 10 und SMA 20) und fülle den Bereich zwischen beiden Durchschnitten rot, wenn der SMA10 größer ist als der SMA20 und grün, wenn das Gegenteil der Fall ist.
//@version=5
indicator("Übung 5", overlay=true)
i_len1 = input.int(10, "SMA Length 1")
i_len2 = input.int(20, "SMA Length 2")
sma1 = ta.sma(close, i_len1)
sma2 = ta.sma(close, i_len2)
a = plot(sma1, "SMA 1", color=color.new(color.blue, 100))
b = plot(sma2, "SMA 2", color=color.new(color.blue, 100))
fill(a, b, color= sma1 > sma2 ? color.red : color.green)
PineScript Guide 5 - plot(), hline() und fill()Hallo Scripter,
zuletzt haben wir uns mit den Schlüsselwörtern "var" und "varip", sowie den einfachen Datentypen beschäftigt. Wir haben also ein Grundverständnis für unsere ersten Gehversuche im PineScript erhalten und können uns den einfachen visuellen Komponenten widmen.
█ Was schauen wir uns in diesem Video an?
In diesem Video beschäftigen wir uns mit den Funktionen "plot()", "hline()" und "fill()" welche wir zur Darstellung unserer berechneten Werte nutzen können.
█ Was ist ist die "plot()"-Funktion?
Die plot()-Funktion ist eine der am meistgenutzten Funktionen in PineScript. Sie wird dazu verwendet im PineScript kalkulierte Werte grafisch darzustellen. Neben Linien können das Histograme, Columns, Areas oder einfache Symbole sein.
Die plot()-Funktion wird immer im global scope des Scripts angelegt, was dazu führt, dass sie mit jedem neuen Preisupdate ausgeführt wird. Weiterhin kann die plot()-Funktion zur Erstellung von fills() genutzt werden. (siehe unten)
█ Was ist ist die "hline()"-Funktion?
Die hline()-Funktion ermöglicht es einfache horizontale Level auf dem Chart anzuzeigen. Auch die hline()-Funktion kann zur Erstellung von fills() genutzt werden.
█ Was ist ist die "fill()"-Funktion?
Die "fill()"-Funktion lässt uns den Bereich zwischen zwei plots oder zwei hlines farbig ausfüllen. Ein gutes Beispiel hierfür sind die Bollinger Bänder, bei denen der Bereich zwischen oberem und unterem Band eingefärbt wird.
█ Übung 5
Berechne zwei gleitende Durchschnitte (SMA 10 und SMA 20) und fülle den Bereich zwischen beiden Durchschnitten rot, wenn der SMA10 größer ist als der SMA20 und grün, wenn das Gegenteil der Fall ist.
█ Lösung Übung 4
Übung 3: Erstelle ein Skript, das grüne Kerzen zählt, sofern die beiden vorherigen Kerzen rot waren. Der Wert soll sich stetig erhöhen (persistieren) und die Ausgabe soll eine blaue Linie sein.
//@version=5
indicator("Übung 4")
grueneKerze = close > open
roteKerze = close < open
var int zaehler = 0
if grueneKerze and roteKerze and roteKerze
zaehler += 1
plot(zaehler, "Zähler", color.blue)
Skriptausführung in Pine Script™In diesem kurzen Video beleuchten wir die Hintergründe der technischen Skriptausführung in Pine Script™.
Was passiert wenn wir unseren im Pine-Editor geschriebenen Code ausführen lassen und was gibt es zu beachten?
Dieses Grundlagenvideo soll dir dabei helfen nachvollziehen zu können, wie dein Skript ausgeführt wird.
PineScript Guide 4 - var und varipHallo Scripter,
im vorherigen Video haben wir uns mit den unterschiedlichen einfachen Datentypen auseinandergesetzt. Bevor wir nun mit komplexeren Datentypen weiter machen, streuen wir noch kurz das Thema "var und varip" ein, da es für die Variablendeklaration wichtig ist.
█ Was schauen wir uns in diesem Video an?
Dieses Video soll dir zeigen was die Schlüsselwörter var und varip bezwecken und wie wir sie bei der Variablendeklaration einsetzen können.
█ Was ist das Schlüsselwort var?
Variablen werden in PineScript mit der Angabe eines Datentyps und eines Variablennamen deklariert. PineScript wird bei einer solchen Deklaration den Wert der Variablen mit jeder neuen Kerze auf den Ursprungswert zurücksetzen. Die folgende Variable „counter“ erhält mit jeder neuen Kerze den Wert 0 und erhöht diesen dann, sofern es sich um eine grüne Kerze handelt. Sobald eine neue Kerze erscheint, wird der Wert wieder auf 0 gesetzt.
int counter = 0
if close > open
counter += 1
Fügen wir hingegen das Schlüsselwort „var“ hinzu, dann persistiert der Wert der „counter“ Variable und sie wird nicht auf 0 zurückgesetzt. Wir zählen somit alle grünen Kerzen im Chart.
var int counter = 0
if close > open
counter += 1
Das Schlüsselwort „var“ bietet sich somit an, wenn Werte zwischen verschiedenen Kerzen übernommen werden sollen. Ein gutes Beispiel hierfür ist ein Schalter, der an- und ausgeschaltet werden kann. Wir definieren eine Variable „tradeErlaubt“ und schalten diese an oder aus, je nachdem welche Bedingung im Skript eintritt.
var bool tradeErlaubt = false
movingAverageCrossover = ta.crossover(close, ta.sma(close, 50))
movingAverageCrossunder = ta.crossunder(close, ta.sma(close, 50))
if movingAverageCrossover
tradeErlaubt := true
else if movingAverageCrossunder
tradeErlaubt := false
if tradeErlaubt
// hier folgt der Code, der nur ausgeführt wird, wenn „tradeElaubt“ wahr ist
█ Was ist das Schlüsselwort varip?
Ähnlich wie das var Schlüsselwort sorgt auch das varip Schlüsselwort (var intrabar persist) dafür, dass Werte persistieren. Während eine mit „var“ deklarierte Variable immer nur einen Wert je Kerze übernimmt, kann eine Variable, die mit „varip“ deklariert wurde, auch intrabar Aktualisierungen abspeichern.
Wir könnten zum Beispiel je neuer Preisdaten einen Zähler aufaddieren, um die Preisbewegungen innerhalb einer Kerze zu zählen. Varip funktioniert nur mit aktuellen Kerzen, die Live-Daten erhalten. Für historische Kerzen, wird der Wert für eine „varip“ Variable anhand der OHLC-Daten (Open, High, Low, Close) berechnet, also nur einmal.
Zur Verdeutlichung kannst du dir das nachfolgende Skript in deinem Chart anschauen. Während anfänglich beide Zähler den exakt gleichen Wert ausgeben, da varip nur einen Preisdatensatz je historischer Kerze erhält, ändern sich die beiden Kurven sobald es neue Live-Daten gibt. Varip zählt ab jetzt jede Preisbewegung, während var maximal nur einmal je Kerze hochzählt.
//@version=5
indicator("Var vs. Varip")
varip int counter = 0
if close > open
counter += 1
var int counter2 = 0
if close > open
counter2 += 1
plot(counter, "Varip", color.blue)
plot(counter2, "Var", color.red)
█ Übung 4
Erstelle ein Skript, das grüne Kerzen zählt, sofern die beiden vorherigen Kerzen rot waren. Der Wert soll sich stetig erhöhen (persistieren) und die Ausgabe soll eine blaue Linie sein.
█ Lösung Übung 3
Übung 3: Erstelle ein PineScript, dass einen Moving Averages berechnet, bei dem sich der Parameter für die Periode des Moving Average aus einem „Input“, welchen der Benutzer selber festlegen kann, ergibt. Der Moving Average soll grün dargestellt werden.
//@version=5
indicator("Übung 3", overlay=true)
i_length = input.int(20, "MA Länge")
ma = ta.sma(close, i_length)
plot(ma, "MA", color.green)
Edit: Ändert bitte im letzten Code Beispiel die MA Zeile in (Das Beschreibungsfeld der Idee zerlegt leider die richtige Syntax): ma = ta.sma(close, i_length)
Erste Schritte in Pine Script™In diesem Video schauen wir uns an was Pine Script überhaupt ist und wie wir im Pine-Editor arbeiten.
Pine Script ist eine Skriptsprache für TradingView und wird zur Programmierung von Indikatoren oder Strategie-Skripten verwendet.
Bereits mit wenigen Zeilen Code lassen sich schnell erste Ergebnisse sehen, was diese Sprache sehr Anfängerfreundlich macht.
PineScript Guide 2 - Ausführungsmodell und ZeitreiheHallo Trader,
willkommen zum zweiten Teil des "PineScript für Einsteiger"-Guide.
█ Worum geht es in dieser Tutorial-Serie?
Dieser Kurs soll dir einen einfachen Einstieg in die PineScript Programmierung ermöglichen. Es ist egal, ob du vorher schon einmal programmiert hast oder gerade mit dem Programmieren anfängst. Der Kurs wird dir die Grundlagen der PineScript Programmierung erklären und dir mit einfachen Beispielen den Einstieg erleichtern.
█ Was schauen wir uns in diesem Video an?
Dieses Video soll dir zeigen wie PineScript ausgeführt wird und wie sich die Daten in PineScript zusammensetzen bzw. aufgebaut sind. Daher schauen wir uns das Execution Model- und das "Time Series"-Konzept an. Beide Konzepte sind abstrakt, aber notwendig um funktionierende Skripte zu erstellen.
█ Was ist das Execution Model / Ausführungsmodell? Oder anders ausgedrückt, wie wird PineScript ausgeführt?
Die Kerzen auf dem Tradingview Chart können technisch in historische und aktuelle Kerzen unterteilt werden.
Historische Kerzen liegen in der Vergangenheit und das jeweilige PineScript, welches auf deinem Chart angewendet wird, wird beim Öffnen des Charts einmal für historische Kerzen ausgeführt.
Historische Kerzen beinhalten einen Wert für jede Variable innerhalb des Skriptes.
Aktuelle Kerzen (realtime bar) sind solche, die den aktuellen Markt widerspiegeln und fortlaufend mit frischen Daten versorgt werden. Bei aktuellen Kerzen wird das PineScirpt somit mehrfach (einmal pro neuer Preisdaten) innerhalb einer Kerze ausgeführt. Wenn das Zeitintervall der Kerze überschritten wird (nennen wir sie Kerze A), erscheint eine neue aktuelle Kerze (Kerze B). Ab jetzt erhält Kerze B die neuen Preisdaten und Kerze A behält den Stand der Daten des letzten Updates innerhalb ihres Intervalls.
Aktuelle Kerzen verändern die Werte ihrer Variablen fortlaufend mit der Aktualisierung der Preisdaten.
█ Was ist das Time Series- / Zeitreihen-Konzept?
Die Preis- und Zeitdaten sind auf dem Chart und in PineScript anhand einer Zeitreihe sortiert. Dabei erhält jede Kerze einen Index. Die aktuelle Kerze (ganz rechts) hat den Index , die vorherige den Index und so weiter. Sobald eine neue Kerze erscheint, erhöht sich der Index aller vergangenen Kerzen um 1 und die aktuelle Kerze erhält den Index 0.
Als Programmierer können wir mit diesem Konzept auf bestimmte Kerzen referenzieren. Möchtest du dir eine Kerze markieren, um sie später wiederzuverwenden (zum Beispiel um eine Linie einzuzeichnen), kannst du dir ihren Index abspeichern.
Willst du zum Beispiel auf dem Tageschart den Schlusskurs von vor 3 Tagen abfragen, kannst du dies über close tun. „close“ ist hierbei eine built-in Variable für den Schlusskurs, die uns in PineScript zur Verfügung steht und die eckigen Klammern mit dem entsprechenden Index 3 sagen deinem Skript, den Schusskurs welcher Kerze du abfragen willst.
Das Execution Model und das Time Series Konzept bilden die Grundlage eines jeden PineScripts. Sie wirken anfänglich etwas abstrakt, vereinfachen uns die Arbeit mit den Preisdaten allerdings enorm.
█ Übung 2
Erstelle ein PineScript, dass den aktuellen Eröffnungskurs und den Eröffnungskurs vor zwei Perioden im Chart jeweils als Linie anzeigt.
█ Lösung für Übung 1
Übung 1: Erstelle ein Skript mit dem Namen "Mein erster PineScript Indikator", welches eine durchgehende rote Linie des Eröffnungskurses einer jeden Periode einzeichnet.
//@version=5
indicator("Mein erster PineScript Indikator", overlay=true)
plot(open, title="Eröffnungskurs", color=color.red)
PineScript Guide 1 - PineScript und PineEditorHallo Trader,
viele von euch traden bereits mit Indikatoren und wollen diese individualisieren. Tradingview bietet uns mit PineScript die Möglichkeit eigene Indikatoren mit ganz einfachen Schritten zu erstellen. Leider gibt es in der deutschen Community noch nicht allzu viele Informationen zur PineScript-Programmierung. Daher möchte ich euch mit diesem Tutorial ein wenig unter die Arme greifen. Ziel ist es jede Woche ein neues Thema zu behandeln, so dass wir gemeinsam die volle Funktionalität von PineScript erkunden.
█ Zu meiner Person
Ich bin Pascal und programmiere seit über 5 Jahren in PineScript. Angefangen habe ich aus reiner Neugier und habe so stetig meine Fähigkeiten weiterentwickelt. Hierbei kam mir meine vorherige Tätigkeit als Software-Entwickler zu gute. Durch meine Erfahrung bei der Hilfestellung im PineScript Chat und die Veröffentlichung diverser Open Source-Skripte bin ich nun in der Lage dieses Tutorial zu erstellen. Weiterhin bin ich im offiziellen Tradingview HelpCenter als Trusted Pine Programmer For Hire gelistet.
█ Worum geht es in dieser Tutorial-Serie?
Dieser Kurs soll dir einen einfachen Einstieg in die PineScript Programmierung ermöglichen. Es ist egal, ob du vorher schon einmal programmiert hast oder gerade mit dem Programmieren anfängst. Der Kurs wird dir die Grundlagen der PineScript Programmierung erklären und dir mit einfachen Beispielen den Einstieg erleichtern.
█ Was schauen wir uns in diesem Tutorial an?
Das erste Tutorial soll dir einen Einblick verschaffen. Daher schauen wir uns zunächst die folgenden Themen an:
Was ist der PineEditor?
Was ist PineScript?
Wie wird ein Skript erstellt?
Falls dir der Beitrag hilft würde ich mich über ein Like oder einen Kommentar unterhalb freuen. Feedback jeglicher Art ist gerne gesehen. Lasst uns gemeinsam die behandelten Themen diskutieren. Frohes Programmieren :)
█ Was ist der PineEditor?
Der PineEditor ist das Herzstück der PineScript Programmierung. In ihm erstellen wir unsere Skripte und er unterstützt uns dabei mit diversen Funktionen.
Zwei Kernaufgaben möchte ich dabei besonders herausstellen:
Syntax-Highlighting - Der PineEditor zeigt uns für verschiedene Teilbereiche des Skriptes unterschiedliche Farben an. So sind integrierte Funktionen bläulich eingefärbt und Konstanten, wie zum Beispiel Parameter rot. Das Syntax-Highlighting hilft uns zu erkennen, wo mögliche Fehlerquellen liegen und macht das Skipt allgemein lesbarer.
Hilfestellung - Wir können mittels Mouseover ein kleines Popup anzeigen lassen, welches uns Informationen zu integrierten PineScript Funktionen liefert. Weiterhin können wir mittels CTRl+Click (PC) oder cmd+Click (Mac) die Hilfeseite zur jeweiligen PineScript-Funktion öffnen, in der wir detaillierte Informationen zu allen Parametern, Funktionen und Features finden. Sogar nach über 5 Jahren PineScript-Programmierung nutze ich beide Funktionen täglich.
Der PineEditor integriert außerdem den PineComplier, welcher beim Abspeichern eines Skriptes die Syntax überprüft. Sollte das Skript einen Fehler enthalten, dann zeigt dir der PineEditor eine entsprechende Fehlermeldung an, die dir Rückschlüsse auf das Fehlverhalten gibt. Solltest du mal nicht wissen was falsch gelaufen ist, dann kannst du gerne im deutschen PineScript Chat nachfragen: Deutscher PineScript Chat
█ Was ist PineScript?
PineScript ist eine spezialisierte Scriptsprache, die es nur auf Tradingview gibt. Sie ist sehr mächtig, was es ermöglicht in wenigen Zeilen Funktionalitäten zu erschaffen für die in anderen Programmiersprachen mehrere hundert Zeilen notwendig werden. PineScript ist so designt, dass es für Einsteiger leicht ist einen ersten eigenen Indikator zu erstellen. Dennoch gibt es einige Einstiegshürden, die ich in diesem Kurs auflösen möchte.
PineScript wird genutzt um Indikatoren, Strategien oder Library Skripte zu schreiben.
Indikatoren, dienen dazu grafische Elemente, auf dem Chart oder unterhalb des Charts, anzuzeigen oder Benachrichtigungen auszulösen
Libraries, sind vorgefertigte Funktionalitäten, die in andere Skripte importiert werden können
Backtesting Skripte, dienen dazu eine Strategie gegen die historischen Preisdaten auszuwerten und eine schnelle Übersicht über potenzielle Rendite und andere Statistiken zu bekommen.
PineScript ist sehr gut dokumentiert und daher zugänglich für Einsteiger. Außerdem hat Tradingview eine große Scripter-Community, in der Hilfe schnell gefunden werden kann.
█ Wie wird ein Skript erstellt?
Zur Erstellung eines Skriptes öffnen wir zunächst den Chart. Unterhalb des Charts findest du den "PineEditor". Ein Klick auf diesen öffnet ein neues Fenster, indem die folgenden Zeilen zu sehen sind:
//@version=5
indicator("Mein Skript")
plot(close)
Diese Zeilen sind die Grundstruktur eines jeden Skriptes. Jedes Skript beinhaltet eine Versionsnummer, eine Angabe zur Art des Skriptes (in diesem Fall ein "indicator") und eine Ausgabe (in diesem Fall eine einfache Linie/plot des Schlusskurses)
Solltest du das Skript speichern wollen, dann kannst du innerhalb des PineEditors auf "Speichern" klicken, dem Skript einen Namen geben und es anschließend bei den Indikatoren unter "Meine Skripte" wiederfinden.
Unter der Funktion "Öffnen" kannst du bestehende Skripte öffnen oder neue Skripte erstellen.
█ Übung 1
Zum Abschluss des ersten Tutorials möchte ich dir eine Übungsaufgabe geben, welche ich im nächsten Tutorial auflösen werden:
- Erstelle ein Skript mit dem Namen "Mein erster PineScript Indikator", welches eine durchgehende rote Linie des Eröffnungskurses einer jeden Periode einzeichnet.