自動売買システムに移動平均線のエクセルVBAでの計算・書込みを追加

投稿者: | 2016年6月7日

3.移動平均線の計算、計算結果の自動売買プログラムへの書込み

自動売買システムに移動平均線のエクセルVBAでの計算・書込みを追加

 

次に、移動平均を実際に計算するのですが、平均は「Average」での計算となります。ただし、VBAに直接「Average」と入力しても計算はしてくれません。

エクセルで使用するセルに直接入力する形の関数は、その関数名の前に「Application.WorksheetFunction」と入力しなくてはなりません。

そのため、VBAでAverageを使用する場合は、

「Application.WorksheetFunction.Average()」

となります。(Application.WorksheetFunctionをつけなくとも正常に計算できる関数もあり、ルールは様々ですがここでは詳細は省きます。)

 

 




平均する値は4本値の終値で、まずは採用本数5本を考えるとして、Averageが参照する場所は、4本前のロウソク足の終値から現在のロウソク足の終値となります。
(採用本数-1)から現在(行数)の足となるので、まず、「採用本数-1」は最初に代入した採用本数ma1-1で計算が出来ます。

4本前のロウソク足の場所は、現在の行数から、上記ma1-1を引いた値となるため、

Cells(gyou – (ma1 – 1), 5)

となります。「現在の行数 – (採用本数 – 1) = 4本前の行数」です。

列番号は終値が入力されている列ですので、5となります。

 

次に、現在の足は行数「gyou」に代入してありますので、Cells(gyou, 5)で指定が可能です。

よって、平均する範囲は、Cells(gyou – (ma1 – 1), 5) からCells(gyou, 5)に入力されている値となります。

その範囲を指定するのに、「Range」を使用します。Rangeは範囲をしていする関数で、Range(範囲の最初のセル,範囲の最後のセル)という形になります。

ここまで解説してきた平均範囲を、上記Rangeに入れると、下記の形となります。

Range(Cells(gyou – (ma – 1), 5), Cells(gyou, 5)

 

これが平均する範囲になりますので、この値を先述のAverageに入れその値を現在の行の移動平均線1の列に入力します。

現在の行の移動平均線1の列は、Cells(gyou, 7)となりますので、

 

Cells(gyou, 7)=Application.WorksheetFunction.Average(Range(Cells(gyou – (ma1 – 1), 5), Cells(gyou, 5)))

 

(スペースの都合上2行になっていますが実際は1行になります。下図)

同様に、移動平均線2(採用本数25の平均線)の計算を行うコードも書きます。

ここまでと異なるのは、ma1がma2になることと、書き込むセルの列番号が8に変わることですので、コードは下記のようになります。

Cells(gyou, 8)=Application.WorksheetFunction.Average(Range(Cells(gyou – (ma2 – 1), 5), Cells(gyou, 5)))

ここまでで完成したコードは下図です。

但し、このまま書き込みを始めると十中八九エラーになります。


なぜかというと、移動平均線の計算は採用本数-1分現在の行よりマイナスして行います。

例えば、現在の行が6などの場合、「採用本数-1」をその値から引いてしまうとマイナスの値となり、セルの指定が出来ません。

そのため、その部分の処理が必要となります。

 

 

移動平均線のデータ数と行番号を調整し、正しい行数を指定する。

 

処理は、前回も出てきましたIF文を使用します。

条件分岐の条件としては、行数が採用本数+αあれば問題ないので、そのような条件を組み立てます。

因みに、前回の復習ですが、入力されている行数は、一番上の行からの数えていますので、実際にデータが書き込まれている行数とは異なり、表題やレートが表示されている部分も含むため、そこも考慮が必要です。

その部分を考えると、4本値のデータが書き込まれる最初の行数は6となります。(下図)

つまり、移動平均線を書き込むのは少なくとも6+採用本数が必要となります。余裕を持たせて、8行+採用本数として、条件を組み立てて見ましょう。

条件は、行数が8+採用本数以上なら書込みを行いますので、

If gyou >= ma1 + 8 then

といった形になります。

これを、先ほどの平均線計算部分にそれぞれ書き込みます。

それぞれの条件分岐式Ifに対応する「End If」もお忘れなく。

これで平均線の書込みは完了です。

但し、まだ自動更新を開始した際に動くコードに組み込まれていませんので、最後にその作業を行います。

作業は、前回「Sub Kakikomi()」を「Call」を使用して組み込んだように、「Sub Ashi()」の中に「Call IdouHeikin」と入力して完了です。

このとき、移動平均線の計算には、4本値のデータが書き込まれていることが必要ですので、必ず「Call Kakikomi」のあとに入力します。(下図)

これで、時間足の判断「Sub Ashi()」から、4本値の書込み「Sub Kakikomi()」を呼び出して4本値の書込みを行った後、移動平均線の計算「Sub IdouHeikin()」を呼び出して移動平均線の計算を行うことが出来ます。

 

では、実際に稼動させて見ましょう。

 

 

自動売買システムの作り方トップページへ

次のページ:自作システムのデータ取り込み、書込みの確認