mt5 ObjectDelete'de bir hata mı var? - sayfa 3

 
Fernando Carreiro :
Hangi yapıyı kullandınız? "ObjectDelete()" işleviyle en son derlemede olası bir hata var gibi göründüğü için, "ObjectFind()" ile de sorunlar olabilir!

MT5: Derleme 1495 (09 Aralık 2016)

 
honest_knave :

MT5: Derleme 1495 (09 Aralık 2016)

Kodunuzu yapı 1491'de çalıştırdım ve benzer sonuçlar aldım:

2016.12 . 11 12 : 31 : 05.739 test (EURUSD.m,H1)       ObjectFind took 20126 μs
2016.12 . 11 12 : 31 : 05.739 test (EURUSD.m,H1)       ObjectDelete took 247 μs
 
Fernando Carreiro :

Kodunuzu yapı 1491'de çalıştırdım ve benzer sonuçlar aldım:

Sürekli garip. Belki iyi bir açıklaması vardır neden...?
 
honest_knave :

Bu bir hatadan ziyade anlamsal olabilir.

ObjectDelete'in amacı "belirtilen ada sahip nesneyi kaldırmaktır".

İşlevi çalıştırmanın sonunda, grafikte hala "Varolmayan Nesne" adlı bir nesne var mı? Hayır... peki bu başarı mı?

Başka bir açıdan bakıldığında, ObjectDelete "Varolmayan Nesne" adlı bir nesneyi kaldırdı mı? Hayır... peki bu başarısızlık mı?

Başarıyı sonuçla mı yoksa yapılan eylemle mi ölçüyorsunuz?

Belki de, işlev çalıştırıldıktan sonra adlandırılmış nesne grafikte kalırsa bir false beklenebilir. Aksi takdirde, bu bir başarıydı.

Belki dediğin doğrudur ama biz MQL4'ten MQL5'e geçerken aynı sonucu veya en azından referansın dönüş değerinde açıkça yazılmış bir sonucu görmeyi bekliyoruz.

Bu ilk sorunu geçerek ObjectMove işlevini test ettim ve yine DOĞRU sonuç alıyorum! bu, sizin açıklamanızın ötesine geçer, çünkü nesne sonunda mevcut değildir, bu yüzden doğru doğrudur.

ObjectMove ile mevcut olmayan bir nesnede false döndürmesi gerekir!

moveResult=ObjectMove(ChartID(),"eğilim çizgisi mevcut değil",1,zaman[4950],düşük[4980]);

Print(__LINE__,"-moveResult=",moveResult);

2016.12.11 17:22:39.367 Uzak Test-DeğişimTrendLine (EURUSD,H1) 44-moveResult=true

 
Farzin Sadeghi :

merhaba , MQL5'te bir gösterge yazıyorum, ancak ObejectDelete dize adı olarak ne yazarsam yazarsam true ! nesnesiz boş bir grafikte bile!


Nesne İşlevleri açıklamasını okuyun

Bu, belirtilen herhangi bir çizelgeyle ilgili grafik nesnelerle çalışmak için tasarlanmış işlevler grubudur.

Grafik nesnelerinin özelliklerini tanımlayan işlevler ile ObjectCreate() ve ObjectMove() işlemleri, çizelge boyunca nesneler oluşturmak ve taşımak için aslında grafiğe komutlar göndermek için kullanılır. Bu işlevler başarıyla yürütülürse, komut, grafik olaylarının ortak kuyruğuna dahil edilir. Grafik nesnelerinin özelliklerindeki görsel değişiklikler, grafik olaylarının kuyruğu işlenirken uygulanır.

Bu, "Bu nesneyi sil" komutunun başarıyla kabul edildiği anlamına gelir. Komutunuzun sonucunu GetLastError() ile kontrol edebilirsiniz. Deneyin - hangi kod iade edildi?
 
Rashid Umarov :

Nesne İşlevleri açıklamasını okuyun

Bu, "Bu nesneyi sil" komutunun başarıyla kabul edildiği anlamına gelir. Komutunuzun sonucunu GetLastError() ile kontrol edebilirsiniz. Deneyin - hangi kod iade edildi?

Kodu şu şekilde değiştirdim:

int ObjCount = ObjectsTotal(ChartID(),/*0=ana alt pencere*/0,/*all objectTypes*/-1);

ResetLastError();

bool deleteResult=ObjectDelete(ChartID(),"var olmayan nesne");

Print(__LINE__,"-",deleteResult," | ObjCount=",ObjCount," | LastError=",GetLastError());

işte sonuç:

2016.12.12 12:38:43.373 Far-TestObjectDelete (EURUSD,H1) 38-doğru | NesneSayısı=0 | SonHata=0

ERR_SUCCESS

0

İşlem başarıyla tamamlandı


bu nedenle, örneğin o nesneye erişemediğini öğrenmek için hata döndürmez. ancak MT4'te hatayı döndürür.

 
Farzin Sadeghi :

ERR_SUCCESS

0

İşlem başarıyla tamamlandı


bu nedenle, örneğin o nesneye erişemediğini öğrenmek için hata döndürmez. ancak MT4'te hatayı döndürür.

TAMAM. Öğrendiğim gibi MQL5'te bu işlemler asenkron olduğu için böyle bir durumda herhangi bir hata oluşturmuyoruz. Yani 2 seçeneğiniz var:

  • silmeden önce nesnenin var olup olmadığını kendiniz kontrol edin
  • her durumda silmeye çalışın ve nesne yoksa endişelenmeyin
 
Rashid Umarov :

TAMAM. Öğrendiğime göre MQL5'te bu işlemler eşzamansız olduğu için böyle bir durumda herhangi bir hata oluşturmuyoruz. Yani 2 seçeneğiniz var:

  • silmeden önce nesnenin var olup olmadığını kontrol edin
  • her durumda silmeye çalışın ve obect yoksa endişelenmeyin
Bu şekilde, MQL5'te ObjectDelete veya ObjectMove sonuçlarını kontrol etmenin bir faydası yoktur! MQL4'te olduğu gibi düzeltmek daha iyi değil mi?
 
Rashid Umarov :

TAMAM. Öğrendiğim gibi MQL5'te bu işlemler asenkron olduğu için böyle bir durumda herhangi bir hata oluşturmuyoruz. Yani 2 seçeneğiniz var:

  • silmeden önce nesnenin var olup olmadığını kendiniz kontrol edin
  • her durumda silmeye çalışın ve nesne yoksa endişelenmeyin

Bu durumda nasıl false döndürebilir?

ObjectDelete() belgeleri diyor ki :

Geri dönüş değeri

Kaldırma başarılıysa true , aksi takdirde false döndürür.

Belgeler daha net olmalı, "komut kabul edilirse doğru" demiyor.

Bir nesnenin silindiğinden emin olmak istiyorsak, silme komutundan sonra var olup olmadığını kontrol etmemiz gerekir, bu anlamsızdır.

Documentation on MQL5: Object Functions / ObjectDelete
Documentation on MQL5: Object Functions / ObjectDelete
  • www.mql5.com
Object Functions / ObjectDelete - Reference on algorithmic/automated trading language for MetaTrader 5
 
Alain Verleyen :

Bu durumda nasıl false döndürebilir?

ObjectDelete() belgeleri diyor ki :

Belgeler daha net olmalı, "komut kabul edilirse doğru" demiyor.

Bu şekilde düzeltilecek

Geri dönüş değeri

Komut , grafik olaylarının ortak kuyruğuna yerleştirilirse true, aksi takdirde false döndürür.