Temel sorular... - sayfa 8

 
 
newdigital:
Şu konuya bakın: https://www.mql5.com/en/forum/178677

dosya açma talimatı ve indirme linki için gerçekten teşekkürler

 

10 puan3

LÜTFEN, PROGRAMCILAR!

10points3 EA'ya ihtiyacımız var, üçüncü ticaret açıldığında, ilki kapandığında, deniyorum ama hala tüm pozisyonları kapatıyor.

aslında elimizde:

if (ÖncekiAçıkSiparişler>AçıkSiparişler)

{

for(cnt=OrdersTotal();cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

mod=SiparişTürü();

if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)

{

if (mode==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue); }

if (mode==OP_SEL) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Red); }

dönüş(0);

}

Bunu yapmayı düşünüyordum:

1. ikinci işlem açıldığında ilk işlem için sihirli sayıyı değiştirin, örneğin sihirli sayı+1

2. üçüncü ticaret açıldığında, sihirli sayı+1 atanmış olarak ilkini kapatın.

haklı mıyım?

veya daha sonra kapatmak için açılan ilk ticareti başka hangi yolla belirleyebilirim?

Bana rehberlik edebilir veya değişiklikleri yapabilirseniz, daha iyi çünkü ben bir programcı değilim, sadece öğreniyorum.

Bu değişiklik Kutsal Kase'nin başlangıcı olacaktır !!!

 

10 puan3

Üzgünüm, EA.

VE bu iş parçacığında:

https://www.mql5.com/en/forum/174975

Teşekkürler!

Dosyalar:
10p3v0.03_1.mq4  12 kb
 

programlama yardımı - dönüş operatörü

merhaba

mt4 programlamaya yeni başladım ve şimdi sıklıkla void işlevinden "start()" ana programına değişkenleri işlemek için bir çözüm bulmaya çalışıyorum

aşağıda bir örnek görebilirsiniz ve soru şu: "CountOpenSell", "CountOpenBuy", "ProfitSell" ve "ProfitBuy" değişkenlerinden start() - mainprograma nasıl değer verebilirim?

önerimi ekledim (dönüşler BOLD harflerle yazılmıştır) ama bunun doğru olup olmadığını ve "start()" ana programı için doğru kodun nasıl olduğunu bilmiyorum???

kötü ingilizcem ve tüm yardımlarım için özür dilerim

çok teşekkürler

Saygılarımızla

forex2006

geçersiz CallBuySellProfit()

{ KarBuy=0;

KarSat = 0;

CountOpenSell=0;

CountOpenBuy=0;

for (i=SiparişlerToplam()-1;i>=0;i--)

{if(Sipariş Seçimi(i,SELECT_BY_POS,MODE_TRADES))

{

if (OrderType()==OP_SELL) {ProfitSell = ProfitSell + OrderProfit();CountOpenSell++;}

if (OrderType()==OP_BUY) {ProfitBuy = ProfitBuy + OrderProfit();CountOpenBuy++;}

}

else Print("Sipariş seçiminde hata", GetLastError());

}

dönüş(CountOpenSell);

dönüş(CountOpenBuy);

dönüş(KarSat);

dönüş (Kar Satın Al);

}

 

forex2006 programlama yardımı - dönüş operatörü

Merhaba forex2006,

Gerçekten mql öğrenmek istiyorsanız, codersguru eğitimlerini denemenizi önerdim, işte oradan başladım. Sorunuza gelince, void bir fonksiyon bir değer döndüremez, eğer void fonksiyonlarından değer almak istiyorsanız, global değişkenleri kullanmanız gerekir. Değerleri çıkarmanın en iyi yolu, istediğiniz değerleri belirtmek için parametrelerle birlikte kullanılan bir değeri döndüren bir işlev kullanmaktır. Aşağıdaki basit bir örnek. Fonksiyonlarda global değişkenleri kullanmaktan kaçının çünkü bu daha sonra sizin için zor olabilir.

Umut ediyorum bu yardım eder

int başlangıç()

{

double ProfitBuy = CallBuySellProfit(OP_BUY,yanlış);

double ProfitSell = CallBuySellProfit(OP_SELL,yanlış);

int CountOpenBuy = CallBuySellProfit(OP_BUY,true);

int CountOpenSell = CallBuySellProfit(OP_SELL,true);

Comment( "Kar Satın Al: "+DoubleToStr(Kar Satın Al,2) +"\n"+

"KarSatış: "+DoubleToStr(ProfitSell,2) +"\n"+

"CountOpenBuy: "+DoubleToStr(CountOpenBuy,2)+"\n"+

"CountOpenSell: "+DoubleToStr(CountOpenSell,2)+"\n"+

"");

dönüş;

}

double CallBuySellProfit(int iOrderType, bool bCount)

{

çift dKar = 0;

int iCount = 0;

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

{

if(Sipariş Seçimi(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderType()==iOrderType)

{

dProfit = dProfit + OrderProfit();

iCount++;

}

}

başka

{

Print("Sipariş seçiminde hata", GetLastError());

}

}//son için

if(bCount)dönüş(iCount);

başka dönüş(dProfit);

}//ÇağrıBuySellProfit'i sonlandır

 

Aynı çubukta EA ticaretini durdurun

Merhaba, yine de, EA'nın alım satımların o bara önceden yerleştirilip yerleştirilmediğini kontrol etmesi ve ardından yeni bir bara kadar artık alım satım yapmaması için kod koymak mı?

Teşekkür ederim

 

matrixebiz, mum kapanmadan önce aynı mumda alım satımın açılıp kapanma olasılığını düşündünüz mü? muhtemelen geçmiş listesini de kontrol etmelisiniz.

Yazdığım bu küçük işlevi her zaman tüm EA'larıma taşıdım, belki siz de yararlı bulabilirsiniz.

bool DecideToOpenTrade()

{

int total = OrdersTotal();

if (total > 0)

{

for(int cnt=0;cnt<total;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber() == EA_MAGIC_NUM)

{

return (false);

}

}

}

}

// in case trades has already opened and closed within the candle

int histotal = OrdersHistoryTotal();

if (histotal > 0)

{

for(cnt=0;cnt<histotal;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber() == EA_MAGIC_NUM)

{

if (Time[0] <= OrderOpenTime()) // don't open a new position if we're still on the same candle

{

return (false);

}

}

}

}

}

return (true);

}

int start()

{

// some time check codes first.. blah blah

// ...

// ...

// ...

// check signals

if (Should_Buy())

{

if (DecideToOpenTrade())

{

//... trade opening codes here

}

}

if (Should_Sell())

{

if (DecideToOpenTrade())

{

//... trade opening codes here

}

}

}

not: bu işlev, EA_MAGIC_NUM için benzersiz bir değer belirlediğinizi varsayar. Bu şekilde çek, diğer EA'lar tarafından açılan işlemlere bakmaz.

Should_Buy() ve Should_Sell(), bir alım veya satım sinyalinin oluşup oluşmadığını belirlemek için tüm EA'larımda oluşturduğum işlevlerdir.

Bu yardımcı olur umarım. Daha fazla açıklamaya ihtiyacınız olursa bana PM atın.

Saygılarımızla,

Zen

 

güncel yazı aşağıda...

 

Bu benim için çalışıyor gibi görünüyor Teşekkür ederim

void DesideToOpen()

//----------------------------------------------------------------+

//----------------------------------------------------------------+

{

int total = OrdersTotal();

if (total > 0)

{

for(int cnt=0;cnt<total;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS))

{

if(OrderComment() == EA_Name + MagicNumber) DecideToOpenTrade = false;

}

}

}

// in case trades has already opened and closed within the candle

int histotal = OrdersHistoryTotal();

if (histotal > 0)

{

for(cnt=0;cnt<histotal;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderComment() == EA_Name + MagicNumber)

{

if (Time[0] <= OrderOpenTime()) DecideToOpenTrade = false; // don't open a new position if we're still on the same candle

}

}

}

}

}