Tectonic Structure Engine
- ライブラリ
- バージョン: 1.0
- アクティベーション: 5
EA、インジケーター、スクリプトのために相場構造を描き出す MQL4 ライブラリです。HH、HL、LH、LL、EQH、EQL のラベル付き確定スイング、ブレイク・オブ・ストラクチャー (BOS)、チェンジ・オブ・キャラクター (CHoCH)、流動性スイープ、充填度を追跡するオーダーブロックとフェアバリューギャップ、そしてレンジ内での価格の位置を提供します。確定足のみを読み、リペイントしません。売買、描画、アラートは行いません。コンパイル済みの Tectonic_Structure_Engine.ex4 が提供され、このページが API の完全なリファレンスです。
クイックスタート
- Tectonic_Structure_Engine.ex4 を MQL4/Libraries にコピーします(ファイル > データフォルダを開く)。
- 下の #import ブロックをプログラムに貼り付けます。
- OnInit で:h = TSE_Create("", 0, 3, 1000); 必要なら TSE_Configure。
- OnTick または OnCalculate で TSE_Update(h) を呼びます。新しい足がなければ約1マイクロ秒で 0 を返します。
- TSE_Trend、TSE_GetEvent、TSE_NearestZone などを読み、OnDeinit で TSE_Release(h) を呼びます。
- 確認:下の例をストラテジーテスターで実行します(任意の銘柄、M15)。操作履歴に各イベントが出力され、最初の更新では全履歴が出力されます。
インポート宣言(そのままコピー可)
#import "Tectonic_Structure_Engine.ex4" int TSE_Create(string symbol, int timeframe, int strength, int history_bars); bool TSE_Configure(int handle, int break_mode, double min_swing_atr, double equal_tol_atr, double fvg_min_atr, int atr_period); void TSE_Release(int handle); int TSE_Update(int handle); int TSE_Trend(int handle); int TSE_SwingCount(int handle); bool TSE_GetSwing(int handle, int index, int &side, double &price, datetime &time, int &label); int TSE_EventCount(int handle); bool TSE_GetEvent(int handle, int index, int &type, double &level, datetime &swing_time, datetime &break_time); bool TSE_GetLevels(int handle, double &swing_high, double &swing_low, bool &high_broken, bool &low_broken); double TSE_RangePosition(int handle, double price); int TSE_ZoneCount(int handle); bool TSE_GetZone(int handle, int index, int &kind, int &dir, double &top, double &bottom, datetime &time, int &state, double &fill); int TSE_NearestZone(int handle, int kind, int dir, double price, double &top, double &bottom); int TSE_GetStats(int handle, int &stats[]); int TSE_LastError(); string TSE_ErrorText(int code); string TSE_LabelText(int label); string TSE_EventText(int type); string TSE_ZoneText(int kind, int dir); string TSE_StateText(int state); #import
コード
- スイングラベル:1 HH、2 LH、3 EQH(高値);-1 LL、-2 HL、-3 EQL(安値);0 FIRST(その側に以前のスイングがない)。
- イベント種別:1 BOS UP、-1 BOS DOWN、2 CHOCH UP、-2 CHOCH DOWN、3 SWEEP HIGH、-3 SWEEP LOW。
- ゾーン種類 (kind):1 フェアバリューギャップ、2 オーダーブロック。dir:1 強気(サポート)、-1 弱気(レジスタンス)。テキスト:BULL FVG、BEAR FVG、BULL OB、BEAR OB。
- ゾーン状態:0 FRESH(未接触)、1 TESTED(価格が進入)、2 FILLED(FVG を通過)、3 BROKEN(OB を終値で突破)。
- エラー:0 OK、-1 BAD HANDLE、-2 BAD PARAMETERS、-3 NO HISTORY、-4 NO FREE SLOT、-5 BAD INDEX。その他のコードではテキスト関数は UNKNOWN を返します。
確定足ごとの読み取り
- ゾーン:強気ゾーン内の安値(弱気ゾーン内の高値)で TESTED になり、fill(ゾーン高さに対する最深の進入率 %)が増えます。価格が遠い側の端に達すると FVG は FILLED、遠い側の端を終値で越えると OB は BROKEN になります(OB が有効なまま fill が 100% になることもあります)。
- スイング:strength 本前の足は、その高値が前の strength 本より高く、後の strength 本より低くなければスイング高値です(安値は対称)。スイングは strength 本遅れて報告され、決して動きません。min_swing_atr が 0 より大きい場合、高値から 2 x strength + 1 本の最安値を引いた値が min_swing_atr x ATR 以上必要です。同じ側の前のスイングと比べてラベル付けします:equal_tol_atr x ATR 以内なら EQH または EQL、それ以外は HH か LH、LL か HL。最新のスイング高値とスイング安値がブレイク水準です。
- ブレイク:break_mode 0 は水準を越える終値、1 はヒゲで判定します。スイング高値のブレイクは、トレンドが -1 なら CHOCH UP、それ以外は BOS UP;トレンドは 1 になり水準は使用済みになります。安値は対称。終値モードでは、ヒゲで越えて内側で引けた場合は SWEEP(水準ごとに1回)です。
- オーダーブロック:BOS または CHoCH のたびに、スイングとブレイクの間の値動きの極値、またはその最大10本前までにある最後の反対色の足(上方ブレイクなら陰線);ゾーンはその足の高値から安値までです。
- フェアバリューギャップ:3本目の安値が1本目の高値より上(強気)、または3本目の高値が1本目の安値より下(弱気)で、高さが fvg_min_atr x ATR 以上。
ATR は atr_period 本の真の値幅の単純平均です。
API リファレンス
TSE_Create
symbol:"" または NULL = チャートの銘柄。銘柄は存在する必要があります。timeframe:0 = チャートの時間足、それ以外は PERIOD_M1 から PERIOD_MN1。strength:1-50。history_bars:100-20000、最初の更新で構築。ハンドル 0-31 を返し、失敗時は BAD PARAMETERS または NO FREE SLOT で -1。既定値:break_mode 0、min_swing_atr 0、equal_tol_atr 0.10、fvg_min_atr 0.25、atr_period 14。
TSE_Configure
break_mode 0-1、min_swing_atr 0-10(0 = 無効)、equal_tol_atr 0-5、fvg_min_atr 0-10、atr_period 1-500。ハンドルを消去し、次の TSE_Update で再構築します。範囲外の値があれば false、BAD PARAMETERS で、何も変更されません。
TSE_Release
ハンドルを解放して再利用可能にします。OnDeinit で呼んでください。
TSE_Update
未処理の確定足を読みます。最初の呼び出しで history_bars を構築します。新しいイベント数(TSE_GetEvent のインデックス 0 から n-1)を返し、新しい足がなければ 0、または -1:BAD HANDLE、あるいは読み込み済みの足が 2 x strength + 4 本未満の間は NO HISTORY(次のティックで再度呼び出し)。最後に読んだ足が消えた場合(履歴の再読み込み)、ハンドルは自動で再構築されます。
int n = TSE_Update(h); if(n > 0) Print(n, " new events");
TSE_Trend
上方ブレイク後は 1、下方ブレイク後は -1、最初のブレイク前や無効なハンドルでは 0。
TSE_SwingCount と TSE_GetSwing
保存されたスイング、最新がインデックス 0:side(1 高値、-1 安値)、price、スイング足の時刻、label。無効なハンドルでは件数は -1。0 から件数-1 の範囲外では TSE_GetSwing は BAD INDEX で false を返します。
TSE_EventCount と TSE_GetEvent
保存されたイベント、最新がインデックス 0:type、level(スイングの価格)、swing_time、break_time(ブレイクまたはスイープした足)。
TSE_GetLevels
最新のスイング高値とスイング安値(まだなければ 0.0)と、それぞれがすでにブレイクされたかどうか。未ブレイクの水準が次の BOS または CHoCH のトリガーです。
TSE_RangePosition
2つの水準の間での価格の位置:0 = スイング安値、50 = 均衡、100 = スイング高値、レンジ外では 0 未満または 100 超。price 0 = ハンドル銘柄の Bid。水準が欠けているか高値が安値より上でない場合は EMPTY_VALUE。デモは 45 未満で DISCOUNT、55 超で PREMIUM を表示します。
TSE_ZoneCount と TSE_GetZone
すべての状態の保存ゾーン、最新がインデックス 0:kind、dir、top、bottom、time(FVG:中央の足、OB:その足自体)、state、fill 0-100。
TSE_NearestZone
価格に最も近い FRESH または TESTED のゾーン(0 = Bid)。ゾーン内では距離 0、同距離なら新しいゾーンを選びます。kind:0 すべて、1 FVG、2 OB。dir:0 すべて、1、-1。TSE_GetZone 用のインデックスを返し top と bottom を設定します。なければ -1(エラー OK)または BAD PARAMETERS。
double top, bottom; int z = TSE_NearestZone(h, 2, 1, 0, top, bottom); // nearest bullish order block
TSE_GetStats
動的 int 配列を渡します。サイズは 12 に変更され 12 を返します:0 読んだ足、1 スイング高値、2 スイング安値、3 BOS UP、4 BOS DOWN、5 CHOCH UP、6 CHOCH DOWN、7 SWEEP HIGH、8 SWEEP LOW、9 FVG、10 OB、11 現在有効なゾーン。最後の構築以降の件数です。
TSE_LastError とテキスト関数
TSE_LastError:最後の呼び出しのコード。TSE_ErrorText、TSE_LabelText、TSE_EventText、TSE_ZoneText(kind, dir)、TSE_StateText は「コード」に記載の文字列を返します。
動作する統合例
#import "Tectonic_Structure_Engine.ex4"
int TSE_Create(string symbol, int timeframe, int strength, int history_bars);
void TSE_Release(int handle);
int TSE_Update(int handle);
int TSE_Trend(int handle);
bool TSE_GetEvent(int handle, int index, int &type, double &level, datetime &swing_time, datetime &break_time);
int TSE_NearestZone(int handle, int kind, int dir, double price, double &top, double &bottom);
string TSE_EventText(int type);
#import
int h = -1, htf = -1;
int OnInit()
{
h = TSE_Create("", 0, 3, 1000); // chart timeframe
htf = TSE_Create("", PERIOD_H4, 3, 1000); // higher-timeframe bias
return (h >= 0 && htf >= 0) ? INIT_SUCCEEDED : INIT_FAILED;
}
void OnDeinit(const int reason) { TSE_Release(h); TSE_Release(htf); }
void OnTick()
{
TSE_Update(htf);
int n = TSE_Update(h);
for(int i = n - 1; i >= 0; i--)
{
int type; double level; datetime st, bt;
if(TSE_GetEvent(h, i, type, level, st, bt))
Print(TSE_EventText(type), " at ", level, ", H4 trend ", TSE_Trend(htf));
}
double top, bottom;
if(n > 0 && TSE_NearestZone(h, 2, 1, 0, top, bottom) >= 0)
Print("nearest bullish OB ", bottom, " - ", top);
} 代表的な設定
- 内部構造と外部構造:1つのチャートに2つのハンドル、strength 2 と 8。
- マルチタイムフレームの方向性:エントリー用にチャートのハンドル、TSE_Trend フィルターとして H4 または D1 のハンドル。
- ヒゲでのブレイク:TSE_Configure(h, 1, 0, 0.10, 0.25, 14)。このモードではスイープはありません。
- より少なく大きいゾーンとスイング:fvg_min_atr 0.5-1.0、min_swing_atr 1.0。
アーキテクチャと注意事項
- ハンドルごとに1つのエンジン、プログラムごとに最大32ハンドル。インポートする各プログラムが独自のハンドルを持ちます。データはメモリ上にあり、再起動後は履歴から再構築されます。
- 確定足のみを古い順に1回ずつ読みます:リペイントはなく、0 番目の足は使いません。
- MT4 ストラテジーテスターで 20,000 本の構築に約 80 ms かかりました。
- 他の銘柄や時間足は iHigh、iLow、iOpen、iClose、iTime で読みます。ターミナルのダウンロード中は NO HISTORY が通常です。ストラテジーテスターではテスト中の銘柄(任意の時間足)を使ってください。
- ハンドルごとに最大 2000 スイング、2000 イベント、500 ゾーン。満杯になると最も古い 10% を破棄します。
- MetaTrader 4 build 600 以降。ストラテジーテスターと最適化で安全です。DLL、ファイル、グローバル変数、チャートオブジェクト、タイマー、アラート、売買はありません。
リスクに関する注意
本ライブラリは価格構造を記述するものです。価格を予測せず、利益を保証しません。これに基づく戦略は、まずデモ口座でテストしてください。
