mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 51

 
fxsaber :

반갑습니다. 비결은 템플릿을 TParent에 적용하는 것 입니다. 전에 이런 것을 본 적이 없습니다.

글쎄, 그것은 다중 상속이 아닙니다. 이것은 실제로 Base -> A -> B -> C -> X 체인입니다. 그것으로 충분하다면 누가 직접 사용하지 못하도록 막습니까?

 
스타니슬라프 코로트키 :

글쎄, 그것은 다중 상속이 아닙니다. 이것은 실제로 Base -> A -> B -> C -> X 체인입니다. 그것으로 충분하다면 누가 직접 사용하지 못하도록 막습니까?

간결.

 
fxsaber :

간결.

나는 여기에 동의할 수 없다. IMHO, 4개의 후속 클래스를 직접 작성하는 것이 더 짧고 명확할 것입니다.

 
스타니슬라프 코로트키 :

나는 여기에 동의할 수 없다. IMHO, 4개의 후속 클래스를 직접 작성하는 것이 더 짧고 명확할 것입니다.

갑자기 여러 유산을 소개하는 경우 한 줄에 작은 교체만 하면 됩니다.

 class X : public INHERIT3(A, B, C)  {  };   // Объявляем класс, наследуемый от A, B, C
 
fxsaber :

갑자기 여러 유산을 소개하는 경우 한 줄에 작은 교체만 하면 됩니다.

설문 조사 외에도 포럼에는 옵션이 있는 설문 조사와 같은 요금 형식이 없지만 답변 계정에서 몇 가지 "kopecks"를 차단한다는 점은 유감입니다. 이벤트 후 올바른 옵션을 선택한 사람들은 패자의 베팅을 받았을 것입니다 ;-). 나는 그들이하지 않을 것이라고 생각합니다.

 
스타니슬라프 코로트키 :

글쎄, 그것은 다중 상속이 아닙니다. 이것은 실제로 Base -> A -> B -> C -> X 체인입니다. 그것으로 충분하다면 누가 직접 사용하지 못하도록 막습니까?

예, 하지만 여기서 전체 기능은 모든 소스 클래스가 템플릿으로 설정되고 사용된다는 것입니다. 따라서 이 체인은 임의의 순서로 지정할 수 있습니다. 그리고 사실 다중 상속과 근본적인 차이는 없습니다. 이미 썼듯이 클래스에는 함정이 있을 수 있습니다. 그러나 인터페이스를 사용하면 모든 것이 동일합니다. 작은 목발이 될 것처럼 보이는 유일한 것이지만 모든 사람이 체크 무늬를할지 여부를 스스로 결정합니다)
 

그리고 더 추가하겠습니다. 다중 상속에 대한 완전한 대안(더 유연한 옵션 포함)은 캐스트 연산자를 오버로드하여 구현할 수 있습니다. 그러나 MQ는 오랫동안 요청했지만 어떤 이유로 이러한 오버로드 기능을 추가하지 않습니다. 그리고 나는 그들에게서 구체적인 대답을 듣지도 않았고, 그냥 무시했습니다.

 

상황이 있다

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2017.07.24 09:27

EA는 거래 내역에 대한 빠른 작업이 구현되는 1641용으로 컴파일됩니다.

최적화할 때 기록이 매우 느리게 작동하는 빌드 1596의 에이전트에 도달하여 최적화가 상당히 느려지는 것이 가능합니까?

좀 더 일반적인 경우로, 클라우드에서 최적화하면 시간뿐 아니라 계산 측면에서도 다른 결과가 나오는 경우가 있습니다. 때로는 최적화 결과가 단일 실행과 동일하지 않다는 것을 들을 수 있습니다.

이는 최적화에 관련된 에이전트와 단일 실행에 참여하는 로컬 에이전트의 빌드 번호가 다를 수 있기 때문일 수 있습니다.

그리고 각 빌드에는 자체 버그가 있습니다. 예를 들어, 여기에 현재 관련이 있는 버그가 있지만 조금 더 일찍 빌드에는 없었습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2017.07.17 23:08

다시 한번, 테스터에서 HistorySelect 오류가 발생했습니다. 1626년에는 그렇지 않았던 것 같습니다. 1629년 - 있습니다.

 #include <Trade\Trade.mqh>

void OnTick ()
{
   static CTrade Trade;

   const datetime NowTime = TimeCurrent ();
  
   if (Trade.Buy( 1 ) && Trade.PositionClose( _Symbol ) && HistorySelect (NowTime, NowTime))
  {
     Print ( HistoryDealsTotal ()); // 0 - это при том, что мы открыли и закрыли позицию в NowTime-время
      
     ExpertRemove ();
  }
}

따라서 Expert Advisor가 최적화 중에 Agent b1626을 적중하면 하나의 결과를 표시할 수 있으며 로컬 Agent b1641에서 단일 실행을 실행할 때 완전히 다른 결과를 표시합니다.

이를 통해 우리는 최적화 전에 Expert Advisor를 최적화하려는 빌드와 그렇지 않은 빌드를 알고 있어야 한다는 결론을 내릴 수 있습니다.

다행히 개발자는 부적합한 에이전트에 대한 커터( INIT_AGENT_NOT_SUITABLE )를 제공했습니다.


따라서 OnInit for Cloud 최적화에서 TerminalInfoInteger( TERMINAL_BUILD )가 필요한 값과 일치하는지 확인하도록 등록하는 것이 좋습니다.

귀하에게 적합한 수표 목록을 찾는 것은 거의 불가능하므로 그러한 것을 처방해야 할 가능성이 큽니다.

 int OnInit ( void )
{
   // Если Агент не совпадает с билдом компиляции, отказываемся от его услуг
   if ( TerminalInfoInteger ( TERMINAL_BUILD ) != __MQLBUILD__ )
     return ( INIT_AGENT_NOT_SUITABLE );
//....

그러나 그것은 마찬가지로 나쁜 결정입니다. 보다 유연한 방법은 최적화 중에 에이전트에 빌드 번호를 보내는 것 입니다.


일반적으로 조심하십시오.


추신. 에이전트의 각 실행에 대한 거래 보고서를 생성하고 최적화 중에 즉시 수신할 수 있습니다. 이는 클라우드 에이전트의 결과가 단일 실행에서 로컬 결과와 다른 이유를 나중에 이해하는 데 도움이 될 수 있습니다. 이 라이브러리 를 사용하면 최적화 및 단일 실행 중에 이러한 보고서를 자동으로 생성할 수 있습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

레나트 팻쿨린 , 2017.07.25 08:26

우리는 주기적으로 클라우드 작업에서 오래된 빌드를 차단하고 업데이트를 기다리며 매우 빠르고 눈에 띄지 않게 진행됩니다.

이것은 모든 버전에서 수행되는 것은 아니지만 변경 사항의 중요성에 따라 다릅니다.
Report
Report
  • 투표: 12
  • 2017.07.19
  • fxsaber
  • www.mql5.com
Библиотека для MetaTrader 4/5, которая позволяет формировать отчеты по истории торгов.
 

디버깅할 때(디버깅할 필요는 없음) 테스터에서 테스트 간격을 빠르게 줄여야 할 때 이러한 기능을 사용합니다.

 // Выгружает эксперт, если количество сделок в истории больше DealsNum.
void ConditionStopExpert( const int DealsNum = INT_MAX )
{
   if ((DealsNum != INT_MAX ) && :: HistorySelect ( 0 , :: TimeCurrent ()) && :: HistoryDealsTotal () > DealsNum)
    :: ExpertRemove ();

   return ;  
}

// Выгружает эксперт, если с момента запуска прошло AmountHours-часов.
void ConditionStopExpert( const double AmountHours )
{
   static datetime FirstTime = :: TimeCurrent ();
  
   if (:: TimeCurrent () > FirstTime + ( datetime )(AmountHours * 3600 ))
    :: ExpertRemove ();

   return ;  
}
 
fxsaber :

디버깅할 때(디버깅할 필요는 없음) 테스터에서 테스트 간격을 빠르게 줄여야 할 때 이러한 기능을 사용합니다.

코드를 수정하십시오. 첫 번째 함수에 DealsNum 대신 숫자 5가 있습니다.