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 anda Şampiyonaya katılan Uzman Danışmanım, CTrade standart kitaplığının hatalı çalışması nedeniyle hatalı işlemler gerçekleştiriyor.
Pozisyonları kapatmak için PositionClose işlevini kullanıyorum. Ancak pozisyonların kapanmasıyla birlikte, bu işlevin kendisi işlemleri AÇAR!
İşlev şu şekilde kullanılır:
Sonuç olarak, PositionClose bazen ek siparişler açar.
Burada, önce bir Alış anlaşması kapatılır ve ardından aynı hacimde fazladan bir Satış anlaşması açılır. Üstelik AccountInfoDouble(ACCOUNT_FREEMARGIN) bu ekstra anlaşmayı fark etmedi. Daha sonra artan lotlu bir anlaşma açıldığından, kullanılan MM'ye göre bunun için fonlar açık ekstra anlaşma dikkate alındığında yeterli değildi.
MQL işlevlerini en iyi şekilde kullanmıyor olabileceğimin farkındayım. Ancak, anlaşmaları kapatmak için tasarlanmış tescilli MQL kitaplığından bir işlevin, anlaşmaları kendisi açacağı gerçeği, işlevlerin kabul edilebilir davranışı hakkındaki fikrime uymuyor.
MQL işlevlerini en iyi şekilde kullanmıyor olabileceğimin farkındayım. Ancak, anlaşmaları kapatmak için tasarlanmış tescilli MQL kitaplığından bir işlevin, anlaşmaları kendisi açacağı gerçeği, işlevlerin kabul edilebilir davranışı hakkındaki fikrime uymuyor.
MetaTrader 5'teki Ticaret Olayları makalesini okuyun:
Alım satım olayları ve alım satım geçmişindeki değişiklikler bağımsız kanallar aracılığıyla raporlanır. OrderSend() fonksiyonu ile bir satınalma talebi gönderirken, başarılı talep doğrulamasının ardından oluşturulan sipariş biletini hemen öğrenebilirsiniz. Ancak aynı zamanda, siparişin kendisi henüz istemci terminalinde görünmeyebilir ve onu OrderSelect() işlevini kullanarak seçme girişimi başarısız olacaktır.
MetaTrader 5'teki Ticaret Olayları makalesini okuyun:
MetaTrader 5'teki Emirler, Pozisyonlar ve İşlemler makalesinin yanı sıraOrderSend işlevini kullanmadım. PositionClose işlevi, siparişlerle çalışmak için tasarlanmış standart MQL kitaplığından kullanılır.
Bu işlevin yardımı, işlemleri açabileceğini açıklamaz.
Yardımdan alıntı:
PozisyonKapat
Belirtilen sembol üzerindeki konumu kapatır.
bool PozisyonKapat (
const dize sembol , // sembol
uzun sapma=ULONG_MAX // sapma
)
Seçenekler
semboller
[içinde] Pozisyonun kapatılması gereken alım satım aracının adı.
sapma=ULONG_MAX
[içinde] Mevcut fiyattan maksimum sapma (puan olarak).
Geri dönüş değeri
true - yapıların temel kontrolünün başarılı olması durumunda, aksi takdirde false.
Not
PositionClose(...) yönteminin başarıyla tamamlanması, her zaman bir ticaret işleminin başarılı bir şekilde yürütülmesi anlamına gelmez. ResultRetcode() yöntemini çağırarak bir ticaret talebinin (işlem sunucusu dönüş kodu) yürütülmesinin sonucunu kontrol etmek gerekir.
OrderSend işlevini kullanmadım. Siparişlerle çalışmayı basitleştirmek için tasarlanmış standart MQL kitaplığındaki PositionClose işlevi kullanılır.
Bu işlevin yardımı, işlemleri açabileceğini açıklamaz.
Yardımdan alıntı:
PozisyonKapat
Belirtilen sembol üzerindeki konumu kapatır.
bool PozisyonKapat (
const dize sembol , // sembol
uzun sapma=ULONG_MAX // sapma
)
Seçenekler
semboller
[içinde] Pozisyonun kapatılması gereken alım satım aracının adı.
sapma=ULONG_MAX
[içinde] Mevcut fiyattan maksimum sapma (puan olarak).
Geri dönüş değeri
true - yapıların temel kontrolünün başarılı olması durumunda, aksi takdirde false.
Not
PositionClose(...) yönteminin başarıyla tamamlanması, her zaman bir ticaret işleminin başarılı bir şekilde yürütülmesi anlamına gelmez. ResultRetcode() yöntemini çağırarak bir ticaret talebinin (işlem sunucusu dönüş kodu) yürütülmesinin sonucunu kontrol etmek gerekir.
PositionClose(...) kitaplık işlevinde hata yok. Ve işte sahip olduğunuz kod. Burada kendiniz yardımdan alıntı yaptınız.
Örneğin, kodunuzda bu kontrolü görmüyorum.
OrderSend işlevini kullanmadım. PositionClose işlevi, siparişlerle çalışmak için tasarlanmış standart MQL kitaplığından kullanılır.
Bu işlevin yardımı, işlemleri açabileceğini açıklamaz.
Ve PositionClose işlevinin uygulanmasına bakıyorsunuz:
Standart kitaplıkların kaynak kodunu incelemem gerekmediğini düşündüm.
Yardım, PositionClose işlevini kullanarak işlem açma olasılığını açıklamaz. Ekibiniz tarafından geliştirilen PositionClose işlevi, açılış anlaşmalarına karşı kontroller ve koruma içermelidir. Standart kitaplıkların başkaları için bir model olarak hizmet etmek için ideal kod olduğuna inanıyorum. Bu nedenle, kütüphane kodunu kullanmadan önce demonte etmek gerekli olmamalıdır.
Alıntı:
MQL5 Standard Library, MQL5 dilinde yazılmıştır ve son kullanıcılar için programların (göstergeler, komut dosyaları, Uzman Danışmanlar) yazılmasını kolaylaştırmak üzere tasarlanmıştır. Kitaplık, çoğu dahili MQL5 işlevine kolay erişim sağlar.
Standart kitaplıkların kaynak kodunu incelemem gerekmediğini düşündüm.
Yardım, PositionClose işlevini kullanarak işlem açma olasılığını açıklamaz. Ekibiniz tarafından geliştirilen PositionClose işlevi, açılış anlaşmalarına karşı kontroller ve koruma içermelidir. Standart kitaplıkların başkaları için bir model olarak hizmet etmek için ideal kod olduğuna inanıyorum. Bu nedenle, kütüphane kodunu kullanmadan önce demonte etmek gerekli olmamalıdır.
Yasayı bilmemek mazeret değildir. Kodunuzda pozisyonun kapalı olduğunun kontrolü nerede?
İfade
R == true
sadece PositionClose() fonksiyonunun başarılı bir şekilde yürütülmesinden bahseder, fakat pozisyonun kapatılmasından bahsetmez:
Not
PositionClose(...) yönteminin başarıyla tamamlanması, her zaman bir ticaret işleminin başarılı bir şekilde yürütülmesi anlamına gelmez. ResultRetcode() yöntemini çağırarak bir ticaret talebinin (işlem sunucusu dönüş kodu) yürütülmesinin sonucunu kontrol etmek gerekir.
Ve ikinci ifade
eşittir
ve ayrıca asenkron ticaret işlemlerini garanti etmez. Pozisyon ticaret sunucusunda zaten kapatıldı ve bununla ilgili mesaj henüz terminale ulaşmadı. Böylece kodda kendi elinizle bir hata yarattığınız ortaya çıktı.
Hayatta her şey test cihazındaki kadar sorunsuz değildir, ayrıca bir ticaret talebinin gönderilmesi ile yürütülmesinin sonucu arasında küçük gecikmeler vardır. Herkes bu sorunu kendi başına çözer, başlangıçta, yardımda yazıldığı gibi ResultRetcode() işlevini kullanarak dönüş kodunu kontrol etmekten zarar gelmez.
Tekrarlıyorum.
MQL işlevlerini en iyi şekilde kullanmıyor olabileceğimin farkındayım. Ancak, anlaşmaları kapatmak için tasarlanmış tescilli MQL kitaplığından bir işlevin, anlaşmaları kendisi açacağı gerçeği, işlevlerin kabul edilebilir davranışı hakkındaki fikrime uymuyor.Söylediğiniz her şey takasları kapatmakla ilgili. Evet, EA pozisyon kapanışını en uygun şekilde kontrol etmez. Ancak bu, açık işlemleri kapatmak için amaçlanan işlevin kendi başına izin vermez.
Yardım diyor ki:
PozisyonKapat
Belirtilen sembol üzerindeki konumu kapatır.
Fonksiyonun bir ticaret açabileceğine dair hiçbir koşul tanımlanmamıştır. İade kodunu kontrol etme önerisi, yalnızca işlemin kapatılıp kapatılmadığının ek doğrulaması için de kullanılır.
Tekrarlıyorum.
MQL işlevlerini en iyi şekilde kullanmıyor olabileceğimin farkındayım. Ancak, anlaşmaları kapatmak için tasarlanmış tescilli MQL kitaplığından bir işlevin, anlaşmaları kendisi açacağı gerçeği, işlevlerin kabul edilebilir davranışı hakkındaki fikrime uymuyor.Pozisyon kapatma fonksiyonu yoktur, sadece alım veya satım talebi göndermek için fonksiyonlar vardır (ve sonucun ne olacağı - bir pozisyonun açılması veya kapatılması - bilinmemektedir). Sizin durumunuzda, algoritmik bir hata nedeniyle, önceki isteğin yürütülmesi kontrol edilmeden tekrarlanan istekler gönderilir.
Yardımda böyle bir işlev var
MQL5 Referansı / Standart Kitaplık / Ticaret Sınıfları / CTrade / PositionClose
Belirtilen sembol üzerindeki konumu kapatır.
Kullanıcının düşük seviyede işlevin nasıl uygulandığı konusunda endişelenmemesi gerekir. Böyle bir işlev olduğundan, MetaQuotes'un yardımda açıklanmayan standart dışı davranışa sahip olmayacağını garanti ettiğine inanıyorum.
MQL5 Standard Library, MQL5 dilinde yazılmıştır ve son kullanıcılar için programların (göstergeler, komut dosyaları, Uzman Danışmanlar) yazılmasını kolaylaştırmak üzere tasarlanmıştır. Kitaplık, çoğu dahili MQL5 işlevine kolay erişim sağlar.