기고글 토론 "MetaTrader 5의 주문, 포지션 및 거래" - 페이지 2

 

Торговыми событиями считаются следующие изменения на счете:

  • 자금 인출 및 청구
  • 수수료, 스왑 및 세금 부과;
  • 주문 설정, 삭제 및 수정;
  • 주문을 기반으로 한 거래 체결;
  • 포지션 개시 및 청산
  • 포지션의 거래량 및 방향 변경.

이 목록에는 오픈 포지션의 "손절 및/또는 테이크프로핏 수준 수정"(SL 및 TP 수정)과 같은 거래 이벤트는 포함되지 않습니다. 또는 " 주문에 근거한 거래 체결"의 특별한 경우로 간주됩니까?

 
Yedelkin:

목록에는 오픈 포지션의 "손절 및/또는 테이크프로핏 수준 수정"(SL 및 TP 수정) 과 같은 거래 이벤트는 포함되지 않습니다. 아니면 "주문 기반 거래"의 특수한 경우로 간주되나요?

"오픈 포지션의 "손절가 및/또는 테이크프로핏수준 수정(SL & TP 수정)"은 "주문 설정, 삭제 및수정 "에 가깝습니다.
  • 주문 설정, 삭제 및 수정;
 
Rosh:
오픈 포지션에서 "손절 및/또는 테이크프로핏 레벨 수정(SL & TP 수정)"이 "손절 및/또는 테이크프로핏 레벨 수정"에 더 가깝다고 생각합니다.

이 질문에 대해 생각하고 있었습니다. 그러나 사실 "주문 설정, 삭제 및 수정"에 대해 이야기 할 때 보류중인 주문을 설정, 삭제 및 수정하는 것에 대해 이야기하고 있습니다. 오픈 포지션의 SL 및/또는 TP 레벨 수정은 해당 요청이 " 즉시 체결 주문"의 범주에 속하기 때문에 다소 다른 성격을 띠고 있습니다. 아니면"즉시 체결"에 대해 제가 잘못 알고 있는 건가요?

 
Rosh:

이 문서에서는 하루 동안의 거래 내역을 로드하는 예제를 제공합니다(한 코드에는 3일 동안의 거래 내역을 로드하는 예제가 있습니다). 예, 이것은 제한 사항이며 예제는 보편적이지 않습니다. 그러나 독자가 기사를 읽는 동안 이러한 특성을 이해한다면, 어떤 간격으로 어떤 순간부터 거래 내역을 캐시에 로드해야 하는지 스스로 결정할 수 있을 것입니다.

독자는 가장 간단한 예제와 알고리즘을 받았으며 이제 필요한 이벤트 처리 기능에 독립적으로 적용할 수 있습니다. 독자적으로 자신만의 거래 내역 기반을 만들고 초기화 및 동기화 등을 수행할 수 있습니다.

모든 경우에 대해 최적의 거래 내역 작업을 위한 구체적인 레시피와 기능을 제공하려면 적어도 하나의 기사가 더 필요합니다. 더 정확하게는 예제 자체가 아니라 특정 작업을 해결하기 위한 접근 방식입니다. 이 기사는 거래 기능이 어떻게 작동하는지, 그리고 연구에 시간을 낭비하지 않도록 어떤 뉘앙스에주의를 기울여야하는지 이해하는 데 목적이 있습니다.

기사를 읽고 나면 이제부터는 모든 것이 쉬워 질 것이라고 확신합니다.

라시드, 나는 기사의 유용성을 경시하지 않습니다.

다만 실제 사례(EA 작성에 적용될 수 있는 사례)가 없으면 상당히 참고할 수 있을 것 같습니다.

예, 유용한 정보가 있으며 이해하는 사람은이를 사용할 수 있습니다. 그러나 정교하지 않은 사용자는이 기사 만 읽은 후에는 정상적인 작업을 기록으로 구성 할 수 없습니다. 즉, 그에게 쓸모가 없을 것입니다.

 

기사에도 그런 부분이 있습니다:

"예를 들어, 다음은 마지막 날의 마지막 주문을 검색하고 이에 대한 정보를 표시하는 스크립트입니다.

// --- 필요한 거래 내역의 경계 정의하기
   datetime end=TimeCurrent();                 // 현재 서버 시간
   datetime start=end-PeriodSeconds(PERIOD_D1);// 시작을 24시간 전으로 설정
//--- 프로그램 캐시에서 당일 거래 내역을 요청합니다.
   HistorySelect(start,end);
//--- 기록에서 주문 수 가져오기
   int history_orders=HistoryOrdersTotal();
//--- 목록에서 마지막 인덱스가 있는 기록에서 주문의 티켓을 가져옵니다.
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
   if(order_ticket>0) // 캐시에서 과거 순서를 가져와서 작업합니다.
     {
      //--- 주문 상태
      ENUM_ORDER_STATE state=(ENUM_ORDER_STATE)HistoryOrderGetInteger(order_ticket,ORDER_STATE);
      long order_magic      =HistoryOrderGetInteger(order_ticket,ORDER_MAGIC);
      long pos_ID           =HistoryOrderGetInteger(order_ticket,ORDER_POSITION_ID);
      PrintFormat("주문 #%d: 주문 마법=#%d, 주문 상태=%d, 주문 위치 ID=%d",
                  order_ticket,order_magic,EnumToString(state),pos_ID);

     }
   else              // 주문 가져오기 시도 실패

     {
      PrintFormat("기록에 있는 총 %d개의 주문, 주문을 선택하지 못했습니다."+
                  " 인덱스 %d. 오류 %d",history_orders,history_orders-1,GetLastError());
     }

스크립트 설명에는 마지막 주문이 검색된다고 나와 있지만 코드 자체는 과거 주문 목록에서 마지막 인덱스가 있는 티켓을 가져오는 것에 대해 이야기하고 있습니다:

//--- 마지막 인덱스가  있는 기록에서 주문의 티켓을 가져옵니다.  в списке
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
즉, 마지막 주문을 참조하는 최대 인덱스가 있는 티켓이라는 것을 암시합니다. 그러나 자료 어디에서도 마지막 주문이 항상 과거 주문 목록에서 최대 인덱스를 갖는다는 것을 보장하지 않았습니다. ...예를 들어 목록에 주문이 하나만 있으면 의심의 여지가 없습니다. 하지만 목록에 더 많은 주문이 있는 경우 마지막 주문을 찾는 제안된 방법을 항상 신뢰할 수 있을까요? 다시 말해, 마지막 기록 주문이 항상 기록 주문 목록에서 최대 인덱스를 갖도록 보장되나요 ?
 

안녕하세요!

1) 포지션 속성을 살펴봤습니다:

position_profit

란 무엇이며, 어떤 단위로 측정되나요?

예제

double profit = 포지션겟더블(포지션_프로핏);

결과:

EURUSD 포지션 #101470723: 포지션_마법=0, 시가 1.30825, 종가 1.30835, 유형=포지션_유형_구매, 수익=-2061584302, 댓글=.

profit=-2061584302 어떻게 이해해야 하나요?

2) 누군가 이 항목을 읽는 방법을 정확하고 간단하게 설명할 수 있나요?

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

아마도 PositionGetInteger(POSITION_TYPE) 정수 함수가 미리 선택된 위치에 대해 POSITION_TYPE이라는 속성 값을 요청했지만 이 값은 열거 시퀀스 번호로 반환되고, 이를 소화 가능한 형태로 표현하기 위해 이 소화 가능한 값을 이미 ENUM_POSITION_TYPE 정수 열거에서 유형 변수로 가져와 동시에 ENUM_POSITION_TYPE으로 선언된 유형으로 표현한 것일 수 있나요?

이 경우, 의미상 함수가 될 특정 클래스를 직접 작성할 수 있다는 것을 올바르게 이해하고 있습니까?

초기화 textPosition = 그 특정 클래스; // 생성자에서 위치 버퍼를 읽고 모든 매개 변수를 기억합니다.

를 기억한 다음 사용합니다:

tekPriceOpening=tekPosition.PriceOpening;

tekDirectionPosition=tekPosition.DirectionPosition;

tekDirectionPosition=tekPosition.DirectionPosition;

tekProfitPosition=tekPosition.ProfitPosition;

감사합니다!

 
bivmail:

2) 이 항목을 읽는 방법을 정확하고 간단하게 설명해 주세요.

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

PositionGetInteger("속성 식별자") 함수는 long 타입의 값을 반환합니다. "속성 식별자"가 long이 아닌 다른 유형인 경우(예: POSITION_TYPE 식별자가 ENUM_POSITION_TYPE 유형인 경우) PositionGetInteger() 함수에서 반환된 값을 필요한 유형의 값으로(즉, ENUM_POSITION_TYPE 유형의 값으로) 캐스팅하는 것이 바람직합니다.

예제에서는 긴 타입의 값을 ENUM_POSITION_TYPE 타입의 값으로 명시적으로 변환한 결과로 얻은 ENUM_POSITION_TYPE 타입의 값이 할당되는 변수 타입이 선언되어 있습니다.

숫자 타입의 값 형 변환 규칙은 MQL5 참조 가이드 / 언어 기본 사항 / 데이터 타입 / 타입 형 변환 / 숫자 타입 형 변환에 설명되어 있습니다.

Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - Документация по MQL5
 

기사에서 인용: "트레이딩 서버 연결이 끊어지면 터미널은 주기적으로 연결 복원을 시도합니다."

연결 복원 시도의 빈도는 얼마나 되나요?

 
5초마다.
 

알겠습니다, 감사합니다.