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
Şu konuya bakın: https://www.mql5.com/en/forum/178677
Ş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!
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
}
}
}
}
}