Seconds Tick and Range Charts MT5
- ユーティリティ
-
Quoc Dat Quach
Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself. - バージョン: 1.0
- アクティベーション: 10
MetaTrader 5用の秒足(1~30秒)、ティックバー、レンジバーです。ブローカーの実ティック履歴からカスタム銘柄として構築され、ティックごとに更新されます。チャート上では、どのインジケーター、テンプレート、EAでも動作させられます。チャート上のヘルパーが各バーの実際の時刻を表示します。本EAがチャート上で取引することは決してありません。
機能
EAをブローカーの銘柄のチャートに適用します。EAは次のことを行います:
- ソース銘柄の仕様を持つカスタム銘柄(例:EURUSD_S5)を作成します
- その履歴を、ブローカーの実ティックから、デフォルトでは直近3日分、分割して構築します(テストでは、BTCUSDmの3日分、376,095ティックに2.0秒かかりました)
- カスタムチャートを開きます。テンプレートを指定した場合はそのテンプレートを適用します
- ソース銘柄の新しいティックを、届くたびにすべてカスタムチャートに追加します
- 新しいバーを毎秒数回ターミナルから読み戻します(MetaTrader 5 ビルド6230での実測:ターミナルがライブティックから構築したバーは、どのチャートやプログラムからも読まれないと失われることがあります。定期的に読むことでこれを防げます)
- 60秒ごとにバーをブローカーのティック履歴と照合し、カスタム銘柄がそれらのバーについて保持しているティック数を数えます
- 既存のカスタムチャート上で再び起動したとき(たとえばターミナルの再起動後)、続行する前に、履歴の最後の部分のバーがすべてそろっていることを確認します
- バーが誤ったままの場合は、ティック履歴をもとに、同じ最初のティックからカスタム銘柄全体を再構築します。これはすべてのテストで正確だった唯一の修復方法です(ビルド6230での実測:ライブティックを受信中のカスタム銘柄に個々のバーを書き込んだり、その一部を削除したりすると、ターミナルが他のバーやティックを失うことがあります)
チャートの種類
- 秒足(Seconds bars):1、2、3、4、5、6、10、12、15、20または30秒。一本のバーには一つの区間のティックが入ります。ティックのない区間にはバーがありません。これは、ティックのない一分間にはM1でバーがないのと同じです。
- ティックバー(Tick bars):Nティックごとに新しいバーができます。
- レンジバー(Range bars):次の価格によってバーの高値と安値の幅がNポイントを超えることになる場合に新しいバーが始まるため、Nポイントを超えるバーはありません。価格が飛んだときは新しい価格で新しいバーが始まり、その飛びを埋めるバーは描画されません。
バーはBid価格で描画されます。バーのティックボリュームは、そのバーに含まれるティック数です。
カスタム銘柄ごとにEA一つで、複数を同時に実行できます。たとえば、あるチャートではEURUSDの5秒足、別のチャートではXAUUSDの200ポイントのレンジバーを使えます。同じカスタム銘柄に対する二つ目のEAは起動せず、その理由をパネルに表示します。
すべてのティックがちょうど一本のバーに
カスタム銘柄が受け取るのはブローカーのティックそのものであり、バーのコピーではありません。テストでは、ブローカーのティック履歴から独立に再構築したものとバーを比較しました:
- ティックボリュームの合計がソースのティック数と等しい
- すべてのバーの始値、高値、安値、終値、ティックボリュームが再構築と一致する
- 秒足では、バーのないすべての区間にソースのティックがなかった
10個のカスタム銘柄を同時に使った75分間のテスト(1、2、5秒足、20、50、100ティックバー、200、1000ポイントのレンジバー。合計2,537,558ティック)で、三つの条件はすべての銘柄で成り立ちました。ターミナルが2分間フリーズした後に再構築された銘柄でも同様です。
秒足チャートの空白:BTCUSDm(土曜日で毎秒およそ一ティック)では、1秒足チャートは121,859ティックに対して81,920本のバーでした。バーのない1秒の区間をすべてブローカーのティックと照合したところ、どの区間にもティックはありませんでした。秒足チャート上の空白は、ブローカーがティックを一つも送らなかった時間であり、失われたバーではありません。
時間軸について(必ずお読みください)
MetaTrader 5には一分未満の時間足がなく、カスタムチャートは常にM1の時間軸で描画されます。そのため、カスタムチャートの各バーは一分のスロットを一つ占め、チャート下部の日付は1971年一月からこれらのスロットを数えたものです。実際の時計の時刻ではありません。MetaTrader 5のチャート上に一分より短いバーを存在させる方法は、これしかありません。
EAはカスタムチャートに、実際の時刻を表示する小さなヘルパーを追加します(この説明全体を通して、実際の時刻とはブローカーのサーバー時刻を意味し、ブローカーの銘柄自体のチャートと同じです):
- Last bar:(最新のバー)ミリ秒単位の開始時刻、長さ、ティック数
- Cursor bar:(カーソル位置のバー)マウスの下にあるバーについての同じ内容
- チャート本来の時間軸の上に、実際の時刻を示す二つ目の時間軸
- チャートが更新されているかどうか:「Live: updated on every tick of EURUSD」、「Building history from real ticks: 40.0%」、「Waiting for the connection to the trade server」、「Checking the bars after the start (up to 60 s)」、「Not updating for 12 s: check the EA on the EURUSD chart」または「Not updating: no EA builds EURUSD_S5 now」
カスタムチャートはM1のままにしてください。M1のバー一本が、秒足、ティックバー、レンジバーの一本に当たります。より上位の時間足では複数のバーが統合されます。
速度
一つのターミナルで10個のEAと8個のカスタムチャートを同時に動かした75分間のテストで測定しました。測定したのは、ソースチャート上のインジケーターがティックを認識した時点から、カスタムチャート上のインジケーターがそのティックを認識した時点までの時間です。BTCUSDmはデモ口座でライブでした。ゴールドとナスダック指数は市場が閉じていた(土曜日)ため、それらのチャートには金曜日の実ティックを実際のペースで供給しました(最大毎秒61ティック)。
| カスタムチャート | 毎秒ティック数 | 中央値 | ティックの99%が収まる時間 | 最も遅いティック |
|---|---|---|---|---|
| BTCUSDm 5秒足(ライブ) | 1 | 0.2 ms | 30 ms | 262 ms |
| BTCUSDm 1秒足(ライブ) | 0.9 | 0.3 ms | 35 ms | 262 ms |
| BTCUSDm 50ティックバー(ライブ) | 1 | 0.2 ms | 32 ms | 281 ms |
| ゴールド 1秒足(リプレイ) | 12 | 0.4 ms | 65 ms | 173 ms |
| ゴールド 100ティックバー(リプレイ) | 12 | 0.3 ms | 111 ms | 140 ms |
| ナスダック 5秒足(リプレイ) | 61 | 0.6 ms | 40 ms | 1.7秒 (*) |
| ナスダック 1000ポイントのレンジバー(リプレイ) | 61 | 0.8 ms | 41 ms | 2.5秒 (*) |
(*) ターミナルが2分間フリーズした後の2分間:遅れたティックが一度に届き、EAが銘柄を再構築しました。それ以外の時間では、最も遅いティックは142 msと156 msでした。75分間を通して、ターミナルは全体でCPUコア約一つ分と680~703 MBのメモリーを使用し、最初と最後の10分間を比べても遅くなっていませんでした。
ソースチャート上のパネルは、実行中、ティックイベントあたりのEA自身の書き込み時間を中央値と99パーセンタイルで表示します(テストでは中央値0.03 ms)。
接続断、再起動、変更
同じ75分間のテスト、その後のターミナル再起動、および入力パラメータ変更の別テストで測定しました:
- ターミナルが2分間フリーズ:復帰時に、取引サーバーとの接続が切断されて回復したと報告しました。15秒以内に、EAは4個のカスタム銘柄でバーまたはティックの欠落を見つけて再構築しました(それぞれ0.2~2.4秒)。その後、10個の銘柄すべてが上記のチェックに合格しました。数分間のネットワーク切断はテストしていません。
- ソースチャートの時間足を変更(M1からM5に変更して元に戻す):EAは最後のバーから続行し、再構築はありませんでした。
- 入力パラメータを変更(別の入力パラメータを含むテンプレートを使用):EAは最後のバーから続行しました。
- チャートの種類を変更(実行中のEAで、5秒足から50ティックバーに変更して元に戻す):EAは新しいカスタム銘柄を構築し、古いチャートはそのまま残しました。91秒後に5秒足に戻すと、古い銘柄を続行し、その91秒間のティックを追加しました。両方の銘柄が上記のチェックに合格しました。
- ソースチャートを3分間閉じる:ヘルパーは「Not updating: no EA builds BTCUSDm_S1 now」と表示しました。EAとともにチャートを再び開くと、EAは最後のバーから続行し、その3分間のティックは0.34秒後にチャートに表示されました。
- ターミナルを閉じて再起動(7回)(閉じていた時間は3秒~約1.5分):51回のEA起動のうち40回は、それぞれの最後のバーから続行しました。11回はバーの欠落を見つけ(ターミナルが削除したもの。制限事項を参照)、その60秒間待ってから(最終バージョンでは、その間ヘルパーに「Checking the bars after the start」と表示されます)、それぞれの銘柄を再構築しました(それぞれ0.2~1.3秒)。7回の起動のうち5回では、その数分後に、チャートが開かれていない銘柄のバーをターミナルが削除しました。EAは次のチェックでそれを見つけ、銘柄を再構築しました(2回のテストでは、そのチェックの前にテストが終了しました)。
- 同じカスタム銘柄に対する二つ目のEAは起動しませんでした。ターミナルのすべてのEAが同時に起動する7回のターミナル起動時も同様です。
EAを削除しても、カスタム銘柄とそのチャートは残ります。同じ設定で再び適用すると、それまでのバーがすべてそろっていることを確認してから、最後のバーから続行します(そろっていない場合は、自ら履歴を再構築します)。
入力パラメータ
| 入力パラメータ | 初期値 | 説明 |
|---|---|---|
| Chart type | Seconds bars | Seconds bars, Tick bars, Range bars |
| Seconds bars: seconds per bar | 5 seconds | 1、2、3、4、5、6、10、12、15、20または30 |
| Tick bars: ticks per bar | 100 | 1~100,000 |
| Range bars: range of a bar in points | 100 | ソース銘柄のポイント |
| Source symbol | 空欄 | 空欄 = EAを適用したチャートの銘柄 |
| Days of real tick history to build | 3 | 0.01~60。カスタム銘柄の構築時に使用します。ブローカーのティック履歴はこれより短い場合があります。新しい値を設定しても既存のカスタム銘柄は再構築されません。再構築するには、次の入力パラメータを一度trueに設定してください |
| Build the history again at start | false | falseの場合、チャートの種類、その設定、ソースが同じであれば、最後のバーから続行します |
| Custom symbol name | 空欄 | 空欄 = 自動。例:EURUSD_S5、EURUSD_T100、EURUSD_R100 |
| Open the custom chart | true | |
| Template for the custom chart | 空欄 | MQL5\Profiles\Templates内のテンプレート。チャートを開くときに適用されます |
| Show the real time of the bars on the custom chart | true | 上記のヘルパー |
| Close the custom chart when the EA is removed | false | |
| Tester only: open and close sample positions | true | 下記を参照 |
ストラテジーテスター
MetaTrader 5では、ストラテジーテスター内でカスタム銘柄や新しいチャートを使用できません(実測:どちらもエラー4014で拒否されます)。そのためテスター内では、EAはテスターから供給されるティックから、同じコードで同じバーをメモリー上に構築し、ビジュアルモードではテスターチャートの下のサブウィンドウに描画します。実行の終わりに、構築したバーの本数と、すべてのティックがちょうど一本のバーに入っていることを書き出します。ブローカーの実ティックから構築したバーを見るには「Every tick based on real ticks」を使用してください。
ストラテジーテスター内でのみ、EAは短い一連のサンプルポジションの建玉と決済も行います。これは、マーケットではエキスパートアドバイザーが取引を行うことが確認されるためです:
- 最小取引量、同時に一つのポジションのみ、最大30ポジション
- 新しいポジションを建てる前に毎回余剰証拠金を確認し、資金が不足している場合はメモを書き出して何も送信しません
サンプルポジションは売買戦略ではなく、その結果は利益について何も示しません。ライブ口座またはデモ口座のチャート上では、EAが注文を送信、変更、決済することは決してありません。
制限事項(ご購入前に必ずお読みください)
- 時間軸が数えるのはスロットであり、時計の時刻ではありません。上記の「時間軸について」を参照してください。バーの時刻を使うインジケーター(セッション、日足ピボット、時間フィルター)は、カスタムチャート上では実際の時刻ではなくスロットの時刻を参照します。
- カスタム銘柄の気配値はティック一つ分遅れます。実測:カスタムチャート上のインジケーターやEAが新しいティックで呼び出された時点で、カスタム銘柄のバーとティック履歴にはすでにそのティックが含まれていますが、カスタム銘柄の気配値(気配値表示、SymbolInfoTick、チャート上のBidライン)は、次のティックが追加されるまで一つ前のティックを表示します。MetaTrader 5 ビルド6230で七つの回避策を試しましたが、どれも機能しませんでした。カスタムチャート上のインジケーターやEAは、価格をバーから読み取るようにしてください(最後のバーの終値が最新のティックです)。
- カスタム銘柄は取引できません。カスタムチャート上で動作するEAは、注文をブローカーの銘柄に対して送信する必要があります。
- Bidチャートのみ。ブローカーがLast価格で描画する銘柄(取引所の株式や先物)は、パネルにメッセージを表示して拒否されます。
- 履歴の長さはブローカー次第です。最初の構築ではブローカーのティック履歴をダウンロードします。ブローカーがティック履歴を保持する期間には限りがあります。短いバーの長い履歴は、ターミナルの「Max bars in chart」設定(ツール、オプション、チャート)を超えることがあり、その場合チャートには最新のバーだけが表示されます。EA自身のチェックが読み戻すのはその設定値の半分までなので、設定値が低くても、チェック対象のバーが少なくなるだけです(設定値5,000と約80,000本のバーがある1秒足チャートでテスト:8分間で余分な再構築はありませんでした)。
- 秒足を収められる期間には限りがあります。スロットは過去に収まっている必要があります。1秒足チャートには開始から約339日分、5秒足チャートには約4.6年分のバーを収める余地があります。余地を使い切ると、EAが自ら履歴を再構築します。
- カスタムチャートを使っている間は、EAを動かし続けてください。ビルド6230での実測:EAを削除したりターミナルを再起動したりすると、ターミナルがカスタム銘柄の最新部分のバー(最大でスロット一日分、1,440本)を、ティックは残したまま削除することがありました。その場合、EAなしで開いたままのチャートには空白が表示されます。EAが再び起動すると、それを検出して銘柄を再構築します。再起動後、チャートには最大で約一分間このような空白が表示されることがあります。EAはターミナルがバーを読み込むのを最大60秒待ち(その間ヘルパーには「Checking the bars after the start」と表示されます)、まだバーが欠けていれば銘柄を再構築します(テストでは0.2~1.3秒)。テストでは、EAの実行中にも、再起動の数分後にターミナルがバーを削除することがありました。EAはチェック(60秒ごと。三つのテストでは、テスト自体の検証プログラムが空白を確認してから74秒後に修復されました)でそれを検出し、銘柄を再構築しました。チャートが開かれていない銘柄では、そのチェックか次の起動まで空白が残ることがあります。最も多く発生したのは、チャートが開かれていないカスタム銘柄でした。
- 修復ではカスタム銘柄全体を空にしてから埋め直します。チェックで誤ったバーや欠落したバーが見つかると、EAはカスタム銘柄のティックとバーを削除し、同じ最初のティックから書き直します(テストでは0.2~2.4秒)。その間、カスタムチャート上のインジケーターやEAからは、履歴がいったん消えて再び現れるように見えます。
- カスタム銘柄一つにつきEAは一つで、EAはそのチャートのEA枠を使用します。取引用EAのチャートではなく、ソース銘柄の空いているチャートに適用してください。
- カスタム銘柄ではストラテジーテスターを使えません。ビルド6230での実測:テスターはカスタム銘柄のティックを供給しますが、バーは一部しか構築しないか、まったく構築しません(二つのテストで、4,316本のM1バーのうち1,324本と0本)。そのため、バーを必要とするEAはカスタム銘柄ではテストできません。そのようなEAはブローカーの銘柄でテストしてください。
- テスト環境:
- MetaTrader 5 ビルド6230のみ、Windows 10、3840 x 2160の画面(288 dpi)
- リテールCFDブローカーのデモ口座:BTCUSDmとETHUSDmはライブ、金曜日のXAUUSDmとUSTECmのティックを実際のペースでリプレイ(土曜日のテスト)。スクリーンショットにはEURUSDm、XAUUSDm、USTECmの履歴を使用
- ストラテジーテスター:プラットフォームのデモサーバーのネッティングとヘッジングのデモ口座、EURUSD、GBPUSD、XAUUSD
- 最長のテストは75分。他のブローカー、リアルマネー口座、MQL5 VPSではテストしていません
- まずは無料のストラテジーテスター用デモ版でお試しください。デモ版がバーを表示するのはテスターのサブウィンドウ内だけです(上記の「ストラテジーテスター」を参照)。ライブ口座またはデモ口座でカスタムチャートを使うには完全版が必要です。
