エクセルVBAによるシステムトレードソフトの作り方

エクセルVBAを使ってトレードシステムを自動構築するツールを無料で配布しています。複数の相場データに対して複数の手法を連続的に自動で検証できます。FX、先物、個別株なんでも使えます。ファイルのダウンロードはこちらから。ファイルを使いこなすことで得られるメリットはこちらで解説してます。

2014年06月

シートStep19をご覧ください。
ここでは、作業しやすくするためシートに色を付けたり、絶対参照に使うセルを罫線で囲んだりしてみました。

これらの作業の仕方は市販のExcelの教則本に細かく書かれていると思うので、各自で参照してください。
 
また、STEP19において、STEP18以前で使用していた絶対参照のセルの場所を移動しましたので、過去に説明したワークシート関数の説明の中で示したセルと場所が若干異なっているのでご注意ください。

このエントリーをはてなブックマークに追加 mixiチェック

シートSTEP18をご覧ください。

ここでは、今回解説に使った売買戦略のパフォーマンスを測ってみます。
セルN4に次のように書きこみます。
=X250/K8
 
この式の意味は、
=X250/K8
 
損益曲線列の最終行=最終的な損益合計(÷初期投資金額
ということです。
 
この値で、最初に投資した金額に対し、どれだけのリターンを出せたかを測ります。
 
次に、セルN5の次のように書きこみます。
=MIN(Z21:Z250)

この式の意味は、

=MIN(Z21:Z250)
ドローダウン列の最小値=最大ドローダウン(
ということです。
 
続いて、セルN6に次のように書きこみます。
=ABS(N4/N5)
 
この式の意味は、
=ABS(N4/N5)
リターン÷最大ドローダウンの絶対値
ということです。
 
この値によって、リターンと最大ドローダウンの比率を返しているのですが、今回の説明では、この値をリスク・リワード・レシオRRR(としておきます。しかしながら、今回解説に使ったシートでは、リターンが1より小さいので、返される値も意味がないものとなってしまっておりますのでご注意ください。
 
たとえば本来ならば、リターンが1.5出たとして、最大ドローダウンが-0.3だとしたら、
1.5÷-0.3=-5
となり、
-5の絶対値の5が返されることになります。 
このエントリーをはてなブックマークに追加 mixiチェック

シートstep17をご覧ください。

 ここでは、最大ドローダウンを返すために、まず、現時点最大累積損益というものを返し、そこからドローダウンを返していきます。セルY21に次のように書きこみ、オートフィルでデータの入っている最終行までワークシート関数をコピーします。
 
=IF(X21>Y20,X21,Y20)

この関数の意味は、
=IF(X21>Y20,
もし、前日時点の現時点最大累積損益よりも、当日の損益曲線の列の値が大きかったら、

X21
当日の損益曲線の列の値を返す

Y20
そうでない場合、前日時点の現時点最大累積損益を返す

ということです。

次に、現時点最大累積損益を参照しながら、ドローダウンを返します。
セルZ21に次のように書きこみ、オートフィルでデータの入っている最終行までワークシート関

数をコピーします。
=1-Y21/X21

この式の意味は、
1-現時点最大損益÷当日の損益曲線の値
ということです。

 つまり、ある時点での最大損益を1とし、その後、その値からドローダウンが何%だけ生じたのかを返すことができるようになった訳です。そして、この列の中の最小の値が最大ドローダウンとなります。
このエントリーをはてなブックマークに追加 mixiチェック

シートSTEP16をご覧ください。

ここでは、STEP6で表現したマネーマネジメント指標が仮の状態であったので、それを修正します。
V20、W20、X20にそれぞれ=K8と書き込みます。

これは、システムのテストをする上で、初期投資金額となる金額の値をセルK8へ絶対参照して利用するためのものです。

セルN21を次のように書き換え、オートフィルでデータの入っている最終行までワークシート関数をコピーします。

■STEP15における修正前
=ROUNDDOWN($K$8*$K$10/100/(J21*$K$12),0)

■STEP16における修正後
=ROUNDDOWN(X21*$K$10/100/(J21*$K$12),0)

 これで、マネーマネジメント指標の公式の中の資金量を損益曲線に対し相対参照することで、資金の増減を踏まえて、マネーマネジメント指標を返すことができるようになりました。
このエントリーをはてなブックマークに追加 mixiチェック

シートSTEP15をご覧ください。
 ここでは、sell損益、buy損益、そして、総合の損益を区別して損益曲線を描いてみます。
セルV21に次のように書きこみ、オートフィルでデータの入っている最終行までワークシート関数をコピーします。
=SUM(T21)+V20

セルW21に次のように書きこみ、オートフィルでデータの入っている最終行までワークシート関数をコピーします。
=SUM(U21)+W20

セルX21に次のように書きこみ、オートフィルでデータの入っている最終行までワークシート関数をコピーします。
=IF(T21<>"",X20+T21,IF(U21<>"",X20+U21,X20))

これらの関数の意味は、
=SUM(T21)+V20
Sellの損益に前日までのsell損益曲線の値を加える

=SUM(U21)+W20
buyの損益に前日までのbuy損益曲線の値を加える

=IF(T21<>"",X20+T21,
sell損益の列がブランクではないとき、前日までの総合損益曲線の値にsellの損益の値を加える

=IF(U21<>"",X20+U21,
そうでないとき、もし、buyの損益列がブランクでなければ、前日までの総合損益曲線の値にbuyの損益の値を加える
X20))
いずれでもない場合は、前日の総合損益曲線の列の値を返す

ということです。

そして、損益曲線を描くには、損益曲線のデータが返されているセル範囲を選択し、[挿入]→[グラフ]で可能です。
このエントリーをはてなブックマークに追加 mixiチェック

このページのトップヘ