Nasıl kodlanır? - sayfa 302

 

...

Evet yapabilirsin

Tek sınırlama, ölü bir döngü ile biteceği zaman "dairesel çağrı" ile karşılaşmamanızdır. Bunun dışında işlev çağrıları için herhangi bir sınırlama yoktur.

crsnape@btinternet.com:
İyi bir nokta. Şuna bir bakayım.

Fonksiyonlarla ilgili bir soru, fonksiyon içinde fonksiyon çağırmak mümkün müdür? Örneğin, bu işleve sahibim:

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

eğer (... vb

Daha sonra buna derim:

double GetLotsLong (int LowRisk, int HighRisk, double SLDistanceLong, string GetWinLossPreviousShort)
 

Son açılan siparişi almak için bu kodu girdim:

//--- Son açılan Siparişin bilet numarasını hesaplama işlevi

int LastOpenTicket()

{

tarihsaat lastTime = 0;

int lastTicket = -1; // Hiçbiri açık değil.

int konum;

for (konum = OrdersTotal() - 1; konum >= 0; konum--)

if (OrderSelect(kon, SELECT_BY_POS) // Yalnızca siparişlerim w/

&& OrderMagicNumber() == MagicNumber // benim sihirli numaram

&& OrderSymbol() == Symbol() // ve benim çiftim.

&& OrderOpenTime() > lastTime)

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

}

dönüş (lastTicket);

}

Bu, GetLots işlevimden çağrılan bir işlev - derleyici hatasız ama geri test ettiğimde sonuçlar bölümü tamamen açık. Ticaret yok. Bunun nedeni, ilk ticaretin yukarıdaki kodda çağrılacak daha önce bir işlemin olmaması mı?

Günlükte harici değişkenleri yüklemeye başlar (ki bu sihirli sayı 42'yi yükler, ancak benim kodumda 42552...?), ancak bundan sonra hiçbir şey olmaz.

 

...

Sihirli numaranızın beyanı nedir ( int MagicNumber; olmalıdır)

crsnape@btinternet.com:
Son açılan siparişi almak için bu kodu girdim:

//--- Son açılan Siparişin bilet numarasını hesaplama işlevi

int LastOpenTicket()

{

tarihsaat lastTime = 0;

int lastTicket = -1; // Hiçbiri açık değil.

int konum;

for (konum = OrdersTotal() - 1; konum >= 0; konum--)

if (OrderSelect(kon, SELECT_BY_POS) // Yalnızca siparişlerim w/

&& OrderMagicNumber() == MagicNumber // benim sihirli numaram

&& OrderSymbol() == Symbol() // ve benim çiftim.

&& OrderOpenTime() > lastTime)

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

}

dönüş (lastTicket);

}

Bu, GetLots işlevimden çağrılan bir işlev - derleyici hatasız ama geri test ettiğimde sonuçlar bölümü tamamen açık. Ticaret yok. Bunun nedeni, ilk ticaretin yukarıdaki kodda çağrılacak daha önce bir işlemin olmaması mı?

Günlükte harici değişkenleri yüklemeye başlar (ki bu sihirli sayı 42'yi yükler, ancak benim kodumda 42552...?), ancak bundan sonra hiçbir şey olmaz.
 

Evet, int MagicNumber = 42557

 

...

O zaman neden yanlış yaptığını gönderdiğiniz koddan anlayamıyorum (örneğin neden yanlış MagicNumber alıyor). Belirtilen MagicNumber ile açılmış herhangi bir emir varsa kod çalışmalıdır (açılan emirler arasında döngü yapacaktır) Açılmış emir yoksa veya MagicNumbers ve semboller eşleşmezse -1 (beklediğiniz gibi) döndürür bu kod doğru (şimdi test edildi ve olması gerektiği gibi çalışıyor)

Üzgünüm, ancak gönderdiğiniz koddan yapabileceğim tek şey bu

crsnape@btinternet.com:
Evet, int MagicNumber = 42557
 

Daha önce hiç sipariş açılmamış olsaydı ve bu ilk sipariş olsaydı ne olurdu? -1 döndürdüğünü biliyorum, ancak GetLots işlevim son açılan sipariş bilet numarasını aramaya dayandığından EA kodu çalışmaz mıydı?

 

Daha önce açılmış en az bir siparişin varlığına dayanıyorsa, başarısız olur.

Durumunuza böyle bir şey ekleyin:

if (LastOpenOrder()==-1)

... o zaman diğer tüm koşullar karşılanırsa siparişi açabilirsiniz

başka

... son açılan siparişi daha önce olduğu gibi artı koşulların geri kalanını kontrol edin

(şimdi EA koşullarınızı nasıl yazdığınızı vahşi bir tahmin oyunu yapıyorum)

crsnape@btinternet.com:
Daha önce hiç sipariş açılmamış olsaydı ve bu ilk sipariş olsaydı ne olurdu? -1 döndürdüğünü biliyorum, ancak GetLots işlevim son açılan sipariş bilet numarasını aramaya dayandığından EA kodu çalışmaz mıydı?
 

Merhaba Mladen,

Stokastik çizgi seviye 20 veya 80'i geçtiğinde açık ticareti nasıl kuracağınızı biliyor musunuz?

Örneğin

Stokastik seviye 20'de (aşırı satım) kesiştiğinde, Uzun

Stokastik, 80. seviyede (aşırı getirilerek) kesiştiğinde, Kısa

Saygılarımızla

Ryan

 

Bu koda birkaç satır ekledim - LastOpenTicket() işlevini kullanan şey bu ama yine de bundan hoşlanmıyor. -1 seçeneği ekledim. Burada sana yanlış gelen bir şey var mı?

//--- Önceki satış emrinin karlı olup olmadığını belirleyin

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == DOĞRU)

{

if (OrderProfit() > 0 && OrderType() == OP_SEL)

{

WinLossPreviousShort = "W";

dönüş (WinLossPreviousShort);

}

if ((OrderProfit() < 0 && OrderType() == OP_SEL) || LastOpenTicket() == -1

{

WinLossPreviousShort = "L";

dönüş (WinLossPreviousShort);

}

}

}

 

...

Neden bu işlevin olası bir sonucunu daha eklemiyorsunuz: LastOpenTicket() == -1, ardından WinLossPreviousShort="Na" gibi bir şey

crsnape@btinternet.com:
Bu koda birkaç satır ekledim - LastOpenTicket() işlevini kullanan şey bu ama yine de bundan hoşlanmıyor. -1 seçeneği ekledim. Burada sana yanlış gelen bir şey var mı?

//--- Önceki satış emrinin karlı olup olmadığını belirleyin

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == DOĞRU)

{

if (OrderProfit() > 0 && OrderType() == OP_SEL)

{

WinLossPreviousShort = "W";

dönüş (WinLossPreviousShort);

}

if ((OrderProfit() < 0 && OrderType() == OP_SEL) || LastOpenTicket() == -1

{

WinLossPreviousShort = "L";

dönüş (WinLossPreviousShort);

}

}

}