Flächeninhalt zw. 2 Aktienkursen minimieren

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Label MsgBox
Bild

Betrifft: Flächeninhalt zw. 2 Aktienkursen minimieren
von: atze
Geschrieben am: 24.09.2003 16:18:33

Moin Leute,

ich hab 10 Zeitreihen (von Aktien z.b.) in Excel vorliegen und möchte automatisiert die Flächeninhaltsunterschiede paarweise vergleichen. Und dann den minimalsten ermitteln.

Ich hab mal auf die schnelle ein kleines Bild zum besseren Verständnis gemacht.
http://mitglied.lycos.de/c36get/pic1.jpg

Also alles was grün ist möchte ich heraus kriegen :)

Mathematisch gesehn würde ich mir vorstellen, das Integral von der "Oberen Kurve" minus das Integral der Unteren. Allerdings habe ich keine Ahnung wie ich mit VBA(?) ein Integral berechne. 2tes Probelm: Ich habe ja gar keine explizite Funktion gegeben wie y=2x + 2 oder so, da es sich wie gesagt nur um tausende Einzelwerte einer Aktie über die letzen Jahre handelt.

Die jeweiligen einzelwerte der einzelnen Kurven liegen mir natürlich alle vor.

Freue mich über alle Tips und Lösungshinweise!

atze

Bild


Betrifft: AW: Flächeninhalt zw. 2 Aktienkursen minimieren
von: axel.meyer
Geschrieben am: 24.09.2003 16:50:22

hi atze,

so sollte es gehen:
wirf den makrorekorder an.
mach ein xy-diagramm von einer zeitkurve
rechte maustaste auf den graph: trendlinie hinzufügen, hier: polynomisch, 6. grades, gleichung im diagrammfeld darstellen
makrorekorder stop

das was du bisher hast, kannst du dir in eine schleife einbauen, nach dem selben prinzip, wie die jetzt kommende schleife

und jetzt baust du dir eine schleife:
for i = 1 to kurvenanzahl
ActiveSheet.ChartObjects("Diagramm " & i).Activate
variable = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Characters.Text
Range("B" & i) = variable
next i

dann hast du erst einmal für alle graphen eine kurve (übereinstimmungsgrade testen!)

mit hilfe von Instring, Left(), Mid(), Right() kannst du dir jetzt die koeffizienten der gleichungen auslesen und die rechnung durchführen.

noch was zur mathematik: die grüne fläche entspricht nicht der differenz der beiden integrale. die grüne fläche enspricht der differenz der integrale von einem schnittpunkt bis zum nächten, denn: wie du selbst gesagt hast: es ist die obere minus die untere kurve. nur welche ist oben/unten bei sich mehrfach kreuzenden graphen? bsp: integral sin(a) ist in den grenzen von 0-unendlich auch null, weil sich die positiven bäuche mit den negativen wegheben. wenn du aber die "x-achse" als deine zweite kurve ansiehst und immer den zwischenraum als flächenergebnis haben willst, mußt du, bezogen auf das sin()-beispiel immer von 0-Pi integrieren, da dort immer die schnittpunkte liegen. und diese integrationsgrenzen mußt du dir erst mal festlegen, indem du je zwei gleichungen gleichsetzt. danach ist die integration, selbst in einem programm auch nicht mehr so schwierig, sondern simpler oberstufenstoff (pisa ;)

hoffe ich hab dich nicht nur verwirrt, sondern auch etwas unterstützt.

gruß, axel


Bild


Betrifft: PS
von: axel.meyer
Geschrieben am: 24.09.2003 17:28:45

...für noch genauere flächen-differenzwerte:

du könntest noch die differenz zwischen zwei aktienkursen vergleichen. wenn die differenz hinreichend gering ist, der wert von graph1 immer > graph2 und vorher immer hinreichend hoch war, gehst du einfach davon aus, daß zwischen diesem zeitpunkt der differenz = 0 und der zuvorigen differenz > 0 eine zeitspanne lag, in der es keine kreuzungen gab. dann kannst du innerhalb dieser zeitspannen einfach die integrale differenz direkt bilden. ganz ohne schnittpunkt-suche. und: du kannst ausgleichspolynome von teilabschnitten der kurse bauen, was den fehler minimiert.

gruß, axel


Bild


Betrifft: AW: PS
von: atze
Geschrieben am: 25.09.2003 20:12:14

Servus Axel,

dank' dir schonmal für deine detailliere Hilfestellung.
Ich habe die Zeitreihen im xy Diagramm (mit Trendlinien) darstellt.

Folgende Sachen sind mir noch etwas unklar:

1) übereinstimmungsgerade sagt mir leider nichts
2) mit Left(), Mid(), etc. habe ich bisher auch noch nie gearbeitet. Hab in der Hilfe dazu nachgelesen, kann mir aber aus deiner Aussage noch nicht genau ableiten wie du das gemeint hast.

zum mathematischen:

Natürlich hast du Recht: Ich weiss nicht welche Kurve die "obere" und welche die "untere" ist. Da hast du dir jetzt auf Anhieb schon mehr gedanken gemacht als ich :) Netter Hinweis..

Ich habe mir der einfachheit halber mal 2 Zeitreihen ausgesucht mit Trendlinien und würde jetzt gern mal "per Hand" das Integral berechnen wollen: Wie funktioniert das eigentlich mit Excel, gibt es vorgefertigte Funktionen?

mfg
atze


Bild


Betrifft: AW: PS
von: axel.meyer
Geschrieben am: 27.09.2003 12:19:48

tach atze,

übereinstimmung-GRade, nicht gErade :)

nein, ich meinte damit einfach, daß du nachsehen mußt, wie gut sich die polynome 6. grades anpassen, grad der übereinstimmung. die muß nicht unbedingt zufriedenstellend sein, wenn du aber nur von schnittpunkt zu schnittpunkt polynome legst, könnte das, auch wenn es in teilbereichen abweicht, insgesamt ein gutes ergebnis liefern.

bzgl mid(), right(), left():

dieses makro erklärt es eigentlich schon sehr gut, die anderen unteren sind zur ergänzung, daraus kannst du dir deinen code zusammenbasteln, mit dem du die koeffizienten des polynoms ausliest.

wenn du noch fragen hast, mail mir einfach an axel.meyer@gmx.at

gruß, axel


Sub teilen()
Dim strTest As String
Dim var1 As String
Dim var2 As String
Dim var3 As String
  strTest = "MAN200GRT"
  'strTest =Range("A1")
  var1 = Left(strTest, 3)
  var2 = Mid(strTest, 4, 3)
  var3 = Right(strTest, 3)
End Sub



dim textlänge
txt = "Dies ist ein Text"
textlaenge = Len(txt)


hiermit könntest du einen text trennen und eine zahl aus einem text lesen (zumindest die erste zahl nach den buchstaben)

Dim intCounter As Integer
intCounter = 1
Do Until Not IsNumeric(Mid(txt, intCounter, 1))
intCounter = intCounter + 1
Loop
NumberFilter = Val(Left(txt, intCounter - 1))


hiermit kannst du den string um stellen kürzen, indem du nach dem tennungszeichen x suchst.

Dim txt As String
txt = ThisWorkbook.Name
txt = Left(txt, InStr(txt, "x") - 1)
txt = Left(txt, Len(txt) - 2) & ".xls"



Sub zahlkuerzen()
   Dim txt As Variant
   Dim Text_Laenge, Laenge_Bis_Komma
   
   txt = Range("c4").Value
   Text_Laenge = Len(txt)
   Laenge_Bis_Komma = InStr(txt, ",")
   txt = Right(txt, Text_Laenge - (Laenge_Bis_Komma + 1))
   MsgBox txt
End Sub



 Bild

Beiträge aus den Excel-Beispielen zum Thema " Aktualisierungen automatisieren"