Daha karmaşık bir örnek alalım. . .
Kapatmak istediğimiz aşağıdaki Emirlere sahip olduğumuzu varsayalım, hepsi aynı sihirli numaraya sahip ancak bazılarının EA'mız ile farklı bir Sembolü var, kodumuzun EA, EURUSD ile aynı sembol için emirleri kapatmasını istiyoruz:
Konum | Bilet numarası | sembol |
---|---|---|
0 | 111 | EURUSD |
1 | 222 | EURUSD |
2 | 333 | GBPUSD |
3 | 444 | EURUSD |
4 | 555 | EURUSD |
1. döngü boyunca çalıştırın:
PositionIndex'in başlangıç değeri TotalNumberOfOrders - 1'dir ve bu 5 - 1 = 4'e eşittir, bu nedenle 4. konumdaki sipariş seçilir, bilet numarası 555, bu sipariş sihirli sayı ve Sembol ile eşleşir, bu nedenle başarıyla silinir ve kalan Emirler şu şekilde değişir: şöyle:
Konum | Bilet numarası | sembol |
---|---|---|
0 | 111 | EURUSD |
1 | 222 | EURUSD |
2 | 333 | GBPUSD |
3 | 444 | EURUSD |
2. döngü boyunca çalıştırın:
şimdi PositionIndex'in değeri 3'tür, bu nedenle 3. pozisyondaki sipariş seçilir, bilet numarası 444, bu sipariş sihirli sayı ve Sembol ile eşleşir, bu nedenle başarıyla silinir ve kalan Emirler aşağıdaki gibi pozisyon değiştirir :
Konum | Bilet numarası | sembol |
---|---|---|
0 | 111 | EURUSD |
1 | 222 | EURUSD |
2 | 333 | GBPUSD |
Döngü boyunca 3. çalıştırma:
şimdi PositionIndex'in değeri 2'dir, bu nedenle 2. konumdaki sipariş seçilir, bilet numarası 333, bu sıra sihirli sayı ile eşleşir, ancak Sembol DEĞİLDİR . silinmez, kalan Emirler değişmez :
Konum | Bilet numarası | sembol |
---|---|---|
0 | 111 | EURUSD |
1 | 222 | EURUSD |
2 | 333 | GBPUSD |
4. döngü boyunca çalıştırın:
şimdi PositionIndex'in değeri 1'dir , bu nedenle 1. konumdaki sipariş seçilir, bilet numarası 222, bu sıra sihirli sayı ve Sembol ile eşleşir, bu nedenle başarıyla silinir ve kalan Emirler aşağıdaki gibi pozisyon değiştirir :
Konum | Bilet numarası | sembol |
---|---|---|
0 | 111 | EURUSD |
1 | 333 | GBPUSD |
Döngü boyunca 5. ve son çalıştırma:
şimdi PositionIndex'in değeri 0 böylece 0 pozisyonundaki emir seçilir, bilet numarası 111, bu emir başarıyla silinir, 0 değeri döngü için geçerli olan son değerdir . . . döngü bitti.
Sembolümüzle eşleşmeyen bir siparişi bırakarak tüm eşleşen siparişlerimizi başarıyla sildik, bilet numarası 333 şimdi 0 konumunda. . .
Konum | Bilet numarası | sembol |
---|---|---|
0 | 333 | GBPUSD |
Bu konuya bağlantı: Döngüler ve Emirleri Kapatma veya Silme
Vay. Bir siparişi kapatmak için tüm bu bilgiler.
Son 137 işlem boyunca, sürekli olarak, her gün (ortalama olarak) - hatasız bir şekilde, günde 50+ pip'i netleştirmenin ne kadar bilgi alacağını merak ediyorum.
Bana böyle bir şeyi nasıl yapacağımı gösterin, bunun son derece yararlı bir bilgi olduğunu düşüneceğim ve Guru, sonsuza dek ve sonsuza dek unvanınız olacak, Amin.
Vay. Bir siparişi kapatmak için tüm bu bilgiler.
Son 137 işlem boyunca her gün (ortalama olarak) tutarlı bir şekilde günde 50+ pip netleştirmenin ne kadar bilgi gerektireceğini merak ediyorum.
Son 137 işlem boyunca, sürekli olarak, her gün (ortalama olarak) - hatasız bir şekilde, günde 50+ pip'i netleştirmenin ne kadar bilgi alacağını merak ediyorum.
Bana böyle bir şeyi nasıl yapacağımı gösterin, bunun son derece yararlı bir bilgi olduğunu düşüneceğim ve Guru, sonsuza dek ve sonsuza dek unvanınız olacak, Amin.
- Konu dışı bilgilerle başlığı Kaçırmayın
- Kuralları okumadığınız için size göstermeyeceğiz MetaQuotes Language 4 ve otomatik alım satım dışında herhangi bir tartışma yasaktır
Raptor, gönderinizin ilk bakışta mql4'te oldukça uzman olduğunuzu biliyorum. Bu konu yine şüphelerimi gidermeye yardımcı oluyor!
Sadece başka bir fikir:
for (PositionIndex = 0 ; PositionIndex < OrdersTotal () ; PositionIndex ++) // <-- for loop to loop through all Orders . . COUNT DOWN TO ZERO ! { if ( ! OrderSelect (PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue ; // <-- if the OrderSelect fails advance the loop to the next PositionIndex if ( OrderMagicNumber() == MagicNo // <-- does the Order's Magic Number match our EA's magic number ? && OrderSymbol() == Symbol () // <-- does the Order's Symbol match the Symbol our EA is working on ? && ( OrderType() == OP_BUY // <-- is the Order a Buy Order ? || OrderType() == OP_SELL ) ) // <-- or is it a Sell Order ? add_trade_to_close_queue( OrderTicket()); // <-- You need to model the queue mechanism ... } // end of For loop
Saygılarımızla.
Sadece başka bir fikir:
Saygılarımızla.
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Bu, muhtemelen kısmen Expert Advisor Builder gibi çöplerden dolayı gördüğüm en yaygın hatalardan biri. Bu yüzden, ileride başvurmak üzere bağlantı kurulabilmesi için konuya adanmış bir iş parçacığının zamanının geldiğini düşündüm.
Sorun
Basit bir örnek verelim; EA'mız için tüm açık siparişleri kapatacak bir işlev istiyoruz, birçok örnek var ama hadi sıfırdan bir tane oluşturalım.
Bir döngüye ihtiyacımız var çünkü belirli bir EA için tüm siparişlerimizi kapatmak istiyoruz, bu döngü içinde siparişi seçmek için kodumuz, doğru sembol ve sihirli sayı olduğunu kontrol etmek için kodumuz ve son olarak siparişi kapatmak için kodumuz olacak:
Bu kod kötü. . . KULLANMAYIN . . . Nedenini bir sonraki bölümde açıklayacağım. . .
Açıklama
Yukarıdaki kod üzerinde çalışalım. . . satır satır, Siparişe Göre Sırala. . .
Kapatmak istediğimiz aşağıdaki Emirlere sahip olduğumuzu varsayalım, hepsinin EA'mız ile aynı sihirli sayı ve Sembolü var, bu yüzden kodumuzun hepsini kapatmasını istiyoruz:
1. döngü boyunca çalıştırın:
PositionIndex'in başlangıç değeri 0'dır, bu nedenle 0 pozisyonundaki emir seçilir, bilet numarası 111, bu emir başarıyla silinir ve kalan Emirler aşağıdaki gibi pozisyon değiştirir:
2. döngü boyunca çalıştırın:
şimdi PositionIndex'in değeri 1'dir, bu nedenle 1. pozisyondaki emir seçilir, 333 numaralı bilet, bu emir başarıyla silinir ve kalan Emirler aşağıdaki gibi pozisyon değiştirir :
Döngü boyunca 3. çalıştırma:
şimdi PositionIndex'in değeri 2'dir, bu nedenle 2. pozisyondaki emir seçilir, bilet numarası 555, bu emir başarıyla silinir ve kalan Emirler aşağıdaki gibi pozisyon değiştirir :
4. döngü boyunca çalıştırın:
şimdi PositionIndex'in değeri 3'tür. OrderSelect(), 3. pozisyonda Sırayı seçmeye çalışır ve başarısız olur , devam, kodun yürütülmesini döngüdeki bir sonraki değere götürür. .
Döngü boyunca 5. ve son çalıştırma:
şimdi PositionIndex'in değeri 4'tür. OrderSelect(), 4. pozisyonda Sırayı seçmeye çalışır ve başarısız olursa , devam, kodun yürütülmesini döngüdeki bir sonraki değere götürür. . . döngü bitti.
Şimdi elimizde 2 Sipariş, 222 ve 444 numaralı biletler kaldı ki bunlar kapanması gerekiyordu ama kapatılmadı. . . sonraki, bu sorunun nasıl çözüleceği.
Çözüm
Açık emirleri kapatırken veya bekleyen emirleri silerken aşağıdaki kod doğru yaklaşımdır. . .
Temel fark, döngünün ( TotalNumberOfOrders - 1 ) değerinden 0'a düşmesidir.
Bir kez daha yukarıdaki kod üzerinde çalışalım. . . satır satır, Siparişe Göre Sırala. . .
Daha önce olduğu gibi aynı siparişlere sahibiz:
1. döngü boyunca çalıştırın:
PositionIndex'in başlangıç değeri TotalNumberOfOrders - 1'dir ve bu 5 - 1 = 4'e eşittir, bu nedenle 4. pozisyondaki emir seçilir, bilet numarası 555, bu emir başarıyla silinir ve kalan Emirler pozisyonu aşağıdaki gibi değiştirir:
2. döngü boyunca çalıştırın:
şimdi PositionIndex'in değeri 3'tür, bu nedenle 3. pozisyondaki emir seçilir, 444 numaralı bilet, bu emir başarıyla silinir ve kalan Emirler aşağıdaki gibi pozisyon değiştirir :
Döngü boyunca 3. çalıştırma:
şimdi PositionIndex'in değeri 2'dir, bu nedenle 2. pozisyondaki emir seçilir, 333 numaralı bilet, bu emir başarıyla silinir ve kalan Emirler aşağıdaki gibi pozisyon değiştirir :
4. döngü boyunca çalıştırın:
şimdi PositionIndex'in değeri 1'dir , dolayısıyla 1 numaralı pozisyondaki emir seçilir, 222 numaralı bilet, bu emir başarıyla silinir ve kalan Emirler aşağıdaki gibi pozisyon değiştirir :
Döngü boyunca 5. ve son çalıştırma:
şimdi PositionIndex'in değeri 0 böylece 0 pozisyonundaki emir seçilir, bilet numarası 111, bu emir başarıyla silinir, 0 değeri döngü için geçerli olan son değerdir . . . döngü bitti.
Tüm eşleşen siparişlerimizi başarıyla sildik. . .
Bu konuya bağlantı: Döngüler ve Emirleri Kapatma veya Silme