베타 빌드 530의 배열 크기 조정 버그 - 페이지 3

 
RaptorUK :

저는 MT3에 익숙하지 않지만 MT3에서 실행되었던 코드가 MT4에서도 실행되었다고 가정합니다. . . 이것은 MT4 --> MT5의 문제이며 상황이 다른 이유입니다.

대부분의 MT4 사용자는 코딩을 할 수 없습니다. MT4에서 좋아하는 지표가 MT5에 없으면 MT5를 사용하지 않습니다.

내가 아는 한 MT3 코드는 MT4에서 실행되지 않지만 언어는 매우 다릅니다. MT4/MT5에 대한 이 논쟁은 끝이 없습니다. MT4의 생존으로 이어지는 많은 요소가 있습니다. MT5가 MT4를 완전히 대체하기 위한 것인지조차 확신할 수 없습니다.

어쨌든 새 버전에 대해 Metaquote는 ex4 수준에서는 이전 버전과 호환되지만 mq4 수준에서는 그렇지 않을 것이라고 말했습니다.

 

나는 새로운 메타에디터 도움말을 통해 빠르게 살펴보았고, 새로운 버전의 mql4는 내가 생각했던 것보다 이전 버전과 많이 달라 보입니다.

 
angevoyageur :

내가 아는 한 MT3 코드는 MT4에서 실행되지 않지만 언어는 매우 다릅니다. MT4/MT5에 대한 이 논쟁은 끝이 없습니다. MT4의 생존으로 이어지는 많은 요소가 있습니다. MT5가 MT4를 완전히 대체하기 위한 것인지조차 확신할 수 없습니다.

어쨌든 새 버전에 대해 Metaquote는 ex4 수준에서는 이전 버전과 호환되지만 mq4 수준에서는 그렇지 않을 것이라고 말했습니다.

현재 .ex4 표시기, 스크립트 및 EA와의 호환성은 언어뿐만 아니라 터미널 및 작동 방식의 변경 사항에 관한 것입니다. 예를 들어 전략 테스터를 변경하면 전략 테스터 에서 주로 사용하도록 설계된 EA가 손상될 수 있지만 동일한 EA가 라이브 차트에서는 제대로 작동하지만 더 이상 주요 기능을 수행하지 않습니다. . .
 
angevoyageur :

내가 아는 한 MT3 코드는 MT4에서 실행되지 않지만 언어는 매우 다릅니다. MT4/MT5에 대한 이 논쟁은 끝이 없습니다. MT4의 생존으로 이어지는 많은 요소가 있습니다. MT5가 MT4를 완전히 대체하기 위한 것인지조차 확신할 수 없습니다.

어쨌든 새 버전에 대해 Metaquote는 ex4 수준에서는 이전 버전과 호환되지만 mq4 수준에서는 그렇지 않을 것이라고 말했습니다.

나에게 그것은 mq4 수준에서 이전 버전과 호환되어야 하는 것처럼 보입니다. 포함된 사용자 지정 표시기 는 새 컴파일러에서 컴파일하고 새 터미널에서 실행되는 init() 함수의 이름을 변경한 원래 mql4 버전입니다. 즉, 원하는 경우 IndicatorCounted()를 사용하여 표시기를 계속 코딩할 수 있습니다.

init()는 이제 int OnInit(void)라고 하며 return(INIT_SUCCEEDED);

 
SDC :

나에게 그것은 mq4 수준에서 이전 버전과 호환되어야 하는 것처럼 보입니다. 포함된 사용자 지정 표시기는 새 컴파일러에서 컴파일하고 새 터미널에서 실행되는 init() 함수의 이름을 변경한 원래 mql4 버전입니다. 즉, 원하는 경우 IndicatorCounted()를 사용하여 표시기를 계속 코딩할 수 있습니다.

init()는 이제 int OnInit(void)라고 하며 return(INIT_SUCCEEDED);

죄송하지만 mq4 수준에서는 이전 버전과 호환되지 않습니다. 첫 번째 베타 발표를 참조하세요.

이전 MQL4 버전과의 차이점:

  • AND/OR 논리 연산의 우선 순위를 변경했습니다. 이제 모든 것이 표준 C/C++와 유사합니다.

  • 논리 표현의 단축 평가를 도입했습니다. 이제 논리 표현식이 끝에 도달하기 전에 평가될 때 나머지 후속 표현식은 C/C++에서와 같이 평가되지 않습니다.

  • 이제 스위치 연산자에는 정수 값만 사용됩니다. 실제 값은 이전에 사용되었을 수 있습니다.

  • 더 이상 변수 이름에 점 기호를 사용할 수 없습니다. 또한 '@', '$' 및 '?' 기호는 변수 이름에 사용할 수 없습니다.

  • 시작 기능에 대한 요구 사항이 강화되었습니다. 매개변수는 이전에 시작 기능에서 설정되었을 수 있습니다. 이제 모든 init, start, deinit, OnInit, OnStart, OnTick, OnTimer 및 기타 진입점은 해당 서명과 정확히 일치해야 합니다.

  • 키워드 확장으로 인해 short, long, float, const, virtual, input, delete, new, do, char 와 같은 이름은 이제 사용할 수 없습니다.

  • 이제 가져온 dll 함수는 MQL5에서와 같이 MQL 문자열 배열을 매개변수로 허용할 수 없습니다.

  • 기존 소스 파일에서 동일한 이름으로 선언된 단순 변수와 충돌할 수 있는 사전 정의된 _Period, _Symbol, _LastError, _CriticalError, _StopFlag, _Point, _Digits, _UninitReason, _RandomSeed 변수 이름이 도입되었습니다.

  • datetime형은 MQL5와 같이 8바이트형이 되었습니다.

차이점은 중요하지 않으며 코드에서 쉽게 수정할 수 있습니다. 그 대가로 우리는 여러 MQL5 기능, 향상된 실행 속도 및 훨씬 더 엄격한 품질 관리에 액세스합니다.

큰 변화는 아니지만 100% 하위 호환성(mq4)이 없다는 의미입니다.
 
SDC :

...

init()는 이제 int OnInit(void)라고 하며 return(INIT_SUCCEEDED);

두 버전을 모두 사용할 수 있습니다.
 

메타에디터의 새로운 기능이 마음에 듭니다.

 

새 mql4 문서가 mql5 코딩을 기반으로 하기 때문에 새 버전이 출시되면 초보자 포럼에서 많은 혼란을 야기할 것이라고 생각합니다. 이는 이 포럼과 코드베이스에 설명된 대부분이 mql4 문서와 모순된다는 것을 의미합니다.

새 mql4 문서에서 표시기 버퍼 설정: (실제로 오류가 있고 컴파일되지 않음)

 #property copyright "2009, MetaQuotes Software Corp."
#property link       "https://www.mql5.com"
#property version   "1.00"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot MA
#property indicator_label1   "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1   1
//--- input parameters
input bool                AsSeries= true ;
input int                 period= 15 ;
input ENUM_MA_METHOD      smootMode= MODE_EMA ;
input ENUM_APPLIED_PRICE price= PRICE_CLOSE ;
input int                 shift= 0 ;
//--- indicator buffers
double                    MABuffer[];
int                       ma_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   if (AsSeries) ArraySetAsSeries (MABuffer, true );
   Print ( "Indicator buffer is timeseries = " , ArrayGetAsSeries (MABuffer));
   SetIndexBuffer ( 0 ,MABuffer, INDICATOR_DATA );
   Print ( "Indicator buffer after SetIndexBuffer() is timeseries = " ,
         ArrayGetAsSeries (MABuffer));
   
//--- change the oredr of accessing elements of the indicator buffer
   ArraySetAsSeries (MABuffer,AsSeries);
   
   IndicatorSetString ( INDICATOR_SHORTNAME , "MA(" +period+ ")" +AsSeries);
//---
   ma_handle= iMA ( Symbol (), 0 ,period,shift,smootMode,price);
   return (INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//--- Copy the values of the moving average in the buffer MABuffer
   int copied= CopyBuffer (ma_handle, 0 , 0 ,rates_total,MABuffer);
 
   Print ( "MABuffer[0] = " ,MABuffer[ 0 ]); // Depending on the value AsSeries
                                       // Will receive a very old value
                                       // Or for the current unfinished bar
 
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
SDC :

새 mql4 문서가 mql5 코딩을 기반으로 하기 때문에 새 버전이 출시되면 초보자 포럼에서 많은 혼란을 야기할 것이라고 생각합니다. 이는 이 포럼과 코드베이스에 설명된 대부분이 mql4 문서와 모순된다는 것을 의미합니다.

새 mql4 문서에서 표시기 버퍼 설정: (실제로 오류가 있고 컴파일되지 않음)

네 맞습니다. 어려운 전환이 될 것입니다. 그러나 초보자 가 아니라 mql5를 아직 모르는 실험 mql4 코더에게는 어려울 것이라고 생각합니다. 일반적으로 초보자는 문서를 읽지 않습니다.
 

MQL5 angevoyageur로 이미 코딩하고 있습니까?