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

 
Alexey Viktorov :

시간에서 시간을 뺀 시간을 PeriodSeconds()로 나눈 값

이것은 금요일-월요일 전환에서 잘못된 길이일 수 있습니다(또는 기록에 누락된 막대가 있는 경우).

시점을 읽은 다음 막대를 결정하는 것이 좋습니다.

 datetime time1=( datetime ) ObjectGetInteger (ExtChartID,name, OBJPROP_TIME , 0 );
datetime time2=( datetime ) ObjectGetInteger (ExtChartID,name, OBJPROP_TIME , 1 );

int bar1= iBarShift ( _Symbol , _Period ,time1);
int bar2= iBarShift ( _Symbol , _Period ,time2);
 
Taras Slobodyanik :

이것은 금요일-월요일 전환에서 잘못된 길이일 수 있습니다(또는 기록에 누락된 막대가 있는 경우).

시점을 읽은 다음 막대를 결정하는 것이 좋습니다.

동의한다. 나는 나 자신과 나의 두뇌를 괴롭히지 않았다. 그런 다음 날짜 사이 의 막대 수 를 취하는 것이 좋습니다.

 int    Bars ( 
   string            symbol_name,     // имя символа 
   ENUM_TIMEFRAMES   timeframe,       // период 
   datetime          start_time,       // с какой даты 
   datetime          stop_time         // по какую дату 
   );
 
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


이 부분에 오류가 있습니다



로봇을 시작하는 방법을 알려주세요


 
Ivan Butko :

이 부분에 오류가 있습니다

로봇을 시작하는 방법을 알려주세요

여기에서 변수가 선언되고 즉시 분할됩니다.

 double spred = spred/ Point *(tot- 1 ); 

실수로 컴파일러는 이 변수(spred)를 선언되지 않은 것으로 인식합니다. 이것은 (변수)가 초기화되지 않았기 때문에 적어도 좋지 않습니다. 전역 변수 가 아니기 때문에 정의되지 않은 값이 있을 수 있습니다 ...

더 일찍 선언하고 값을 지정하십시오.
 
Yevhenii Levchenko :

여기에서 변수가 선언되고 즉시 분할됩니다.

실수로 컴파일러는 이 변수(spred)를 선언되지 않은 것으로 인식합니다. 이것은 (변수)가 초기화되지 않았기 때문에 적어도 좋지 않습니다. 전역 변수 가 아니기 때문에 정의되지 않은 값이 있을 수 있습니다 ...

더 일찍 선언하고 값을 지정하십시오.

유진, 진심으로!
감사합니다.

 

MQL5에서 수행할 작업 ...

 if ( BarsCalculated (handle) == - 1 )

... 이미 1분의 영역이 지났고 문제는 동일합니다. 왜 그렇게 오래?


오류 4806 - 요청한 데이터를 찾을 수 없습니다... - 조언자가 데이터를 찾도록 하는 방법은 무엇입니까?

 
Ivan Butko :
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


이 부분에 오류가 있습니다



로봇을 시작하는 방법을 알려주세요


61행, 이것은 어느 행입니까?
 

메모리 부족 오류를 잡는 방법은 무엇입니까?


왜 그런 메시지가 있습니까?


약 20,000줄 의 프로그램을 작성했습니다 . 다양한 클래스, 배열, 구조.

대략 2,3일의 시간, 기억중의 메시지가 벗겨집니다.

어떤 기능에서 메모리 누수가 발생하는지 파악하는 방법을 모르겠습니다.

 
Sergey Likho :

메모리 부족 오류를 잡는 방법?


왜 그런 메시지가 있습니까?


약 2만 줄 의 프로그램을 작성했습니다 . 다양한 클래스, 배열, 구조.

대략 2,3일의 시간, 기억중의 메시지가 벗겨집니다.

어떤 기능에서 메모리 누수를 잡아야 하는지 모르겠습니다.

각각의 새 항목이 일치하도록 주의 깊게 살펴보십시오. 당신의 삭제

즉, 코드를 주의 깊게 읽어야만 합니다. 더 쉽고 재미있게 읽을 수 있도록 댓글을 동시에 달아주세요 :-)

각 클래스에 대한 테스트 케이스 스크립트를 작성하고 이러한 방식으로 클래스 내부 누수를 확인하는 것도 좋은 생각입니다.

 
Maxim Kuznetsov :

각각의 새 항목이 일치하도록 주의 깊게 살펴보십시오. 당신의 삭제

즉, 코드를 주의 깊게 읽어야만 합니다. 더 쉽고 재미있게 읽을 수 있도록 댓글을 동시에 달아주세요 :-)

각 클래스에 대한 테스트 케이스 스크립트를 작성하고 이러한 방식으로 클래스 내부 누수를 확인하는 것도 좋은 생각입니다.

신규, 삭제는 사용하지 마십시오. 클래스 요소는 맨 처음에 선언되며 다시 만들지 않습니다.

기본적으로 배열 작업이 많습니다.


테스트 케이스 스크립트란 무엇입니까?