초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 466

 

모두를 환영합니다. 그런 질문이 있었습니다. 표시기(수정된 프랙탈)가 차트에 로드되면 모든 것이 정확하고 제대로 작동하지만 어드바이저에서 사용하려고 하면 버퍼가 비어 있다고 표시됩니다. 동시에 버퍼를 Deinit에 전달하여 올바른 값을 저장합니다.

지표 소스가 첨부되어 있습니다. 내가 잘못하고 있는 것에 대한 조언과 조언을 들을 준비가 되어 있습니다.

고문의 코드:

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (Time[ 0 ] == prevtime) return ;
   prevtime = Time[ 0 ];
   

   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 0 ) > 0 ) Print ( "x = " , 0 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 0 ));     
   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 2 ) > 0 ) Print ( "x = " , 2 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 2 ));
   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 3 ) > 0 ) Print ( "x = " , 3 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 3 ));   
   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 4 ) > 0 ) Print ( "x = " , 4 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 4 ));
   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 5 ) > 0 ) Print ( "x = " , 5 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 5 )); 
   if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 , 6 ) > 0 ) Print ( "x = " , 6 , "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 , 6 ));
   
  // тут везде 0
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
       Print ( "Deinit Function" );
      
       for ( int x = 0 ; x < 100 ; x++ )
      {
         if ( iCustom ( NULL , 0 , "modify_Fractal" , 0 ,x) > 0 ) Print ( "x = " , x, "  fractal Up: " , iCustom ( NULL , 0 , "modify_Fractal" , 0 ,x));
         if ( iCustom ( NULL , 0 , "modify_Fractal" , 1 ,x) > 0 ) Print ( "x = " , x, "  fractal Down: " , iCustom ( NULL , 0 , "modify_Fractal" , 1 ,x));
      }
   // а здесь полный буфер правильных значений индикатора.
  }
파일:
 
Karputov Vladimir :

끝에 있는 if를 다음과 같이 바꿀 수 있습니다.

호 너무 쉽습니다 :)

감사해요

 
Maxim Dobrovolskii :

모두를 환영합니다. 그런 질문이 있었습니다. 표시기(수정된 프랙탈)가 차트에 로드되면 모든 것이 정확하고 제대로 작동하지만 어드바이저에서 사용하려고 하면 버퍼가 비어 있다고 표시됩니다. 동시에 버퍼를 Deinit에 전달하여 올바른 값을 저장합니다.

지표 소스가 첨부되어 있습니다. 내가 잘못하고 있는 것에 대한 조언과 조언을 들을 준비가 되어 있습니다.

고문의 코드:

나는 아주 빨리 훑어보았다. 질문: 프랙탈이 0 막대에 있을 수 있습니까? 그러나 OnDeinit()에서는 막대를 반복하고 물론 프랙탈(빈 버퍼 값이 아님)을 찾습니다.
 
Artyom Trishkin :
나는 아주 빨리 훑어보았다. 질문: 프랙탈이 0 막대에 있을 수 있습니까? 그러나 OnDeinit()에서는 막대를 반복하고 물론 프랙탈(빈 버퍼 값이 아님)을 찾습니다.
그것은 0 막대에있을 수 없습니다. 나는 "아마도 내가 너무 비뚤어지고 뭔가 잘못했을 수도 있습니다"라고 쓴 적어도 4, 0-3이 있습니다. Deinit에서도 4-6을 거치고 모든 것이 제자리에 있고 가치가 있습니다. 이것은 나에게 명확하지 않습니다.
 
Maxim Dobrovolskii :
그것은 0 막대에있을 수 없습니다. 나는 "아마도 내가 너무 비뚤어지고 뭔가 잘못했을 수도 있습니다"라고 쓴 적어도 4, 0-3이 있습니다. Deinit에서도 4-6을 거치고 모든 것이 제자리에 있고 가치가 있습니다. 이것은 나에게 명확하지 않습니다.

OnDeinit()에서 0이 아닌 값을 찾기 위해 막대(0에서 100까지)를 반복하고 찾은 값을 기록합니다.

그리고 OnTick()에서 버퍼 0의 마지막 6개 막대만 표시하려고 합니다. 프랙탈이 없을 수 있습니다.

먼저 프랙탈이 있는 막대를 찾은 다음 이 막대의 값과 출력값 , 그리고 그것들을 찾으십시오.

 
Artyom Trishkin :

OnDeinit()에서 0이 아닌 값을 찾기 위해 막대(0에서 100까지)를 반복하고 찾은 값을 기록합니다.

그리고 OnTick()에서 버퍼 0의 마지막 6개 막대만 표시하려고 합니다. 프랙탈이 있을 수도 있고 없을 수도 있습니다. 먼저 프랙탈이 있는 막대를 찾은 다음 이 막대의 값과 출력값 , 그리고 그것들을 찾으십시오.

막대 6에는 계획대로 프랙탈이 있어야 합니다.

2015.11.01 13:19:11.023 2015.10.30 22:54 머니로보틱스_프로보이! EURUSD,H1: x = 29 프랙탈 상승: 1.09855
2015.11.01 13:19:11.023 2015.10.30 22:54 머니로보틱스_프로보이! EURUSD,H1: x = 21 프랙탈 상승: 1.09976
2015.11.01 13:19:11.023 2015.10.30 22:54 머니로보틱스_프로보이! EURUSD,H1: x = 16 프랙탈 하락: 1.09652
2015.11.01 13:19:11.023 2015.10.30 22:54 머니로보틱스_프로보이! EURUSD,H1: x = 6 프랙탈 상승: 1.10721
2015.11.01 13:19:10.577 2015.10.30 22:54 머니로보틱스_프로보이! EURUSD,H1: Deinit 함수
2015.11.01 13:19:08.380 2015.10.01 00:00 머니로보틱스_프로보이! 테스트 시작

이것은 로그의 시작입니다. 테스트 시작, 어드바이저 완료, Deinit 실행, 즉시 6번째 위치에서 프랙탈을 찾습니다. 이 경우 표시기 버퍼 에 액세스하는 방법이 명확하지 않습니다.



https://charts.mql5.com/9/256/eurusd-h1-alpari-limited-3.png

이미지 반복.

파일:
 
Maxim Dobrovolskii :

막대 6에는 계획대로 프랙탈이 있어야 합니다.

2015.11.01 13:19:11.023 2015.10.30 22:54 머니로보틱스_프로보이! EURUSD,H1: x = 29 프랙탈 상승: 1.09855
2015.11.01 13:19:11.023 2015.10.30 22:54 머니로보틱스_프로보이! EURUSD,H1: x = 21 프랙탈 상승: 1.09976
2015.11.01 13:19:11.023 2015.10.30 22:54 머니로보틱스_프로보이! EURUSD,H1: x = 16 프랙탈 하락: 1.09652
2015.11.01 13:19:11.023 2015.10.30 22:54 머니로보틱스_프로보이! EURUSD,H1: x = 6 프랙탈 상승: 1.10721
2015.11.01 13:19:10.577 2015.10.30 22:54 머니로보틱스_프로보이! EURUSD,H1: Deinit 함수
2015.11.01 13:19:08.380 2015.10.01 00:00 머니로보틱스_프로보이! 테스트 시작

이것은 로그의 시작입니다. 테스트 시작, 어드바이저 완료, Deinit 실행, 즉시 6번째 위치에서 프랙탈을 찾습니다. 이 경우 표시기 버퍼 에 액세스하는 방법이 명확하지 않습니다.



https://charts.mql5.com/9/256/eurusd-h1-alpari-limited-3.png

이미지 반복.

이것:

 if (Time[ 0 ] == prevtime) return ;
   prevtime = Time[ 0 ];

하다

prevtime = Time[ 0 ];

결국

 
Artyom Trishkin :

이것:

하다

결국

어떻게 영향을 미칠 수 있습니까? 불행히도 아무것도 변경되지 않았습니다.

내가 상상하는 대로: 표시기가 로드되고 매 틱/바마다 조건 검사를 시작합니다. 조건이 충족되면 선택한 버퍼 또는 버퍼에 값을 넣은 다음 어드바이저는 버퍼 번호만큼 표시기에 액세스합니다. 특정 오프셋 값을 취합니다. 그래서?

 
Maxim Dobrovolskii :

어떻게 영향을 미칠 수 있습니까? 불행히도 아무것도 변경되지 않았습니다.

내가 상상하는 대로: 표시기가 로드되고 매 틱/바마다 조건 확인을 시작합니다. 충족되면 선택한 버퍼 또는 버퍼에 값을 넣은 다음 어드바이저는 버퍼 번호로 표시기에 액세스합니다. 특정 오프셋 값을 취합니다. 그래서?

표시기에 새로운 막대 컨트롤이 있는 이유는 무엇입니까? 복잡한 계산은 없는 것 같다
 
Victor Nikolaev :
표시기에 새로운 막대 컨트롤이 있는 이유는 무엇입니까? 복잡한 계산은 없는 것 같다
표시기를 사용하는 EA의 새 막대 제어.
사유: