Hatalar, hatalar, sorular - sayfa 2574

 
Aleksei Beliakov :
Trite, bu işlevlerin sonuçlarını ontick'te yazdırırsanız, bu, 1970.01.01 zamanı için 0 fiyatı içindir.
Eskiden bar zamanı ya da fiyattı.
şimdi böyle oldu demek

Belki bilgisayarınızda hamamböceği vardır? Bu kod 1220'de var

 Print (" iHigh ", iHigh ( NULL , PERIOD_W1 , 0 ));
 Print (" iTime ", iTime ( NULL , PERIOD_W1 , 0 ));

yazdırır

 2019.09 . 23 09 : 41 : 27.560 00 EURUSD,M5: iTime 2019.09 . 22 00 : 00 : 00
2019.09 . 23 09 : 41 : 27.560 00 EURUSD,M5: iHigh 1.10245
 
Aleksei Beliakov :
Trite, bu işlevlerin sonuçlarını ontick'te yazdırırsanız, bu, 1970.01.01 zamanı için 0 fiyatı içindir.
Eskiden bar zamanı ya da fiyattı.
şimdi böyle oldu demek

Hata kodu nedir?

Test parametreleri nelerdir?

Haftalık ve aylık verileri yüklediniz mi? Kaç tane var?

 
Slava :

Hata kodu nedir?

Test parametreleri nelerdir?

Haftalık ve aylık verileri yüklediniz mi? Kaç tane var?

Kontrol ettim ve şimdi her şey çalışıyor.

Hikayeyi yükledim.

Teşekkür ederim.

 
Elbette bu konu zaten gündeme getirildi: MT5'in iki farklı sürümünün aynı masaüstünde bir arada bulunmasını mümkün kılmak gerekir (otomatik güncellemeyi ve geri alma özelliğini devre dışı bırakın). Veya en azından beta ve yayın. Yoksa mümkün mü (sanallaştırma olmadan).
 

Bellek izleme.

Kodumda CopyRates yaklaşık bin kez yürütülür.

Tırnak dizisi daha sonra bir şekilde işlenir ve bunun sonunda şunu ararım:

ArrayRemove (ArrayQuotes,0,ArraySize);

ArrayFree(ArrayQuotes);

ArrayResize(ArrayQuotes,0);

ArrayFree(ArrayQuotes);

ZeroMemory(Alıntı Dizisi);

(sadece farklı denedim)

Sonuç - bellek hala geometrik olarak büyüyor ve işlemciler üzerindeki yük ile birlikte tıkanıyor - i7'deki işlemci tüm mantıksal çekirdekler için toplamda% 80 oranında tıkanıyor, bellek bir Gigabayttan daha fazla.

Şimdiye kadar, üçüncü taraf bir programın yardımıyla kaynak tüketimini sınırlamak mümkün oldu - işlemci% 15'ten fazla değil ve bellek bir gigabayttan fazla değil.

Soru - bu bir hata mı yoksa platformun bir özelliği mi?

 
Kaynak kodunu sabit kodlamak mümkün mü? Karakterler yalnızca ascii olduğunda, bunun bir bayt olduğunu, aksi takdirde utf-16 olduğunu biliyorum. utf-8 mümkün mü?
 

Bu arada, meta editörün garip davranışı düzeltilmelidir:

fn_call(); /////////////////////

eğik çizgilere çift tıklamak, önceki karaktere sahip eğik çizgileri seçer (sayı / harf yoksa).

Neden uygunsuz? Kodda geçici bir düzenleme yaptık, bu şekilde bir yer tahsis ettik, sonra hızlı bir şekilde bazı eğik çizgileri seçip kaldırmanız gerekiyor.

 

Yine de, dll'den wchar_t * satırlarını işaretçi olarak geçirme konusuna geri dönelim.
Renat'ın dll'deki dizelerle çalışma hakkındaki makalesinden açıkça anlaşılmaktadır ki, mql'de dize türü, harici bir dll'den wchar_t * dizesine bir işaretçi alır.
Yani dll'ye wchar_t * gönderiyoruz ve onu mql'de string & olarak kabul ediyoruz.
Ama bir nedenden dolayı, C-fonksiyonu

wcscpy_s( wchar_t *dest, rsize_t dest_size, const wchar_t *src);

düzgün çalışmıyor, yani wchar_t * hedef dizesine işaretçi, mql kabul eder, ancak zaman zaman kabul etmez.
Bazen terminal çöküyor, program tamamlandı.

fonksiyon ile

wcscpy( wchar_t *dest,   const wchar_t *src);

terminal kilitlenmiyor, ancak aynı satırlar aralıklı olarak geliyor.
Lütfen bir sonraki derlemede düzeltin.

not. wchar_t * işaretçisinin başka bir iş parçacığından geçirildiğini açıklamayı unuttum.
onlar. wcscpy_s veya wcscpy işlevi ayrı bir iş parçacığında çağrılır.

 
Roman :

Yine de, dll'den dizeleri işaretçi olarak wichar_t * geçirme sorununa geri dönelim.
Renat'ın dll'deki dizelerle çalışma hakkındaki makalesinden açıkça anlaşılmaktadır ki, mql'de dize türü, harici bir dll'den wichar_t * dizesine bir işaretçi alır.
Yani wichar_t *'yi dll'ye gönderiyoruz ve onu string & mql olarak kabul ediyoruz.
Ama bir nedenden dolayı, C-fonksiyonu

düzgün çalışmıyor, yani wichar_t * hedef dizesinin işaretçisi, mql kabul eder, ancak bazen kabul etmez.
Bazen terminal çöküyor, program tamamlandı.

fonksiyon ile

terminal çökmez, ancak hatlar da aralıklı olarak gelir.
Lütfen bir sonraki derlemede düzeltin.

not. wichar_t * işaretçisinin başka bir iş parçacığından geçirildiğini açıklamayı unuttum.
onlar. wcscpy_s veya wcscpy işlevi ayrı bir iş parçacığında çağrılır.

Ve dize hedefi için kim bellek ayıracak?
 
Vladimir Simakov :
Ve dize hedefi için kim bellek ayıracak?

Bellek, mql kodunda şu şekilde tahsis edilir:

#import "Dll.dll"
   void Func(string task, string & out);
#import 

string оut;
StringInit (out, 165 , 32 );

mql'deki dize, dll'deki wchar_t* olduğundan, dışarı çıkar ve ayrılan belleğe bir işaretçi olarak iletilir

Func( "Task" , out);