Grafikte yüklü olan göstergenin arabelleklerini okuma

 

Grafikte bir gösterge var. Aynı zamanda Timer, ChartEvent ve Calculate eventlerinde yeniden çizilir.

Komut dosyasının, CTRL+D ile görülebilen gösterge arabelleklerinin ( INDICATOR_DATA ) mevcut göstergelerini okuması gerekir. Bunu MT4'te yapmak mümkün mü?

 

DLL yoluyla çözüm "Göstergeler arasında veri aktarımı - acı verici bir soruna basit bir çözüm" makalesinde verilmiştir. Ancak, her zaman mümkün olmayan, göstergenin kaynağına harici GetPtr'ye bir çağrı eklemek gerekir.

DLL olmadan sadece tamponları okumak (yazmadan, ki bu da makalede yapılır) mümkün müdür? Makale yazıldığından beri (2010) bu konuda herhangi bir değişiklik oldu mu?

 
iCustom() yardımcı olacaktır.
iCustom - Технические индикаторы - Справочник MQL4
iCustom - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
iCustom - Технические индикаторы - Справочник MQL4
 
Alexey Viktorov :
iCustom() yardımcı olacaktır.

Ne yazık ki, bu durumda

Timer, ChartEvent ve Calculate etkinlikleri tarafından yeniden çizilir .

yardım etmeyecek.

 
Kaç değere ihtiyacınız var? Göstergenin kendisinin bu değerlerin kopyalarını terminalin global değişkenlerinde , grafikteki nesnelerin özelliklerinde, dosyalarda kaydetmesine izin verin.
 
Alexander Puzanov :
Kaç değere ihtiyacınız var? Göstergenin kendisinin bu değerlerin kopyalarını terminalin global değişkenlerinde , grafikteki nesnelerin özelliklerinde, dosyalarda kaydetmesine izin verin.

Bir script kullanarak grafikteki (en az bir) göstergenin tampon değerlerini almam gerekiyor. Göstergeden bir dosyaya arabellek atmak, betik tarafından arabellekleri okumuyor.

Yukarıdaki makalede, grafiklerdeki diğer göstergelerin arabelleklerini yalnızca okumaya değil, hatta üzerine yazmaya izin veren işaretçiler aracılığıyla güzel bir çözüm var. Buna arabellek okuma denir. Ama bu bir DLL'dir.

Görüyorsunuz, böyle bir plan uygulamak mümkün

  • gösterge, arabelleklerini bir dosyaya yazmak için global bir değişkeni bekliyor.
  • komut dosyası yürütüldüğünde böyle bir değişken oluşturur ve ilgili dosyaları alır.
Ama bu bir koltuk değneği bile değil. Bu tamponları okumak değil .

Sessizliğe bakılırsa, bu sorunun dördüncü forumda (Google hatırlıyor) kamuya açıklanmasından bu yana yedi yıldan fazla bir süre sonra, işlevselliğin geliştiricileri oluşturulmadı.

Bazı nedenlerden dolayı, gösterge verilerini grafikten insanca okumak hala imkansız! Kulağa çılgınca geliyor, ama bu doğru.

 
comp :

Ne yazık ki, bu durumda

yardım etmeyecek.

Neden? iCustom(), bu arabelleğin nasıl doldurulduğundan bağımsız olarak gösterge arabelleğini okur. Sonuçta, yine de global değişkenler düzeyinde bir arabellek bildirilir.
 
Alexey Viktorov :
Neden? iCustom(), bu arabelleğin nasıl doldurulduğundan bağımsız olarak gösterge arabelleğini okur. Sonuçta, arabellek her durumda global değişkenler düzeyinde bildirilir.

Çünkü iCustom, Timer ve ChartEvent olayları hakkında hiçbir şey bilmiyor.

Örneğin, bir grafikteki bir gösterge, tek arabelleğini her saniye rastgele sayılarla doldurur (Zamanlayıcı olayı) (veya önceki arabellek değerlerine EMA uygular). Bu sadece birkaç satır kod. Bu durumda iCustom, grafikte gördüğünüzü asla döndürmez.

 
comp :

Çünkü iCustom, Timer ve ChartEvent olayları hakkında hiçbir şey bilmiyor.

Örneğin, bir grafikteki bir gösterge, tek arabelleğini her saniye rastgele sayılarla doldurur (Zamanlayıcı olayı) (veya önceki arabellek değerlerine EMA uygular). Bu sadece birkaç satır kod. Bu durumda iCustom, grafikte gördüğünüzü asla döndürmez.

Karışıklığımı anlıyorum, teşekkürler.
 
Alexey Viktorov :
Neden? iCustom(), bu arabelleğin nasıl doldurulduğundan bağımsız olarak gösterge arabelleğini okur. Sonuçta, yine de global değişkenler düzeyinde bir arabellek bildirilir.

iCustom, grafikteki göstergeden arabellekleri okumaz, bellekte göstergenin kendi kopyasını oluşturur ve ondan okur, sadece kopya arabellekleri grafikte görüntülenmez. Ancak gösterge grafikte kendi başına bir şey çizerse, iCustom aracılığıyla çağrıldığında çizilir ve bu arada sorun yaratır.

Örneğin, gösterge aşağıdaki koda sahipse, iCustom çağrıldığında çizilecek ve metin, grafikteki göstergeden metnin üzerine bindirilecektir.

 ObjectSetString ( 0 , ShortName, OBJPROP_TEXT , "какой-то текст" );
ChartRedraw ();
 
Alexey Volchanskiy :

iCustom, grafikteki göstergeden arabellekleri okumaz, bellekte göstergenin kendi kopyasını oluşturur ve ondan okur, sadece kopya arabellekleri grafikte görüntülenmez. Ancak gösterge grafikte kendi başına bir şey çizerse, iCustom aracılığıyla çağrıldığında çizilir ve bu arada sorun yaratır.

Örneğin, gösterge aşağıdaki koda sahipse, iCustom çağrıldığında çizilecek ve metin, grafikteki göstergeden metnin üzerine bindirilecektir.

Garip. Yardımın bir yerinde, gösterge zaten çalışıyorsa, bir kopya oluşturulmadığını okudum. M.b. ne anlamadı.