"MQL5'e Giriş: Basit Uzman Danışman (EA) ve Özel Gösterge nasıl yazılır" makalesi için tartışma - sayfa 2
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
Gösterge tamponları için SetIndexBuffer yazıyor:
Uzman Danışmanlar için benzer olmalıdır, kontrol edin
Henüz bir benzetme yok. Bu kodu kontrol ederken
Dönüş operatörünün karşısına bir kesme noktası koydum. Hata ayıklayıcı şu sonucu üretiyor: high "dynamic array[8563], S". S'nin "Seri" anlamına geldiğini anlıyorum.
Benzetme henüz çalışmıyor. Bu kodu kontrol ederken
Dönüş operatörünün karşısına bir kesme noktası koydum. Hata ayıklayıcı şu sonucu üretiyor: high "dynamic array[8563], S". S'nin "Seri" anlamına geldiğini anlıyorum.
Peki neden çalışmıyor? Şüpheniz varsa, ArrayGetAsSeries işlevi ile seriler için açık bir kontrol ayarlayın:
Sonuç
Neden çalışmıyor? Şüpheniz varsa, ArrayGetAsSeries işleviyle serilik için açık bir kontrol ayarlayın:
Size neden bahsettiğimi hatırlatayım. Dizilerin her zaman yalnızca kopyalandıktan sonra indekslenip indekslenmeyeceğini soruyordum. SetIndexBuffer fonksiyon notuna atıfta bulundunuz ve EA'lar için de aynı olması gerektiğini söylediniz. Bu SetIndexBuffer fonksiyon notu, "bağlandıktan sonra, dinamik dizi tamponu[], bağlı dizi zaman dizilerinde olduğu gibi indekslenecek şekilde önceden ayarlanmış olsa bile, normal dizilerde olduğu gibi indekslenecektir" anlamına gelir.
Buna göre, EA'lar için CopyTime, CopyHigh ve CopyLow fonksiyonlarını kullandıktan sonra, alıcı dizilerin de normal dizilerde olduğu gibi indekslenmesi gerekeceği şeklinde bir benzetme gördüm. Bu benzetmeyi test etmek için, ArraySetAsSeries fonksiyonunu CopyHigh fonksiyonundan önce OnInit() fonksiyonuna yerleştirdim. Ancak benim örneğim ve sizin önerdiğiniz ArrayGetAsSeries fonksiyonunun serileştirme için yaptığı açık kontrol, CopyHigh fonksiyonunu kullandıktan sonra, high[] alıcı dizisinin önceden ayarlanmış indekslemesinin ( zaman serilerinde olduğu gibi) değişmediğini gösteriyor. Bu da, bahsettiğiniz SetIndexBuffer fonksiyonu ile benzerliğin henüz gözlemlenmediğini gösterir, çünkü aksi takdirde açık serilik kontrolü IsSeries=false olduğunu göstermeliydi.
Yedelkin:
Bu benzetmeyi test etmek için, ArraySetAsSeries işlevini OnInit() işlevinde CopyHigh işlevinden önce yerleştirdim. Ancak benim örneğim ve önerdiğiniz ArrayGetAsSeries işlevinin serileştirme için açık kontrolü, CopyHigh işlevini kullandıktan sonra, alıcı high[] dizisinin önceden ayarlanmış dizinlemesinin ( zaman serilerinde olduğu gibi) değişmediğini gösteriyor.
Aslında, OnInit() veya başka bir işlevde global dizi için serileştirme ayarlandıktan sonra, bu serileştirmenin başka hiçbir yerde değişmeyeceğini kastetmiştim. Tek istisna SetIndexBuffer() fonksiyonu ile ilgilidir.
Bu konuda bir anlaşmaya vardığımıza inanıyorum ve bunu bitmiş olarak kabul edebiliriz.
Evet, soru yanıtlandı. Açıklama için teşekkür ederiz!
Birkaç sorum var.
1.
" If... işlecinde, OnTick işlevinin yürütülmesini sonlandırmak için return işleci kullanılır." denilmektedir.
OnTick mi? if (....) {...}'den değil mi?
2.
MQL4'te ters arama önerilmiştir.
Hangisi daha iyi?3. Uzman Danışmanı ve göstergeyi indirdim ( Opera 10.54 moderatörleri için, ekli dosyaların indirilmesiyle ilgili sorunlar). Hepsi derlendi. M5'teki test cihazında geçen ay seçilmeye başlandı.
Günlük
2010.05.15 13:16:02 Çekirdek 1 Bağlantı Kesildi
2010.05.15 13:16:01 Core 1 Günlük dosyası "D:\MetaTrader 5\Tester\Agent-127.0.0.1-3000\logs\20100515.log" yazıldı
2010.05.15 13:16:01 Core 1 EURUSD,M5: 1431016 ms içinde 553908 tik (2580 çubuk) oluşturuldu (geçmişteki toplam çubuk 100352)
2010.05.15 13:16:01 Core 1 OnTester sonucu 0
2010.05.15 12:52:13 Core 1 EURUSD,Günlük: geçmiş 2009.01.02 00:00'dan başlar
2010.05.15 12:52:13 Core 1 EURUSD,Daily: geçmiş önbelleği tahmini 355 çubuk için ayrıldı
2010.05.15 12:52:13 Core 1 EURUSD: 2009.01.02 06:01'den 2010.05.03 00:00'a kadar 484483 M1 başlangıç verisi kaydı içerir
2010.05.15 12:52:10 Core 1 Lots=0.100000
2010.05.15 12:52:10 Çekirdek 1 MAper=240
2010.05.15 12:52:10 Core 1 EndHour=19
2010.05.15 12:52:10 Çekirdek 1 StartHour=7
2010.05.15 12:52:10 Core 1 EURUSD,M5: Experts\expert.ex5'in 2010.05.01 00:00 ile 2010.05.14 00:00 arasındaki testi girdilerle başladı:
Yürütülmesi çok uzun sürdü ve tek bir işlem açmadı. Otomatik ticarete izin verilir. Günlükte mesaj yok ((( (düzenleme muhtemelen onları nasıl bulacağımı henüz bilmiyorum). Gösterge ve Uzman Danışman olması gereken yerde bulunur. Windows XP, MT (yapı 274).
4. Hata ayıklama modunu denedim, çalışmıyor. Muhtemelen Cumartesi gününden dolayı. Tırnak işareti yok. Durma noktasını makalede olduğu gibi yaptım. Eğer haklıysam çok yazık, sadece iş günlerinde hata ayıklama yapabiliyorsunuz. Hata ayıklama için kendi dosyanızı gerekli verilerle ve (veya) bazı tipik verilerle (bir günlük tarihin bir parçası olsun) yükleyebilmek güzel olurdu, hata ayıklama için yeterli olacaktır.
5. Birisi Kopyalama işlevini araştırdıysa... lütfen eksik çubuklar varsa nasıl çalıştığı hakkında bilgi paylaşın. Yine de bir makale sipariş etmek muhtemelen daha iyi olacaktır.
Birkaç sorum var.
1. " If... işlecinde, OnTick işlevinin yürütülmesini sonlandırmak için return işleci kullanılır." denilmektedir.
OnTick mi? if (....) {...}'den değil mi?
return işlecinin açıklamasından return:
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается вызываемой функции. Выражение может содержать оператор присваивания.Bu örnekteki return deyimi için geçerli fonksiyon OnTick() fonksiyonudur.
4. Hata ayıklama modunu denedim, gitmiyor. Muhtemelen Cumartesi gününden dolayı. Tırnak işareti yok. Durma noktasını makalede olduğu gibi yaptım. Eğer haklıysam çok yazık, sadece iş günlerinde hata ayıklama yapabiliyorsunuz. Hata ayıklama için kendi dosyanızı gerekli verilerle ve (veya) bazı tipik verilerle (bir günlük bir tarih parçası olsun) yükleyebilmek güzel olurdu, hata ayıklama için yeterli olacaktır.
Sitede hata ayıklama ile ilgili benzer sorular daha önce tartışılmıştı. Eğer ilgileniyorsanız, aramayı kullanın ve "Hata Ayıklama" kelimesini aratın.
Otomatik güncellemeyi yükledikten sonra (derleme 275), derleyici aşağıdaki türden koşulların kontrol edildiği satırlarda uyarılar oluşturmaya başladı
Uyarılar aynı türdendir: Sorular: Derleyicinin doğru çalışması, belirtilen durumda bu uyarıların ortaya çıkmasını gerektirir mi? Hangi "dönüşümden" bahsediyoruz?Otomatik güncellemeyi (derleme 275) yükledikten sonra derleyici, türün koşullarının kontrol edildiği satırlarda uyarılar oluşturmaya başladı
Uyarılar aynı türdendir: Sorular: Derleyicinin doğru çalışması, belirtilen durumda bu uyarıların ortaya çıkmasını gerektirir mi? Hangi "dönüşümden" bahsediyoruz?Uyarı, programcıların dikkatini çekmek ve kodlarını iki kez kontrol etmelerini sağlamak için eklenmiştir.
Fonksiyon sonucunu açıkça bir numaralandırıcıya veya numaralandırıcıyı int'e dönüştürerek uyarılardan kurtulabilirsiniz.
Birkaç sorum var.
1. " If... işlecinde, OnTick işlevinin yürütülmesini sonlandırmak için return işleci kullanılır." denilmektedir.
OnTick? ve if (....) {...}'den değil mi?
Eğer operatördeki koşullardan en az biri
koşullardan en az biri yerine getirilirse, yani dizilerden en az biri tamamen kopyalanamazsa (yeterli geçmiş veri yoksa veya bir hata meydana gelirse) - OnTick işlevi sonlandırılır, çünkü bu veriler olmadan daha fazla hesaplama yapmak mümkün değildir.
2. MQL4' te ters numaralandırma önerilmiştir.
Hangisi daha iyi?Varyantlar
и
eşdeğerdir, ancak ilk varyant metin biçiminde daha kısadır, bu nedenle kullanılmıştır.
3. Uzman Danışmanı ve göstergeyi indirdim (moderatörler için Opera 10.54 ekli dosyaları indirirken sorun yaşıyor). Hepsi derlendi. Geçen ayı seçerek M5'teki test cihazında çalıştırdım.
Yürütülmesi çok uzun zaman aldı ve tek bir işlem açmadı. Otomatik ticarete izin verilir. Günlükte mesaj yok ((( (Muhtemelen onları nasıl bulacağımı henüz bilmiyorum). Gösterge ve Uzman Danışman olması gereken yerde bulunur. Windows XP, MT (yapı 274).
4. Hata ayıklama modunu denedim, gitmiyor. Muhtemelen Cumartesi gününden dolayı. Tırnak işareti yok. Durma noktasını makalede olduğu gibi yaptım. Eğer haklıysam çok yazık, sadece iş günlerinde hata ayıklama yapabiliyorsunuz. Hata ayıklama için kendi dosyanızı gerekli verilerle ve (veya) bazı tipik verilerle (bir günlük tarihin bir parçası olsun) yükleyebilmek güzel olurdu, hata ayıklama için yeterli olacaktır.
5. Birisi Kopyalama işlevini araştırdıysa... lütfen eksik çubuklar varsa nasıl çalıştığı hakkında bilgi paylaşın. Yine de bir makale sipariş etmek muhtemelen daha iyi olacaktır.
Dürüst olmak gerekirse, test cihazım da pek iyi çalışmıyor: test, MQL4'te benzer bir EA'yı test etmekten çok daha uzun sürüyor; işlemler yalnızca test aralığının ilk bir veya iki gününde açılır (bu, farklı Uzman Danışmanları test ederken gözlemlenir).
OnTick ve OnCalculate işlevleri yeni bir teklif alındığında başlatılır, bu nedenle hata ayıklama için teklif almak gerekir (hafta sonu çalışmaz). Aksi takdirde, hata ayıklayıcı normal şekilde çalışır (deneyin, bir şeye ihtiyacınız olursa bana sorun).
Diziler-zaman serileri ile ilgili olarak: - dizilerin yönü her iki yönde de herhangi bir zamanda değiştirilebilir, dizilerin bellekteki konumu değişmez, sadece indeksleme değişir ( 0,1,2,...,sondan sona,... ,2,1,0).