PROFI'den SUPERPROFI'ye kadar tüm sorularınız - 1. - sayfa 20

 

Verilen:

EA'nın init() işlevinde, MQL SRP oluşturucu başlatılır: MathSrand(...). Terminali şablondan başlatırken, danışmanın birkaç (kesinlik için üç diyelim) kopyası yüklenir. Yükleme hızlıdır, bu nedenle TimeLocal() ve TimeCurrent() işlevlerinin tüm kopyalarda aynı değerleri üretme olasılığı yüksektir (aslında neredeyse her zaman öyledir).

Soru:

PRNG'nin danışmanın farklı numaralarla farklı kopyalarında başlatılmasını sağlamanın püf noktaları nelerdir? Başka bir deyişle, (minimum programlama çabasıyla) rastgelelik öğesini nereden elde edebilirsiniz?

 
alsu :

Verilen:

EA'nın init() işlevinde, MQL SRP oluşturucu başlatılır: MathSrand(...). Terminali şablondan başlatırken, danışmanın birkaç (kesinlik için üç diyelim) kopyası yüklenir. Yükleme hızlıdır, bu nedenle TimeLocal() ve TimeCurrent() işlevlerinin tüm kopyalarda aynı değerleri üretmesi için iyi bir şans (aslında neredeyse her zaman) vardır.

Soru:

PRNG'nin danışmanın farklı numaralarla farklı kopyalarında başlatılmasını sağlamanın püf noktaları nelerdir? Başka bir deyişle, (minimum programlama çabasıyla) rastgelelik öğesini nereden elde edebilirsiniz?

GetTickCount ?
 
sergeev :
GetTickCount?


kesişebilir, ama bir gerçek değil ...

bir program için bir milisaniye sonsuzluk olabilir))

 
alsu :

kesişebilir, ama bir gerçek değil ...
seçenek 2 - uzmanların tutarlı bir şekilde başlatılması için "semaforlar" oluşturmak için global değişkenleri kullanma.
 
sergeev :
seçenek 2 - uzmanların tutarlı bir şekilde başlatılması için "semaforlar" oluşturmak için global değişkenleri kullanma.
vay, bu daha önemli, teşekkürler.
 

Dll'den mql'ye dize alma hakkında soru.

libmysql.dll'deki mysql_fetch_row işlevi, MYSQL_ROW türünü döndürür

Bu tür şu şekilde tanımlanır: typedef char** MYSQL_ROW

bu döndürülen dizi dizisine nasıl ulaşılır?

 
Dizinin boyutları biliniyor mu?
 
Zhunko :
Dizinin boyutları biliniyor mu?
evet, satır sayısı biliniyor.

ancak her dizenin uzunluğu değildir.

bu örnekte, bağlantıda bir tane daha çöp var - *uzunluk işaretçisini almak.
Ayrıca bir dizi çıkıyor ... ama ona nasıl ulaşılır ...

 işaretsiz uzun *uzunluklar;
	uzunluklar = mysql_fetch_lengths(sonuç);
	for(i = 0; i < sayı_alanları; i++)
	{
		printf("[%.*s] ", (int) uzunluklar[i] , satır[i] ? satır[i] : "NULL");
	}

MQL'de mysql_fetch_row'un sonucunu string'e geçirirken olan budur

p0ƒ u0ƒ ;1;a

nerede
p0ƒ u0ƒ - anladığım kadarıyla istenen satırın adresi (8 bayt)
;1;a onun yüküdür


int'ye atanmışsa, p0ƒ yerine adres 42152040 olacaktır.


	          
 
declspec (dllexport) char * WINAPI Func( const char * szBufString,
                                       const int    nSizeBuf)
 {
  MYSQL_ROW aszString; 
  memcpy_s(szBufString, nSizeBuf + 1 , aszString[номер ячейки], strlen(aszString[номер ячейки]));
   return (szBufString);
 }

Program çalışırken dizgenin işaretçisi değişmezse, işaretçiyi arabelleğe kopyalamadan dizeye geri döndürebilirsiniz.

declspec (dllexport) char * WINAPI Func()
 {
  MYSQL_ROW aszString;
   return (aszString[номер ячейки]);
 }
 

bu herhangi bir şekilde MQL'de mi? hatta MQL5?

Zhunko :
Program çalışırken dizgenin işaretçisi değişmezse, işaretçiyi arabelleğe kopyalamadan dizeye geri döndürebilirsiniz.

basitçe
return aszString[номер ячейки]