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

 
Andrey Pogoreltsev :

Name 메서드로 초기화할 때 다음을 호출하는 다중 통화 교환에서 CSymbolInfo를 사용하는 경우:

그런 다음 USDCAD 기호를 테스트하는 동안 오류가 생성됩니다.

테스트 중 입금 통화 는 무엇입니까?

 
Slava :

테스트 중 입금 통화 는 무엇입니까?

미화. 한 쌍의 테스트 EURUSD M1. 베어 EA에서 재현해 보겠습니다. 지금까지는 작동하지 않았습니다. 그러나 로그와 한 쌍의 오류로 이어진 것은 이러한 방법이었습니다.

 
Slava :

테스트 중 입금 통화 는 무엇입니까?

일반적으로 재현하고 특징을 찾았습니다. 첨부된 테스트 설정.

베어 EA 코드 자체:

 #include <Trade\SymbolInfo.mqh>

int OnInit ()
  {
//---
   CSymbolInfo info;
   info.Name( "EURCHF.m" );
   info.Refresh();
   info.Name( "EURJPY.m" );
   info.Refresh();
   info.Name( "EURUSD.m" );
   info.Refresh();
   info.Name( "EURGBP.m" );
   info.Refresh();
   info.Name( "USDCAD.m" );
   info.Refresh();
//---
   return ( INIT_SUCCEEDED );
  }


이제 "기능", 약속대로) If in Name()은 다음과 같이 사용합니다.

   if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE ,m_tick_value))
       return ( false );
   if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE_PROFIT ,m_tick_value_profit))
       return ( false );
   if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE_LOSS ,m_tick_value_loss))
       return ( false );
   if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_SIZE ,m_tick_size))
       return ( false );

그러면 오류가 발생합니다. 그리고 이것이 오류가 사라지는 방법입니다.

   if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_SIZE ,m_tick_size))
       return ( false );
   if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE ,m_tick_value))
       return ( false );
   if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE_PROFIT ,m_tick_value_profit))
       return ( false );
   if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE_LOSS ,m_tick_value_loss))
       return ( false );


추신. 내 페니 쌍은 접두사 ".m"으로 호출됩니다. 이 예는 일반 쌍에서도 작동합니다.

파일:
test.png  11 kb
 
Andrey Pogoreltsev :

일반적으로 재현하고 특징을 찾았습니다. 첨부된 테스트 설정.


고맙습니다. 알아내자

 

MT5 빌드 2007의 버그입니다. 최적화 모드에서 입력 문자열이 63자로 잘립니다.

테스트 코드:

 #property strict

sinput string symbols = "AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY" ;
input    bool fortestopt = false ;
int OnInit (){
   Print ( "!!! " , StringLen (symbols), " | " ,symbols);

   return INIT_FAILED ;
}

void OnTick (){}


단일 실행 모든 것이 좋습니다:!!! 90 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY

fortestopt 매개변수로 최적화를 설정하고 에이전트 로그로 이동합니다. !!! 63 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,

 

누가 알려줄까..

내 페이지에 뉴스 피드 가 표시되지 않습니다.. 들어가기 전에 누가 무엇을 게시했는지 확인하십시오. 이제 깨끗한 페이지 .. 설정에서 모든 것이 정확하고 아무 것도 변경하지 않았습니다.

 

컴파일러 버그. 여기에서는 모든 것이 모호하지 않지만 모호성 오류가 발생합니다. 첫 번째 방법이 가장 적절하다고 해야 합니다. C++에서 확인했습니다.

 class A { };

class B
{
  A _a[];
 public :
        A * operator []( uint i)       { return &_a[i]; }
   const A * operator []( uint i) const { return &_a[i]; }  
};

void OnStart ()
{
  B b;
  b[ 0 ];  // 'operator[]' - ambiguous call to overloaded function
}
 
Evgenii Kuznetsov :

MT5 빌드 2007의 버그입니다. 최적화 모드에서 입력 문자열이 63자로 잘립니다.

테스트 코드:


단일 실행 모든 것이 좋습니다:!!! 90 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,NZDUSD,USDCAD,USDCHF,USDJPY

fortestopt 매개변수로 최적화를 설정하고 에이전트 로그로 이동합니다. !!! 63 | AUDUSD,EURGBP,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPJPY,GBPNZD,GBPUSD,

한 번의 테스트로 63자로 잘리지 않는다는 사실은 그저 우연일 뿐입니다.

문자열 유형의 입력 매개변수 길이는 63자(널 종결자를 포함하여 64자)를 초과할 수 없습니다.

 
Slava :

한 번의 테스트로 63자로 잘리지 않는다는 사실은 그저 우연일 뿐입니다.

문자열 입력 매개변수의 길이는 63자(널 종결자를 포함하여 64자)를 초과할 수 없습니다.

이것은 일종의 엄격한 제한입니다. 오늘날의 근거는 무엇입니까? 그리고 여러 캐릭터에서 클러스터를 설정하는 것이 얼마나 편리합니까? 12개의 다른 매개변수를 생성하시겠습니까? 편안해?

 
Slava :

한 번의 테스트로 63자로 잘리지 않는다는 사실은 그저 우연일 뿐입니다.

문자열 유형의 입력 매개변수 길이는 63자(널 종결자를 포함하여 64자)를 초과할 수 없습니다 .

이 제한은 적절하지 않지만 우리는 한 줄에 감자 킬로그램의 가격을 기록하지 않습니다.

사유: