Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 440

 

Merhaba! 2015.09.17_19:07 GMT+3. EA programında dinamik dizilerin boyutlarını ayarladım. Ve derleyici hatalar üretir: "virgül bekleniyor". Ve program metninde bir değişken bulunursa, uyarılar verir: "şu ve böyle değişken, global düzeyde bir değişkenin bildirimini gizler." Anlamıyorum. Kılavuzda olduğu gibi her şey doğru görünüyor. Kod parçacıkları ekliyorum:

//--- maksimum çubuk fiyatları dizisi

bool ArraySetAsSeries(double &High[],bool);

//---

bool ArraySetAsSeries(çift &Düşük[],bool);

//--- yedekli (yedek) dizilerin boyutlarını ayarla

int ArrayResize(double &mrate[],int 16,int 9);

int ArrayResize(double &maVal[],int 16,int 9);

int ArrayResize(double &fVal[],int 3,int 2);

int ArrayResize(double &zVal[],int 3,int 0);

int ArrayResize(double &High[],int 1,int 0);

int ArrayResize(double &Düşük[],int 1,int 0);

//+------------------------------------------- --------------------+

//| Uzman başlatmasızlaştırma işlevi |

//+------------------------------------------- --------------------+

geçersiz OnDeinit(const int nedeni)

 //--- массив максимальных цен баров
bool ArraySetAsSeries ( double &High[], bool );
//---  
bool ArraySetAsSeries ( double &Low[], bool );
//--- устанавливаю размеры массивов с запасом (reserve)
int    ArrayResize ( double &mrate[], int 16 , int 9 );
int    ArrayResize ( double &maVal[], int 16 , int 9 );
int    ArrayResize ( double &fVal[], int 3 , int 2 );
int    ArrayResize ( double &zVal[], int 3 , int 0 );
int    ArrayResize ( double &High[], int 1 , int 0 );
int    ArrayResize ( double &Low[], int 1 , int 0 );  
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  { Derleyici hataları atar

{

 
Николай Никитюк :

Merhaba! 2015.09.17_19:07 GMT+3. EA programında dinamik dizilerin boyutlarını ayarladım. Ve derleyici hatalar üretir: "virgül bekleniyor". Ve programın metninde oluşursa

  1. Zaman serisi dizileri için ayrılmış sistem adları olduğundan, Yüksek[] ve Düşük[] adlı dizileri bildiremezsiniz.
  2. ArrayResize öğesinin yanlış yazımı. Bunun gibi olması gerekiyor:
     //--- устанавливаю размеры массивов с запасом (reserve)
    ArrayResize (mrate, 16 , 9 );
    ArrayResize (maVal, 16 , 9 );
    ArrayResize (fVal, 3 , 2 );
    ArrayResize (zVal, 3 );
  3. Ve bir dizi için zaman serisi bayrağını ayarlamak şöyle görünecektir:
     //--- массив максимальных цен баров
    ArraySetAsSeries (High, true );
    //---  
    ArraySetAsSeries (Low, true );
 
2015.09.17_19:45 GMT+3. Her ihtimale karşı bir .png dosyası ekliyorum:
Dosyalar:
 
Karputov Vladimir :
  1. Zaman serisi dizileri için ayrılmış sistem adları olduğundan, Yüksek[] ve Düşük[] adlı dizileri bildiremezsiniz.
  2. ArrayResize öğesinin yanlış yazımı. Bunun gibi olması gerekiyor:
Teşekkür ederim! Çok çabuk cevap verdin. Moskova saatiyle 20'de bir ışığım söndü. Geri kalanına sonra bakarım. 19:54 Moskova saati.
 
Karputov Vladimir :
Kodumu kastediyorsanız - o zaman evet, kodum yeni bir çubuğun kontrolüdür.
Eklediğim kodla ilgileniyorum - ne yaptığını anlamak istiyorum.
 
-Aleks- :
Eklediğim kodla ilgileniyorum - ne yaptığını anlamak istiyorum.

Gönderdiğiniz kod hiçbir şey yapmıyor veya daha doğrusu çalışmıyor. Hata:

 if (TimeN== 0 )
      TimeN=TimeC;

Bu koşul yalnızca bir kez çalışır - programın ilk başlangıcında. Bu noktada, statik değişken başlatılacaktır.

Aşağıdaki koşulu kontrol etmek anlamsızdır, çünkü kodunuzda TimeN değişkeni sonsuz sıfıra eşit olacaktır (daha doğrusu 1 Ocak 1970 tarihi olacaktır) ve bu sonsuz sıfırın TimeC değişkeni ile karşılaştırılması önerilmiştir. , geçerli çubuğun açılış süresine eşittir):

   if (TimeN==TimeC)
       return ;
 
Karputov Vladimir :

Sağladığınız kod hiçbir şey yapmıyor veya daha doğrusu çalışmıyor. Hata:

Bu koşul yalnızca bir kez çalışır - programın ilk başlangıcında. Bu noktada, statik değişken başlatılacaktır.

Aşağıdaki koşulu kontrol etmek anlamsızdır, çünkü kodunuzda TimeN değişkeni sonsuz sıfıra eşit olacaktır (daha doğrusu 1 Ocak 1970 tarihi olacaktır) ve bu sonsuz sıfırın TimeC değişkeni ile karşılaştırılması önerilmiştir. , geçerli çubuğun açılış süresine eşittir):

Şimdi bunu bir danışmana yazmanın neden gerekli olduğunu düşünüyorum.

Açıklama için teşekkürler!

 
Karputov Vladimir :

Yeni çubuk M1 zaman dilimindeyse şu mesajı yazdırın:

Tam kodu vermediğim ortaya çıktı, bu şekilde doğruydu

 

int init()

  { 

   static datetime TimeN=0;

   return(INIT_SUCCEEDED);

  }

 

int start()

  { 

   datetime TimeC=iTime(NULL,TF,0);

   if(TimeN==0)TimeN=TimeC;

   if(TimeN==TimeC) return(0);

   TimeN=TimeC;

  // Код программы исполняется при появлении нового бара

   return(INIT_SUCCEEDED);

  } 

Bu durumda, o bir işçi, değil mi?
 
-Aleks- :

Tam kodu vermediğim ortaya çıktı, bu şekilde doğruydu

 

int init()

  { 

   static datetime TimeN=0;

   return(INIT_SUCCEEDED);

  }

 

int start()

  { 

   datetime TimeC=iTime(NULL,TF,0);

   if(TimeN==0)TimeN=TimeC;

   if(TimeN==TimeC) return(0);

   TimeN=TimeC;

  // Код программы исполняется при появлении нового бара

   return(INIT_SUCCEEDED);

  } 

Bu durumda, o bir işçi, değil mi?
Bu kodu derlemeyi denediniz mi? Burada bir hata var: TimeN değişkeni OnInit() içinde bildirildi ve OnInit() çıktığında bu değişken yok edilecek. Bu nedenle, OnTick() işlevinde bir hata oluşur
'TimeN' - undeclared identifier

İşte çalışma kodu:

 //+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   static datetime TimeN;
   datetime TimeC=iTime( NULL , PERIOD_M1 , 0 );
   if (TimeN==TimeC)
       return ;
   TimeN=TimeC;
// новый бар, выполняем код
   Print ( "New bar" );
   return ;
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir :
Bu kodu derlemeyi denediniz mi? Burada bir hata var: TimeN değişkeni OnInit() içinde bildirildi ve OnInit() çıktığında bu değişken yok edilecek. Bu nedenle, OnTick() işlevinde bir hata oluşur

İşte çalışma kodu:

Bunu yanlış yazdım static datetime TimeN=0; int'den önceki bölgede OnInit () - harici ve diğer değişkenlerin bildirildiği yer.