Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
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ürlerTradeHour'u tamsayı yerine boole olarak tanımlamayı denediniz mi?
bool TradeHour;
if ((Hour()17)){ TradeHour = false;}Ayrıca ek parantezlere ihtiyacınız olabilir.
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ürlerHour() nasıl 9'dan küçük VE 17'den büyük olabilir? Veya (||) mı demek istediniz?
Lüks
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ı?
Neden doğrudan yardım dosyasındaki örneği kullanmıyorsunuz?
bool is_siesta=false;
if(Hour()>=12 || Hour()<17)
is_siesta=true;
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
Neden doğrudan yardım dosyasındaki örneği kullanmıyorsunuz?
bool is_siesta=false;
if(Hour()>=12 || Hour()<17)
is_siesta=true;
[/code]
LuxAmacı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
}
...
...
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)
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