EA를 생성하는 동안 이동 평균 문제를 연결했습니다..

 

내가 무엇을 잘못하고 있지?

이동 평균 을 담당하는 코드 부분의 스크린샷이 있습니다. 설정을 볼 수 있도록 모든 변수를 값으로 대체했습니다. 다른 스크린샷은 차트에 던진 MA와 MA 표시기(또는 4가지 유형 모두) 그리기의 차이점을 보여줍니다.

라이트 블루는 실제로 스무딩이며 테스터에서 생성된 MA 근처에 없습니다.
생성된 MA에 가장 가까운 것은 Simple이지만 일치하지 않습니다.

도대체 무슨 일이야?

파일:
ma_problem1.png  154 kb
ma_problem2.png  80 kb
 
angreeee :

내가 무엇을 잘못하고 있지?

이동 평균을 담당하는 코드 부분의 스크린샷이 있습니다. 설정을 볼 수 있도록 모든 변수를 값으로 대체했습니다. 다른 스크린샷은 차트에 던진 MA와 MA 표시기(또는 4가지 유형 모두) 그리기의 차이점을 보여줍니다.

라이트 블루는 실제로 스무딩이며 테스터에서 생성된 MA 근처에 없습니다.
생성된 MA에 가장 가까운 것은 Simple이지만 일치하지 않습니다.

도대체 무슨 일이야?

그리고 어떤 가치를 얻었습니까? 어디에서도 볼 수 없습니다.
 
angevoyageur :
그리고 어떤 가치를 얻었습니까? 어디에서도 볼 수 없습니다.

2개의 창을 비교합니다. 왼쪽에 하나는 전략 테스터에 의해 생성된 MA입니다. 그것은 거래 사이에 정확히 간다. 오른쪽에는 모든 유형의 MA370(SMA, EMA, SSMA 및 LWMA)이 있으며 그 중 아무 것도 왼쪽의 MA 370과 일치하지 않습니다. SSMA는 연한 파란색이며 백 테스트에서 생성된 MA 근처에 없습니다.

현재 "ma" 변수 값의 디버그 경고 라인이 추가된 다른 스크린샷 첨부(로그에 마지막 MA 값이 표시되고 오른쪽에 차트에 "투사된" Light Blue Smoothed 370 MA의 마지막 값이 표시됨)

차트의 MA는 종가 를 나타내고 코드 ma는 시가를 나타냅니다. 그러나 차트에서 이동 평균을 변경해도 시각적으로 큰 변화가 없었습니다. 그들은 여전히 첨부된 스크린샷과 동일하게 보입니다.

파일:
ma_problem3.png  142 kb
 
ea가 작동하지 않는다는 것은 아닙니다. 잘 작동하지만 디버깅할 때 생성된 MA가 원래 있어야 하는 것과 완전히 다르다는 것을 알았습니다. 내가 뭔가 잘못하고 있다는 것을 알지만, 그것이 무엇인지 아직도 모릅니다. 연한 파란색으로 부드럽게 된 ea의 설정에 대한 다른 스크린샷을 첨부하여 완전한 그림을 얻었습니다.
파일:
ma_problem4.png  66 kb
 
내가 찾은 가장 유사한 MA는 Smoothed MA 220이며 스크린샷이 첨부되어 있습니다. 아무 의미가 없습니다. :(하지만 아마도 일종의 단서 일 수 있습니다..
파일:
ma_problem5.png  57 kb
 

나는 이 문제를 별도의 EA로 분리했습니다.

#property copyright    "Grzegorz Korycki"
#property version      "1.0"
#property description "MA TEST"


#include <Trade/Trade.mqh>

   #define MAGICMA   20131002

double Bid;
double Ask;

   
double OnTester ()
{
     double custommax = TesterStatistics ( STAT_EQUITY_DDREL_PERCENT );
     return (custommax);
}

CTrade  trade;
   
void OnTick ()
{
   MqlTick last_tick;
   if ( SymbolInfoTick ( Symbol (),last_tick))
     {
      Bid = last_tick.bid;
      Ask = last_tick.ask;
     }
   start();
}
  
int OnInit ()
{
   trade.SetExpertMagicNumber(MAGICMA);
   int deviation= 99 ;
   trade.SetDeviationInPoints(deviation);
   trade.SetAsyncMode( false );
   return ( 0 );
}  
  
      
      
      
void trend1()
{

   int ma_temp;
   double ma_buffer[ 20 ];

   double ma;
   ma_temp= iMA ( Symbol (), PERIOD_D1 , 370 , 0 , MODE_SMMA , PRICE_OPEN );
   CopyBuffer (ma_temp, 0 , 0 , 1 ,ma_buffer);
   ma=ma_buffer[ 0 ];
   
   Alert ( "ma=" , ma);

}

      


void start()
{
   trend1();
}

테스트 쌍은 GBP/NZD입니다.
파일:
ma_test.mq5  2 kb
 

문제는 점점 더 이상해지고 있습니다. 2012년 위의 EA를 테스트할 때 MA에 대한 결과가 약간 다릅니다(저널 로그에서 실제 값을 볼 수 있음). 2013년에 테스트할 때와 다릅니다. 그 중 어느 것도 차트에 있는 370 SSMA에 가깝지 않습니다.

EA가 이와 같이 작동하도록 하는 것이 초기화 과정에서 발생하는 것일까요?

스크린샷 포함. 두 스크린샷을 비교할 때 그려진 선 은 다른 수준에 있으며 동일한 EA입니다.

파일:
 

기본적인 실수처럼 보입니다. 요소는 시계열(역순)처럼 인덱싱되지 않습니다.

그것을 수정하려면 이 함수를 호출 해야 합니다 ...

 ArraySetAsSeries (ma_buffer, true );
 
figurelli :

기본적인 실수처럼 보입니다. 요소는 시계열(역순)처럼 인덱싱되지 않습니다.

그것을 수정하려면 이 함수를 호출 해야 합니다 ...

내가 그것을 추가하면 나는 얻는다 :

cannot be used for static allocated array       ma_test.mq5     50        4

하지만 이 배열의 1프레임만 사용합니다. 그게 중요해? 그리고 왜 경고를 합니까?

이 줄을 추가한 후 아무 것도 변경되지 않았습니다(경고 및 백 테스트 모두 추가해도 효과가 없음을 나타냄)

문서에서는 상수와 함께 사용해야 한다고 명시하고 있습니다.

[...]

const datetime &time[],

[...]

ArraySetAsSeries (time, true ); 

내 ma_buffer는 가변 배열입니다.

 double ma_buffer[ 20 ];
 
angreeee :

내가 그것을 추가하면 나는 얻는다 :

하지만 이 배열의 1프레임만 사용합니다. 그게 중요해? 그리고 왜 경고를 합니까?

이 줄을 추가한 후 아무 것도 변경되지 않았습니다(경고 및 백 테스트 모두 추가해도 효과가 없음을 나타냄)

한 프레임만 복사하는 것이 옳고 이것이 근본 원인이 아닙니다(ma_buffer[20]의 선언이 이 사실로 내 주의를 돌렸습니다).

그러나 아래 줄을 Init()으로 이동하고 핸들을 전역으로 이동하는 것이 좋습니다. 이것이 실제로 문제의 원인이 되기 때문입니다(이 작업을 수행한 후 다시 테스트하십시오).

ma_temp= iMA ( Symbol (), PERIOD_D1 , 370 , 0 , MODE_SMMA , PRICE_OPEN );
 
figurelli :

한 프레임만 복사하는 것이 옳고 이것이 근본 원인이 아닙니다(ma_buffer[20]의 선언이 이 사실로 내 주의를 돌렸습니다).

그러나 아래 줄을 Init()으로 이동하고 핸들을 전역으로 이동하는 것이 좋습니다. 이것이 실제로 문제의 원인이 되기 때문입니다(이 작업을 수행한 후 다시 테스트하십시오).

귀하의 지침에 따라 스크립트를 수정했지만 문제가 여전히 지속됩니다 :(

이제 다음과 같이 보입니다.

#property copyright    "Grzegorz Korycki"
#property version      "1.0"
#property description "MA TEST"


#include <Trade/Trade.mqh>

   #define MAGICMA   20131002

double Bid;
double Ask;

   int ma_temp;
   double ma_buffer[ 20 ];

   
double OnTester ()
{
     double custommax = TesterStatistics ( STAT_EQUITY_DDREL_PERCENT );
     return (custommax);
}

   CTrade  trade;
   

   void OnTick ()
  {
   MqlTick last_tick;
   if ( SymbolInfoTick ( Symbol (),last_tick))
     {
      Bid = last_tick.bid;
      Ask = last_tick.ask;
     }
   start();
  }
  
int OnInit ()
  {
   trade.SetExpertMagicNumber(MAGICMA);
   int deviation= 99 ;
   trade.SetDeviationInPoints(deviation);
   trade.SetAsyncMode( false );
   ma_temp= iMA ( Symbol (), PERIOD_D1 , 370 , 0 , MODE_SMMA , PRICE_OPEN );


   return ( 0 );
   }  
  
      
      
      
void trend1()
{

   double ma;
   CopyBuffer (ma_temp, 0 , 0 , 1 ,ma_buffer);
   ma=ma_buffer[ 0 ];
   
   Alert ( "ma=" , ma);
}

void start()
{
         trend1();

}

누군가가 MA 값 생성기를 만드는 방법에 대해 초안 EA를 만들 수 있고 나는 둘 다 비교할 수 있습니다. 테스트하고 오류를 분리하십시오. (누군가가 몇 분 정도 여유가 있는 경우)

문제가 다른 쌍에서도 동일한지 아니면 매우 이상하기 때문에 이 한 쌍에서만 문제가 발생 하는지 잠시 후 답장하겠습니다.