利用 LINQ 實現期指Tick檔彙整為K棒

參考這一篇:「How to group a time series by interval (OHLC bars) with LINQ」。

我這裡使用 C#.NET 實作,並作了一些小小的修正,使之確實可以執行,並可從期交所所下載的原始 Tick 資料檔,經由前置的解壓縮、轉換為 Tick 物件型態,再透過該實作邏輯,就可以將 Tick 物件依所指定的時間週期 (time-interval),群組為所謂的「分K棒」(其實,正確的稱呼應該為 OHCK Bar)。

這裡也不禁對 LINQ 實作技術感到讚嘆! 它讓中間層 (middleware)的物件結構與資料來源 (data-sources)的存取,變得更為簡單太多了,所以也使得 Tick 轉K棒 的轉換邏輯,可以利用相當簡潔的語法 (類 SQL 語法),而達成該功能的實現。

底下的程式碼並未包含前述所提包括解壓縮、轉換為 Tick 物件等邏輯,只從一群已有 Tick 資料的 Collection 集合 (型態為 IEnumerable),依據所指定的 Interval 時間間隔,轉換為 K棒 (含開、高、收、低、量)的實作邏輯。

Tick 與 OHLC-Bar(K棒) 物件結構為:

    public class Tick
    {
        public string Symbol { get; set; }     //商品代號        
        public DateTime Timestamp { get; set; }  //成交日期時間
        public decimal Price { get; set; }     //成交價格
        public uint volume { get; set; }       //成交量
    }
 
    public class OHLCBar
    {
        public string Symbol { get; set; }  //商品代號
        public decimal OPEN { get;set; }  //開盤價
        public decimal CLOSE { get; set; }   //收盤價
        public decimal HIGH { get; set; }  //最高價
        public decimal LOW { get; set; }   //最低價
        public uint VOLUME { get; set; }   //成交量
        public DateTime BeginTime { get; set; } //開始時間
        public TimeSpan Interval { get; set; }   //時間區間
    }

繼續閱讀 »

[C# 實作筆記] 將 Zip壓縮檔內的文字檔轉至記憶體內的List集合
    目標:

  1. 在 C#.NET 程式內處理 *.zip 壓縮檔 (內含文字檔)的解壓縮 (decompress)。
  2. 將解壓縮後的文字檔讀進記憶體內 (memory),並將每行 (per-line)的字串 (string)儲存至 List 集合 (collection),以俾方便處理。
    主要做法:

  1. 因官方未提供處理解壓縮 .zip 壓縮格式機制,所以需下載 3rd party 的類別庫 (class library)。這裡以 SharpZipLib ( formerly NZipLib) 類別庫來處理解壓縮。
  2. 利用 SharpZipLib 內的 ZipInputStream 開啟 .zip 壓縮檔。
    string fname = @"C:\Download\TxtData.zip";
    ZipInputStream zipStream = new ZipInputStream(File.Open(fname, FileMode.Open));
  3. ZipInputStream 會依據所指定的緩衝區大小,依序將已解壓縮的文字檔內容讀至「位元組陣列 (Byte array)」;同時再利用已新增的 MemoryStream (記憶體串流)物件讀進 Byte array。
                    MemoryStream memStream = new MemoryStream();
                    int bufferSize = 2048;     //指定的緩衝區大小
                    int readCount = 0;           //回傳已讀取的位元組數目
                    byte[] buffer = new byte[bufferSize];
     
                    readCount = zipStream.Read(buffer, 0, bufferSize);   
                    while (readCount > 0)
                    {
                        memStream.Write(buffer, 0, readCount);
                        readCount = zipStream.Read(buffer, 0, bufferSize);
                    }
  4. 繼續閱讀 »

[烏龜訂購系統開發與實作-10]-從 EA 工具建立資料模型,並產出 DDL SQL敘述

下列步驟主要目地在於建立資料庫的資料表格,並實現由中間層控制物件連結至資料庫,以達成實際存取資料的目地。

十、從 EA 工具建立資料模型,並產出 DDL SQL敘述

  • 透過 EA 建立資料模型 (Data Model)的原因,在於 EA 具備了視覺化的資料塑模機制。且透過其轉換 (transform)功能,可以產出支援多達十數種資料庫的 DDL (Data Definition Language) SQL敘述。
  • 當然也可以使用如 eclipse 插件 (plugin)的資料庫管理工具,來規劃與建立資料表格。
  1. 在 [Logical View] 套件內,新增子套件 (sub-package)名為「Data Model」。
  2. 在該套件內新增一設計圖名為「Order Model」,設計圖類型為「Data Modeling」。
  3. 打開設計圖,從工具箱 (toolbox)中將「Table」圖形元件拖曳至設計圖內。本例會使用到兩個表格,其表格名稱與資料欄位參考如下:
    CREATE TABLE ORDER
    (
    	id INTEGER AUTO_INCREMENT,
    	item_no VARCHAR(3) NOT NULL,
    	order_date DATE,
    	PRIMARY KEY (id)
    )
    CREATE TABLE Item
    (
    	id VARCHAR(3) NOT NULL,
    	name VARCHAR(24),
    	price INTEGER,
    	PRIMARY KEY (id)
    )
  4. 繼續閱讀 »

[案例研討] 烏龜訂購系統開發與實作 by UML and Java-09

九、撰寫控制類別的功能測試程式碼框架

** 至本實作步驟可以先把 EA Model 檔與 Eclipse Java 專案存檔。將整個專案目錄備份至 /Stage-1_1 目錄下,視為第一個開發階段的版本。 **
 o 下載 Java 專案與 Model 檔Stage1_1.rar

在 eclipse 環境下要撰寫測試程式碼是非常簡單的一件事,原因是 eclipse 已內建了 JUnit 測試框架 (JUnit Test Framework),作為一位程式撰寫人員,最起碼要為每一個控制性的功能(服務)類別撰寫功能測試程式碼 (functional test code),可以說是軟體品質的最基本保障,也是應該要具備的責任與良心了

  1. 在 Eclipse 內的 [Project Explorer],選擇 「訂購烏龜_Control.java」,按下滑鼠右鍵,選擇 [New] → [Other…],然後在 Wizard 對話框內,選擇 [Java] → [JUnit] → [JUnit Test Case] ,然後點擊 【Next】,在出現的對話框內,填入以下資訊:
    • 點選 「New JUnit 4 Test」。 (新版本的測試框架可以根據 Java 5.0 以上版本的新特徵特性來建構;更簡單、易於使用,以及更敏捷的初始化與清理等工作)
    • Package: com.order.test (端看開發人員的習慣,這裡是採用將測試程式碼均放置於原始程式碼所在位置的子目錄下)
    • Name:訂購烏龜_Control_Test (測試類別命名的建議為 原類別名稱 + _Test)
    • 勾選 setUp() method (讓測試類別可進行初始化的工作)。

    圖 13、新增 JUnit 測試程式碼的對話框
    (點擊圖片鏈接看原圖)圖 13、新增 JUnit 測試程式碼的對話框

  2. 繼續閱讀 »

[案例研討] 烏龜訂購系統開發與實作 by UML and Java-08

八、新增 Java Model 專案,撰寫控制類別程式碼

 

1. 新增 Java Model 專案:
    (1) 將 Eclipse 切至「Java Perspective」。
    (2) 新增「Java Project」專案,專案名稱為「烏龜Model」。

圖 12、在 Eclipse 下新增 Java 專案
(點擊圖片鏈接看原圖)圖 12、在 Eclipse 下新增 Java 專案

2. 撰寫控制 (control)類別與資料傳遞 (data transfer)類別的程式碼框架 (skeleton)

訂購烏龜_Control.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.order.control;
 
import java.util.*;
import com.order.dto.*;
 
public class 訂購烏龜_Control {
	public ArrayList<vo_ 烏龜資訊> list烏龜清單() {
		return null;
	}
 
	public VO_訂購確認資訊 結帳(VO_結帳資訊 m_結帳) {
		return null;
	}
 
	public boolean SaveOrder() {
		return false;
	}
}
</vo_>

繼續閱讀 »

[案例研討] 烏龜訂購系統開發與實作 by UML and Java-07

七、Java 開發環境平台與建置

 

1. 下載與安裝所需 Java 開發工具
  • Tomcat 的角色如同在 Visual Studio .NET IDE 的 IIS,均是充當在 Web 專案開發下的 Web Container 機制。
  • VS.NET 幾乎無可選擇地,均是採用 IIS 作為 Web Container;而 Java Eclipse IDE,則可以選擇多種類型的 Web Container。本實作案例,以採用最普遍的 Tomcat 作為 Eclipse IDE 的主要 Web Container。
  • 除了 Web Container,當然也需要有開發 (兼測試)用的資料庫。相較於 VS.NET 採用自家 SQL Express 作為開發用的資料庫,Java Eclipse 則從以往所常用的 hsqldb,如今更多開發人員推薦的是更為開放、輕巧的 apache derby、可被內嵌於 eclipse 的輕量級 (lightweight)資料庫系統,且亦可以利用 eclipse DTP (Data Tools Platform) 輕易地操作存取 derby 資料庫。本實作案例,即採用 apache derby 作為開發與測試用的資料庫系統。

繼續閱讀 »

Page 1 of 179123456789101112...203040...Last »