오류, 버그, 질문 - 페이지 452

 

고맙습니다!

 
alexvd :

예, 첫 번째 요점에서 틀렸습니다. 설명에서 정확히 무엇이 잘못되었는지 설명 하십시오. 사본 은 무엇을 반환해야 합니까?

그리고 연결을 희생하여 귀하의 경우 다음과 같이 작성해야 합니다.

내가 설명한다. 텍스트로 작성 " 지정된 위치에서 변경된 문자 값으로 문자열의 복사본을 반환합니다. " 함수의 프로토타입은 bool StringSetCharacter (...)입니다. 분명히 문자열을 bool에 채울 수는 없습니다. 부울 값이 실제로 반환되면 이것은 아마도 성공/오류의 표시일 것입니다. 일반적으로 문서의 다른 페이지에는 별도의 섹션 반환 값 이 있지만 이 페이지에는 없습니다. 반환 값이 아니라 함수의 의미에 관한 제안을 공식화하기 위해 텍스트 설명에 추가해야 합니다.


연결과 관련하여 작성한 내용이 정확 하면 StringConcatenate 함수 의 설명도 변경해야 합니다. 설명에 따르면 string_var 매개변수는 [in][out] 연결의 결과로 형성될 문자열입니다. 당신은 이 매개변수가 [out]일 뿐이라고 말합니다.

 
새로운 질문입니다. BarsCalculated 가 0을 반환할 때 상황은 무엇을 의미합니까? 이것은 오류가 아닌 것 같지만 어떻게 0 막대를 계산할 수 있습니까? 사실 아무 것도 계산되지 않았습니다. 실수가 아닌 것은?
 
MoneyJinn :

불행히도 문제는 터미널이 "결과" 탭에서만 댓글 로 포지션 을 청산하라는 명령을 게시한다는 것입니다.

해당 주문은 HistoryDealsTotal() 목록에 추가되지 않습니다.

마침표가 있는 기간을 선택하더라도 HistoryOrdersTotal() 주문의 일반 목록에는 순서가 없습니다.

'테스트 종료'까지 마감되는 경우 주문과 거래가 모두 기록에 남을 수 있음을 감히 말씀드립니다. 내 다중 통화에서 각 기호에 대해 받은 이익이 계산됩니다. '테스트 종료'까지 테스터에서 마감된 거래를 고려하기 위해 이러한 거래에 대한 조정이 드인에서 이루어집니다. 모든 기기의 총 이익은 테스트 보고서의 데이터와 일치합니다. 다음은 코드입니다.

       if ( HistorySelect ( 0 , TimeTradeServer ()))   // Поправка для 'end of test'
        {
         int DeelsTotal= HistoryDealsTotal ();
         for ( int i= 0 ;i<SymbolsNumber;i++)
           {
             ulong ticket= HistoryDealGetTicket (DeelsTotal- 1 -i);
             string comment= HistoryDealGetString (ticket, DEAL_COMMENT );
             if (comment!= "end of test" && StringSubstr (comment, 0 , 3 )!= "so " )
               break ;
             for ( int j= 0 ;j<SymbolsNumber;j++)
              {
               if ( HistoryDealGetString (ticket, DEAL_SYMBOL )!=m_expert[j].Name())
                 continue ;
               m_Profit[j]=m_Profit[j]+ HistoryDealGetDouble (ticket, DEAL_PROFIT )+   // Добавим профит закрытой позиции для "end of test" и "so"
                           HistoryDealGetDouble (ticket, DEAL_SWAP )+ HistoryDealGetDouble (ticket, DEAL_COMMISSION );
              }
           }
        }
 

동료들이여, 전략 테스터에서 SymbolInfoSessionTrade 가 작동하도록 하는 방법이 있습니까?

진부한 기록이 작동하지 않습니다:

 void OnTick () {
   datetime from, to;
   if ( SymbolInfoSessionTrade ( _Symbol , FRIDAY , 0 , from, to)) Print ( "WOW!" );
}
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - Документация по MQL5
 

가능하다면 다른 질문입니다. new 연산자의 의미가 무엇인지 알고 싶습니다 ??? 그의 생각은 무엇입니까? 왜 일반적인 방법으로 객체를 생성하지 않습니까??? 결국 블록이 완료된 후에는 new를 통해 선언된 객체에 대한 접근을 잃게 되는데, 그렇다면 왜 굳이 필요할까요???

PS 솔직히, 나는 문서에서 그것을 찾지 못했습니다 :)

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
 
220Volt :

가능하다면 다른 질문입니다. new 연산자의 의미가 무엇인지 알고 싶습니다 ??? 그의 생각은 무엇입니까? 왜 일반적인 방법으로 객체를 생성하지 않습니까??? 결국 블록이 완료된 후에는 new를 통해 선언된 객체에 대한 접근을 잃게 되는데, 그렇다면 왜 굳이 필요할까요???

모든 것이 지나갑니다. 아무것도 할 필요가 없다는 뜻인가요...?


추신 솔직히, 나는 문서에서 그것을 찾지 못했습니다 :)

나는 당신을 믿습니다... :))
 
Valmars :

고맙습니다! 이해했다. TimeCurrent() 대신 TimeTradeServer ( ) 를 사용하는 것이 필요하고 충분합니다.

거래 주의 끝에 새로운 시세가 없으므로 TimeCurrent()가 오랫동안 업데이트되지 않습니다.

Expert Advisor가 초기화 해제되면 TimeCurrent()는 시간 23:00을 반환합니다. TimeTradeServer() - 테스트 종료 시간과 일치하는 23:59.

 
MoneyJinn :

고맙습니다! 이해했다. TimeCurrent() 대신 TimeTradeServer ( ) 를 사용하는 것이 필요하고 충분합니다.

거래 주의 끝에 새로운 시세가 없으므로 TimeCurrent()가 오랫동안 업데이트되지 않습니다.

요점은 따옴표가 아니라 '테스트 종료' 거래가 테스트 기간이 끝난 후에 이뤄진다는 점이다. 따라서 'OnTick'도 'OnTimer'도 히스토리에서 가져올 수 없습니다. 적어도 1년 전에는 그랬기 때문에 나는 그들의 수표를 'OnDeinit'으로 옮겼습니다.
 
220Volt :

가능하다면 다른 질문입니다. new 연산자의 의미가 무엇인지 알고 싶습니다 ??? 그의 생각은 무엇입니까? 왜 일반적인 방법으로 객체를 생성하지 않습니까??? 결국 블록이 완료된 후에는 new를 통해 선언된 객체에 대한 접근이 없어지게 되는데, 그렇다면 왜 굳이 필요할까요???

PS 솔직히, 나는 문서에서 그것을 찾지 못했습니다 :)

동적 개체를 만들지 마십시오. 지금 및 이러한 개체와 관련된 다른 모든 것을 사용할 필요가 없습니다(그렇다면 많은 것을 할 수 없을 것입니다).

분명히 지금의 의미가 아니라 동적 객체로 작업하는 의미가 무엇인지 이해하고 싶습니다 ...

동적으로 할당된 객체의 초기화 및 초기화 해제

객체 포인터는 포인터를 선언하는 것이 해당 객체를 초기화하는 것을 수반하지 않기 때문에 특별한 경우 입니다. 동적으로 할당된 객체는 클래스의 인스턴스가 new 연산자 로 생성될 때만 초기화됩니다 . 객체 초기화에는 해당 클래스의 생성자를 호출하는 작업이 포함됩니다 . 클래스에 해당 생성자가 없으면 단순 유형 을 가진 해당 멤버가 자동으로 초기화되지 않습니다. string , 동적 배열복합 객체 유형의 멤버는 자동으로 초기화됩니다.

포인터는 로컬 또는 전역적으로 선언될 수 있으며 NULL 또는 동일하거나 파생된 형식의 포인터 값으로 초기화될 수 있습니다 . 연산자가 로컬 수준에서 선언된 포인터에서 호출된 경우 해당 포인터에 대한 삭제 연산자 도 이 수준을 떠나기 전에 실행되어야 합니다. 그렇지 않으면 포인터가 손실되고 개체를 명시적으로 삭제할 수 없습니다.

object_pointer = new Class_Name 표현식으로 생성된 모든 객체는 이후에 delete( object_pointer ) 연산자에 의해 파괴되어야 합니다 . 어떤 이유로 이러한 변수가 프로그램 종료 시 삭제 연산자에 의해 파괴되지 않은 경우 이에 대한 메시지가 "전문가" 로그에 표시됩니다. 여러 변수를 선언하고 모든 변수에 단일 개체 포인터를 할당할 수 있습니다.

동적으로 생성된 객체에 생성자가 있으면 new 연산자가 실행될 때 해당 생성자가 호출됩니다 . 객체에 소멸자가 있으면 삭제 문이 실행될 때 소멸자가 호출됩니다 .

따라서 동적으로 할당된 객체는 new 연산자에 의해 생성되는 순간에만 생성 되며 프로그램이 언로드되는 순간 삭제 연산자 또는 MQL5 자동 실행 시스템에 의해 소멸되도록 보장됩니다. 동적으로 생성된 개체의 포인터가 선언되는 순서는 초기화되는 순서에 영향을 주지 않습니다. 초기화 및 초기화 해제 순서는 프로그래머가 완전히 제어합니다.