Tectonic Structure Engine
- Kütüphaneler
- Sürüm: 1.0
- Etkinleştirmeler: 5
EA, gösterge veya scriptiniz için piyasa yapısını çıkaran bir MQL4 kütüphanesi: HH, HL, LH, LL, EQH ve EQL etiketli onaylı swingler, yapı kırılımı (BOS), karakter değişimi (CHoCH), likidite süpürmeleri, dolum takibiyle order block ve fair value gap'ler ve fiyatın işlem aralığındaki konumu. Yalnızca kapanmış barları okur ve asla yeniden çizmez. İşlem açmaz, çizim yapmaz, uyarı göndermez. Derlenmiş Tectonic_Structure_Engine.ex4 dosyasını alırsınız; bu sayfa API'nin tam başvuru kaynağıdır.
Hızlı başlangıç
- Tectonic_Structure_Engine.ex4 dosyasını MQL4/Libraries klasörüne kopyalayın (Dosya > Veri klasörünü aç).
- Aşağıdaki #import bloğunu programınıza yapıştırın.
- OnInit içinde: h = TSE_Create("", 0, 3, 1000); isteğe bağlı TSE_Configure.
- TSE_Update(h) fonksiyonunu OnTick veya OnCalculate içinde çağırın. Yeni bar yoksa yaklaşık bir mikrosaniyede 0 döner.
- TSE_Trend, TSE_GetEvent, TSE_NearestZone ve diğerlerini okuyun; OnDeinit içinde TSE_Release(h).
- Doğrulama: aşağıdaki örneği Strateji Test Cihazında çalıştırın (herhangi bir sembol, M15). Günlük her olayı listeler; ilk güncelleme tüm geçmişi listeler.
Import bildirimi (kopyalamaya hazır)
#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
Kodlar
- Swing etiketleri: 1 HH, 2 LH, 3 EQH (tepeler); -1 LL, -2 HL, -3 EQL (dipler); 0 FIRST (o tarafta önceki swing yok).
- Olay türleri: 1 BOS UP, -1 BOS DOWN, 2 CHOCH UP, -2 CHOCH DOWN, 3 SWEEP HIGH, -3 SWEEP LOW.
- Bölge türü (kind): 1 fair value gap, 2 order block. dir: 1 yükseliş (destek), -1 düşüş (direnç). Metinler: BULL FVG, BEAR FVG, BULL OB, BEAR OB.
- Bölge durumu: 0 FRESH (dokunulmamış), 1 TESTED (fiyat girdi), 2 FILLED (FVG baştan sona geçildi), 3 BROKEN (OB kapanışla kırıldı).
- Hatalar: 0 OK, -1 BAD HANDLE, -2 BAD PARAMETERS, -3 NO HISTORY, -4 NO FREE SLOT, -5 BAD INDEX. Metin fonksiyonları diğer kodlar için UNKNOWN döndürür.
Her kapanmış bar nasıl okunur
- Bölgeler: yükseliş bölgesine giren bir dip (düşüş bölgesine giren bir tepe) durumu TESTED yapar ve fill değerini, bölge yüksekliğinin %'si olarak en derin girişi, artırır. FVG, fiyat uzak kenarına ulaştığında FILLED olur; OB, uzak kenarın ötesinde bir kapanışla BROKEN olur (OB aktifken fill %100'e ulaşabilir).
- Swingler: strength bar gerideki bar, tepesi önceki strength barın üzerinde ve sonraki strength barın altında değilse swing tepesidir (dipler ayna). Swing strength bar gecikmeyle bildirilir ve asla yer değiştirmez. min_swing_atr 0'dan büyükse, tepe eksi 2 x strength + 1 barın en düşük dibi en az min_swing_atr x ATR olmalıdır. Aynı taraftaki önceki swinge göre etiket: equal_tol_atr x ATR içinde EQH veya EQL, değilse HH veya LH, LL veya HL. En yeni swing tepesi ve swing dibi kırılım seviyeleridir.
- Kırılımlar: break_mode 0 seviyenin ötesinde kapanış, 1 fitil ister. Swing tepesinin kırılması trend -1 ise CHOCH UP, değilse BOS UP verir; trend 1 olur ve seviye tüketilir. Dipler ayna. Kapanış modunda ötesine uzanan fitil ve içeride kapanış bir SWEEP'tir, seviye başına bir kez.
- Order block: her BOS veya CHoCH'ta, swing ile kırılım arasındaki ayağın uç noktasındaki ya da en fazla 10 bar önceki son ters mum (yukarı kırılımda düşüş mumu); bölge onun tepe-dip aralığıdır.
- Fair value gap: üçüncü mumun dibi birinci mumun tepesinin üzerinde (yükseliş) ya da üçüncü mumun tepesi birincinin dibinin altında (düşüş), yüksekliği en az fvg_min_atr x ATR.
ATR, atr_period bar üzerindeki gerçek aralığın basit ortalamasıdır.
API başvurusu
TSE_Create
symbol: "" veya NULL = grafik sembolü; mevcut olmalıdır. timeframe: 0 = grafik periyodu, aksi halde PERIOD_M1 ile PERIOD_MN1 arası. strength: 1-50. history_bars: 100-20000, ilk güncellemede oluşturulur. 0-31 arası bir handle ya da BAD PARAMETERS veya NO FREE SLOT ile -1 döndürür. Varsayılanlar: 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 = kapalı), equal_tol_atr 0-5, fvg_min_atr 0-10, atr_period 1-500. Handle'ı temizler; sonraki TSE_Update yeniden oluşturur. Aralık dışı her değer: false, BAD PARAMETERS, hiçbir şey değişmez.
TSE_Release
Handle'ı yeniden kullanım için serbest bırakır. OnDeinit içinde çağırın.
TSE_Update
Henüz görülmemiş kapanmış barları okur; ilk çağrı history_bars kadar oluşturur. Yeni olay sayısını (TSE_GetEvent'te 0 ile n-1 arası indeksler), yeni bar yoksa 0 ya da -1 döndürür: BAD HANDLE veya 2 x strength + 4 bardan azı yüklüyken NO HISTORY (sonraki tikte tekrar çağırın). Son okunan bar kaybolursa (geçmiş yeniden yüklendi) handle kendini yeniden oluşturur.
int n = TSE_Update(h); if(n > 0) Print(n, " new events");
TSE_Trend
Yukarı kırılımdan sonra 1, aşağı kırılımdan sonra -1, ilk kırılımdan önce veya geçersiz handle için 0.
TSE_SwingCount ve TSE_GetSwing
Saklanan swingler, en yenisi 0 indeksinde: side (1 tepe, -1 dip), price, swing barının zamanı, label. Geçersiz handle için sayı -1'dir; 0 ile sayı-1 dışında TSE_GetSwing BAD INDEX ile false döndürür.
TSE_EventCount ve TSE_GetEvent
Saklanan olaylar, en yenisi 0 indeksinde: type, level (swing fiyatı), swing_time, break_time (seviyeyi kıran veya süpüren bar).
TSE_GetLevels
En yeni swing tepesi ve swing dibi (henüz yoksa 0.0) ve her birinin kırılıp kırılmadığı. Kırılmamış bir seviye bir sonraki BOS veya CHoCH tetikleyicisidir.
TSE_RangePosition
Fiyatın bu iki seviye arasındaki yeri: 0 = swing dibi, 50 = denge, 100 = swing tepesi, aralık dışında 0'ın altı veya 100'ün üstü. price 0 = handle sembolünün Bid fiyatı. Bir seviye eksikse veya tepe dibin üzerinde değilse EMPTY_VALUE. Demo 45'in altında DISCOUNT, 55'in üstünde PREMIUM gösterir.
TSE_ZoneCount ve TSE_GetZone
Her durumdaki saklanan bölgeler, en yenisi 0 indeksinde: kind, dir, top, bottom, time (FVG: ortadaki mum; OB: mumun kendisi), state, fill 0-100.
TSE_NearestZone
Fiyata en yakın FRESH veya TESTED bölge (0 = Bid); bölge içinde mesafe 0, eşitlikte daha yeni bölge seçilir. kind: 0 hepsi, 1 FVG, 2 OB. dir: 0 hepsi, 1, -1. TSE_GetZone için indeksini döndürür ve top ile bottom değerlerini doldurur; yoksa -1 (hata OK) veya BAD PARAMETERS.
double top, bottom; int z = TSE_NearestZone(h, 2, 1, 0, top, bottom); // nearest bullish order block
TSE_GetStats
Dinamik bir int dizisi geçirin; boyutu 12 yapılır ve 12 döner: 0 okunan bar, 1 swing tepeleri, 2 swing dipleri, 3 BOS UP, 4 BOS DOWN, 5 CHOCH UP, 6 CHOCH DOWN, 7 SWEEP HIGH, 8 SWEEP LOW, 9 FVG, 10 OB, 11 şu an aktif bölgeler. Son oluşturmadan beri sayılar.
TSE_LastError ve metin fonksiyonları
TSE_LastError: son çağrının kodu. TSE_ErrorText, TSE_LabelText, TSE_EventText, TSE_ZoneText(kind, dir) ve TSE_StateText, Kodlar bölümündeki metinleri döndürür.
Çalışan entegrasyon örneği
#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);
} Tipik ayarlar
- İç ve dış yapı: aynı grafikte iki handle, strength 2 ve 8.
- Çoklu zaman dilimi eğilimi: girişler için grafik handle'ı, TSE_Trend filtresi olarak H4 veya D1 handle'ı.
- Fitil kırılımları: TSE_Configure(h, 1, 0, 0.10, 0.25, 14); bu modda süpürme yoktur.
- Daha az ve daha büyük bölgeler ve swingler: fvg_min_atr 0.5-1.0, min_swing_atr 1.0.
Mimari ve notlar
- Her handle için bir motor, program başına en fazla 32 handle; içe aktaran her programın kendi handle'ları vardır. Veriler bellekte tutulur ve yeniden başlatmadan sonra geçmişten yeniden oluşturulur.
- Yalnızca kapanmış barlar, her biri bir kez, en eskiden en yeniye okunur: hiçbir şey yeniden çizilmez ve bar 0 hiç kullanılmaz.
- 20.000 bar oluşturmak MT4 Strateji Test Cihazında yaklaşık 80 ms sürdü.
- Diğer semboller veya zaman dilimleri iHigh, iLow, iOpen, iClose ve iTime ile okunur; terminal onları indirirken NO HISTORY normaldir. Strateji Test Cihazında test edilen sembolü kullanın (herhangi bir zaman dilimi).
- Handle başına: en fazla 2000 swing, 2000 olay ve 500 bölge; dolunca en eski %10 atılır.
- MetaTrader 4 build 600 veya üstü. Strateji Test Cihazında ve optimizasyonda güvenlidir. DLL, dosya, global değişken, grafik nesnesi, zamanlayıcı, uyarı veya işlem yoktur.
Risk uyarısı
Kütüphane fiyat yapısını tanımlar. Fiyatları tahmin etmez ve kâr garanti etmez. Ona dayanan her stratejiyi önce bir demo hesapta test edin.
