MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 618

 
neverness :

Kendiniz hakkında hiçbir fikriniz yokken başkalarına öğretmemeniz gerektiğini hemen söyledim.

Yardım bir "fenerden" değil "nitelikli" olmalıdır!

Görevi tekrar tanımlayın, tam olarak neyin gerekli olduğunu.

 
Vitaly Muzichenko :

Görevi yeniden tanımlayın, tam olarak neyin gerekli olduğunu.

Farklı modüller arasında MT4/MT5'te veri aktarımı olasılığıyla ilgileniyorum.

Örneğin:

Bir göstergeden diğerine veri nasıl aktarılır?

Bir göstergeden bir komut dosyasına veri nasıl aktarılır?

Bir göstergeden bir Uzman Danışmana nasıl veri aktarılır? … vb.

Aktarmanın oldukça açık ve yaygın bir yolu, aktarılan verileri ayrı bir dosyaya yazmak ve ardından bu verileri diğer modüllerdeki dosyadan okumaktır.

Ancak bu durumda, iletilen/okunan verilerin senkronizasyonunda bir sorun vardır.

Sezgisel olarak, MT4/MT5 terminalinin bazı ortak bellek arabellek bölgesine sahip olması gerektiğini ve bu bölge üzerinden veri alışverişini düzenleyen prosedürler olması gerektiğini varsayıyorum.

Ama açıklamada hiçbir şey bulamadım.

 
neverness :

MT4/MT5'te farklı modüller arasında veri aktarımı olasılığıyla ilgileniyorum.

Örneğin:

Bir göstergeden diğerine veri nasıl aktarılır?

Bir göstergeden bir komut dosyasına veri nasıl aktarılır?

Bir göstergeden bir Uzman Danışmana nasıl veri aktarılır? … vb.

Aktarmanın oldukça açık ve yaygın bir yolu, aktarılan verileri ayrı bir dosyaya yazmak ve ardından bu verileri diğer modüllerdeki dosyadan okumaktır.

Ancak bu durumda, iletilen/okunan verilerin senkronizasyonunda bir sorun vardır.

Sezgisel olarak, MT4/MT5 terminalinin bazı ortak bellek arabellek bölgesine sahip olması gerektiğini ve bu bölge üzerinden veri alışverişini düzenleyen prosedürler olması gerektiğini varsayıyorum.

Ama açıklamada hiçbir şey bulamadım.

Pekala, veri aktarımı, daha önce de belirtildiği gibi, bir dosya veya bir uçbirim global değişkeni aracılığıyla olabilir.

Ana trans.therm ise:

 // записываем значение, помещаем это всё в OnTick()
GlobalVariableSet ( "Sname" , 123.25 );

// Получаем в любой программе эти значения, так-же внутри OnTick()
GlobalVariableGet ( "Sname" ); // получим 123.25

Bu, tek bir terminaldeki tüm programlar arasında alışveriş yapmanın en kolay yoludur

 
Vitaly Muzichenko :

Eh, daha önce yazıldığı gibi veri aktarımı, belki bir dosya veya bir terminal global değişkeni aracılığıyla

Ana trans.therm ise:

Bu, tek bir terminaldeki tüm programlar arasında alışveriş yapmanın en kolay yoludur

İyi. İfadeyi göstergeye yazıyoruz:

GlobalVariableSet ( "Ad" , 123.25 ); Bu olay, örneğin OnTick() olduğunda meydana gelir.

Ancak komut dosyaları veri dizileriyle çalışmaz ve bir OnTick() olayı yoktur. Komut dosyası, OnTick() olayının gerçekleştiğini ve yeni veri alma prosedürünün uygulanması gerektiğini nasıl biliyor?

GlobalVariableGet ( "Ad" );

OnTick() yerine OnTimer() olayını kullanabilirsiniz. Ancak betiğin kendi OnTimer()'ı vardır ve göstergenin de kendi vardır ve bunlar hiçbir şekilde birbirleriyle ilişkili değildir.

Bir sorun var:

GlobalVariableSet ( "Sname" , 123.25 ); ve GlobalVariableGet ( "Ad" );?

Yoksa "Sname" değerindeki değişikliği izleyen bir prosedür var mı? OnChange türü.

Yani script, göstergenin "Sname" değerini değiştirdiğini ve bu değerin 125.35 olduğunu nereden biliyor?

GlobalVariableSet ( "Sname" , 123.25 ); ve GlobalVariableGet ( "Ad" ); ?

Farklı programlardalar.


 
neverness :

İyi. İfadeyi göstergeye yazıyoruz:

GlobalVariableSet ( "Ad" , 123.25 ); Bu olay, örneğin OnTick() olduğunda meydana gelir.

Ancak komut dosyaları veri dizileriyle çalışmaz ve bir OnTick() olayı yoktur. Komut dosyası, OnTick() olayının gerçekleştiğini ve yeni veri alma prosedürünün uygulanması gerektiğini nasıl biliyor?

GlobalVariableGet ( "Ad" );

OnTick() yerine OnTimer() olayını kullanabilirsiniz. Ancak betiğin kendi OnTimer()'ı vardır ve göstergenin de kendi vardır ve bunlar hiçbir şekilde birbirleriyle ilişkili değildir.

Bir sorun var:

GlobalVariableSet ( "Sname" , 123.25 ); ve GlobalVariableGet ( "Ad" );?

Yoksa "Sname" değerindeki değişikliği izleyen bir prosedür var mı? OnChange türü.

Yani script, göstergenin "Sname" değerini değiştirdiğini ve bu değerin 125.35 olduğunu nereden biliyor?

GlobalVariableSet ( "Sname" , 123.25 ); ve GlobalVariableGet ( "Ad" ); ?

Farklı programlardalar.

Bağlantı bağlantısı bilgisayarın sabit diskidir. Bunu yazmanız sorun olmaz diye düşünüyorum ama scriptte bile her olayda alabilirsiniz, bunun şu anki ASK ve BID değerlerini nasıl aldığınızdan bir farkı yok.


PS Örnek olarak bir gösterge ve bir komut dosyası ekliyorum, göstergeye kene hacimleri yazıyoruz

Gösterge

 //+------------------------------------------------------------------+
//|                                                          Set.mq5 |
//|                                                   Copyright 2018 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018"
#property version    "1.00"
#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   ArraySetAsSeries (tick_volume, true );
  
   // записываем значение
   GlobalVariableSet ( "Sname" , tick_volume[ 0 ]);

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

Senaryo

 //+------------------------------------------------------------------+
//|                                                          Get.mq5 |
//|                                                   Copyright 2018 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
     Alert ( GlobalVariableGet ( "Sname" ));
  }
//+------------------------------------------------------------------+
Dosyalar:
Set.mq5  4 kb
Get.mq5  1 kb
 
Vitaly Muzichenko :

Bağlantı bağlantısı bilgisayarın sabit diskidir. Bunu yazmanız sorun olmaz diye düşünüyorum ama scriptte bile her olayda alabilirsiniz, bunun şu anki ASK ve BID değerlerini nasıl aldığınızdan bir farkı yok.

Güzel!

Ve nasıl yapılır?

Örnek vermek.

Örneğin, böyle bir durum nasıl modellenir.

Gösterge verileri alır, bu verilerin varyansını hesaplar ve komut dosyası için elips noktalarının koordinatlarını hazırlar (komut dosyasına geçirilecek 4 global değişken Q1,Q2,T1,T2).

Şimdi gösterge, komut dosyasına bu global değişkenlere dayalı bir elips oluşturacak bir komut vermelidir.

Bir gösterge bunu nasıl yapabilir?

 
Vitaly Muzichenko :

Bağlantı bağlantısı bilgisayarın sabit diskidir. Bunu yazmanız sorun olmaz diye düşünüyorum ama scriptte bile her olayda alabilirsiniz, güncel ASK ve BID değerlerini nasıl aldığınızdan bir farkı yok.


PS Örnek olarak bir gösterge ve bir komut dosyası ekliyorum, göstergeye kene hacimleri yazıyoruz

Gösterge

Senaryo

Yani sizin için, örneğinizde, komut dosyası yalnızca bir kez çalışır - başlangıçta, yani OnStart () olayı gerçekleştiğinde.

Ve sonra nasıl?

Senkronizasyon nerede?

Komut dosyasının göstergeyle eşzamanlı çalışması nasıl yapılır?

Örneğin, hacimler belirli bir değeri aştığında komut dosyası nasıl etkinleştirilir?

 
neverness :

Yani sizin için, örneğinizde, komut dosyası yalnızca bir kez çalışır - başlangıçta, yani OnStart () olayı gerçekleştiğinde.

Ve sonra nasıl?

Senkronizasyon nerede?

Komut dosyasının göstergeyle eşzamanlı çalışması nasıl yapılır?

Örneğin, hacimler belirli bir değeri aştığında komut dosyası nasıl etkinleştirilir?

Senaryoyla nasıl çalışacağınız size kalmış. Belki bir komut dosyası yerine bir Uzman Danışman oluşturmanız daha kolaydır?

Değer veren bir gösterge:

 //+------------------------------------------------------------------+
//|                                                          Set.mq5 |
//|                                                   Copyright 2018 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018"
#property version    "1.00"
#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   return ( INIT_SUCCEEDED );

  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   ArraySetAsSeries (time, true );
   ArraySetAsSeries (tick_volume, true );

   // записываем нужные значение
   GlobalVariableSet ( "Q1" , tick_volume[ 0 ]);
   GlobalVariableSet ( "Q2" , tick_volume[ 1 ]);
   GlobalVariableSet ( "T1" , time[ 0 ]);
   GlobalVariableSet ( "T2" , time[ 1 ]);

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+


Döngülenmiş bir komut dosyasının basit bir örneği:

 //+------------------------------------------------------------------+
//|                                                          Get.mq5 |
//|                                                   Copyright 2018 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   while (! IsStopped ())
    {
     double Q1 = GlobalVariableGet ( "Q1" );
     double Q2 = GlobalVariableGet ( "Q2" );
     datetime T1 = ( datetime ) GlobalVariableGet ( "T1" );
     datetime T2 = ( datetime ) GlobalVariableGet ( "T2" );
     Print ( "Q1 = " ,Q1, ", Q2 = " ,Q2, ", T1 = " , TimeToString (T1), ", T2 = " , TimeToString (T2));
     Sleep ( 1000 ); // Пауза 1 секунда
    }
  }
//+------------------------------------------------------------------+

PS Kodu düzeltti.

 
Vitaly Muzichenko :

Senaryoyla nasıl çalışacağınız size kalmış. Belki bir komut dosyası yerine bir Uzman Danışman oluşturmanız daha kolaydır?

Değer veren bir gösterge:


Döngülenmiş bir komut dosyasının basit bir örneği:

MQL'de farklı modüllerin senkronize edilmesinin mümkün olmadığını anlıyorum.

TAMAM. Sonra böyle bir soru. Ve düğmeyi sahaya koyarsanız ve komut dosyasını bu düğmeye eklerseniz.

MQL'de böyle bir olasılık var mı? Yoksa böyle bir olasılık yok mu?

Sonuçta bir şekilde senaryo başlatılmalı!!!

 
neverness :

MQL'de farklı modüllerin senkronize edilmesinin mümkün olmadığını anlıyorum.

TAMAM. Sonra böyle bir soru. Ve düğmeyi sahaya koyarsanız ve komut dosyasını bu düğmeye eklerseniz.

MQL'de böyle bir olasılık var mı? Yoksa böyle bir olasılık yok mu?

Sonuçta bir şekilde senaryo başlatılmalı!!!

Konu eski , ancak yine de okuyun veya belki biri size yeni bir şey söyleyecektir. Senaryoları çalıştırmıyorum ve onlarla hiç çalışmıyorum)

Как вызвать скрипт из индикатора
Как вызвать скрипт из индикатора
  • 2008.10.15
  • www.mql5.com
Подскажите можноли и как вызвать на выполнение скрипт из индикатора...