2.為替データの読み込み、書込み、4本値。
自動売買システムへの相場のFXデータの自動取り込み(calculationを使用)
為替データの読み込み・書込みを行います。前回のタスクによる時間制御ではなく、シート上の値が更新された際に自動で計算し、4本値へ記入していく方法です。Worksheets.Calculationを使用します。
前項までで、データを読み込んで、4本値に集計し、5分毎に時間足を追加していくという動作を、Sub ashi()とSub kakikomi()に記入しています。
ここでは、エクセルファイルのセルB2に読み込んでいるFXデータの値が変わったら、4本値の集計や5分足の作成を実行させます。
前項のタスクを使用した15秒毎の書き込みに比べ、値の取りこぼしがない反面、計算やマクロの実行が頻繁に行われますので、注意が必要です。
Calculationを使用したFXデータの4本値への集計
4本値を作成するマクロは、Sub ashi()とSub kakikomi()ですので、エクセルのシートの計算が実行される度に、この2つを呼び出して実行させます。
kakikomi()は、ashi()から呼び出されますので、実際はashi()のみを呼び出します。
※calculationを使用してashi()とkakikomi()を呼び出して実行する場合、前項のタスクの作成(Sub Tasc_Bigin()の作成)は不要となります。
今回は、データを読み込んでいるエクセルシートの値が変わった場合に実行されるマクロですので、Sheet1のマクロを記入します。
マクロのプロジェクトエクスプローラー(VBA画面の左側)よりSheet1をダブルクリックします。
次に、コードウィンドウの上部、上図の1の部分に「Worksheet」、2の部分に「Calculate」をそれぞれ選択します。
コードウィンドウには、自動的に下記コードが記入されます。
Private Sub Worksheet_Calculate()
End Sub
上のコードが、「そのシートが計算されたら」、End Subまでの内容を実行する命令です。
ですので、その間に、ashi()を呼び出すコードを記入します。
Private Sub Worksheet_Calculate()
Call ashi
End Sub
上記コードでSheet1が計算されたら(為替のデータが変更されたら)、ashi()を呼び出して実行します。
実行中の計算は実行しない。
実行しますが、実行中でデータが記入されて内容が変更されると、シートが計算されます。
すると、上記コードも再度実行されます。
再度実行されて、シートの内容が少しでも変わると、また上記コードが実行されます。
再計算がずっと終わらない、という現象が発生する可能性があるので、上記コードを実行中に発生した計算では、上記コードを実行しないという処理が必要になってきます。
コードを実行中のイベント(計算の発生など)をキャンセルし、ついでに実行中の自動計算も止めてしまいます。
上のコードに下記を追加して、コード実行中のイベントを停止し、計算方法を手動に変更します。
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
上のコードがイベントの停止、下のコードが計算方法をマニュアルへ変更しています。
このコードを追加すると、
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Call ashi
End Sub
となります。
そして、ashi()の実行が終わったら、イベントの実行をONにし、計算方法を自動に戻すコードを追加します。
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Call ashi
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
これで、Sheet1で計算が実行される度に、ashi()が実行されます。
次のページ:移動平均線のFX自動売買プログラムへの書込み準備
ピンバック: 相場のデータの自動取り込み(タスクを使用) | 株・為替・FX・N225などの自動売買、自動取引システムの作り方
ピンバック: 自動売買システムへの相場のデータの自動取り込み(タスクを使用) | 自動売買システムを作ってみよう