Belirli bir saatte mumun açık fiyatına sahip olun. - sayfa 3

 

tamam tamam veriyorum:

 #define HR0900 14400    //All times were changed for the test to see which is the Reference.
#define HR1500 10800
#define HR1900 7200
#define HR2300 3600

extern string      Heures= "11:41;11:42;12:00;11:42;" ; // Times for my test today...
string             HeureSH[];

datetime TC = TimeCurrent ();

int times[]={HR1500, HR2300, HR0900, HR1900};
                
     for ( int k= 0 ; k< ArraySize (HeureSH); k++)
    {
       datetime     want= TC - times[k];
    }

int iBar= iBarShift( Symbol (), PERIOD_H1 , want);
double OpenPrice= iOpen( Symbol (), PERIOD_H1 , iBar);
#define'den yalnızca biri dikkate alınır. HeureSH[] Dizisi doğru bir şekilde yürütülür ve eğer yazılan zaman gelirse, doğrudur, doğrudur, bu sadece çarpıdır[k] dört #define'ı da dikkate almayın.
 
Kane59 :

tamam tamam veriyorum:

#define'den yalnızca biri dikkate alınır. HeureSH[] Dizisi doğru bir şekilde yürütülür ve eğer yazılan zaman gelirse, doğrudur, doğrudur, bu sadece çarpıdır[k] dört #define'ı da dikkate almayın.

Sorun oldukça açık. . .

 string             HeureSH[];

bu nedenle, bu şekilde bildirdiğiniz gibi bu dizinin boyutu 0'dır. . . yani bu döngü. . .

 for ( int k= 0 ; k < ArraySize (HeureSH); k++)

0'da başlar ve k >= 0 olduğunda biter (0, dizi boyutudur)

 

Tamam, bunu yazdım çünkü düşündüm:

 extern string      Heures= "11:41;11:42;12:00;11:42;" ; // Times for my test today...
      
                             0      1      2      3

int times[]={HR1500, HR2300, HR0900, HR1900};

               0          1        2        3
 
Kane59 :

Tamam, bunu yazdım çünkü düşündüm:

Sanırım biraz dizge işleme yapmanız gerekiyor, dizginizi ayrı ayrı zamanlara ayırmanız, bunların her birini bir tarih saatine dönüştürmeniz ve bunları HeureSH[] dizinizde saklamanız gerekiyor. . . dizelerle bu şekilde çalışmak biraz zor olabilir, zor değil, batırması kolay. O zaman kodunuz biraz anlamlı olmaya başlayabilir. . .


Bu arada, bunlar üzerinde çalışmanız gereken dize işlevleri , dikkatlice inceleyin, keyfini çıkarın.
 

Merhaba

Çalışıyorum ama şunu anlamıyorum:

RaptorUK :

Sorun oldukça açık. . .

bu nedenle, bu şekilde bildirdiğiniz gibi bu dizinin boyutu 0'dır. . . yani bu döngü. . .

0'da başlar ve k >= 0 olduğunda biter (0, dizi boyutudur)

Bana daha fazla ayrıntıyla anlatmayı deneyebilir misin?


HeureSH[] için bunu 4 farklı saate sahip olmak için 4 dize parçasında kesmek için çizgiler kullandım.

Tekrar düzenle:

Bir yazdırma işlevinde ArraySize(HeureSH) yazdım ve bana şunu verdi: 4

 Print ( "Open:" , DoubleToStr(OpenPrice, digits), /*" Time:", TimeToStr(Time[iBar], */ " ArraySise=" , ArraySize (HeureSH));

2013.01.19 13:57:21 2012.11.19 19:00 Tester EURUSD,H1: Open:1.27701 ArraySise=4

tekrar test ettim ve bunun yalnızca sonuncusunu seçti:

 int times[]={ 36000 , 21600 , 14400 , 14400 };

Yani son "14400". Neden "HeureSH[]" Dizisinin aynı sırayla başkalarını seçmiyor?


"For" döngüsünde bir sorun mu var?
 
Kane59 :

Merhaba

Çalışıyorum ama şunu anlamıyorum:

Bana daha fazla ayrıntıyla anlatmayı deneyebilir misin?


HeureSH[] için bunu 4 farklı saate sahip olmak için 4 dize parçasında kesmek için çizgiler kullandım.

Tekrar düzenle:

Bir yazdırma işlevinde ArraySize(HeureSH) yazdım ve bana şunu verdi: 4

2013.01.19 13:57:21 2012.11.19 19:00 Tester EURUSD,H1: Open:1.27701 ArraySise=4

Gösterdiğiniz kod, tarif ettiğimle sonuçlanacaktır, eğer sorduğunuz soru üzerinde etkisi olan daha fazla kodunuz varsa, göstermeniz gerekir. . . . veya daha fazla yardıma ihtiyacınız yoksa göstermeyin.
 

tamam tamam özür dilerim

 extern string      Heures= "09:00;15:00;19:00;23:00;" ;
string             HeureSH[];

int start()
  {
//---- 
int times[]= { 36000 , 21600 , 14400 , 14400 };

   for ( int i= 0 ; i< ArraySize (Heures); i++)
   {
       datetime     want = TC - times[i];
   }

   int iBar= iBarShift( Symbol (), PERIOD_H1 , want);
   double OpenPrice= iOpen( Symbol (), PERIOD_H1 , iBar);

   if (HeureSH(TimeToStr(iTime( Symbol (), PERIOD_H1 , 0 ),TIME_MINUTES)))
   {
       if (iOpen( Symbol (), PERIOD_H1 , 0 ) < OpenPrice)
      {
         OrderSend ( OP_SELL, .......);
      }
       if (iOpen( Symbol (), PERIOD_H1 , 0 ) > OpenPrice)
      {
         OrderSend ( OP_BUY, .......);
      }
   }

//----
   return ( 0 );
  }

//+------------------------------------------------------------------+
void UpdateHSeSpeciales()
   {
       string hour1 = "" ;
       int count1 = 0 ;
       for ( int k= 0 ; k< StringLen (Heures); k++)
      {
         if ( StringSubstr (Heures, k, 1 ) != ";" )
         {
            hour1= hour1+ StringSubstr (Heures, k, 1 );
         }
         else
         {
             ArrayResize (HeureSH, ArraySize (HeureSH)+ 1 );
            HeureSH[count1] = hour1;
            hour1 = "" ;
            count1 += 1 ;
         }   
      }
   }
   bool HeureSH( string now1)
   {
       for ( int k= 0 ; k< ArraySize (HeureSH); k++)
      {
         if (now1 == HeureSH[k])
         {
             return ( true );
         }
      }
   
       return ( false );
   }

Örneğin, saat 09:00 olduğunda, iBar, TimeCurrent'tan 10 saat daha az olan dünün 23:00 barıdır. Saat 15:00 olduğunda, iBar bugünün barı 09:00, ....... Ne istiyorum: Seçilen saat gelirse, Now'dan (TimeCurrent) önceki bir referans çubuğuna sahip olun. Benim sorunum, programın yalnızca "time[]" öğesinin son öğesini almasıdır. HeureSH[0] ise, times[0] kullan ve devam et. Ne yapabilirim?


Not: sahip olduğum ve ihtiyacım olan tek şey bu.

 

Merhaba,

ah biri bana yardım edebilir mi?

 
Kane59 :

Merhaba,

ah biri bana yardım edebilir mi?

Kimsenin size yardım etmesini kolaylaştırmıyorsunuz, kodunuzun bitlerini ve parçalarını oraya buraya gönderiyorsunuz. . . Kodunuzu anlamaya çalışıyorum, tam koda sahip olmadığım için ne yaptığını görmek için çalıştıramıyorum, dizinizle aynı ada sahip bir işleviniz var, sorun değil ama yardımcı olmuyor okunabilirlik.

UpdateHSeSpeciales() ne zaman çağrılır?

 

Üzgünüm, gerçekten

Sadece bu var ama "UpdateHSeSpeciales" i unuttuğum doğru.


Program başladığında "init" olarak adlandırılır.