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

 
Aleksei Stepanenko :

veya ayrı bir dizi yazdırma işlevi yapın:

Ve her yerden arayın

Alexey, uzun süre sessiz kaldım, ancak bunu sakin bir şekilde göremiyorum ... Bu durumda açık tip döküm çok daha kolay ve daha ucuzsa neden IntegerToString () işlevini kullanıyorsunuz ...

eStr+=( string )i+ ": " + DoubleToString (eArray[i], 4 )+ ", " ;
 

ha alışkanlık :)

 
Aleksei Stepanenko :

veya ayrı bir dizi yazdırma işlevi yapın:

Ve her yerden arayın

Anlayışınız ve açıklamanız için çok teşekkür ederiz. Çalışmak ve benim için yeni bilgileri anlamak için ara veriyorum.

 
Alexey Viktorov :

Alexey, uzun süre sessiz kaldım, ama bunu sakince göremiyorum ... Bu durumda açık tip döküm çok daha kolay ve daha ucuzsa neden IntegerToString () işlevini kullanıyorsunuz ...

Ve değerli eklemeleriniz için teşekkür ederiz.

 
Lütfen bana nereye bakacağımı söyleyin, bir danışman için harici bir pencere oluşturma hakkında bilgi edinin.
 
MakarFX :
Lütfen bana nereye bakacağımı söyleyin, bir danışman için harici bir pencere oluşturma hakkında bilgi edinin.

forumda ve C#, Delphi ve diğer her şeyle ilgili yayınlarda...

tcl.Eval( "toplevel .myWin ; wm title .myWin {Окношко}" ); // простите, не удержался
 
Aleksei Stepanenko :

veya ayrı bir dizi yazdırma işlevi yapın:

Ve her yerden arayın

Ayrı bir özel dizi yazdırma işlevi yapmaya karar verdim. Ya da daha doğrusu, daha önce yaptığınızı ( PrintArray() ) kullanmayın.

Ne yaptım?

1. Özel PrintArray() işlevine çağrıyı, Kovalev'in öğreticisinde yazıldığı gibi OnTick()... işlevinin içine yerleştirdim.

2. PrintArray() işlevinin gövdesini Kovalev'in öğreticisinde yazıldığı gibi OnTick() işlevinin dışına yerleştirdim.

Bu işlevin gövdesindeki tüm yeni değişkenler yereldir. Bu fonksiyon içinde bildirilir ve başlatılırlar.

 int P1= 0 ;
double LoY[ 31 ];
void OnTick ()
{
if (P1== 0 )
{
for ( int r= 0 ; r< 31 ;r++)
{
LoY[r]= 1.6104 +(r* 2 )* 0.0001 ;
P1= 1 ;
}
}
//*************************************************************  Б Л О К    N 2
for ( int x= 0 ; x< 31 ;x++)
{
if (Bid < LoY[x] )
{
LoY[x]=Bid;
}
}
ArraySort (LoY, WHOLE_ARRAY , 0 ,MODE_ASCEND);
PrintArray(LoY);
}
//****************************

void PrintArray( double &eArray)
   {
   string eStr= "" ;
   int eSize= ArraySize (eArray);
   for ( int i= 0 ; i<eSize; i++)
      {
      eStr+= IntegerToString (i)+ ": " + DoubleToString (eArray[i], 4 )+ ", " ;
      }
   Print (str);
   }

İşlevinizde herhangi bir değişiklik yapmadım. Ancak derleyici nedense 6 hata veriyor. Ve hepsi özel bir işleve aittir.

Bana neyi yanlış yaptığımı söylerseniz çok minnettar olurum.
Teşekkür ederim.

 
ANDREY :

Ayrı bir özel dizi yazdırma işlevi yapmaya karar verdim. Daha doğrusu, daha önce yaptığınızı ( PrintArray() ) kullanmayın.

Ne yaptım?

1. Özel PrintArray() işlevine çağrıyı, Kovalev'in öğreticisinde yazıldığı gibi OnTick()... işlevinin içine yerleştirdim.

2. PrintArray() işlevinin gövdesini Kovalev'in öğreticisinde yazıldığı gibi OnTick() işlevinin dışına yerleştirdim.

Bu işlevin gövdesindeki tüm yeni değişkenler yereldir. Bu fonksiyon içinde bildirilir ve başlatılırlar.

İşlevinizde herhangi bir değişiklik yapmadım. Ancak derleyici nedense 6 hata veriyor. Ve hepsi özel bir işleve aittir.

Bana neyi yanlış yaptığımı söylerseniz çok minnettar olurum.
Teşekkür ederim.

Tam olarak hatırlamıyorum ama kontrol edemeyecek kadar tembelim. Köşeli parantez eklemeyi deneyin

 void PrintArray( double &eArray [] )
 

Aleksei Stepanenko :

 string str= "" ;

for ( int r= 0 ; r< 31 ;r++)
   {
   LoY[r]= 1.6104 +r* 0.0001 ;
   str+= "--LoY[" + IntegerToString (r)+ "]--, " + DoubleToString (LoY[r], 4 )+ ", " ;
   }
Print (str);


Bana öyle geliyor ki sonunda aklıma geldi (biraz geri zekalıyım)....

İlk yinelemede, dizge değişkeni str boştur. =+ sembolleri, str'ye kendisine boş bir tane atamasını (değerler olmadan) ve değerleri kendisine boş olan bir dize eklemesini söyler, yani "--LoY["+IntegerToString(r)+"]--, "+DoubleToString( LoY[r ],4)+", ";. Bu dizenin değeri " -- LoY[0]--, --1.6104-- " olacaktır. Bu işlemlerden sonra , ilk yinelemede str " -- LoY[0]--, --1.6104-- " değerini alır. Terminolojinizden anladığım kadarıyla buna birinci unsur deniyor.

İkinci yinelemede , str zaten " --LoY[0]--, --1.6104-- " değerine sahip bir ilk öğeye sahip   Semboller =+ reçete   str kendini ilk elemanın değeriyle ve kendisine ilk elemanın değeriyle atar, diğer değerlerle bir dize ekler, yani "--LoY["+IntegerToString(r)+"]--, "+DoubleToString (LoY[r] ,4)+", ";. Bu satırın değeri zaten " --LoY[1]--, --1.6105-- " olacaktır. Bu işlemlerden sonra   ikinci yinelemede str değeri alır   " -- LoY[0]-- --1.6104-- -- LoY[1]-- --1.6105-- ". Yani, ikinci öğe str'ye göründü (eklendi). Otuzuncu yinelemede str, farklı dizi öğesi değerlerine sahip 30 öğeye sahip olacaktır.

Ve döngünün bitiminden sonra, 30 elemanlı dizge değişkeni str, bunun dışında bir kez yazdırılacaktır.
Uzun bir süre bu algoritmayı anlayamadım çünkü toplamadan bahsettiğinizde sadece kırmızı artılara dikkat ettim. str + = yerine "--LoY[" + IntegerToString (r) + "]--, " + DoubleToString(LoY[r],4) + "

Ve bu kırmızı artıların bu algoritmada nasıl bir rol oynadığı benim için hala bir gizem olmaya devam ediyor.   "--LoY[" + IntegerToString(r) + "]--, " + DoubleToString(LoY[r],4) + "

Yardım için teşekkürler.

 
Alexey Viktorov :

Tam olarak hatırlamıyorum ama kontrol edemeyecek kadar tembelim. Köşeli parantez eklemeyi deneyin

Eklenen köşeli parantezler void PrintArray(double &eArray[]) Derleyici herhangi bir hata veya uyarı göstermedi.
AMA..... işlev   Print() nedense bir kez bile yazdırmadı.

Tembelliğini anlıyorum çünkü ben de böyleyim. Tembellik geçer ve yerine coşku gelirse, kullanıcı işlevinde hala neyin yanlış olduğunu söylerseniz size minnettar olacağım.

Yardımın için teşekkürler ve rahatsız ettiğim için özür dilerim.