Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 132

 
Igor Makanu :

gösterge hesaplamasını bir sınıfta kaydır - arabellekleri sınıf alanlarına bağla

ne yazık ki...
Hiçbir şey başarılı olmadı. Arabellek sınıfın ve tanıtıcının içinde olsa bile, oluşturulan tüm dahili ara hesaplama arabellekleri, sınıf örneği silindikten sonra bile RAM'de kalır.

Bellek yalnızca TF değiştirilerek temizlenir.

Açıkçası, tanıtıcı ile belleği temizlemek için yeterli komut yok. Örneğin MemErase( int tutamacı);

 
Nikolai Semko :

ne yazık ki...
Hiçbir şey başarılı olmadı. Arabellek sınıfın ve tanıtıcının içinde olsa bile, oluşturulan tüm dahili ara hesaplama arabellekleri, sınıf örneği silindikten sonra bile RAM'de kalır.

Bellek yalnızca TF değiştirilerek temizlenir.

Açıkçası, tanıtıcı ile belleği temizlemek için yeterli komut yoktur. Örneğin MemErase( int tutamacı);

1. bir nesneye işaretçi ve bir nesne örneğinin kombinasyonları (* hakkında konuşuyorum) - kontrol edildi mi?

2. Yıkıcı , içindeki dizinin boyutunu yazıp sildi mi? (ArrayFree() ve ArrayResize(arr,0,0) )

 
Nikolai Semko :

ne yazık ki...
Hiçbir şey başarılı olmadı. Arabellek sınıfın ve tanıtıcının içinde olsa bile, oluşturulan tüm dahili ara hesaplama arabellekleri, sınıf örneği silindikten sonra bile RAM'de kalır.

Bellek yalnızca TF değiştirilerek temizlenir.

Açıkçası, tanıtıcı ile belleği temizlemek için yeterli komut yok. Örneğin MemErase( int tutamacı);

IndicatorRelease kullandınız mı?

Ama yine de zaman kaybı olduğunu düşünüyorum. Söyle bana, neden buna ihtiyacın olsun ki? Karikatür çizer misin? Ve ticaret için? Düz bir çizgiye uzanana kadar Hareketli Ortalamanın ortalamasını mı alıyorsunuz?

 
Nikolai Semko :

ne yazık ki...
Hiçbir şey başarılı olmadı. Arabellek sınıfın ve tanıtıcının içinde olsa bile, oluşturulan tüm dahili ara hesaplama arabellekleri, sınıf örneği silindikten sonra bile RAM'de kalır.

Bellek yalnızca TF değiştirilerek temizlenir.

Açıkçası, tanıtıcı ile belleği temizlemek için yeterli komut yok. Örneğin MemErase( int tutamacı);

Terminal, program kullanmasa bile önbellekleri bir süre saklar.

Belleğin ne kadar süreyle boş kaldığını tespit etmek mümkündür.

 
Alexey Viktorov :

IndicatorRelease kullandınız mı?

Ama yine de zaman kaybı olduğunu düşünüyorum. Söyle bana, neden buna ihtiyacın olsun ki? Karikatür çizer misin? Ve ticaret için? Düz bir çizgiye uzanana kadar Hareketli Ortalamanın ortalamasını mı alıyorsunuz?

Evet, teşekkürler Alex. Bu özelliği unutmuşum. Daha önce görmüştüm ama hiç kullanmadım.

Sınanmış. Bir şeyler ters gidiyor. Sil, sonra siler, ancak kaldırıldıktan sonra her şey durur.

Aşağıdaki parametrelerle göstergeyi hesaplamadan önce DrawSetup() işlevine bir satır kod eklemeniz yeterli.

 IndicatorRelease (handle);
handle= iMA ( _Symbol , _Period ,per1, 0 ,MaMethod,PriceBase);
for ( int i= 0 ;i<N;i++) handle= iMA ( _Symbol , _Period ,per2, 0 ,MaMethod,handle);

Gösterge çalışmayı durduruyor ve nedenini henüz anlayamıyorum.

Alexey Viktorov :

Ama yine de zaman kaybı olduğunu düşünüyorum. Söyle bana, neden buna ihtiyacın olsun ki? Karikatür çizer misin? Ve ticaret için? Düz bir çizgiye uzanana kadar Hareketli Ortalamanın ortalamasını mı alıyorsunuz?

Kesinlikle sana katılıyorum. O sadece işe yaramaz bir oyuncak.

 
Andrey Khatimlianskii :

Terminal, program kullanmasa bile önbellekleri bir süre saklar.

Belleğin ne kadar süreyle boş kaldığını tespit etmek mümkündür.

6 dakika bekledim - hiçbir şey temizlenmedi.

 
Igor Makanu :

1. bir nesneye işaretçi ve bir nesne örneğinin kombinasyonları (* hakkında konuşuyorum) - kontrol edildi mi?

2. Yıkıcı, içindeki dizinin boyutunu yazıp sildi mi? (ArrayFree() ve ArrayResize(arr,0,0) )

1. Evet, bir işaretçi aracılığıyla yaptım, yeni ve sil.

2. Yani dizi yok. Onlar. dahili diziler var ama isimleri yok. Sadece numarayı tut.

Ayrıca, for döngüsünün her yinelemesinde, tutamaç değişkeninin değeri bir artırılır. Onlar. dahili tamponlar çarpılır ve öncekilerin tümü bir sonrakinin hesaplanmasına dahil edilir.

Mantıksal olarak, IndicatorRelease(handle) yapmanız gerekir; göstergenin bir sonraki tamamen yeni hesaplanmasından önce, ancak yukarıda bunun göstergeyi öldürdüğünü zaten yazdım. Neden belli değil.

 
Nikolai Semko :

Evet, teşekkürler Alex. Bu özelliği unutmuşum. Daha önce görmüştüm ama hiç kullanmadım.

Sınanmış. Bir şeyler ters gidiyor. Sil, sonra siler, ancak kaldırıldıktan sonra her şey durur.

Aşağıdaki parametrelerle göstergeyi hesaplamadan önce DrawSetup() işlevine bir satır kod eklemeniz yeterli.

Gösterge çalışmayı durduruyor ve nedenini henüz anlayamıyorum.

Kesinlikle sana katılıyorum. Bu sadece işe yaramaz bir oyuncak.

Biraz düşünmedim. Bana öyle geliyor ki, çizelgeler üzerinde yineleme yapmak gibi birkaç tutamaç yapmamız gerekiyor.

currChart= ChartNext (prevChart); // на основании предыдущего получим новый график

Ve yeni bir tutamak aldıktan sonra, kullanılmış olan kullanılmış gibi atılabilir ...

 
Alexey Viktorov :

Biraz düşünmedim. Bana öyle geliyor ki, çizelgeleri sıralamak gibi birkaç tutamaç yapmamız gerekiyor.

Ve yeni bir tutamak aldıktan sonra, kullanılmış olan kullanılmış gibi atılabilir ...

gitmeyecek

 
Nikolai Semko :

gitmeyecek

Niye ya?