ベータ版530での配列リサイズの不具合 - ページ 3

 
RaptorUK:

MT3には詳しくないのですが、MT3で動いていたコードはMT4でも動いていたと思います。

MT4ユーザーの大半はコードが書けないので、MT4で気に入っていたIndicatorがMT5で存在しないなら、MT5を使うことはないでしょう。

私の知る限り、MT3のコードはMT4では動きません。言語が全く違うのです。MT4/MT5についての議論は終わりがなく、MT4の存続につながる多くの要因があります、私は、MT5がMT4を完全に置き換えることを意図していたかどうかさえわかりません。

とにかく、新バージョンについて、Metaquotesは、ex4レベルでは後方互換性があるが、mq4レベルではそうではないと述べています。

 

新しいメタエディタのヘルプにざっと目を通しましたが、新しいバージョンmql4は思った以上に旧バージョンと違うようですね。

 
angevoyageur:

私の知る限りでは、MT3のコードはMT4では動きませんし、言語も大きく異なります。MT4/MT5についての議論は終わりがなく、MT4の存続につながる多くの要因があります、私は、MT5がMT4を完全に置き換えることを意図していたかどうかさえわかりません。

とにかく、新バージョンについて、Metaquotesは、ex4レベルでは後方互換性があるが、mq4レベルではそうではないと述べています。

現在の.ex4インディケータ、スクリプト、EAとの互換性は、言語だけでなく、ターミナルとその動作方法の変更も含まれます。 例えば、Strategy Testerの 変更により、Strategy Testerで主に使用するために設計されたEAが壊れる可能性があり、同じEAがライブチャート上では問題なく動作しますが、本来の機能を果たすことができなくなります。
 
angevoyageur:

私の知る限りでは、MT3のコードはMT4では動きませんし、言語も大きく異なります。MT4/MT5についての議論は終わりがなく、MT4の存続につながる要因はたくさんありますし、MT5がMT4を完全に置き換えることを意図していたかどうかさえわかりません。

とにかく、新バージョンについて、Metaquotesは、ex4レベルでは後方互換性があるが、mq4レベルではそうではないと述べています。

付属のカスタム・インディケータは、オリジナルのmql4バージョンで、init()関数の名前が変更されており、新しいコンパイラでコンパイルされ、新しいターミナルで実行されるようですが、これは、我々が望むなら、まだIndicatorCounted()を使用してインディケータをコーディングできることを意味しています。

init() は int OnInit(void) と呼ばれ、(INIT_SUCCEEDED) を返すようになりました。

 
SDC:

mq4レベルで後方互換性があるように見えます。付属のカスタムインジケータはオリジナルのmql4バージョンで、init()関数の名前が変更され、新しいコンパイラでコンパイルされて新しいターミナル上で実行されます。

init()はint OnInit(void)と呼ばれるようになり、return(INIT_SUCCEEDED)を返します。

申し訳ありませんが、mq4レベルの後方互換性はありません、最初のベータ版のアナウンスをご覧ください。

旧MQL4版との相違点。

  • AND/OR論理演算の優先順位を変更しました。これで、すべてが標準のC/C++に近いものになりました。

  • 論理式の短縮評価を導入。論理式が終了に達する前に評価された場合、C/C++のように残りの後続の式は評価されないようになった。

  • switch 演算子に整数値のみを使用するようにしました。以前は実数値も使用可能でした。

  • 変数名にドット記号が使えなくなりました。また、'@'、'$'、'?'記号も変数名で使用できなくなりました。

  • 開始 関数の条件を厳しくしました。従来は、開始関数にパラメータを設定することができました。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でコーディングされているのでしょうか?