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
Pine
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)