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

 

비슷한 개체를 가진 큰 프로그램이 있습니다. 많은 유형을 의미합니다. 그러나 그들은 프로그램의 다양한 모듈에서 반복됩니다. 그리고 로그에서 예를 들어 테스트가 완료된 후 삭제되지 않은 개체 xxx개를 나에게 씁니다. 여러 유형의 경우도 마찬가지입니다.

개체를 삭제하지 않는 위치를 어떻게 찾습니까? 이를 위한 도구가 있습니까?

 
mbjen :

비슷한 개체를 가진 큰 프로그램이 있습니다. 많은 유형을 의미합니다. 그러나 그들은 프로그램의 다양한 모듈에서 반복됩니다. 그리고 로그에서 예를 들어 테스트가 완료된 후 삭제되지 않은 개체 xxx개를 나에게 씁니다. 여러 유형의 경우도 마찬가지입니다.

개체를 삭제하지 않는 위치를 어떻게 찾습니까? 이를 위한 도구가 있습니까?

1930 빌드 버그 .

 
테스트 EA는 어떻게 든 가격 아래에서 BUYSTOP을 열었습니다! 이제 수동으로 주문을 닫을 수도 없습니다. 어떻게 그게 가능합니까?
파일:
 

MQl5가 OpenCL을 지원한다는 사실에 놀랐습니다.

수백만 번의 실행이 수세기 동안이 아니라 적어도 몇 년 동안 계속되도록 이 기간 동안 로봇을 위한 최적화 프로그램을 작성한 사람은 정말 아무도 없었습니까? :)

 
Igor Makanu :

그것은 당신이 제시한 코드마다 계산 하고 SredRazmax 및 SredRazmin 변수를 초기화하지 않는다는 것을 의미합니다

사용하기 전에 변수를 초기화하는 것은 좋은 습관입니다. 이것이 대학에서 가르치는 방식이며 버그를 검색할 때 시간을 단축합니다 ;)

처음에 초기화했고 주석에 요소별 배열도 표시됩니다(0이 변경되지 않는지 확인하려면 공식이 작동해야 함). 전체 코드는 다음과 같습니다.

 //+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 1
//#property indicator_color1 Red
//#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth= 12 ;
extern int ExtDeviation= 5 ;
extern int ExtBackstep= 3 ;
extern int nn= 30 ;

int shift, ww= 0 ;
double zz, SredRazmax, SredRazmin, Sredn; 
double HZZ[];


int OnInit ()
  {
//--- indicator buffers mapping
     SetIndexBuffer ( 0 , HZZ);
 // SetIndexStyle(0, DRAW_SECTION);
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   for (shift = 0 ; shift <= Bars - 1 ; shift++)
  {
      zz = iCustom ( NULL , 0 , "ZigZag" , ExtDepth, ExtDeviation, ExtBackstep, 0 , shift);
           if (zz > 0.0 )
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for (ww= 0 ;ww<=nn;ww++)
       {
       if (HZZ[ww]>HZZ[ww+ 1 ]){SredRazmax += HZZ[ww];}     
       if (HZZ[ww]<HZZ[ww+ 1 ]){SredRazmin += HZZ[ww+ 1 ];}
      
       
   Comment ( "Средний размах = " , (SredRazmax-SredRazmin)/nn, "," ,HZZ[ 0 ], "," ,HZZ[ 1 ], "," ,HZZ[ 2 ], "," ,HZZ[ 3 ], "," ,HZZ[ 4 ]); 
        }      
   
//---------------------------------------------+
//расчет среднего значения           
//---------------------------------------------+      

   //    for(ww=0;ww<=nn;ww++){
   //    if(HZZ[ww]>HZZ[ww+1]){Sredn += HZZ[ww]-HZZ[ww+1];}     
   //    if(HZZ[ww]<HZZ[ww+1]){Sredn += HZZ[ww+1]-HZZ[ww];}
       
 // Comment("Средний размах = ", Sredn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 

            
         
     
       
//--- return value of prev_calculated for next call
     return ( 0 );

  }
 
Artyom Trishkin :

1930 빌드 버그 .

그것은 무엇입니까? MT4가 있습니다. 빌드 1090.

 
mbjen :

그것은 무엇입니까? MT4가 있습니다. 빌드 1090.

new로 생성된 객체는 객체 배열에 첨부하거나 OnDeinit()에서 독립적으로 제거해야 합니다.
 
Dmitry Belov :

처음에 초기화했고 요소별 배열이 주석에 표시됩니다(0이 변경되지 않는지 확인하려면 수식이 작동해야 함). 전체 코드는 다음과 같습니다.

처음이나 다른 곳에서 초기화하지 않고 방금 선언했습니다.

나는 사용하기 전에 썼다. 변수 SredRazmax, SredRazmin, Sredn이 배열 값의 합계인 경우 합계를 올바르게 계산하려면 변수를 재설정한 다음 배열 요소를 추가하고 이 변수에 저장해야 합니다.

저것들.

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
    SredRazmax = 0.0 ;
    SredRazmin = 0.0 ;
    Sredn = 0.0 ;
    .....

음, 두 번째로 궁금한 점은 표시기에서 OnCalculate()모든 틱에서 호출된다는 것입니다. 즉, 각 틱에서 지그재그 정점을 지속적으로 계산합니다. 초당 약 40-60회

 
Artyom Trishkin :
new로 생성된 객체는 객체 배열에 첨부하거나 OnDeinit()에서 독립적으로 제거해야 합니다.

깨달음을 주셔서 감사합니다. 하지만 당신은 적어도 내 질문을 읽어야 합니다.

 
mbjen :

깨달음을 주셔서 감사합니다. 하지만 당신은 적어도 내 질문을 읽어야 합니다.

읽고 답했습니다.