MQL5'te Günlük İşlem Limitini İşlem Geçmişinden Okumak
MQL5'te yazılı bir Expert Advisor'a günlük işlem sınırı koymak ilk bakışta basit görünür: bir sayaç koy, her işlemde bir artır, gece yarısında sıfırla. Ama pratikte bu yöntem çabuk bozuluyor. Terminal yeniden başladığında, EA yeniden bağlandığında, input değiştirildiğinde ya da VPS yeniden başlatıldığında global değişken sıfırlanıyor. Sonuç: aynı gün içinde zaten 3 işlem yapılmış olsa da EA 3 işlem daha açıyor.
Bunun yerine hesap geçmişini oku. Broker'ın kayıtları hiç yalan söylemez. İşlem geçmişinde bugün kaç yeni pozisyon açıldığını sorgulayarak, gerçek bir sayaç tutabilirsin.
Omai Ali'nin dev.to yazısında gösterilen yaklaşım şöyle çalışıyor: Sunucu saatine göre bugünün başlangıcını hesapla (kendi yerel saatini değil, çünkü işlem zamanları sunucu saatine göre kaydediliyor). Sonra `HistoryDealsTotal()` ve `HistoryDealGetTicket()` ile geçmişteki her işlemi döngüyle kontrol et. Bugünün başından sonra açılan ve senin magic numaranla eşleşen işlemleri say. Limit aşıldıysa yeni pozisyon açma.
Bu yöntemin bir avantajı daha var: kaybedilen işlemden sonra belirli bir süre (örneğin 1 saat) bekleme kuralını da kolayca ekleyebilirsin. Geçmiş sorgulanırken son kaybedilen işlemin kapanış zamanını kontrol etmek yeterli.
Kod yazarken dikkat et: sunucu saati her zaman UTC olur mu, yoksa broker'ın kendi dilimi mi kullanıyor? Bunu broker'ın API dokümantasyonunda kontrol etmelisin. Ayrıca `HistorySelect()` fonksiyonuyla sorgulamadan önce tarih aralığını doğru belirle, yoksa geçmiş dönemlerden gereksiz işlemler sayılabilir.
Bu yöntem terminal çöktüğünde, EA yeniden başlatıldığında ya da input değiştirildiğinde bile çalışmaya devam ediyor. Gerçek kaynağı okuyorsun, sayaç kaybetmiyor.
0 yorum