Mt4 End desteği. - sayfa 25

 
Artyom Trishkin :

Sadece kullanıcının soracağı bir fonksiyon yazmanız gerekiyor: "M5'e yeni bir çubuk geldi mi?" ve evet/hayır yanıtı alın.

Örneğin:

İşte IsNewBar() işleviniz ve görevin daha da genişletilmesiyle daha da geliştirecek ve döndüreceğiz / döndüreceğiz


Bana OOP'nin faydalarını göstermek için çok iyi bir örnek değil gibi görünüyor.
İşte yalnızca bir işlevi kullanan bir örnek:

 int OnInit ()
  {
   return ( INIT_SUCCEEDED );
  }
void OnTick ()
  {
   IsNewBar( 0 , false ); // режим сбора информации
   if (IsNewBar()) Print ( "Пришел новый бар текущего ТФ" );   // режим считывания информации
   if (IsNewBar( PERIOD_H4 )) Print ( "Пришел новый бар H4" );   // режим считывания информации
   if (IsNewBar( PERIOD_D1 )) Print ( "Пришел новый бар D1" );   // режим считывания информации
   
  }
bool IsNewBar( ENUM_TIMEFRAMES tf= PERIOD_CURRENT , bool out= true )
  {
   static const ENUM_TIMEFRAMES TF[ 22 ]=
     {
       PERIOD_CURRENT , PERIOD_M1 , PERIOD_M2 , PERIOD_M3 , PERIOD_M4 , PERIOD_M5 , PERIOD_M6 , PERIOD_M10 , PERIOD_M12 , PERIOD_M15 , PERIOD_M20 , PERIOD_M30 ,
       PERIOD_H1 , PERIOD_H2 , PERIOD_H3 , PERIOD_H4 , PERIOD_H6 , PERIOD_H8 , PERIOD_H12 , PERIOD_D1 , PERIOD_W1 , PERIOD_MN1
     };
   static bool newbar[ 22 ];
   static bool FirstTime= true ;
   static int acb[ 22 ]; // array of current bars
   if (FirstTime)
     {
       for ( int i= 0 ;i< 22 ;i++) acb[i]= Bars ( Symbol (),TF[i]);
      FirstTime= false ;
       return ( false );
     }
   int curtf= 0 ;
   while (TF[curtf]!=tf) curtf++;
   if (out) return (newbar[curtf]);
   for ( int i= 0 ;i< 22 ;i++)
     {
       int CurBars= Bars ( Symbol (),TF[i]);
       if (acb[i]<CurBars)
        {
         acb[i]=CurBars;
         newbar[i]= true ;
        }
       else newbar[i]= false ;
     }
   return ( false );
  }

elbette onu OnTick'ten kaldırabilir ve OnTimer'a ekleyebilirsiniz.

 
Реter Konow :

Bu soruya gelince, bence yanılıyorsunuz. Lütfen servis masasında kontrol edin. Soruyu doğru bir şekilde cevaplamalarına izin verin: tekliflerin gelmesinden bağımsız olarak platformda yeni çubuklar oluşturuldu mu? Değilse, yeni bir çubuk durumunda, üzerinde bir teklif olup olmadığını kontrol edin. Öyle olsaydı, ama yeni bir bar oluştu. Öyle olabilir. Çok değiştirmenize gerek yok.

Oh mama mia... Pekala, bilgiyi şimdiden okuyun. Bunu bilmemenize çok şaşırdım ve bunu size anlattıklarında siz de şüphe duyuyorsunuz. Böyle çocukça konularda servis masasının yönüne bile bakmayacağım - bana gülecekler. O zaman kendinize sorun - profilinizde hizmet masasına bir bağlantınız var.
 
Nikolai Semko :

Bana OOP'nin faydalarını göstermek için çok iyi bir örnek değil gibi görünüyor.
İşte yalnızca bir işlevi kullanan bir örnek:

elbette onu OnTick'ten kaldırabilir ve OnTimer'a ekleyebilirsiniz.

Mantığa bakmadım, varsayımsal olarak her şeyin doğru çalıştığını varsayacağız.

Rastgele karakterlerden herhangi biri ne olacak?

Programın Piyasa İzleme penceresinden bir sembol listesi kullandığını ve kullanıcının istediği zaman sembol setlerini değiştirebileceğini hayal edin.

 
Şahsen, OOP kodunda @Nikolai Semko'yu görmedim.


Samimi olarak.

 

Artyom, sorunun kendisini biraz açıklamadı, ancak soru şu: doğru çalışması için prosedürel bir tarzda yazın

 void OnTick ()
 {
 
   if (IsNewBar( "AUDCAD" , PERIOD_H1 )) {
   // задача №1
  }
 
   if (IsNewBar( "GBPJPY" , PERIOD_M15 )) {
   // задача №2
  }
 
   if (IsNewBar( "EURUSD" , PERIOD_H4 )) {
   // задача №3
  }

 }

// Функция "Новый бар"
bool IsNewBar(....) {
 здесь код, который нужно написать
}
 
Реter Konow :

Evet, bir zamanlayıcıda. Alıntı olmadan bile yeni bir çubuk görünür. Bar görünüm olayıyla ilgileniyoruz ve alıntıyı OnTick()'te düzeltebiliriz;

Çubuk yine de görünecektir.


Burada çubuklarla açıklanmıştır :

Çubuğun açılış zamanı Time[i], kural olarak, kene varış zamanı ile çakışmaz. Herhangi bir zaman aralığı için çubuğun açılma zamanı her zaman zaman aralığının bir katıdır. Zaman çerçevesi içinde meydana gelen herhangi bir ilk onay işareti , çubuk oluşturan bir işarettir ; zaman dilimi içinde tek bir işaret alınmadıysa, bu zaman dilimindeki çubuk da oluşmaz.

 
Vitaly Muzichenko :

Artyom, sorunun kendisini biraz açıklamadı, ancak soru şu: doğru çalışması için prosedürel bir tarzda yazın

Yavaş yavaş görevler ekleyerek insanlardan görevi uygulamak için hızlı, kullanışlı, kolay ve basit bir yol elde etmek istedim. Bunu OOP ile yapmanın ne kadar kolay olduğunu daha sonra göstermek için.

Ancak OOP'nin ana reddi, sorunun çözümünü reddetti :)

 
Artyom Trishkin :

Yavaş yavaş görevler ekleyerek insanlardan görevi uygulamak için hızlı, kullanışlı, kolay ve basit bir yol elde etmek istedim. Sonra bunu OOP ile yapmanın ne kadar kolay olduğunu göstermek için.

Ancak OOP'nin ana reddi, sorunun çözümünü reddetti :)

Evet, aslında, tam olarak kendim ifade etmedim, yeniden ifade edeceğim:

Artyom, sorunun kendisini biraz açıklamadı, ancak soru şu: doğru çalışması için prosedürel bir tarzda yazın

Belki geri döner ve bunun çok kolay ve basit bir şekilde mümkün olduğunu kanıtlar.

 
Vitaly Muzichenko :

Evet, aslında, tam olarak kendim ifade etmedim, yeniden ifade edeceğim:

Artyom, sorunun kendisini biraz açıklamadı, ancak soru şu: doğru çalışması için prosedürel bir tarzda yazın

Belki geri döner ve bunun çok kolay ve basit bir şekilde mümkün olduğunu kanıtlar.

Amacım, prosedürel stil kodunun şöyle bir döngüde çalışmasını sağlamaktı:

   ENUM_TIMEFRAMES array_timeframes[]=
      {
       PERIOD_M1 , PERIOD_M2 , PERIOD_M3 , PERIOD_M4 , PERIOD_M5 , PERIOD_M6 , PERIOD_M10 , PERIOD_M12 , PERIOD_M15 , PERIOD_M30 ,
       PERIOD_H1 , PERIOD_H2 , PERIOD_H3 , PERIOD_H4 , PERIOD_H6 , PERIOD_H8 , PERIOD_H12 , PERIOD_D1 , PERIOD_W1 , PERIOD_MN1
      };
   int total= SymbolsTotal ( true ), total_tf= ArraySize (array_timeframes);
   for ( int i= 0 ; i<total; i++){
       string symbol_name= SymbolName (i, true );
       for ( int j= 0 ; j<total_tf; j++){
         if (IsNewBar(symbol_name,array_timeframes[j])){
             Print ( "Новый бар на " ,symbol_name, " " , EnumToString (array_timeframes[j]));
            }
         }
      }
 
Artyom Trishkin :

Amacım, prosedürel stil kodunun şöyle bir döngüde çalışmasını sağlamaktı:

Sembollerle döngü, bir teklif geldiğinde yeni bir çubuğun açılmasını kontrol etme vb., çözümüme kolayca eklenebilir. Peki ya OOP?

Yanlış örnek seçilmiştir. Boş zamanlarında başka bir şey düşün.