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

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

シートSTEP1をご覧ください。
 
■ウィンドウの固定
まず、今後の作業の確認をしやすくするために、ウィンドウの固定をします。

やり方は、
1.21行目の行全体を選択
2.Excel2007では、[表示]→[ウィンドウ枠の固定]。Excel2003では、[ウィンドウ]→[ウィンドウ枠の固定]
で行うことができます。
これにより、ウィンドウを縦にスクロールさせた際に、スクロールされるのが21行目以下のセルになりました。

◆ATRの計算方法
次に、ボラティリティを測るためのATRを算出します。
 
ATRの計算方法は次の通りです。
1. 当日の高値-当日の安値
2. 当日の高値-前日の終値
3. 前日の終値-当日の安値
そして、この中から最も大きい値幅を「真の値幅」とします。
さらにここから、真の値幅の平均を単純移動平均線で求めたものが、ATR真の値幅の平均です。
 
■ATRをワークシート関数で表現する
次にATRをワークシート関数で表現してみます。
 
セルF21、G21、H21、I21、J21にそれぞれ次のように書きこみ、オートフィルでデータの入っている最終行までワークシート関数をコピーします。
 
F21 =C21-D21
G21 =C21-E20
H21 =E20-D21
I21 =MAX(F21:H21)
J21 =ROUND(AVERAGE(I17:I21),0)
 
これらの関数の意味は、
=C21-D21 「当日の高値-当日の安値」を返す

=C21-E20 「当日の高値-前日の終値」を返す
=E20-D21 「前日の終値-当日の安値」を返す
=MAX(F21:H21) 「F21、G21、H21」の中で最も大きい値を返す
=ROUND(AVERAGE(I17:I21),0) I17~I21真の値幅の5日間の平均値を返し、小数点以下を四捨五入した値を返す。
 
ということです。
 
※ここでは、過去5日間の平均でATRを算出しましたが、この値は任意です。また、21行目の時点では、過去の真の値幅の箇所はブランクになっておりますので、ATRが正確に算出されているのは、25行目以下になりますので、ご注意ください。

これで、J列にATRが求められました。
このエントリーをはてなブックマークに追加 mixiチェック

  この章では、付録のExcelブックと連動しながら、ワークシート関数を使い、以下のようなことを表現する方法を解説します。
  ここで解説するノウハウは、独自にワークシートを構築する際に使います。

1.ATRを使ってボラティリティを測り、それに合わせてポジションサイジングを行う
2.エントリーは、「N日間高値ブレイクアウトで買い、N日間安値ブレイクアウトで売り」
3.ロスカットは、約定価格からATR×2だけ逆行した価格に達したとき、また、N日間安値更新。ロングポジションの場合、N日間高値更新。ショートポジションの場合をしたときにポジションを閉じる。
 
それでは、順番に内容を解説していきます。

付録ブックフォルダの中のブック「シートの構築方法」を開いてください。
このエントリーをはてなブックマークに追加 mixiチェック

 ここでは、ブログ内で解説するワークシート関数についての予習編として、Excelのワークシート関数の使い方の基本を解説いたします。
 
Q.Excelの基本操作について教えてください。
A.はい。

Excelの起動、文字の入力、ブックの保存など最低限のことはインターネットや市販のExcelの教則本に書いてありますので、割愛させていただきます。
テキストでは、Excelの操作を関数の書き方から解説していこうと思います。

Q.ワークシート関数とは何ですか?
A.よく使用される計算などを自動的に行えるよう最初からExcelに登録されている命令のことです。

Q.システムを構築する上で、よく使われる関数を教えてください。
A.次の12種類だけでシステム構築、システムトレードをするには困りません。
 
【使用例】は、付録ブックフォルダのブック「Excelのワークシート関数入門」のシート「関数の基本」を参照してください。

if
【書き方】IF'論理式,真の場合,偽の場合( 【意味】論理式は、等号、不等号を含む数式で表します。「論理式で表した式が真の場合は、~と返す、偽の場合は~と返す」という命令文です。システムの検証では、最もよく使われる関数と言えます。
 
【使用例】 =IF(D2>E2,1,0)
引数のD2がE2より大きかった場合、「1」を返す。
 
and
【書き方】AND'論理式,論理式,・・・( 【意味】複数の論理式を扱う際に用いる関数です。Ifと組み合わせ、「~かつ、~であるとき、Aを返す、偽である場合、Bを返す」といった使い方をします。
 
【使用例】 =IF(AND(D2>0,E2>0),1,0)
引数のD2とE2の両方が0より大きかった場合、「1」を返す。
 
or
【書き方】OR'論理式,論理式,・・・( 【意味】複数の論理式を扱う際に用いる関数です。Ifと組み合わせ、「~であるか、もしくは、~であるとき、Aを返す、偽である場合、Bを返す」といった使い方をします。
 
【使用例】 =IF(OR(D2>0,E2>0),1,0)
引数のD2とE2のどちらかが0より大きかった場合、「1」を返す。
 
sum
【書き方】SUM(引数( 【意味】SUMは'(の中で指定した範囲'引数という(の中のセルの値の合計を返す関数です。
 
【使用例】 =SUM(D2:E2)
引数のD2とE2の合計を返す。
 
sumif
【書き方】SUMIF(引数,検索条件( 【意味】SUMIFは、検索条件で指定した条件にあうセルの合計を返す関数です。
 
【使用例】 =SUMIF(D2:E2,">0")
引数のD2とE2の中にある0より大きい数の合計を返す。
 
countif
【書き方】COUNTIF(引数,検索条件( 【意味】COUNTIFは、検索条件で指定した条件にあうセルの数を返す関数です。
 
【使用例】 =COUNTIF(D2:E2,">0")
引数のD2とE2の中にある0より大きい数の入っているセルの数を返す。
 
average
【書き方】AVERAGE(引数( 【意味】AVERAGEは引数で指定した範囲のセルの平均値を返す関数です。
 
【使用例】=AVERAGE(D2:E2)
引数のD2とE2の平均値を返す。
 
offset
【書き方】OFFSET(基準,行数,列数) 【意味】少々わかりにくい関数です。基準セルを、行数、列数で指定した数だけずらした範囲を返します。
 
【使用例】 =OFFSET(E2,0,-1) 
引数のE2を基準とし、1列戻ったセルにある数を返す。
 
min
【書き方】MIN(引数) 【意味】MINは、指定した範囲の中で、最小の値を返す関数です。
 
【使用例】 =MIN(D2:E2)
引数のD2とE2の中の最小値を返す。
 
max
【書き方】MAX(引数) 【意味】MAXは、指定した範囲の中で、最大の値を返す関数です。
 
【使用例】=MAX(D2:E2)
引数のD2とE2の中の最大値を返す。
 
abs
【書き方】abs(引数) 【意味】absは、引数の絶対値を返す関数です。
 
【使用例】=ABS(D2)
引数のD2の絶対値を返す。
 
round
【書き方】round(引数,桁数) 【意味】roundは、引数を指定した桁数で四捨五入した値を返す関数です。
 
【使用例】=ROUND(D2,0)
引数のD2を1の位で四捨五入した値を返す。
 
rounddown
【書き方】rounddown(引数,桁数) 【意味】rounddownは、引数の指定した桁数以下を切り捨てた値を返す関数です。
 
【使用例】=ROUNDDOWN(D2,0)
引数のD2の小数点以下を切り捨てる。
 
Q.絶対参照、相対参照とは何ですか?
A.セル参照の仕方の違いです。
相対参照は、書き込んだ関数の参照先となるセルの位置が相対的に変化します。
絶対参照は、参照するセルの位置が固定されます。
 
ブック「Excelワークシート関数入門」のシート「参照の形式 step1」をご覧ください。
これは日経225の日足データです。
 
このデータで絶対参照と相対参照の違いを解説します。
セルF15に次のように書き込みます。
=MAX(C12:C15)
この関数が意味するのは、
C12~C15のセルの最大値を返す。
ということです。
 
次にセルG5に3と書き込みます。
これは絶対参照にする値です。
セルG15に次のように書き込みます。
=MAX(OFFSET(C15,-$G$5+1,0):C15)
 
この関数が意味するのは、
MAX'OFFSET(C15,-$G$5+1,0):C15( C15から-G5+1だけずらしたセルとC15のセルの間

のセルの最大値を返す
ということです。
 
つまり、「G5」を「$G$5」と書くことで、G5に入力された数を絶対参照して変数とし、n日最高値を返すわけです。
次にシート「参照の形式 step2」をご覧ください。
 
これはstep1で書き込んだF15とG15を時系列データが入っている最終行までコピーしたものです。コピーをするときには、コピーしたいセルを選択し、そのセルの右下にマウスのカーソルを持ってくると、カーソルの形が「+」に変化するので、その位置でマウスをダブルクリックすると、時系列データが入っている最終行までコピーされます。
 
この状態で、セルF24をご覧ください。
 
関数が
=MAX(C21:C24)
となっています。
セルF15では
=MAX(C12:C15)
でしたが、コピーすると参照するセルが相対的にずれて変化しています。
 
これが相対参照です。
一方、セルG25は
=MAX( (C25,-$G$5+1,0):C25)
となっています。
-$G$5-1はセルをコピーしても変化していません。
これが絶対参照です。
このように関数を組みあわせるときには、相対参照と絶対参照を使い分ける必要があります。

Excelワークシート関数についての初歩的な解説は以上です。
 
本稿においては、これらのワークシート関数を組み合わせ、シートを構築していきますので、もし、途中でワークシート関数の説明で混乱してしまったら、この章を読み返してみてください。

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

このページのトップヘ