Wertes Forum,
ich habe als Anfänger eine Frage zu einem Code von mir. Der Code macht grob folgendes:
Es wird ein Aktienkurs nach Kauf- und Verkaufsignalen durchsucht. Diese werden dann in ein anderes Tabellenblatt (Backtesting) geschrieben.
Die aktZeile ist die letzte Zeile des Aktienkurses. Von der arbeite ich mich solange nach oben, bis das Kaufsignal (hier EMA5>EMA10>EMA20) erreicht ist. Aus dieser Zeile schreibe ich dann einige Werte in das Tabellenblatt Backtesting.
Von diesem ermittelten Kaufsignal gehe ich weiter nach oben und suche das Verkaufssignal (hier EMA5<EMA10 EMA10<EMA20). Auch aus dieser Zeile werden manche Werte in das Backtesting übernommen.
Zum Schluß werden noch manche Werte von Kauf- und Verkaufssignal verrechnet.
Das ganze sieht dann so aus:
Do Until aktZeile = ersteZeile
'Suche Kaufsignal und schreibe Werte in Auswertetabelle
Kaufname = "EMA5>EMA10>EMA20"
Do Until (Cells(aktZeile, EMA5) > Cells(aktZeile, EMA10) And Cells(aktZeile, EMA10) > Cells(aktZeile, EMA20))
If aktZeile = ersteZeile Then
Exit Do
End If
aktZeile = aktZeile - 1
Loop
Worksheets("Backtesting").Cells(n, 2).Value = Cells(1, 1)
Worksheets("Backtesting").Cells(n, 3).Value = Cells(aktZeile, 1)
Worksheets("Backtesting").Cells(n, 4).Value = Cells(aktZeile, 5)
Kauf = aktZeile
'Suche Verkaufsignal und schreibe Werte in Auswertetabelle
Verkaufname = "EMA5<EMA10 EMA10<EMA20"
Do Until (Cells(aktZeile, EMA5) < Cells(aktZeile, EMA10) Or Cells(aktZeile, EMA10) < Cells(aktZeile, EMA20))
If aktZeile = ersteZeile Then
Worksheets("Backtesting").Cells(n, 5).Value = Cells(aktZeile, 1)
Worksheets("Backtesting").Cells(n, 6).Value = Cells(aktZeile, 5)
Exit Do
End If
aktZeile = aktZeile - 1
Loop
Worksheets("Backtesting").Cells(n, 1).Value = Kaufname & "_" & Verkaufname
Worksheets("Backtesting").Cells(n, 5).Value = Cells(aktZeile, 1)
Worksheets("Backtesting").Cells(n, 6).Value = Cells(aktZeile, 5)
Verkauf = aktZeile
'Berechnung Rendite
Worksheets("Backtesting").Cells(n, 7).Value = Worksheets("Backtesting").Cells(n, 6) / Worksheets("Backtesting").Cells(n, 4) - 1
'Berechnung Haltedauer
Worksheets("Backtesting").Cells(n, 8).Value = Worksheets("Backtesting").Cells(n, 5) - Worksheets("Backtesting").Cells(n, 3)
'Berechnung Maximaler Gewinn
Worksheets("Backtesting").Cells(n, 9).Value = Application.WorksheetFunction.Max(Range(Cells(Kauf, 5), Cells(Verkauf, 5))) / Worksheets("Backtesting").Cells(n, 4) - 1
'Berechnung Maximaler Verlust
Worksheets("Backtesting").Cells(n, 10).Value = Application.WorksheetFunction.Min(Range(Cells(Kauf, 5), Cells(Verkauf, 5))) / Worksheets("Backtesting").Cells(n, 4) - 1
n = n + 1
Loop
Meine Frage:
Ich möchte mehrere Kauf- und Verkaufssignale nacheinander testen, also verschiedene Varianten und Kombinationen. Nun könnte ich diese ja einfach untereinander schreiben. Hier sehe ich zunächst das Problem, dass die Übersichtlichkeit durch die vielen Zeilen verloren geht. Zum anderen kann ich mir aber auch vorstellen, dass ich z.B. das gleiche Kaufsignal mehrmals verwenden möchte, aber mit unterschiedlichen Verkaufsignalen.
Wie mache ich das am übersichtlichsten und dass ich diese Codes nur einmal schreiben muss und immer wieder aufrufen kann? (Selbst in diesen Do Schleifen wird sich ja vieles wiederholen bis auf die erste Zeile.)
Ich habe hier schon eine Variante in ein eigenes Sub getan, allerdings hab ich dann trotz "Public" Varianten, das nicht zum laufen gebracht...
Vielen Dank für Eure Antworten!
|