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
eğer (hata==146)
{
while (IsTradeContextBusy())
{
(IsTradeAllowed()) bozulursa;
başka
uyku (1000*1.1);
}}
Bana öyle geliyor ki bu daha hızlı bir çözüm, ben böyle çalışıyorum. Yorum.
Teşekkür ederim.
Bu seçenek hakkında ne düşünüyorsunuz:
Bana öyle geliyor ki bu daha hızlı bir çözüm, ben böyle çalışıyorum. Yorum.
Teşekkür ederim.
Normal olarak alacağım. Anlayışla. Duraklama daha kısa, daha hızlı çalışıyor... Ama sürümünüzde haksız bir fazlalık var.
IsTradeContextBusy işlevi, ticaret akışı meşgul bayrağını döndürür. 195. yapıdan önce bu özellik hiç yoktu. Ve Expert Advisor'ın ticaret yapmasına izin verildiğine ve ticaret akışının serbest olduğuna dair bir işaret döndüren IsTradeAllowed işlevini kullandık.
Expert Advisor'ın özellikleri iletişim kutusundaki (F7 tuşu) "Uzman Danışmanın işlem yapmasına izin ver" onay kutusunu işaretleyerek Expert Advisor'ın işlem yapmasına izin verilir.
Hata 146 (Ticari iş parçacığı meşgul), EA'nın ticaret yapmasına izin vermekle hiçbir ilgisi yoktur. Bu nedenle, sadece ticaret akışı ile ilgili kısımda IsTradeAllowed fonksiyonunun özelliklerini ele alalım.
Böylece ticaret akışı serbesttir, IsTradeAllowed işlevi True değerini döndürür. İşlem akışı meşgul, IsTradeAllowed işlevi False değerini döndürür. Şimdi IsTradeContextBusy işlevi tarafından döndürülen değerleri göz önünde bulundurun. Ticaret akışı ücretsizdir, IsTradeContextBusy işlevi False değerini döndürür. Ticaret akışı meşgul, IsTradeContextBusy işlevi True değerini döndürür. Aynı ticaret akışı durumları için IsTradeAllowed ve IsTradeContextBusy fonksiyonlarının değerlerinin zıt olduğunu görüyoruz. Ayrıca, ticaret akışının durumuna ilişkin bu işlevler birbirini tamamlamaz, birbirinin kopyasıdır. Bu nedenle, bunlardan biri hariç tutulabilir. Ne? IsTradeAllowed işlevi, daha önce de belirttiğim gibi, ticaret akışı durum bayrağına ek olarak, bu durumda ihtiyacımız olmayan, yani 146 numaralı işleme hatasında (Ticaret akışı meşgul) EA için ticaret izni bayrağını da döndürür. . Bu nedenle, yalnızca bir IsTradeContextBusy işlevi kullanmak gerekli ve yeterli olacaktır. Yukarıdaki kısaltmaları yaparsanız, kodunuz benimkine indirgenecektir:
tek fark duraklama boyutudur. Ancak bu zaten bir zevk meselesi, kişisel tercihler, ticaret tarzı ve diğer şeyler. 0.1 saniyelik bir duraklama ayarlayabilirsiniz. İlkesiz ... Ben sadece 11 saniyeyi tercih ederim.SetOrder işlevinde iki hata var:
Dikkat! Çevrimiçi ticaret için SetOrder işlevine sahip gönderi düzeltildi. İşlev biraz daha uzun. Tam olarak gönderiye dahil edilmedi, bu yüzden karavana çıkarılması gerekiyordu.
Bu yazımda SetOrder fonksiyonunun nasıl çalıştığını anlatan ana noktaları vermeye karar verdim. Ben kendim emirlerle çalışmıyorum, yani burada yabancı topraklardayım. Belki SetOrder işlevini anlayan biri iyileştirmeler önerir veya hatalar bulur.
1. Kodun ilk satırlarında yerel değişkenlerin bildirilmesi ve bazılarının başlatılması. Örneğin, lsComm, Uzman Danışmanın adını ve GetNameTF işlevi tarafından döndürülen zaman çerçevesinin adını içerir. Bu arada, GetNameOP , GetNameTF , Message ve diğer küçük işlevler gibi işlevler üzerinde durmayacağım, yalnızca birinin onlar hakkında soruları varsa.
2. Alınan parametrelerin kontrol edilmesi. sy boşsa, mevcut enstrümanın adıyla başlatılır. İşlem türüne göre, grafikteki simgenin rengi için bir değişken başlatılır. Sıfır olmayan sipariş sona erme süresi mevcut zamandan daha az ise, sıfırlanır.
3. Sayısı global NumberOfTry değişkeninin değeri ile sınırlanan alım satım girişimleri döngüsünün gövdesi. Sırada SetOrder fonksiyonunun ana döngüsü içinde gerçekleştirilen işlemler yer almaktadır.
4. SetOrder işlevi test cihazında yürütülmezse, çalışmasını kesmek mümkündür. Hemen, ticaret akışının serbest bırakılması için bir bekleme döngüsü yürütülür. Piyasa ortamı değişkenleri güncellenir ve mevcut saat sabitlenir.
5. Ticaret sunucusuna bir istek gönderme. Bilet pozitifse, SetOrder işlevi sona erer.
6. Negatif bilet ile yürütme hataları işlenir .
7. 128 (Anlaşma yürütme zaman aşımı süresi doldu), 142 (Sipariş kuyruğa alındı) ve 143 (Sipariş, bayi tarafından yürütülmek üzere kabul edildi) hataları durumunda, 66 saniye boyunca bir duraklama gerçekleştirilir. Bir duraklamadan sonra ExistOrders işlevi kullanılarak (biraz sonra üzerinde duracağız), siparişin sunucuya yapılan istek ile içinde bulunulan an arasındaki zaman aralığında verilip verilmediği kontrol edilir. Sıra ayarlanmışsa, fonksiyondan çıkın.
8. Puan boyutu ve Alış ve Satış fiyatları yerel değişkenlerde saklanır.
9. Hata 130 (Yanlış duraklar) ile, mümkünse, emir verme, durdurma ve alma fiyat seviyeleri ayarlanır.
10. Günlükte, daha sonra sorunu çözmenize veya bir hata bulmanıza yardımcı olabilecek bilgiler görüntülenir.
11. Ve sonunda diğer hatalar işlenir. Bazıları uzun bir duraklama (5 dakika) üzerine tökezler, diğerleri danışmanın çalışmasını engeller, diğerleri ticaret girişimlerine devam etmelerine izin verir, vb.
Her şey! Açıklamanın sonu!
ExistOrders() işlevi.
Sipariş varlığı bayrağını döndürür. Sıralamanın yapılıp yapılmadığı sorusuna cevap verecektir. Bu işlevi kullanarak, herhangi bir siparişin yanı sıra daha spesifik bir sipariş talep edebilirsiniz. İstek filtresi, işlev parametreleri kullanılarak yapılandırılır:
ExistOrders() işlevini kullanma örnekleri.
1. Herhangi bir sipariş olup olmadığını kontrol edin
2. Mevcut tablonun enstrümanı için herhangi bir siparişin olup olmadığını kontrol edin.
3. Herhangi bir enstrüman için BuyLimit siparişini kontrol edin
4. EURUSD üzerinde sihirli 123456 ile bir SellStop siparişini kontrol edin
5. Kurulum süresi en geç 2 saat olan herhangi bir sipariş olup olmadığını kontrol edin.
Fragmanda ExistOrders işlevini test etmek için bir komut dosyası var. Komut dosyasındaki ilk 4 örnek yorumlanmıştır.Dikkat! 12.03.2008 07:24 tarihli bir gönderide SetOrder.mq4 eklentisini değiştirdim.