MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1899

 
Valeriy Yastremskiy # :

예, 제 경우에는 0이 아닌 첫 번째부터 시작해야 합니다.) 올바른 지적입니다.

왜요? 제로 바는 나머지와 함께 왼쪽으로 이동합니다. 그리고 0을 제외한 모든 막대를 이동하면 결과는 첫 번째 인덱스와 두 번째 인덱스에 대해 두 개의 동일한 값이 됩니다.

추신 데이터를 이동하면 빈 셀을 항상 덮어써야 합니다. 그렇지 않으면 행에 두 개의 동일한 값이 있습니다.

 
Valeriy Yastremskiy # :

ZYZY는 시프트 전에 0 값을 덮어쓰면 0 인덱스 값을 잃습니다.

그것도 내가 말하는거야!

 
Valeriy Yastremskiy # :

링 버퍼(µl)란 무엇입니까?

같은 것

 static int head= 0 ;
for (i=head,count= 0 ;count< ArraySize (A);i++,count++)
  {
   if (i>= ArraySize (A))i= 0 ;
   DoSomething(A[i]);
  }

또는

 static int head= 0 ;
for (i=head,count= 0 ;count< ArraySize (A);count++)
  {
   if (++i>= ArraySize (A))i= 0 ;
   DoSomething(A[i]);
  }
 
JRandomTrader # :

같은 것

또는

배열의 인덱스 이동(μl). 몹시. 작동해야하지만. 그런데 인덱스 변경 주기(그리고 이것이 주기)와 할당 주기의 가중치는 크게 다르지 않아야 합니다.

 
Vitaly Muzichenko # :

그것을 사용하는 방법, 당신은 보여줄 수 있습니까?

과제는

다음은 완성된 코드이지만 루프가 약간 무섭습니다.

---

다시 말하지만, ArrayCopy() 내부에 루프가 있으며 아마도 둘 이상일 수 있습니다. 따라서 대체 코드가 더 쉽고 빨라지지 않을 것입니다.

이 코드에서는 하나의 배열을 지정해야 합니다.

 int    ArrayCopy (
   void &        dst_ array[] ,         // куда копируем
   const void &  src_ array[] ,         // откуда копируем
   int           dst_start= 0 ,         // с какого индекса пишем в приемник
   int           src_start= 0 ,         // с какого индекса копируем из источника
   int           count= WHOLE_ARRAY      // сколько элементов
   );

쓸 인덱스와 복사할 인덱스는 배열 오프셋의 방향에 따라 다릅니다. 즉, 인덱스 0에 항상 새로운 데이터가 있어야 하는 경우 0에서 복사하고 1에서 작성해야 합니다. 따라서 인덱스 0과 1의 값은 같을 것이고 그런 다음 새로운 값을 0으로 씁니다.

그리고 ArrayCopy()가 내부적으로 사용자 루프와 동일한 루프를 가지고 있는지 매우 의심스럽습니다. 따라서 특정 크기의 특정 배열이 있으면 각 틱마다 하나씩 이동한 다음 표시기 버퍼에 복사하여 선으로 표시됩니다...

 
여기에 일일 팩트 브레이크 아웃 기능이 있음을 알려주세요.
 //+----------------------------------------------------------------------------+
//|Определение пробоя дневного фрактала вверх                                  |
//+----------------------------------------------------------------------------+
int BreakdownSignalUpD1()
  {
   int sig=- 1 ;
   double resistD1 = GetNearestUpFractal( PERIOD_D1 );
   if (resistD1 < Ask)
     sig= 0 ;
   if (resistD1 >= Ask)
     sig= 1 ;  
   return (sig);
  }

그리고 내역을 화면에 표시해주는 기능입니다.

 ObjectCreate ( "signal100" , OBJ_LABEL , 0 , 0 , 0 , 0 , 0 );
   ObjectSet( "signal100" , OBJPROP_XDISTANCE , 600 );
   ObjectSet( "signal00" , OBJPROP_YDISTANCE , 40 );
   ObjectSetText( "signal100" , DoubleToString (BreakdownSignalUpD1(), 0 ), 18 , "Times New Roman" , clrRed );

화면이 0이나 1이 아니라 0이 "예" 1이 "아니오"가 되도록 만드는 방법을 알려주세요

감사해요

 
EVGENII SHELIPOV # :
여기에 일일 팩트 브레이크 아웃 기능이 있음을 알려주세요.

그리고 내역을 화면에 표시해주는 기능입니다.

화면이 0이나 1이 아니라 0이 "예" 1이 "아니오"가 되도록 만드는 방법을 알려주세요

감사해요

 string boolToStr( bool value ) { return (( value ) ? "true" : "false" ); }
 
EVGENII SHELIPOV # :
여기에 일일 팩트 브레이크 아웃 기능이 있음을 알려주세요.

그리고 내역을 화면에 표시해주는 기능입니다.

화면이 0이나 1이 아니라 0이 "예" 1이 "아니오"가 되도록 만드는 방법을 알려주세요

감사해요

ObjectSetText( "signal100" ,BreakdownSignalUpD1()== 0 ? "Да" : "Нет" , 18 , "Times New Roman" , clrRed );

이 같은.

 
JRandomTrader # :

이 같은.

감사해요

 
Alexey Viktorov # :

이 코드에서는 하나의 배열을 지정해야 합니다.

쓸 인덱스와 복사할 인덱스는 배열 오프셋의 방향에 따라 다릅니다. 즉, 인덱스 0에 항상 새로운 데이터가 있어야 하는 경우 0에서 복사하고 1에서 작성해야 합니다. 따라서 인덱스 0과 1의 값은 같을 것이고 그런 다음 새로운 값을 0으로 씁니다.

그리고 ArrayCopy()가 내부적으로 사용자 루프와 동일한 루프를 가지고 있는지 매우 의심스럽습니다. 따라서 특정 크기의 특정 배열이 있으면 각 틱마다 하나씩 이동한 다음 표시기 버퍼에 복사하여 선으로 표시됩니다...

노력하겠습니다.

---

일반적으로 내 코드가 성공적으로 작동하고 1시간 이상이 지났습니다.