Freitag, 19. April 2024, 23:49 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Mario

unregistriert

1

Donnerstag, 13. Januar 2011, 00:53

GD auf Array erstellen

Hallo,
ich komme leider alleine nicht weiter und bräuchte bitte eure Hilfe.
Ich möchte gerne einen GD auf einen Array erstellen und kriegs leider nicht hin.

Ausgangslage:

StartI = ErsteDatenPeriode(Daten)
EndI = LetzteDatenPeriode(Daten)

Fo1 = "RSLongIndiATRKompS(High,"& cStr(F3) &", "& cStr(F7) &" )"
if ScriptberechneFormel(Fo1, R) then

For i = StartI to EndI

if (R(i) = NoValue) then
else

if(r <> R(i)) then

w1 = w
w = R(i)

if(w1 > 0) then
Zähler = Zähler + 1
differenz = differenz + Abs(w - w1)
durchschnitt = differenz / Zähler
end if

end if
r = R(i)
end if
Ergebnis(i) = durchschnitt

Next


end if

Ergebnis: Der Durchschnitt aller w zum Zeitpunkt x
Da es sich hier um eine Volatilitätsabhängige Berechnung handelt würde ich gerne nur die letzten bspw. 14 w als gleitenden Durchschnitt als Berechnungsgrundlage verwenden, da historisch hohe Volatilitäten den Durchschnitt überproportional beeinflussen.

Alle meine bisherigen Versuche bisher waren leider nicht zielführend.
Weiß jemand Rat ?

Viele Grüsse
Mario

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Mario« (13. Januar 2011, 01:09)


Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 051

Wohnort: Giessen

2

Donnerstag, 13. Januar 2011, 01:58

Einen einfachen GD auf das Array ist das aber nicht, was Du da berechnen willst.
Und ein GD auf W wird das imho auch nicht, was Du da berechnest, oder ich steh auf dem Schlauch.
kurzer Tip, wie ich glaube, dass man es lösen kann


Dim w(14),w_zaehler,w_komplett
w_zaehler=0
w_komplett=0

jedesmal wenn ein neues w auftaucht

if w_zaehler=14 then
w_komplett=1
w_zaehler=0
end if

w_zahler=w_zaehler+1
w(w_zaehler)=w

.....
....

if w_komplett=1 then
sum=0
for j=1 to 14
sum=sum+w(j)
next j
ergebnis(i)=sum/14
end if


PS. Du verwendest in Deinem Code Variablen ohne Ihnen vorher einen Wert zugewiesen zu haben, das gehört sich nicht! ;)
PPS. Geht mit Sicherheit auch eleganter und schneller, aber iss schon spät und ich habe keine Lust über Deine W Konstruktion nachzudenken.
PPPS. Natürlich kann man auch schon Ergebnis berechnen, wenn keine 14 zusammen gekommen sind, aber das war ja nicht Deine Fragestellung. Dafür dann einfach den w_komplett kram rausnehmen
If you think it´s expensive to hire a professional, wait until you hire an amateur.

Mario

unregistriert

3

Donnerstag, 13. Januar 2011, 09:29

Hallo Lenzelott,

Danke für Deine Hilfe,
ich hatte nur ein bisschen abgekürzt, da eine Wertezuweisung nicht unbedingt nötig ist. :)
Leider funktioniert es so nicht, da ein w solange einen Wert annimmt bis ein ein neues w hinreichend definiert ist.

Es könnte also sein, dass bspw. über einen Zeitraum von 1000 Bars also For i = 1 to 1000
nur 30 verschiedene W auftauchen.
Hiervon möchte ich nun den GD der letzten 14 W errechnen und nicht der letzten w(i) = 14

Die Berechnung müsste meines Erachtens ähnlich sein wie bei Renko-Ziegeln, die auch Zeitunabhängig berechnet werden.
Ich kanns nur leider nicht, da meine Programmierkünste doch arg beschränkt sind.

Hast Du oder jemand anderer Kompetenter einen Tip für mich ?

Viele Grüsse

Mario

Lenzelott Männlich

Experte

Registrierungsdatum: 30. Dezember 2002

Beiträge: 3 051

Wohnort: Giessen

4

Donnerstag, 13. Januar 2011, 12:49

Leider funktioniert es so nicht, da ein w solange einen Wert annimmt bis ein ein neues w hinreichend definiert ist.

Es könnte also sein, dass bspw. über einen Zeitraum von 1000 Bars also For i = 1 to 1000
nur 30 verschiedene W auftauchen.
Hiervon möchte ich nun den GD der letzten 14 W errechnen und nicht der letzten w(i) = 14


deswegen habe ich ja auch geschrieben


jedesmal wenn ein neues w auftaucht


Damit ist genu der teil in Deinem Code gemeint, wo Du ein neues W identifizierst nach von mir aus 1000 Bars.
Ergo funktioniert es genau so wie ich es oben vorgeschlagen habe
If you think it´s expensive to hire a professional, wait until you hire an amateur.