Dienstag, 17. Juli 2018, 13:26 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Lieber Besucher, herzlich willkommen bei: INVESTOX-Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

LowTrader

Benutzer

Registrierungsdatum: 3. Juli 2014

Beiträge: 75

1

Donnerstag, 6. Juli 2017, 15:04

Mein erstes VBS Script: steigende Kurse letzten x Tage

Hallo an alle VBS-Cracks hier,
ich bin ein totaler VBS Anfänger und versuche gerade folgendes in VBS zu realisieren. Ich will das hier als so eine Art "Work in Progress" präsentieren und weiter unten schreibe ich wo ich aktuell gerade hänge. Denn leider hat mir der gestrige Tag und heute klargemacht, dass das ganz Unterfangen nicht so einfach wird für mich wie ich mir das anfangs dachte und ich wohl einiges an Hilfe benötigen werde :whistling:

Ziel:
An das Script soll eine Optimierungsvariable Y (Wertebereich 1-10) übergeben werden, seit wie vielen Tagen steigende Kurse vorherrschen sollen. Ist :

Y=1, dann soll überprüft werden: Open heute/Open gestern >1
Y=2, dann Openheute/gestern > 1 UND Open gestern /Open vorgestern >1
usw.


Aktuell habe ich das Problem, das nur bei einem ersten Test um ein Gefühl wie ErsteDatenPeriode für eine Fehlerüberprüfung genuttz werden kann, das Script sich schon komplett aufhängt.

Quellcode

1
2
3
4
5
6
7
8
9
10
#_saveglobals#
global calc Start:5;


global calc script: VBScript(#>>
Dim Myfeld
GetDaten "Close", Myfeld
Startindex = ErsteDatenPeriode(Myfeld)
SetGlobalVar "Start",Startindex
<<#);


Lasse ich die letzte Zeile mit SetGlobalVar weg, dann läuft es.
Wo liegt der Fehler?

Viele Grüße!

Giuseppe Männlich

Meister

Registrierungsdatum: 31. März 2004

Beiträge: 500

Wohnort: Wien

2

Samstag, 8. Juli 2017, 01:36

Hello LowTrader,

Zitat

Ziel:
An das Script soll eine Optimierungsvariable Y (Wertebereich 1-10) übergeben werden, seit wie vielen Tagen steigende Kurse vorherrschen sollen. Ist :

Y=1, dann soll überprüft werden: Open heute/Open gestern >1
Y=2, dann Openheute/gestern > 1 UND Open gestern /Open vorgestern >1
usw.

Wie schon geschrien, einfacher wäre es wenn du dir ein VBS-Indikator erstellts ;)

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
'definiere die Variablen (diese Zeile wird in laufe des Codings je nach Bedarf ergänzt)
Dim index, Startindex, Endindex

'lade Open-Kurse von Investox
GetDaten "Open", Open

'finde heraus in welcher Periode die ersten/letzten Investoxdaten vorhanden sind
Startindex = ErsteDatenPeriode(Open)
Endindex   = LetzteDatenPeriode(Open)

'iterriere durch die Open-Kurse
For index = Startindex + Perioden to Endindex

	'vergleiche die heutiges Open (HO) zu gestrigen Open (GO)
	If (Open(index) / Open(index - Perioden)) > 1 Then 
	
		'wenn HO/GO>1 setze Ergebnis auf 1
		Ergebnis(index) = 1 
		
	else 
		
		'wenn HO/GO>1 setze Ergebnis auf 0
		Ergebnis(index) = 0 
	
	End if

Next


Du musst im Indikator eine Optimierungvariable Perioden erstellen.


Diese Variable kann Optimiert werden wie von dir gewünscht. Der Indikator macht noch nicht 100%tig das was du wolltest, aber fast. Er vergleicht jetzt Open zwei Perioden - letzte und die von x Perioden definiert durch die Variable Perioden. Der Code ist kommentiert, solltest also kein Problem haben den zu lesen. Der Indikator kann so gechartet werden.

Zu deinem Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
#_saveglobals#
global calc Start:5; 'hier definierst du Array durch CALC-Anweisung


global calc script: VBScript(#>>
Dim Myfeld
GetDaten "Close", Myfeld
Startindex = ErsteDatenPeriode(Myfeld) 'hier wird ein einziges Wert, position des ersten Wertes der Zeitreihe als Integer zurückgeliefert
SetGlobalVar "Start",Startindex 'hier versuchst du eine Array (also eine Reihe an Werten) nur mit einem Wert von Startindex zu belegen. Das geht leider so nicht.
<<#);


Das Problem in deinem Code ist, dass du eine Array in "global calc Start:5;" mit einem einzigen Wert von "SetGlobalVar "Start",Startindex" belegen willst. Versuche mal anstatt "global calc Start:5;" ein "global const Start:5;" Im Chart kannst du diesen Indikator nicht darstellen, da es nur einen Wert enthält und keine Array ist. Du kannst den Wert aber in VBS mit MsbBox ausgeben.

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

LowTrader

Benutzer

Registrierungsdatum: 3. Juli 2014

Beiträge: 75

3

Montag, 10. Juli 2017, 19:46

Hi Guiseppe,
vielen Dank für die Antwort, das Bier in Frankfurt ist Dir schon mal sicher;)
Ich bin gerade sehr eingespannt, inhaltlich kann ich das erst ab übermorgen testen/kommentieren.

Gruß und gute Woche!

LowTrader

Benutzer

Registrierungsdatum: 3. Juli 2014

Beiträge: 75

4

Freitag, 14. Juli 2017, 17:12

Hi Guiseppe,

Zitat

Wie schon geschrien, einfacher wäre es wenn du dir ein VBS-Indikator erstellts ;)
Ja da hast Du wohl recht - ich wollte nur gleich lernen wie man das alles in VBS macht, da es vom Code her leichter zu lesen ist, wenn es am Stück steht und nicht auf Indikatoren verteilt ist. Habe es aber so gemacht wie Du geschrieben hast und einen Indikator angelegt. Im Augenblick hänge am gleichen Problem wie Dubi hier:

GetGlobalVar liest Daten aus "Definitionen" nicht / getconst macht das aber

Ich habe für "Perioden" eine Optimierungsvariable angelegt, die ich nicht in den VBS-Teil eingelesen bekomme, egal was ich tue ;( - anders als Dubi schreibt klappt bei mir Getconst auch nicht. Irgendwie muss ich die da reinbekommen...

Zum Zweiten würde mich doch interessieren wie man im VBS-Teil einen Array definiert - das typische dim a() aus VBS scheint nicht zu funktionieren. Das wäre schon sehr interessant zu wissen, weil dann könnte man die Daten ja auch wieder mit SetGlobalVar problemlos wieder zurückgeben . So wie ich es jetzt verstehe machcht ein Indikator eigentlich nichts anderes als die "vorbereitete" Array "Ergebnis()" zu befüllen - fertig.

Abgesehen von diesen Problemen habe ich aber Dank Deines sehr gut auskommentierten Codes und lesen und rumprobieren schon ganz gute Fortschritte gemacht wie ich finde. Habe auch schon eine Idee wie ich mit 2 verschachtelten Schleifen (hoffentlich) den ursprünglich geplanten Indikator hinbekommen kann. Dein Code hat mir jedenfalls schon gut weitergeholfen. Danke nochmals.

Viele Grüße!

Bernd

Erleuchteter

Registrierungsdatum: 5. Juni 2005

Beiträge: 3 846

Wohnort: Iringsweg

5

Samstag, 15. Juli 2017, 18:59

Hallo zusammen

... würde mich doch interessieren wie man im VBS-Teil einen Array definiert

Da würde sich ein Blick in die VBS Doku anbieten. Leider sind die Links im Internet rar dazu, sogar bei Winzigweich selber wurde ich nicht fündig. Einen Link, der aktuell funktioniert, habe ich doch gefunden: script56.chm. Die script56.chm Hilfe-Datei ist jedenfalls für mich die Quelle Nr. 1 der Wahrheit, wenn es um VBS Syntax geht, die in Investox funktioniert.

Vielleicht sollten wir uns überlegen, die script56.chm VBS Hilfe-Datei in die Investox-Database aufzunehmen, es gibt sonst wenig Quellen im Internet, während diese Doku für Investoxies sehr wichtig ist!

Jedenfalls wird die Frage nach dem Dim in VBS dort korrekt beantwortet, einfach den Index der Hilfedatei nach Dim durchsuchen.
Gruss
Bernd

-----------------------------------------------
http://www.13quants.ch