Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret 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
Konum döngüsünde sembol ve sihir ile filtreye dikkat edin. Filtre yoksa, ancak tüm sembollerdeki tüm açık pozisyonları takip ediyorsanız, bu kötüdür.
Eh, ilk bakışta, her şey normal görünüyor.
Konum döngüsünde sembol ve sihir ile filtreye dikkat edin. Filtre yoksa, ancak tüm sembollerdeki tüm açık pozisyonları takip ediyorsanız, bu kötüdür.
Eh, ilk bakışta, her şey yolunda görünüyor.
Çok teşekkür ederim Andrey! Magic hakkında her şey açıktır, çünkü bir sembolde, aslında, aynı anda birkaç pozisyon açılabilir, ancak bir karşı soru ortaya çıktı. EA, mevcut sembole açıkça işaret edilmemişse, tüm semboller için aynı anda açık pozisyonlardan geçecek mi? Ve bu, örneğin EURUSD gibi belirli bir döviz çiftine ayarlanmış olmasına rağmen mi? Dürüst olmak gerekirse, bu anı pek anlamıyorum.
Saygılarımla, Vladimir.
Çok teşekkür ederim Andrey! Magic hakkında her şey açıktır, çünkü bir sembolde, aslında, aynı anda birkaç pozisyon açılabilir, ancak bir karşı soru ortaya çıktı. EA, mevcut sembole açıkça işaret edilmemişse, tüm semboller için aynı anda açık pozisyonlardan geçecek mi? Ve bu, örneğin EURUSD gibi belirli bir döviz çiftine ayarlanmış olmasına rağmen mi? Dürüst olmak gerekirse, bu anı pek anlamıyorum.
Saygılarımla, Vladimir.
Bu nedenle, okuduğum literatüre dayanarak, izleyen durdurma işlevine sahip bir Uzman Danışman oluşturmak için küçük bir algoritma yazdım:
Lütfen algoritmaya bakın ve hangi anların kaçırıldığını söyleyin.
Saygılarımla, Vladimir.
İyi teori, şimdi pratik yapın. Bunu yapabilirmisin?
İyi teori, şimdi pratik yapın. Bunu yapabilirmisin?
Deneyeceğim. Ancak bunun henüz sahip olmadığım tamamen farklı bir bilgi düzeyi gerektirdiğini siz kendiniz anlıyorsunuz.
Saygılarımla, Vladimir.
Evet Alexey, bu kodu zaten görmüştüm. Include dosyası olarak yapılmıştır. Dürüst olmak gerekirse, birkaç kez incelememe rağmen sembol hakkında hiçbir şey bulamadım. Belki bir şeyleri özlüyorum ya da sadece kötü görünüyorum.
Saygılarımla, Vladimir.
Şimdilik, fonksiyonlar hakkında devam edelim.
Daha önce de yazdığım gibi, fonksiyonlar her yerdeler, sevilmeleri ve yazabilmeleri gerekiyor. Fonksiyonlar, küresel sorunları çözmede bizim küçük savaşçılarımızdır. Orduda general olsaydık, ne tür savaşçıları kontrol etmek isterdik? İşte örnek bir liste:
Ama konuyu dağıtıyoruz, tekrar fonksiyonlara geçelim.
Bir işlev genel olarak çok fazla görevi çözüyorsa, benzetmeyi takip ederek, bir şeyler ters giderse tüm girişimi yok edebilecek çok akıllı bir savaşçıdır. Böyle bir fonksiyonun ne işe yaradığını sorarsanız cevap uzun olabilir. Bu işlevin sonucu aniden doğru olmaktan çıkarsa, hataya neyin neden olduğunu bulmak son derece zor olacaktır (çünkü çok sayıda görev, çok sayıda kod, çok sayıda alt prosedür çağrısı ve hatanın tam olarak nerede olduğunu anlamak zor).
İşlev Pazartesi, Çarşamba ve Pazar günleri ve "ruh hali" ne bağlı olarak diğer günlerde doğru sonucu hesaplarsa - böyle bir işleve güvenebilir miyiz? Diyelim ki OrderSend sistem fonksiyonunun sadece Perşembe günleri pozisyon açacağını ve 13 değerinde belirli bir sihirli parametre tanımlandığında yukarıdakilerin hiç de saçma veya fantezi olmadığını düşünün. Bu tür davranışlar bir parmak tıklamasıyla düzenlenebilir, işlevi dış ortamdaki belirli parametrelere bağımlı kılmak yeterlidir.
Bir fonksiyon diyelim:
Dış ortamdan bağımsız olarak her zaman iki değerin toplamını döndürür. Bu, bu işlevi başka bir komut dosyasına veya Uzman Danışmana kopyala-yapıştır yapsak bile, onda da iyi çalışacağı anlamına gelir. Böyle bir işlev bir kez yazılabilir ve daha sonra aptalca kopyalayarak birçok programınızda kullanılabilir. Çalışmasının hiçbir şeye bağlı olmadığını bilerek, sonucuna her zaman güvenebiliriz. Sonuçları çevrelerine bağlı olmayan bu tür işlevlere yan etkisi olmayan işlevler veya saf işlevler denir. Saf işlevler yazmaya çalışırsanız, çok yakında bunlardan oldukça fazla olacaktır. Bu, bir dosyada birleştirilebilecekleri ve yeni projelerinize dahil edilebilecekleri anlamına gelir. Buna kodun yeniden kullanımı denir . İki kere iş yapmıyoruz. Bunun yerine, bildiğimiz ve güvenilirliği bir kereden fazla test edilmiş, önceden yazılmış fonksiyonları kullanıyoruz.
Şimdi anti örneğe bakalım:
Sonuç aynı gibi görünüyor çünkü c her zaman sıfıra eşittir. Yoksa her zaman değil mi? Ama ya birisi bir yerde c'yi değiştirirse? Sonra ne? Ve eğer birisi bir yerde c harici değişkenini kullanıyorsa, ancak kendi amaçları için ve farklı tipte bir c değişkenine sahipse, diyelim ki string? Bu iki işlevin ikisini birden birleştirmek artık mümkün değildir (derleyici aynı ada sahip iki değişken bildirmenize izin vermez). Ortak bağımlılıklarıyla başa çıkmak da zordur. Bununla ne yapılacağı hiç belli değil. Örneğin, bu tür işlevlerin birlikte çalışmasını sağlamak için hala güvenilir ve basit bir yol bilmiyorum.
Başka bir fonksiyon olmasa ve sadece bir fonksiyon harici değişkeni okusa bile, onu başka bir yere kopyalamak o kadar kolay olmaz. Hem bu işlevi hem de bağımlılığını kopyalamanız gerekir. Bu işlevleri paylaşılan bir dosyaya kopyalarsak ne olur? Orada bu fonksiyonlar 50, 100 adet yazılmıştır. Ve her biri kendisi ile birlikte bir grup bağımlı değişkenini kopyalar. İlgili değişkenlerin karışık bir karmaşası ortaya çıkıyor, hangi fonksiyonlarla açık değil. Ve neden tüm bunlar? Hangi sorunları çözüyor? Çoğu durumda onlarsız yapabileceğiniz halde neden gereksiz bağımlılıklar yaratasınız ki?
Fonksiyonların başka bir şaşırtıcı özelliği var. Fonksiyonlar kendi kendini tanımlar. Onlar. diyagram çizmeye gerek yok, sadece iyi isimler seçin ve genel algoritmayı fonksiyonlara ayırın. Bir örnek verelim:
Bu kodun ne işe yaradığını bilmiyorum çünkü fonksiyonlar yazılmamış bile. Ama eğer okursam, büyük ihtimalle, ORDER_TYPE_BUY yönü ile bekleyen ilk <gotcha> emrinin başarılı bir şekilde seçilmesi durumunda iptal edileceği anlamına gelirdi (birinci fonksiyon seçer, ikincisi iptal eder). Kod her onay işaretini çalıştıracağından, bekleyen emirlerin sayısı ne olursa olsun, her biri er ya da geç iptal edilecektir. Ayrıca, bekleyen bir satın alma emri verme girişiminin durdurulacağı anlamına gelir - sipariş hemen kaldırılacaktır. Bu durumda satış emirleri sorunsuz olarak verilecektir.
Sadece iki satır kod ve iki fonksiyon. Ve algoritmanın önemsiz ve en önemlisi güvenilir olduğu ortaya çıktı.
MCL'ye uygulandığı gibi, saf fonksiyonlar hakkında biraz daha söylenmelidir. Bu bir uygulama dili olduğundan, terminalden sağlanan verilere güvenmeden herhangi bir şey yazmak zordur. Sonunda, ana görev şudur: ticaret ortamıyla düzgün bir şekilde etkileşim kurmak. Resmi olarak, herhangi bir ticaret ortamı değişkendir: fiyatlar değişir, emir sayısı, bakiye vb. Bu nedenle, böyle değişken bir ticaret ortamıyla etkileşime giren herhangi bir işlev saf değildir. Çünkü dış ticaret ortamı da sürekli değişen bir tür küresel değişken olarak alınabilir. Ama OrdersTotal() yazdığımızda bu fonksiyonun her zaman aynı değeri döndürmesini beklemiyoruz. Bunun yerine, doğal olarak değişecek olan bekleyen siparişlerin sayısını döndürmesini bekliyoruz. Bu nedenle, MQL ile ilgili olarak, OrdersTotal() gibi harici API fonksiyonlarını çağırsalar bile fonksiyonları temiz ve yeniden kullanılabilir olarak kabul edeceğiz. Bu bizim makul hoşgörümüz olacak.
Fonksiyonlar hakkında devam ederken ...
Vasily, sadece benimle değil, aynı zamanda bu konuyu okuyan veya okuyacak olan acemi programcılarla da paylaştığın paha biçilmez bilgi için çok teşekkür ederim!
Aynı büyük saygıyla Vladimir.
MQL5 programlama dilini öğrenmeye devam ediyorum. Şimdiye kadar, konunun katılımcılarından, Trailing_Stop danışmanının kodunu yazmak için algoritma hakkında ciddi bir yorum olmadı (sembol ve Magic hakkında hatırlıyorum, algoritmaya daha sonra ekleyeceğim!), Girişi oluşturdum danışmanın parametrelerini ve açık pozisyonlar üzerinde yinelemeye başlayan döngünün kodunu yazdı.
Danışmanı başlatırken, bir sorun bulundu - ticaret terminalinin "Uzmanlar" sekmesinde, her işarette , ticaret terminalinin yalnızca bir grafiği olmasına rağmen aynı anda 2 aynı "Döngü başladı" mesajı görüntüleniyor EURUSD döviz çifti ve üzerinde sadece bir pozisyon açık . Üstelik bu mesajların çıkış süresi tamamen aynı.
Gece yarısına kadar savaştı ama kazanamadı. Sorunun ne olduğunu anlayamıyorum.
EA kodu İngilizce yazılmıştır ve kodun yorumları, materyalin özümsenmesini kolaylaştırmak için Rusça'dır. Bu Expert Advisor'da, daha önce söz verdiğim gibi, bir programlama okulunun 1. sınıf öğrencisinin erişebileceği bir sunumda her şeyi açıklamaya çalıştım.
Saygılarımla, Vladimir.
i açık pozisyonların sayısına eşittir, o kadar çok döngü baskı ile olacak
"=" oturum açmayı kaldırmanız gerekiyor açık pozisyon sayısı 0 iken neden döngüden geçmeniz gerekiyor. bu sıfır arama ikinci baskıydı