利用資料庫儲存過程計算K線均值演算法
阿新 • • 發佈:2019-01-31
演算法實現:
K線儲存過程,定義一個n的日均線,儲存過程如下圖,初始值全部賦值為0
0 |
1 |
2 |
3 |
4 |
… |
n-1 |
n%n |
1%n |
2%n |
3%n |
4%n |
… |
(n-1)%n |
n .....
Java程式直接處理從資料庫中獲取到的資料
①當i<n時,均值結果為avg=sum(a[0],a[n-1])/i
②當i>=n時,均值結果為avg=sum(a[0],a[n-1])/n
MySql儲存過程演算法實現:
set i=i+1; IF i<n THEN SELECT SUM(rate) INTO total FROM lineK WHERE id>=1 AND id<=i; set rate_in_stock=total/i; END IF; IF i>=n THEN SELECT SUM(rate) INTO total FROM lineK WHERE id>=i+1-n AND id<=i; set rate_in_stock=total/n; END IF;
儲存過程程式碼
DELIMITER $$ DROP PROCEDURE IF EXISTS `yggl`.`CursorProc` $$ CREATE PROCEDURE `yggl`.`CursorProc` (IN n INT) BEGIN DECLARE no_more_lineK ,i INT DEFAULT 0; DECLARE total DOUBLE DEFAULT 0; DECLARE rate_in_stock DOUBLE DEFAULT 0; DECLARE SUM DOUBLE DEFAULT 0; DECLARE prd_id VARCHAR(255); DECLARE cur_lineK CURSOR FOR SELECT id FROM lineK; /*First: Delcare a cursor,首先這裡對遊標進行定義*/ DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_lineK = 1; /*when "not found" occur,just continue,這個是個條件處理,針對NOT FOUND的條件*/ /* for loggging information 建立個臨時表格來保持*/ DROP TABLE IF EXISTS `infolog`; CREATE TABLE infolog ( Id int(11) NOT NULL AUTO_INCREMENT, Rate DOUBLE NOT NULL, PRIMARY KEY (Id) ); OPEN cur_lineK; /*Second: Open the cursor 接著使用OPEN開啟遊標*/ FETCH cur_lineK INTO prd_id; /*Third: now you can Fetch the row 把第一行資料寫入變數中,遊標也隨之指向了記錄的第一行*/ REPEAT set i=i+1; IF i<n THEN SELECT SUM(rate) INTO total FROM lineK WHERE id>=1 AND id<=i; set rate_in_stock=total/i; END IF; IF i>=n THEN SELECT SUM(rate) INTO total FROM lineK WHERE id>=i+1-n AND id<=i; set rate_in_stock=total/n; END IF; INSERT INTO infolog(Rate) VALUES (rate_in_stock); FETCH cur_lineK INTO prd_id; UNTIL no_more_lineK = 1 END REPEAT; CLOSE cur_lineK; /*Finally: cursor need be closed 用完後記得用CLOSE把資源釋放掉*/ SELECT * FROM infolog; END $$ DELIMITER ;
完整案例打包:http://download.csdn.net/detail/kevin_iot/9707791
技術參考文件:
2、java連線mysql示例:
3、hFreechart參考示例