以下の点について、ご協力をお願いしてもよろしいでしょうか?
価格データのテーブルから 10 日間の指数移動平均 (EMA) を返す MS Jet/Ace/Access クエリを作成したいと考えています。テーブル形式とそのデータの小さなセットは次のとおりです...</p>
TableName = Spot
ID (AutoNumber) aDate (DateTime) Settle (Double)
1 01/10/2007 16.056
2 02/10/2007 15.625
3 03/10/2007 15.655
4 04/10/2007 15.686
5 05/10/2007 15.810
6 08/10/2007 15.665
7 09/10/2007 15.908
8 10/10/2007 16.004
9 11/10/2007 16.319
10 12/10/2007 16.233
指数移動平均をご存じない場合は、次の Web サイトが説明に役立つかもしれません…</p>
http://www.pandacash.com/technical-analysis/moving-average/exponential.htm
ただし、方程式を説明できることを願っています。
Todays EMA = (Settle * Exponent) + ((1 - Exponent) * Yesterdays EMA)
どこ
Settle = Closing price of the Stock / Asset
Exponent = (2 / (10 Days + 1)) ie 0.1818
必要な値の一部を返すクエリがありますが、全体に対する解決策を見つけることができません。
私のクエリ、これまでのところ(うまくいけば、フォーマットが読みやすくなります)
SELECT aDate, Settle,
(SELECT((SELECT Settle
FROM SPOT AS SubQ
WHERE SubQ.ID = SS.ID))
FROM SPOT AS SS
WHERE SS.ID = Spot.ID - 1) AS YesterdaySettle,
( 2 / 11 ) AS Exponent,
(SELECT Settle
FROM SPOT AS SS
WHERE SS.ID = Spot.ID) * ( Exponent ) AS [Part A],
( 1 - Exponent ) AS [Part B],
(SELECT ((SELECT Settle
FROM SPOT AS SubQ
WHERE SubQ.ID = SS.ID) * ( 2 / 11 ))
FROM SPOT AS SS
WHERE SS.ID = Spot.ID - 1) AS [Yesterdays Part A],
(SELECT SUM(Settle)
FROM SPOT AS SubQ
WHERE ID BETWEEN Spot.ID AND Spot.ID -9) / Iif(Spot.id > 10, 10, Spot.id) AS [10DMA]
FROM SPOT
ORDER BY aDate;
私のクエリのフィールド名に基づいて、私の方程式は…</p>
Todays EMA = ([Part A]) + ([Part B] * [Part C])
そして、次のような結果が期待されます。
[10DMA] [Exponent] [Part A] [Part B] [Part C] (Previous EMA) [EMA]
15.896 0.181818182 2.919272727 0.818181818 USE 10DMA ie 15.896 15.925
15.911 0.181818182 2.840909091 0.818181818 15.925 15.871
15.945 0.181818182 2.846363636 0.818181818 15.871 15.831
15.985 0.181818182 2.852 0.818181818 15.831 15.805
16.027 0.181818182 2.874545455 0.818181818 15.805 15.806
16.037 0.181818182 2.848181818 0.818181818 15.806 15.780
16.052 0.181818182 2.892363636 0.818181818 15.780 15.803
16.054 0.181818182 2.909818182 0.818181818 15.803 15.840
16.039 0.181818182 2.967090909 0.818181818 15.840 15.927
16.025 0.181818182 2.951454545 0.818181818 15.927 15.983
問題は、[Part C] フィールドの作成方法がわからないことです。
いくつかのポイントは…</p>
- 1 日の EMA がない場合、[パート C] の値は [10DMA] になります。たとえば、最初のレコードには EMA がないため、[10DMA] を使用する必要があります。
- 昨日の EMA がある場合は、今日の値を使用します [パート C]。
よろしければアドバイスをお願いします。私はこれまでに持っているものに出くわしましたが、パート C の値に困惑しています。
…の線に沿って何かできると思った</p>
iif (EMA <> 0, EMA, [10DMA]) AS [Part C],
(([Part A]) + ([Part B] * [Part C])) AS EMA
ただし、関連するエラーが発生します
Circular reference caused by alias 'Part C'.
アドバイスをいただければ幸いです。お時間をいただきありがとうございました。
ジョン。