Nasıl kodlanır? - sayfa 114

 
matrixebiz:
Bir EA'da Zaman Ticareti saatlerini nasıl ayarlarım?

bunu deniyordum;

int Ticaret Saati;

if(Saat()17) TicaretSaati = yanlış;

ancak kurala uymuyor gibi görünüyor, sadece ne zaman ticaret yapıyor ve al/sat ifadelerimde && TradeHour var.

teşekkürler

TradeHour'u tamsayı yerine boole olarak tanımlamayı denediniz mi?

bool TradeHour;

if ((Hour()17)){ TradeHour = false;}

Ayrıca ek parantezlere ihtiyacınız olabilir.

 
matrixebiz:
Bir EA'da Zaman Ticareti saatlerini nasıl ayarlarım?

bunu deniyordum;

int Ticaret Saati;

if(Saat()17) TicaretSaati = yanlış;

ancak kurala uymuyor gibi görünüyor, sadece ne zaman ticaret yapıyor ve al/sat ifadelerimde && TradeHour var.

teşekkürler

Hour() nasıl 9'dan küçük VE 17'den büyük olabilir? Veya (||) mı demek istediniz?

Lüks

 
luxinterior:
Hour() nasıl 9'dan küçük VE 17'den büyük olabilir? Veya (||) mı demek istediniz? Lüks

İyi nokta luxinterior! Bu kesin bir problem. Onu özledim.

 

Pardon, demek istedim ||

ve bunu yapmaya çalışıyordum;

//+--------Ticaret saati değişkenleri------------------

// if (Hour() < StartHour) TradeHourS = false;

// if (Hour() > EndHour) TradeHourE = false;

Yani StartHour=5 ve EndHour=17 ise sadece bu saatler içinde işlem yapmalıdır, doğru mu?

Ama yine de her zaman ticaret? Strateji Test Cihazını kullanmak bir sorun mu?

 

Neden doğrudan yardım dosyasındaki örneği kullanmıyorsunuz?

bool is_siesta=false;

if(Hour()>=12 || Hour()<17)

is_siesta=true;

Lüks

 

ac/c++ DLL dışa aktarılan işlevlerden dize döndürme

Herkese selam,

Bir EA'dan yapılandırma ayarlarını yönetmek için bir dizi işlev geliştirdim.

Bu işlevler bir c++ DLL tarafından dışa aktarılır ve dışa aktarılan işlevlerin her biri MQL4'üm için istenen __stdcall çağrı kuralına sahiptir.

Sorunum, bir işlevin EA'ya bir dize döndürmesi gerektiğinde ortaya çıkıyor.

Doğal olarak işlev şunları yapamaz:

- bir işaretçiyi yerel bir değişkene döndürür (değişken kapsam dışına çıkar)

- bir dll global değişkenine bir işaretçi döndürme (eşzamanlı erişimle ilgili sorunlar)

- yığın ayrılmış bir dizgeye bir işaretçi döndür (EA'dan çağrılacak belleği boşaltmak için işlevlere ihtiyaç var: Bu yaklaşımı sevmiyorum)

Bu yüzden EA'dan bir dize ve dize boyutu iletmeye karar verdim. Es:

string buffer;

GetString( buffer, 30 );

[/CODE]

and from the c++ dll, something like this

void __stdcall GetString( LPTSTR buffer, int BufSize )

{

// Read a string from a some source

....

// -1 to take into account the terminating null character

StringCchCopy( buffer, BufSize-1, ReadStringFromASource );

}

[/CODE]

Here starts the weird behaviour of MQL managing strings returned from a DLL.

using the following code:

string buffer;

GetString( buffer, 30 );

the first time buffer contains the right string. A first question arises: buffer is not initialized but after calling GetString it contains the string returned. I have to suppose that MQL allocates space for a string variable when it's declared.

Next time GetString() is called the string returned seems to be truncated to the length-1 of the previous string length and not resetted as expected because of the 'string buffer;' statement.

Tried even:

[CODE]

string buffer = " "; // 'allocate' 30 blank characters

GetString( buffer, StringLen(buffer) );

but after the first time, when the execution returns to this code, the assignment of buffer does not work any more and buffer still contains the previous read string, and it seems it can only contains the number of characters of his content.

At first I have thought that the null character is not handled very well by MQL and modified the c++ code like this ...

[CODE]

CopyMemory( buffer, ReadStringFromASource, min(BufferSize,ReadStringFromASourceLength) );

ve sonlandırıcı boş karakteri eklememek.

Ancak MQL'den çağrıldığında hiçbir dize dönmüyor.

Birinin cevabı var mı?

 
luxinterior:
Neden doğrudan yardım dosyasındaki örneği kullanmıyorsunuz?

bool is_siesta=false;

if(Hour()>=12 || Hour()<17)

is_siesta=true;

Lüks

evet denedim;

bool TradeHour=yanlış;

if(Hour()>=12 || Hour()<17) TradeHour=true

ancak OR satırı çalışmaz çünkü Saat 22 olursa, o zaman "if(Hour()>=12" ilk bölümünü karşılar ve Hala istediği zaman işlem yapar ve && TradeHour by Buy/Sell ifadelerine ekledim. İkinci verdiğim örnek işe yaramalı, anlamadım

 
luxinterior:
Neden doğrudan yardım dosyasındaki örneği kullanmıyorsunuz?

bool is_siesta=false;

if(Hour()>=12 || Hour()<17)

is_siesta=true;

[/code]

Lux

Amacınız 12:00 ile 17:00 arasında işlem yapmaksa, aşağıdakileri yapmanız gerektiğini düşünüyorum:

[kod]

bool TradingEnabled=false; // Küresel değişken

...

...

TradingEnabled=false; // Her tic çalıştırmasını sıfırla

if(Saat()>=12 && Saat()<17)

TradingEnabled=true;

...

...

if( TradingEnabled )

{

// Ticaret mantığı burada

}

...

...

 
gorgoroth:
Amacınız 12:00 ile 17:00 arasında işlem yapmaksa, aşağıdakileri yapmanız gerektiğini düşünüyorum:

bool TradingEnabled=false; // Global variable

...

...

TradingEnabled=false; // Reset every tic run

if(Hour()>=12 && Hour()<17)

TradingEnabled=true;

...

...

if( TradingEnabled )

{

// Trading logic here

}

...

...

Bunu yaparak aynı şeyi yapmıyor muyum?;

if (Saat() 17) TicaretSaati = yanlış;

Anlamı, saat 12 ile 17 arasındaysa TradeHour=true , doğru mu?

(Al/Sat ekstreme && TradeHour ekleme)

 
luxinterior:
Hour() nasıl 9'dan küçük VE 17'den büyük olabilir? Veya (||) mı demek istediniz? Lüks

Oh, ve ben && demek istedim çünkü hakkınız saat 9'dan küçük VE 17'den büyük olamaz, bu da ifadeyi yanlış yapar, ancak Saat 10 ise 9'dan küçük ve 17'den büyük olamaz, bu nedenle ifade doğru olur.

Belki bu şekilde yapmak MT4 satın almanın kafasını karıştırır, yine de bu şekilde çalışır;

int Ticaret Saati;

TicaretSaati = ((Saat()>=BaşlangıçSaati) && (Saat()<BitişSaati));

teşekkürler

Neden: