MetaTrader 4 Build 529 베타가 새로운 컴파일러와 함께 출시됨 - 페이지 48

 
Alexander :
수정했습니다. 수정 사항은 다음 빌드에서 사용할 수 있습니다. 하지만! 업데이트 메커니즘의 특성으로 인해 결과는 빌드를 통해서만 눈에 띄게 됩니다(즉, 가장 가까운 빌드에서 다음 빌드로 순서대로 업데이트할 때).
논리적으로. 고맙습니다.
 
Interesting :
계정 기록의 시간 언제 수정합니까? 글쎄, 나는 가장 가까운 분까지 역사를 보는 것에 이미 지쳤습니다 ...
이미. 오늘의 빌드에서는 초 단위까지 정확합니다.
 

509에서 컴파일된 이 코드가 전문가로부터 호출될 때 작동하는 이유를 이해하도록 도와주세요.

 //+------------------------------------------------------------------+
//|                                                FlatIndicator.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_minimum 0.0
#property indicator_buffers 3
#property indicator_color1 Silver
#property indicator_color2 FireBrick
#property indicator_color3 Lime

extern int ATR_peroids1 = 13 ;
extern int StdDev_peroids1 = 30 ;
extern int ATR_peroids2 = 40 ;
extern int StdDev_peroids2 = 100 ;
extern double extValue_1 = 1.4 ;
double extValue_2 = 0.5 ;
bool suppressor = TRUE;
double bufer_1[];
double bufer_2[];
double bufer_3[];

int init() {
   SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 , bufer_1);
   SetIndexStyle( 1 , DRAW_LINE , STYLE_SOLID , 4 );
   SetIndexBuffer ( 1 , bufer_2);
   SetIndexStyle( 2 , DRAW_LINE );
   SetIndexBuffer ( 2 , bufer_3);
   return ( 0 );
}

int deinit() {
   return ( 0 );
}

int start() {
   int shift_val;
   double locValue_1;
   double locValue_2;
   double locValue_3;
   double locValue_4;
   double locValue_5;
   double locValue_6;
   double locValue_7;
   double locValue_8 = 0 ;
   int countBars = IndicatorCounted();
   if (countBars < 0 ) return (- 1 );
   if (countBars > 0 ) countBars--;
   int CalcBars = Bars - countBars;
   int MaxBars = MathMax (ATR_peroids2, StdDev_peroids2);
       if (CalcBars > MaxBars + 5 ){shift_val = CalcBars - MaxBars;}
         else {shift_val = CalcBars;}
       for ( int shift = shift_val; shift >= 0 ; shift--) {
         locValue_1 = iATR ( NULL , 0 , ATR_peroids1, shift);
         locValue_2 = bufer_3[shift + 1 ];
         locValue_3 = bufer_3[shift + 3 ];
         locValue_4 = NormalizeDouble (locValue_1, Digits );
       if (suppressor){ locValue_8 = locValue_1 / iATR ( NULL , 0 , ATR_peroids2, shift) + extValue_2 * (locValue_2 - locValue_3);}
         else {locValue_8 = locValue_1 / iATR ( NULL , 0 , ATR_peroids2, shift);}
         locValue_5 = iStdDev ( NULL , 0 , StdDev_peroids1, 0 , MODE_LWMA , PRICE_TYPICAL , shift);
         locValue_6 = NormalizeDouble (locValue_5, Digits );
         locValue_5 /= iStdDev ( NULL , 0 , StdDev_peroids2, 0 , MODE_LWMA , PRICE_TYPICAL , shift);
         locValue_7 = extValue_1;
         locValue_7 -= locValue_5;
       if (locValue_8 > locValue_7) {
         bufer_3[shift] = locValue_8;
         bufer_2[shift] = - 1 ;
      } else {
         bufer_3[shift] = locValue_8;
         bufer_2[shift] = 0.10 ;
      }
      bufer_1[shift] = locValue_7;
   }
   return ( 0 ); 
}

EA에서 코드는 다음과 같이 호출되고 처리됩니다.

   FlatIndi = 0.0 ;
   FlatIndi = iCustom ( Symbol (), 0 , "FlatIndicator" ,ATR_peroids1, StdDev_peroids1, ATR_peroids2, StdDev_peroids2, extValue_1, 1 , 0 );   
   if (FlatIndi >= 0.0 ){ return ( 0 );}

그러나 코드가 빌드 540의 ME에서 컴파일되면 EA 로그 파일은 다음과 같이 작성합니다.

 17 : 47 : 53.221 MetaTrader 4 at FOREX.com build 540 started (XXX)
17 : 47 : 56.331 'xxxxx' : login
17 : 47 : 57.972 'xxxxx' : login
17 : 47 : 58.554 'xxxxx' : previous successful authorization performed from xx.xx.x.xxx
17 : 48 : 03.538 Expert 007 ea ,: loaded successfully
17 : 48 : 13.821 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.821 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.821 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.821 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.837 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.837 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.837 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.837 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.837 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.837 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.837 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.837 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.852 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.852 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.852 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.852 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.852 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.852 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.852 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.852 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.852 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.852 Not enough memory for custom indicator FlatIndicator EURUSDFXF,M5
17 : 48 : 13.868 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.868 Not enough memory for indicator Average True Range (EURUSDFXF,M5)
17 : 48 : 13.868 Memory handler: cannot allocate 1286704 bytes of memory
17 : 48 : 13.868 Not enough memory for indicator Average True Range (EURUSDFXF,M5)

EA가 제대로 작동하지 않거나 전혀 작동하지 않습니다.

 
VOLDEMAR :

메시지 홍수


와인 7 이하의 가정용 컴퓨터에서도 동일한 문제이며, 빌드 541 코드 변경 여부에 관계없이 두 번마다 나타납니다.

 

전략 테스터의 최적화가 작동하지 않습니까?

최적화를 위해 표준 Expert Advisors를 테스트하고 모든 실행에서 결과는 0입니다.

Expert Advisor를 최적화하고 매개변수가 변경되더라도 각 실행에서 동일한 결과를 얻습니다.

시험 장치

터미널 빌드 241

 
HIDDEN :

전략 테스터의 최적화가 작동하지 않습니까?

최적화를 위해 표준 Expert Advisors를 테스트하고 모든 실행에서 결과는 0입니다.

EA를 최적화하고 매개변수가 변경되더라도 각 실행에서 동일한 결과를 얻습니다.

터미널 빌드 241


오빠, 과거의 목소리.... 1차 빌드의 경우는 없나요?
 
그런 빌드는 없었습니다(241). 아마도 541을 의미했을 것입니다.
 
VOLDEMAR :

오빠, 과거의 목소리.... 1차 빌드의 경우는 없나요?

오래된 빌드를 찾을 수 있으며 작동하지 않을 것입니다.

5MB의 "1, 0, 0, 1" 버전이 있습니다. 필요?

:)

 

충돌의 가능한 이유 제안

인디케이터에서는 OOP를 통해 주요 계산 기능을 디자인했습니다.

모든 것이 잘 작동합니다(3000바에서 계산 속도가 2-3배 증가했습니다).

그것은 2개의 표시기를 실행하려고 할 때입니다. 충돌하고 모든 것이 떨어집니다.

 
ALXIMIKS :

충돌의 가능한 이유 제안

인디케이터에서는 OOP를 통해 주요 계산 기능을 디자인했습니다.

모든 것이 잘 작동합니다(3000바에서 계산 속도가 2-3배 증가했습니다).

그것은 2개의 표시기를 실행하려고 할 때입니다. 충돌하고 모든 것이 떨어집니다.

코드 없이 어떻게 도울 수 있습니까?