Nasıl kodlanır? - sayfa 312

 

...

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".

aud4xtrader:
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

mladen:
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

double previousProfit=0;

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();

}

aud4xtrader:
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.

mladen:
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

double previousProfit=0;

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.

mladen:
Bu 2 işlevi deneyin:
Birincisi, tam olarak aynı açılış fiyatına sahip bir emir olup olmadığını öğrenmektir.

İkincisi, istenen fiyattan nnn puanlık bir sipariş olup olmadığını kontrol etmektir.

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.

bool existsAtSamePrice(int magicNumber, double price)

{

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.

Pip:
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):

string lookFor = "Example";

int lookForLength = StringLen(lookFor);

for (int i=ObjectsTotal()-1; i>=0; i--)

{

string objectName = ObjectName(i);

if (StringSubstr(objectName,0,lookForLength) == lookFor) ObjectDelete(objectName);

}

dasio:
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
 
mladen:
Bunun gibi bir şey kullanın (bu, adları "Örnek" ile başlayan tüm nesneleri siler):
string lookFor = "Example";

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.

dasio:
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^^