Fälligkeitstermine für Optionen ermitteln

By Frank Kalis

Posted on Sep 26, 2005 von in SQL Server

Im Beitrag Fälligkeiten des Bund-Futures ermitteln... haben wir uns mit dem Problem auseinandergesetzt, den jeweils 10. ten Tag eines Verfallsmonats im Bund-Future zu ermitteln. Das "einzige" Problem dieser Fragestellung war, ob der ermittelte Tag ein gültiger Börsenhandelstag ist. Ein anders gelagertes Problem erwartet uns, wenn wir uns mit Optionen auseinandersetzen.
Wir handeln fast ausschließlich mit Aktienoptionen, die an der Eurex gehandelt werden. Diese Optionen haben als Verfallstag vereinfacht gesagt den jeweils 3.ten Freitag eines Monats. Wer es genau wissen will, sollte dem Link folgen, und die Kontraktspezifikationen der Eurex selber durchlesen. Die Ermittlung diese sogenannten "Hexensabbats" könnte folgendermaßen aussehen.

Zunächst erstellen wir wieder unsere kalendarische Hilfstabelle, die wieder einmal den Großzeil der Arbeit abnimmt.

CREATE TABLE Dates 
(
FullDate SMALLDATETIME
CONSTRAINT pk_Dates PRIMARY KEY(FullDate)
)

INSERT INTO Dates
SELECT DATEADD(day, Number, '20050401')
FROM master..spt_values
WHERE Number BETWEEN 0 AND 256 AND Type='P'

Die entsprechende Abfrage sieht so aus:

SELECT t1.FullDate Hexensabbat
FROM Dates t1
WHERE YEAR(t1.FullDate)= 2005
AND DATENAME(dw,t1.FullDate)='Friday'
AND
(SELECT COUNT(*)
FROM Dates AS t2
WHERE YEAR(t2.FullDate) = 2005
AND DATEPART(month,t2.FullDate) = DATEPART(month,t1.FullDate)
AND DATEPART(day,t2.FullDate) <= DATEPART(day,t1.FullDate)
AND DATENAME(dw,t2.FullDate) = 'Friday'
) = 3
ORDER BY t1.FullDate

Hexensabbat
------------------------------------------------------
2005-04-15 00:00:00
2005-05-20 00:00:00
2005-06-17 00:00:00
2005-07-15 00:00:00
2005-08-19 00:00:00
2005-09-16 00:00:00
2005-10-21 00:00:00
2005-11-18 00:00:00

(8 row(s) affected)

Was passiert?
Innerhalb der WHERE Klausel werden all Daten des uns interessierenden Zeitraumes gefiltert, bei denen der Wochentagsname "Friday" und die folgende Bedingung erfüllen:

   (SELECT COUNT(*) 
FROM Dates AS t2
WHERE YEAR(t2.FullDate) = 2005
AND DATEPART(month,t2.FullDate) = DATEPART(month,t1.FullDate)
AND DATEPART(day,t2.FullDate) <= DATEPART(day,t1.FullDate)
AND DATENAME(dw,t2.FullDate) = 'Friday'
) = 3

Ist COUNT(*) = 3 erfüllt, ist das entsprechende Datum (im Zusammenhang mit den anderen Bedingungen) der 3.te Freitag eines Monats.

Tags: Tags:
Dieser Eintrag wurde eingetragen von und ist abgelegt unter SQL Server. Tags:

Noch kein Feedback


Formular wird geladen...