기고글 토론 "Expert Advisor 작성시 MQL5 Standard Trade Class 라이브러리 사용" - 페이지 3

 

COrderInfo 클래스에도 줄이 있습니다.

return(FormatType(str,Type()));
...
FormatType(type,Type())
...
if(m_type==Type() && m_state==State() &&

그러나 클래스에는 Type() 함수가 없습니다.

 

이 문서의 섹션 1.4에서는 설명에 따라 활성 대기 주문과 함께 작동하도록 설계된 COrderInfo 클래스의 기능을 제공합니다."이 클래스를 사용하여 보류 중인 주문의 속성을 가져오려면 먼저 총 주문 수를 요청하고 주문 티켓별로 선택하는 것이 좋습니다."

//지정한 기간 동안의 모든 과거 주문을 선택합니다.
if (HistorySelect(0,TimeCurrent()))   // 모든 주문
   {    
     // 총 주문 수 가져오기
     int o_total = OrdersTotal();
   }
그러나 HistorySelect() 함수가"거래 및 주문 내역", 즉 과거 주문을 쿼리하도록 설계된 경우총 활성 대기 주문 수를 쿼리할 때 이 함수를 사용하는 이유는 무엇인가요?
 
Yedelkin:

주문 정보 클래스에서 ...

그러나 클래스에는 Type() 함수가 없습니다.

CDealInfo 및 CPositionInfo 클래스에서도 같은 상황입니다.
 

누군가 설명해 주시겠어요? 다음은 CDealInfo 클래스의 코드 조각입니다:

//+------------------------------------------------------------------+
//|DealInfo.mqh |
//+------------------------------------------------------------------+
#include <Object.mqh>
#include "SymbolInfo.mqh"
//+------------------------------------------------------------------+
//| 클래스 CDealInfo.|
//| 약속: 히스토리 거래 정보에 액세스할 수 있는 클래스입니다.
//| CObject 클래스에서 파생됩니다.|
//+------------------------------------------------------------------+
class CDealInfo : public CObject
  {
   ...
public:
   ...
   //--- 문자열 위치 속성에 대한 빠른 액세스 메서드
   string            Symbol()           const;
   ...
  };
...
//+------------------------------------------------------------------+
//| 속성 값 "DEAL_SYMBOL." || 가져옵니다.
//| INPUT: no.|
//| OUTPUT: 속성 값 "DEAL_SYMBOL". ||
//|| REMARK: no.|
//+------------------------------------------------------------------+
string CDealInfo::Symbol() const
  {
   return(HistoryDealGetString(m_ticket,DEAL_SYMBOL));                           // 바보같이 반환
  }
...
//+------------------------------------------------------------------+
//| 거래 매개변수를 텍스트로 변환합니다.
//| INPUT:str - 수신 문자열,|
//| 거래 - 클래스 인스턴스에 대한 포인터.
//| 출력: 형식이 지정된 문자열.|
//|| REMARK: no.|
//+------------------------------------------------------------------+
string CDealInfo::FormatDeal(string& str) const
  {
   string type,volume,price,date;
   CSymbolInfo symbol;                                                    
//--- 설정
   symbol.Name(Symbol());
   int digits=symbol.Digits();
//--- 거래에 대한 설명을 작성합니다.
   switch(Type())
     {
      ...
     }
//--- 결과를 반환합니다.
   return(str);
  }
...
//+------------------------------------------------------------------+

CDealInfo::FormatDeal(문자열& str) 함수에는 이 줄이 포함되어 있습니다:

   symbol.Name(Symbol());
차례로 Symbol() 함수는 CDealInfo 클래스 자체와 클라이언트 터미널의 표준 함수 모두에 정의되어 있습니다. symbol.Name() 함수에 인자로 전달되는 함수는 무엇인가요? 어떤 규칙에 의해?
 
Yedelkin:

누군가 설명해 주시겠어요? 다음은 CDealInfo 클래스의 코드 조각입니다:

CDealInfo::FormatDeal(문자열& str) 함수에는 이 줄이 포함되어 있습니다:

차례로 Symbol() 함수는 CDealInfo 클래스 자체와 클라이언트 터미널의 표준 함수 모두에 정의되어 있습니다. symbol.Name() 함수에 인자로 전달되는 함수는 무엇인가요? 어떤 규칙에 의해?

변수 범위와 동일한 규칙이 여기에도 적용됩니다. 변수가 전역 및 로컬 수준에서 하나의 이름으로 선언된 경우 로컬 범위 내에서는 이름이 로컬 변수를 가리키고 외부에서는 전역 변수를 가리킵니다.

클래스 내에서 표준 함수가 오버로드되면 오버로드 본문은 클래스 자체에서 호출되고 표준 함수의 본문은 전역 수준에서 호출됩니다. 오버로드된 함수의 본문은 클래스 포인터를 통해 전역 수준에서 호출할 수 있습니다.

 
Urain:

변수 범위와 동일한 규칙이 여기에도 적용됩니다. 변수가 전역 및 로컬 수준에서 동일한 이름으로 선언된 경우 로컬 범위 내에서는 이름이 로컬 변수를 가리키고, 외부에서는 전역 변수를 가리킵니다.

클래스 내에서 표준 함수가 오버로드되면 오버로드 본문은 클래스 자체에서 호출되고 표준 함수의 본문은 전역 수준에서 호출됩니다. 오버로드된 함수의 본문은 클래스 포인터를 통해 전역 수준에서 호출할 수 있습니다.

정말 감사합니다! 명확하고 이해하기 쉽습니다!
 
심도 있는 기사를 작성해 주신 사무엘님께 감사드립니다. 정말 감사합니다.
 
이해하기 쉽고 멋진
 
아주 좋은 기사입니다! 참고 자료로 활용하고 있습니다.
 
1.4장에서는 주문 내역을 사용하여 주문 정보를 설명하는데 맞나요?