10:19MetaQuotes0832はじめに他のインディケーター値に適用されるインディケーターの改善タスクを考えましょう。(TSI)を続けて使用します。他のインディケーター値に基づいたカスタムインディケーターOnCalculate()関数呼び出しのショートフォームを使ってインディケーターを書く場合、価格データだけでなく、他のインディケーターデータによっても計算できる事実を見逃すかもしれません。(内蔵またはカスタムのインディケーターにかかわらず)簡単な例を取りましょう。(RSI(14))に適用されべきであることを指定します。結果は予測とはだいぶ違います。Windowではその値がまた不明瞭であることがわかります。不在か(始めの部分で)または常に-100に等しいです。どこにも使われていないために起こります。パラメータにある空の値の数を指定します。値の計算に使えません。関数呼び出しの最初のフォームの定義を思い出しましょう。パラメータは0に等しいです。価格[0]から始まる正しい情報を持っています。なるとは限りませんただし、他のインディケーターデータを計算のソースとして指定すると、かならずしもそうなるとは限りません。配列に含まれる値を確認しましょう。関数に、確認したい値を出力するコードを追加します。関数の始まりはこのように見えます。データを指定しましょう。インディケーター値が使われている場合、プロットされず計算の考慮に入れるべきでない値が見えます。1.797693134862316e+308と同じ値を持ちます。定数のため、この数によく出くわします。空の値をゼロで埋めることは、この値が他のインディケーターによる計算結果にもなりえるので万能の解決策ではありません。1.797693134862316e+308の値はdoubleタイプの最大化可能値のため選ばれました。定数として表されています。定数を使い明瞭にさせるといいです。本質的にこのような値に戻ることができません!配列(インデックス14)の15個目のエレメントだけが50に等しい合理的な値を持ちます。パラメータを使ってこのようなケースのデータ処理を適切に組織化できます。これらの空の値を避けなければなりません。パラメータと作画なしで初期バー数を定義するPLOT_DRAW_BEGINプロパティには密接な関係があることに注意するべきです。関数に以下のコードが見えます。入力変数)に等しいインデックスを持つバーからしか始まらず、そのバー以前ではプロットがないことを意味します。言語では、インディケーターデータBに基づくインディケーターAの計算は常にインディケーターのゼロバッファー値で実行されます。関数と一緒にゼログラフィカルプロットに割り当てられます。作成したことになります。インディケーターは14個目のバーからプロットされます。RSIインディケーターのゼロバッファー値を含みます。プロパティから入手されます。インディケーターがチャートのはじめから作画されないことを覚えておいて下さい。インディケーターにラインでプロットされる最初のバーインデックスはr+s-1に等しいです。配列の二次的な平滑期間。インディケーターをプロットする値がありません。インデックスから始まります。バーの作画を無効にする記載があります。バーによってデータ作画の始まりのポジションを増やさなければなりません。パラメータを考慮していきます。パラメータは移転されたプロパティです。1つのインディケーターを別のインディケーター値に負荷するルールを作れます。ポジションNbから作画されます。ポジションから作画されます。値に計算されることを意味します。インディケーター値でできていることを意味します。(25+13-1)+14=51です。インディケーターの作画が52個めのバーから始まります。パラメータで指定されたポジションから始まることはすでに知っています。コードをステップごとに修正していきましょう。配列値を計算するコードです。ポジションから始め、修正されたコードは以下のように見えます。(コード変更は太字にしてあります。}価格[0]から価格[begin-1]までの値は計算に使えないので、価格[begin]から始めます。配列の計算に使う最初の値は以下のように見えます。1でなく初期データstart=begin+1を持ちます。配列の指数平滑に入ります。ルールはまたシンプルです。[]は基礎配列で、これらの配列の計算値は今やbeginより大きいインデックスで始まります。今はこのブロックはこのように見えます。begin+1,r,AbsMTMBuffer,EMA_AbsMTMBuffer);ご覧のとおり、修正全体はbeginパラメータで定義された開始データの増加に対応するためのものでした。複雑なことは何もありません。同じように第二ブロックの平滑を変更します。}このインディケーターの調整は終わりです。入力配列の最初のbeginの空の値をスキップし、この逸脱によるオフセットを考慮します。別のインディケーターがTSI値を計算に使えることを覚えておかなければなりません。このため、インディケーター空の値をEMPTY_VALUEと設定します。デフォルトによって配列は定義値と初期化されません。SetIndexBuffer()関数によってインディケーターバッファーに指定される配列でも同じことが当てはまります。配列がインディケーターバッファーであるなら、そのサイズは値OnCalculate()関数内のrates_totalパラメータの値によります。値で初期化したくなるかもしれません。OnCalculate()の始めで一気に。}しかし以下の理由で推奨されません。シンボルの新しい気配値を受信し、そのデータはこのインディケーターの計算に使われます。すると、バーの数が増えます。そのためクライアントターミナルがこのインディケーターバッファーの追加メモリを貯えます。エレメント値はどのような値にもなりえます。初期の初期化は間違った確実性を与えます。明示されていない全ての配列エレメントは初期化で指定された値で記入されます。それは真実ではありません。変数値や配列エレメントが私たちにとって必要な値で初期化されるとは考えるべきではありません。このインディケーターバッファーの各エレメントにおいて値を設定するべきです。バーの値がこのインディケーターアルゴリズムで定義されていない場合、空の値で明示的に設定するべきです。このインディケーターバッファーが除算で計算されると、ケースによっては除数値は0です。MQL5において0で割ることはクリティカル実行時エラーになり、mql5-プログラムの即時終了になることを知っています。コードでこの特別なケースを取り扱い0で割ることを防ぐのではなく、バッファーエレメント値を設定する必要があります。作画スタイル用に空として振当てた値を使う方がいいです。ある作画スタイルではPlotIndexSetDouble()関数を使って、ゼロを空の値として定義しました。この作画におけるこのインディケーターバッファーのすべての空の値は明示的にゼロの値に定義する必要があります。IndicatorBuffer[i]=...その上、もしDRAW_BEGINが作画に指定されている場合、0からDRAW_BEGINまでのこのインディケーターバッファーのすべてのエレメントは自動的にゼロで記入されます。結論では簡単にまとめましょう。インディケーターが他のインディケーターに基づいて正しく計算されるにはいくつか必要条件があります。(DBL_MAX)の最大値にまさに等しいです。インディケーターの重要値のスタートインデックスの詳細については、OnCalculate()内ショートフォームbegin入力パラメータを分析するべきです。パラメータを以下のコードを使って設定します。エレメントは自動で空の値で記入されます。関数内にbeginバーで追加的オフセットを追加しましょう。}以下のコードを使って、EMPTY_VALUEとは異なる自分の空の値をOnInit()関数内で指定できます。PlotIndexSetDouble(plotting_style_index,PLOT_EMPTY_VALUE,your_empty_value);以下のコードを使い、このインディケーターバッファーのワンタイム初期化に頼ってはいけません。しなければなりません。将来、インディケーターを書く経験を積んだ時、本記事の範囲外のケースに出くわすかもしれません。その時はあなたのMQL5の知識で解決できるようになっていることを願います。Ltd.が保有していますこれらのマテリアルの全部または一部のコピーや再プリントは禁じられています。自分のインディケーターの作成インディケーターとは何でしょう?スクリーン上に便利な方法で表示したい計算値の一式です。値の一式は配列としてプログラムに表されます。値)に結果を記録するアルゴリズムを書くことを意味します。Indexの作成について説明することで、MQL5でどのようにインディケーターを書くか説明します。新しいターミナルと言語のすべての可能性と特徴をリストすることはしません。それらはあまりにも多くありすぎ、新規の特徴によっては別の記事で説明するに値します。ここにはオブジェクト指向プログラミングで書かれたコードがありません。開発者にとってさらに有利になる点として、ただ単に言及するにはあまりにも真剣なトピックです。詳細についてMQL4と比較しながら考察します。初心者にも経験のある開発者にも本記事が有益となる事を願います。何か新しく学べることがあると思います。トレードロボットがこの種の検証をできない場合、どんなトレードストラテジーも負け戦略になる可能性があります。Advisorにおいても便利な検証例を紹介します。MQL5でのオブジェクト作成と削除の順番MQL5プログラムでは、すべてのオブジェクトはカスタムオブジェクトだろうと、動的配列またはオブジェクト配列は特定の方法で作成され削除されます。オブジェクトは他のオブジェクトの一部で、非初期化のオブジェクト削除の順は特に重要になります。本記事ではオブジェクトを使用するメカニズムの例を紹介します。