![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
Neyse gelelim ağıtlara...
Sıradan masaüstü uygulamalarında tam olarak neyin bulunmadığını soruyorsunuz.
Uygulamalarda ne eksik? Senkronizasyon? )))
Geliştiriciler zaten kutudan çıkmış tüm bu hileleri yapmasaydı, MQL program yazarları, güvenlik ve yürütme hızı sorunları olsun, masaüstü geliştirmenin tüm cazibeleriyle sürekli olarak karşılaşacaklardı.
1. Uygulamalarda neler eksik? Senkronizasyon? )))
2. Bazı sözde bilimsel akıl yürütme, gerçekler olmadan gitti. MT4'te göstergeler, sıralı OnInit() ve DeInit() ile mükemmel çalışır . Aynı zamanda, bir dezavantaj var - tüm göstergelerin tek bir iş parçacığında çalışması. MT5'te de gerekli olan göstergenin doğru yazılmasıyla çözülür. MT5'te bundan çok uzaklaşmamış olmalarına rağmen, aynı şekilde, bir grafiğin göstergeleri tek bir iş parçacığında çalışmaya devam ediyor.1. Ne senkronizasyonundan bahsediyorsunuz?!
2. MT4'te, gösterge kodunun yürütülmesinin bir parçası olarak, önce init, ardından deinit gerçekleştirilir, başka neye ihtiyacınız var?! MT5 ile aynı.
Birkaç kişi, MT5'teki gösterge yürütme paradigması çerçevesinde tamamlanması sorunlu bir görevin belirli bir örneğini zaten istedi. Bir örnek olacak mı, olmayacak mı, parmaktan emilmeyecek mi?
1. Ne senkronizasyonundan bahsediyorsunuz?!
Interthread hakkında. Bir iş parçacığı sonlandırılıncaya kadar (sonlandırma komutu verilen), diğeri başlamaz. Veya, tüm bunlar tek bir iş parçacığında gerçekleşirse, o zaman daha da basittir: "eski" TF ile ilişkili tüm programların yürütülmesini tamamlarız ve ancak bundan sonra programları "yeni" TF'de başlatırız.
2. MT4'te, gösterge kodunun yürütülmesinin bir parçası olarak, önce init, ardından deinit gerçekleştirilir, başka neye ihtiyacınız var?! MT5 ile aynı.
Doğru. MT4'te her şey tamamen aynıdır. Ancak MT5'te öyle değil. Konunun konusu bu.
Birkaç kişi, MT5'teki gösterge yürütme paradigması çerçevesinde tamamlanması sorunlu bir görevin belirli bir örneğini zaten istedi. Bir örnek olacak mı, olmayacak mı, parmaktan emilmeyecek mi?
Bu doğru, yapmamalılar. Pekala, örneğin Total Commander'ı çalıştırın. Neden Microsoft'tan Windows'un op.memory'de TC kopyalarının "doğru" boşaltma/yükleme sırasına bakmasını talep ediyorsunuz? Bu bir işletim sistemi endişesi mi?
İşletim sisteminin endişesi, TC'nin diğer TC'lere müdahale etmemesi ve orada bellekte yaptıkları, dosya alışverişi veya daha samimi bir şey - bu onların işi, programları.
"Bence de!" (c) Mimino, 1977
Total Commander'ın bununla ne ilgisi var? Doğrudan sistem kaynakları üzerinde çalışması anlamında oldukça düşük seviyeli bir yardımcı programdır. Bir MQL programı söz konusu olduğunda, MT platformunun görevi, uygulama programlayıcısını senkronizasyon gibi sistem sorunlarından mümkün olduğunca kurtarmaktır - bu platform herkes için daha verimli ve tek bir hamlede sağlayabilir. MQL programcılarının fiyat teklifi analizi ve ticaret stratejileri hakkında düşünmesi gerekir. MT'nin amacı budur.
Dosya ve veri alışverişinin bununla ne ilgisi var? Bir MQL programı bağlamında işin mantığını düşünün. Şimdi mesele şu ki, hiçbir şeyi değiş tokuş etmeyecek, sadece OnInit / OnDeinit olaylarını amaçlanan amaçları için kullanmaya çalışıyor - bazı durumlardan doğru bir şekilde başlamak ve durum kaydetme ile kendini doğru bir şekilde tamamlamak. Bunun için uygun değillerse, daha önce belirtildiği gibi, ne için? Savunucuların argümanlarına bakılırsa - içeride bir tef ile dans etmeye çalışmak ve önce ve sonra başka hangi kopyaların yapıldığını ve hangi zaman diliminden ve hangisine geçtiklerini öğrenmek için? Bu, MQ'nun elde etmek istediği şeyin tam tersi bir etkidir - bir kopyanın diğeri hakkında hiçbir şey bilmediği.
Bir kopyanın hiçbir şey bilmemesi ve öğrenmesi gerekmemesi ve aynı zamanda yan etkiler olmadan çalışması için, çekirdeğin tüm kopyaları bilmesi gerekir - hem tamamlanmış hem de başlayanlar - ve onlar için zarif işleme sağlamalıdır init /deinit olayları standart kuyruk metaforunda . Terminal zaten tüm kopyaların kaydını tutar ve olay kuyruğunu kullanır, ancak init/deinit bir nedenden dolayı olay mantığını ihlal eder.
Bir kopyanın hiçbir şey bilmemesi ve öğrenmesi gerekmemesi ve aynı zamanda yan etkiler olmadan çalışması için, çekirdeğin tüm kopyaları bilmesi gerekir - hem tamamlanmış hem de başlayanlar - ve onlar için zarif işleme sağlamalıdır. /deinit olayları standart kuyruk metaforunda . Terminal zaten tüm kopyaların kaydını tutar ve olay kuyruğunu kullanır, ancak init/deinit bir nedenden dolayı olay mantığını ihlal eder.
Dönemi ch'de saklamak için sorun nedir? değişken?
Göstergenin farklı zaman dilimlerinde art arda başlatılması arasında bir dizi veriyi aktarmak neden gerekli olabilir?
Andrey, ben genel uçbirim değişkenlerini sevmiyorum. Onlarla (uzun bir süre olsa da) denedim ve hızları ve senkronizasyon karmaşıklığı konusunda çok hayal kırıklığına uğradım. Asılsız olmamak için, hızlarını gösteren bir örnek (biraz sonra) yazmaya çalışacağım. Belki bir şeyler çoktan değişti ve ben yanılıyorum. Ancak küresel değişkenler hakkında sevmediğim şey, kendi ayrı hayatlarını yaşamaları ve kesinlikle halka açık olmaları. Herkes onları F3'e basarak görebilir ve tutamaçlarla silebilir. Birkaç tane olduğunda, o kadar da kötü değil, ama herkes onları kullanmaya başlarsa, kişisel olarak masada bir dağınıklık gibi hissetmeye başlıyorum.
Dizileri aktarma pahasına. Evet, buna sık sık gerek olmadığına katılıyorum. Ancak burada, örneğin, belirli bir örnek benim göstergemdir . Dahili çalışması seçilen TF'ye bağlı değildir, çünkü başlatma sırasında, tüm TF'leri (neredeyse tümü) yükler ve kendi ortak dizisini (logaritmik tırnak dizisi gibi bir şey) oluşturur ve buna dayalı birkaç dizin dizisi daha olmak üzere oldukça büyük hesaplamalar da yapılır. TF'yi her değiştirirken, aynı hacimsel işi yapmak tamamen mantıksızdır, TF'yi değiştirirken frenleme olacaktır. Kafamda hala uygulayacağım örüntü tanıma algoritmaları var, bu yüzden başlatma hesaplamaları birkaç saniyeye ulaşabilir ve bunun sadece bir kez olmasını ve unutmasını istiyorum.
Bir kopyanın hiçbir şey bilmemesi ve öğrenmesi gerekmemesi ve aynı zamanda yan etkiler olmadan çalışması için, çekirdeğin tüm kopyaları bilmesi gerekir - hem tamamlanmış hem de başlayanlar - ve onlar için zarif işleme sağlamalıdır. /deinit olayları standart kuyruk metaforunda . Terminal zaten tüm kopyaların kaydını tutar ve olay kuyruğunu kullanır, ancak init/deinit bir nedenden dolayı olay mantığını ihlal eder.
Ve şimdi tek bir olay sırası olmadığını, her sembol periyodu için bir sıra olduğunu hayal edin. Kaç karakter-dönem, çok sıra var.
Şimdi sıraların işlendiği sırayı önerin.
Ve şimdi tek bir olay sırası olmadığını, her sembol periyodu için bir sıra olduğunu hayal edin. Kaç karakter-dönem, çok sıra var.
Şimdi sıraların işlendiği sırayı önerin.
1. Interthread hakkında. Bir iş parçacığı sonlandırılıncaya kadar (sonlandırma komutu verilen), diğeri başlamaz. Veya, tüm bunlar tek bir iş parçacığında gerçekleşirse, o zaman daha da basittir: "eski" TF ile ilişkili tüm programların yürütülmesini tamamlarız ve ancak bundan sonra programları "yeni" TF'de başlatırız.
2. Doğru. MT4'te her şey tamamen aynıdır. Ancak MT5'te öyle değil. Konunun konusu bu.
3. Önceki gün hazırlıksız olarak Grafik nesnelerle çalışırken . Genel olarak, güzellik ortaya çıkıyor: bir gösterge hala var ve kendinden sonra temizlenmedi ve ikincisi bu nesnelerin üzerine çiziyor. Bu yüzden kullanıcıya şunu açıklayacağız: "TF'yi değiştirirken kısa süreli parazit gözlemleyeceksiniz." )))1) Daha önce yazdığım gibi yapmanız gerekiyor: biriken veritabanı periyodik olarak bir dosyaya veya başka bir depoya kaydedilmelidir, sorun yok - dosyayı açın, yazın, kapatın. Bunu, init ve deinit'te değil, bu verileri her güncellediğinizde veya periyodik olarak yapmanız gerekir. (Bir program yazarken, bir makale yazarken periyodik olarak iş biriktirirsiniz). Ve bir dosyaya yazmama hatasını garanti etmek imkansızdır, bazen güvenlik ağı için kritik durumlarda bunu yaparlar: güncellenen bilgi yeni bir dosyaya yazılır, başarılı bir yazmadan sonra eskisi silinir ve yenisi eskisiyle olduğu gibi isim değiştirilir.
2) Ayrıca zaten açıklanmıştır. Her gösterge kendi grafik nesneleri ile çalışmalıdır. Doğal olarak, zaten nesnelerin varlığını kontrol etmeniz ve zaten varsa, isme 1 eklemeniz gerekir.
3) Eh, çözülebilecekleri kendileri zaten yazdılar.
Ve bu hiç sorun değil. Bu, programların normal çalışmasıdır - benzersiz nesnelerin oluşturulması, birikmiş bilgilerin periyodik olarak kaydedilmesi, tamamlandıktan sonra kendini temizleme.
1. Bunlar sizin İstek Listeniz. Ancak masaüstü uygulamalarının çalışma şeklini istediğinizi ve istediğiniz gibi masaüstü uygulamalarının çalışmadığını söylediniz.
Masaüstü uygulamalarına ne diyorsunuz? Görünüşe göre MT5 bir masaüstü uygulaması değil...
2. Hikaye uydurmayın. Hem MT4 hem de MT5'te onit ve ondeinit'in yürütme sırası aynıdır. Programın deinit ile başlayacağı diye bir şey yok.
Bunu uydurmuyorum. Bu, mevcut başlığın konusu. Mesele şu ki, MT5'te henüz DeInit'i tamamlamamış olan göstergenin Init'inin ilk önce yürütülebileceği ortaya çıkıyor. Olur olmaz. Konuyu okumadın mı?
3. Tamam, örneklere bakalım:
1) Daha önce yazdığım gibi yapmanız gerekiyor: biriken veritabanı periyodik olarak bir dosyaya veya başka bir depoya kaydedilmelidir, sorun yok - dosyayı açın, yazın, kapatın. Bunu, init ve deinit'te değil, bu verileri her güncellediğinizde veya periyodik olarak yapmanız gerekir. (Bir program yazarken, bir makale yazarken periyodik olarak iş biriktirirsiniz). Ve bir dosyaya yazmama hatasını garanti etmek imkansızdır, bazen güvenlik ağı için kritik durumlarda bunu yaparlar: güncellenen bilgi yeni bir dosyaya yazılır, başarılı bir yazmadan sonra eskisi silinir ve yenisi eskisiyle olduğu gibi adı değiştirilir.
Aynı dosyayı saniyede birkaç kez güncellemeyi deneyin ve deneyiminizi paylaşın.
2) Ayrıca zaten açıklanmıştır. Her gösterge kendi grafik nesneleri ile çalışmalıdır. Doğal olarak, zaten nesnelerin varlığını kontrol etmeniz ve zaten varsa, isme 1 eklemeniz gerekir.
Adına 1 eklemeye ne dersiniz? Mesele şu ki, ekranda aynı anda aynı göstergeden grafik nesneler var, ancak bunun farklı kopyaları var. Teknik olarak bir çatışma yok. Çakışma, eski kopya silinene kadar ekranda leapfrog gören kullanıcı tarafından gözlemlenecektir.
3) Eh, çözülebilecekleri kendileri zaten yazdılar.
Ve bu hiç sorun değil. Bu, programların normal çalışmasıdır - benzersiz nesnelerin oluşturulması, birikmiş bilgilerin periyodik olarak kaydedilmesi, tamamlandıktan sonra kendini temizleme.