포지션선택() 함수를 사용하여 포지션을 선택하고 포지션겟인티저() 함수와 mql5 식별자 - POSITION_IDENTIFIER를 사용하여 해당 식별자를 가져옵니다.
도움말의 예시입니다:
//+------------------------------------------------------------------+ //| 거래 기능| //+------------------------------------------------------------------+ void OnTrade() { //--- 위치가 사용 가능한지 확인하고 변경된 시간을 인쇄합니다. if(PositionSelect(_Symbol)) { //--- 추가 작업을 위한 위치 식별자 가져오기 ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER); Print(_Symbol," postion #",position_ID); //--- 01.01.1970 이후 밀리초 단위의 위치 형성 시간을 가져옵니다. long create_time_msc=PositionGetInteger(POSITION_TIME_MSC); PrintFormat("Position #%d POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID, create_time_msc,TimeToString(create_time_msc/1000)); //--- 01.01.1970 이후 마지막으로 위치가 변경된 시간(초)을 가져옵니다. long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE); PrintFormat("Position #%d POSITION_TIME_UPDATE = %i64 seconds => %s", position_ID,update_time_sec,TimeToString(update_time_sec)); //--- 01.01.1970 이후 마지막 위치 변경 시간(밀리초)을 가져옵니다. long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC); PrintFormat("Position #%d POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s", position_ID,update_time_msc,TimeToString(update_time_msc/1000)); } //--- }
PositionSelect() 함수를 사용하여 위치를 선택하고 PositionGetInteger( ) 함수와 mql5 식별자 - POSITION_IDENTIFIER를 사용하여 해당 식별자를 가져옵니다.
도움말의 예시입니다:
감사합니다, tol64! 원칙적으로 맞습니다.
그리고 제가 위치 식별자에 대한 참조를 제공했음에도 불구하고 첫 번째 질문이 짧았다는 점에 대해 사과드립니다 .
문제는 이렇습니다. 포지션이 개설된 후 ::PositionId() 메서드를 사용하여 CDealInfo 클래스의 도움을 받아 거래 내역에서 이 개설을 잡아야 합니다. 그리고 가급적이면 개시 순간과 DEAL_ENTRY_IN 또는 DEAL_ENTRY_INOUT 유형 거래가 기록에나타나는순간 사이의 시간 간격이 가장 작아야 합니다.
감사합니다, tol64! 원칙적으로 진실은 여러분의 것입니다.
그리고 첫 번째 질문이 짧아서 죄송합니다... 포지션 ID에 대한 링크를 제공했음에도 불구하고요 .
문제는 이렇습니다. 포지션이 개설된 후 ::PositionId() 메서드를 사용하여 CDealInfo 클래스를 사용하여 거래 내역에서 이 개설을 포착해야 합니다. 그리고 가급적이면 개시 시점과 DEAL_ENTRY_IN 또는 DEAL_ENTRY_INOUT 유형의 거래가 기록에나타나는시점 사이의 시간 간격이 가장 작은 것이 좋습니다 .
제 생각에는 위의 예에서와 같이 OnTrade()에서 이벤트를 추적하는 것이 이에 매우 적합합니다. 그러나 갑자기 거래 이벤트에 의해 포지션이 선택되지 않고 다음 이벤트가 곧 나오지 않을 것이라고 생각합니다. 그런 다음 타이머로 환경을 추적해야합니다. 지금은 밀리초 단위로도 설정할 수 있습니다.
또는 오픈 포지션을 추적하는 대신 거래 내역(거래 횟수)을 스캔하세요. 우리는 이전 것을 기억하고 현재와 비교합니다. 타이머에서도 할 수 있습니다. 많은 변형이 있습니다. 모두 특정 작업에 따라 다릅니다.
아나톨리, 여기서 문제가 발생했습니다. 경험을 공유해 주세요. 기능으로 작업 할 때 버그가 있거나 "잘못"되고 있습니다. 그러나 나는 모든 것을 올바르게 수행했다고 생각합니다....
두 번째가 "작동"하지 않는 함수 변형에 대한 질문이 있습니다.
예를 들어
1)
double HistoryOrderGetDouble( ulong ticket_number, // 티켓 ENUM_ORDER_PROPERTY_DOUBLE property_id // 속성 식별자 );
2)
bool HistoryOrderGetDouble( ulong ticket_number, // 티켓 ENUM_ORDER_PROPERTY_DOUBLE property_id, // 속성 식별자 double& double_var // 여기서는 프로퍼티의 값을 가져옵니다. );
소스 코드를 첨부했습니다.
아나톨리, 여기서 문제가 발생했습니다. 경험을 공유해 주세요. 기능으로 작업 할 때 버그가 있거나 "잘못"되고 있습니다. 그러나 나는 모든 것을 올바르게 수행했다고 생각합니다....
질문은 두 번째가 작동하지 않는 함수 변형에 관한 것입니다.
...
로그에 무엇이 표시되나요? 스크립트를 실행할 때 아무런 문제가 보이지 않습니다.
스크립트의 기본 설정에서 "Failure to return HistoryOrderGetDouble() function"과 같은 항목이 있습니다.
즉, 함수의 부울 버전이 속성 값을 가져 오지 않습니다.
기본 스크립트 설정에서 " HistoryOrderGetDouble() 함수를 반환하지 못함"과 같은 레코드가 있음을 알 수 있습니다.
즉, 함수의 부울 버전이 속성 값을 가져 오지 않습니다.
새로운 기고글 MQL5 Cookbook: 거래의 역사 및 직위 속성 가져오기를 위한 기능 라이브러리 가 게재되었습니다:
포지션 속성에 대한 이전 글에서 제공한 정보를 간략하게 요약할 시간입니다. 이 글에서는 거래 내역에 액세스한 후에만 얻을 수 있는 속성을 가져오는 몇 가지 추가 함수를 만듭니다. 또한 보다 편리한 방법으로 포지션 및 기호 속성에 액세스할 수 있는 데이터 구조에 익숙해질 것입니다.
"MQL5 Cookbook: 거래 수준을 설정/수정할 때 오류를 방지하는 방법"이라는 이전 글에서 수정된 Expert Advisor의 새 기능 작동을 볼 수 있도록 다음 가능성을 추가합니다. 포지션이 이미 있는 상태에서 열기 신호가 다시 발생하면 포지션 볼륨을 높입니다.
포지션 히스토리에 여러 거래가 있을 수 있으며, 거래 과정에서 포지션 볼륨에 변화가 있었다면 현재 포지션 가격에도 변화가 있었을 것입니다. 첫 번째 진입점의 가격을 알아보려면 해당 특정 포지션과 관련된 거래 내역에 액세스해야 합니다. 아래 그림은 포지션이 하나의 거래(진입점)만 있는 경우를 보여줍니다.
작성자: Anatoli Kazharski