Mt4 End desteği. - sayfa 44

 
Реter Konow :

Şimdi söyle bana - görevi tamamladım mı?

Evet, siz (tüm Peter ve rakipler) yanlış taraftan geliyorsunuz! Görev bu şekilde ve bu şekilde tamamlanabilir!

Şimdi bir montajcı gelecek ve her şeyi daha verimli ve daha az bilgisayar kaynağı tüketimi ile yapabileceğini söyleyecek!

Ama bunun anlamı ne?

Bence verimlilik, yalnızca yeterli hız veya bilgisayar belleği olmadığında düşünülmelidir. Yeterli sayıda olduklarında, sistemin bakımının ve değiştirilmesinin kolay olması çok daha önemlidir. Hatta programın hızına ve kullanılan belleğe bir miktar zarar verir.

Rusça isimler beni hiç rahatsız etmiyor, beni rahatsız eden tek şey öneklere alışkın olmam, böylece değişken türüne göre türünü hemen anlayabiliyorsunuz. Ve Rusça veya İngilizce tanımlayıcı - fark küçüktür (1C - çok fazla Rusça vardır).

Ama hepsinden önemlisi, elbette, hata ayıklayıcının gönüllü olarak terk edilmesi beni şaşırttı. Bu sadece bir tür mazoşizm ... Hata ayıklayıcı olmadığında anlayabilirim (bir zamanlar tarihsel verilerde hata ayıklama yoktu) - Atlamam, hata ayıklama mesajları, günlükler vermem gerekiyor ... Ama bir hata ayıklayıcı varsa , onunla çalışmak tamamen ve daha uygun ve daha verimli!

 
George Merts :

Evet, siz (tüm Peter ve rakipler) yanlış taraftan geliyorsunuz! Görev bu şekilde ve bu şekilde tamamlanabilir!

Şimdi bir montajcı gelecek ve her şeyi daha verimli ve daha az bilgisayar kaynağı tüketimi ile yapabileceğini söyleyecek!

Ama bunun anlamı ne?

Bence verimlilik, yalnızca yeterli hız veya bilgisayar belleği olmadığında düşünülmelidir. Yeterli sayıda olduklarında, sistemin bakımının ve değiştirilmesinin kolay olması çok daha önemlidir. Hatta programın hızına ve kullanılan belleğe bir miktar zarar verir.

Rusça isimler beni hiç rahatsız etmiyor, beni rahatsız eden tek şey öneklere alışkın olmam, böylece değişken türüne göre türünü hemen anlayabiliyorsunuz. Ve Rusça veya İngilizce tanımlayıcı - fark küçüktür (1C - çok fazla Rusça vardır).

Ama hepsinden önemlisi, elbette, hata ayıklayıcının gönüllü olarak terk edilmesi beni şaşırttı. Bu sadece bir tür mazoşizm ... Hata ayıklayıcı olmadığında anlayabilirim (bir zamanlar tarihsel verilerde hata ayıklama yoktu) - Atlamam, hata ayıklama mesajları, günlükler vermem gerekiyor ... Ama bir hata ayıklayıcı varsa , onunla çalışmak tamamen ve daha uygun ve daha verimli!

George, hata ayıklayıcının nasıl kullanılacağı hakkında hiçbir fikrim yoktu. Neden gerekli olduğunu bile bilmiyordum ve umurumda da değildi. Dolayısıyla burada mazoşizm yoktur. Ve artık çok geç.
 

Peter, görevi değiştirdin. Çözümünüze bazen ihtiyaç duyulur, ancak çok nadiren, üstelik tamamen bu biçimde değil, benzerdir.

Daha sık olarak, başka bir görev, programın farklı yerlerinde yeni çubukların görünümünü izlemektir. Bu nedenle fonksiyona bir sembol ve bir zaman dilimi geçirip dizilerde aramak hiç de uygun bir çözüm değildir. isNewBar işlevi statik bir değişkene sahip olduğundan, her zaman çerçevesi sembolü için işlevin bir kopyası yapılmalıdır. Bir değişkeni referans olarak bir fonksiyona son kez iletebilirsiniz.

Ancak OOP ile ideal bir seçenek var - her sembol için ayrı bir nesne oluşturulur - zaman dilimi.

Bu, isNewBar işlevinin hiç gerekli olmadığını düşünmezsek, tamamen kayıptır, çünkü yapacak bir şey yoktur.

 
Dmitry Fedoseev :

Peter, görevi değiştirdin. Çözümünüze bazen ihtiyaç duyulur, ancak çok nadiren, ayrıca, tamamen bu biçimde değil, benzerdir.

Daha sık olarak, başka bir görev, programın farklı yerlerinde yeni çubukların görünümünü izlemektir. Bu nedenle fonksiyona bir sembol ve bir zaman dilimi geçirip dizilerde aramak hiç de uygun bir çözüm değildir. isNewBar işlevi statik bir değişkene sahip olduğundan, her zaman çerçevesi sembolü için işlevin bir kopyası yapılmalıdır. Bir değişkeni referans olarak bir fonksiyona son kez iletebilirsiniz.

Ancak OOP ile ideal bir seçenek var - her sembol için ayrı bir nesne oluşturulur - zaman dilimi.

Bu, isNewBar işlevinin hiç gerekli olmadığını düşünmezsek, tamamen kayıptır, çünkü yapacak bir şey yoktur.

Hiçbir şeyi değiştirmedim. Ben sadece bu sorunu farklı bir şekilde çözdüm. Mantığınızı takip ederek, kaçınılmaz olarak OOP ihtiyacına gelmek zorunda kaldım. Ancak, yine de, çözümümü güvenle kullanabilirsiniz. Herhangi bir fonksiyon, herhangi bir zamanda ve programdaki herhangi bir yerden, herhangi bir sembol ve herhangi bir zaman çerçevesi için yeni bir bar olayı için global diziye erişir.

Kaç sembol ve kaç zaman çerçevesi olduğu önemli değil - benim çözümümde sayıları sistemdeki yükü artırmıyor. Sadece diziye bakın - yeni bir bar olayı olup olmadığına bakın.

Sembolleri piyasa incelemesinden almazsanız, ancak bunları Symbols[] dizisine manuel olarak girerseniz, sembol listesini kısaltabilirsiniz. Rica ederim.


Katma:

Bu arada, New_bar() işlevinin artık orada olmadığını lütfen unutmayın. O gerçekten işe yaramazdı. Haklıydın.

 
Реter Konow :

Bana bir görev verildi: OOP olmadan birçok sembolden oluşan yeni bir çubuğun olaylarını birçok zaman diliminde almayı mümkün kılmak ve onu kısa ve verimli bir kod haline getirmek.

Şimdi söyle bana - görevi tamamladım mı?

Kesinlikle evet. Ancak!!! Öyle oldu, teklifim biraz değişti ve sonuç olarak anladığınız gibi anladınız. Forex'te, yalnızca burada ve şimdi ihtiyaç duyulan veriler ilgi çekicidir. Bir enstrüman ve cari dönem hakkında bilgiye ihtiyacınız var, hepsi bu - diğeri ilgilenmiyor. Farklı bir sembol ve belirli bir süre hakkında bilgiye ihtiyacınız var, bu yüzden aynı kodla almanız gerekiyor. Ve şimdi hiç ihtiyaç duyulmayan bilgileri sisteme yüklemeye gerek yok.

Bu senin hatan değil, oldu. Seni durdurmaya çalıştım ama yapamadım.

 
Dmitry Fedoseev :

Peter, görevi değiştirdin.

O değişmedi. Cümle öyle bir şekilde yeniden ifade edildi ki, o öyle anladı.

 
Alexey Viktorov :

Kesinlikle evet. Ancak!!! Öyle oldu, teklifim biraz değişti ve sonuç olarak anladığınız gibi anladınız. Forex'te, yalnızca burada ve şimdi ihtiyaç duyulan veriler ilgi çekicidir. Bir enstrüman ve cari dönem hakkında bilgiye ihtiyacınız var, hepsi bu - diğeri ilgilenmiyor. Farklı bir sembol ve belirli bir süre hakkında bilgiye ihtiyacınız var, bu yüzden aynı kodla almanız gerekiyor. Ve şimdi hiç ihtiyaç duyulmayan bilgileri sisteme yüklemeye gerek yok.

Bu senin hatan değil, oldu. Seni durdurmaya çalıştım ama yapamadım.

Sorun değil - ihtiyacınız olan sembollerin isimlerini Symbols[] dizisine girin ve hepsi bu kadar.

Girişi OnInit()'ten kaldırın:

   for ( int a1 = 0 ; a1 < All_symbols; a1++)
     {
      Symbols[a1] = SymbolName (a1 + 1 , true ); 
       //Возможно, нумерация символов в обзора рынка идет с нуля.
       //Тогда: Symbols[a1] = SymbolName(a1,true);
     }

Ve diziyi global kapsamda başlatın:

Symbols[3] = {"EURUSD","AUDUSD","GBPUSD"};

Ve Timeframes[] dizisinden fazladan zaman çerçevelerini kaldırın;

 int     Timeframes[ 3 ] = { PERIOD_M1 , PERIOD_M5 , PERIOD_M15 };

Değişkeni değiştir

 int     All_Timeframes = 3 ;

Ve All_Symbols değişkenini değiştirin:

 int     All_symbols = 3;

Bu şekilde sadece gerekli semboller ve gerekli zaman dilimleri için olayları alacaksınız.

Katma:

Ayrıca karakter sayısını bildiğiniz için OnInit()'ten dizi boyutlarını da kaldırın:

   //-------------------------------------------------------------   
   All_symbols = SymbolsTotal ( true );
   //---------------------------------------------------------   
   ArrayResize (Symbols,All_symbols);
   //---------------------------------------------------------
   ArrayResize (All_bars_table,All_symbols);
   //---------------------------------------------------------
 
Реter Konow :

Hiçbir şeyi değiştirmedim. Ben sadece bu sorunu farklı bir şekilde çözdüm. Mantığınızı takip ederek, kaçınılmaz olarak OOP ihtiyacına gelmek zorunda kaldım. Ancak, yine de, çözümümü güvenle kullanabilirsiniz. Herhangi bir fonksiyon, herhangi bir zamanda ve programdaki herhangi bir yerden, herhangi bir sembol ve herhangi bir zaman çerçevesi için yeni bir bar olayı için global diziye erişir.

Kaç sembol ve kaç zaman çerçevesi olduğu önemli değil - benim çözümümde sayıları sistemdeki yükü artırmıyor. Sadece diziye bakın - yeni bir bar olayı olup olmadığına bakın.

Sembolleri piyasa incelemesinden almazsanız, ancak bunları Symbols[] dizisine manuel olarak girerseniz, sembol listesini kısaltabilirsiniz. Rica ederim.


Katma:

Bu arada, lütfen New_bar() işlevinin artık orada olmadığını unutmayın. O gerçekten işe yaramazdı. Haklıydın.


Eğer öyleyse, koyu renkle vurgulandığı gibi - o zaman sepette.

 
Dmitry Fedoseev :

Eğer öyleyse, koyu renkle vurgulandığı gibi - o zaman sepette.

Niye ya?
 
Реter Konow :

Sorun değil - ihtiyacınız olan sembollerin isimlerini Symbols[] dizisine girin ve hepsi bu kadar.

Girişi OnInit()'ten kaldırın:

Ve diziyi global kapsamda başlatın:

Ve Timeframes[] dizisinden fazladan zaman çerçevelerini kaldırın;

Değişkeni değiştir

Ve All_Symbols değişkenini değiştirin:

Bu şekilde sadece gerekli semboller ve gerekli zaman dilimleri için olayları alacaksınız.


Dur. Kendim dışında yeni bir çubuk tanımlamak için başka bir işleve ihtiyacım yok. Şey, öyle oldu ki, tüm çalışmalarınız gereksiz hale geldi, üzgünüm.

Neden: