株漬キラーヘルプ ユーザー拡張DLLの仕様書

DLLの概要

アプリケーションフォルダーの中にあるフォルダーを登録対象とする。複数のDLLを登録可能とする。DLL内は、指標用クラス確保と開放関数が外部公開される。指標の計算・表示等は用意されているKABU_INDEXクラスをヘッダーファイルとして取り込み、それをDLL側で派生させて使用する。したがってすべて仮想関数となる。クラス確保時にオブジェクトへのポインタが返されるので、そのオブジェクトを元に仮想関数として呼び出す。

KABU_INDEXクラスの仕様

class KABU_INDEX{
public:
        int **lvw;              //      リストビュー列幅
        HMODULE hMod;           //      指標のDLLハンドル
        CHAT_TYPE chat_type;    //      チャート表示で表示する場所(蝋燭,出来高,指標1,指標2)
        int* chat_disp_f;       //      チャート表示をする場合TRUE , 表示しない場合False
        TCHAR* dll_name;
        int ver[4];             //      バージョン
        TCHAR* url;             //      サポートURL
        TCHAR* vendor;          //      ベンダー名
        TCHAR* date;            //      リリース年月日
        COLORREF* color;        //      線の色
        int* fday;              //      チャート先行スパン日数
        int index_num;          //      リストビュー等に表示する指標数
        TCHAR** names;          //      指標名


        virtual int InsertColumn(HWND hList,int subItem,LIST_VIEW_TYPE lvt)=0;
//      株価をインターネットから取得した後に呼び出される。
        virtual int inet_read(HINTERNET h,KABU* kp,int code_max,time_t ts,time_t te)=0;
//      株価をファイルから呼び出した後に呼び出される。
        virtual int file_read(TCHAR* pass,KABU* kp,int code_max)=0;
//      株価をファイルへ保存した後に呼び出される。
        virtual int file_write(TCHAR* pass,KABU* kp,int code_max)=0;
//      指標の値を取得
        virtual TCHAR* get_data(TCHAR* buf,int sz,KABU* kp,int kabu_num,int ext_num,int n)=0;

//      指標計算時が必要な時に呼び出される(最初の1回だけ)
        virtual void calc_init(KABU* kabu,int code_max)=0;
//      指標計算時が必要な時に呼び出される(1銘柄ごとに呼び出される)
        virtual void calc(KABU* kp,int kabu_num)=0;
//      リストビューに指標を表示
        virtual int listview(KABU* k,HWND ,int itemNo,int subItem,int kabu_num,int num)=0;
//      リストビューのカラムをクリックした場合に呼び出される。ソート用の比較関数
        virtual void listview_sort_init(int n)=0; 
//      リストビューのカラムをクリックした場合に呼び出される。ソート用の比較関数
        virtual int listview_cmp(TCHAR* ,TCHAR* ,int )=0;
//      検索条件設定リストビューをクリックした場合に呼び出される、検索条件設定ダイアログ表示関数
        virtual void cond_dialog(HINSTANCE , HWND,int  num,int index)=0;
//      検索条件をリストビューに表示
        virtual void cond_view_set(HWND , int , int , int )=0;
//      検索条件が有効か無効化を返す TRUE:有効 FALSE:無効
        virtual int cond_valid_chk(int,int)=0;
//      検索条件に一致する場合はTRUEを返す
        virtual int cmp(KABU* kp,int num,int kabu_num,int epos,int index)=0;
//      指標の配列を確保する場合に呼び出される。
        virtual bool alloc(int code_max,int len,int cond_num)=0;
//      指標の配列を解放する場合に呼び出される。
        virtual void free(void)=0;
//      チャート表示の最大値と最小値を取得
        virtual void chat_range(KABU* kp,int s,int e,int kabu_num,int* ymin,int* ymax,int index)=0;
//      チャート表示開始時に呼び出される
        virtual int chat_init(CHAT_BASE& chat_base,int kabu_num,int es,int ee)=0;
//      チャート表示時に1日分のデータを表示する。
        virtual void chat_draw(CHAT_BASE& chat_base,int kabu_num,int n,int wx,int num)=0;
//      デストラクタ
        virtual ~KABU_INDEX(){};
};

DLL側で作成する必要がある関数

EXPORT KABU_INDEX** kabu_index_alloc(int* n,TCHAR* path);

指標をサポートするオブジェクトを確保して返す。
引数
        n:指標数を返すint型変数のポインタ
        path:アプリケーションデーターが保存されているフォルダー
戻り値
        確保された*n個のKABU_INDEX型へのポインタ
        *nに確保されたKABU_INDEXの個数が格納する
以下、指標をサポートするクラスのメンバー関数(KABU_INDEXを派生させて作成)

EXPORT void kabu_index_free(TCHAR* path);

kabu_index_allocで確保されたオブジェクトを開放する。
引数
        path:アプリケーションデーターが保存されているフォルダー

EXPORT void kabu_index_opt_read(TCHAR* path,int cond_num);

指標表示で使用する、検索条件やチャート表示の条件をファイルから読み込む。
引数
        path:アプリケーションデーターが保存されているフォルダー
        cond_num:絞り込み条件数(買い1,買い2,...売り5)

EXPORT void kabu_index_opt_write(TCHAR* path,int cond_num);

指標表示で使用する、検索条件やチャート表示の条件をファイルへ保存する。
引数
path:アプリケーションデーターが保存されているフォルダー
cond_num:絞り込み条件数(買い1,買い2,...売り5)

DLL側で作成する必要があるKABU_INDEXを派生したクラスの仮想メンバー関数

int InsertColumn(HWND hList,int subItem,LIST_VIEW_TYPE lvt);

リストビューの列名を設定(全銘柄、時系列等表示時等に呼び出される)
引数
        hList:リストビューのハンドル
        subItem:リストビューの列開始位置
        lvt:リストビューのタイプ
戻り値
        この関数で設定された列終了位置+1

int inet_read(HINTERNET h,KABU* kp,int code_max,time_t ts,time_t te);

株価をインターネットから取得した後に呼び出される。ユーザー側でインターネットから呼び出す必要がある場合に使用
引数
        h:インターネットハンドル
        kp:KABU型への配列
        code_max:銘柄数
        ts:読み込み開始日
        te:読み込み終了日

int file_read(TCHAR* path,KABU* kp,int code_max);

株価をファイルから呼び出した後に呼び出される。
引数
        path:アプリケーションデーターが保存されているフォルダー
        kp:KABU型への配列
        code_max:銘柄数

int file_write(TCHAR* path,KABU* kp,int code_max);

株価をファイルへ保存した後に呼び出される。
引数
        path:アプリケーションデーターが保存されているフォルダー
        kp:KABU型への配列
        code_max:銘柄数

TCHAR* get_data(TCHAR* buf,int sz,KABU* kp,int kabu_num,int ext_num,int n);

指標データを文字列で得る
引数
        buf:文字列のバッファ
        sz:最大文字数
        kp:KABU型への配列
        kabu_num:kpの要素位置
        ext_max:営業日ベースの日付位置
        n:指標番号

void calc_init(KABU* kp,int code_max);

指標計算時が必要な時に呼び出される。最初の1回だけ呼び出される。
引数
        kp:KABU型への配列
        kabu_num:kpの要素位置

void calc(KABU* kp,int kabu_num);

指標計算時が必要な時に呼び出される。銘柄ごとに呼び出される。
引数
        kp:KABU型への配列
        kabu_num:kpの要素位置

int listview(KABU* k,HWND hList,int itemNo,int subItem,int kabu_num,int num);

リストビューに指標を表示
引数
        k:KABU型への配列
        hList:リストビューのハンドル
        itemNo:リストビューの行位置
        subItem:リストビューの列位置
        kabu_num:kの要素位置
        num:営業日ベースの日付位置
戻り値
        この関数で設定された列終了位置+1

void listview_sort_init(int n);

リストビューのカラムをクリックした場合に呼び出される。ソート用の比較関数のためにソート方向を設定する。
引数
        n:指標番号

int listview_cmp(TCHAR* buf1,TCHAR* buf2,int n);

リストビューのカラムをクリックした場合に呼び出される。ソート用の比較関数
引数
        buf1:リストビューのセルの文字列
        buf2:リストビューのセルの文字列
        n:指標番号
戻り値
        比較結果

void cond_dialog(HINSTANCE hInst, HWND hList,int num,int index);

検索条件設定リストビューをクリックした場合に呼び出される、検索条件設定ダイアログ表示関数
引数
   hInst:アプリケーションのインタンス
        hList:リストビューのハンドル
        num:絞り込み条件数(買い1,買い2,...売り5)
        index:指標番号

void cond_view_set(HWND hList, int iSubItem, int num, int index);

検索条件をリストビューに表示
引数
   hList:リストビューのハンドル
        subItem:リストビューの列開始位置
        num:絞り込み条件数(買い1,買い2,...売り5)
        index:指標番号
        

int cond_valid_chk(int num,int n);

検索条件が有効か無効化を返す
引数
   n:指標番号
        num:絞り込み条件数(買い1,買い2,...売り5)
戻り値
   TRUE:有効 FALSE:無効        

int cmp(KABU* kp,int num,int kabu_num,int epos,int index);

検索条件に一致する場合はTRUEを返す
引数
   kp:KABU方へのポインタ
        num:絞り込み条件数(買い1,買い2,...売り5)
        kabu_num:銘柄の位置
        epos:営業日ベースの日付位置
        index:指標番号
戻り値
   TRUE:一致 FALSE:不一致

int chat_init(CHAT_BASE& chat_base,int kabu_num,int es,int ee);

チャート表示開始時に呼び出される。この段階で描画をする場合は、FALSEを返す。
引数
   chat_base:チャート表示に必要な表示範囲等のデータが格納されている
                  chat_base.argにKABU_INDEX_CHAT_ARGの中に指標番号(index)が格納されている
        kabu_num:銘柄の位置
        es:営業日ベースの始点日付位置
        ee:営業日ベースの終点日付位置
戻り値
   TRUE:chat_drawで描画する FALSE:chat_initで描画したのでchat_drawで描画しない

 

void chat_draw(CHAT_BASE& chat_base,int kabu_num,int n,int wx,int index);

チャート表示時に1日分のデータを表示する。y座標はchat_base.get_yで取得する。
引数
   chat_base:チャート表示に必要な表示範囲等のデータが格納されている
                  chat_base.argにKABU_INDEX_CHAT_ARGの中に指標番号(index)が格納されている
        kabu_num:銘柄の位置
        n:営業日ベースの日付位置
        wx:指標を描画するx座標の中心
        index:指標番号

bool alloc(int code_max,int len,int cond_num);

指標の配列を確保する場合に呼び出される。
引数
   code_max:銘柄数
        len:営業日数
        cond_num:絞り込み条件数(買い1,買い2,...売り5)

bool free(void);

指標の配列を解放する場合に呼び出される。

void chat_range(KABU* kp,int s,int e,int kabu_num,int* ymin,int* ymax,int index);

チャート表示の最大値と最小値を取得
引数
   kp:KABU型へのポインタ
        s:営業日ベースの始点日付位置
        e:営業日ベースの終点日付位置
        kabu_num:銘柄の位置
        ymin:最小値を保存するint方へのポインタ
        ymax:最大値を保存するint方へのポインタ

 

~KABU_INDEX();

デストラクタ

検索条件等の保存先

検索条件の保存は、各関数の引数pathで示されるフォルダの中に各自でフォルダーを作成して、その中にファイルを作成して保存してください。