Tim
unregistriert
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tim« (4. Juli 2006, 17:39)
Tim
unregistriert
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
VBScript(#>> option explicit dim SH, ST, SA dim Datum dim Levels dim i, j,Maximum dim Kasten, KeyT, AlleKeys Set Levels = CreateObject("Scripting.Dictionary") ' Das Datum sowie Spalten Hoch, Tief und Kästchenanzahl pro Spalte holen GetDatum Datum scriptberechneformel "Spalte(SH)", SH scriptberechneformel "Spalte(ST)", ST scriptberechneformel "Spalte(SA)", SA ' Nun für jede Periode die Kästchen zählen for i=2 to AllePerioden if SH(i)<>Novalue then if fix(datum(i))>fix(Datum(i-1)) then ' Beim Tageswechsel, das Maximum auswerten if Levels.count>0 then maximum=0 AlleKeys=Levels.Keys ' Alle gezählten Levels untersuchen for j=0 to ubound(AlleKeys) if Levels(AlleKeys(j))>maximum then maximum=Levels(AlleKeys(j)) ergebnis(i)=Mid(AlleKeys(j),2) ' Der Key des Eintrags ist "#" & Kurslevel end if next else ergebnis(i)= 0 ' Kein Level gefunden end if ' Nach der Auswertung alle gespeicherten Levels löschen Levels.removeall else ' während eines Tages den Vorgänger-Wert verwenden if ergebnis(i-1)<>NoValue then ergebnis(i)=ergebnis(i-1) end if end if ' Ab hier erfolgt die Kästchen-Zählung pro Periode ' Zunächst die Kästchen-Größe in Punkten ermitteln if SA(i)>1 then Kasten=(SH(i)-ST(i))/(SA(i)-1) else Kasten=SH(i)-ST(i) end if for j = 1 to SA(i) ' Der Key des Eintrags ist das Kästchen-Kurslevel (davor ein #) KeyT="#" & ST(i)+(j-1)*Kasten-Kasten/2 ' Nun einfach für jedes Level eine 1 addieren, um das Kästchen zu zählen ' Bei Dictionary wird ein Element automatisch angelegt, wenn es noch ' nicht existiert Levels(KeyT)=Levels(KeyT)+1 next end if next <<#) |
Tim
unregistriert
Zitat
Bei Verwendung eines Indikators würde ich ein Problem darin sehen, geeignete Preisniveaus zu ermitteln, wenn waagerecht mehrmals an verschiedenen Niveaus die gleiche Boxenzahl auftritt?
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
VBScript(#>> option explicit dim SH, ST, SA dim Datum dim Levels dim i, j,Maximum dim Kasten, KeyT, AlleKeys dim TickSize Set Levels = CreateObject("Scripting.Dictionary") ' Das Datum sowie Spalten Hoch, Tief und Kästchenanzahl pro Spalte holen GetDatum Datum scriptberechneformel "Spalte(SH)", SH scriptberechneformel "Spalte(ST)", ST scriptberechneformel "Spalte(SA)", SA scriptberechneformel "#_MinPriceChange#", TickSize ' Nun für jede Periode die Kästchen zählen for i=2 to AllePerioden if SH(i)<>Novalue then if fix(datum(i))>fix(Datum(i-1)) then ' Beim Tageswechsel, das Maximum auswerten if Levels.count>0 then maximum=0 AlleKeys=Levels.Keys ' Alle gezählten Levels untersuchen for j=0 to ubound(AlleKeys) if Levels(AlleKeys(j))>maximum then maximum=Levels(AlleKeys(j)) ' Der Key des Eintrags ist "#" & Kurslevel ergebnis(i)=Mid(AlleKeys(j),2) - Kasten/2 end if next else ergebnis(i)= 0 ' Kein Level gefunden end if ' Nach der Auswertung alle gespeicherten Levels löschen Levels.removeall Kasten=0 else ' während eines Tages den Vorgänger-Wert verwenden if ergebnis(i-1)<>NoValue then ergebnis(i)=ergebnis(i-1) end if end if ' Ab hier erfolgt die Kästchen-Zählung pro Periode ' Zunächst die Kästchen-Größe in Punkten ermitteln if SA(i)>1 then Kasten=clng((SH(i)-ST(i))/TickSize(i))*TickSize(i)/(SA(i)-1) end if for j = 1 to SA(i) ' Der Key des Eintrags ist das Kästchen-Kurslevel (davor ein #) KeyT="#" & ST(i)+(j-1)*Kasten ' Nun einfach für jedes Level eine 1 addieren, um das Kästchen zu zählen ' Bei Dictionary wird ein Element automatisch angelegt, wenn es noch ' nicht existiert Levels(KeyT)=Levels(KeyT)+1 next end if next <<#) |
Tim
unregistriert
Zitat
Dieses Problem stellt sich bei Verwendung von Histogrammen aber genauso. In einem VBScript-Code kann man sogar eher noch flexibel damit umgehen. Die Frage ist nur, wie?