위대하고 끔찍한 MT4 영원히 (또는 전환 전략을 올바르게 개발하는 방법) - 페이지 19

 
fxsaber :

MT4와 MT5의 조건은 동일합니다.

수년 동안 모두가 배가, 오는 것에 대해 알고 있었습니다... . 매우 어렵기 때문입니다. 포럼에서 제기된 거래 API의 많은 기능은 개발자가 알지 못하거나 의견을 제시하지 않았습니다.


아무도 MT5를 싫어하지 않습니다. 그는 초등 문제를 풀 때 몇 가지 문제의 예를 보여주었습니다.

왜 그들은 똑같습니까? 아직 질문에 답하지 않았기 때문입니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

위대하고 끔찍한 MT4 영원히 (또는 전환 전략을 올바르게 개발하는 방법)

알렉세이 빅토 로프 , 2021.05.09 09:15

... 그리고 다른 컴퓨터에서 계정에 연결하고 몇 가지 예치금을 넣으면... MQL4는 무엇을 열까요???

아무도 MT5를 싫어하지 않습니다. 그는 초등 문제를 풀 때 몇 가지 문제의 예를 보여주었습니다.

OrderSend() 함수 실행 결과를 올바르게 처리하기만 하면 mql4의 단순함에서 벗어날 수 없습니다. 당신은 거래가 아니라 마이크로초를 잡는 자신의 목표를 가지고 있습니다 ... 하나의 DC에 문제가 있으며 이러한 문제를 MT 버그로 전달합니다. MQ 계정에 두 배의 위치를 표시하면 개발자가 관심을 보일 것입니다. Robo 데모에서 코드를 실행했는데 버그가 없었습니다.

귀하의 오류 메시지 중 일부는 정말 존경할 가치가 있지만 일부는... 죄송합니다. 말도 안되는 소리입니다. 적절한 단어가 충분하지 않습니다.

그게 다야 ... 승리의 날 축하합니다. 세계. 일하다. 5월.

 
Alexey Viktorov :

왜 그들은 똑같습니까? 아직 질문에 답하지 않았기 때문입니다.

다시 한 번, MT4/5의 작업 조건은 동일합니다. 스크립트 실행이 끝날 때 빈 계정에 100개의 열린 위치 가 있어야 합니다. 동시에 모든 터미널에서 스크립트를 실행하는 동안 일부 위치를 닫을 수 있습니다. 이 "개입"은 어리석은 결정이 없도록 하기 위해서만 필요합니다.

 for ( int i = 0 ; i < 100 ; i += OrderSend (Request, Result))
  ;

OrderSend() 함수 실행 결과를 올바르게 처리하기만 하면 mql4의 단순함에서 벗어날 수 없습니다. 당신은 거래가 아니라 마이크로초를 잡는 자신의 목표를 가지고 있습니다 ... 하나의 DC에 문제가 있으며 이러한 문제를 MT 버그로 전달합니다. MQ 계정에 두 배의 위치를 표시하면 개발자가 관심을 보일 것입니다. Robo 데모에서 코드를 실행했는데 버그가 없었습니다.

귀하의 오류 메시지 중 일부는 정말 존경할 가치가 있지만 일부는... 죄송합니다. 말도 안되는 소리입니다. 적절한 단어가 충분하지 않습니다.

문제가 보이지 않는다고 해서 문제가 없는 것은 아닙니다. MQ 데모는 디버깅 관점에서 볼 때 역겨운 곳입니다. 포지션이 열린 경우에만 시장가 주문에 대해 OrderSend가 true를 반환할 때 이러한 유형의 실행이 설정됩니다. 실제로 ECN 계정에는 이와 같은 것이 없습니다. true - 시장 주문이 수락되었습니다. 다음 단계 - 따라야 합니다. 주방 DC만 MQ-Demo에서와 같이 다른 실행 체계를 사용합니다.

그게 다야 ... 승리의 날 축하합니다. 세계. 일하다. 5월.

서로.

 
fxsaber :

빈 계정에 100개의 위치를 여는 스크립트를 MT5에 작성해야 합니다.


MT4에서는 이렇게 결정했습니다.

 void OnStart ()
{
   while ( OrdersTotal () < 100 )
     OrderSend ( _Symbol , OP_BUY, 0.1 , Ask, 0 , 0 , 0 );
    
   Print ( OrdersTotal ());
}

누가 MT5에 어떤 솔루션을 가지고 있습니까?

MT5에서 작성할 수 있는 가장 짧은 코드:

 MqlTradeRequest BuyRequest = { 0 };
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
   static bool run = false ;
   if (run) return ;
   BuyRequest.action = TRADE_ACTION_DEAL ;
   BuyRequest.type = ORDER_TYPE_BUY ;
   BuyRequest.symbol = _Symbol ;
   BuyRequest.volume = 0.1 ;
   BuyRequest.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
   BuyRequest.type_filling = GetFilling();
   MqlTradeResult result;
   run = OrderSend (BuyRequest, result);
}
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade ()
{
   MqlTradeResult result;
   while ( PositionsTotal () < 10 &&
         SymbolInfoDouble ( _Symbol , SYMBOL_ASK , BuyRequest.price) &&
         OrderSend (BuyRequest, result))
   {}
}
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING GetFilling( const uint Type = ORDER_FILLING_FOK )
{
   const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = ( ENUM_SYMBOL_TRADE_EXECUTION ):: SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_EXEMODE );
   const int FillingMode = ( int ):: SymbolInfoInteger ( _Symbol , SYMBOL_FILLING_MODE );

   return ((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN ) || ((FillingMode & (Type + 1 )) != Type + 1 )) ?
          (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE ) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT )) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC ) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK )) :
          ( ENUM_ORDER_TYPE_FILLING )Type);
}
//+------------------------------------------------------------------+

GetFilling() 없이 - 암호화에서 작동하지 않습니다(((

하지만 이 코드에서도 11개의 위치를 열었습니다.


 
Igor Makanu :

MT5에서 작성할 수 있는 가장 짧은 코드:

간결함을 위해 SB 할 수 있습니다.

하지만 이 코드에서도 11개의 위치를 열었습니다.

코드의 논리가 이와 같기 때문입니다.

 
fxsaber :

간결함을 위해 SB 할 수 있습니다.

코드의 논리가 이와 같기 때문입니다.

다음과 같은 경우에도 PositionsTotal()을 사용하여 작업이 해결되지 않습니다.

 void OnTrade ()
{
   if ( PositionsTotal () >= 10 ) return ;
   MqlTradeResult result;
   BuyRequest.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
   OrderSend (BuyRequest, result);
}

10개 위치일 때 열림, 13개일 때 열림

특별한 옵션은 없습니다. MqlTradeResult 결과의 주문 티켓을 기억하고 열린 포지션이 나타날 때까지 기다리면 지정된 수의 포지션 이 정확히 열릴 것입니다.

 
Igor Makanu :

다음과 같은 경우에도 PositionsTotal()을 사용하여 작업이 해결되지 않습니다.

10개 위치일 때 열림, 13개일 때 열림

특별한 옵션은 없습니다. MqlTradeResult 결과의 주문 티켓을 기억하고 열린 포지션이 나타날 때까지 기다리면 지정된 수의 포지션 이 정확히 열릴 것입니다.

그러니 기다려!!! 결국, mql4는 기다리고 있고 당신은 분개하지 않습니다. 그리고 MQL5에서는 요청을 보내고 실행해야 한다고 생각하기로 결정했습니다.

 
Igor Makanu :

다음과 같은 경우에도 PositionsTotal()을 사용하여 작업이 해결되지 않습니다.

10개 위치일 때 열림, 13개일 때 열림

특별한 옵션은 없습니다. MqlTradeResult 결과의 주문 티켓을 기억하고 열린 포지션이 나타날 때까지 기다리면 지정된 수의 포지션 이 정확히 열릴 것입니다.

이것은 더 이상 스크립트/서비스가 아니라 Expert Advisor입니다. 그러나 Expert Advisor가 있더라도 이러한 간단한 작업을 두 줄로 해결하려면 머리를 깨야 합니다.

 
Alexey Viktorov :

그러니 기다려!!! 결국, mql4는 기다리고 있고 당신은 분개하지 않습니다. 그리고 MQL5에서는 요청을 보내고 실행해야 한다고 생각하기로 결정했습니다.

여기에 여러 사람들이 어려움이 없다고 말했습니다. 그러나 그들은 해결책을 제시하지 않았습니다.

 
fxsaber :

여기에 여러 사람들이 어려움이 없다고 말했습니다. 그러나 그들은 해결책을 제시하지 않았습니다.

나도 하지 않을거야, 가장 단순한 이유로. ...코더를 가르치고 싶지는 않지만(해당 사항은 해당되지 않음), 필요한 경우 주저 없이 문제를 해결하겠습니다. 그리고 모두 같은 이유로 오랫동안 CodeBase는 어린 양에게서만 코드를 받아왔습니다. 다른 사람들은 모두 침묵...

 
Alexey Viktorov :

나도 하지 않을거야, 가장 단순한 이유로. ...코더를 가르치고 싶지는 않지만(해당 사항은 해당되지 않음), 필요한 경우 주저 없이 문제를 해결하겠습니다. 그리고 모두 같은 이유로 오랫동안 CodeBase는 어린 양에게서만 코드를 받아왔습니다. 다른 사람들은 모두 침묵...

혀로 빻는 것은 가방을 굴리는 것이 아닙니다. 그들은 취하고 가르칠 것입니다. 제발.

문제가 있으며 이는 이 브로커에서만 나타나는 것이 아닙니다.
문제는 특정 주문이 실행될 때까지 기다려야 하는 것이 아니라(다른 평면에서) 주문이 실행되는 순간 모든 목록(오픈, 마감, 거래, 포지션)에서 일시적으로 사라집니다. .

물론 다른 목발로 지지할 수 있습니다. 그러나 나는 인간적인 해결책을 원합니다. 그 너머로 fxsaber는 공개적으로 일하며 지나가는 사람들의 짖는 소리를 듣습니다.