Grafikte yüklü olan göstergenin arabelleklerini okuma - sayfa 2

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

Muhtemelen bir şey anlamadı. Tüm bu hipotezi kontrol ettim, biri OnCalculate()'den diğeri OnTimer()'dan doldurulan iki tamponlu bir gösterge yaptım, script, danışman... danışmandan iCustom() aracılığıyla OnCalculate('de doldurulan tamponun değeri ) yazdırılır ve OnTimer() öğesinden boş bir değer görüntülenir. Aynı zamanda, gösterge, senaryoyu attığım veya danışmanı koyduğum çizelgede asılı kalıyor.

Sonuç: gösterge iCustom() aracılığıyla çağrıldığında, göstergedeki OnTimer() olayı yürütülmez...

Belki de bu nedenle belgeler diyor ki

OnTimer() işlevi, sistem zamanlayıcı tarafından yalnızca Uzman Danışmanlar ve göstergeler için oluşturulan Zamanlayıcı olayı gerçekleştiğinde çağrılır - komut dosyalarında kullanılamaz.

ve göstergelerden hiçbir şekilde bahsedilmiyor...

Görünüşe göre, mql'de hem yararlı belgelenmemiş özellikler hem de belgesiz sıkıntılar var...

События клиентского терминала - Программы MQL4 - Справочник MQL4
События клиентского терминала - Программы MQL4 - Справочник MQL4
  • docs.mql4.com
События клиентского терминала - Программы MQL4 - Справочник MQL4
 
comp :

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ü?

Oku ve yaz ve DLL nafik gerekli değil
 
pako :
Oku ve yaz ve DLL nafik gerekli değil
Peki, örnek nerede?
 
Alexey Viktorov :
Peki, örnek nerede?
Gösterge nerede?
 
comp :

Ne yazık ki, bu durumda

yardım etmeyecek.

Neden yardım etmeyecek?
 
pako :
Gösterge nerede?
Dmitry Fedoseev :
Neden yardım etmeyecek?

Deneysel:

 #property strict

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrRed

#define PAUSE 100

input double EMA = 0.1 ;       // Коэффициент экспоненциального сглаживания
input int Amount = 100 ;       // Сколько раз применить до "сброса"

double Buffer[];

int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[] )
{
   return (rates_total);
}

void OnInit ( void )
{
   SetIndexBuffer ( 0 , Buffer);

   EventSetMillisecondTimer (PAUSE);

   return ;
}

void OnDeinit ( const int reason )
{
   EventKillTimer ();

   return ;
}

void SetBuffer( const bool Random )
{
   const int Size = ArraySize (Buffer);

   if (Random)
  {
     MathSrand (( int ) TimeLocal ());

     for ( int i = 0 ; i < Size; i++)
      Buffer[i] = MathRand ();
  }
   else
     for ( int i = 1 ; i < Size; i++)
      Buffer[i] += (Buffer[i - 1 ] - Buffer[i]) * EMA;

   return ;
}

void OnTimer ( void )
{
   static int Count = 0 ;

  SetBuffer(Count % Amount == 0 );
   ChartRedraw ();

  Count++;

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

Geçenlerde bir gösterge yayınladım, sadece bir metin dizesi gösteriyor. Ve iCustom üzerinden arama yaparken, grafikteki gösterge çizgileri ve iCustom birbiriyle çakıştı, bu yüzden programlı olarak yalnızca bir sonuç çıkarmak zorunda kaldım.

Belki kodun bir kopyası bellekte oluşturulmamıştır, ancak yeniden hesaplama kendi parametreleriyle birlikte gelir.

https://www.mql5.com/ru/code/14737/83151#!tab=code

 
comp :

Deneysel:

Ne olmuş?
 
Alexey Volchanskiy :

Geçenlerde bir gösterge yayınladım, sadece bir metin dizesi gösteriyor. Ve iCustom üzerinden arama yaparken, grafikteki gösterge çizgileri ve iCustom birbiriyle çakıştı, bu yüzden programlı olarak yalnızca bir sonuç çıkarmak zorunda kaldım.

Belki kodun bir kopyası bellekte oluşturulmamıştır, ancak yeniden hesaplama kendi parametreleriyle birlikte gelir.

https://www.mql5.com/ru/code/14737/83151#!tab=code

Kodun bir kopyası, dinamik yükleme olduğu için oluşturulamaz.
 
Алексей Тарабанов :
Kodun bir kopyası, dinamik yükleme olduğu için oluşturulamaz.

Bir iddia mı yoksa bir MQ geliştiricisi misiniz? :))

Her ne kadar kendim öyle düşünüyorum, program kodunun bir kopyada olduğu ve istemciler için veri örneklerinin oluşturulduğu DLL'ye benzeterek.

Kısacası pratik anlamı, eğer grafikte bir hindi varsa, iCustom verileri ondan değil, ayrı olarak oluşturulmuş bir örnekten alır.