[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 1085
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
İşlev benim değil - İnternetten aldım ama kullanmadım. Şimdi dikkatlice baktım - orada bir operatör eksik.
Şu şekilde doğru olacaktır:
Yine doğru değil! Fun_New_Bar() her zaman true döndüreceğinden EA her tikte tekrar bip sesi çıkaracaktır. O zaman soru şu ki, Fun_New_Bar () işlevi sürekli olarak doğru dönüyorsa neden gerekli?
Ama işe yaramayacak - programı yanlış yazdınız. Ve hepsi, kendi kodunuzun nasıl çalışacağı hakkında hiçbir fikriniz olmadığı için. Anlayalım. Danışman kuruluş:
Yeni bir onay işareti gelir ve Fun_New_Bar() işlevi çağrılır. Ana programa dönerse, Uyarı açılır. Aksi takdirde EA bir iade ile işini bitirir ve yeni bir tick bekler. Yeni bir kene üzerinde her şey tekrar eder.
Kodun çalışmadığını mı söylüyorsun? Şimdi alt programda neler olduğuna bakalım.
Boole işlevi bildirildi. Bir prosedür değil, bir işlev olduğu için, çağrıldığı ana programa bir şey döndürmesi gerekir. İşlev boolean olduğundan, bir boole değeri döndürmesi gerekir. Ana programa en azından bir şey döndüren satırınız nerede? Yok! Bu, programın başlangıcında, işlevden hiçbir şey döndürülmediğinden, if (Fun_New_Bar()) ifadesinin parantez içinde her zaman yanlış olacağı ve uyarının hiçbir zaman açılmayacağı anlamına gelir.
Daha ileri gidelim. Neden datetime New_Time= 0 ; tam olarak statik mi? Hangi nedenlerle? Bir değişken tanımladınız ve onu hemen sıfıra başlattınız. Bir sonraki tikte aynı şey olacak - değişken tekrar bildirilecek ve tekrar sıfıra sıfırlanacak. Aşağıya bakın if (New_Time!=Time[ 0 ]){ Bu satır, değişkenin değerini geçerli zamana eşitsizlik açısından kontrol eder. Evet, değişken sıfır ve şimdiki zaman sıfır değil. Koşul sağlanır, değişkene o anki zamanın değeri girilir, New_Bar parametresi true olur. İşte bu, fonksiyon ana programa hiçbir şey döndürmeden işini tamamladı. Bir sonraki tikte, yine New_Time, Time[ 0 ]'a eşit olmayacak, yine eşitsizlik kontrolü başarıyla gerçekleştirilecek ve yine sonraki iki işlem gerçekleştirilecek. Kısacası, if (New_Time!=Time[ 0 ]) koşulu test edildiğinde, parantez içindeki ifade her tikte doğru olacaktır. HER ZAMAN. Soru şu ki, eğer her zaman doğruysa, o zaman bu kontrole neden burada ihtiyaç duyuluyor? Sadece kaldırabilir misin? Bu değişkenlerin her ikisi de hiçbir yerde kullanılmıyorsa neden New_Time=Time[ 0 ] ve New_Bar= true atansın. Bu iki görev ne işe yarıyor? Oynamak ister misin? Yoksa düşünemeyecek kadar tembel mi?
Tk bu kodu deneyin. Çalışıyor gibi görünüyor, sadece doğru veya yanlış görün. Bir şeyler yanlışsa, düzeltin:
//--------------------------------------------------------------------
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
return; // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
Alert("Сформировался новый бар"); // Вывод на экран
}
}
//--------------------------------------------------------------------
Tk bu kodu deneyin. Çalışıyor gibi görünüyor, doğru olup olmadığına bakın:
kolyango: Sana doğru kodu göstereceğim. Görmek.
Hayır, bu doğru değil - Bu kodu sizin için harflerle ayrıştırdım. Hiçbir şey anlamadın mı?
Ve bak, düzgün çalışıyor gibi görünüyor! M1 zaman diliminde kontrol edildi:
int start() // Спец. функция start
{
if(Fun_New_Bar())//проверка наличия нового бара
{
Alert("Сформировался новый бар"); // Вывод на экран
}
return(0); // Выход из start()
}
//--------------------------------------------------------------------
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
return(New_Bar);
}
Ve bak, düzgün çalışıyor gibi görünüyor! M1 zaman diliminde kontrol edildi:
Yine doğru değil! Fun_New_Bar() her zaman true döndüreceğinden EA her tikte tekrar bip sesi çıkaracaktır. O zaman soru şu ki, Fun_New_Bar () işlevi sürekli olarak doğru dönüyorsa neden gerekli?
New_Time=Time[ 0 ] функция Fun_New_Bar() не будет возвращать истину
kolyango: Sana doğru kodu göstereceğim. Görmek.
drknn :
... Программирование - это не игра в угадайки - тут думать надо...
... en azından, en azından bazen ... :-)))
Çubukların değeri yalnızca yeni bir çubuğun görünümü nedeniyle değişebileceğinden, Çubukları kullanma seçeneği daha az tercih edilir.
Öyleyse beni aydınlatın - yeni bir çubuğun ortaya çıkması dışında, grafikteki mumların sayısı başka bir şeyle bağlantılı olarak hala değişebilir ??? :)))))
Ah, peki, evet, kesinlikle - yükleme geçmişi. :) Aynı şekilde, işlevi her tıklamada bip sesi çıkarır - zamanı doğru hatırlamıyor.