English Русский 中文 Español Deutsch Português
エキスパートアドバイザ作成の特徴

エキスパートアドバイザ作成の特徴

MetaTrader 4 | 29 9月 2015, 09:08
1 560 0
MetaQuotes
MetaQuotes

MetaTrader 4取引システムでのエキスパートアドバイザの作成とテストにはいくつかの特徴があります。

  • ポジションを開く前に、アカウントに利用可能な資金があるか確認する必要があります。資金が不足している場合、ポジションオープンの操作は失敗に終わります。この時、"FreeMargin"の値のテストの時のみ、1ロットの金額が1000であるため、1000以上である必要があります。

    if(AccountFreeMargin() < 1000) return(0); // 資金がない-戻る
  • Time、Open、Low、High、Close、Volumeなど定義済みの配列を使って、履歴データを利用することが出来ます。これらの配列のインデックスは終りから始めに向けて増加するようになっています。つまり、最後のデータはインデックスの値がゼロとなります。インデックス1は、1期間前にシフトしたデータ、インデックス2は2期間前、インデックス3は3期間前となります。

    // もし前のバーのCloseが 
    // これより先のCloseより小さい場合
    if(Close[1] < Close[2]) return(0);
  • 違う期間や違う通貨ペアによる履歴データも利用することができます。そういった履歴データを取得するには、事前に1次元配列を定義し、ArrayCopySeries機能を使いコピー操作を行う必要があります。関数を呼び出す際、より少ない数のパラメータをパスすることができ、デフォルトのパラメータ を指定しなくてもよいです。

    double eur_close_m1[];
    int number_copied = ArrayCopySeries(eur_close_m1, MODE_CLOSE, 
                                        "EURUSD", PERIOD_M1);
    
  • 任意の他のパラメータ作成時と同様に、エキスパートアドバイザを作成する際、いくつかの追加のデバッグデータを取り出すことが必要です。MQL4言語はいくつかのそのようなデータを取り出す方法を提供しています。

    • Alert機能はユーザによって定義されたデータを持つダイアログボックスを起動します。

      Alert("FreeMargin grows to ", AccountFreeMargin(), "!");
    • Comment機能はチャートの左上の角にユーザによって定義されたデータを表示します。文字配列\nは改行の為に使用します。

      Comment("FreeMargin is ", AccountFreeMargin(), ".");
    • Print機能はユーザによって定義されたデータをシステムログに保存します。

      Print("FreeMargin is ", AccountFreeMargin(), ".");
  • GetLastError関数によってプログラムエラーを見つけることが出来ます。例えば、注文操作はチケット番号を返します。チケット番号がゼロに等しい場合(何らかのエラーが発生した)、エラーについての追加情報を明確にする為に、GetLastError関数を呼び出す必要があります。

    int iTickNum = 0;
    int iLastError = 0;
    ...
    iTickNum = OrderSend(Symbol(), OP_BUY, g_Lots, Ask, 3, 0, 
                         Ask + g_TakeProfit * g_Points);
    if(iTickNum <= 0) 
      {
        iLastError = GetLastError();
        if(iLastError != ERR_NO_ERROR) 
            Alert("Some Message");  }
    GetLastError関数は最後に発生したエラーのコードを取得してエラー値をゼロ値に変換することに注意する必要があります。このため、この関数の繰り返しの呼出は、いつもゼロの値を返します。
  • 新しいバーの開始をどうやって定義したらよいのか?これにはいくつかの方法があります。


    1つ目の方法は、バーの数のチェックに基づいた定義です。

    static int prevbars = 0;
    ...
    if(prevbars == Bars) return(0);
    prevbars = Bars;
    ...

    この方法は履歴のロード中に動作しないことがあります。つまり、バーの数が変わりましたが、『前の』バーはまだ作成されていません。この場合、1に等しい数値の間の差の検証を複雑化することがあります。 

    次の方法は、Volume値は各バーのティック数を元に作成され、初めのティックは再び形成されたバーのVolume値が1と等しいことを意味しています。

    if( Volume[0] > 1) return(0);
    ...
    

    この方法は価格ティックが集中しすぎた場合に動作しないことがあります。入ってくる価格ティックの処理は別のスレッドで行われます。もしこのスレッドが次のティックが入る時にビジー状態の場合、プロセッサの過負荷を回避する為、このティックは処理されません!この場合、同様に、以前のVolume値の保存を使った検証が複雑化することがあります。

    3つ目は、バー開始の時間に基づいた定義方法です。

    static datetime prevtime=0;
    ...
    if(prevtime == Time[0]) return(0);
    prevtime = Time[0];
    ...
    

    これは最も信頼性の高い方法です。どのような状態でも動作します。

  • CSV形式ファイルでの作業例:

    int h1;
    h1 = FileOpen("my_data.csv", MODE_CSV | MODE_WRITE, ";");
    if(h1 < 0)
      {
       Print("Unable to open file my_data.csv");
       return(false);
      }
    FileWrite(h1, High[1], Low[1], Close[1], Volume[1]);  
    FileClose(h1);

    コードに対しいくつか説明をします。初めにCSV形式ファイルが開きます。ファイルが開かないエラーが発生した場合、プログラムは自動的に終了します。ファイルが正常に開いた場合、内容が削除され、データをファイルに書き込み、ファイルを閉じます。あなたが開いているファイルの内容を保持する必要がある場合は、MODE_READ口モードを使用する必要があります。

    int h1;
    h1 = FileOpen("my_data.csv", MODE_CSV | MODE_WRITE | MODE_READ, ";");
    if(h1 < 0)
      {
       Print("Unable to open file my_data.csv");
       return(false);
      }
    FileSeek(h1, 0, SEEK_END);
    FileWrite(h1, High[1], Low[1], Close[1], Volume[1]);  
    FileClose(h1);

    この例で保存はファイルの終わりに行われています。これを行う為に、私たちはファイルが開かれた直後に「FileSeek」機能を使用しました。

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1494

カスタムインディケータ作成の特徴 カスタムインディケータ作成の特徴
カスタムインディケータ作成の特徴
トレードシステムの評価 - 参入、退出と取引における一般の有効性 トレードシステムの評価 - 参入、退出と取引における一般の有効性
トレードシステムの有効性と利益性を決定できる多数の尺度がある。しかし、トレーダーは常にどのシステムでも試したいと考えている。この記事はどのようにして有効性の尺度に基づいた統計が MetaTrader 5 のプラットフォームに使えるかを教えるものである。 これは取引による統計の解釈を、S.V.Bulashev(ブラシェフ)による著作"Statistika dlya traderov"(トレーダーのための統計) の記述に矛盾しないものに変換するクラスを含んでいる。また最適化のためのカスタムファンクションの例も含んでいる。
Strategy Tester: トレード戦略のテストモード Strategy Tester: トレード戦略のテストモード
テクニカル分析の多くのプログラムは、履歴データで取引戦略をテストすることができます。
他のインジケーターをベースにインジケーターを作成する 他のインジケーターをベースにインジケーターを作成する
MQL5ではインジケーターをゼロから、あるいは他に顧客の端末に組み込まれていたり、カスタムのものだったりで既に存在するものからなど、どちらからでも作成することができる。 そしてまたここで2つの方法がある - あるインジケーターに新しい計算やグラフィックスタイルを加えることでを改良する方法、あるいは顧客の端末に組み込みあるいはカスタムのものを iCustom() あるいは IndicatorCreate() ファンクション経由で使う方法である。