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
IndexByTicket() işlevi.
Bilete göre emrin veya pozisyonun indeksini (verilen emirlerin veya açık pozisyonların genel listesindeki seri numarası) verir. IndexByTicket() işlevi gerekli biletle bir emir veya pozisyon bulamazsa, -1 değerini döndürür. Kontrol edilen emirlerin veya pozisyonların listesini fonksiyon parametreleriyle sınırlayabilirsiniz:
IndexByTicket() işlevini özel bir Uzman Danışmanda yazdım. Onsuz yapmanın imkansız olduğunu hatırlıyorum, yoksa neden yazmaya başlayayım? Ama işte orada nasıl kullanıldı ve neden prensipte yazdım, hayatım boyunca hatırlamıyorum :-) Danışmanın kaynak koduna bak kırıldı. Yüzlerce var.
Genel olarak, daha önce verdiğim örneklere benzer örnekler vermenin bir anlamı görmüyorum. Bilgili kişiler, hangi parametreleri nereye koyacaklarını tahmin edeceklerdir. IndexByTicket() işlevini kullanmak için iyi bir fikri olan varsa, lütfen buraya gönderin. uygulamaya çalışacağım.
Kısa duyuru.
SelectByTicket() ve SelectByTicketFromHistory() işlevlerini kullanımdan kaldırdım. Artık onları kullanmayacağım, bu yüzden yayınlamak için bir neden göremiyorum. Bu konuyu tartışmak isteyenler her zaman beklerim. Tüm sanrılarımı OLDUĞU GİBİ göster.
NumberOfOrders() işlevi.
Bu işlev, siparişlerin sayısını döndürür ve işlevsel olarak ExistOrders() öğesini tamamen geçersiz kılar. ExistOrders() işlevini NumberOfOrders () işleviyle değiştirmek için, sıfırdan büyük olduğundan emin olmak için dönüş değerini kontrol etmek gerekli ve yeterlidir. Kontrol edilen siparişlerin listesini fonksiyon parametreleriyle sınırlayabilirsiniz:
NumberOfOrders() işlevini kullanma örnekleri.
Ekte, yine yukarıdaki örneklerle çalışan bir komut dosyası.
NumberOfOrders() işlevi.
Bu işlev, siparişlerin sayısını döndürür ve işlevsel olarak ExistOrders() öğesini tamamen geçersiz kılar. ExistOrders() işlevini NumberOfOrders () işleviyle değiştirmek için, sıfırdan büyük olduğundan emin olmak için dönüş değerinin kontrol edilmesi gerekli ve yeterlidir. Kontrol edilen siparişlerin listesini fonksiyon parametreleriyle sınırlayabilirsiniz:
biraz kafam karıştı. Nedense bazı çelişkiler görüyorum. Burada:
"... dönüş değerinin sıfırdan büyük olduğunu kontrol etmek gerekli ve yeterlidir ."
"Bu ve sadece bunu" işaretlerseniz, sipariş sayısı işlevi anlamını kaybeder!
Bu yüzden konuya girmeye başladım. Bu işlevi Uzman Danışmanıma ekledim. Parametrelerde m=1 ayarladım ve pozisyon açma koşulu
Ancak uzman bu sınırlamayı görmüyor gibi görünüyor! Ve her sinyal için tekrar tekrar emirler açar...
Buradaki sorun ne olabilir?
biraz kafam karıştı. Nedense bazı çelişkiler görüyorum. Burada:
"... dönüş değerinin sıfırdan büyük olduğunu kontrol etmek gerekli ve yeterlidir ."
"Bu ve sadece bunu" işaretlerseniz, sipariş sayısı işlevi anlamını kaybeder!
hmm... Görünüşe göre ExistOrders() ve NumberOfOrders() işlevlerinin her biri tarafından döndürülen bilgi miktarına dikkat etmemişsiniz. ExistOrders() işlevi yalnızca siparişlerin varlığı hakkında bilgi döndürürken NumberOfOrders() işlevi sipariş sayısı hakkında bilgi verir. Sipariş sayısı ile ilgili bilgiler, siparişlerin varlığı hakkında bilgi içerir. Bir sipariş var mı yok mu sorusuna cevap vermeniz gerektiğinde, sayıları hakkında bilgi gereksizdir. Bu nedenle ExistOrders() işlevini NumberOfOrders() işleviyle değiştirmek için NumberOfOrders ( ) işlevi tarafından döndürülen değerin sıfırdan büyük olduğundan emin olmak için kontrol edilmesi gerekli ve yeterli dedim. Sonuçta, bu değer sıfıra eşitse sipariş olmadığı ve sıfırdan büyükse sipariş olduğu açıktır. ExistOrders() işlevi, sipariş sayısıyla ilgili bilgilere ihtiyaç duyulmadığında kullanılabilir ve NumberOfOrders() işlevi, sipariş sayısıyla ilgili bilgilere ihtiyaç OLMADIĞINDA ve gerektiğinde kullanılabilir. Bu anlamda NumberOfOrders() işlevi, ExistOrders() işlevinin yerini tamamen alır.
Bu yüzden konuya girmeye başladım. Bu işlevi Uzman Danışmanıma ekledim. Parametrelerde m=1 ayarladım ve pozisyon açma koşulu
Ancak uzman bu sınırlamayı görmüyor gibi görünüyor! Ve her sinyal için tekrar tekrar emirler açar...
Buradaki sorun ne olabilir?
Sayesinde. Anladım . Hem birinci soruda hem de ikinci soruda.
Başka bir deyişle, "genişletilmiş" NumberOfOrders() işlevi, aslında IndexByTicket() işlevini zaten içerir.
Evet kesinlikle. OP_BUY ve OP_SELL'i açtım !
Geriye bir sonraki işlevinize bir örnek vermek kalıyor, kedi. pozisyonlarla çalışır. (siparişlerle değil)
Forumda bir yere yazmıştın diye hatırlıyorum. Bir şey bulamıyor.
Geriye bir sonraki işlevinize bir örnek vermek kalıyor, kedi. pozisyonlarla çalışır. (siparişlerle değil)
Sipariş fonksiyonlarıyla işim bitti. Ayrıca pozisyonlar için fonksiyonlar olacaktır. Yaklaşık 30 adet.
Forumda bir yerde paylaştığını hatırlıyorum. Bir şey bulamıyor.
Aramak
Sevgili Igor, senden yardım istiyorum! Birkaç enstrümanda pozisyon alabilmesi için bir danışman eklemem gerekiyor. 2 Expert Advisor, standart MACD ve Ema var, her biri 6 pozisyonlu ama sadece bir pozisyon açılıyor... Dile hakim değilim, nereye ekleyeceğimi bulamıyorum... Eğer senin için zor değilse, o zaman yardım et... Ema danışmanını kopyaladım... Teşekkürler!
//+------------------------------------------- --------------------+//| Parabolik.mq4 |
//| Vitalik |
//| wwwita@mail.ru |
//+------------------------------------------- --------------------+
dış çift Lot = 0.1;
dış çift Pip=5;
harici çift MoveBack=3;
harici int chk=0;
dış çift SL=20;
//+------------------------------------------- --------------------+
//| |
//+------------------------------------------- --------------------+
int başlangıç()
{
double hi=Yüksek[1];
double lo=Düşük[1];
çift EMA, EMA1, EMA2, EMA3;
int cnt=0, bilet, toplam;
EMA=iMA(0,0,5,0,MODE_EMA,PRICE_MEDIAN,1);
EMA1=iMA(0,0,10,0,MODE_EMA,PRICE_MEDIAN,1);
EMA2=iMA(0,0,5,0,MODE_EMA,PRICE_MEDIAN,0);
EMA3=iMA(0,0,10,0,MODE_EMA,PRICE_MEDIAN,0);
toplam=SiparişToplam();
if(toplam<1)
{
if(AccountFreeMargin()<(1000*Lots))
{
Print("Paran yok. Bedava para = ", AccountFreeMargin());
dönüş(0);
}
if(((EMA>EMA1) && (EMA2<EMA3)) || ((EMA<EMA1) && (EMA2>EMA3)))
{
chk=1;
Print("Konum mümkün!");
}
if(chk==1)
{
if(EMA3-EMA2>2*Puan && Bid>=(lo+MoveBack*Puan))
{
bilet=SiparişGönder(Symbol(),OP_SELL,Lots,Bid,3,0,0,
"EMA konumu:",16385,0,Kırmızı);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print("SAT emri açıldı: ",OrderOpenPrice());
chk=0;
}
başka
{
Print("SATIŞ emrini açarken hata: ",GetLastError());
dönüş(0);
}
}
if(EMA2-EMA3>2*Puan && Sor<=(hi-MoveBack*Puan))
{
bilet=SiparişGönder(Symbol(),OP_BUY,Lots,Sor,3,0,0,
"EMA konumu:",16385,0,Yeşil);
if(bilet>0)
{
if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))
Print("Satın alma emri açıldı: ",OrderOpenPrice());
chk=0;
}
başka
{
Print("SATIN AL emri açılırken hata oluştu : ",GetLastError());
dönüş(0);
}
}
}
dönüş(0);
}
for(cnt=0;cnt<toplam;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // bu açık bir pozisyon mu? OP_BUY veya OP_SELL
OrderSymbol()==Symbol()) // alet eşleşiyor mu?
{
if(OrderType()==OP_BUY) // uzun pozisyon açık
{
// kapanma zamanının gelip gelmediğini kontrol et?
if(Teklif>=(OrderOpenPrice()+Pip*Puan))
{
chk=0;
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // pozisyonu kapat
dönüş(0); // çıkış
}
if(Teklif<=(OrderOpenPrice()-SL*Puan))
{
chk=0;
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // pozisyonu kapat
dönüş(0); // çıkış
}
}
else // aksi takdirde bu bir kısa pozisyondur
{
// kapanma zamanının gelip gelmediğini kontrol et?
if(Sor<=(OrderOpenPrice()-Pip*Puan))
{
chk=0;
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // pozisyonu kapat
dönüş(0); // çıkış
}
if(Sor>=(OrderOpenPrice()+SL*Puan))
{
chk=0;
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // pozisyonu kapat
dönüş(0); // çıkış
}
}
}
}
dönüş(0);
}
//+------------------------------------------- --------------------+
Igor, 'INI dosyalarıyla çalışmak için işlevler kitaplığındayım.' Sana bir soru sordum ama cevap alamadım :(