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
Şimdi güncellendi ve tekrar anlamaya çalışıyor. Neredeyse her satıra parmak izi koydum. Sonuçları size bildireceğim.
İşte eklemeniz ile bir çalışma, kayıp düzeltme anını durdurun:
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 EURUSD uzun pozisyonu stop-loss'tan kapatılacak2011.08.09 00:41:08 Çekirdek 1 2011.01.14 01:41:27 -----------------Anlaşma #63 sl 1.33328
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 eskiFırsatlarToplam=62 yeniFırsatlarToplam=63
2011.08.09 00:41:08 Çekirdek 1 2011.01.14 01:41:27 CSampleExpert::Ticaret
2011.08.09 00:41:08 Çekirdek 1 2011.01.14 01:41:27 emir gerçekleştirildi 0.15 1.33328'den [#63 satış 0.15 EURUSD 1.33328'den]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 anlaşması yapıldı [#63, 0.15 EURUSD'yi 1.33328'den sattı]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 #63 anlaşma 0.15 EURUSD 1.33328'den satıldı (63. sıraya göre)
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 stop loss tetiklendi 0.15 EURUSD 1.32127 sl: 1.33328 tp: 1.35139 [#63 0.15 EURUSD'yi 1.33328'den sat]
2011.08.09 00:41:08 Çekirdek 1 2011.01.13 18:32:00 EURUSD tarafından uzun pozisyon değiştirilecek sondaki
1 saatlik ömrü olan bekleyen siparişler veriyorum. Bir saat sonra, aktifleştirilmeyen siparişler, sipariş bitiş saatinde kapatılır. Birkaç sipariş aynı anda kapatılırsa ve HistoryOrdersTotal() işlevi kapanmadan önce sıfırdan farklı bir değere sahipse, bazı siparişleri kaybeder. Örneğin, 8 emri kapatmadan önce, fonksiyon = 4 değerine sahipti, sonra kapanıştan sonra 10 değerine sahipti. İki emir kaybedildi.
"Kayıp siparişler" ne anlama geliyor? OnTrade()'e gelen mesajların birden fazla alım satım olayı hakkında bilgi içerebileceği unutulmamalıdır. Ayrıca, aynı anda birden fazla mesaj başarısız olursa, ilk mesaj işlendiğinde geçmiş önbelleği zaten değişmiş olabilir ve "etkinlikleri kaybetme" hissine kapılabilirsiniz.
MetaTrader 5'teki Ticaret Olayları makalesini okuyun:
Çözüm
MetaTrader 5 alım satım ve analitik platformundaki tüm işlemler asenkron olarak gerçekleştirilir ve alım satım hesabındaki tüm değişikliklerle ilgili mesajlar birbirinden bağımsız olarak gönderilir. Bu nedenle, "Tek istek - Tek işlem olayı" kuralına göre tek bir olayı takip etmeye çalışmamalısınız. Trade olayının gelmesiyle tam olarak neyin değiştiğini belirlemeniz gerekiyorsa, OnTrade işleyicisinin her çağrısında, tüm anlaşmaları, pozisyonları ve siparişleri analiz etmeniz ve bunları ortaya çıkmadan önceki durumla karşılaştırmanız gerekir.Emirleri kapatmadan önce 4'e eşit olan HistoryOrdersTotal() değerini özellikle istedim. 8 siparişi kapattıktan sonra, HistoryOrdersTotal()'ın değeri 12'ye (4+8) eşit olmalıydı ve 10'a eşit olmalıydı. log dosyası eklendiğinde benzer durumlarla tekrar tekrar karşılaşılmaktadır. Bunun elde edildiği uzmanı da ekledim. Kendin yap ve göreceksin.
İşlevi değiştirmeyi deneyin, ne olacak?
Test cihazı çalıştırma sonuçlarındaki HTML raporu her zaman bir dosyaya kaydedilmiyor mu?!
Daha kesin olarak tanımlayın. Hangi koşullar altında.
Daha kesin olarak tanımlayın. Hangi koşullar altında.
nadiren, test cihazının 20-30 çalışmasından biri - "Sonuçlar" sekmesini açıyorum
XML raporunu kaydetmek için tıklayın - Rapor dosyasını alıyorum, her şey yolunda!
HTML raporunu kaydet'e tıklayın - dosyayı kaydetmek için bir pencere açılır, bir süre (kısa bir süre için) boş bir ProgressBar ile donar, ardından ProgressBar hızla dolar ve pencere kapanır ... ancak rapor dosyası oluşturulmaz!
Tam olarak bu olduğunda herhangi bir kalıp gösteremem.
İşlevi değiştirmeyi deneyin, ne olacak?
Anahtar şudur: " OnTrade işleyicisinin her çağrısında, tüm işlemleri, pozisyonları ve siparişleri analiz etmeniz ve bunları ortaya çıkmadan önceki durumla karşılaştırmanız gerekir". İçinde misal meslekten olmayanlarla, bu sadece tarihteki emirler için geçerlidir. Siparişlerin kaybolmaması için kodu şu şekilde değiştirirdim:
global değişkeni int oldHistoryOrders'a girin; ve Ontrade'de şöyle bir şey:
Açıkladığınız gibi OnTrade() ile çalışmıyorum. Ekli kodumda, her şeyi kaldırdım, yalnızca işlevi vurgulayan kısmı cant olarak bıraktım. Uzman Danışmanımda neredeyse hiç döngü yok. EA, onay başına bir sembolü işler. Yani döngülere ihtiyacım yok. 12 tik ile tüm enstrümanları işliyorum.
Not: OnTrade() bana bir ticaret olayı hakkında bilgi veriyor. Ve hangi olayın meydana geldiği, döngüler olmadan işlevlerim tarafından belirlenir.