トップ  >  MQL4リファレンス  >  時系列・インジケータアクセス  >  データアクセス編成
スポンサーリンク
検索

↑の検索エンジンが表示されない人は、
↓の古い検索エンジンを使用して下さい。
カスタム検索
MQL4リファレンスツリー
データアクセス編成





取引サーバからデータを受信


メタトレーダー4ターミナルで価格データを利用可能になる前に、価格データを受信し処理されなければなりません。
データを受信するには、メタトレーダー4の取引サーバーへの接続を確立する必要があります。
データはターミナルの要求に応じて、サーバーから時間足ブロックで圧縮された形式で受信されます。

データのサーバー参照メカニズムは要求開始(ユーザーによるチャート要求やMQL4プログラム)に依存しません。



中間データ格納


サーバーから受信したデータは自動的に解凍され.hst形式の中間データで保存されます。
各通貨ペアのデータは受信したサーバー名のフォルダに書き込まれます。

FXCMジャパン証券のデモ口座の場合、
"ターミナルディレクトリ\history\FXCM-JPYDemo01"
のフォルダに書き込まれます。





管理人の勝手なコメント:
公式のリファレンスマニュアルにはhcc形式で保存されるとありますが、hcc形式はMQL5用です。
MQL4ではhst形式で時間軸毎にファイルが作成されます。
hcc形式での仕様による動作説明が沢山ありましたのでバッサリ削除しています。



必要な時間軸の中間データ取得


hstファイルは、要求された時間軸の価格データのデータソースとして使用されます。
hst形式のデータは最大限素早くアクセスする為に調整された時系列データです。
このファイルはチャート要求またはMQL4プログラムの要求に応じて作成されます。


リソースを節約する為に、時間軸のデータはRAMに保存され、必要に応じてファイルに保存されます。
長時間呼び出されていない場合、RAMから解放されファイルに保存されます。





"ヒストリー内の最大バー数"パラメータ


"ヒストリー内の最大バー数"パラメータは、MQL4プログラムで利用可能なhst形式のバー数を制限します。
これは全ての時間軸に対して有効で、コンピュータリソースを節約する事が出来ます。


パラメータの変更は、クライアントターミナルを再起動した後に適用されます。
パラメータ変更適用後、自動でサーバーを参照し追加データ(アカウントの制限を考慮して更新)を取得します。
またチャートをスクロールさせた領域にデータが無い場合やMQL4プログラムによって要求された時にデータ取得します。







管理人の勝手なコメント:
"チャートの最大バー数"パラメータは、チャート上に表示するバー数を制限します。
沢山のチャートを表示させて多くのインジケータを適用していると、MT4の動作が重くなる事がありますので、
その場合"チャートの最大バー数"の値を減らす事で処理負荷軽減される事があります。
計算済みのバーを含めて全てのバー(iBars()分全て)を再計算する様なプログラムの場合は特に処理が軽くなります。

またストラテジーテスターで過去数年分のデータを検証する場合は、
"ヒストリー内の最大バー数"の必要年数分の値に設定する必要があります。
hstデータは制限されたデータ分しか残っていないので、この値を小さく設定した状態でデータをダウンロードすると、
MT4再起動した時にhstデータが制限したサイズに減られる為、範囲外のヒストリーデータは消滅します。


またFXCMのMT4での話ですが、
ヒストリカルデータの自動ダウンロードは、かなり限定されています。
昔はヒストリカルデータに10年前の日付のデータのみにして自動ダウンロードすると10年分のデータをダウンロード出来たみたいですが、
今はそれを1分足データで行っても直近2~3日程度のデータしか取得出来ません。
プログラムで異常なデータとみなして無効にされている感じがします。
下手な小細工をしなかった場合は1分足データは過去2週間くらいまでは自動ダウンロードで取得出来ます。

FXCMの過去10年分のヒストリカルデータを入手するにはFXCMの提供するAPI(但し法人のみ)を用いたプログラムでデータ取得するか、
特定条件を満たすと10年分のヒストリカルデータを提供するキャンペーン(2015/4/30に確認した所、終了していました)に申請するかしないと手に入りません。



ターミナルデータとサーバーデータの同期化



MQL4プログラムは任意の通貨ペア・時間軸のデータを呼び出す事が出来ます。
但し、必要な時系列データが未だ形成されていない可能性や、必要な価格データが取引サーバーと同期していない場合があります。
この場合、待ち時間を予測する事は難しいです。

待ち時間サイクルを使用したアルゴリズムは最善の解決策ではありません。

但し、スクリプトについては例外です。
スクリプトはイベント処理が無いので代替えアルゴリズムの選択肢がありません。

カスタムインジケータでの待ち時間サイクルの使用は、全てのインジケータの計算終了の遅延に繋がります。

EAとカスタムインジケータではイベントハンドラで使用する事をお勧めします。
OnTick() や OnCalculate()イベント中であれば、必要な時系列データの取得失敗した場合、
イベントハンドラを終了させ、次にイベントハンドラが呼ばれるまでの間を受信待ち時間にします。




スポンサーリンク
スポンサーリンク


Copyright ©2015 MT4でEA自作しちゃお~ All Rights Reserved.


Top

inserted by FC2 system