"MQL5'te Olay Odaklı Mimari: Bir Uzman Danışmanı Tam Teşekküllü Bir Alım-Satım Sistemine Dönüştürme" makalesi için tartışma
Danışman içinde tampon içermeyen göstergelerle çalışmak – muhtemelen buna bir örnek olabilir.
//+------------------------------------------------------------------+ //| Ticaret fonksiyonu | //+------------------------------------------------------------------+ void OnTrade() { Sleep(0); //--- } //+------------------------------------------------------------------+ //| TradeTransaction işlevi | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { Sleep(0); //--- }Ne için?
fxsaber #:
Danışman içinde tampon içermeyen göstergelerle çalışmak – muhtemelen örnek olarak uygun olacaktır.
Danışman içinde tampon içermeyen göstergelerle çalışmak – muhtemelen örnek olarak uygun olacaktır.
Örnekte, sembol verilerinin sıkı bir şekilde güncellenmesi gerçekleştiriliyor (MQL_TESTER kullanılması iyi olurdu).
void OnTick() { //--- if(BuySignal) { cSymbol.Refresh(); cSymbol.RefreshRates();
Ancak, sinyal ve tik olayları aracılığıyla hesaplanan verilerin güncelliği kontrol edilmiyor. Ve bu gerçek bir sorundur.
Bu sorun, asenkron OrderSend komutlarıyla hafifletilebilir, ancak tamamen çözülemez. Bu nedenle, böyle bir örnekte bile ChartEvent olayında, olayın oluştuğu tik verilerinin ilave olarak aktarılması gerekir.
Harika, MQL5 programlarının “Hizmet” türü gerçekten çok az değer görüyor.
Harika bir örnek, teşekkürler.
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Web sitesi politikasını ve kullanım şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Yeni makaleye göz atın: MQL5'te Olay Odaklı Mimari: Bir Uzman Danışmanı Tam Teşekküllü Bir Alım-Satım Sistemine Dönüştürme.
MQL5'te bir Uzman Danışman geliştirirken, birçok kişi en bariz çözümle başlar: tüm mantığı OnTick metoduna koyarlar. Bu şekilde başlamak gerçekten daha kolay. Ancak bu yaklaşımın gizli bir maliyeti vardır. Proje büyüdükçe, alım-satım kuralları, koşul kontrolü, emir işleme, veri güncelleme, arayüz, hesaplamalar ve günlük kaydı tek bir işleyicide birleştirilir. Sonuç olarak, kod artık programlanamaz bir duruma gelir ve aslında tamamen şans eseri bir arada tutulur. Bir yerdeki herhangi bir değişiklik sistemin tamamen farklı kısımlarını etkilemeye başlar. Görsel paneli düzeltirsiniz - ve aniden alım-satım senaryosu bozulur. Giriş filtresini değiştirirsiniz - ve arka plan kontrolünde bir hata görünür. Böyle bir Uzman Danışman, karmaşıklığın geliştiricinin güveninden daha hızlı arttığı kırılgan bir tek parça yapıya dönüşür.
MetaTrader 5, bir fiyat akışından daha fazlasıdır. Olaylara dayanmaktadır. Terminal sürekli olarak tikler, zamanlayıcı sinyalleri, kullanıcı eylemleri, işlem durumu değişiklikleri ve piyasa derinliği olayları alır. Bu mesajlar ayrı ayrı işlenmelidir. Bunu başarmak için MQL5, her biri kendi sorumluluk alanına sahip farklı işleyicilere sahiptir. OnTick piyasa güncellemelerinden sorumludur. OnTimer - periyodik ve arka plan görevleri için. OnChartEvent - grafik arayüzüne ve kullanıcı eylemlerine tepki vermek için. Mantık amacına göre dağıtıldığında, kod karmaşık olmaktan çıkar. Her modülün kendi işini yaptığı ve komşularına müdahale etmediği iyi yapılandırılmış bir mühendislik sistemine benzemeye başlar.
Bu makalede, her şeyin OnTick'te yönetildiği modelden daha olgun bir olay mimarisine nasıl geçileceğini ele alacağız. Önceden tanımlanmış işleyicilerin ve özel olayların yanı sıra bir grafiğe bağlı olmayan hizmetlerin rollerine göz atacağız. Gerçek çalışma başlamadan önce bile mimariyi bozan tipik hatalara daha yakından bakacağız. Buradaki ana fikir basittir: MQL5 amacına uygun olarak kullanıldığında, yalnızca alım-satım robotları değil, aynı zamanda tam teşekküllü uygulama sistemleri de oluşturmamıza olanak tanır.
Yazar: MetaQuotes