次にマクロによって、検証シート上にオリジナルの売買ルールを描くようにするマクロの書き方を解説します。
エントリールール「移動平均線のクロス」を描くマクロは既に解説しました。
 このマクロを改造して、あなただけのオリジナルのエントリールールを自動で描けるようになりましょう。
 まず、エントリールール「移動平均線のクロス」のコードを見ながら、中身の解説をいたします。ゴシックのフォントで書き込まれているテキストは実際にはコードの中には、含まれておりませんので、ご注意ください。

  これを読んでいただいたあとに、移動平均線のクロスのマクロをボリンジャーバンドのマクロに書き換えてみましょう。

Sub ENTRY_SMA_CROSS()
※マクロを実行する際に、ウィンドウに表示されるマクロ名がsubと ()間のテキストです。マクロを改造する際には、マクロ名を書き換えるのも忘れずに行ってください。
' エントリールール「移動平均線クロス」に書き換えるマクロ
Dim lastdata As Long
'計算中の画面更新を止めて処理速度を早くする
Application.ScreenUpdating = False
'「検証シート」内の価格データの入っている最終行の行数を変数に代入する
Sheets("検証シート").Select
lastdata = Range("A65356").End(xlUp).Row

'「検証シート」に移動平均線のワークシート関数を書き込み、価格データの入っている最終行までコピーする
Range("K21").Formula = "=IF(ISERROR(AVERAGE(OFFSET(E21,-評価シート!$A$4+1,0):E21)),"""",AVERAGE(OFFSET(E21,-評価シート!$A$4+1,0):E21))"
※まず、セルK21に短期の移動平均線のワークシート関数を書き込みます。ワークシート関数内でブランクを表す””を、コード内で表現する際には、””をさらに””で囲むため、””””となっております。
Range("K21").AutoFillDestination:=Range("K21",Range("A65536").End(xlUp).Offset(, 10))
 
※セルK21に書き込まれたマクロを価格データの入っている最終行まで、オートフィルでコピーするコードです。つまり、オリジナルのエントリールールを自動で描く際には、21行目のワークシート関数だけをコード内にコピーすれば良いのです。
 
(中略)
Range("Q21").Formula = "="""""
Range("Q21").AutoFillDestination:=Range("q21",Range("A65536").End(xlUp).Offset(, 16))
 
※Q列は、移動平均線のクロスを表現するうえでは使われない列ですので、セルQ21にブランクを書き込み、価格データの入っている最終行までコピーします。このように、他のエントリーサインを書き込む際に、もし列が余った場合は、必ずブランクを書き込み、コピーを行うマクロを書き込んでください。
 
Range("R21").Formula="=IF(OR(V21=0,J21="""",L21="""",K21="""",S21<>""""),"""",IF(AND(K21<L21,L20<K20),""sell"",IF(AND(K21>L21,L20>K20),""buy"","""")))"
Range("R21").AutoFillDestination:=Range("R21",Range("A65536").End(xlUp).Offset(, 17))

※売買サインを書き込むコードです。移動平均線と同じように、21行目のワークシート関数をコード内に書き込んでおき、価格データの入っている最終行までコピーしています。

Range("S21").Formula="=IF(OR(AD20<>"""",AC20<>""""),"""",IF(OR(R20=""sell"",R20=""buy""),B21,S20))"
Range("S21").AutoFillDestination:=Range("S21",Range("A65536").End(xlUp).Offset(, 18))

※同じように、約定値段の列のコードです。マクロを改造する際には、この約定値段列まで、しっかりコード内に書き込んでください。
 
'「検証シート」上部に移動平均線列の解説を書き込む
Range("K1").Formula = "短期SMA"
Range("K2").Formula = ""
Range("L1").Formula = "長期SMA"
Range("L2").Formula = ""
(中略)
Range("R1").Formula = "エントリーサイン"
Range("R2").Formula = ""
 
※検証シート内の上部に書き込まれているテクニカル指標が何かという説明を書き込むマクロです。ほかのエントリールールに書き換える際には、それぞれ算出される指標の名前を書き込んでください。
 
'価格データが入っている最終行より下の行を削除する
Range(Cells(lastdata + 1, 1), Cells(65536, 1)).EntireRow.Delete
Range("ar21").AutoFillDestination:=Range("ar21",Range("a65536").End(xlUp).Offset(, 43))
'評価シート内の変数、エントリールールの解説を書き換える
Sheets("評価シート").Select

Range("A2").Formula = "SMA変数"
Range("A3").Formula = "短期SMA"
Range("A4").Formula = "5"
Range("A5").Formula = "長期SMA"
Range("A6").Formula = "10"
Range("A7").Formula = ""
Range("A8").Formula = ""
Range("I3").Formula = "移動平均線クロス"
 
※評価シート内に、検証シート上に何のエントリールールが書き込まれているのかを書き込むマクロです。短期移動平均線の算出には、評価シートのセルA4を絶対参照してありますので、セルA4には「5」と書き込むマクロになっているのがわかります。
 
'計算中の画面更新の停止を解除する
Application.ScreenUpdating = False
MsgBox ("エントリールール「移動平均線のクロス」の書き込みが完了しました")
 
※計算が終了したときに、ユーザーに知らせるメッセージを指定するマクロです。この場合、「移動平均線のクロス」が書き込まれた訳ですから、上記のようなメッセージを表示させるようになっております。
End Sub
 
以上で、「移動平均線のクロス」のマクロの解説は終わりです。
オリジナルのエントリールールを書き込む際には、ここで解説した箇所を書き換えることになります。
 
コツを振り返ってまとめてみましょう。
1.マクロを使ってワークシート関数を書き込む際に,「""」を使用する場合、「""""」として書きこむ。
2.マクロで検証シートにワークシート関数を書き込む際には、21行目に書き込み、それをオートフィルでデータの入っている最終行までコピーする。
3.余った列には、ブランクを書き込み、オートフィルでデータの入っている最終行までコピーする。
4.約定値段の列のワークシート関数までマクロで書き込む。
5.書き込んだワークシート関数が何かわかるように、検証シート1行目、2行目に名前を書き込む。
では、ここで「移動平均線のクロス」のマクロを、ボリンジャーバンドによるエントリールールに書き換えるマクロに改造してみましょう。