マネックス証券さんからEasyLanguageのホームスタディコースをいただいた記事を掲載しましたがあの後正月の間に一通り目を通してみました。
そして読み始めてすぐにコーヒー牛乳をこぼしてしまい、全ページに渡りページとページがくっついてしまうアクシデント発生。
コーヒー牛乳って接着剤になるんですね。
なんとか160ページ分を丁寧に1ページづつ剥がしていくと、ほどよく使い込んだ感じになり貫禄が出ました。頭には全く入ってませんが。。。
読み始めは楽勝だと舐めていたわけですが、後半は難しくてまったく頭に入らず、寝る前に読んで睡眠剤として活用している今日このごろです。○| ̄|_
それでもですよ、どげんかせんといかんと思いまして、インジケーターを1つ作ってみようじゃあないかと一念発起してみました。
※ここに書かれた内容については動作を保証するものではありませんし、不具合について責任を取りません。ご利用される方は自己で責任が取れる運用をお願いします。
目次
作るインジケーターはBB7
最近の私はボリンジャーバンドの1~3σを用いたトレードをしています.
トレードステーションではボリンジャーバンドをまとめて表示できるものがないので、これを作ってみたいと思います。
【作りたいインジケーターの仕様】
- ±1σ、±2σ、±3σと移動平均線の計7本を表示する、名付けてBB7!
- 移動平均の計算期間を変更できるようにしたい。
- 各σの数字はあとで調整できるようにしたい。
- 各σのラインの表示と非表示を切り替えられるようにしたい。
大雑把ですが、こんな感じでいきたいと思います。
アラートの発生とか難しいのはまたの機会に先送りして、チャートに表示する機能のみを作りたいと思います。
プログラムに書くことをまとめてみる
いきなり白紙から作れる能力は到底ないので、標準で用意されているボリンジャーバンドのインジケータや他簡単なものを参考にして頑張りたいところです。
トレステのインジケーターのプログラムを比較として載せて説明したいと思いましたが、インジケータなどの文末に”無断複写·転載を禁じます”と書かれていました。残念。
なので自分なりに考えて組み立てたことを書いていきたいと思います。
プログラムの全体の書き順はこんな感じ。
inputs:
チャートにインジケーターを表示した後で、設定で簡単に変更できるようにしたい変数をここに書く。
(σの数値変更、各σのラインの表示・非表示など)
vars:
変数の宣言をする。
移動平均の計算をする。
標準偏差の計算をする。
移動平均、標準偏差を元に各シグマについて計算をする。
計算した数値をplot文でチャートにプロットする。
大雑把に書くとこんな感じでしょうか。
inputsの中身を考える
テクニカル挿入後に設定で変更したい項目は次の通り。
設定で変更したい変数については、inputsの後に記述します。
カッコ内は初期値になります。
- 移動平均の期間(10)
- σ1の数値(1)
- σ2の数値(2)
- σ3の数値(3)
- σ1の表示・非表示(true)
- σ2の表示・非表示(true)
- σ3の表示・非表示(true)
- 移動平均線の表示・非表示(true)
表示・非表示は”ture”なら表示、”false”なら非表示というように真・偽の条件で切り替えたいと思います。
【inputs部分のプログラム】
inputs:
double length( 10 ) [DisplayName = “length”],
double sigma1( 1 ) [DisplayName = “σ1”],
double sigma2( 2 ) [DisplayName = “σ2”],
double sigma3( 3 ) [DisplayName = “σ3”],
bool sigmadisp1( true ) [DisplayName = “σ1の表示(true/false)”],
bool sigmadisp2( true ) [DisplayName = “σ2の表示(true/false)”],
bool sigmadisp3( true ) [DisplayName = “σ3の表示(true/false)”],
bool avgdisp( true ) [DisplayName = “移動平均線の表示(true/false)”];
length、sigma、sigmadispなどが自分で決めたプログラム中で使う変数の名前です。
その前にあるintとboolはまたの機会に説明しますが、ここでは気にしないでください。
DisplayNameは、設定画面で表示される名前なので、分かりやすい言葉で書いたほうが良いと思います。
varsで変数を宣言する
宣言というと大げさですが、プログラムの中で使う変数を決めていきます。
使う変数は以下の通り。
- 移動平均の計算結果 … Avg
- 標準偏差の計算結果 … sd
- σ+1~+3 … U1~U3
- σ-1~-3 … L1~L3
【vars部分のプログラム】
vars:
double Avg( 0 ),
double sd( 0 ),
double L1( 0 ),
double U1( 0 ),
double L2( 0 ),
double U2( 0 ),
double L3( 0 ),
double U3( 0 );
カッコ内は初期値になります。全てゼロにしています。
前に付いているdoubleは気にしないでください。
移動平均と標準偏差を計算する
さて、inputsとvarsで変数を準備し終えましたので、計算に入ります。
移動平均と標準偏差はEasyLanguageにそれぞれ対応した関数がありますので、今回はこれらを利用します。
移動平均と標準偏差を計算したら、U1~U3とL1~L3の変数に結果を格納していきます。
//マークは、コメントアウトになります。この部分はコンピューターは飛ばして解釈しますので覚書などを書いておいたりします。
【計算式部分のプログラム】
Avg = AverageFC( Close, length ) ; //AverageFC … 移動平均の関数
sd = StandardDev( Close, length, 1 ) ; //StandardDev … 標準偏差の関数
U1 = Avg + sigma1 * sd ;
L1 = Avg + -sigma1 * sd ;
U2 = Avg + sigma2 * sd ;
L2 = Avg + -sigma2 * sd ;
U3 = Avg + sigma3 * sd ;
L3 = Avg + -sigma3 * sd ;
Avgには、終値とinputsで指定したlength(10)より計算された、”移動平均”が格納されます。
sdには、同じく”標準偏差”が格納されます。
U1~U3とL1~L3には、Avgなどから計算された”σの値”が格納されます。
この計算式は表示された足の数だけループして計算されてチャートにプロットされることになります。
計算結果のプロット
計算された結果は変数に格納されて、最後はチャートにプロットされていきます。
といっても、とても短い時間のできごとなので見た目には一瞬で表示されて見えます。
ここで、最初に書いた仕様の1つ思い出しましょう。
各σラインと移動平均は、設定で表示・非表示を切り替えたいと書きました。
今回のボリンジャーバンドはσ1~3まで表示されますが、σ3は使わないから非表示にしたいと思った時にプログラムをいじらなくても設定でオン・オフできるようにとの工夫からです。
このオンオフってどうやるの?といったところですね。
ここはif文を使います。
「もし~だったら、こうしてね」という条件分岐の命令です。
プロット部分のプログラムを見てみましょう。
If sigmadisp1 = true then begin
Plot1( U1, !( “+σ1” )) ;
Plot2( L1, !( “-σ1” )) ;
end;
If sigmadisp2 = true then begin
Plot3( U2, !( “+σ2” )) ;
Plot4( L2, !( “-σ2” )) ;
end;
If sigmadisp3 = true then begin
Plot5( U3, !( “+σ3” )) ;
Plot6( L3, !( “-σ3” )) ;
end;
If avgdisp = true then begin
Plot7( Avg, !( “移動平均線” )) ;
end;
Plotと書かれた部分がプロットの命令になります。
U1とL1、U2とL2、U3とL3ときて最後にAvgをプロットしています。
そして各プロット文はIF文で囲われています。
それぞれのIFについて、「falseだったら”then begin”の後の命令を飛ばす」ので非表示になります。初期値は全てtrueになっていますので、全て表示されます。
完成したプログラム
inputs:
double length( 10 ) [DisplayName = “length”],
double sigma1( 1 ) [DisplayName = “σ1”],
double sigma2( 2 ) [DisplayName = “σ2”],
double sigma3( 3 ) [DisplayName = “σ3”],
bool sigmadisp1( true ) [DisplayName = “σ1の表示(true/false)”],
bool sigmadisp2( true ) [DisplayName = “σ2の表示(true/false)”],
bool sigmadisp3( true ) [DisplayName = “σ3の表示(true/false)”],
bool avgdisp( true ) [DisplayName = “移動平均線の表示(true/false)”];
vars:
double Avg( 0 ),
double sd( 0 ),
double L1( 0 ),
double U1( 0 ),
double L2( 0 ),
double U2( 0 ),
double L3( 0 ),
double U3( 0 );
Avg = AverageFC( Close, length ) ; //AverageFC … 移動平均の関数
sd = StandardDev( Close, length, 1 ) ; //StandardDev … 標準偏差の関数
U1 = Avg + sigma1 * sd ;
L1 = Avg + -sigma1 * sd ;
U2 = Avg + sigma2 * sd ;
L2 = Avg + -sigma2 * sd ;
U3 = Avg + sigma3 * sd ;
L3 = Avg + -sigma3 * sd ;
If sigmadisp1 = true then begin
Plot1( U1, !( “+σ1” )) ;
Plot2( L1, !( “-σ1” )) ;
end;
If sigmadisp2 = true then begin
Plot3( U2, !( “+σ2” )) ;
Plot4( L2, !( “-σ2” )) ;
end;
If sigmadisp3 = true then begin
Plot5( U3, !( “+σ3” )) ;
Plot6( L3, !( “-σ3” )) ;
end;
If avgdisp = true then begin
Plot7( Avg, !( “移動平均線” )) ;
end;
一見長くて面倒な印象を受けるかもしれませんが、よく見ると繰り返しているような部分がたくさんありますので、それほど複雑なものではないことが分かるかと思います。
これを保存すれば完了です。
EasyLanguageの画面で線の色やもろもろを設定してから保存すればあとで楽ですが、今回はこの部分の説明は端折りたいと思います。
BB7の使い方
いつもの通り設定からいじるだけなので、分かっている方は触ってもらった方が早いです。
下の画像の色は表示後に変更してあります。
【ボリンジャーバンド7本を表示したところ】
お好みで見た目を変更してください。
”スタイル”タブの”プロット”には、プログラムで書いた文言が並んでいるのが分かります。
”入力”タブにはinputsで宣言した設定が並んでいます。
プログラムでカッコ内に書いた初期値が、”値”として表示されています。
σ1~σ3は、小数点の数値を入れることができるので使い勝手が良いですよね。
値が”true”となっている項目は表示・非表示の機能で”true”では表示されています。
非表示にしたい場合は値を”false”と入力します。
以上になります。
EasyLanguageに慣れていないのですごく簡単なものになりました。
もっと効率の良い書き方もあると思いますが、見よう見まね
また機会があったら他のプログラムに挑戦したいと思います。
駆け足で進めてしまったので、プログラムに慣れていない方はさっぱりだったかもしれません。最初からまとめれば分かりやすかったかもしれません。
ただ、最初って覚えることがいくつかあって目的がないと飽きちゃうんですよね。
どうやってまとめていこうかこちらも模索しながらかな。