FORTS: 초보자를 돕기 위해 - 페이지 5 123456789101112...14 새 코멘트 igorbel 2016.05.15 13:29 #41 Mikhail Filimonov : 자주 사용하고 유용한 기능: 재설계된 GetPositionPrice() 함수: 이 함수는 잘못된 결과를 보여주거나 우리가 원하는 결과가 아닌 결과를 보여줍니다. 나는 이해하기 시작했고, 문서에 쓰여진 것처럼 포지션 ID는 반전 중에(즉, 인/아웃 거래 중에) 변경되지 않는다는 것이 밝혀졌습니다. https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties 위치 반전은 ID를 반전으로 이어진 주문의 티켓으로 변경합니다. 귀하의 GetPositionPrice는 반전이 있는 경우 2개 이상의 서로 다른 방향의 위치를 혼합할 수 있으며 이에 대한 평균 가격을 계산합니다. 이러한 평균 포지션 가격에는 실질적인 의미가 없습니다. 그렇다면 역전하는 동안 Position ID가 변경됩니까? Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Alexander Bereznyak 2016.05.15 22:06 #42 후진시 위치 번호는 변경되지 않습니다. igorbel 2016.05.16 21:24 #43 그리고 인/아웃 거래로 이전 포지션을 마감한 거래량과 새로운 포지션을 연 거래량을 어떻게 결정할 수 있습니까? Denis Kirichenko 2016.05.18 19:00 #44 igorbel : 그리고 인/아웃 거래로 이전 포지션을 마감한 거래량과 새로운 포지션을 연 거래량을 어떻게 결정할 수 있습니까? 현재 열려있는 것과 비교할 수 있습니다. 하지만 id로 포지션의 히스토리 를 공부하는 것이 좋으며, 플립 중에도 변하지 않는... 매수/매도 물량에 도움이 됩니다. Andrey Barinov 2016.05.18 19:22 #45 Dennis Kirichenko : 현재 열려있는 것과 비교할 수 있습니다. 하지만 id로 포지션의 히스토리 를 공부하는 것이 좋으며, 플립 중에도 변하지 않는... 매수/매도 물량에 도움이 됩니다. 최근 역전 시 위치 ID가 변경되었습니다. 이에 대한 문서는 이미 업데이트되었습니다.... POSITION_IDENTIFIER Position ID는 새로 개설된 각 Position에 할당되는 고유 번호로 평생 동안 변경되지 않습니다. 위치를 연 주문 티켓에 해당합니다. 포지션 ID는 각 주문(ORDER_POSITION_ID)과 거래(DEAL_POSITION_ID)를 개설, 변경 또는 마감한 순서로 표시됩니다. 이 속성을 사용하여 위치와 연결된 주문 및 거래를 검색합니다. 위치 반전은 ID를 반전으로 이어진 주문의 티켓으로 변경합니다. 긴 오류, 버그, 질문 mql5 언어의 특징, 미묘함 초보자의 질문 MQL5 MT5 igorbel 2016.05.21 14:20 #46 Dennis Kirichenko : 현재 열려있는 것과 비교할 수 있습니다. 하지만 id로 포지션의 히스토리 를 공부하는 것이 좋으며, 플립 중에도 변하지 않는... 매수/매도 물량에 도움이 됩니다. 그것은 전혀 옵션이 아닙니다. 이전 위치는 반전 등으로 인해 열릴 수도 있습니다. 아마도 옵션이지만 분명히 최선은 아닙니다. igorbel 2016.05.21 18:22 #47 Andrey Barinov : 최근 역전 시 위치 ID가 변경되었습니다. 이에 대한 문서는 이미 업데이트되었습니다.... POSITION_IDENTIFIER Position ID는 새로 개설된 각 Position에 할당되는 고유 번호로 평생 동안 변경되지 않습니다. 위치를 연 주문 티켓에 해당합니다. 포지션 ID는 각 주문(ORDER_POSITION_ID)과 거래(DEAL_POSITION_ID)를 개설, 변경 또는 마감한 순서로 표시됩니다. 이 속성을 사용하여 위치와 연결된 주문 및 거래를 검색합니다. 위치 반전은 ID를 반전으로 이어진 주문의 티켓으로 변경합니다. 긴 이렇게 작성했지만 실제로는 아무것도 변경되지 않습니다. 원하는 경우 내 코드는 다음과 같습니다. long pos_id1,pos_id2,pos_id3; ulong deal1_ticket=xxx; ulong deal2_ticket=xxx; ulong deal3_ticket=xxx; if (! HistoryDealSelect (deal1_ticket)) Print ( __FUNCTION__ + ": deal 1 not selected. Error=" , GetLastError ()); pos_id1= HistoryDealGetInteger (deal1_ticket, DEAL_POSITION_ID ); Print ( __FUNCTION__ + ": ticket=" ,deal1_ticket, ", position ID=" ,pos_id1); if (! HistoryDealSelect (deal2_ticket)) Print ( __FUNCTION__ + ": deal 2 not selected. Error=" , GetLastError ()); pos_id2= HistoryDealGetInteger (deal2_ticket, DEAL_POSITION_ID ); Print ( __FUNCTION__ + ": ticket=" ,deal2_ticket, ", position ID=" ,pos_id2); if (! HistoryDealSelect (deal3_ticket)) Print ( __FUNCTION__ + ": deal 3 not selected. Error=" , GetLastError ()); pos_id3= HistoryDealGetInteger (deal3_ticket, DEAL_POSITION_ID ); Print ( __FUNCTION__ + ": ticket=" ,deal3_ticket, ", position ID=" ,pos_id3); 여기서 deal2_ticket은 인/아웃 딜 티켓이고, deal1_ticket은 인/아웃 딜 이전의 티켓이고, deal3_ticket은 인/아웃 딜 이후의 티켓입니다. 세 가지 경우 모두 동일한 위치 ID를 얻습니다. Andrey Barinov 2016.05.22 08:15 #48 igorbel : 이렇게 작성했지만 실제로는 아무것도 변경되지 않습니다. 원하는 경우 내 코드는 다음과 같습니다. 여기서 deal2_ticket은 인/아웃 딜 티켓이고, deal1_ticket은 인/아웃 딜 이전의 티켓이고, deal3_ticket은 인/아웃 딜 이후의 티켓입니다. 세 가지 경우 모두 동일한 위치 ID를 얻습니다. 나는 변화하고 있다. 최신 빌드 1340에서 시도하십시오. Vladimir Karputov 2016.05.22 10:05 #49 igorbel : 그리고 인/아웃 거래로 이전 포지션을 마감한 거래량과 새로운 포지션을 연 거래량을 어떻게 결정할 수 있습니까? 네팅 계정의 "기록에 대한 디버그" 모드에서 이 Expert Advisor를 실행하십시오. 예는 거래 내역에 "IN/OUT" 유형 거래가 하나만 있는 것으로 계산되기 때문에 약간 거칠습니다. //+------------------------------------------------------------------+ //| Test.mq5 | //| Copyright © 2016, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2016, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.00" #include <Trade\Trade.mqh> CTrade my_trade; long deal_positions_id_in_out= 0 ; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit () { //--- //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick () { //--- static int t= 0 ; if (t== 20 ) { my_trade.Buy( 0.02 ); } if (t== 25 ) { my_trade.Buy( 0.01 ); } if (t== 30 ) { my_trade.Sell( 0.07 ); } if (t== 40 ) { my_trade.PositionClose( Symbol ()); } if (t== 50 ) { //--- request trade history HistorySelect ( 0 , TimeCurrent ()); long deal_positions_id= 0 ; double deal_volume= 0 ; long deal_entry= 0 ; long deal_type= 0 ; ulong ticket= 0 ; for ( int i= 0 ;i< HistoryDealsTotal ();i++) { if ((ticket= HistoryDealGetTicket (i))> 0 ) { deal_positions_id= HistoryDealGetInteger (ticket, DEAL_POSITION_ID ); deal_volume= HistoryDealGetDouble (ticket, DEAL_VOLUME ); deal_entry= HistoryDealGetInteger (ticket, DEAL_ENTRY ); deal_type= HistoryDealGetInteger (ticket, DEAL_TYPE ); if (deal_entry== DEAL_ENTRY_INOUT ) deal_positions_id_in_out=deal_positions_id; Print ( "DEAL_POSITION_ID " ,deal_positions_id, ", DEAL_VOLUME " , DoubleToString (deal_volume, 2 ), ", DEAL_ENTRY " , EnumToString (( ENUM_DEAL_ENTRY )deal_entry), ", DEAL_TYPE " , EnumToString (( ENUM_DEAL_TYPE )deal_type)); } } } if (t== 55 ) { //--- request trade history HistorySelect ( 0 , TimeCurrent ()); long deal_positions_id= 0 ; double deal_volume= 0 ; long deal_entry= 0 ; long deal_type= 0 ; ulong ticket= 0 ; double volume_in= 0 ; double volume_out= 0 ; for ( int i= 0 ;i< HistoryDealsTotal ();i++) { if ((ticket= HistoryDealGetTicket (i))> 0 ) { deal_positions_id= HistoryDealGetInteger (ticket, DEAL_POSITION_ID ); deal_volume= HistoryDealGetDouble (ticket, DEAL_VOLUME ); deal_entry= HistoryDealGetInteger (ticket, DEAL_ENTRY ); deal_type= HistoryDealGetInteger (ticket, DEAL_TYPE ); if (deal_positions_id==deal_positions_id_in_out && deal_entry== DEAL_ENTRY_IN ) volume_in+=deal_volume; else if (deal_positions_id==deal_positions_id_in_out && deal_entry== DEAL_ENTRY_INOUT ) volume_out=deal_volume; } } Print ( "DEAL_POSITION_ID " ,deal_positions_id_in_out, ": volume in " , DoubleToString (volume_in, 2 ), ", volume out " , DoubleToString (volume_out, 2 )); } t++; } //+------------------------------------------------------------------+ //| Trade function | //+------------------------------------------------------------------+ void OnTrade () { //--- } //+------------------------------------------------------------------+ 첫째, 완료된 모든 거래와 포지션이 완전히 닫힌 후 모든 거래( DEAL_POSITION_ID , DEAL_VOLUME, DEAL_ENTRY,DEAL_TYPE )에 대한 설명이 표시되는 반면 DEAL_POSITION_ID는 IN/OUT 유형의 거래에 대해 기억됩니다. 그런 다음 다시 내역을 살펴보고 DEAL_POSITION_ID의 거래에 대한 모든 항목을 요약합니다. 우리는 다음과 같은 것을 얻습니다. 10 : 58 : 23.963 Test (EURUSD,H1) 2016.01 . 04 00 : 06 : 42 CTrade:: OrderSend : instant buy 0.04 EURUSD at 1.08732 [done at 1.08732 ] 10 : 58 : 30.692 Test (EURUSD,H1) 2016.01 . 04 00 : 07 : 10 DEAL_POSITION_ID 0 , DEAL_VOLUME 0.00 , DEAL_ENTRY DEAL_ENTRY_IN , DEAL_TYPE DEAL_TYPE_BALANCE 10 : 58 : 30.784 Test (EURUSD,H1) 2016.01 . 04 00 : 07 : 10 DEAL_POSITION_ID 2 , DEAL_VOLUME 0.02 , DEAL_ENTRY DEAL_ENTRY_IN , DEAL_TYPE DEAL_TYPE_BUY 10 : 58 : 32.074 Test (EURUSD,H1) 2016.01 . 04 00 : 07 : 10 DEAL_POSITION_ID 2 , DEAL_VOLUME 0.01 , DEAL_ENTRY DEAL_ENTRY_IN , DEAL_TYPE DEAL_TYPE_BUY 10 : 58 : 33.826 Test (EURUSD,H1) 2016.01 . 04 00 : 07 : 10 DEAL_POSITION_ID 2 , DEAL_VOLUME 0.07 , DEAL_ENTRY DEAL_ENTRY_INOUT , DEAL_TYPE DEAL_TYPE_SELL 10 : 58 : 37.237 Test (EURUSD,H1) 2016.01 . 04 00 : 07 : 10 DEAL_POSITION_ID 4 , DEAL_VOLUME 0.04 , DEAL_ENTRY DEAL_ENTRY_OUT , DEAL_TYPE DEAL_TYPE_BUY 10 : 59 : 07.397 Test (EURUSD,H1) 2016.01 . 04 00 : 07 : 19 DEAL_POSITION_ID 2 : volume in 0.03 , volume out 0.07 파일: Test.mq5 5 kb igorbel 2016.05.22 13:26 #50 Andrey Barinov : 나는 변화하고 있다. 최신 빌드 1340에서 시도하십시오. 나는 그것을 시도했다. 귀하의 국가에서 어떤 시장이 변화하고 있습니까? 123456789101112...14 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
자주 사용하고 유용한 기능:
재설계된 GetPositionPrice() 함수:
이 함수는 잘못된 결과를 보여주거나 우리가 원하는 결과가 아닌 결과를 보여줍니다. 나는 이해하기 시작했고, 문서에 쓰여진 것처럼 포지션 ID는 반전 중에(즉, 인/아웃 거래 중에) 변경되지 않는다는 것이 밝혀졌습니다.
https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties
위치 반전은 ID를 반전으로 이어진 주문의 티켓으로 변경합니다.
귀하의 GetPositionPrice는 반전이 있는 경우 2개 이상의 서로 다른 방향의 위치를 혼합할 수 있으며 이에 대한 평균 가격을 계산합니다. 이러한 평균 포지션 가격에는 실질적인 의미가 없습니다.
그렇다면 역전하는 동안 Position ID가 변경됩니까?
그리고 인/아웃 거래로 이전 포지션을 마감한 거래량과 새로운 포지션을 연 거래량을 어떻게 결정할 수 있습니까?
현재 열려있는 것과 비교할 수 있습니다. 하지만 id로 포지션의 히스토리 를 공부하는 것이 좋으며, 플립 중에도 변하지 않는... 매수/매도 물량에 도움이 됩니다.
최근 역전 시 위치 ID가 변경되었습니다. 이에 대한 문서는 이미 업데이트되었습니다....
POSITION_IDENTIFIER
Position ID는 새로 개설된 각 Position에 할당되는 고유 번호로 평생 동안 변경되지 않습니다. 위치를 연 주문 티켓에 해당합니다.
포지션 ID는 각 주문(ORDER_POSITION_ID)과 거래(DEAL_POSITION_ID)를 개설, 변경 또는 마감한 순서로 표시됩니다. 이 속성을 사용하여 위치와 연결된 주문 및 거래를 검색합니다.
위치 반전은 ID를 반전으로 이어진 주문의 티켓으로 변경합니다.
긴
현재 열려있는 것과 비교할 수 있습니다. 하지만 id로 포지션의 히스토리 를 공부하는 것이 좋으며, 플립 중에도 변하지 않는... 매수/매도 물량에 도움이 됩니다.
그것은 전혀 옵션이 아닙니다. 이전 위치는 반전 등으로 인해 열릴 수도 있습니다. 아마도 옵션이지만 분명히 최선은 아닙니다.
최근 역전 시 위치 ID가 변경되었습니다. 이에 대한 문서는 이미 업데이트되었습니다....
POSITION_IDENTIFIER
Position ID는 새로 개설된 각 Position에 할당되는 고유 번호로 평생 동안 변경되지 않습니다. 위치를 연 주문 티켓에 해당합니다.
포지션 ID는 각 주문(ORDER_POSITION_ID)과 거래(DEAL_POSITION_ID)를 개설, 변경 또는 마감한 순서로 표시됩니다. 이 속성을 사용하여 위치와 연결된 주문 및 거래를 검색합니다.
위치 반전은 ID를 반전으로 이어진 주문의 티켓으로 변경합니다.
긴
이렇게 작성했지만 실제로는 아무것도 변경되지 않습니다.
원하는 경우 내 코드는 다음과 같습니다.
여기서 deal2_ticket은 인/아웃 딜 티켓이고, deal1_ticket은 인/아웃 딜 이전의 티켓이고, deal3_ticket은 인/아웃 딜 이후의 티켓입니다. 세 가지 경우 모두 동일한 위치 ID를 얻습니다.
이렇게 작성했지만 실제로는 아무것도 변경되지 않습니다.
원하는 경우 내 코드는 다음과 같습니다.
여기서 deal2_ticket은 인/아웃 딜 티켓이고, deal1_ticket은 인/아웃 딜 이전의 티켓이고, deal3_ticket은 인/아웃 딜 이후의 티켓입니다. 세 가지 경우 모두 동일한 위치 ID를 얻습니다.
그리고 인/아웃 거래로 이전 포지션을 마감한 거래량과 새로운 포지션을 연 거래량을 어떻게 결정할 수 있습니까?
네팅 계정의 "기록에 대한 디버그" 모드에서 이 Expert Advisor를 실행하십시오. 예는 거래 내역에 "IN/OUT" 유형 거래가 하나만 있는 것으로 계산되기 때문에 약간 거칠습니다.
첫째, 완료된 모든 거래와 포지션이 완전히 닫힌 후 모든 거래( DEAL_POSITION_ID , DEAL_VOLUME, DEAL_ENTRY,DEAL_TYPE )에 대한 설명이 표시되는 반면 DEAL_POSITION_ID는 IN/OUT 유형의 거래에 대해 기억됩니다.
그런 다음 다시 내역을 살펴보고 DEAL_POSITION_ID의 거래에 대한 모든 항목을 요약합니다.
우리는 다음과 같은 것을 얻습니다.
나는 변화하고 있다. 최신 빌드 1340에서 시도하십시오.