株探検 カスタム式の書き方
〜〜より高度なスクリーニング〜〜

カスタム式を使わなくても、さまざまなスクリーニングができます。
カスタム式を使うと、窓を開けての上昇をスクリーニングしたり、さらに高度なことも可能です。

株探検のカスタム式はC#言語です。
プログラミングがはじめての方には、少々難しいかもしれません。
しかし、ある程度習得すればスクリーニングの範囲がとても広がりますので、ぜひ挑戦していたければ幸いです。

さらに理解を深めるために、
C# for 株探検ではC#の文法を主体に説明しています。
またTIPS集のサンプル集をご覧いただけます。
詳細は株探検インストール後、マニュアルをご覧ください。
今後このページも充実させていく予定です。

■基本手順

終値がボリンジャーバンドの-2σ〜-σでスクリーニングしてみます。

※このスクリーニングはv2.2.28から、カスタム式を使わなくてもできるようになりましたが、 カスタム式の基本的な使い方の説明となります。

1)まずスクリーニングダイアログをだします。
メニュー上部の[編集→スクリーニング]です。

2)ボリンジャーバンドを条件に加えます。
を参照ください。[条件の追加]ボタンで図のようになります。
ボリンジャーバンドが条件に追加されると、こののようになります。
図の字がつぶれている場合は、ウィンドウを大きくしてください。

3)ダイアログの[条件リストのみ]を[カスタム式のみ]にして-σと-2σに変数を入力します。
をご参照ください。ここでは、-σをS1、-2σをS2という変数名にしています。
※変数名は、先頭が英字か_(アンダースコア)でないといけません。後は英字、数字、_ です。

4)次にカスタム式を入力します。
さきほどのの「カスタム式」という部分に入力します。
式の詳細は以下のようになります。
if( S2 <= Close(0) && Close(0) <= S1 ) return true; // -2σが終値より小さいか同じ、かつ、終値が-σより小さいか同じなら抽出。 return false; // そうでないなら抽出対象じゃない。
Close(0)は今日の終値を表します。Close(-1)なら昨日の終値になります。
S1,S2は先ほど設定した-σと-2σの値を保持しています。

if文は、条件に一致していたら次の文を実行します。if文についてはこちらを参照ください。
「return true;」でスクリーニング条件に合致したことを示し、ここで式は終了します。
「return false;」は条件に合致しなかったことを示します。
※「//」の後ろはコメントです。

5)ボリンジャーバンドのパラメータを設定します。
では平均本数が25日ですが、必要なら変更してください。

6)これで[計算開始]ボタンをクリックするとスクリーニングが始まります。
このとき「基準日」を確認してから開始してください。
通常「基準日」は今日の日付にします。基準日を変えることで過去のスクリーニングができます。
※株価データがない日を基準日にして開始するとなにも抽出できないので、株価データ更新を先にしてください。

7)完了するとグループリストが「スクリーニング結果」に変化し、抽出銘柄がリストされます。
こののようになります。

上位200と下位200の2つのリストができています。なお今回の例では-σについてランキングされています。
ランキングの詳細はこちらをご覧ください。

・週足で計算するには?

ダイアログの「条件に与える値」の右と、「カスタム式」エリアの右側の「足の種類」をにします。
ボリンジャーバンドは週足で、カスタム式は日足でということもできますが、まずそんなことはしないと思います。

■良く使う式は関数に!

たとえば「終値上昇率」は良く使います。これを関数としてまとめておけば、今後、毎回長い式を書かなくても済みます。
終値上昇率が10%以上のものを抽出するには、スクリーニングダイアログの「条件リスト」から 「終値上昇率」を選んで10以上を指定すれば出来てしまいますが、説明のためにカスタム式でやってみます。

終値上昇率は、「(Close(0)-Close(-1))/Close(-1)*100」で求まります。
カスタム式を書くと、次のようになります。
// 終値上昇率10%以上を抽出。 double up = (Close(0)-Close(-1))/Close(-1)*100; if( up < 10 ) return false; return true;
※「double up」は、「upというdouble(実数)の変数を使います」という意味です。
※ 「double up = 〜」で、〜の結果を変数upに入力しています。以後式が終わるまでupは終値上昇率の値を保持します。
※ 「//」の後ろはコメントになります。

もし仮に終値上昇率を求めるCloseUpRateという関数があったら、カスタム式は次のようになります。
// 終値上昇率10%以上を抽出。 $FUNC CloseUpRate.efunc // ここは後で説明します。 if( CloseUpRate(0) < 10 ) return false; return true;

CloseUpRate関数の中身は次のようになります。
double CloseUpRate(int offset) // offsetは整数(int)の変数として受取ます。 { return (Close(offset)-Close(offset-1))/Close(offset-1)*100; }
CloseUpRate(〜)は計算結果としてdouble値を返します。ですので関数の先頭にdoubleがついています。
括弧内の「int offset」は何時の上昇率を計算するかを指定するものです。
この関数を利用する側が、CloseUpRate(0)とすれば今日の上昇率、CloseUpRate(-1)とすれば昨日の上昇率を計算できます。
「return 〜」で計算結果を返します。

このCloseUpRate(〜)関数をカスタム式で使うには、カスタム式内に「$FUNC CloseUpRate.efunc」という文が必要になります。
この$FUNC文は「関数が記述されたファイルを使います」という宣言をします。

CloseUpRate.efuncは普通のテキストファイルで、中身に上記の関数を記述しておきます。
CloseUpRate.efuncファイルはデータベースフォルダのKitフォルダ内に保存しておきます。
これで今後終値上昇率はいつも、CloseUpRate(0)やCloseUpRate(-1)という形で利用できます。
複雑な式になればなるほど、関数にしておくと楽になっていきます。

■つづく・・・

株探検ではさらに高度なスクリーニングができますが、徐々に説明を追加していきます。


■ランキングについて

において「計算結果」エリアで、-σのほうが-2σより上にあるため-σでランキングされます。
-2σのランキングも見たい場合は、次のようにするとできます。
・スクリーニングダイアログ下の「上位」を5000、「下位」を0にします。
これで条件にマッチしたものはすべて上位に入ります。(下位は不要になるので0です。)
グループリスト上部の-σや-2σという部分をクリックすると、その項目で並び替えができます。

■カスタム式でエラーがあったら

下図のようにエラー行がわかります。エラー行かその前の行に問題があります。
また1つのエラーで、いくつもエラーがでることがありますので、最初のエラーから修正していくのがこつです。