Mt4 End desteği. - sayfa 26

 

Çözümümü beğenen herkes kişisel bir . Düzenleyip sana vereceğim.

Hepinize iyi şanslar.

 
Реter Konow :

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.

Ve sende yap. Karakterlerin değişebileceği gerçeği göz önüne alındığında - sonuçta, karakterleri okurken doğru olarak ayarlanır.

 
Artyom Trishkin :

Ve sende yap. Karakterlerin değişebileceği gerçeği göz önüne alındığında - sonuçta, karakterleri okurken doğru olarak ayarlanır.


Peki ya yaparsam? Ne söyleyelim? Gizlice: benim için bu tür görevler tam bir anaokulu. Gerçekten yapamayacağımı mı düşünüyorsun? Bu sadece naiflik...

 
Реter Konow :

Peki ya yaparsam? Ne söyleyelim? Gizlice: benim için bu tür görevler tam bir anaokulu. Gerçekten yapamayacağımı mı düşünüyorsun? Bu sadece naiflik...

Pekala, sonunda halledin.

 
Vitaly Muzichenko :

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

Tabii, sorun değil. Müşteri bir manyaksa ve aynı anda tüm semboller üzerinde işlem yapacaksa, dizi operasyonlarının karşılaştırmasını kurtarmak için riskten korunma.

Ve öyle görünüyor ki, işlemlerden ve hafızadan tasarruf edecek başka bir yer yok - sadece minimum

void OnTimer(){

   Alert(Fn_new_bar("EURUSD", PERIOD_D1)); }

//+------------------------------------------------------------------+

uint Sp_Adler32(string line){

   ulong s1 = 1;

   ulong s2 = 0;

   uint buflength=StringLen(line);

   uchar char_array[];

   ArrayResize(char_array, buflength,0);

   StringToCharArray(line, char_array, 0, -1, CP_ACP);

   for (uint n=0; n<buflength; n++){

      s1 = (s1 + char_array[n]) % 65521;

      s2 = (s2 + s1)     % 65521;}

   return ((s2 << 16) + s1);}

//+------------------------------------------------------------------+

bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf){

   static datetime st_time[]; 

   static uint     st_id[];

   

   //---- set

   datetime new_time = iTime(symb, tf, 0);     if(new_time==0) return(false); 

   uint     new_id   = Sp_Adler32(StringConcatenate(symb,EnumToString(tf))); 

   datetime old_time = 0; 

   uint     old_id   = 0;

   

   //---- find

   int size = ArraySize(st_time); 

   for(int i=0; i<size; i++){

      if(st_id[i]!=new_id) continue; 

      old_id   = st_id  [i]; 

      old_time = st_time[i];

      break;}

   

   //----add new element

   if(old_time==0){

      ArrayResize(st_time, size+1); st_time[size]=new_time;

      ArrayResize(st_id,   size+1); st_id  [size]=new_id; }

   

   //----

   return(old_time>0 && old_time<new_time);}


 
Реter Konow :

Hafif gecikme için özür dilerim.

İşte fonksiyonun ilk versiyonu. Daha da geliştirilebilir ve geliştirilebilir. Herhangi biri bir hata fark ederse, lütfen yorum yapın.


Bu OOP ile ilgili değil, kodunuzun doğrusal olduğu gerçeğiyle ilgili, ancak bunu asla bilemeyebilirsiniz ...

 
Galina Bobro :

Tabii, sorun değil. Müşteri bir manyaksa ve aynı anda tüm semboller üzerinde işlem yapacaksa, dizi operasyonlarının karşılaştırmasını kurtarmak için riskten korunma.

Ve öyle görünüyor ki, işlemlerden ve bellekten tasarruf edecek başka bir yer yok - sadece minimum


Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Mt4 Sonu desteği.

Artyom Trishkin , 2017.09.10 23:21

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 :


Alışkanlıktan dolayı yanlış olarak adlandırdım - bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf) - istenen işlev.

 
Artyom Trishkin :

Pekala, sonunda halledin.


TAMAM. Çözümünüz yalnızca keneler üzerinde çalışır. Benimki bir zamanlayıcıda. Çubukların görünümüyle senkronize etme yöntemimin bir dezavantajı olduğunu düşünüyor musunuz? TAMAM. Öyle olsun. Yeni bir çubuğun bayrağını ayarlamadan önce bir teklifin gelişi için bir çek ekleyeceğim. Fonksiyona başka bir parametre ekleyeceğim - bir sembol. Kullanıcı, yeni bir çubuğun olayını alması gereken sembolü seçecek ve fonksiyona gönderecektir. İşlev, verilen sembolün son alıntısının zamanını kontrol edecektir. Ardından, çubuğun resmi görünüm zamanını ve teklif zamanını karşılaştırın ve olay bayrağını ayarlayın.

Bu konuyu yeni anlamaya başladım, ancak herhangi bir zorluk görmüyorum.

 
Galina Bobro :

Bu OOP ile ilgili değil, kodunuzun doğrusal olduğu gerçeğiyle ilgili, ancak bunu asla bilemeyebilirsiniz ...

Doğrusal, doğrusal olmayan... Programlamada yine operadan mı bahsediyorsunuz?