EMA的計算公式:
初始EMA:平均N日的收盤價。
以后EMA:(今天的收盤價 - 昨天的EMA) * (2.0 / (N+1)) + 昨天的EMA
SQL 初始資料庫:
CREATE TABLE "STOCK_H" (
"ID" VARCHAR2(36 BYTE),
"CODE" VARCHAR2(2000 BYTE),
"TYPE" VARCHAR2(2000 BYTE),
"SCODE" VARCHAR2(2000 BYTE),
"NAME" VARCHAR2(2000 BYTE),
"C" NUMBER(30,8),
"H" NUMBER(30,8),
"L" NUMBER(30,8),
"O" NUMBER(30,8),
"LC" NUMBER(30,8),
"PV" NUMBER(30,8),
"PA" NUMBER(30,8),
"VOL" NUMBER(30,8),
"AMOUNT" NUMBER(30,8),
"PE" NUMBER(30,8),
"TR" NUMBER(30,8),
"PER" NUMBER(30,8),
"VR" VARCHAR2(2000 BYTE),
"TMV" NUMBER(30,8),
"CMV" NUMBER(30,8),
"PBV" NUMBER(30,8),
"PV_L" NUMBER(30,8),
"PV_5" NUMBER(30,8),
"PV_60" NUMBER(30,8),
"PV_Y" NUMBER(30,8),
"CR" NUMBER(30,8),
"IV" NUMBER(30,8),
"IR" NUMBER(30,8),
"SLIV" NUMBER(30,8),
"SLIR" NUMBER(30,8),
"LIV" NUMBER(30,8),
"LIR" NUMBER(30,8),
"MIV" NUMBER(30,8),
"MIR" NUMBER(30,8),
"SIV" NUMBER(30,8),
"SIR" NUMBER(30,8),
"UN" NUMBER,
"DN" NUMBER,
"UCODE" VARCHAR2(2000 BYTE),
"UNAME" VARCHAR2(2000 BYTE),
"UPV" NUMBER(30,8),
"DCODE" VARCHAR2(2000 BYTE),
"DNAME" VARCHAR2(2000 BYTE),
"DPV" NUMBER(30,8),
"TTM" NUMBER,
"MT" NUMBER
);
COMMENT ON COLUMN "STOCK_H"."ID" IS '主鍵';
COMMENT ON COLUMN "STOCK_H"."CODE" IS '股票代碼';
COMMENT ON COLUMN "STOCK_H"."TYPE" IS '型別';
COMMENT ON COLUMN "STOCK_H"."SCODE" IS '股票板塊';
COMMENT ON COLUMN "STOCK_H"."NAME" IS '股票名稱';
COMMENT ON COLUMN "STOCK_H"."C" IS '最新價';
COMMENT ON COLUMN "STOCK_H"."H" IS '最高價';
COMMENT ON COLUMN "STOCK_H"."L" IS '最低價';
COMMENT ON COLUMN "STOCK_H"."O" IS '開盤價';
COMMENT ON COLUMN "STOCK_H"."LC" IS '昨收價';
COMMENT ON COLUMN "STOCK_H"."PV" IS '漲跌幅';
COMMENT ON COLUMN "STOCK_H"."PA" IS '漲跌額';
COMMENT ON COLUMN "STOCK_H"."VOL" IS '成交量';
COMMENT ON COLUMN "STOCK_H"."AMOUNT" IS '成交額';
COMMENT ON COLUMN "STOCK_H"."PE" IS '振幅';
COMMENT ON COLUMN "STOCK_H"."TR" IS '換手率';
COMMENT ON COLUMN "STOCK_H"."PER" IS '市盈率';
COMMENT ON COLUMN "STOCK_H"."VR" IS '量比';
COMMENT ON COLUMN "STOCK_H"."TMV" IS '總市值';
COMMENT ON COLUMN "STOCK_H"."CMV" IS '流通市值';
COMMENT ON COLUMN "STOCK_H"."PBV" IS '市凈率';
COMMENT ON COLUMN "STOCK_H"."PV_L" IS '盤尾漲速';
COMMENT ON COLUMN "STOCK_H"."PV_5" IS '5分鐘漲跌';
COMMENT ON COLUMN "STOCK_H"."PV_60" IS '60日漲跌幅';
COMMENT ON COLUMN "STOCK_H"."PV_Y" IS '年初至今漲跌幅';
COMMENT ON COLUMN "STOCK_H"."CR" IS '委比';
COMMENT ON COLUMN "STOCK_H"."IV" IS '主力凈流入';
COMMENT ON COLUMN "STOCK_H"."IR" IS '主力凈流入凈占比';
COMMENT ON COLUMN "STOCK_H"."SLIV" IS '超大單凈流入';
COMMENT ON COLUMN "STOCK_H"."SLIR" IS '超大單凈流入凈占比';
COMMENT ON COLUMN "STOCK_H"."LIV" IS '大單凈流入';
COMMENT ON COLUMN "STOCK_H"."LIR" IS '大單凈流入凈占比';
COMMENT ON COLUMN "STOCK_H"."MIV" IS '中單凈流入';
COMMENT ON COLUMN "STOCK_H"."MIR" IS '中單凈流入凈占比';
COMMENT ON COLUMN "STOCK_H"."SIV" IS '小單凈流入';
COMMENT ON COLUMN "STOCK_H"."SIR" IS '小單凈流入凈占比';
COMMENT ON COLUMN "STOCK_H"."UN" IS '上漲股票數量';
COMMENT ON COLUMN "STOCK_H"."DN" IS '下跌股票數量';
COMMENT ON COLUMN "STOCK_H"."UCODE" IS '領漲代碼';
COMMENT ON COLUMN "STOCK_H"."UNAME" IS '領漲股票';
COMMENT ON COLUMN "STOCK_H"."UPV" IS '領漲幅度';
COMMENT ON COLUMN "STOCK_H"."DCODE" IS '領跌代碼';
COMMENT ON COLUMN "STOCK_H"."DNAME" IS '領跌股票';
COMMENT ON COLUMN "STOCK_H"."DPV" IS '領跌幅度';
COMMENT ON COLUMN "STOCK_H"."TTM" IS '上市時間';
COMMENT ON COLUMN "STOCK_H"."MT" IS '行情時間';
COMMENT ON TABLE "STOCK_H" IS '個股每日資料';
SQL實作EMA公式:
WITH STOCK_TEMP(XH, CODE, C, EMA5, EMA10, EMA20, EMA60, EMA120, MT) AS (
-- 初始化第一天
SELECT 1 AS XH, CODE, 0 C, AVG(case when XH <=5 then C end) EMA5, AVG(case when XH <=10 then C end) EMA10, AVG(case when XH <=20 then C end) EMA20, AVG(case when XH <=60 then C end) EMA60, AVG(case when XH <=120 then C end) EMA120, MIN(MT) MT FROM (
SELECT row_number() over(partition by CODE order by MT ASC) XH, CODE, C, MT from STOCK_H
) GROUP BY CODE
UNION ALL
-- 往后的每一天
SELECT T.XH, T.CODE, T.C, (T.C - S.EMA5) * (2.0 / 6) + S.EMA5, (T.C - S.EMA10) * (2.0 / 11) + S.EMA10, (T.C - S.EMA20) * (2.0 / 21) + S.EMA20, (T.C - S.EMA60) * (2.0 / 61) + S.EMA60, (T.C - S.EMA120) * (2.0 / 121) + S.EMA120, T.MT FROM (
SELECT row_number() over(partition by CODE order by MT ASC) XH, CODE, C, MT from STOCK_H
) T, STOCK_TEMP S WHERE S.CODE = T.CODE AND T.XH = S.XH + 1
)
SELECT T.XH, T.CODE, T.C, T.EMA5, T.EMA10, T.EMA20, T.EMA60, T.EMA120, T.MT FROM STOCK_TEMP T WHERE T.MT = to_char(sysdate, 'yyyymmdd') ORDER BY CODE
實作效果截圖:
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/92048.html
標籤:高級技術
上一篇:MySQL安裝
下一篇:初識PowerApps
