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

 
ANDREY :

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.

Belki dizi boştur? İşlevi biraz değiştirerek kontrol edin

 void PrintArray( double &eArray)
   {
   int eSize= ArraySize (eArray);
   string eStr= "Размер массива " +eSize+ " : " ;
   for ( int i= 0 ; i<eSize; i++)
      {
      eStr+= IntegerToString (i)+ ": " + DoubleToString (eArray[i], 4 )+ ", " ;
      }
   Print (str);
   }
0 yazdırırsa, diziyi doldurmada bir sorun olup olmadığına bakın.
 
Alexey Viktorov :

 void PrintArray( double &eArray)
   {
   int eSize= ArraySize (eArray);
   string eStr= "Размер массива " +eSize+ " : " ;
   for ( int i= 0 ; i<eSize; i++)
      {
      eStr+= IntegerToString (i)+ ": " + DoubleToString (eArray[i], 4 )+ ", " ;
      }
   Print (str);
   }

Bir hata bulundu. Son satıra Yazdır (str); e str yerine str'yi geçtiniz . Düzelttim ve her şey yolundaydı.

Şimdi bana öyle geliyor ki, sayenizde bu konuya sadece genel anlamda değil, tüm detaylarıyla hakim oldum. Cevapsız kalan tek soru, profesyonellerle ilgili soruydu.

Yardımlarınız ve desteğiniz için teşekkür ederiz.

 
Maxim Kuznetsov :

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

Bunu hiç yapmadım, "aptallar" için bir bağlantı alabilir miyim?
 
ANDREY :

Bir hata bulundu. Son satıra Yazdır (str); e str yerine str'yi geçtiniz . Düzelttim ve her şey yolundaydı.

Şimdi bana öyle geliyor ki, sayenizde bu konuya sadece genel anlamda değil, tüm detaylarıyla hakim oldum. Cevapsız kalan tek soru, profesyonellerle ilgili soruydu.

Yardımlarınız ve desteğiniz için teşekkür ederiz.

onu aktarmadım

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

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

Aleksey Stepanenko , 2021.03.13 09:04

 Print ( "-LoY[0]-" , DoubleToString (LoY[ 0 ], 4 ), "---LoY[1]--" , DoubleToString (LoY[ 1 ], 4 ), "---LoY[2]--" , DoubleToString (LoY[ 2 ], 4 ), "---LoY[3]--" , DoubleToString (LoY[ 3 ], 4 ),................   "---LoY[30]--" ,   DoubleToString (LoY[ 30 ], 4 ) );

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

 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);
   }

Ve her yerden arayın

PrintArray(LoY);

Sadece buna dikkat etmedim. Derlemenin nasıl hatasız gittiği belli değil, net değil ...

Ve her şeyi anladıysanız ve tüm diziyi boyadıysanız ne cevap vereceksiniz?

ANDREY :

Bana öyle geliyor ki sonunda aklıma geldi (biraz acemiyim)......

İ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). Ve 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.

Ve her şey doğru boyanırsa, ne bir gizem kalır ...
 
MakarFX :
Bunu hiç yapmadım, "aptallar" için bir bağlantı alabilir miyim?

Daha önce C#, Delphi ve bunun gibi diğerlerinde yazmadıysanız, faydası olmaz.. Windows her yerde olduğu gibi oluşturulur, ancak önce “her yerde” nasıl olduğunu bulmanız gerekir.

İlk olarak, kısa bir C# kursu, WinForms (örneğin). İnternette bir sürü olmalı. Bu biraz forumun kapsamı dışında.

 

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) + "

Sonuçta, anlayışımı tarif ettiğim şekilde, açıkça her yinelemede dizelerin bağlantısının str + = atama işlemiyle birlikte tek bir yerde ve 1 kez gerçekleştiğini takip ediyor.

Yani, + sembolü kullanılarak, str dize değişkenindeki bir öğenin değeri, aynı dize değişkeni str'nin başka bir öğesinin değeriyle birleştirilir (artılanır).
Ve bu kırmızı + ne anlama geliyor, hala anlamıyorum str +="--LoY[" + IntegerToString(r) +" ]--, " + DoubleToString(LoY[r],4) + ", "; . Sonuçta bu kırmızı artılar arasındaki değerler üzerinden herhangi bir toplama işlemi yapılmıyor..... bana öyle geliyor ki. Eğer haklıysam bu kırmızı artıların işlevi nedir? Ve eğer yanılıyorsam, o zaman bir şeyi yanlış anladım.

Bu arada sarı çizgide sadece bir tane kırmızı artı var ve + DoubleToString(LoY[r],4) önünde duruyor. Ve ondan sonra, nedense, olmuyor.

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

 
Alexey Viktorov :

Derlemenin nasıl hatasız gittiği belli değil, net değil ...


Derleyicinin str'nin tanımlı olmadığını belirttiğini gördüğümde, kullanıcı tanımlı bir işlevin gövdesi içinde str'yi kendim başlattım. Ama sana bundan bahsetmeyi unuttum.
Sonra her yerde user işlevinden str'yi sildim ve user işlevinin son satırına str - eStr yerine parantez içine yerleştirdim.

 
Maxim Kuznetsov :

Daha önce C#, Delphi ve diğerlerinde yazmadıysanız bir faydası olmaz.. Windows her yerde olduğu gibi oluşturulur ama önce “her yerde” nasıl olduğunu bulmanız gerekir.

İlk olarak, kısa bir C# kursu, WinForms (örneğin). İnternette bir sürü olmalı. Bu biraz forumun kapsamı dışında.

Peki, form oluşturuldu.


Pencerem ve danışman arasındaki veri alışverişinin nasıl kaydedileceğiyle daha çok ilgileniyorum.

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

Aleksei Stepanenko :

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


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

Bu arada sarı artıları sildim derleyici hata verdi. Yani bütün bu yapıda bir rol oynuyorlar. Ama ne .... Hala anlamıyorum. Dizelerin eklenmesi yalnızca mavi artıların yardımıyla gerçekleştirilirse neden bunlara ihtiyaç duyulur? Ve bu tasarımda daha fazlası, açıklamalarınıza bakılırsa, yanılmıyorsam hiçbir şey eklenmez .....

Ve string(i) hakkında... Tip dökümü hakkında.... Az çok netim. Bunun ne olduğu açık değil ..... string değişken tipinin adıdır. i - dizi öğesinin indeksini gösteren değişken sayaç. neden parantez () içindeyim ? Şimdiye kadar parantezlerin bir fonksiyonun işareti olduğunu düşünürdüm. Örneğin Yazdır(). Ve bazı fonksiyonlarda parantez içinde çeşitli veriler girilir. Ve ne anlama geliyorlar veya parantezler i ve tüm bu yapı - string (i) ile ilgili olarak hangi işlevi yerine getiriyor. İlk bakışta, i değişkeninin int (integer) türünde olduğu ve ardından i değişkeninin türünü int'den string (string) olarak değiştirdiğiniz görülüyor. Ama öyle düşünmek , içinde bulunduğum parantezler tarafından izin verilmez.

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

Neden: