Hatalar, hatalar, sorular - sayfa 98

 

"Köpeğin nereye gömüldüğünü" anlamıyorum, kod çalışıyor, her şey yolunda, ancak derleyicinin tür dönüşümü nedeniyle olası veri kaybıyla ilgili uyarıları Indi.mqh 125 45 düşündürüyor.


 //+------------------------------------------------------------------+
//|Получение значений позиций в средe BB цены AppPrice,Fast/Slow TEMA|
//+------------------------------------------------------------------+

void CIndi::SetPricePositions( ushort SymbolPosition, ushort Index, uchar AppPrice)
  {
   int handle=GetHandle(SymbolPosition,BANDS);
   double Upper =Upper_Band(handle,Index);
   double Base  =Base_Band(handle,Index);
   double Lower =Lower_Band(handle,Index);
   double FTema =GetValuesFromIndi(GetHandle(SymbolPosition,TEMA_FAST), 0 ,Index);
   double STema =GetValuesFromIndi(GetHandle(SymbolPosition,TEMA_SLOW), 0 ,Index);
   
   Bollinger[SymbolPosition][PRICE_POSITION]=( double )GetPricePos(handle,Index,AppPrice); ???
   Bollinger[SymbolPosition][FAST_POSITION] =( double )Custom.Position(Lower,Upper,FTema); ???
   Bollinger[SymbolPosition][SLOW_POSITION] =( double )Custom.Position(Lower,Upper,STema); ???
   Bollinger[SymbolPosition][UPPER]         =( double )Upper; ???
   Bollinger[SymbolPosition][BASE]          =( double )Base;  ???
   Bollinger[SymbolPosition][LOWER]         =( double )Lower; ???
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Предупреждения компилятора - Документация по MQL5
 

geliştiriciler

Anladığım kadarıyla, takaslarla ilgili sorun çözüldü mü? Veya konunun hizmet masasından neden kaybolduğu açık değil .....

 

Bir danışmanı test ederken

 void OnTick (){
   Print (iTest());
}
//+------------------------------------------------------------------+
int iTest(){
   double i;
   int j;
   for ( int x= 3 ; x> 0 ; x--) { 
      i=i+ 0.00001 ;
   } //Next x
   j= int (i/ _Point );
   return (j);
} //iTest()

Günlük, giderek artan bir sayı gösterecek! Böyle mi olmalı?

MQL4'te böyle bir etki için yazmak gerekiyordu

 static double i;

 
EvgeTrofi :

Bir danışmanı test ederken

Günlük, giderek artan bir sayı gösterecek! Böyle mi olmalı?

Evet, böyle olmalı.

Sonraki çağrılarda, önceki çağrılarda olduğu gibi yığında aynı yere tahsis edilen yerel i değişkenini başlatmadınız.

Документация по MQL5: Основы языка / Переменные / Локальные переменные
Документация по MQL5: Основы языка / Переменные / Локальные переменные
  • www.mql5.com
Основы языка / Переменные / Локальные переменные - Документация по MQL5
 
Renat :

Evet, böyle olmalı.

Sonraki çağrılarda, önceki çağrılarda olduğu gibi yığında aynı yere tahsis edilen yerel i değişkenini başlatmadınız.

O halde hangi durumda statik depolama sınıfını kullanmalısınız?

Lütfen " Statik olarak bildirilen yerel değişkenler, programın en başından beri var olmalarına rağmen blok kapsamına sahiptir" yardımındaki anlaşılmaz cümleyi açıklayın. Görünüşe göre sözdizimsel veya dilbilgisi hatası cümleye sızmış :)

Yardımdaki örneğe dikkat edin: https://www.mql5.com/en/docs/basis/variables/static

Statik kelimesini koddan kaldırırsanız, hiçbir şey değişmez:

 int Counter()
  {
   int count;
   count++;
   if (count% 100 == 0 ) Print ( "Функция Counter была вызвана уже " ,count, " раз" );
   return count;
  }
void OnStart ()
  {
//---
   int c= 345 ;
   for ( int i= 0 ;i< 1000 ;i++)
     {
       int c=Counter();
     }
   Print ( "c = " ,c);
  }

Soru: Aynı şey onsuz da geçerliyse, neden statik gerekli?

Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - Документация по MQL5
 
ALozovoy :
Merhaba. [Tester] açıklamasında ExpertParameters parametresini kaçırıyorsunuz. Bununla ilgili daha fazla ayrıntı yardımda bulunabilir.

Teşekkürler, işe yaradı.

 


Lütfen söyleyin, blokların içindeki değişkenleri bildirme yeteneği hangi amaçla eklendi? Bu durumda daha önce:

  
int c;    for ( int i= 0 ;i< 1000 ;i++)      {         int  c=Counter(); }

Daha önce, doğrudan satırın iki kez bildirildiği bir pencere açılırdı ve değişken için farklı bir ad bulmanız veya aynısını kullanmanız gerektiği açıktı, ancak int olmadan. Ve şimdi kafan karışabilir. C++'da da aynı mı?

(MQL'yi öğrenmeden önce Visual Basic'te programlamıştım. Böyle bir rezalet yoktu)

 
EvgeTrofi :

O halde hangi durumda statik depolama sınıfını kullanmalısınız?


Numara.

Bir int i oluşturduysanız; , o zaman neden başlatılmadı? Aslında "bu değişkende ne olduğu benim için önemli değil" demişsin ve sonuç olarak içine çöp almışsın.

Doğru olarak bunu yapmak gereklidir: int i=0;

C++'da da aynı mı?

Evet, doğru - blok içinde bu tür değişkenler oluşturabilirsiniz.
 

Terminalin 306 yapısında Windows 7 64 bit'te sorunlarla karşılaştım (Windows 7 32 bit her şey yolunda gidiyor).

Dosyalar:
mql64.png  52 kb
 
VanHelsing :

Terminalin 306 yapısında Windows 7 64 bit'te sorunlarla karşılaştım (Windows 7 32 bit her şey yolunda gidiyor).

Lütfen bu durumu gösteren bir kod parçasını servis masasına gönderin.