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

[Silindi]  

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)

[Silindi]  

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.
[Silindi]  

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.
[Silindi]  

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.

[Silindi]  

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?

[Silindi]  

Ü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.