インテリジェント取引の特性

15766 ワード


MetaTrader 4トランザクションシステムでインテリジェントトランザクションを作成し、テストするには、以下の特性が挙げられます.
  • は、開倉前に口座内に自由保証金があるかどうかを検証しなければならない.口座内の自由保証金が不足している場合、開倉取引は失敗します.「FreeMargin」の値が1000未満であることをテストできます.テスト期間中の標準手の価格は1000です.
    if(AccountFreeMargin() < 1000) return(0); //   -  
  • 事前設定配列Time,Open,Low,High,Close,Volumeを使用して履歴データを取得できます.履歴データのため、指数の増加は徐々に減少している-指数の最後の値は0です.指数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);
  • インテリジェントトランザクションの作成には、他のプログラムの作成と同様に追加のデバッグ情報が必要です.MQL 4言語では、いくつかの情報を取得する方法が提供されています.
  • 関数「Alert」には、ユーザー指定データを表示するダイアログ・ウィンドウが表示されます.
    Alert("FreeMargin grows to ", AccountFreeMargin(), "!");
  • 関数Commentでは、ユーザーが指定したデータがグラフウィンドウの左上隅に表示されます.記号""は、ワード行の転送に使用されます.
    Comment("FreeMargin is ", AccountFreeMargin(), ".");
  • 関数「Print」は、ユーザが指定したデータをシステムログに印刷する.
    Print("FreeMargin is ", AccountFreeMargin(), ".");

  • プログラムでのエラーの取得は、関数「GetLastError」の機能に非常に役立ちます.たとえば、取引注文は常に代替グラム数を返します.このパーセンテージが0に等しい場合(ビジネスの実行中にエラーが発生した場合)、このエラーの詳細を取得するには、関数「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」関数を呼び出してエラーコードを表示し、変更値を再設定する必要があります.したがって、この関数を連続的に呼び出すと、返される値は0になります.
  • 開始柱はどのように確定しますか?(前の柱の終わりの位置を見つける必要があります)次の方法があります.第1の方法は、カラムの数を検出することに基づいている:
    static int prevbars = 0;
    ...
    if(prevbars == Bars) return(0);
    prevbars = Bars;
    ...
    この方法は、履歴ロードの場合に実行できない.[直前](Previous)カラムが完了していない間に、カラムの数が変わります.この場合、これらの値の差が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」を使用できます.