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?
- docs.mql4.com
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.
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.
Bazı nedenlerden dolayı, gösterge verilerini grafikten insanca okumak hala imkansız! Kulağa çılgınca geliyor, ama bu doğru.
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, 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.
Çü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.
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 ();
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.
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
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ü?