Nasıl kodlanır? - sayfa 303

 

başka bir yeni başlayanın soruları

Merhaba, programlamada yeniyim ama ticarette yeni değilim. Bir süredir hiçbir şey yayınlamadım ve şimdi EA'mı geliştirmeye başladığımdan beri birçok sorum var. İlk önce bir gösterge oluşturmakla başladım ve istediğimi yaptığında daha ileri gideceğim. Bulabildiğim tüm kılavuzları okudum, bu yüzden şimdi kodlamaya geçme zamanım geldi.

Üzgünüm, eğer yanlış bir konuysa - lütfen bu tür soruları nereye göndermem gerektiğini bana bildirin.

Şimdilik muhtemelen 2 temel sorum var, lütfen:

1. MA'ları kullanan birçok göstergede, grafikte kaç çubuk olduğunu kontrol eden çizgiler görüyorum. Öyleyse, MA200'e ihtiyacım varsa ve çizelgede yalnızca 100 çubuk varsa, o zaman iMA200 çalışır mı? Bence evet - Kontrol ettim ve herhangi bir MA herhangi bir grafikte sorunsuz çizildi, bu yüzden bunun Metaquotes'un şimdi düzelttiği eski bir hata olduğunu düşünüyorum. Öyleyse, MA çizmek veya iMA işlevini kullanmak için grafikte kaç çubuk olduğunu kontrol etmenin bir anlamı var mı?

2. Kapat ve iClose arasındaki fark nedir? Anladığım kadarıyla, Kapat, yalnızca mevcut grafikteki çubukların kapanışını verebilir ve iClose, herhangi bir döviz çiftinin ve herhangi bir zaman diliminin herhangi bir kapanışını döndürebilir. Ve her iki durumda da, son bir kapalı çubuk elde etmek için [1] indeksini kullanmam gerekiyor. Doğru mu görüyorum?

Teşekkür ederim.

 

Bunu zaten yaptım. Aşağıda vurgulanan kırmızıya bakın:

//--- Ö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);

}

}

}

Hala tamamen boş.

kafamı kaşımak. Kodu yapıştırmadığım için yardımınızın sınırlı olduğunu biliyorum, ancak yukarıdaki kod size uygun görünüyor mu?

Ayrıca aşağıdaki ilk satırda, LastOpenTicket'e sonra () ile başvurmam gerekir mi?

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)

 

...

Bu işlevi argüman olarak son açılan biletin bilet numarasıyla çağırıyorsanız, mavi satırdan sonraki kod asla yürütülmez (LastOpenTicket numarası -1 ise (o anda eşdeğerdir) OrderSelect() başarısız olur). LastOpenTicket() fonksiyon sonucuna) ve kod, mavi çizgiden sonra bloğu çalıştırmaz)

crsnape@btinternet.com:
Bunu zaten yaptım. Aşağıda vurgulanan kırmızıya bakın:

//--- Ö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);

}

}

}

Hala tamamen boş.

kafamı kaşımak. Kodu yapıştırmadığım için yardımınızın sınırlı olduğunu biliyorum, ancak yukarıdaki kod size uygun görünüyor mu?

Ayrıca aşağıdaki ilk satırda, LastOpenTicket'e sonra () ile başvurmam gerekir mi?

string GetWinLossPreviousShort (int LastOpenTicket, string WinLossPreviousShort)
 

Anladığımdan emin değilim.

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

Bu nedenle, yukarıdaki satırda LastOpenTicket() işlevini çağırdığım için, bu işlevin geri kalanı yürütülmüyor ve OrderSelect() başarısız oluyor. Seni doğru mu takip ediyorum?

 

...

Aşağıdakileri varsayalım:

- daha önce siparişiniz yoktu

- LastOpenedTicket() sonuç olarak -1 (önceki sipariş yok) döndürdü

- işlevi bu sonuçla çağırırsınız

Sipariş bileti -1 mevcut olmadığından ve sipariş seçiminin arkasındaki kodun hiçbiri yürütülmediğinden OrderSelect() başarısız olur. LastOpenTicket > -1 olduğunda bile, LastOpenTicket() == -1 olan "mavi çizgi koşulu" asla doğru olamaz, çünkü kodun bu kısmına ulaşmanın tek yolu LastOpenTicket > -1 olduğundadır.

Bu yüzden "3. durum : "Na"yı önerdim, çünkü aslında başlangıç "önceki emir yok" durumu nedeniyle 3 durumunuz var.

crsnape@btinternet.com:
Anladığımdan emin değilim.

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

Bu nedenle, yukarıdaki satırda LastOpenTicket() işlevini çağırdığım için, bu işlevin geri kalanı yürütülmüyor ve OrderSelect() başarısız oluyor. Seni doğru mu takip ediyorum?
 

bazı kodlama soruları, muhtemelen yeni başlayanlar

Merhaba, programlamada yeniyim ama ticarette yeni değilim. EA'mı inşa ediyorum ama önce bir gösterge oluşturmaya başladım ve istediğimi yaptığında daha da ileri gideceğim. Bulabildiğim tüm kılavuzları okudum ve şimdi kodladım.

Herhangi bir tavsiye için minnettar olurum - hepiniz şimdi olduğum yerden başladınız ...

Şimdilik muhtemelen 2 temel sorum var, lütfen:

1. MA'ları kullanan bazı göstergelerde, grafikte kaç çubuk olduğunu kontrol eden çizgiler görüyorum. Öyleyse, MA200'e ihtiyacım varsa ve çizelgede yalnızca 100 çubuk varsa, o zaman iMA200 çalışır mı? Sanırım evet - Kontrol ettim ve herhangi bir MA herhangi bir grafikte sorunsuz çizildi, bu yüzden bunun Metaquotes'ın şimdi düzelttiği eski bir sorun olduğunu düşünüyorum. Öyleyse, MA çizmek veya iMA işlevini kullanmak için grafikte kaç çubuk olduğunu kontrol etmenin bir anlamı var mı?

2. Kapat ve iClose arasındaki fark nedir? Anladığım kadarıyla, Kapat, yalnızca mevcut grafikteki çubukların kapanışını verebilir ve iClose, herhangi bir döviz çiftinin ve herhangi bir zaman diliminin herhangi bir kapanışını döndürebilir. Ve her iki durumda da, son bir kapalı çubuk elde etmek için [1] indeksini kullanmam gerekiyor. Bu doğru mu?

Teşekkür ederim.

 

Bunun gibi?

//--- Ö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)

{

WinLossPreviousShort = "L";

dönüş (WinLossPreviousShort);

}

if (LastOpenTicket() == -1)

{

WinLossPreviousShort = "YOK";

dönüş (WinLossPreviousShort);

}

}

}

VEYA BU? kırmızı değişir.

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

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, 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)

{

WinLossPreviousShort = "L";

dönüş (WinLossPreviousShort);

}

if (LastTicket == -1)

{

WinLossPreviousShort = "YOK";

dönüş (WinLossPreviousShort);

}

}

}

 

Ah sonunda tıklandı, -1 olmadığı için OrderSelect'i -1 olan bir bilet numarasında kullanamıyorum. Biletler 0'dan yukarı gider.

LastOpenTicket'i OrderSend işlevinin dışında bildirmem gerekiyor, değil mi?

 

...

Şu şekilde deneyin:

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

if (LastTicket == -1)

{

WinLossPreviousShort = "NA";

return (WinLossPreviousShort);

}

//

//

// if LastTicket == -1 no need even to try to execute the code bellow

// you already have exited for case when it is -1, so the code bellow

// will be executed properly

//

//

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

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

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

return (WinLossPreviousShort);

}

}
 

Teşekkürler mladen, aşağıdaki kod temelde sizinkiyle aynı mı? Bunu en son yazdığın gibi yazdım! :-)

DÜZENLENEN-

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

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, 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)

{

WinLossPreviousShort = "L";

dönüş (WinLossPreviousShort);

}

}

if (LastTicket == -1)

{

WinLossPreviousShort = "YOK";

dönüş (WinLossPreviousShort);

}

}

Neden: