記事"6つのステップでトレーディング自動装置を作りましょう!"についてのディスカッション

 

新しい記事 6つのステップでトレーディング自動装置を作りましょう! はパブリッシュされました:

もしどのようにトレード用クラス群がどのように組まれているかをご存知でなく、「オブジェクト指向プログラミング」という単語に恐怖を感じるようであれば、この記事はあなたにとって最適かもしれません。実際、売買シグナルのためのモジュールの作成のために詳しい内容を知る必要はありません。ただ、いくつかの簡単なルールに従ってください。作業は全てMQL5のウィザードに従って進められ、すぐに使用できる取引用自動システムを作ることができます!

作者: MetaQuotes Software Corp.

 
取引ロボットはマウスを5回クリックするだけで作成でき、оптимизации параметров 取引システムのテスターでテストでき、作成したロボットを自分の口座で取引することが でき、ファイルを修正する必要はありません。
このようなロボットが取引できるのでしょうか?結局のところ、取引クラスのライブラリには、実際の取引はおろか、選手権でさえ必要条件であった様々なエラーの処理が含まれていない。5クリックでExpert Advisorを作成できるのは、テスターでアイデアを素早くチェックするためだけで、そのようなExpert Advisorは取引には不向きである、と書いた方が正しい。
 
お疲れ様でした!箱とキューブの写真もありがとう!システム化 :-)
 

続ける

この例の行を変換しようと思いました:

if(m_method_fast!=MODE_SMA&& m_method_fast!=MODE_EMA&& m_method_fast!=MODE_SMMA&& m_method_fast!=MODE_LWMA)

if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)

アルゴリズムの中に

1) 2つの配列:

最初の配列は、m_method_fast と m_method_slow を含む。

2番目はENUM_MA_METHOD列挙 値を含む。

2) ループの中で、最初の配列の値を取り、それが2番目の配列にあるかどうかをチェックします。

これを実装する方法を教えてください。

CArray を接続する必要があることは理解しています。しかし、どのような型ですか?

初歩的な基本的なことで、構文で私はまだキャッチすることはできませんので、誰が、コードの一部を書いてくださいすることができます。

ありがとうございました!

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих - Документация по MQL5
 
bivmail:

続ける

この例の行を変換しようと思いました:

if(m_method_fast!=MODE_SMA&& m_method_fast!=MODE_EMA&& m_method_fast!=MODE_SMMA&& m_method_fast!=MODE_LWMA)

if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)

アルゴリズムの中に

1) 2つの配列:

最初の配列は、m_method_fast と m_method_slow を含む。

2番目はENUM_MA_METHOD列挙 値を含む。

2) ループの中で、最初の配列の値を取り、それが2番目の配列にあるかどうかをチェックします。

これを実装する方法を教えてください。

CArray を接続する必要があることは理解しています。しかし、どのような型ですか?

初歩的な基本的なことで、構文で私はまだ把握できないので、誰が、コードの一部を書いてくださいすることができます。

ありがとうございます!

このような:

func(int& array1[],int& array2[])
  {
   int total1=ArraySize(array1);
   int total2=ArraySize(array2);
//---
   for(int i=0;i<total1;i++)
     {
      for(int j=0;j<total2;j++)
        {
         if(array1[i]==array2[j])
           {
            // 見つけた
           }
        }
     }
  }
 

そう、『C++ for Beginners』ではもうここまで書いたんだ :-)

ただし、ENUM_MA_METHODというデータ型は存在しません。

この列挙型がどのようなデータ型から構成されているのかを知るにはどうしたらいいでしょうか?ENUM_MA_METHOD列挙 自体をループすることは可能ですか?

2つの方法があります:

//両方の配列を記述する最初の方法

  ENUM_MA_METHOD l_array_enum_ma_method[3];

  l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

  print("array size %d", ArraySize(l_array_enum_ma_method));

  print("ENUM_MA_METHOD size %d", ArraySize(ENUM_MA_METHOD));

  

   ENUM_MA_METHOD l_array_select_method[1];

   l_array_select_method[0]=m_MethodFast;

   l_array_select_method[1]=m_MethodSlow;

   //さらにスキームに従って

   

   //第二の方法は、ライブラリーに接続することである。

   //#include <ArraysArrayInt.mqh>

     CArrayInt *l_array_enum_ma_method=new CArrayInt;

   l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

   l_array_enum_ma_method.Sort();

   //--- 検索要素

   if(l_array_enum_ma_method.Search(m_MethodFast)!=-1) printf("Element found");

   else                        printf("Element not found");

   //--- 配列を削除する

   delete l_array_enum_ma_method;

つ目の方法では、特定の型のライブラリを接続する必要があります。ENUM_MA_METHODはどの型ですか?

うーん...おかしいな、返信をクリックしたら新しい投稿になってしまった...。

 
コードの 正しい挿入 方法をご覧ください。
 
bivmail:

そう、『C++ for Beginners』ではもうここまで書いたんだ :-)

ただし、ENUM_MA_METHODというデータ型は存在しません。

この列挙型がどのようなデータ型から構成されているのかを知るにはどうしたらいいでしょうか?ENUM_MA_METHOD列挙 自体をループすることは可能ですか?

2つの方法があります:

つ目の方法では、特定の型のライブラリを接続する必要があります。ENUM_MA_METHODはどの型ですか?

うーん...おかしいな、返信をクリックしたら新しい投稿になってしまった...。

第一の方法

 ENUM_MA_METHOD l_array_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};
//--- さらにその先

第二の方法:

#include <Arrays\ArrayInt.mqh>

CArrayInt l_array_enum_ma_method;
//---
l_array_enum_ma_method.Add(MODE_SMA);
l_array_enum_ma_method.Add(MODE_EMA);
l_array_enum_ma_method.Add(MODE_SMMA);
l_array_enum_ma_method.Add(MODE_LWMA);
//--- さらにその先

なぜこんなに多くのステップが必要なのか、私には理解できない。

 

おっと...どうもありがとう、僕がやろうとしているのはそういうことなんだ...。

最初のケースでは、私はすでにこの記録方法を見たが、私はまだ必要なものに気づいていない、

2つ目のケースでは、ArrayIntで混乱しました。Intだから、数値だけが格納されるのかと思ったが、どうやらコンパイラはArrayIntに変換するようだ、

コンパイラはMODE_SMAを数値に変換しているようで、値を戻すときには型(ENUM_MA_METHOD)への暗黙の変換(括弧を使用)を行う必要があります。

  ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

P.S. 3番目のセクション3.パラメータを設定するメソッドでは、早すぎる宣言行を削除する必要があります。

 CiCustom          m_fast_ma;        // オブジェクトとしてのインジケータ
   CiCustom          m_slow_ma;        // オブジェクトとしてのインジケータ
 
bivmail:

P.S.第3節3.パラメーターの設定方法において、早々に宣言された行は消すべきだと思います:

削除しました。
 

私は興奮していたが、私はこれを回避することはできません(通勤 - 私はメモリアドレス転送について読んだが、それはそのようにも動作しませんでした):

コンパイラーは 'm_MethodFast' - 定数式が必要、' m_MethodSlow' - 定数式が必要というエラーを返します。

もちろん、これはド素人のための質問だ。このような質問は、記事を詰まらせないように、別のスレッドで聞くべきかな?

//両方の配列を記述する最初の方法
//int *Finger_m_MethodFast;
//int *Finger_m_MethodSlow;
/Finger_m_MethodFast=&m_MethodFast;
//Finger_m_MethodFast=&m_MethodSlow;
// int l_array1_select_method[]={Finger_m_MethodFast,Finger_m_MethodFast};
   ENUM_MA_METHOD l_array1_select_method[]={m_MethodFast,m_MethodSlow};
   ENUM_MA_METHOD l_array2_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};

   int total_array1=ArraySize(l_array1_select_method);
   int total_array2=ArraySize(l_array2_enum_ma_method);
   bool NoErrorsFlag=false;
   for(int i_array1=0;i_array1<total_array1;i_array1++)
     {

      for(int i_array2=0;i_array2<total_array2;i_array2++)
        {
         if(l_array1_select_method[i_array1]=l_array2_enum_ma_method[i_array2])
           {
            NoErrorsFlag=true;
           }
        }
      if(!NoErrorsFlag)
        {
         PrintFormat("無効なスムージング・タイプ %s 移動平均!",EnumToString(l_array1_select_method[i_array1]));
        }

     }

   if(!NoErrorsFlag)
     {
      return(false);
     }