Можно ли использовать MS Access для расчета 21-дневного стандартного отклонения на основе рассчитанных полей?Если так, то как? - PullRequest
0 голосов
/ 04 июля 2019

Я строю процесс для расчета скользящих 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.

...