![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Yorumları olan bir kaynak kodu var.
Bakmak için çok tembel misin? Ya da bir şey net değil mi?
Baktı. Fikri kod olmadan aldım. Bana neden tavsiyede bulunduğun açık değil:
Piyasa İzleme'ye en likit enstrümanları eklemeniz gerekir.
Ardından bu aletlerin bardaklarını ekleyin.
Ve OnBookEvent() tetiklendiğinde, 1 tik (son) kopyalayın, zaman olacak ve hemen yerel saati alıp karşılaştırın.
Yönteminiz neden daha iyi?
Baktı. Fikri kod olmadan aldım. Bana neden tavsiyede bulunduğun açık değil:
Yönteminiz neden daha iyi?
Çünkü o haklı!
Yerel saat değil, sunucu saati hatası yaptım .
1. Keneler toplu olarak terminale gelir.
2. Sonraki her paket, bir önceki pakete "istiflenmemiş" ancak bir öncekiyle aynı zamana sahip olan onay işaretleri içerebilir.
3. OnBookEvent(), herhangi bir tıklamanın (fiyattaki, hacimdeki değişiklik), yani her bir tıklamanın gelmesiyle tetiklenir. (zamanlayıcıyı başlatırsınız - zaten kötü).
4. Bilgisayarın yerel saatini kullanıyorsunuz, bu hiç gerekli değil!
Aslında, ticaret için gerekli olan tek şey budur (ticaret seans sürelerini kontrol etme)
Katma
Milisaniye hassasiyete ihtiyacınız varsa, o zaman
Katma
Ancak tüm bunlar istenen sonucu vermeyecektir (ticaret zaman sınırları), çünkü
keneler işlem seansında olmayabilir ve zaman durmaz.
Birinin bekleyen emrini kaldırdığını varsayalım, emir defteri değişti,
bir sinyal var ve "eski" bir düzeltme var (zaman geçerli değil).
Terminal, sunucunun tam saatini yayınlamaz .
Beni anlamıyorsun. Hadi baştan başlayalım.
1) Programda TimeCurrent() fonksiyonunu çağırırsınız ve Market Watch'ta seçilen sembollerden biri için son fiyat teklifinin varış zamanını alırsınız.
18:00:00 olsun
2) Bir sonraki komutla, son SBER kenesinin zamanını alırsınız.
17:58:00 olsun
3) Biraz zaman geçer ve yine son SBER işaretinin zamanını istersiniz.
17:59:00 olsun
Dikkat sorusu: 18:00:00 TimeCurrent() saatinin 17:59:00 saatiyle keneyi bilmemeyi normal buluyor musunuz?
Beni anlamıyorsun. Hadi baştan başlayalım.
1) Programda TimeCurrent() fonksiyonunu çağırırsınız ve Market Watch'ta seçilen sembollerden biri için son fiyat teklifinin varış zamanını alırsınız.
18:00:00 olsun
2) Bir sonraki komutla, son SBER kenesinin zamanını alırsınız.
17:58:00 olsun
3) Biraz zaman geçer ve yine son SBER işaretinin zamanını istersiniz.
17:59:00 olsun
Dikkat sorusu: 18:00:00 TimeCurrent() saatinin 17:59:00 saatiyle keneyi bilmemeyi normal buluyor musunuz?
Verdiğim kodda tüm keneleri hesaba katabilirsiniz (sorun değil)
Son kod TineCurrent()'i kullanmaz, ancak TimeTradeServer()'ı kullanır - bu sefer yalnızca
GÜN'e kadar keneyi kontrol etmek için ve işte bu kadar!
Baştan başlayalım.
Genel olarak, ne yapmak istiyorsun, öğren?
Neden tik saatini yerel saatle karşılaştırmaya başladınız?
Orijinal hedef nedir?
Şimdi bu sorunun pratikte nasıl göründüğünü göstereceğim. Danışmanı tamamen yeniden düzenledim . Hem OnTimer'da hem de OnBookEvent'te yeni keneler yakalamayı mümkün kıldı.
Piyasaya genel bakışta 45 sembol var. Çoğu sıvı değildir.
OnBookEvent'te yeni keneler yakalamanın sonucu:
Yani 18:50 TimeCurrent saatinde SNGR- 3.19 sembolüne 18:41 ile yeni bir tik takılmıştır.
Sırada, bilgisayarın o andaki yerel saatinin ölçümleri var:
1) yeni bir onay işareti almak, yani CopyTick'e (veya ayarlara bağlı olarak SymbolInfo'ya) son çağrı anında
2) Sondan bir önceki arama anında.
Diğer bir deyişle, bu durumda sorun, yenisini alma işlevinin 10 dakika boyunca çağrılmaması nedeniyle meydana geldi .... Ve bu, SNGR- 3.19 sembolü için OnBookEvent olayının 10 dakika boyunca oluşturulmaması nedeniyle oldu .
Muhtemelen terminal onu olay kuyruğuna koydu, bir şekilde bu kuyruktan kayboldu. OnTimer ile böyle bir pervaz yoktur. Evet, bazen 20 saniyelik bir gecikmeyle bir kene gelir.
Asıl hedefiniz nedir?
Neden tiv saatini yerel saatle karşılaştırmanız gerekiyor?
Asıl hedefiniz nedir?
Neden tiv saatini yerel saatle karşılaştırmanız gerekiyor?
Sunucuda bir işaret oluştuğu an ile terminale geldiği zaman arasındaki maksimum gecikmeyi bilmek istiyorum. Ve bu süre nasıl en aza indirilebilir?
Bu bilgi, kendi test cihazınızı yazarken kullanılabilir. Hatta geliştiricileri büyük gecikmelerle şaşırtabilir.
TimeCurrent() - Son sembol işaretinin zamanı, gecikme süresinden daha az olacaktır, bu nedenle kullanılabilir. İlk sürümde yerel saati kullanmak iyi bir fikir değildi.
Sunucuda bir işaret oluştuğu an ile terminale geldiği zaman arasındaki maksimum gecikmeyi bilmek istiyorum. Ve bu süre nasıl en aza indirilebilir?
Bu bilgi, kendi test cihazınızı yazarken kullanılabilir. Hatta geliştiricileri büyük gecikmelerle şaşırtabilir.
Açık. Bensiz devam et.
Diğer forum üyeleri için
Dikkat sorusu: 18:00:00 TimeCurrent() saatinin 17:59:00 saatiyle keneyi bilmemeyi normal buluyor musunuz?
Bence konu tartışılabilir. Onay dizisinin en azından aşağıdaki kriterleri karşılamasını istiyorum:
1. Tutarlıydı, yani sonraki her bir tıklamanın zamanı >= bir önceki tıklamanın zamanı;
2. Uygunluk. Onlar. mevcut ana mümkün olduğunca yakın olan son gelen kene zamanı;
Sorununuz ikinci noktayla ilgili gibi görünüyor.
2. maddenin tartışılabilirliği şu şekildedir: Sunucuda bir onay işaretinin oluşmasından onu aldığım zamana (gecikme) kadar geçen sürenin minimum olmasını istiyorum, böylece diğerlerinden daha hızlı işleyebilir ve bir ticaret kararı verebilirim. Ancak! Tüm teklif sahipleri için gecikme aynıysa, o zaman sorun yok (anladığım kadarıyla). Onlar. aracının sunucusunda bir sorun var ama her şey eşit düzeyde. Birisi 17:59:00'da 17:59:01'de kene hakkında bilgi aldıysa ve ben 18:00'de bile almadıysam - bu büyük bir problem.
Ve işte soru. Sorun nedir (ve var mı)? Uzun süre (herkese) onay vermeyen broker sunucusunda veya uzun süre almayan MT5'te.