スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Market Daemon - 過去の株式データを参照する

さて前回の記事の続きです。(クリックすると拡大されます。拡大した図で文字が見づらい方は、画像を100%のサイズで表示してみてください。)



前回はMarket Daemonの概要図を説明しましたが、今回から、各機能に的を絞って、それぞれ実際にプログラミングを行ってみたいと思います。

まず、Omega Chartの株式データをダウンロードしたら、それをどうやって読み込んだらいいでしょうか?

ちょっと難しい話になるのですが、Omega Chartでは株価データはいわゆるDWORD形式(4バイト符号なし整数)のものが8セット一組(日付、始値、高値、安値、終値、出来高、信用買残、信用売残)でデータファイルに格納されています。

したがって、DWORD形式のデータを読み取るユーティリティを用意しておく必要があるわけです。

例えばJAVAでプログラミングするなら(Market Daemonは個人的に親しんでいるJAVAを使ってプログラミングしていきます)こんな感じでしょう。

// **************************************************
// プログラム名:Utility.java
// プログラム概要:汎用的なユーティリティ処理を行う
// **************************************************
// パッケージ:util
// **************************************************
package util;

// 各種ユーティリティ
public class Utility {

    // DWORD値(4バイトの符号なし整数)を読み込む
    public static int readUnsignedInt(byte[] data,int offset) {
        int output = ((data[offset+3] & 0xff) << 24);
        output |= ((data[offset+2] & 0xff) << 16);
        output |= ((data[offset+1] & 0xff) << 8);
        output |= (data[offset+0] & 0xff);
        return output;
    }
    
}
// **************************************************
// EOF
// **************************************************

byte配列型のデータ(株価データ)と、オフセット(読み取り位置)を引数として受け取り、株価データのオフセット位置から1バイトずつ、合計4バイトを抜き出して結合し、int型の値としてreturnするだけの簡単なメソッドです。
DWORD値は4バイト目が先頭のデータになっているため、結合の順序に注意してください。

次に、実際にデータを読み込んでみたいと思います。

株式データへのアクセスですが、以下のアクセス方法を用意しておけば充分だと思います。

1. 日付指定でのアクセス方法(ex.)2007/6/19のデータにアクセス)
2. X営業日前、といった形でのアクセス方法(ex.)3営業日前のデータにアクセス)
3. 上記1,2と組み合わせて使うY日間の期間指定(ex.)3日間のデータを取得)


従って、まずは上記アクセス方法を実装する為のゲッタ(値=変数を取得するためのメソッド)、セッタ(値=変数を設定するためのメソッド)を用意することにします。

// *********************************************
// プログラム名:DataAccess.java
// プログラム概要:データにアクセスする
// *********************************************
// パッケージ:mdp.data
// *********************************************
package mdp.data;

class DataAccess {

    // *********************************************
    // インスタンス変数の定義
    // *********************************************
    // X営業日前
    protected int daysAgo;
    // 日付
    protected int date;
    // 期間
    protected int period;

    // *********************************************
    // コンストラクタの定義
    // *********************************************
    DataAccess() {
        this.daysAgo = 1;
        this.date = -1;
        this.period = 1;
    }

    // *********************************************
    // X営業日前の設定
    // *********************************************
    public void setDaysAgo(int daysAgo) {
        if ( daysAgo > 0 ) {
            this.daysAgo = daysAgo;
            this.date = -1;
        } else {
            this.daysAgo = 1;
        }
    }

    // *********************************************
    // X営業日前の取得
    // *********************************************
    public int getDaysAgo() {
        return daysAgo;
    }
    
    // *********************************************
    // 日付の設定
    // *********************************************
    public void setDate(int date) {
        if ( date > 0 ) {
            this.date = date;
            this.daysAgo = -1;
        } else {
            this.date = -1;
        }
    }

    // *********************************************
    // 日付の取得
    // *********************************************
    public int getDate() {
        return date;
    }
    
    // *********************************************
    // 期間の設定
    // *********************************************
    public void setPeriod(int period) {
        if ( period > 0 ) {
            this.period = period;
        } else {
            this.period = 1;
        }
    }

    // *********************************************
    // 期間の取得
    // *********************************************
    public int getPeriod() {
        return period;
    }
    
}
// *********************************************
// EOF
// *********************************************

こんな感じですかね~。

<<==このブログの応援に、ポチッと押していってください!

スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURL:
http://atomico.blog72.fc2.com/tb.php/110-c1aed5ef
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。