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
...
LastProfitHigh'ınız nasıl ilan edilir?
Eğer işlevin gövdesi içinde bildirilmişse (örneğin start()), statik olarak bildirmezseniz değeri her zaman değiştirecektir. Bu nedenle, yerel olarak (fonksiyon içinde) bildirilirse, onu global kapsamda veya statik değişken olarak bildirmeyi deneyin ve bu şekilde iki tik arasındaki değerleri "miras alacaktır".
Herkese selam,
Kodlamada yeniyim ve dili ve sözdizimini yavaş yavaş öğreniyorum ancak MT4'ün değişkenleri nasıl güncellediği hakkında bir soru buldum.
Şu anda açık olan bir ticaretin sahip olduğu en yüksek karı gösteren ve yalnızca yeni bir zirveye ulaşıldığında güncellenmesi gereken basit bir EA kodlamaya çalıştım, ancak olan şey, kârın yaptığı gibi miktar aşağı ve yukarı hareket ediyor, yapamam hatamı kod mantığında görüyor gibi görünüyor.
Seçilen ticaretin hala açık olduğundan emin olmak için kontrol ediyorum
t_CloseTime=SiparişKapatTime(); // sipariş kapatılmazsa 0 döndürür
if(t_CloseTime==0) //Sıfır değilse sipariş kapatılır.
{
if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit();
if(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true;
}//endif
Öyleyse mantık doğruysa, bu "LastProfitHigh" değişkeni neden yukarı ve aşağı gidiyor...
Yardımın için teşekkürler.kodlamada yeni
LastProfitHigh'ınız nasıl ilan edilir? Eğer işlevin gövdesi içinde bildirilmişse (örneğin start()), statik olarak bildirmezseniz değeri her zaman değiştirecektir. Bu nedenle, yerel olarak (fonksiyon içinde) bildirilirse, onu global kapsamda veya statik değişken olarak bildirmeyi deneyin ve bu şekilde iki tik arasındaki değerleri "miras alacaktır".
merhaba mladen,
Şimdi değişkeni start() işlevinin dışına taşıdım ve "statik çift" olarak ilan ettim, cevap için teşekkürler ve çapraz parmaklar doğru şekilde görüntülenecek.
Kodun mantığı doğru ifade edilmiş mi?
aud4xtrader
mantık tamam
Değişkeni başlangıcın dışına taşırsanız, onu statik olarak bildirmeniz gerekmez (herhangi bir işlev gövdesinin dışındayken otomatik olarak global bir değişkendir - ve tüm kod boyunca "görünür" olur) Değişkenin korunmasını istiyorsanız bazı işlevler için yereldir ve yine de önceki durumunu korur (örneğin önceki bir onay işaretindeki durum), sonra onu statik olarak ilan edersiniz
İşte aynı sonuçla bitecek iki örnek
int start()
{
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
[/PHP]
or the same thing but with static variable
[PHP]
int start()
{
static double previousProfit=0;
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
merhaba mladen,
Şimdi değişkeni start() işlevinin dışına taşıdım ve "statik çift" olarak ilan ettim, cevap için teşekkürler ve çapraz parmaklar doğru şekilde görüntülenecek.
Kodun mantığı doğru ifade edilmiş mi?Nasıl kodlanır?
Harika çalışıyor, mükemmel yardım için tekrar teşekkürler.
aud4xtrader
mantık tamam
Değişkeni başlangıcın dışına taşırsanız, onu statik olarak bildirmeniz gerekmez (herhangi bir işlev gövdesinin dışındayken otomatik olarak global bir değişkendir - ve tüm kod boyunca "görünür" olur) Değişkenin korunmasını istiyorsanız bazı işlevler için yereldir ve yine de önceki durumunu korur (örneğin önceki bir onay işaretindeki durum), sonra onu statik olarak ilan edersiniz
İşte aynı sonuçla bitecek iki örnek
int start()
{
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
[/PHP]
or the same thing but with static variable
[PHP]
int start()
{
static double previousProfit=0;
...
if (OrderProfit()>previiousProfit) previousProfit = OrderProfit();
}
Mükemmel! Teşekkürler.
Bu 2 işlevi deneyin:
Fiyat eşitse veya şu anda açılmış bazı emirlerin fiyatından uzaklık belirtilen mesafe içindeyse, her ikisi de true değerini döndürür.
{
for (int i=OrdersTotal()-1; i>=0 ; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderMagicNumber()!=magicNumber) continue;
if (CompareDouble(OrderOpenPrice(),price)) return(true);
}
return(false);
}
//
//
//
//
//
bool existsAtApproximatePrice(int magicNumber, double price, double distance)
{
for (int i=OrdersTotal()-1; i>=0 ; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderMagicNumber()!=magicNumber) continue;
if (MathAbs(OrderOpenPrice()-price)< distance) return(true);
}
return(false);
}
//
//
//
//
//
bool CompareDouble(double val1, double val2)
{
return(NormalizeDouble(val1,Digits)==NormalizeDouble(val2,Digits));
}
Nasıl kodlanır?
Merhaba Pip,
Kod parçacıkları için teşekkürler, insanların fikirlerini ve kodlama stillerini paylaşabilmeleri harika, bilgim arttıkça senin ve mladen gibi insanlardan dersler çıkarabiliyorum.
Mükemmel! Teşekkürler.
Merhaba,
Bir talebim var.
ObjectDelete komutuyla "example" kelimesini içeren tüm nesneleri silmek istersem kodu nasıl yazmalıyım?
Örneğin
Nesne adı
"Örnek13241"
"Örnek453623"
"Örnek" kelimesini içeren tüm nesneleri silmek istiyorum
Çok teşekkürler
...
Bunun gibi bir şey kullanın (bu, adları "Örnek" ile başlayan tüm nesneleri siler):
int lookForLength = StringLen(lookFor);
for (int i=ObjectsTotal()-1; i>=0; i--)
{
string objectName = ObjectName(i);
if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
}
Merhaba,
Bir talebim var.
ObjectDelete komutuyla "example" kelimesini içeren tüm nesneleri silmek istersem kodu nasıl yazmalıyım?
Örneğin
Nesne adı
"Örnek13241"
"Örnek453623"
"Örnek" kelimesini içeren tüm nesneleri silmek istiyorum
Çok teşekkürlerBunun gibi bir şey kullanın (bu, adları "Örnek" ile başlayan tüm nesneleri siler):
int lookForLength = StringLen(lookFor);
for (int i=ObjectsTotal()-1; i>=0; i--)
{
string objectName = ObjectName(i);
if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);
}
Teşekkür ederim mükemmel.
Başka bir sorum var ^^.
Grafikte belirtilen uzunlukta bir trend çizgisi segmenti oluşturuyorum. Rengi ayarlayabilirim ve sorun değil. Aynı trend çizgisinde 1'den fazla renk ayarlamanın mümkün olup olmadığını bilirdim.
Örneğin, ilk 1/3 kısım için bir renk, 2/3 kısım için başka bir renk ve 3/3 kısım için başka bir renk.
Bu mümkün?
teşekkür ederim^^
..
Kısacası, nesnelere atıfta bulunuyorsanız, cevap hayır. Bunun için 3 nesne oluşturmanız gerekir
Bunun için arabellek kullanıyorsanız, 3 renkli yeniden boyamayan bir çizgi için 5 çizim arabelleğine ihtiyacınız olacaktır ve yalnızca 8 çizim arabelleği olduğundan, sizi önemli ölçüde sınırlar.
Teşekkür ederim mükemmel.
Başka bir sorum var ^^.
Grafikte belirtilen uzunlukta bir trend çizgisi segmenti oluşturuyorum. Rengi ayarlayabilirim ve sorun değil. Aynı trend çizgisinde 1'den fazla renk ayarlamanın mümkün olup olmadığını bilirdim.
Örneğin, ilk 1/3 kısım için bir renk, 2/3 kısım için başka bir renk ve 3/3 kısım için başka bir renk.
Bu mümkün?
teşekkür ederim^^