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

 

teşekkürler ama o

Vitaly Muzichenko :

kurtarmaya özel


teşekkürler, ancak her çağrıldığında, gösterge kodunu tamamen yürütür ve EA'da (ve öyle) çok sayıda gösterge parametresine ihtiyacım olursa (ve öyle), o zaman bir gösterge hesaplaması yerine, birkaç tane alırız, bu da önemli ölçüde yavaşlayabilir süreç, mevcut onay işaretini atlamaya kadar, önceden tanımlanmış değişkenleri unuttum .....

int oranları_toplam=barlar;

global bir değişken tanımladı

int prev_hesaplanmış=0;

dizi öğelerinin sayısında kilitleniyor

 
ijonhson :

üzgünüm, anladım, ancak önceden tanımlanmış değişkenlerin değerlerini küresel ve aynı zamanda mevcutsa neden iletmek için hesaplamada açık değil

İşte bir örnek

 //+-------------------------------------------------------+
//|Параметры функции                             PROBA.mq4|
//+-------------------------------------------------------+
#property   strict

void OnStart ()
{
 Alert (Сумма( 2 , 5 ));
 
 int Сум= 0 ;
 Сумма( 2 , 5 ,Сум);   // Передаем в функцию 2 числа и получаем сумму
 Alert (Сум);
}

int Сумма( int a, int b)
{
   return a+b;
}

void Сумма( int a, int b, int & s)
{
  s= a+b;
}

İşlev parametreleri, kendisine ilettiğimiz girdi ve bize geri döndürdüğü çıktı olabilir.

 
ijonhson : int Rates_total=Barlar; int prev_hesaplanmış=0;

Gösterge çizgisinin tamamını hesaplamak için bu değişkenlere ihtiyaç vardır ve bir değere ihtiyacınız vardır. Her şey çok daha kolay. Gösterge programını analiz edin ve hesaplamak için hangi formülün kullanıldığını belirleyin. Ve bu formülü bir Uzman Danışmanda kullanın

 

Çocuklar bana böyle bir algoritmanın nasıl uygulanacağını söyle:

Hacim ile bir zaman serisi var

Son çubuğun Hacmi[1] önceki çubukların her birinden daha büyük olacak ve önceki çubukların penceresi (sayısı) harici bir değişken (extern int) tarafından ayarlanacak şekilde bir karşılaştırma yapmak gerekir.


Zor değilse bir kod örneği yazın

 
John Smith :

Çocuklar bana böyle bir algoritmanın nasıl uygulanacağını söyle:

Hacim ile bir zaman serisi var

Son çubuğun Hacmi[1] önceki çubukların her birinden daha büyük olacak ve önceki çubukların penceresi (sayısı) harici bir değişken (extern int) tarafından ayarlanacak şekilde bir karşılaştırma yapmak gerekir.


Zor değilse bir kod örneği yazın

   for ( int i= 1 ; i<NumBar; i++) {
     ArrayResize (Buf, i);
    Buf[i- 1 ] = Volume [i];
  }

 double min= Buf[ ArrayMinimum (Buf)];
 double max= Buf[ ArrayMaximum (Buf)];

 if (max < Volume [ 0 ]) { ... }
 
STARIJ :

Yardımcı oldu mu? Daha önce nasıl çalışıyordu?


Hatasız çalıştı, ctrl + h ile otomatik düzeltme yaparak kendim kaldırmış gibiyim ve > _ < fark etmedim. Ama genel olarak, kesinlikle bu İlluminati denenmiştir. Tekrar teşekkürler !

 
John Smith :

Çocuklar bana böyle bir algoritmanın nasıl uygulanacağını söyle:

Hacim ile bir zaman serisi var

Son çubuğun Hacmi[1] önceki çubukların her birinden daha büyük olacak ve önceki çubukların penceresi (sayısı) harici bir değişken (extern int) tarafından ayarlanacak şekilde bir karşılaştırma yapmak gerekir.


Zor değilse bir kod örneği yazın

Zor değil. Dizimde hafızadan yazdım (belki bir şeyi kaçırdım) ...

 //+------------------------------------------------------------------+
bool IsLastVolumeTheLargest( const string symbol_name, const ENUM_TIMEFRAMES timeframe, const int start_pos, const int count)
  {
   long array[];   // Массив для хранения объёмов
   //--- если скопировалось меньше, чем нужно, вернём false
   if ( CopyTickVolume (symbol_name,timeframe,start_pos,count,array)<count) return false ;
   //--- вернём флаг того, что максимальный объём находится в последней ячейке массива (соответствует индексу start_pos)
   return ArrayMaximum (array)==count- 1 ;
  }
//+------------------------------------------------------------------+
 

Merhaba. Dosya paylaşılamıyor. Görev - M1'deki MT4 test cihazında (MQL4) manuel test sırasında, daha eski bir dönemin (örneğin, M20) bir dosyasının oluşturulması gerekir. Bunun için PeriodConverter betiğine dayalı bir gösterge yazılmıştır. Çünkü test modunda, dosyayı (EURUSD20.csv) hemen Geçmiş klasörüne kaydedemezsiniz, dosya tüm terminaller için ortak klasöre kaydedilir - \\MetaQuotes\Terminal\Common. Ayrıca, zaten normal bir M1 grafiği üzerinde çalışan döngülü komut dosyası, verileri EURUSD20.csv dosyasından Geçmiş klasöründe bulunan EURUSD20.hst dosyasına kopyalar. Scriptte aynı anda test cihazındaki göstergede açılırsa EURUSD20.csv dosyası açılmaz (5004 ERR_FILE_CANNOT_OPEN Dosya açma hatası). Göstergeyi test cihazından kaldırırsanız, bu dosya komut dosyasında açılır ve sorunsuz bir şekilde kopyalanır. Göstergedeki dosya şu şekilde açılır: ExtHandle=FileOpen(c_symbol+(string)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
Komut dosyasındaki dosya şu şekilde açılır: ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ);
Lütfen hatamı belirtin.

 
tvv :

Merhaba. Dosya paylaşılamıyor. Görev - M1'deki MT4 test cihazında (MQL4) manuel test sırasında, daha eski bir dönemin (örneğin, M20) bir dosyasının oluşturulması gerekir. Bunun için PeriodConverter betiğine dayalı bir gösterge yazılmıştır. Çünkü test modunda, dosyayı (EURUSD20.csv) doğrudan Geçmiş klasörüne kaydedemezsiniz, dosya tüm terminaller için ortak klasöre kaydedilir - \\MetaQuotes\Terminal\Common. Ayrıca, zaten normal bir M1 grafiği üzerinde çalışan döngülü komut dosyası, verileri EURUSD20.csv dosyasından Geçmiş klasöründe bulunan EURUSD20.hst dosyasına kopyalar. Scriptte aynı anda test cihazındaki göstergede açılırsa EURUSD20.csv dosyası açılmaz (5004 ERR_FILE_CANNOT_OPEN Dosya açma hatası). Göstergeyi test cihazından kaldırırsanız, bu dosya komut dosyasında açılır ve sorunsuz bir şekilde kopyalanır. Göstergedeki dosya şu şekilde açılır: ExtHandle=FileOpen(c_symbol+(string)20+".csv",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_READ|FILE_SHARE_READ|FILE_COMMON);
Komut dosyasındaki dosya şu şekilde açılır: ExtHandleR=FileOpen("EURUSD20.csv",FILE_BIN|FILE_READ|FILE_SHARE_READ |FILE_COMMON );
Lütfen hatamı belirtin.

İşaret etti mi?

 
Alexey Viktorov :

İşaret etti mi?

anlamadım Bu seçenek, dosyanın konumuna işaret eder - \\MetaQuotes\Terminal\Common. Bu seçenek olmadan, test cihazında oluşturulan dosyayı alamayacağım. Bu seçenek olmadan, dosya MQL4\Files içinde aranacaktır - ve ben dosyayı test cihazından oraya koyamayacağım.