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

 
Alexey Viktorov # :

누군가가 당신을 나쁘게 가르쳤습니다. _LastError 변수는 다음 오류가 발생할 때까지 수신된 값을 저장합니다.


예를 들어 메인 코드의 시작 부분에서 다음 오류가 발생합니다.

ERR_INVALID_DATETIME

4010

잘못된 날짜 및/또는 시간 값


그런 다음 코드가 개체를 만들고 _LastError를 다음으로 덮어씁니다.

ERR_OBJECT_NOT_FOUND

4202

그래픽 개체를 찾을 수 없습니다.


평소처럼 _LastError 검사가 코드 끝에 있으면 4202가 표시되고 무시합니다. 즉, 오류 4010은 눈에 띄지 않게 됩니다. 내가 어디에서 잘못 되었습니까?

알렉세이 빅토로프


시장의 요구 사항은 브로커\ds 서버에서 수신된 실행 오류가 없다는 것입니다.

감사합니다, 저는 이것을 몰랐습니다. 모든 오류가 금지되어 있다고 생각했습니다.

 
leon_17 # :

예를 들어 메인 코드의 시작 부분에서 다음 오류가 발생합니다.

ERR_INVALID_DATETIME

4010

잘못된 날짜 및/또는 시간 값


그런 다음 코드가 개체를 만들고 _LastError를 다음으로 덮어씁니다.

ERR_OBJECT_NOT_FOUND

4202

그래픽 개체를 찾을 수 없습니다.


평소처럼 _LastError 검사가 코드 끝에 있으면 4202가 표시되고 무시합니다. 즉, 오류 4010은 눈에 띄지 않게 됩니다. 내가 어디에서 잘못 되었습니까?

감사합니다, 저는 이것을 몰랐습니다. 모든 오류가 금지되어 있다고 생각했습니다.

정확히. 당신은 틀리지 않습니다 ...

 

안녕하세요, 누구든지 조언 할 수 있습니다.

특히 배열에 각 막대의 시간 값을 씁니다. 차트의 막대는 3000개로 제한됩니다.

일:

- 각각의 새로운 막대로 값 배열을 이동합니다.

 void CNewBar::PriceHL2()
  {
   int start= 0 ;
   ArrayResize ( this .m_tim_pr_hl2, this .m_rt);
  
   if ( this .m_pc!= 0 )
     {
      start= this .m_pc;
       ArrayCopy ( this .m_tim_pr_hl2, this .m_tim_pr_hl2, 0 , this .m_rt- this .m_pc);
     }  
   for ( int b= start; b < this .m_rt; b++)
     {
       this .m_tim_pr_hl2[b]= iTime ( this .m_symbol, this .m_timeframe, this .m_rt-b);
     }
  }

제대로 작동하게 할 수 없습니다.

(this.m_rt-this.m_pc)=1인 경우 새 막대에서 배열을 이동하는 것이 맞습니까?

 ArrayCopy ( this .m_tim_pr_hl2, this .m_tim_pr_hl2, 0 , this .m_rt- this .m_pc); // this.m_rt-this.m_pc=1
 
Mikhail Toptunov # :

안녕하세요, 누구든지 조언 할 수 있습니다.

특히 배열에 각 막대의 시간 값을 씁니다. 차트의 막대는 3000개로 제한됩니다.

일:

- 각각의 새로운 막대로 값 배열을 이동합니다.

제대로 작동하게 할 수 없습니다.

(this.m_rt-this.m_pc)=1인 경우 새 막대에서 배열을 이동하는 것이 맞습니까?

즉, 배열의 크기는 정확히 3000이어야 하며, 새로운 막대가 형성되면 0인 인덱스를 먼저 다시 작성해야 하고 …

내가 올바르게 이해했다면 왜 순환합니까? 첫 번째 인덱스부터 시작하여 인덱스가 0인 배열 자체에 복사한 다음 마지막 인덱스에 새 값을 입력하기만 하면 됩니다.

 
Alexey Viktorov # :

객체가 발견되지 않으면 이것은 객체 검색 오류입니다 ...

ERR_OBJECT_NOT_FOUND

4202

그래픽 개체를 찾을 수 없습니다.


그에게 경고 할 필요가 없습니다 ...

나는 몇 가지 테스트를 했습니다 ... 여기에 무슨 일이 일어납니다. MQL5에서는 객체를 생성할 때 ObjectFind()를 사용할 필요가 없습니다.
개체는 존재 여부에 대한 사전 검사 없이 생성될 수 있으며(단순히 ObjectCreate를 통해) OnTick 내부에서도 이러한 코드는 _LastError 오류를 발생시키지 않습니다.

MQL5 시스템 코드의 깊이에서 구현되는 방법을 모르겠습니다. 아마도 객체가 이미 존재하지 않는 경우에만 생성될 것이라는 일종의 검사가 이미 있을 것입니다. 그러나 적어도 MQL5 ObjectFind() 내부에 객체를 생성할 때   그냥 필요하지 않습니다. 그리고 분명히 모든 속성은 매 틱마다 지속적으로 업데이트 됩니다.

MQL4에 대해 말할 수 없는 것. 이미 존재하는 객체 위에 객체를 생성하면 오류 4200( "객체가 이미 존재합니다")이 발생합니다. 즉, 생성하기 위해서는 ObjectFind()의 사용이 이미 필요하다. 동시에 _LastError 오류를 생성하지 않고 지속적인 재업데이트에서 속성을 닫을 수 있는 간단한 기회로 남아 있습니다.

내 발견을 확인하십시오.

 
Alexey Viktorov # :

즉, 배열의 크기는 정확히 3000이어야 하며, 새로운 막대가 형성되면 0인 인덱스를 먼저 다시 작성해야 하고 …

내가 올바르게 이해했다면 왜 순환합니까? 첫 번째 인덱스부터 시작하여 0 인덱스에서 배열 자체를 복사한 다음 마지막 인덱스에 새 값을 입력하기만 하면 됩니다.

글쎄요, 모든 것이 명확한 것 같지만 예를 들어 지연이 나타나면 두 개의 막대가 나타나면 적어 둡니다.

이해해 주셔서 감사합니다. CopyTime을 통해 시도해 보겠습니다.

 
leon_17 # :

나는 몇 가지 테스트를 했습니다 ... 여기에 무슨 일이 일어납니다. MQL5에서는 객체를 생성할 때 ObjectFind()를 사용할 필요가 없습니다.
개체는 존재 여부에 대한 사전 검사 없이 생성될 수 있으며(단순히 ObjectCreate를 통해) OnTick 내부에서도 이러한 코드는 _LastError 오류를 발생시키지 않습니다.

MQL5 시스템 코드의 깊이에서 구현되는 방법을 모르겠습니다. 아마도 객체가 이미 존재하지 않는 경우에만 생성될 것이라는 일종의 검사가 이미 있을 것입니다. 그러나 적어도 MQL5 ObjectFind() 내부에 객체를 생성할 때   그냥 필요하지 않습니다. 그리고 분명히 모든 속성은 매 틱마다 지속적으로 업데이트 됩니다.

MQL4에 대해 말할 수 없는 것. 이미 존재하는 객체 위에 객체를 생성하면 오류 4200( "객체가 이미 존재합니다")이 발생합니다. 즉, 생성하기 위해서는 ObjectFind()의 사용이 이미 필요하다. 동시에 _LastError 오류를 생성하지 않고 지속적인 재업데이트에서 속성을 닫을 수 있는 간단한 기회로 남아 있습니다.

내 발견을 확인하십시오.

그것은 전혀 실수에 관한 것이 아닙니다. 사실은 개체를 생성한 후 특정 속성이 개체에 할당되고 변경하지 않고 속성을 재정의하는 데 시스템 시간과 리소스를 낭비하는 이유입니다. 존재 여부를 확인하는 것이 훨씬 저렴하며 개체가 존재하는 경우 변경해야 하는 속성에만 새 속성을 할당합니다. 예를 들어, 텍스트 레이블이나 레이블, 종종 이러한 개체의 텍스트만 변경하면 됩니다. 그리고 다른 모든 것은 그대로 남아 있습니다 ...
 
Mikhail Toptunov # :

글쎄요, 모든 것이 명확한 것 같지만 예를 들어 지연이 나타나면 두 개의 막대가 나타나면 적어 둡니다.

이해해 주셔서 감사합니다. CopyTime을 통해 시도해 보겠습니다.

글쎄, CopyTime을 통해라면 전혀 문제가 없습니다. 현재 3000개의 막대에서 복사하면 됩니다.

 

보류 주문 을 하거나 시장에서 포지션을 열 때 프로그램 코드에서 일반 후행 정지 수준을 설정하는 방법은 무엇입니까?

수동으로 수행하는 방법은 이해할 수 있습니다. 비정상적인 후행 정지에 대한 프로그램은 관심이 없습니다.

미리 감사드립니다.

 
   for ( int symbols; symbols < SymbolsTotal ( true ); symbols++) 
      {
         Print ( SymbolName (symbols , true ));
      }

이 디자인이 작동하지 않는 이유는 무엇입니까? 오류는 어디에...(로그가 비어 있음)


그리고 enam도 비어 있습니다.

 enum c_mode
  {
   Auto,
   Manual,    
  };

input c_mode MODE         = Auto;

if (MODE==Auto) 
      {
       Print ( "MODE=Auto" );
      } 
사유: