[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 269
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Teşekkürler, soruna programlı bir çözüm olduğunu gösteren bir bağlantı var ama ne yapacağımı bilmiyorum. Bunun nedeni nedir ve bu sorunu nasıl çözebilirim? EA neden bir ay boyunca iyi çalıştı ve şimdi sorunlu? Hata koddaysa? Soruların cevaplarını yüklüyorsa, dalın yeni başlayanlar için olmadığı ortaya çıkıyor. Üzgünüm.
Başladıktan hemen sonra Uzman Danışmanıma aşağıdakileri yazdım:
Deneyin, bazılarını da faydalı bulabilirsiniz.
1. Tamam. int start() bildirildi. Her zaman null döndürdüm. Kodlarda return(-1) ve hatta return(-2) komutunu gördüm. Bu kod nasıl seçilir?
2. Doğal bir soru ortaya çıkıyor, bir Uzman Danışmanın/göstergenin/komut dosyasının start() öğesini int() türünden değil de isteğe bağlı başka bir türde ve ardından terminale neyin döndürülmesi gerektiğini bildirmek mümkün mü? ? Başka bir deyişle, terminal, return() tarafından döndürülen değerle ne yapar?
1. Sıradan bir işlevin ne döndürmesi gerektiğine nasıl karar verirsiniz?
2. Normal bir işlev gibi herhangi bir türü kullanabilirsiniz. Terminal, döndürülen değerlerle hiçbir şey yapmaz. Onları görmezden geliyor.
Özel Özellikler
1. Normal bir fonksiyonun ne döndürmesi gerektiğine nasıl karar verirsiniz?
2. Normal bir işlev gibi herhangi bir türü kullanabilirsiniz. Terminal, döndürülen değerlerle hiçbir şey yapmaz. Onları görmezden geliyor.
1. Normal bir fonksiyonun tam olarak ne döndürmesi gerektiğine karar vermek için ana kodun neden böyle bir değere ihtiyacı olduğunu bilmem gerekiyor. Örneğin bir sinyal varken alış emri açma kararı vermeniz gerekiyorsa zaten açık olan alış emirlerinin sayısını döndürecek bir fonksiyon yazacağım. Kaç tane olduğuna bağlı olarak, kod, koda gömülü mantığı izleyerek bir karar verecektir. Terminalde hangi dönüş kodu işleme mantığının iç içe olduğunu bilmiyorum. Bugün semafor oluşturma ile ilgili bir makaleye bakıyordum ve bir dönüş koduna (-2) rastladım. Şaşırdım, burada bir soru sordum. Sadece ve her şey. ( https://www.mql5.com/en/articles/1412 - yazı burada).
2. Terminal, dönüş değerlerini yok sayar. Kesinlikle? Eğer öyleyse, o zaman yine meşru bir soru ortaya çıkıyor, neden bir danışman/gösterge/komut dosyası oluştururken, geliştirici tam olarak şablonun içine int koydu, çünkü oraya void koymak daha mantıklı olurdu - o zaman terminalin görmezden gelmesi gerekmeyecekti. herhangi bir şey - daha sonra 1 işlemci çevrim süresi kazanır mıyız? Belki de int init (), int deinit () ve int start () işlevlerinden dönüşte neyin döndürüleceği konusunda bir mantık vardır? Benim düşünceme göre, Roche bir yerde bunu birine zaten açıkladı - ne zaman sıfıra dönmeniz gerektiğini ve ne zaman (-1) gerektiğinin bir açıklaması olduğunu hatırlıyorum. Aradığım açıklama buydu. Maalesef bulamadım...
not
dönüş (-2) makalenin yazarı kendi amaçları için kullanır. Ancak, bazen start() işlevinin sıfırdan farklı bir dönüş koduyla bittiği de bir gerçektir. Ve bu sadece bir kişi tarafından yapılmaz. Benim anlamak istediğim mantık bu.
Özel Özellikler
Metinde öyle görünüyor
Önceden tanımlanmış fonksiyonların parametreleri olabilir. Ancak bu fonksiyonlar istemci terminali tarafından çağrıldığında dışarıdan herhangi bir parametre geçilmeyecek ve varsayılan değerler kullanılacaktır.
biz fonksiyona gelen parametrelerden bahsediyoruz, fonksiyon tarafından döndürülen parametrelerden değil.
Bu sipariş sayacı. Örneğin, belirli bir döviz çifti için ve piyasada belirli bir sihirli sayı ile satın alma emirleri olup olmadığını kodda öğrenmeniz gerekir. Örneğin varsa, örneğin başka bir satın alma siparişi açmak imkansızdır. Yani, bir karar vermek için sipariş sayacına ihtiyaç vardır.
Başladıktan hemen sonra Uzman Danışmanıma aşağıdakileri yazdım:
Deneyin, bazılarını da faydalı bulabilirsiniz.
Bu satırları nasıl anlayabilirsiniz:
iade sipariş hacmi
if(satın alır>0) iade(satın alır);
başka iade(-satış);
} ?
Bir komut dosyası yazıyoruz:
çizelgeye atın ve günlüğe bakın:
2012.07.20 12:04:11 111 NZDUSD,M15: removed
2012.07.20 12:04:11 111 NZDUSD,M15: uninit reason 0
2012.07.20 12:04:11 111 NZDUSD,M15: Попытка ретурна 136
2012.07.20 12:04:11 111 NZDUSD,M15: loaded successfully
(burada 111, betiğin adıdır). "uninit Reason 0" satırını görüyoruz - görünüşe göre terminal sıfırı bekliyordu!
(-1) ile aynı şeyi denemek:
Sonuç aynı:
2012.07.20 12:08:19 111 NZDUSD,M15: kaldırıldı
2012.07.20 12:08:19 111 NZDUSD,M15: uninit neden 0
2012.07.20 12:08:19 111 NZDUSD,M15: İade girişimi -1
2012.07.20 12:08:19 111 NZDUSD,M15: başarıyla yüklendi
Görünüşe göre terminal, sıfırın döndürülüp döndürülmediğine kayıtsız değil.
not
Aslında internette bu cevaba rastladım:
0 döndür - program işini hatasız bitirdi
dönüş 1 - veya daha yüksek bir sayı, program çalışmasını bir hatayla sonlandırdı ve daha sonraki işlemler için bir hata kodu döndürür.
Herhangi bir işletim sisteminde, herhangi bir program her zaman bir hata kodu verir.
Tek sorun, dönüşümüzün kodu işletim sistemine değil, terminale döndürmesidir. Bu soruyu açık bırakır.
Bir komut dosyası yazıyoruz:
çizelgeye atın ve günlüğe bakın:
(burada 111, betiğin adıdır). "uninit Reason 0" satırını görüyoruz - görünüşe göre terminal sıfırı bekliyordu!
Aynısını (-1) ile deneyelim:
Sonuç aynı:
Terminali görmek, sıfırın döndürülüp döndürülmemesine kayıtsız değildir.uninit nedeni, EA sonlandırma nedeni kodudur
https://docs.mql4.com/en/constants/uninit