오류, 버그, 질문 - 페이지 1978

 
fxsaber :

크롬.

파이어폭스에서는 여전히 상단에 테마를 업데이트했습니다.

그리고 왼쪽에 파란색. 스마트폰에 있던 브라우저를 사용해 보세요

 
STARIJ :
파이어폭스에서는 여전히 상단에 테마를 업데이트했습니다.

그리고 왼쪽에 파란색

크롬에서도 마찬가지입니다. 파란색/회색 아이콘을 자동으로 볼 수 없습니다. 그리고 대담한 유형의 읽지 않은 주제는 나에게 너무 감동을 주어 그것에 대해 쓰기까지 했습니다.

 
서비스 데스크에 이미 요청을 제출한 사람이 있습니까? 아니면 MQL에 친구를 추가하려는 MQ의 계획을 알고 있습니까? 강하게 부족합니다.
 

AcePrime-Demo 계정에 대한 흥미로운 사례입니다.

어드바이저 시작

 // Советник возвращает полностью сформированные торговые запросы (включая ручные)
#define TOSTRING(A)   #A + " = " + ( string )(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString (A) + " (" + ( string )(A) + ")\n"

string ToString( const MqlTradeRequest &Request )
{
   return (TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

string ToString( const MqlTradeResult &Result )
{
   return (TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
         TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +
         TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +
         TOSTRING(Result.retcode_external));
}

void OnTradeTransaction (   const MqlTradeTransaction &, const MqlTradeRequest & Request, const MqlTradeResult & Result )
{
   if (Request.action)
  {
     Print (ToString(Request));
     Print (ToString(Result));    
  }
}

그리고 우리는 손으로 모든 bo-symbol(바이너리 옵션)에 대한 포지션을 열려고 노력합니다. 터미널 로그에서 우리는

'3182780': market sell 1.00 XAUUSDbo
'3182780': failed market sell 1.00 XAUUSDbo [Invalid data]

전문가의 기록에는

Request.action = TRADE_ACTION_DEAL ( 1 )
Request.magic = 0
Request.order = 0
Request.symbol = XAUUSDbo
Request.volume = 1.0
Request.price = 0.0
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 0
Request.type = ORDER_TYPE_SELL ( 1 )
Request.type_filling = ORDER_FILLING_FOK ( 0 )
Request.type_time = ORDER_TIME_GTC ( 0 )
Request.expiration = 1970.01 . 01 00 : 00 : 00
Request.comment = 
Request.position = 0
Request.position_by = 0

Result.retcode = 4
Result.deal = 0
Result.order = 0
Result.volume = 0.0
Result.price = 0.0
Result.bid = 0.0
Result.ask = 0.0
Result.comment = 
Result.request_id = 9
Result.retcode_external = 0

선택하면 OrderCheck가 true를 반환합니다. 거래 세션이 열려 있습니다. 그러나 MT5는 수동 및 자동 요청 모두에 동일한 방식으로 맹세하여 retcode = 4를 발행합니다. 터미널에서 모든 것이 정상이라고 말하지만 시도했지만 아무 것도 나오지 않을 때 왜 그러한 상황이 발생합니까? 열리지 않을 것이라는 요청 없이 이해하는 방법은 무엇입니까? 그리고 이 네 번째 반환 코드는 무엇입니까?

GetLastError() 반환

ERR_TRADE_SEND_FAILED

4756

거래 요청을 보내지 못했습니다.


모든 것이 문제 없이 재생됩니다.
 

안녕하세요.

그런 코드가 컴파일되어서는 안 된다고 혼자 생각하는 것 같습니다(개인 회원 액세스 오류여야 함)?

 class cA;
class cB;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cA
  {
   //====================
private :
   //====================
   //===============
   //===============
   cB               *B;
   //===============
   //===============
   void               testfunc( void ){:: Print ( __FUNCSIG__ );}
   //====================
public :
   //====================
   //===============
   //===============
   void               test( void )
     {
      :: Print ( __FUNCSIG__ );

       if (:: CheckPointer (:: GetPointer ( this .B))== POINTER_INVALID ) return ;

       this .B.testfunc();    // Здесь идет вызов private метода объекта B, что вроде как не должно быть возможным
     }
   //===============
   //===============
   void               SetB(cB * const b){ this .B=b;}
   //===============
   //===============
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cB  : public cA
  {

  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   cA A;
   cB B;

   A.SetB(&B);
   A.test();

//---
   return ( INIT_SUCCEEDED );
  }

SD에서는 모든 것이 정상이라고 말하므로 가능합니다 ...

 
Andrey Barinov :

안녕하세요.

그런 코드가 컴파일되어서는 안 된다고 혼자 생각하는 것 같습니다(개인 회원 액세스 오류여야 함)?

SD에서는 모든 것이 정상이라고 말하므로 가능합니다 ...

MQL 규칙에 따르면 클래스의 인스턴스는 첫 번째 인스턴스와 동일한 클래스에 속하는 경우 다른 인스턴스의 private 필드 및 메서드에 자유롭게 액세스할 수 있습니다. cB는 cA에서 상속하므로 cB는 cA이므로 cA는 선언된 위치에 관계없이 cB의 모든 private 메서드와 인스턴스 필드에 액세스할 수 있습니다.

 
Vasiliy Sokolov :

MQL 규칙에 따르면 클래스의 인스턴스는 첫 번째 인스턴스와 동일한 클래스에 속하는 경우 다른 인스턴스의 private 필드 및 메서드에 자유롭게 액세스할 수 있습니다. cB는 cA에서 상속하므로 cB는 cA이므로 cA는 선언된 위치에 관계없이 cB의 모든 private 메서드와 인스턴스 필드에 액세스할 수 있습니다.

고맙습니다. 나는 문서에서 그것을 보지 못했다. 코를 찌를 수 있습니까?
 
Andrey Barinov :
고맙습니다. 나는 문서에서 그것을 보지 못했다. 코를 찌를 수 있습니까?
이것은 문서에 없습니다. 왜냐하면 언어의 문서화되지 않은 "기능"과 같은 종류입니다. 이 기능은 매우 이상하고 논쟁의 여지가 있지만 그럼에도 불구하고 발생했습니다.
 
Andrey Barinov :
고맙습니다. 나는 문서에서 그것을 보지 못했다. 코를 찌를 수 있습니까?

이것은 C++에서도 마찬가지 입니다(MQL은 C++의 이미지와 유사성으로 구축됩니다). 그들이 말했듯이 C++ 개인 정보는 객체 수준이 아니라 클래스 수준입니다. 그렇지 않으면 예를 들어 모든 개인 필드에 대한 특별한 getter 메서드가 없는 복사 생성자를 만드는 것이 불가능합니다.

 
Stanislav Korotky :

C++ 에서도 마찬가지입니다

이 예제를 C++로 컴파일해 보셨습니까? 아니면 일반적인 이론적 추론입니까?