MT4'ten MT5'e aktarma sorunu. Veya daha doğrusu, MT5'te bazı algoritmaların hatasız yürütülmesinin imkansızlığı. - sayfa 7

 
Andrey Khatimlianskii :

Saçma - terminalde zaten mevcut olan verilerin kopyasının organizasyonunda.

Böyle bir sürü saçmalık var. MT4'ün Ağustos 2005'te piyasaya sürülmesiyle birlikte ZigZag göstergesi ortaya çıktı. Orada çok fazla hata var. Terminali bir kopya halinde, sonra hızlı pazarda asabilirdi. Ve sık sık havada uç noktalar sergiledi, çubukların alçak/yüksekliğine bağlı değildi.

Mesajlardan birinde, bu zikzak geliştiricisi bunun (lütfen duygu olmadan daha fazla kabul edin) bu bulanık mantığın bir tezahürü olduğunu söyledi........

Ancak şimdi bile ve MT4'ün geri çekilmesinden bu yana 14 yıl geçti , zikzak göstergesinin herhangi bir işlem yapmayan bir parametresi - Sapma - var. Yani bu parametrenin hangi değerini ayarlarsanız ayarlayın, ZigZag'ın grafik üzerindeki çizimi değişmeyecektir.

Çok sayıda program bu göstergeye dayanmaktadır. Çoğu geliştirici bu parametreyi programlarına dahil eder. Bilgisiz parametre. Ve geliştiriciler buna sadece fantastik kayıtsızlık. Bu arada parametre bilgisayar kaynaklarını yiyor.

Ve çeşitli başka vesilelerle buna benzer birçok an vardı.

 

Devam edeceğim.

Havada asılı duran bu zikzak ekstremler, zaman serilerine erişirken sahip olduklarımızla ortak bir yapıya sahiptir.

Sadece MT4'te zaman serilerine erişim reddi yoktu. Orada bazı işlevler düzgün çalışmadı (belki şimdi de çalışıyorlar). Dahili kullanımım için bir açıklamam vardı. Bunu da kendi yöntemiyle zorla yaptı. Ve her şey işlemciye yük olmadan hatasız çalışmaya başladı. Grafiklerde onlarca zikzak gösterilmesi bile terminalin donmasına neden olmadı...

 
Andrey Khatimlianskii :

Her şey işe yarasaydı, bu soruna ayrılmış milyonlarca konu olmazdı.

Sadece mantığın, terminal kullanıcılarının ustalaşmaya hazır olduğundan daha karmaşık olduğu ortaya çıktı.
Evet ve muhtemelen hatalar var, ancak geliştiricilerin bunları araması boşuna değil ve hiç kimse de çoğaltmak ve kullanıcılardan kanıtlamak istemiyor.

Andrei, elimizdekilerle devam etmeyi öneriyorum. Ve bahsettiğin şeye sahip olduğumuza göre, konuşmak mı daha iyi, yoksa yine de etrafta dolaşmak mı?

Yeterince sorun olduğunu düşünüyorum, ancak bunları şubeden şubeye konuşmak yerine (ki bu da yararlıdır - bazen düzeltilir), ancak onları atlayarak.

İyi bir seçenek önerdim - gerekli zaman dizilerini tam kullanılabilir oldukları anda önbelleğe almak. Ve sonra - hazır ve her zaman mevcut olan zaman dizilerinden gerekli tüm verileri almak için. Ve onları yeni verilerle tamamlayın. Aynı zamanda, uygun olduklarında - yavaş yavaş ve gerekli oldukları anda değil.

Yani en azından işler hareket edecek. Ve konuşmalar daha sonra - yapacak bir şey olmadığında - bırakılabilir.

 
Eugeni Neumoin :

Devam edeceğim.

Havada asılı duran bu zikzak ekstremler, zaman serilerine erişirken sahip olduklarımızla ortak bir yapıya sahiptir.

Sadece MT4'te zaman serilerine erişim reddi yoktu. Orada bazı işlevler düzgün çalışmadı (belki şimdi de çalışıyorlar). Dahili kullanımım için bir açıklamam vardı. Bunu da zorla yaptı. Ve her şey işlemciye yük olmadan hatasız çalışmaya başladı. Grafiklerde onlarca zikzak gösterilmesi bile terminalin donmasına neden olmadı...

Bir zaman serisine erişim reddedilirse, senkronizasyon aşamasında olduğu anlamına gelir. Bir sonraki onay işaretine kadar beklemeniz gerekir.

Sizin durumunuzda, zaman dizilerini önbelleğe almak daha iyidir - bunlar her zaman beklemeden ve ilk istekte kullanılabilir olacaktır.

Gösterge başlatıldığı anda önbelleğe alın - "senkronizasyon için bekleme" zamanı olduğunda ve beklerken bir sonraki zaman serisinin verilerini isteyin.

 
Artyom Trishkin :

Andrei, elimizdekilerle devam etmeyi öneriyorum. Ve bahsettiğin şeye sahip olduğumuza göre, konuşmak mı daha iyi, yoksa yine de etrafta dolaşmak mı?

Yeterince sorun olduğunu düşünüyorum, ancak bunları şubeden şubeye konuşmak yerine (ki bu da yararlıdır - bazen düzeltirler), ancak onları atlayarak.

İyi bir seçenek önerdim - gerekli zaman dizilerini tam kullanılabilir oldukları anda önbelleğe almak. Ve sonra - hazır ve her zaman mevcut olan zaman dizilerinden gerekli tüm verileri almak için. Ve onları yeni verilerle tamamlayın. Aynı zamanda, uygun olduklarında - yavaş yavaş ve gerekli oldukları anda değil.

Yani en azından işler hareket edecek. Ve konuşmalar daha sonra - yapacak bir şey olmadığında - bırakılabilir.

O zaman, geliştiricilerin düzeltebilmesi için tekrarlanabilir bir örnek yapmak zaten daha verimlidir.

 
Artyom Trishkin :

Andrei, elimizdekiyle devam etmeyi öneriyorum. Ve bahsettiğiniz şeye sahip olduğumuza göre, konuşmak mı daha iyi, yoksa yine de etrafta dolaşmak mı?

Yeterince sorun olduğunu düşünüyorum, ancak bunları şubeden şubeye konuşmak yerine (ki bu da yararlıdır - bazen düzeltirler), ancak onları atlayarak.

İyi bir seçenek önerdim - gerekli zaman dizilerini tam kullanılabilir oldukları anda önbelleğe almak. Ve sonra - hazır ve her zaman mevcut olan zaman dizilerinden gerekli tüm verileri almak için. Ve onları yeni verilerle tamamlayın. Aynı zamanda, uygun olduklarında - yavaş yavaş ve gerekli oldukları anda değil.

Yani en azından işler hareket edecek. Ve konuşmalar daha sonra - yapacak bir şey olmadığında - bırakılabilir.

Terminal geliştiricileri bunu neden yapamıyor? Her neyse, zaman serisi güncellemesi sırasında zaman serisine erişim yoktur. Herkesin buna, diyelim ki önbelleğe alınmış geçmişe erişmesine izin verin. Bundan ne değişecek? Yani erişimde hiçbir zaman kesinti olmaması için. Belki sıfır çubuğunda bazı gecikmeler olabilir. Hikayenin geri kalanı her zaman mevcut olacak.

 
Artyom Trishkin :

İyi bir seçenek önerdim - gerekli zaman dizilerini tam kullanılabilir oldukları anda önbelleğe almak. Ve sonra - hazır ve her zaman mevcut olan zaman dizilerinden gerekli tüm verileri almak için. Ve onları yeni verilerle tamamlayın.

bu kötü bir seçenek, terminalde zaman serileri oluşturma ve senkronize etme mantığını tamamen tekrarlamanız gerekiyor - sonra yeni bir onay işareti geldi, ardından senkronizasyon bitmedi... sonra bağlantı koptu

Not: ve neden bunu? - Hayatta kimse nasıldır bilmiyorum, bir cep telefonum, bir arabam var ve hatta yanımda sadece bir cüzdan taşıyorum ama hayatta çok vaka var mı? - sigortaya ihtiyacınız var mı? ...."Üç teyp, üç yabancı film kamerası, üç yerli sigara tabakası, bir ceket ... süet ... Üç. Ceket")))


Artyom Trishkin :

Bir zaman serisine erişim reddedilirse, senkronizasyon aşamasında olduğu anlamına gelir. Bir sonraki onay işaretine kadar beklemeniz gerekir.

her şey doğru! ancak MQL programının hesaplamalarını herhangi bir yerde durdurmanız ve bir sonraki tıklamadan önce terminale çıkmanız gerekiyor ... Periyodik olarak Delphi'deki gibi bir şey öneriyorum "Abort() veya Halt()" - Zaman serilerine erişimde bir kez hata aldım - bu kritik bir hatadır , birçok kez işlenmesi mantıklı değildir - hepsi aynı, terminal MQL programı ile etkileşim kurana kadar "iş olmayacak")))

Not: Bu hatayı ben yaratmıyorum (zaman serisi erişim hatası) - bu, terminal tarafından oluşturulur, ancak tüm MQL programcıları, terminal tarafından oluşturulan hatayı ustaca çözmeye hazır olmalıdır ???... evet (kod olduğunda birkaç yüz satır) prensipte, yenmek kolaydır ve kod büyük olduğunda ve programın farklı bölümlerinden zaman serilerine erişimi kullanmak uygun olduğunda - ve ? ve programın herhangi bir bölümünden çıkmak ve önceki hesaplamaları kaybetmemek için 999 yol üretmeniz mi gerekiyor? - Evet, mümkün, ancak kaynak kodun yazılacağına göre net bir plan (algoritma) gerektiriyor ... ve kaynak kod, hazır işlevler (sınıflar) eklenerek sonlandırılıyorsa? - yani her seferinde içeride ne olduğunu bulmak gerekecek ... büyük projelerin her şeyi sağlaması genel olarak zahmetli bir iş, IMHO

 
Igor Makanu : ... genel olarak büyük projelerin her şeyi öngörmesi için zahmetli bir görev, IMHO

Bir program 14 yıldır oluşturulmuşsa, yeni tasarım yöntemini kullanarak çevirirseniz kendinizi çekmeniz daha kolay olur. Ayrıca birden çok bağlantıda hata ayıklamak da zordur. Zaman dilimlerine uygunluğunun kontrol edilmesi, erişim eksikliği durumunda ciddi gecikmelere neden olur. Otomatik grafik yapılar açılırsa iyi olur. Otomatik modda yeniden yapılandırma nadir görülen bir olgudur. Burada gecikme fark edilemez. Doğru, bu durumda bile, zaman serilerine erişim kesintiye uğradığında, grafik yapılar bazen kesik bir biçimde görüntülenir. Bazı elemanların birikmek için zamanı var ama bazılarının yok... Veya bazı TF için fraktal filtreleme ile bir budama var.

***

 
Eugeni Neumoin :

Bir program 14 yıldır oluşturulmuşsa, yeni tasarım yöntemini kullanarak çevirirseniz kendinizi çekmeniz daha kolay olur. Ayrıca birden çok bağlantıda hata ayıklamak da zordur. Zaman dilimlerine uygunluğunun kontrol edilmesi, erişim eksikliği durumunda ciddi gecikmelere neden olur. Otomatik grafik yapıları açık olsa iyi olurdu. Otomatik modda yeniden yapılanma nadir görülen bir olgudur. Burada gecikme fark edilemez.

Ancak sorun, yapılandırmanın grafik arayüz üzerinden yapılmasıdır. Kullanıcı düğmeye basar ve... bir sonraki onay işaretini beklemeniz gerekir. Veya programın istenen tepkisi gerçekleşene kadar düğmeye birkaç kez basın. Kullanıcının tepkisi nedir?... -***

Ancak MT4'te böyle bir sorun yok.

Seni çok iyi anlıyorum, bu yüzden tartışmayı desteklemeye karar verdim.

Pekala, bir öneri daha: çok uzun zaman önce iClose()..iXXX() zaman serisine erişmek için işlevler ekledik - harika!

bunların senkron fonksiyonlar olmasına izin verin, yani zaman serilerine erişim daha uzun sürebilir, ancak terminal düzeyinde garanti edilir veya uv.geliştiriciler, yalnızca terminal geçmiş verilere erişim vermeye hazır olduğunda ( OHLC ), MQL programına bir onay işareti verecek bir ön derleyici yönergesi ekler. hazır değil, o zaman kene yok, bu ön derleyici yönergesinin kullanıcı dahil olmasına izin verin

....

ancak amaç aynı - kullanıcıları OHLC tablosunun hazır olup olmadığının sonsuz kontrollerinden kurtarmak için, bu sorun MT5'in ortaya çıkmasından bu yana sadece MQL programı içindeki kontroller düzeyinde çözüldü, bu zahmetli bir süreç ve bence kullanıcılar terminalden sorunsuz bir şekilde bekler ve istedikleri zaman, kod zaman serisi verilerinin herhangi bir bölümünde almaları garanti edilir.

 
Igor Makanu :

bu kötü bir seçenek, terminalde zaman serileri oluşturma ve senkronize etme mantığını tamamen tekrarlamanız gerekiyor - sonra yeni bir onay işareti geldi, ardından senkronizasyon bitmedi... sonra bağlantı koptu

Not: ve neden bunu? - Hayatta kimse nasıldır bilmiyorum, bir cep telefonum, bir arabam var ve hatta yanımda sadece bir cüzdan taşıyorum ama hayatta çok vaka var mı? - sigortaya ihtiyacınız var mı? ...."Üç teyp, üç yabancı film kamerası, üç yerli sigara tabakası, bir ceket ... süet ... Üç. Ceket")))


her şey doğru! ama MQL programının hesaplamalarını herhangi bir yerde durdurmanız ve bir sonraki tıklamadan önce terminale çıkmanız gerekiyor ... Periyodik olarak Delphi'deki gibi bir şey öneriyorum "Abort() veya Halt()" - Zaman serilerine erişirken hata alıyorum bir kez - bu kritik bir hatadır , birçok kez işlenmesi mantıklı değildir - hepsi aynı, terminal MQL programı ile etkileşim kurana kadar "iş olmayacak"))))

Not: Bu hatayı ben yaratmıyorum (zaman serisi erişim hatası) - bu, terminal tarafından oluşturulur, ancak tüm MQL programcıları, terminal tarafından oluşturulan hatayı ustaca çözmeye hazır olmalıdır ???... evet (kod olduğunda birkaç yüz satır) prensipte, yenmek kolaydır ve kod büyük olduğunda ve programın farklı bölümlerinden zaman serilerine erişimi kullanmak uygun olduğunda - ve ? ve programın herhangi bir bölümünden çıkmak ve önceki hesaplamaları kaybetmemek için 999 yol üretmeniz mi gerekiyor? - Evet, mümkün, ancak kaynak kodun yazılacağına göre net bir plan (algoritma) gerektiriyor ... ve kaynak kod, hazır işlevler (sınıflar) eklenerek sonlandırılıyorsa? - yani her seferinde içeride ne olduğunu bulmak gerekecek ... büyük projelerin her şeyi sağlaması genel olarak zahmetli bir iş, IMHO

Programın çalışması fare tıklamasıyla düzenlenmişse, önemli değil - erişim var veya henüz orada değil - tepki vermeniz gerekiyor. Her şeyin nasıl kötü yapıldığı hakkında çok şey yazabilirsiniz, ancak bu durumda, her zaman talep üzerine erişimin olduğu kendi önbelleğinize sahip olmak daha iyidir.

Bir fare tıklamasıyla uzun süre hesaplanmış geçmiş veriler üzerinde bir şeyler vermek yerine, şu anda ihtiyacınız olmayan güncel verileri alırken ve zaman serilerini yeniden oluştururken - git sigara iç - diyen bir program hayal edin...

Ne istersen söyle, ama elimizdekilerden yapman gerekiyorsa, o zaman önbellekte olanı vermek ve sonra zaman serilerine erişimin kilidini açtıktan sonra yeniden inşa etmek daha iyidir.

Neden: