Dienstag, 16. April 2024, 13:04 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

LowTrader

Fortgeschrittener

Registrierungsdatum: 3. Juli 2014

Beiträge: 115

1

Mittwoch, 5. Juli 2017, 20:10

Anfängerfrage wie VBS Code in Hs einbinden

Hallo alle,

ich bin endlich mal dabei, mich in VBS einzuarbeiten. Seit Stunden bekomme ich es aber mit Hilfe, Forum, Codebeispielen 0 hin einen fertigen VBS-Schnippsel auch nur in ein HS einzubinden :baby: ich habe schon ziemlich viel herumprobiert komme aber einfach nicht auf die richtige Lösung.

unter Enter Long steht:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
VBScript(#>>
GetGlobalVar "MyCalc", a
if IsArray(a) then
for i= 1 to ubound(a)
if a(i)<>NoValue
a(i)=a(i)*2
end if
next
SetGlobalVar "MyCalc",a
end if
<<#)

MyCalc


Der Code stammt aus einem Beispiel der Hilfe.
Das MyCalc am Ende steht nur da, damit eine "Handelsregel" da ist.

Unter Definitionen steht:

Quellcode

1
2
global calc n: [Tage steigend:1,2|3|4|5|6|7|8|9|10];
global calc MyCalc:5;


Eigentlich wollte ich eine Optimierungsvariable übergeben und damit was bauen. Da das aber nicht ging wurde ich bescheiden und einfach die Variable aus dem Beispiel genommen.

Ich hatte mir das so ganz problemlos vorgestellt mit VBScript(#>>... geht halt die VBS-Berechnung los und mit SetGlobalVar "MyCalc",a wird dann der veränderte Wert wieder an IV zurückgegeben. Wo klemmt das Ganze?

Und kann ich meinen ursprünglichen Plan eine Optimierungsvariable zu übergeben so umsetzen?

Grüße an ans Board!!

Giuseppe Männlich

Meister

Registrierungsdatum: 31. März 2004

Beiträge: 556

Wohnort: Wien

2

Mittwoch, 5. Juli 2017, 20:22

Hello LowTrader,

was mir auf den ersten Blick auffällt ist das fehlende "THEN" bei zweiten "IF":

Quellcode

1
2
3
4
5
6
7
8
9
10
11
VBScript(#>>
GetGlobalVar "MyCalc", a
if IsArray(a) then
for i= 1 to ubound(a)
if a(i)<>NoValue THEN '<-- hier fehlt ein THEN 
a(i)=a(i)*2
end if
next
SetGlobalVar "MyCalc",a
end if
<<#)


Nach dem ich THEN ergänzt habe, hat VBS-Editor kein Fehler mehr gemeldet.

LG giuseppe
keep going on...
Inv [7.6.7]

Giuseppe Männlich

Meister

Registrierungsdatum: 31. März 2004

Beiträge: 556

Wohnort: Wien

3

Mittwoch, 5. Juli 2017, 21:22

Hello noch mal,

ich habe mir es genauer angeschaut:

1) wenn du dieses code in Definitionen hast, kannst du dann im Chart auf das Berechnete MACD zugreifen.

Quellcode

1
2
3
4
5
6
7
8
global calc x: VBScript(#>>
Dim myMACD, i
if ScriptBerechneFormel("MACD(Close)", myMACD) then
	For i= 1 to AllePerioden
  	Ergebnis(i)=myMACD(i) 
	Next
end if
<<#);


2) zu deinem Codebeispiel: ich konnte VBScript(#>><<#); nicht ausführen ohne es einer Variable zuzuweisen. Unten meine Kommentare pro Zeile:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
global const n: [Tage steigend:1,2|3|4|5|6|7|8|9|10]; {hier musst du const benutzen, da keine Array sondern nur ein Wert}
global calc MyCalc: close; {hier musst du eine Array zuweisen (ich habe Close-Zeitreihe gewählt), da du im Script eine Array nutzt}

global calc x: VBScript(#>>
Dim a, i
GetGlobalVar "MyCalc", a       'hier wird deine "MyCalc" in "a" geladen, also Close-Array ist in a gespeichert
if IsArray(a) then                   'hier wird geprüft ob a eine Array ist
	for i= 1 to ubound(a)     'hier iteriert man durch die a array...
	if a(i)<>NoValue then     'und wenn es einen Wert gibt...
		a(i)=a(i)*2              'dann wird dieser mit zwei multipliziert und in a auf jeweiliger Position gespeichert
	end if
next
SetGlobalVar "MyCalc",a               	'hier wird die geänderte Variable zürück in "MyCalc" gespeichert
end if
<<#);


Man kann auf die beiden Variablen "MyCalc" als auch "x" vom Chart zugreifen.

Vielleicht hilft dir das.

LG
giuseppe
keep going on...
Inv [7.6.7]

LowTrader

Fortgeschrittener

Registrierungsdatum: 3. Juli 2014

Beiträge: 115

4

Donnerstag, 6. Juli 2017, 13:46

Hallo Guiseppe,

Vielen Dank für die super Antwort. Besonders die 2. toll auskommentierte Antwort, dass die VBS-Berechnung innerhalb einer Variablendefinition geschehen muss, hat den "Karren aus dem Dreck gezogen". Ich hatte gerade den ersten Post durchgearbeitet, dachte mir "Warum gibt das einen Fehler, im VBS Editor läuft's doch" und dann sehe ich Die 2. Antwort mit genau der benötigten Erklärung danke dafür :thumbup:

Mir ist noch vieles unklar, werde mich aber mal dranmachen meine ursprüngliches Ziel anzupeilen in VBS eine Optimierungsvariable in eine Schleife zu geben und damit die Kursteigerungen der letzten x Tage zu berechnen (jeweils zum Vortag).

Ich fürchte mich etwas vor fehlerhaften Berechnung (since i don't know what i am doing) Was wären deine 2-3 wichtigsten Empfehlungen aus Deiner Erfahrung um falschen Berechnungen aus dem Weg zu gehen?

Viele Grüße!

Giuseppe Männlich

Meister

Registrierungsdatum: 31. März 2004

Beiträge: 556

Wohnort: Wien

5

Donnerstag, 6. Juli 2017, 22:41

Hello LowTrader,

es freut mich, dass ich helfen konnte. Eigentlich denke ich, dass man dein Indikator auch unter EnterLong-Regel benutzen kann. Getestet habe ich es aber nicht.

Zu deiner Frage:

1) von dem was du schreibst, gehe ich davon aus, dass du noch nicht viel Programmiert hast. Ich würde dir empfehlen mal einfache Indikatoren mit VBS zu schreiben damit du die VBS-Datentypen und VBS-Syntax kennenlernst. Z.b. Open ausgeben, Open + Ref(open,-1) ausgeben, Open ausgeben nur wenn < Close... Übrigens, wenn ich dein Vorhaben richtig verstanden habe, kann man es auch mit einem VBS-Indikator umsetzen. Du musst nicht explizit VBS-Code in den INV-Code direkt einbinden.

2) Gehe Beispiele im Internet durch und versuche VBS-Befehle zu verstehen:

https://www.tutorialspoint.com/vbscript/
https://www.w3schools.com/asp/asp_ref_vbscript_functions.asp
https://technet.microsoft.com/en-us/library/ee198844.aspx

3) mache dir ein Plan was dein Script machen soll. So wie ich es gemacht habe, ein Schritt pro Zeile. Also schreibe dir zuerst mal die Kommentare. Danach schreibe zu jedem Kommentar die entsprechenden Befehle - Code.

4) Benutze die Debug-Funktionalität in VBS-Editor in Investox. So kannst du die einzelne Veriablen in jedem Schritt überprüfen.

5) Wenn (4) aus irgendwelchen Grund nicht möglich ist, schreibe dir die Werte die du Kontrollieren willst mit MessageBox: MsgBox(<deineVariable>) aus. Vorsicht: wenn du diesen befehlt im Schleifen nutzt, kann es sein, dass du dein MessgaBox x-Tausend mal wegklicken musst. :wacko: nicht besondert schön :engel:

6) Fertige Indikatoren kannst du dir in Investox im Chart anzeigen und die Werte prüfen - Minimale-, Maximale-Werte, Ausreißer, oft vorkommende Werte.

7) Wenn ein Code nicht funktioniert, versuche mal die Zeile mit dem Fehler zu finden: kommentiere alle Zeilen aus = bringe den Code in den Zustand wo kein Fehler kommt. Danach entkommentiere die Zeilen nach und nach und prüfe nach jeder neuer entkommentierten Zeile ob du den Code ohne einen Fehler ausführen kannst. So findest du die Zeile mit dem Fehler. Vorsicht auf die Befehle die aus zwei Teilen bestehen For-Next, If-Then ...

Das ist so wie ich es mache mal kurz zusammengefasst.

LG
giuseppe :thumbsup:
keep going on...
Inv [7.6.7]

LowTrader

Fortgeschrittener

Registrierungsdatum: 3. Juli 2014

Beiträge: 115

6

Freitag, 7. Juli 2017, 15:48

Hi Guiseppe,

so im großen und Ganzen war mir das schon klar, aber da waren nochmals einige interessante Punkte drin (MsgBox in Schleife, Tutorien etc.), Dankeschön dafür!

Falls es Dir nicht zuviel ist ich habe 2 Fragen zu meinem kleinen Projekt (es sind nur 5 Zeilen Code)
(Mein erstes VBS Script: steigende Kurse letzten x Tage)

und da komme ich einfach nicht weiter:

1.) Warum crasht das Prog den Rechner? Es muss diese Zeile sein:

Quellcode

1
SetGlobalVar "Start",Startindex

Ich bin so vorgegangen wie Du es beschrieben hast:
Das Programm läuft im Debugger ohne Fehler durch, Aber sobald in IV die Werte in die globale Variable Start zurückgeben soll crasht das Programm. Warum?

2.)Könntest Du mir einen Tipp geben wie ich die Schleife für das Projekt beginnen soll? Nicht alles nur die ersten 3-4 Zeilen wenn es geht. Ich habe einiges über Schleifen in VBS gelesen finde aber nicht so richtig den Einstieg, gerade auch wegen Fehlerüberprüfung in Investox.

Falls Du aus Frankfurt bist kann ich Dir bei Gelegenheit auch gerne ein Bier dafür ausgeben :) :Falls nicht: Danke Du hast mich schon mehrere Schritte weitergebracht!!

Grüße!

Giuseppe Männlich

Meister

Registrierungsdatum: 31. März 2004

Beiträge: 556

Wohnort: Wien

7

Samstag, 8. Juli 2017, 01:41

Hello LowTrader,

deine Fragen habe ich in anderem Thread beantwortet :)

Danke für die nette Einladung, trinke aber kein Bier. Ich präferiere eher Gin-Tonic :thumbsup: Da ich aber in Wien zu Hause bin und derzeit kein Weg nach Frankfurt plane, müssen wir es verschieben :)

LG und viel Erfolg!
giuseppe
keep going on...
Inv [7.6.7]