山本ワールド
株漬キラーヘルプ ユーザー拡張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で示されるフォルダの中に各自でフォルダーを作成して、その中にファイルを作成して保存してください。