Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 64
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
1. Şunu söyleyebilirim: Başka birinin kodunu çok dikkatli kullanmalısınız. Çünkü bir başkasının kodu aynı zamanda bir başkasının hatasıdır.
2. Burada ( https://www.mql5.com/ru/forum/6343/page64#comment_357008 ) Değişkenleri kullanmadan önce doğru şekilde sıfırlamayı denemenizi önerdim. Ancak kodunuzda bu öneri henüz uygulanmadı. Ayrıca, kodda bu tür yapılar vardır:
Görüyorsunuz, bu yapıda istek ve sonuç değişkenleri kullanımdan önce değil, kullanımdan sonra sıfırlanıyor. Ayrıca, bu yerel değişkenleri sıfırladıktan sonra, fonksiyon işini durdurur, yani böyle bir sıfırlamanın kendisi anlamsızdır. Başka bir deyişle, böyle bir yapı, MqlTradeRequest ve MqlTradeResult türlerinin değişkenlerinin nasıl sıfırlanmayacağının açık bir örneğidir. Bu nedenle, dilerseniz, sonuçta değişkenleri doğru bir şekilde sıfırlamayı deneyin. Bir şey işe yaramazsa, tam olarak neyin "işe yaramadığını" ayrıntılı olarak açıklayın.
3. Standart Kitaplıkta " MQL5 Referans / Standart Kitaplık / Ticaret Sınıfları / CTrade" ticaret sınıfı vardır. Nasıl uygulamaya koyacağınızı bulmaya çalışın. Dile dalmanın ilk aşamasında, bu sınıf oldukça yeterli olabilir. Örneğin, bu sınıf şu metoda sahiptir: " MQL5 Reference / Standard Library / Trade Classes / 2 CTrade / PositionModify". Bu şekilde uygulanır:
'ClearStructures();' satırını içerir. sadece kullanmadan önce m_request değişkenini sıfırlar.
yedelkin,
Çok teşekkürler :)
Baktım ve hatamı gördüm.
Şu şekilde yazılabilir:
Ama önerilerinizi beğendim:
Her neyse, sonuçlar aynı.Bekle, pozisyon bulamaz, bu görevin acısını çekeceğim.
Teşekkürler.
yedelkin,
Yeterince cevap verdiğin için sana yazıyorum.
İki kaynak - MT4 ve MT5.
Neden MT5'te çalışmıyor - bunlar aynı.
Ne yazık ki, MT4'ü hiç anlamıyorum. Bir göz atacağım ve bir şey yakalayabilirsem yayınlayacağım.
Ek. Genel olarak, piyasanın açılmasını beklersiniz ve tam olarak neyin işe yaraması gerektiğini, ancak neyin işe yaramadığını yazarsınız.
Ne yazık ki, MT4'ü hiç anlamıyorum. Bir göz atacağım ve bir şey yakalayabilirsem yayınlayacağım.
Ek. Genel olarak, piyasanın açılmasını beklersiniz ve tam olarak neyin işe yaradığını, ancak neyin işe yaramadığını yazarsınız.
Yani UTB'yi kendime ve gerekirse kime yapıyorum.
İşte yorumlar:
Değişiklik için pip göstergesi sıfırdan büyükse, iki dil için (MT4 ve MT5):
Bir pipsi (Teklif - pip) daha fazla açık pozisyon varsa:
Eğer stop = 0 veya Teklif - pip dal takip >= açık pozisyondan + pip tanımından:değişiklik:
Bu kadar.
Değişiklik için ayrı bir işlev yapmak istiyorum.
Ve daha ayrıntılı olarak? Uzman Danışmanınız zaten MFI göstergesini kullanıyor ve şimdi ikinci gösterge olan MA göstergesini kullanmanız mı gerekiyor? Yoksa EA henüz göstergeleri hiç kullanmıyor mu ve MA göstergesini kullanmak için buna ihtiyacınız var mı?
EA, MFI kullanıyorsa, kodunda bu göstergenin ele alındığı bir satır bulunmalıdır: " MQL5 Referans / Teknik Göstergeler / iMFI". Buna göre, hareketli ortalama göstergesinin tutacağının elde edilmesi burada açıklanmaktadır: " MQL5 Referans / Teknik Göstergeler / iMA".
Ayrıca " MQL5'te bir göstergeye dayalı gösterge " makalesini okumaya çalışın.
1. Ne yazık ki, tam olarak neyin "işe yaramadığını" belirtmediniz. Onlar. Programın mantığını (nasıl çalışması gerektiğini) özetlediniz, ancak programın mantığının nerede ihlal edildiğini ve bu ihlallerin tam olarak ne ifade edildiğini belirtmediniz. Sorunun ayrıntılı bir açıklaması olmadan, yalnızca kod hakkında yorum yapmak kalır.
2. bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit) işlevi aşağıdaki satırları içerir:
MqlTradeResult yapısının açıklamasına bakarsanız, anlaşma alanının aşağıdaki gibi tanımlandığını göreceksiniz:
anlaştık mı
Tamamlanmışsa, anlaşma bileti. Bir ticaret işlemi sırasında rapor edildi TRADE_ACTION_DEAL
değişiklik başarılı olsa bile her zaman çalışır ve aynı zamanda bazı hatalar hakkında bir mesaj yazdırır.
2. Bir önceki paragraftaki satırlara bakıyoruz 2. Orada son hatanın kodunu döndürmek için tasarlanmış GetLastError () işlevini kullanıyorsunuz. Ancak hata kodunu içeren değişkeni kullanmadan önce kesinlikle resetlemezsiniz, bu nedenle modifikasyon başarılı olsa bile, pozisyon değiştirme talebi gönderilmeden çok önce oluşmuş olabilecek bir hatayı yazdırırsınız. Bunun gibi bir şey olmalı:
3. Şu satırlara bakın:
Diyelim ki bir sonraki tikte NormalizeDouble (Bid - MStop, 4 ) == SL koşulu sizin için çalıştı. Bu durumda SL==1.11110 olduğunu varsayalım. Ama sonra ModifyPosition( Symbol (), 1.11110 ,TP). Onlar. böyle bir değişiklikle, önceden belirlenmiş seviyeler belirtilecektir.
Ve bir sonraki tikte NormalizeDouble (Bid - MStop, 4 ) == SL eşitliği tekrar çalışırsa ne olur? :) Özellikle (a) normalleştirmenin dört hane ile gerçekleştirildiğini ve olası beş haneli kotasyonların varlığını dikkate alırsanız, (b) alım satım istekleri sunucuda biraz gecikmeli olarak gerçekleştirilebilir.
4. SYMBOL_TRADE_STOPS_LEVEL gibi bir sembol özelliği de vardır. Ancak kodunuzda bu seviye kontrolü yok. Yani, bir Buy pozisyonu için yeni stop loss adayı SL_new olarak belirlenmişse, if(Bid-STOPS_LEVEL>SL_new) gibi bir koşulu kontrol etmek gereksiz olmayacaktır.
Evet ve genel olarak, gerçek sayıları karşılaştırmak için El Kitabına bakmaya çalışın. Hatırladığım kadarıyla, iki gerçek sayının bu şekilde karşılaştırılması kategorik olarak önerilmez: if( double_1 == double_2 ).
Yedelkin ,
Çok teşekkür ederim Reshetov da hatanın nerede olduğunu gösterdi.
İşte işlevin kendisi:
Ve vize işlevinin kendisinin nasıl yapılması gerektiği aşağıda açıklanmıştır:
Şu anda her şey iyi çalışıyor.
Teşekkürler.