2.為替データの読み込み、書込み、4本値。
自動売買システムへの相場のFXデータの自動取り込み(タスクを使用)
では、最後に日時の書き込みと、最初に作成した「Sub Kakikomi()」への接続を行います。
日時の書き込みは、これまでの処理にて現在の行数が変わっている(更新されている)場合もありますので、もう一度num_1の値を読み込みます。
num_1 = Cells(2, 5)
そして、最初に読み込んだtime_nを日時の列に書き込みます。
Cells(num_1, 6) = time_n
ここまでが完了したら、先ほど作成したSub Kakikomi()を呼び出します。他のマクロを呼び出す際はCallを使用しますので、下記の様なコードとなります。
Call Kakikomi
これらをSub ashi()の最後に追加して、一連の動作のコードは完了となります。
読み込んだFXデータを15秒毎に集計・記入
さて、ここまでで時間足書き込みの部分は完了です。
あと、今回のレポートで残っている部分は、これらのコードを15秒毎に動作させるコードのみとなりました。
こちらはタスクを使用しますので、少々難易度が高く、私自身もそれほど詳しく理解しているわけではありませんので、コードの提示をして軽く解説するだけとさせていただきたいと思います。
もちろん、稼働するには十分耐えうるものですのでご安心ください。
では、これまで通り新しい標準モジュールを追加してください。
※次項のcalculationを使用してashi()とkakikomi()を呼び出して実行する場合、この項(Sub Tasc_Bigin()の作成)は不要となります。
モジュールを追加したら、今回は一番上の部分に「Dim mcolTask As Collection」と入力してください。
その後、Sub Tasc_Bigin() とマクロのタイトルをつけ、コードを書いていきます。
まずは、開始時刻、終了時刻、更新間隔などのセッティング部分ですが、この部分に関しては別途テキストファイルを用意していますので、そちらからコピペされても結構です。
テキストファイル→ https://atmtech.net/main/files/atm2_1.txt
(標準モジュールを追加した後、ファイルの中身をすべてコピペしていただければOKです。)
コードの内容を上から順に説明します。
タスクを実行するコードの内容
まず、セッティングの部分として下記のようなコードがあるかと思います。
‘ セッティング—————————————————-
dayBigin = “07/01/01” ‘ 開始日付
datBigin = TimeValue(“00:00:00”) ‘ 開始時刻
dayEnd = “07/01/01” ‘ 終了日付
datEnd = TimeValue(“00:00:00”) ‘ 終了時刻
datInterval = TimeValue(“00:00:15”) ‘ 実行間隔(少なくとも数秒以上で)
datTimeout = TimeValue(“00:02:00”) ‘ 実行待機タイムアウト
blnJustTime = True ‘ datInterval で丸めるか
strProcName = “Ashi” ‘ 実行するマクロ名
int5 = TimeValue(“00:00:05”) ‘ 設定した終了時間からのマイナス時間
‘—————————————————————
こちらは説明のある通りで、設定していただくのは、開始日付、開始時刻、終了日付、終了時刻、実行するマクロ名です。
当然ですが、終了日付+終了時刻よりも、開始日付+開始時刻の方が早い時間となります。実行するマクロは、今回は「Ashi」となりますので、すでにそちらが設定済みです。
実行間隔は全体像で解説したとおり15秒としています。
あとは、下記コードを書いていただければ稼働させることが可能です。
<以下、コード>
If mcolTask Is Nothing Then
‘ 日付シリアル値を加算
datBigin = datBigin + Application.WorksheetFunction.Text(dayBigin, “yyyy/mm/dd”)
datEnd = datEnd + Application.WorksheetFunction.Text(dayEnd, “yyyy/mm/dd”) – int5
If datEnd < datBigin Then
MsgBox “開始日時が終了日時より遅くなっています。”
Exit Sub
End If
‘ 現在時刻が既に終了時刻を過ぎている場合
If datEnd < Now() Then
MsgBox “終了時刻を過ぎているため予約できません。”, vbCritical, “終了”
Exit Sub
End If
‘ 現在時刻が開始時刻を過ぎていれば補正
If datBigin <= Now() Then
‘ 開始時刻を datInterval で指定された値で丸めるか
If blnJustTime Then
datBigin = Application.Floor(Now() + datInterval, datInterval)
Else
datBigin = Now() + datInterval
End If
End If
‘ 初期化
Set mcolTask = New Collection
‘ メイン部分
For i = datBigin To datEnd Step datInterval
‘ 後から取り消せるようにコレクションに退避
mcolTask.Add CStr(i) & “,” & strProcName
‘ Application.Ontime で実行予約を行う
Application.OnTime EarliestTime:=i, _
Procedure:=strProcName, _
LatestTime:=i + datTimeout, _
Schedule:=True
Next i
Else
MsgBox “既に実行中です”, vbInformation
End If
Exit Sub
error:
MsgBox “エラーが発生しました。設定された日時をご確認ください。”
End Sub
さて、ここまでで15秒毎の読み込み、行の移行、4本値の書き込みと、当レポートでの内容は網羅しました。
では、シートに戻って、ボタンの配置と行番号の挿入をして終わりとしたいと思います。
タスクを実行するボタンの配置
シートに戻って、ツールボックスのコントロールより、ボタンを配置しましょう。
ボタンを配置したら、そのボタンをダブルクリックします。
すると、下記のようなモジュール画面が表示されますので、そのコードに、「Call Tasc_Bigin」と入力します。
※ボタンをダブルクリックしても表示できない場合は、コントロールをデザインモードにしてお試しください。(下図)
この処理にて、シート上で今作成したボタンをクリックすると、コード内に設定した日時、時間に則って更新を開始します。
では、行番号を入れて(次回のレポート以降で使用します。)終わりとしたいと思います。
シートの1列目に行番号を入れて、日時や時刻の設定を済ませ、ボタンをクリックしましょう。その際は、FXオンラインに接続され、DDEが正常に稼働しているかどうかをご確認の上、実行されてください。
尚、一度保存されたあと、再度起動される際には、「マクロを有効にするかどうか」、「外部データを更新するかどうか」のメッセージが表示されますが、その際はそれぞれ「有効にする」「更新する」を選択されてください。
行番号を入れて、時刻等設定後ボタンを押すと時間の経過とともに、自動で5分足の4本値を書き込んでいきます。
次のページ:自動売買システムへの相場のデータの自動取り込み(calculationを使用)
ピンバック: 時間足の条件分岐 | 株・為替・FX・N225などの自動売買、自動取引システムの作り方
ピンバック: 自動売買システムに書き込む時間足の条件分岐を設定する | 自動売買システムを作ってみよう