#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 parametersinputbool AsSeries=true;
inputint period=15;
inputENUM_MA_METHOD smootMode=MODE_EMA;
inputENUM_APPLIED_PRICE price=PRICE_CLOSE;
inputint shift=0;
//--- indicator buffersdouble MABuffer[];
int ma_handle;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingif(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 bufferArraySetAsSeries(MABuffer,AsSeries);
IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//---
ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Copy the values of the moving average in the buffer MABufferint 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 callreturn(rates_total);
}
//+------------------------------------------------------------------+
MT3には詳しくないのですが、MT3で動いていたコードはMT4でも動いていたと思います。
MT4ユーザーの大半はコードが書けないので、MT4で気に入っていたIndicatorがMT5で存在しないなら、MT5を使うことはないでしょう。
私の知る限り、MT3のコードはMT4では動きません。言語が全く違うのです。MT4/MT5についての議論は終わりがなく、MT4の存続につながる多くの要因があります、私は、MT5がMT4を完全に置き換えることを意図していたかどうかさえわかりません。
とにかく、新バージョンについて、Metaquotesは、ex4レベルでは後方互換性があるが、mq4レベルではそうではないと述べています。
新しいメタエディタのヘルプにざっと目を通しましたが、新しいバージョンmql4は思った以上に旧バージョンと違うようですね。
私の知る限りでは、MT3のコードはMT4では動きませんし、言語も大きく異なります。MT4/MT5についての議論は終わりがなく、MT4の存続につながる多くの要因があります、私は、MT5がMT4を完全に置き換えることを意図していたかどうかさえわかりません。
とにかく、新バージョンについて、Metaquotesは、ex4レベルでは後方互換性があるが、mq4レベルではそうではないと述べています。
私の知る限りでは、MT3のコードはMT4では動きませんし、言語も大きく異なります。MT4/MT5についての議論は終わりがなく、MT4の存続につながる要因はたくさんありますし、MT5がMT4を完全に置き換えることを意図していたかどうかさえわかりません。
とにかく、新バージョンについて、Metaquotesは、ex4レベルでは後方互換性があるが、mq4レベルではそうではないと述べています。
付属のカスタム・インディケータは、オリジナルのmql4バージョンで、init()関数の名前が変更されており、新しいコンパイラでコンパイルされ、新しいターミナルで実行されるようですが、これは、我々が望むなら、まだIndicatorCounted()を使用してインディケータをコーディングできることを意味しています。
init() は int OnInit(void) と呼ばれ、(INIT_SUCCEEDED) を返すようになりました。
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文字列配列をパラメータとして受け取ることができなくなりました。
これらの違いは致命的なものではなく、コードの中で簡単に修正することができます。その代わり、MQL5の複数の機能を利用でき、実行速度が向上し、品質管理もより厳しくなりました。
...
init() は int OnInit(void) と呼ばれるようになり、return(INIT_SUCCEEDED) を返すようになりました。
メタエディターの新機能が気に入っています。
新しいバージョンがリリースされると、新しいmql4のドキュメントがmql5のコーディングに基づいているため、初心者のためのフォーラムで多くの混乱を引き起こすと思います。つまり、このフォーラムやコードベースに記述されていることの多くが、mql4のドキュメントと矛盾することになります。
新しいmql4ドキュメントからインジケータバッファを セットアップする。(これは実際にはエラーがあり、コンパイルできません)
新しいバージョンがリリースされると、新しいmql4のドキュメントがmql5のコーディングに基づいているため、初心者のためのフォーラムで多くの混乱を引き起こすと思います。つまり、このフォーラムやコードベースに記述されていることの多くが、mql4のドキュメントと矛盾することになります。
新しいmql4ドキュメントからインジケータバッファをセットアップする。(これは実際にはエラーがあり、コンパイルできません)
すでにMQL5でコーディングされているのでしょうか?