無料でロボットをダウンロードする方法を見る
Facebook上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
ビュー:
63
評価:
(5)
パブリッシュ済み:
アップデート済み:
\MQL5\Include\fxsaber\Input_Struct\
System.mqh (0.48 KB) ビュー
\MQL5\Experts\
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

このライブラリは、入力パラメータを扱う際のルーチン作業を軽減する。



使用例として、トレーディング・アドバイザーを取り上げてみましょう。トレーディングロジックを書くときにOOPアプローチを使うのは合理的です。なぜなら、より複雑なシステムにEAを組み込むのが簡単になるからです。


アーキテクチャ的には、テスター用のOOPアドバイザーは次のようになります。

    class SYSTEM
    {
    public:
      virtual void OnTick() {}
    
      // 入力データは文字列として出力される。
      virtual string ToString( void ) const = NULL;
      
      // 入力データは文字列で指定する。
      virtual int FromString( const string Str ) = NULL;
    };
    
    SYSTEM* System = NULL;
    
    void OnInit()
    {
      System = new SYSTEM;
    }
    
    void OnTick()
    {
      System.OnTick();
    }
    
    void OnDeinit( const int )
    {
      delete System;
    }

    このEAは何もしません。しかし、取引ロジックではなく、入力パラメータを扱うだけになると、コードは深刻に成長し、可読性を悪化させ、エラーの確率を高めます。実際、あなたは不快なルーチンワークを実行する必要があります。


    入力パラメータはすべて文字列で

    コードで強調されている行に少し目を逸らしてみよう。

    貿易実務によると、入力パラメーターを文字列形式で保存/読み込むと便利で、興味のある(見つけた)入力パラメーターのセットを素早く明確に見ることができる。

    Amount = 1, Count = 2, Period = 3, Koef = 4.5, Log = 6.7, Flag = true
    Amount = 2, Count = 3, Period = 4, Koef = 4.56, Log = 7.89, Flag = false

    例えば、上の文章には2組の入力パラメータがあります。


    入力パラメーターを扱うOOPの基本。

    input int inAmount = 1;
    input int inCount = 2;
    input int inPeriod = 3;
      
    input double inKoef = 4.56;
    input double inLog = 7.89;
      
    input bool inFlag = true;
    
    struct INPUT_STRUCT
    {
      int Amount;
      int Count;
      int Period;
      
      double Koef;
      double Log;
      
      bool Flag;
      
      string ToString( void ) const
      {
        string Str = NULL;
    
      #define  TOSTRING(A) Str += (::StringLen(Str) ? ", " : NULL ) + #A + " = " + (string)(this.A);
        TOSTRING(Amount);
        TOSTRING(Count);
        TOSTRING(Period);
    
        TOSTRING(Koef);
        TOSTRING(Log);
        
        TOSTRING(Flag);
      #undef  TOSTRING
        
        return(Str);
      }
      
      // 書き始めなかった。
      int FromString( const string Str )
      {
        return(0);
      }  
    } inInputs = {inAmount, inCount, inPeriod, inKoef, inLog, inFlag};
    
    #include <fxsaber\Input_Struct\Example_OnTick.mqh>
    
    void EXAMPLE::OnTick( void )
    {
      // システム・コード
     // this.Inputsは入力パラメータを含む。
    }

    上の面倒なコードは、同じ空のEAだが、入力パラメーターを扱うという点だけが追加(強調表示)されている。このコードは、重要なINPUT_STRUCT::FromString メソッドを実装していないにもかかわらず、不愉快です。

    入力パラメーターを1つ追加/削除したい場合、このコードの5か所に対応する変更を加えなければならない。そして、毎回そうなのだ!



    #include <fxsaber\Input_Struct\Input_Struct.mqh> // 入力パラメータの構造。
    INPUT_STRUCT inInputs;
    
    MACROS_INPUT(int, Amount, 1);
    MACROS_INPUT(int, Count, 2);
    MACROS_INPUT(int, Period, 3);
    
    MACROS_INPUT(double, Koef, 4.56);
    MACROS_INPUT(double, Log, 7.89);
    
    MACROS_INPUT(bool, Flag, true);
    
    #include <fxsaber\Input_Struct\Example_OnTick.mqh>
    
    void EXAMPLE::OnTick( void )
    {
      // システム・コード
     // this.Inputsは入力パラメータを含む。
    }

    ハイライトされたテキストが明らかに少なくなっている。同時に、すべてのメソッドが実装されている。



    • 入力パラメータのセットを変更する際に、最小限の時間とエラー確率。
    • テクニカルな機能よりもトレードロジックに多くの時間を割く。
    • 文字列による入力パラメータセットの保存/読み込み。
    • 複雑なシステム(ポートフォリオなど)の記述を大幅に簡素化。
    • カスタム最適化アルゴリズムの容易な接続。

    OOPアプローチでは、上記の両方の例で行われているように、多くの繰り返しテキストをmqhファイルに隠すことができることに注意してください。OOPは簡潔にすることもできます。


    特徴

    • 提案されている入力パラメーター構造はシンプル であり、適用可能性を大きく広げている。
    • "変更された "構造体は、代入演算子を介して互いに渡すことができる。また、常に同じサイズを持つ。
    • このライブラリはクロスプラットフォームです。

    MetaQuotes Ltdによってロシア語から翻訳されました。
    元のコード: https://www.mql5.com/ru/code/47932

    Sec-WebSocket-Key Generator Sec-WebSocket-Key Generator

    Sec-WebSocket-Keyジェネレーター

    シンプルな保留オーダー時間 シンプルな保留オーダー時間

    エキスパートアドバイザーは、入力パラメータで指定された時間に従って、買いストップと売りストップの保留中の注文で動作します。

    MA価格表示 MA価格表示

    このインジケーターは、フォーラムでのリクエストによって書かれたものだ。

    Open Trade Open Trade

    この関数は、取引開始のメインロジックを実行します。 シンボル情報とユーザーによって提供されたパラメータに基づいて、開始価格、利食いレベル、損切りレベルを計算します。 シンボル、数量、注文タイプ、偏差、コメント、マジックナンバーなどの必要な情報を含む取引要求(MqlTradeRequest)を準備します。 OrderSend 関数を呼び出して操作要求を送信し、結果を取得します。 SetTypeFillingBySymbol 関数: シンボルのフィリングポリシーに基づいて、注文のフィリングタイプ(Fill または Kill、Immediate または Cancel、Return)を決定します。 GetMinTradeLevel 関数: フリーズレベルとシンボルのストップレベルに基づいて、最小操作レベルを計算します。 最小レベルが一定の範囲内に収まるように調整し、結果を返します。