FORTS: 초보자를 돕기 위해 - 페이지 4

 
Sergey Chalyshev :
그리고 Ava는 어떻습니까? 그는 영원한 금지 인 포럼에 글을 쓸 기회가 없습니다.
좋아, 나는 그들이 여기서 "부분적으로" 금지할 수 있다는 것을 몰랐습니다. 불쌍해.
 
Sergey Chalyshev :
그리고 Ava는 어떻습니까? 그는 영원한 금지 인 포럼에 글을 쓸 기회가 없습니다.

아니요, 그는 금지되지 않았습니다.

금지된 사용자는 취소선으로 작성됩니다.

 
Andrey Khatimlianskii :

아니요, 그는 금지되지 않았습니다.

금지된 사용자는 취소선으로 작성됩니다.

나도 그렇게 생각했고, 사회자에게 물어보는 것이 좋습니다. 그들은 확실히 알고 있습니다.
 
Mikhail Filimonov :

특징:

OrderSend() 함수의 반환 코드와 주문 티켓에서 확인(TRADE_RETCODE_PLACED)을 받은 후,

OnTradeTransaction() 의 OrderSendAsync() 함수 의 경우 이것이 다음을 의미하지는 않습니다.

주문은 실제로 교환에 배치됩니다.

따라서 주문 상태에 대한 추가 확인이 필요합니다(주문에 대한 다른 작업과 마찬가지로).

 if ( OrderSend ( request, result ) )
{
   if ( result.retcode == TRADE_RETCODE_PLACED )
  { 
    ticket = result.order;
  }
}

https://www.mql5.com/ru/docs/constants/structures/mqltraderesult

여기에는 거래 작업 유형 이 TRADE_ACTION_PENDING 일 때만 티켓이 채워진다고 나와 있습니다.

작업이 TRADE_ACTION_DEAL이면 주문 티켓이 result.order에 반환됩니까?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
네.
 
Sergei Vladimirov :
네.

그리고 어떤 경우 에 OrderCheck() 호출 에 대한 응답으로 오류 10013이 발생합니까?

내 스크립트 코드는 다음과 같습니다.

   MqlTradeRequest    m_request;         
   MqlTradeCheckResult m_check_result;  
   
   m_request.action      = TRADE_ACTION_DEAL ;
   m_request.symbol      = Symbol ();
   m_request.magic       = 001 ;
   m_request.volume      = 1.00 ;
   m_request.type        = ORDER_TYPE_SELL ;
   m_request.type_filling= ORDER_FILLING_RETURN ;
   if (! OrderCheck (m_request,m_check_result))
       Print ( __FUNCTION__ + ": order check failed." );
   else
       Print ( __FUNCTION__ + ": order check passed." );
   Print ( __FUNCTION__ + ": symbol=" ,m_request.symbol, ", operation=" ,m_request.type, ", volume=" ,m_request.volume);
   Print ( __FUNCTION__ + ": retcode=" ,m_check_result.retcode, ", balance=" ,m_check_result.balance, ", equity=" ,m_check_result.equity, ", profit=" ,m_check_result.profit,
             ", margin=" ,m_check_result.margin, ", margin_free=" ,m_check_result.margin_free, ", margin_level=" ,m_check_result.margin_level,
             ", comment=" ,m_check_result.comment);

내가 얻는 로그는 다음과 같습니다.

Check (RTS- 6.16 ,M30)     OnStart : retcode= 10013 , balance= 0.0 , equity= 0.0 , profit= 2.121995790965272 e- 314 , margin= 0.0 , margin_free= 0.0 , margin_level= 0.0 , comment=Invalid request
Check (RTS- 6.16 ,M30)     OnStart : symbol=RTS- 6.16 , operation= 1 , volume= 1.0
Check (RTS- 6.16 ,M30)     OnStart : order check failed.
 
igorbel :

그리고 어떤 경우 에 OrderCheck() 호출 에 대한 응답으로 오류 10013이 발생합니까?

내 스크립트 코드는 다음과 같습니다.

내가 얻는 로그는 다음과 같습니다.

도움말에 다음과 같이 나와 있지만 m_request.expiration =0을 추가했을 때 통과했습니다.

거래소 실행

거래소 실행 모드(거래 주문 실행의 교환 모드)에서 포지션을 여는 거래 주문. 5개의 필드가 필요합니다.

  • 행동
  • 기호
  • 용량
  • 유형
  • type_filling

매직 및 댓글 필드를 설정할 수도 있습니다.

 

그러나 이상함은 여기서 끝나지 않습니다.

1 많은 구매:

Check (RTS-6.16,M30) OnStart: retcode=0, balance=530863.24, equity=538989.4399999999, profit=2.121995790965272e-314, margin=211242.25 , margin_free=319620.99, margin_level=255.1522907941001, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=1.0

작업 마진은 211242.25로 현재 마진과 동일합니다. RTS-6.16의 현재 숏 포지션이 2계약이기 때문에 모든 것이 정확합니다. 1계약 개시 증거금 RTS-6.16 17388.75

많이 추가하고 있습니다.

2 많은 구매:

Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=659212.76, profit=2.121995790965272e-314, margin=211242.25 , margin_free=440186.19, margin_level=312.0648260468727, comment=Done

Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=2.0

모든 것이 괜찮습니다. 왜냐하면 현재 위치는 2 매도이며 마진은 변경되지 않습니다.

이제 3개의 매수 계약이 있습니다.

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: retcode=0, balance=651428.4399999999, equity=658739.4, profit=2.121995790965272e-314, margin= 246019.75 , margin_free=405408.69, margin_level=267.7587470111648, comment=Done

2016.04.28 01:26:47.319 Check (RTS-6.16,M30) OnStart: symbol=RTS-6.16, operation=0, volume=3.0

마진 값은 즉시 246019.75입니다. 어디에? 1 계약에 대해 만 17k. 그리고 다른 분야는 어떻습니까(이전의 경우에도)? 그러한 공평함과 균형은 어디에서 오는가? 저도 그렇게 많지 않습니다. margin_free도 잘못되었습니다. 이익에 대해 말하는 것이 아닙니다.

누군가 내가 잘못하고 있는지 확인할 수 있습니까?


 
igorbel :

도움말에 다음과 같이 나와 있지만 m_request.expiration =0을 추가했을 때 통과했습니다.

선언 직후에는 항상 모든 변수와 구조를 0으로 초기화하십시오. 만료 필드에 일종의 쓰레기가 있어서 오류가 발생했습니다.

 MqlTradeRequest    m_request;         
MqlTradeCheckResult m_check_result; 

ZeroMemory (m_request);
ZeroMemory (m_check_result);
// теперь заполняйте нужные поля
 
Sergei Vladimirov :

선언 직후에는 항상 모든 변수와 구조를 0으로 초기화하십시오. 만료 필드에 일종의 쓰레기가 있어서 오류가 발생했습니다.

고맙습니다. 그러나 OrderCheck()는 최소한 FORTS에서 실질적으로 쓸모없는 기능인 버려야 했습니다. 첫째, 이해할 수 없는 결과를 제공합니다. 그러나 값이 다소 정확하더라도 거래소에서 주문을 거부할 가능성은 항상 있습니다. 따라서 주문 ORDER_STATE_REJECTED 의 상태를 확인해야 하며 주석도 볼 수 있습니다. 그런 다음 순서대로 볼륨을 줄이고 다시 보냅니다. 물론 이 모든 것이 거래 속도를 높이는 것은 아니지만 해야 할 일 :(
사유: