[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 753

 
Morzh09 :

무슨 일이야:

1) 2차원 배열을 지그재그 극값이 생성된 시간과 극한값 자체의 값으로 채웁니다.

2) 주어진 요소에 해당하는 지그재그 상단이 로컬 최대값인지 최소값인지에 따라 두 번째 배열을 1 또는 2로 채웁니다.

3) Alert를 통해 결과를 추론한다.

그러나 1 또는 2가 표시되어야 하는 위치에는 항상 0이 표시됩니다.

캐치는 정확히 무엇입니까?!?

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

//| Custom indicator initialization function |

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


string TimeSave1[100][2], TimeSave2[100][2];

double A[], B[];

double Number_of_extremum[];

extern string Currency = "EURUSD";


+------------------------------------------------------------------+

//| Custom indicator iteration function |

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

int start()

{

int counted_bars=IndicatorCounted();

//----

int k;

k=0;

double date;

int status;

for(int shift = 0; shift <= Bars-1; shift++)

{

date = iCustom(NULL, 0, "ZigZag", 12, 5, 3, 0, shift);

//----------------------------------------------------

if(date > 0)

{

TimeSave1[k][0]=TimeToStr(Time[shift]);

TimeSave1[k][1]=date;

k++;

}

}

//====================================================

for (int u=1;u<=k;u++)

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}

//====================================================

for (int j=1;j<10;j++)

{

Alert("время== ",TimeSave1[j][0], " значение== ", TimeSave1[j][1], " max/min== ", Number_of_extremum[j]);

}

//----

return(0);

}

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

그리고 또 다른 설명:

mql에서 날짜와 시간을 비교하는 방법(예를 들어, ZZ의 정점이 이전에 형성되었는지 확인해야 합니다. 이를 위해 형성 시간을 비교해야 합니다...)

datetime 은 본질적으로 int 이며 1970년부터 막대 시간까지의 초 수를 포함합니다. 더 많거나 적게 확인합니다 - 작동합니다 ...
나머지는 보지 않고 그냥 왔어요...
 

친구, 질문:


이 문제에 직면했습니다.

표시기는 경고를 통해 일부 정보를 표시합니다.

그러나 점차적으로 Alert '의 출력 필드에 "badyagi"가 너무 많이 축적됩니다 ...

표시기가 다시 시작될 때 경고의 모든 이전 항목을 정리할 수 있습니까?


미리 감사드립니다.

추신

comment, plz, 조금 더 일찍 내 게시물 (1과 2 대신 0 값이 표시되는 이유)

 

포럼에서 찾았는데...

질문 - 주문 댓글을 변경할 수 있습니까? 음, OrderSend() 작업 중에 주석에 "OrderNotModify" 값을 입력하고 이 주문으로 추가 작업(예: 부분 닫기)을 수행할 때 OrderComment를 "OrderIsModify"로 변경합니다... 또는 아니다?

 
Morzh09 :

무슨 일이야:

배열은 0부터 채워지며 여기서 0번째 인덱스는 건너뛰고 1번째부터 채우고,

 for ( int u= 1 ;u<=k;u++) // k при старте =0, u <= k не будет, считать счетчику незачем

{

if (StrToDouble(TimeSave1[u][ 1 ])<=StrToDouble(TimeSave1[u- 1 ][ 1 ])) // выражение при старте всегда [1][1]<=[0][1]

{

Number_of_extremum[u]= 1 ; // значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][ 1 ])>=StrToDouble(TimeSave1[u- 1 ][ 1 ])) // значит, всегда срабатывает [1][1]>=[0][1]

{

Number_of_extremum[u]= 2 ; // значит под номером u - нашли max

}

}
 
Abzasc :

배열은 0부터 채워지며 여기서 0번째 인덱스는 건너뛰고 1번째부터 채우고,

나는 당신의 의견을 잘 이해하지 못했습니다.

1) k - 시작 시 - 0이 아닙니다! k = 역사의 특정 깊이에서 찾은 지그재그 정점의 수!

2) " 는 [1][1]>=[0][1] "을 의미합니다. 항상 작동합니다. 왜 항상 작동합니까? TimeSave1 배열의 이전 요소 > 다음 요소인 경우 작동하지 않습니다.

당신이 말하고 싶었던 것을 반복하십시오.

 
Morzh09 :

나는 당신의 의견을 잘 이해하지 못했습니다.

1) k - 시작 시 - 0이 아닙니다! k = 역사의 특정 깊이에서 찾은 지그재그 정점의 수!

2) " 는 [1][1]>=[0][1] "을 의미합니다. 항상 작동합니다. 왜 항상 작동합니까? TimeSave1 배열의 이전 요소 > 다음 요소인 경우 작동하지 않습니다.

당신이 말하고 싶었던 것을 반복하십시오.

k를 사용하면 명확합니다. 이게 이해가 안가네요

 for ( int u= 1 ;u<=k;u++) // на первом шаге счетчик присваивает u = 1

{

if (StrToDouble(TimeSave1[u][ 1 ])<=StrToDouble(TimeSave1[u- 1 ][ 1 ])) // здесь, значит[u=1][1]<=[(u=1)-1][1]
// т. е. 1<=0, вы же от 1 еще 1 отнимаете

{

우측에서

 
Michelangelo :

주문 댓글을 변경할 수 있나요?

In Order수정 전용 티켓 가격 손절하다 이익을 취하다 만료 arrow_color

아닌 것 같습니다.

 

그래서 ... 그것은 뜨거운 것처럼 보입니다 ... 내 컴파일러에도 영향을 미칩니다. :)

최대/최소 지그재그 형성 날짜와 이 최대/최소 값이 포함된 배열을 살펴봐야 합니다.

사실 ZZ의 정점 중 최소값과 최대값을 이해해야 합니다.

이를 위해 다음 33개의 정점을 이전 정점과 비교합니다.

다음 것이 더 크면 상단입니다.

적으면 속이 빈 것입니다.

위인지 아래인지에 따라 다른 배열의 요소에 각각 1 또는 2를 추가합니다.

동시에 궁금하다, 어디가 ERROR가 될 수 있을까!!!!

파일:
 
나는 활과 함께 여기에 갈 것입니다-어쨌든, 나는 이미 전체 계산기를 망가 뜨 렸습니다 ... :)
두 가지 알려진 값을 기반으로 fiba 수준을 계산할 수 있기를 원합니다.
fib 0 수준은 1.2807의 가격에 해당하고 23.6의 수준은 1.2838에 해당합니다.

다른 레벨 38.2, 50.0, 61.5, 100.0 및 해당하는 가격을 찾아야 합니다.

나는 원리를 이해하기 위해 1.2807과 1.2838 사이에 명확하지 않은 관계를 전혀 찾을 수 없었습니다.
다른 모든 값을 검색합니다.

누가 좀 알려주세요... :)

 
IgorM :
시간이 얼마나 흥미로운지보다 젊은 시간대에 이전 시간대의 막대가 열리는 시간을 확인하기 위해 누군가가 지표를 만났습니다. 막대가 시작된 곳과 끝나는 곳을 차트에 표시합니다.
#property indicator_chart_window
#property link      "IgorM"

extern int num    = 10 ;
extern color line = White ;
int init()
{ return ( 0 );
}
  
void clear(){
   for ( int i= ObjectsTotal ()- 1 ; i>= 0 ;i--) {
      string name = ObjectName (i);
      if ( StringFind (name, "timeH1_" ) !=- 1 ) ObjectDelete (name);
    }
}

int deinit(){
clear();
return ( 0 );
}

int start()
{   
   int counted_bars = IndicatorCounted();
   if (counted_bars < 0 )   return (- 1 );
   clear();
   for ( int i= 0 ;i<=num;i++){ 
      string name = "timeH1_" +TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
      ObjectCreate (name, OBJ_VLINE , 0 ,iTime( NULL , PERIOD_H1 ,i), 0 );
      ObjectSet(name, OBJPROP_COLOR ,line);
      ObjectSet(name, OBJPROP_STYLE , STYLE_DOT );
    }
return ( 0 );
}

아마도 그래서, 코드는 최적화되지 않았지만 우리가 원하는 것을 그립니다