거래 환경에서 작업할 때 일반적인 실수와 이를 제거하는 방법 - 페이지 9

 
Algotrader18 :

안녕하세요!

모두에게, 그리고 무엇보다도 fxsaber에게 비슷한 질문이 있습니다.
언뜻 보기에 질문은 원시적이지만 나는 그것에 대한 답을 찾을 수 없다.
여기 https://www.mql5.com/ru/forum/6343/page939 "검색해 보세요. fxsaber는 한때 이 문제로 어려움을 겪었습니다. 무슨 일이 일어났는지 모르겠지만 관심이 없었습니다." 그래서 나는 당신에게 묻기로 결정했습니다.

질문은 ~이야. 위치를 열고 다음과 같이 MqlTradeResult 의 내용을 인쇄하고 싶습니다.

retcode, 주문 및 볼륨이 출력되는 반면 거래 및 가격은 항상 0입니다.
내가 뭘 잘못하고 있고 어떻게 결과 구조의 내용에 접근할 수 있는지 알려주실 수 있나요?

어쩌면 그렇게?

 //+------------------------------------------------------------------+
   MqlTradeRequest request={ 0 };
   MqlTradeResult   result={ 0 };
//---
   request.action   = TRADE_ACTION_DEAL ;     // type of trade operation
   request.symbol   = Pair1;                 // symbol
   request.volume   = lots;                 // volume of lot
   request.type     = oper;                 // order type
   request.price    = priceOpen;             // price for opening
   request.deviation= Slippage;             // allowed deviation from the price
   request.magic    = magic;   
//---
   if ( OrderSend (request,result))
     {
       Print ( "retcode = " + IntegerToString (result.retcode) + "; " );        
       Print ( "deal = " + IntegerToString (result.deal) + "; " );
       Print ( "order = " + IntegerToString (result.order) + "; " ); 
       Print ( "volume = " + DoubleToString (result.volume) + "; " );  
       Print ( "price = " + DoubleToString (result.price) + "; " );
     }
   else
     {
       // Здесь действия при ошибке открытия
     }
//+------------------------------------------------------------------+
 
Algotrader18 :

위치를 열고 다음과 같이 MqlTradeResult 의 내용을 인쇄하고 싶습니다.

retcode, 주문 및 볼륨이 출력되는 반면 거래 및 가격은 항상 0 입니다.
내가 뭘 잘못하고 있고 결과 구조의 내용에 액세스하는 방법(처음에는 최소한 인쇄를 통해 출력)을 알려주시겠습니까?

0이고 결과에 기록됩니다.

 
Artyom Trishkin :

어쩌면 그렇게?

감사합니다만 결과는 같습니다...
 
fxsaber :

0이고 결과에 기록됩니다.

글쎄요, 그렇다면 완전히 이해할 수 없습니다. 나는 내가 뭔가 잘못하고 있다고 생각했지만 0이 있다면 결과의 의미는 무엇입니까?
미결 주문을 보고 result.retcode 10009 및 result.price = 0 을 얻습니까?
결과가 없으면 결과의 의미가 무엇인지 설명해 주시겠습니까?
 
Algotrader18 :
결과가 없으면 결과의 의미가 무엇인지 설명해 주시겠습니까?

이것은 결과가 거래가 아닌 주문(티켓 및 가격 없음)일 때 MT5의 기능입니다. 당신은 여러 가지 방법이 있습니다

  1. 모든 것이 어떻게 작동하는지 스스로 알아내십시오.
  2. 거의 모든 함정이 우회되는 기성품의 상위 레벨(하위 레벨은 숨겨짐) 개발을 사용하십시오.
 
fxsaber :

이것은 결과가 거래가 아닌 주문(티켓 및 가격 없음)일 때 MT5의 기능입니다. 당신은 여러 가지 방법이 있습니다

  1. 모든 것이 어떻게 작동하는지 스스로 알아내십시오.
  2. 거의 모든 함정이 우회되는 기성품의 상위 레벨(하위 레벨은 숨겨짐) 개발을 사용하십시오.
고맙습니다.

MQL4에는 결과 구조가 없었고 티켓을 받은 후 해당 주문을 선택하고 필요한 데이터를 요청했습니다. MQL5는 필요한 데이터가 많이 포함된 결과 구조를 가지고 있으며 이를 사용하지 않는 것은 비논리적이다.

1. 포럼에서 질문하기 전에 "모든 것이 어떻게 작동하는지 이해"하려고 했습니다. 그리고 내가 본 것 - 결과 구조에서 :

 struct MqlTradeResult
  {
   uint      retcode;           // Operation return code
   ulong     deal;             // Deal ticket, if it is performed
   ulong     order;             // Order ticket, if it is placed
   double    volume;           // Deal volume, confirmed by broker
   double    price;             // Deal price, confirmed by broker
   double    bid;               // Current Bid price
   double    ask;               // Current Ask price
   string    comment;           // Broker comment to operation (by default it is filled by description of trade server return code)
   uint      request_id;       // Request ID set by the terminal during the dispatch
   uint      retcode_external; // Return code of an external trading system
  };


이중 가격이 있습니다. // 중개인이 확인한 거래 가격.

개발자의 코드 샘플에서

 //--- send the request
   if (! OrderSend (request,result))
       PrintFormat ( "OrderSend error %d" , GetLastError ());     // if unable to send the request, output the error code
//--- information about the operation
   PrintFormat ( "retcode=%u  deal=%I64u  order=%I64u" ,result.retcode,result.deal,result.order);
result.deal이 출력됩니다. 이것은 의미가 있으며 결과 구조에서 항상 0으로 표시되는 것은 아닙니다. result.price와 result.deal을 MqlTradeResul에서 얻을 수 있음을 나타내는 다른 예를 제시할 수 있습니다.


"이것이 MT5의 기능인데, 결과가 단지 주문(티켓 및 가격 없음)이고 거래가 아닌 경우"라는 정보를 본 적이 없습니다. 어떤 정보를 바탕으로 이 결론에 도달했는지 말씀해 주십시오.

2. 먼저 티켓을 선택하지 않고 위치가 열린 직후(코드 10009의 출현) 매개변수를 얻을 수 있는 "기성화된 상위 수준(하위 수준은 숨겨짐) 개발"을 알고 있는 경우 , 예를 제시하거나 그에게 링크를 제공하십시오.

 
Algotrader18 :
고맙습니다.

MQL4에는 결과 구조가 없었고 티켓을 받은 후 해당 주문을 선택하고 필요한 데이터를 요청했습니다. MQL5는 필요한 데이터가 많이 포함된 결과 구조를 가지고 있으며 이를 사용하지 않는 것은 비논리적이다.

1. 포럼에서 질문하기 전에 "모든 것이 어떻게 작동하는지 이해"하려고 했습니다. 그리고 내가 본 것 - 결과 구조에서 :


이중 가격이 있습니다. // 중개인이 확인한 거래 가격.

개발자의 코드 예제에서

result.deal이 출력됩니다. 이것은 의미가 있다고 가정하고 결과 구조에서 항상 0으로 표시되는 것은 아닙니다. result.price와 result.deal을 MqlTradeResul에서 얻을 수 있음을 나타내는 다른 예를 제시할 수 있습니다.


"이것이 MT5의 기능인데, 결과가 단지 주문(티켓 및 가격 없음)이고 거래가 아닌 경우"라는 정보를 본 적이 없습니다. 어떤 정보를 바탕으로 이 결론에 도달했는지 말씀해 주십시오.

2. 티켓을 통한 사전 선택 없이 열린 직후(코드 10009의 출현) 위치 매개변수를 얻을 수 있는 "기성화된 상위 레벨(하위 레벨은 숨겨짐) 개발"을 알고 있는 경우, 다음을 제공하십시오. 예를 들어보거나 링크를 제공하세요.

거래 요청의 결과로 거부 또는 시장 주문이 있습니다. 이것은 거래가 아니며 거래에 의해 생성된 포지션도 아닙니다.

  1. 거래 요청이 서버로 전송되어 포지션을 엽니다(주문 = 주문).
  2. 주문이 수락되면 주문을 수락하고 대기열에 넣은 결과가 반환됩니다.
  3. 주문이 실행되면 주문 실행 결과인 거래가 나타납니다.
  4. 거래의 결과는 새로운 포지션, 기존 포지션의 볼륨 증가/감소, 포지션 폐쇄, 또는 쿠데타가 될 것입니다. 또는 새로운 포지션(헤지 계정의 경우)
 
Artyom Trishkin :

거래 요청의 결과로 거부 또는 시장 주문이 있습니다. 이것은 거래가 아니며 거래에 의해 생성된 포지션도 아닙니다.

  1. 거래 요청이 서버로 전송되어 포지션을 엽니다(주문 = 주문).
  2. 주문이 수락되면 주문을 수락하고 대기열에 넣은 결과가 반환됩니다.
  3. 주문이 실행되면 주문 실행 결과인 거래가 나타납니다.
  4. 거래의 결과는 새로운 포지션, 기존 포지션의 볼륨 증가/감소, 포지션 폐쇄, 또는 쿠데타가 될 것입니다. 또는 새로운 포지션(헤지 계정의 경우)
감사합니다. 다음과 같이 말하십시오.
- 나열한 단계 중 어떤 단계 이후에 거래 요청 결과 구조(MqlTradeResult)가 나타납니까?

- MQL5 설명에 따르면:
"거래 요청 결과의 구조(MqlTradeResult)
거래 시스템에 주문하기 위한 거래 요청에 대한 응답으로 거래 서버는 미리 정의된 특수 구조 MqlTradeResult." 및 "10009 TRADE_RETCODE_DONE 주문 완료" 형식으로 거래 요청 처리 결과에 대한 정보가 포함된 데이터를 반환합니다.

저것. 거래 서버 반환 코드 10009는 OrderSend 요청이 성공적으로 완료되었음을 의미합니다. 즉, 코드 10009를 수신한 후 MqlTradeResult에서 데이터를 요청한 경우 해당 result.price = 0을 설명하는 방법은 무엇입니까?
 
Algotrader18 :
감사합니다. 다음과 같이 말하십시오.
- 나열한 단계 중 어느 단계 후에 거래 요청 결과 구조(MqlTradeResult)가 나타납니까?

- MQL5 설명에 따르면:
"거래 요청 결과의 구조(MqlTradeResult)
거래 시스템에 주문하기 위한 거래 요청에 대한 응답으로 거래 서버는 미리 정의된 특수 구조 MqlTradeResult." 및 "10009 TRADE_RETCODE_DONE 주문 완료" 형식으로 거래 요청 처리 결과에 대한 정보가 포함된 데이터를 반환합니다.

저것. 거래 서버 반환 코드 10009는 OrderSend 요청이 성공적으로 완료되었음을 의미합니다. 즉, 코드 10009를 수신한 후 MqlTradeResult에서 데이터를 요청한 경우 해당 result.price = 0을 설명하는 방법은 무엇입니까?

10009 TRADE_RETCODE_DONE - 귀하가 직접 설명했습니다 - 주문이 완료되었습니다. 이것은 단순히 주문이 실행 대기열의 서버에 성공적으로 배치되었다는 사실입니다.

또한이 주문이 실행되면 (결국 서버에서 거부 할 수 있음) 거래가 나타납니다. 거래 의 결과로 시작 가격이있는 위치가 나타납니다.

에 대해 읽다

거래 중 거래

TradeTransaction 이벤트가 발생할 때 Expert Advisors에서 호출됩니다. 이 기능은 거래 요청 실행 결과를 처리하도록 설계되었습니다.

무효 OnTradeTransaction ()
    const MqlTradeTransaction&      trans , // 거래 트랜잭션 구조
    const MqlTradeRequest&          request , // 요청 구조
    const MqlTradeResult&           결과       // 응답 구조
);

Документация по MQL5: Обработка событий / OnTradeTransaction
Документация по MQL5: Обработка событий / OnTradeTransaction
  • www.mql5.com
При обрабокте транзакций типа TRADE_TRANSACTION_REQUEST для получения дополнительной информации необходимо анализировать второй и третий параметры функции OnTradeTransaction() – Отправка торгового запроса на покупку приводит к цепи торговых транзакций, которые совершаются на торговом счете: 1) запрос  принимается на обработку, 2) далее для...
 
Algotrader18 :

"이것이 MT5의 기능인데, 결과가 주문(티켓 및 가격 없음)이고 거래가 아닌 경우"라는 정보를 본 적이 없습니다. 어떤 정보를 바탕으로 이 결론에 도달했는지 말씀해 주십시오.

자신의 경험.

2. 먼저 티켓을 선택하지 않고 위치가 열린 직후(코드 10009의 출현) 매개변수를 얻을 수 있는 "기성화된 상위 수준(하위 수준은 숨겨짐) 개발"을 알고 있는 경우 , 예를 제시하거나 그에게 링크를 제공하십시오.

 #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define Bid SymbolInfoDouble ( _Symbol , SYMBOL_BID )
#define Ask SymbolInfoDouble ( _Symbol , SYMBOL_ASK )

void Variant1()
{
   if ( OrderSelect ( OrderSend ( _Symbol , OP_BUY , 0.1 , Ask , 100 , 0 , 0 ), SELECT_BY_TICKET ))
     OrderPrint ();
}

void Variant2()
{
   OrderSend ( _Symbol , OP_SELL , 0.1 , Bid , 100 , 0 , 0 );
   MqlTradeResult result = MT4ORDERS::LastTradeResult ;
  
   Print ( "retcode = " + IntegerToString (result.retcode) + "; " );        
   Print ( "deal = " + IntegerToString (result.deal) + "; " );
   Print ( "order = " + IntegerToString (result.order) + "; " ); 
   Print ( "volume = " + DoubleToString (result.volume) + "; " );  
   Print ( "price = " + DoubleToString (result.price) + "; " );
}

void OnStart ()
{
  Variant1();
  Variant2();
}
 # 2212868739 2018.11 . 02 21 : 09 : 33 buy 0.10 EURUSD 1.13895 0.00000 0.00000 1.13892 - 0.18 0.00 - 0.26 0
retcode = 10009 ; 
deal = 2210317244 ; 
order = 2212868740 ; 
volume = 0.10000000 ; 
price = 1.13892000 ; 


다른 옵션이 있지만 "고급"입니다.