특정 시간에 양초의 시가를 가집니다. - 페이지 3

 

좋아, 내가 너에게 줄게:

 #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 중 하나만 고려됩니다. Array HeureSH[]가 올바르게 실행되고, 쓰여진 시간이 도래하면 그것은 사실이고, 맞고, 이것은 단지 시간[k]일 뿐이며 4개의 #define을 모두 고려하지 않습니다.
 
Kane59 :

좋아, 내가 너에게 줄게:

#define 중 하나만 고려됩니다. Array HeureSH[]가 올바르게 실행되고, 쓰여진 시간이 도래하면 그것은 사실이고, 맞고, 이것은 단지 시간[k]일 뿐이며 4개의 #define을 모두 고려하지 않습니다.

문제는 매우 분명합니다. . .

 string             HeureSH[];

그래서 이 배열은 당신이 그렇게 선언했기 때문에 0의 크기를 가집니다. . . 그래서 이 루프 . . .

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

0에서 시작하여 k >= 0일 때 끝남(0은 배열 크기임)

 

좋아, 나는 그 이유를 다음과 같이 생각했다.

 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 :

좋아, 나는 그 이유를 다음과 같이 생각했다.

문자열 조작이 필요하다고 생각합니다. 문자열을 개별 시간으로 나누고, 각각을 날짜/시간으로 변환하고 HeureSH[] 배열에 저장해야 합니다. . . 이런 식으로 현을 다루는 것은 약간 까다로울 수 있으며, 쉽게 망칠 수 있는 것은 아닙니다. 그러면 코드가 약간 이해되기 시작할 수 있습니다. . .


그건 그렇고, 이것들은 당신이 작업하고, 주의 깊게 연구하고, 즐겨야 하는 문자열 함수 입니다.
 

안녕

나는 그것에 대해 일하지만 나는 이것을 이해하지 못한다.

RaptorUK :

문제는 매우 분명합니다. . .

그래서 이 배열은 당신이 그렇게 선언했기 때문에 0의 크기를 가집니다. . . 그래서 이 루프 . . .

0에서 시작하여 k >= 0일 때 끝남(0은 배열 크기임)

좀 더 자세히 말씀해 주시겠습니까?


HeureSH[]의 경우 라인을 사용하여 4개의 다른 시간을 갖도록 4개의 스트링 부분으로 절단했습니다.

다시 편집:

인쇄 함수 에 ArraySize(HeureSH)를 작성했는데 다음과 같이 표시됩니다. 4

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

2013.01.19 13:57:21 2012.11.19 19:00 테스터 EURUSD,H1: 오픈:1.27701 ArraySise=4

나는 다시 테스트했고 이것의 마지막 만 선택합니다.

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

그래서 마지막 "14400". 배열 "HeureSH[]"와 같은 순서로 다른 것을 선택하지 않는 이유는 무엇입니까?


"For" 주기에 문제가 있습니까?
 
Kane59 :

안녕

나는 그것에 대해 일하지만 나는 이것을 이해하지 못한다:

좀 더 자세히 말씀해 주시겠습니까?


HeureSH[]의 경우 라인을 사용하여 4개의 다른 시간을 갖도록 4개의 스트링 부분으로 절단했습니다.

다시 편집:

인쇄 함수에 ArraySize(HeureSH)를 작성했는데 다음과 같이 표시됩니다. 4

2013.01.19 13:57:21 2012.11.19 19:00 테스터 EURUSD,H1: 오픈:1.27701 ArraySise=4

당신이 보여준 코드는 내가 설명한 것과 같은 결과를 가져올 것입니다. 당신이 묻는 질문에 영향을 미치는 더 많은 코드가 있다면 당신은 그것을 보여줄 필요가 있습니다. . . . 또는 더 이상 도움이 필요하지 않으면 표시하지 마십시오.
 

알았어 알았어 미안해

 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 );
   }

예를 들어 09:00일 때 iBar는 TimeCurrent보다 10시간 적은 어제 23:00의 막대입니다. 15시가 되면 iBar는 오늘 09:00의 바, ....... 내가 원하는 것: 선택한 시간이 오면 Now(TimeCurrent) 이전의 참조 바를 가집니다. 내 문제는 프로그램이 "times[]"의 마지막 항목만 사용한다는 것입니다. HeureSH[0]이면 시간[0]을 사용하고 계속하고 싶습니다. 어떡해?


추신: 그것이 내가 가지고 있고 필요한 전부입니다.

 

안녕,

오 아무도 나를 도울 수 있습니까?

 
Kane59 :

안녕,

오 아무도 나를 도울 수 있습니까?

당신은 누군가가 당신을 쉽게 도울 수 있도록 만들지 않고 여기 저기에 코드의 일부를 게시합니다. . . 나는 당신의 코드를 이해하려고 노력하고 있습니다. 나는 전체 코드가 없기 때문에 그것이 무엇을 하는지 보기 위해 실행할 수 없습니다. 당신은 당신의 배열과 같은 이름의 함수 를 가지고 있습니다. 그것은 괜찮지만 도움이 되지 않습니다 가독성.

UpdateHSeSpeciales()는 언제 호출됩니까?

 

정말 죄송합니다.

나는 그것만 가지고 있지만 "UpdateHSeSpeciales"를 잊어 버린 것이 사실입니다.


프로그램이 시작될 때 "초기화"에서 호출됩니다.