1. 検証シート内を手作業で書き換える
 検証シート上にワークシート関数を用いてボリンジャーバンド、予備列のブランク、エントリーサイン、約定値段、エントリールール列上部の解説を書き換えて下さい。検証シート上でセルが黄色くなっているセルがその箇所です。
 
書き換えると「検証シート」内の21行目のワークシート関数は次のようになります。

K21
=IF(ISERROR(AVERAGE(OFFSET(E21,-評価シート!$A$4+1,0):E21)),"",AVERAGE(OFFSET(E21,-評価シート!$A$4+1,0):E21))

L21
=IF(ISERROR(K21+評価シート!$A$6*STDEV(OFFSET(E21,-評価シート!$A$4+1,0):E21)),"",K21+評価シート!$A$6*STDEV(OFFSET(E21,-評価シート!$A$4+1,0):E21))

M21
=IF(ISERROR(K21-評価シート!$A$6*STDEV(OFFSET(E21,-評価シート!$A$4+1,0):E21)),"",K21-評価シート!$A$6*STDEV(OFFSET(E21,-評価シート!$A$4+1,0):E21))

N21~Q21
=""

R21
=IF(OR(V21=0,K21="",S21<>""),"",IF(AND(M21>E21,M20<E20),"sell",IF(AND(L21<E21,L20>E2
111
0),"buy","")))

S21
=IF(OR(AD20<>"",AC20<>""),"",IF(OR(R20="sell",R20="buy"),B21,S20))

2.評価シート内を手作業で書き換える
評価シートのセルA2~A8とセルI2~I5を手作業で書き換えます。

3.VBEを開きコードを改造する

「ENTRY_SMA_CROSS」を開き、コピーして別の場所を貼り付け、前述した手順に従いコードを改造していきます。

改造が終了したコードは、コードは、「ENTRY_B_BAND」でも見ることが可能です。

では、書き換えた箇所のコードを見てみましょう。太いフォントで書き込まれたテキストは実際のコードの中にはございませんので、ご注意ください。

Sub ENTRY_B_BAND()
※マクロ名をボリンジャーバンドであるとわかるように書き換えました。
' エントリーサイン「ボリンジャーバンド」に書き換えるマクロ
※コード内の解説も書き換えておくと便利です。
(中略)
'検証シートにボリンジャーバンドのワークシート関数を書き込む
Range("K21").Formula = "=IF(ISERROR(AVERAGE(OFFSET(E21,-評価シート!$A$4+1,0):E21)),"""",AVERAGE(OFFSET(E21,-評価シート!$A$4+1,0):E21))"
※セルK21にボリンジャーバンドを書き込んだ「検証シート」内セルK21からコピペします。ペーストする際には、ブランクを表す””を””””と書き換えることを忘れないようにしてください。

Range("K21").AutoFillDestination:=Range("K21",Range("A65536").End(xlUp).Offset(, 10))
※K21をオートフィルするマクロは書き換える必要がありません。
 
Range("L21").Formula = "=IF(ISERROR(K21+評価シート!$A$6*STDEV(OFFSET(E21,-評価シート!$A$4+1,0):E21)),"""",K21+評価シート!$A$6*STDEV(OFFSET(E21,-評価シート!$A$4+1,0):E21))"
Range("L21").AutoFillDestination:=Range("L21",Range("A65536").End(xlUp).Offset(, 11))
Range("M21").Formula = "=IF(ISERROR(K21-評価シート!$A$6*STDEV(OFFSET(E21,-評価シート!$A$4+1,0):E21)),"""",K21-評価シート!$A$6*STDEV(OFFSET(E21,-評価シート!$A$4+1,0):E21))"
Range("M21").AutoFillDestination:=Range("M21",Range("A65536").End(xlUp).Offset(, 12)) 
※セルL21、M21のワークシート関数も同様にコピーします。
 
Range("N21").Formula=""""" Range("N21").AutoFillDestination:=Range("N21",Range("A65536").End(xlUp).Offset(, 13))
※N21~Q21までは、ブランクを書き込む予備列となるので、ワークシート関数はありません。
(中略)
Range("R21").Formula="=IF(OR(K21="""",S21<>""""),"""",IF(AND(M21>E21,M20<E20),""sell"",IF(AND(L21<E21,L20>E20),""buy"","""")))"
Range("R21").AutoFillDestination:=Range("R21", Range("A65536").End(xlUp).Offset(, 17))
113
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 = "HIバンド"
Range("L2").Formula = ""
Range("M1").Formula = "LOWバンド"
Range("M2").Formula = ""
※ボリンジャーバンドを構成する単純移動平均線、標準偏差バンドの列に名前を書き込みます。
(中略)
'評価シート内の変数などをボリンジャーバンド用に書き換える
Sheets("評価シート").Select
Range("A2").Formula = "ボリンジャーバンド変数"
Range("A3").Formula = "SMA"
Range("A4").Formula = "30"
Range("A5").Formula = "標準偏差"
Range("A6").Formula = "2"
Range("A7").Formula = ""
Range("A8").Formula = ""
Range("I3").Formula = "ボリンジャーバンド"

※評価シート内に、ボリンジャーバンドを構成する単純移動平均線、標準偏差バンドの名前、指標を算出する変数の初期設定値などを書き込みます。
 
MsgBox ("エントリーサイン「ボリンジャーバンド」の書き込みが完了しました")

※ボリンジャーバンドの書き込みが終了したのですから、その旨をユーザーに知らせるメッセージを表示させます。
 
End Sub
 
以上で、エントリールールの改造をすることができました。
次にイグジットルールを書き換えてみましょう。
まず、ATRイグジットのプロシージャを見ながら、その意味を解説いたします。太いフォントで書き込まれているテキストは実際にはコードの中に含まれておりませんので、ご注意ください。
Sub EXIT_ATR()
' イグジットサイン「ATRイグジット」に書き換えるマクロ
※マクロを実行する際に、ウィンドウに表示されるマクロ名がsubと ()間のテキストです。マクロを改造する際には、マクロ名を書き換えるのも忘れずに行ってください。
Dim lastdata As Long
'計算中の画面更新を止めて処理速度を早くする
Application.ScreenUpdating = False
'「検証シート」内の価格データが入っている最終行の行数を変数に代入する
Sheets("検証シート").Select
lastdata = Range("A65356").End(xlUp).Row
'「検証シート」にATRイグジットのワークシート関数を書き込み、価格データの入っている最終行までコピーする
115
Range("X21").Formula = "=IF(S21="""","""",IF(R20=""sell"",S21-ROUND(J20*評価シート!$C$9, 評価シート!$C$21),IF(R20=""buy"",S21+ROUND(J20*評価シート!$C$9, 評価シート!$C$21),X20)))"
※まず、セルX21にイグジット(利食い)を表すのークシート関数を書き込みます。ワークシート関数内でブランクを表す””を、コード内で表現する際には、””をさらに””で囲むため、””””となっております。
Range("X21").AutoFillDestination:=Range("X21",Range("A65536").End(xlUp).Offset(, 23))
※セルX21に書き込まれたマクロを価格データの入っている最終行まで、オートフィルでコピーするステートメントです。オリジナルのイグジットルールを自動で書く際には、21行目のワークシート関数だけをステートメント内にコピーすれば良いのです。
(中略)
Range("Z21").Formula = "="""""
Range("Z21").AutoFillDestination:=Range("Z21",Range("A65536").End(xlUp).Offset(, 25))
※予備列には、ブランクを書き込みます。
(中略)
Range("AF21").Formula = "=IF(AND(U21=""buy"",AC21=""opLC""),(B21-S21)*評価シート!$C$15*W21-評価シート!$C$17*W21,IF(AND(U21=""buy"",AC21=""LC""),(Y21-S21)*評価シート!$C$15*W21-評価シート!$C$17*W21,IF(AND(U20=""buy"",AD20=""EXIT""),(B21-S20)*評価シート!$C$15*W20-評価シート!$C$17*W20,"""")))"
Range("AF21").AutoFillDestination:=Range("AF21",Range("A65536").End(xlUp).Offset(, 31))
※イグジットルールを書き換える際には、必ずAF列までマクロで書き込むようにします。

'検証シート上部にEXIT列の解説を書き込む
Range("X1").Formula = "ATR_EXIT"
Range("X2").Formula = ""
(中略)
Range("AC1").Formula = "LOSSCUTサイン"
Range("AC1").Formula = ""
'価格データが入っている最終行より下の行を削除する
Range(Cells(lastdata + 1, 1), Cells(65536, 1)).EntireRow.Delete
Range("ar21").AutoFillDestination:=Range("ar21",Range("a65536").End(xlUp).Offset(, 43))
'評価シート内の変数やイグジットルールの解説をATRイグジット用に書き換える
Sheets("評価シート").Select
Range("C8").Formula = "EXIT変数"
Range("C9").Formula = "2"
Range("C10").Formula = "LOSSCUT変数"
Range("C11").Formula = "2"
Range("I5").Formula = "ATRイグジット"
※評価シート内に、検証シート上に何のイグジットルールが書き込まれているのかを書き込むマクロです。
MsgBox ("イグジットルール「ATRイグジット」の書き込みが完了しました")
※計算が終了したときに、ユーザーに知らせるメッセージを指定するマクロです。この場合、「ATRイグジット」が書き込まれた訳ですから、上記のようなメッセージを表示させるようになっております。
End Sub

以上で、「EXIT_ATR」のマクロの解説は終わりです。
オリジナルのエントリールールを書き込む際には、ここで解説した箇所を書き換えることになります。
では、ここでATRイグジットのプロシージャを、トレーリングストップによるイグジットルールに書き換えるマクロに改造してみましょう。
 
1. 検証シート内を手作業で書き換える
 
検証シート上にワークシート関数を用いてトレーリングストップ、予備列のブランク、イグジットサイン、ロスカットサイン、損益、イグジットルール列上部の解説を書き換えて下さい。
検証シート上でセルが緑色になっている列がその箇所です。
 
2.評価シート内を手作業で書き換える
評価シートのセルC8~C11とセルI5を手作業で書き換えます。
 
3.VBEを開きコードを改造する
「EXIT_ATR」を開き、プロシージャをコピーして別の場所に新しいプロシージャとして貼り付け、前述した手順に従いコードを改造していきます。
改造が終了したコードは、コードは、「EXIT_T_STOP」でも見ることが可能です。
では、書き換えた箇所のコードを見てみましょう。太いフォントで書き込まれたテキストは実際のコードの中にはございませんので、ご注意ください。
 
Sub EXIT_T_STOP()
' イグジットサイン「トレーリングストップ」に書き換えるマクロ
Dim lastdata As Long

'計算中の画面更新を止めて処理速度を早くする
Application.ScreenUpdating = False
Sheets("検証シート").Select
lastdata = Range("A65356").End(xlUp).Row
'検証シートにトレーリングストップのワークシート関数を書き込む
Range("X21").Formula = "=IF(S21="""","""",IF(R20=""sell"",S21-J20*評価シート!$C$9,IF(R20=""buy"",S21+J20*評価シート!$C$9,X20)))"
Range("X21").AutoFillDestination:=Range("X21",Range("A65536").End(xlUp).Offset(, 23))
Range("Y21").Formula = ""
Range("Y21").Formula="=IF(S21="""","""",IF(AND(T21>1,U21=""sell"",Y20>B21+J20),B21+J20,IF(AND(T21>1,U21=""buy"",Y20<B21-J20),B21-J20,IF(R20=""sell"",B21+ROUND(J20*評価シート!$C$11,0),IF(R20=""buy"",S21-ROUND(J20*評価シート!$C$11,0),Y20)))))"
Range("Y21").AutoFillDestination:=Range("Y21",Range("A65536").End(xlUp).Offset(, 24))
Range("Z21").Formula="=""""" Range("Z21").AutoFillDestination:=Range("Z21",Range("A65536").End(xlUp).Offset(, 25))
Range("AC21").Formula="=IF(OR(AD20<>"""",AC20<>""""),"""",IF(AND(U20=""sell"",Y20<=B21),""opTS"",IF(AND(U20=""buy"",Y20>=B21),""opTS"",IF(AND(U21=""sell"",Y21<=C21),""TS"",IF(AND(U21=""buy"",Y21>=D21),""TS"","""")))))"
Range("AC21").AutoFillDestination:=Range("AC21",Range("A65536").End(xlUp).Offset(, 28))

※ATRイグジットにおけるEXITサインは、LOSSCUT、opLC、EXITなどを使用していましたが、トレーリングストップを表すTSという記号を用いてワークシートを構築してみました。
(中略)
Range("AE21").Formula = "=IF(AND(U21=""sell"",AC21=""opTS""),(S21-B21)*評価シート!$C$15*W21-評価シート!$C$17*W21,IF(AND(U21=""sell"",AC21=""TS""),(S21-Y21)*評価シート!$C$15*W21-評価シート!$C$17*W21,IF(AND(U20=""sell"",AD20=""EXIT""),(S20-B21)*評価シート!$C$15*W20-評価シート!$C$17*W20,"""")))"
※EXITをあらわす記号が、TSになったことに従い、損益を返す列でも、TSという記号を使用します。
Range("AE21").AutoFillDestination:=Range("AE21",Range("A65536").End(xlUp).Offset(, 30))
(中略)
'検証シート上部にEXIT列の解説を書き込む
Range("X1").Formula = "EXIT"
Range("X2").Formula = ""
Range("Y1").Formula = "T_STOP"
Range("Y2").Formula = ""
Range("Z1").Formula = "予備列"
Range("Z2").Formula = ""
Range("AA1").Formula = "予備列"
Range("AA2").Formula = ""
Range("AB1").Formula = "予備列"
Range("AB2").Formula = ""

Range("AC1").Formula = "TSサイン"
Range("AC2").Formula = ""
※イグジットルール列の上部の説明を書き換えてください。
(中略)
'評価シート内の変数などをMACD用に書き換える
Sheets("評価シート").Select
Range("C8").Formula = "EXIT変数"
Range("C9").Formula = "2"
Range("C10").Formula = "TS変数"
Range("C11").Formula = "2"
Range("I5").Formula = "トレーリングストップ"
※評価シート内に、EXITルールを説明、検証シートから絶対参照して使う値などを書き込みます。
MsgBox ("イグジットルール「トレーリングストップ」の書き込みが完了しました")
End Sub
 
以上で、エントリールールの改造をすることができました。