Çaydanlıktan gelen sorular - sayfa 111

 
openlive :

şimdi sorunlar

2012.02.26 15:47:46 Test dosyası C:\Users\openlive\AppData\Roaming\MetaQuotes\Terminal\9C3619DDD286B60B1DB9B989A2FFC701\MQL5\Files \signal10000.csv açma hatası [32]

Öncelikle, C:\Users\openlive\AppData\Roaming\MetaQuotes\Terminal\9C3619DDD286B60B1DB9B989A2FFC701\MQL5\Files\ klasörünüzde neler olduğunu kontrol edin.

İkincisi, MQL5'te 32 hatası yoktur. Garip... Dosyayı açmayı denedikten sonra tutamacı ve açmayı denedikten sonrason hata kodunu kontrol ediyor musunuz?

 
DenisR :
"Matematik modu" nedir?
Matematiksel hesaplamalar modunda, geçmişe geçiş yoktur - bu nedenle, ticaret işlemlerini kullanmadan matematiksel hesaplamalar yapmak gerektiğinde maksimum hız elde edilir. Bu modda, ticaret EA'sını optimize ederseniz, piyasa ortamını (geçmiş veri, yayılma, vb. EA'ya çubuk/tık girişi ile) kendiniz modellemeniz gerekecektir. Bu durumda her türlü geçmiş veriyi kullanabilir, önceden hazırlanmış bir dosyadan alabilirsiniz.
 
DenisR :
"Matematik modu" nedir?

Bu kipte yalnızca OnTester() çağrılır; Ancak OnTester() içindeki hesaplamaların karmaşıklığı ve hacmi sınırlı değildir. Uzman Danışmanınızın karını verilen giriş parametreleriyle kendiniz hesaplarsanız, optimizasyon için test cihazının genetik algoritmasını kullanabilirsiniz.
 

Lütfen anlamama yardım et, beynim kaynıyor.

1. x64 işletim sistemine geçişin, 4 bayttan fazla 4 GB RAM'de "işaretleyememeniz" nedeniyle olduğunu anlıyorum. x64 işletim sistemim var, neden işaretçilerim 4 bayt alıyor (yalnızca mql için değil, C++ için de geçerlidir)?

2. MT4 ile ilgili soru: dll işlevi çağrılırken neden:

 #import "MemoryDLL.dll"
void fn( double j[]);           // Подозреваю что так отдается адрес?
#import

int start()
{
   double dVal[1];
   fn(dVal);
   retutn(0);
} 

Bir dll değişkeninde normalde aşağıdaki şekillerde kabul edilebilir:

 extern "C" __declspec(dllexport) void fn( double &j);       // Почему так работает????
// и так
extern "C" __declspec(dllexport) void fn( double *j);       // Думаю что должно работать только так

fikre göre işaretçi ve referansın uyumlu olmaması gerektiğini varsaymama rağmen, örneğin double işaretçisi benden 4 bayt alır.

Bu nasıl çalışır:

 #import "MemoryDLL.dll"
void fn( double j);           
#import
                                                   // Согласен

extern "C" __declspec(dllexport) void fn( double j);  

Çalışmıyor:

 #import "MemoryDLL.dll"
void fn( double j);           
#import
                                                   // Почему нет???

extern "C" __declspec(dllexport) void fn( double &j);  

En azından tabii ki (birkaç diziyi aktarmak istiyorum)? Arkadan geçmek istemiyorum.

 
220Volt :

En azından tabii ki (birkaç diziyi aktarmak istiyorum)? Arkadan geçmek istemiyorum.

Ve MQL'de, işlev bildirimine kim & koyacak?
 
sergeev :
Ve MQL'de, işlev bildirimine kim & koyacak?

Evet, muhtemelen bu doğru olurdu. Ama yine de MKL bir şekilde C'ye göre çalışmıyor (yanılıyor olabilirim).

 
220Volt :

Evet, muhtemelen bu doğru olurdu. Ama yine de MKL bir şekilde C'ye göre çalışmıyor (yanılıyor olabilirim).

geçişte bir fark vardır - her şeyin yalnızca referans & ile iletilmesi gerekir, ' * ' işaretçisi tarafından yalnızca sınıf nesneleri iletilebilir

 

Temel bir hafıza parçasının iki bölümden oluştuğunu düşündüm - bir adres ve bir değer. Adresi aktarırsak, "değer" alanında aktarılan bölümün adresiyle birlikte bir değişkende olmalıdır. Bu nedenle, bu tür seçeneklerin aynı anda nasıl doğru şekilde çalışabileceğini anlamıyorum:

 extern "C" __declspec(dllexport) void fn( double &j);  
// и так
extern "C" __declspec(dllexport) void fn( double *j);  
// Прототип для MQL - void fn(&s[]);

Türün bir açıklamasını bulmaya çalışabilirsiniz - bir bellek parçası "olduğu gibi" aktarılır ve alıcı taraf onunla ne yapılacağına karar verir (adresi bir değere yazın veya adresi kopyalayın). Ancak bu hipotez, şu şekilde çalışmadığı gerçeğiyle yok edilir:

 extern "C" __declspec(dllexport) void fn( double j);  

// Прототип для MQL - void fn(&s[]);

Yine bir açıklama bulmaya çalışabilirsiniz - ilk duvuh'ta girişe "değer" alanında adres verilir ve alıcı taraf bununla ne yapacağına karar verir. Bunun aksine, C++ 'da derleyicinin bunu yapamayacağınızı söylemesi, onun görüşüne göre veya şöyle:

fn( int *x)
{
}

int i;
fn(&i);

veya bunun gibi:

fn( int &x)
{
}

int i;
fn(i); 
Genel olarak, çelişkilerden başka bir şey görmüyorum.
 

Kendime sordum, cevaplayacağım.

Bağlantı ve işaretçinin çoğunlukla aynı şeyler olduğu sonucuna vardım. Küçük farklılıklar var:

  • adresi bağlantıya yalnızca bir kez, işaretçiye birçok kez yazabilirsiniz
  • harika sözdizimi

Çok önemli bir nokta şudur:çağrılan işlevin bir argümanı varsa - bir bağlantı veya bir işaretçi, o zaman adres gerçekten iletilir. Bir dll'den arama yaparken bunu anlamak çok önemlidir.

 

Çaydanlığa, stokastiğin ana ve gösterge çizgilerinin kesişiminin tam değerini nasıl bulacağını söyle?

Görsel olarak basittir, ancak programlı olarak nasıl uygulanır?