Я строю процесс для расчета скользящих 21-дневных стандартных отклонений по эталонному индексу (и многим различным индексам, таким как SPX, HY ML, ES1 и т. Д.), Используя ежедневные данные о ценах (максимум, минимум и предыдущие значения). близко).
Я начал строить это на MS Excel, но это будет много обновлений и много данных. Я надеюсь, что MS Access сможет сделать это более эффективно, но я не знаю достаточно, чтобы сказать, реально ли это сделать без VBA в Access. Это нормально, если мне нужно (у меня есть некоторый опыт работы с VBA в Excel), но я не смог найти правильные шаги / руководства для этого.
SELECT (Select count(PX_CLOSE_1D) from [priceRawData] where Ticker = a.Ticker and RawDataDate <= a.RawDataDate) AS RunningCount,
a.Ticker, a.RawDataDate,
a.PX_OPEN, a.PX_HIGH, a.PX_LOW, a.PX_CLOSE_1D,
iif(isnull(a.PX_HIGH-a.PX_LOW),0,Abs(a.PX_HIGH-a.PX_LOW)) AS rngHighLow, iif(isnull(a.PX_HIGH-a.PX_CLOSE_1D),0,Abs(a.PX_HIGH-a.PX_CLOSE_1D)) AS rngHighLast,
iif(isnull(a.PX_LOW-a.PX_CLOSE_1D),0,Abs(a.PX_LOW-a.PX_CLOSE_1D)) AS rngLowLast, IIf([rngHighLow]>[rngHighLast],[rngHighLow],IIf([rngHighLast]>[rngLowLast],[rngHighLast],[rngLowLast])) AS trueRange
FROM priceRawData AS a
ORDER BY a.Ticker, a.RawDataDate;
2nd query
SELECT b.RunningCount, b.Ticker, b.RawDataDate, StDev(b.trueRange) AS StDevOftrueRange
FROM [1) Qry_calcPriceData] AS b
WHERE (b.RunningCount between RunningCount and RunningCount - 21) and ticker =b.ticker
GROUP BY b.RunningCount, b.Ticker, b.RawDataDate
ORDER BY b.RunningCount, b.Ticker, b.RawDataDate;
Я создал поле RunningCount, надеясь, что смогу каким-то образом использовать его для группировки данных. Коды ниже даже не сгенерируют. Когда я пытался, он работал вечно.
Ожидаемые результаты:
1) Запрос не будет рассчитываться, если у вас нет данных за 21 день.
Например, дата данных начинается 30.12.1927, первый скользящий 21-дневный stDev будет за 30.01.1928, с 21 день (дни, когда рынок открыт, а не календарный день) данных.
2) Результаты должны выглядеть следующим образом:
Тикер | RawDataDate | CalcType | Скользящий 21-дневный StDev
ES1 | 07.10.1997 | True Range | SD (с 9/9/1997 по 10/7/1997)
ES1 | 08.10.1997 | True Range | SD (с 9 октября 1997 года по 10 августа 1997 года)
ES1 | 08.10.1997 | True Range | SD (с 9 сентября 1997 года по 10 сентября 1997 года)
...... до текущего
SPX | 1/30/1928 | True Range | SD (с 30.12.1927 по 1/30/1928)
SPX | 31.01.1928 | True Range | SD (с 1/3/1928 по 31.01.1928)
SPX | 01.02.1928 | True Range | SD (с 31.01.1928 по 01.01.1928)
...... до текущего
ES1 | 07.10.1997 | Цена закрытия | SD (с 9.09.1997 по 07.07.1997)
ES1 | 08.10.1997 | Цена закрытия | SD (с 9 октября 1997 года по 10 августа 1997 года)
ES1 | 08.10.1997 | Цена закрытия | SD (с 9 сентября 1997 года по 10 сентября 1997 года)
...... до текущего
SPX | 30.01.1928 | Цена закрытия | SD (с 30.12.1927 по 30.01.1928)
SPX | 31.01.1928 | Цена закрытия | SD (с 1/3/1928 по 31.01.1928)
SPX | 01.02.1928 | Цена закрытия | SD (с 31.01.1928 по 01.01.1928)
...... до текущей даты, а для других тикеров и calcTypes
Я застрял при расчете скользящей 21-дневной части stdev, и я не уверен, стоит ли мне даже продолжать пробовать маршрут MS Access.