MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1236

 
Andrey Sokolov:

ごあいさつ何か教えていただけませんか?

変数の値ではなく、名前を取得することは可能でしょうか?例えば、変数名を表示する。

#define PRINTVAR(x) Print(" " ##x); Print(x)
void OnStart()
  {
      long anyvar=(long)TimeLocal();
      PRINTVAR(anyvar);
  
  }

の結果です。

2020.08.24 14:46:05.394    test (USDCHF,H1)     anyvar
2020.08.24 14:46:05.394    test (USDCHF,H1)    1598280365

C "に類似した未発表の機能であるが、まだ使用できない可能性がある。

 
Andrey Sokolov:

変数名そのものを取得する必要があります。

名前がわからなければ、そして見分けがつかなければ、これはできない。例えば、5に等しいすべての変数の名前を取得し、その名前を、見つかった、印刷することができます。または、すべての文字列変数の名前。しかし、いずれにせよ変数の羅列である。

 
マキシム・クズネツォフ ありがとうございました
 
Andrey Sokolov:
Maxim Kuznetsov ありがとうございます。


そうですね、名前で変数を選択するのも問題ですね。

例えば、変数a1, a2, a3, a4, a5などがあります。この変数も検索して、"a "と5があるものを選んで使わなければならない。

となると、ほとんどありえない。変数名は、プリプロセッサ(#macros)からのみアクセス可能です。

変数の代わりに名前のオブジェクトハッシュ配列を使うなど、内部ロジックを変更する必要があります。そうすると、キーと値の両方が一度に利用できるようになります。また、長期保存の場合はSQLiteを使用します。あるいは組み合わせる :-)

でもそうなんですよね、アルゴリズムの知識がないと、アドバイスも無駄になります。

 
Andrey Sokolov:

そうですね、名前で変数を選択するのも問題ですね。

例えば、変数a1, a2, a3, a4, a5などがあります。これらの変数も列挙して、"a "と "5 "を持つものを選び、使う必要があります。

名前を配列に書き、配列の中を通り抜ける。

 

皆さんこんにちは!私の質問はMT4テスター、mql4言語についてです
配列を初期化するとき、私の間違いは何ですか教えてください。750個の要素を持つ1次元の配列を作成しました。750個の要素をすべて値50.0で初期化した。

これは、最初と次のティックにおいて、インデックス0を持つ最初の配列項目は 値50.0でなければならず、インデックス749を持つ最後の配列項目は値50.0でなければならないことを意味します。

実際、配列の最後の項目は値0であることが判明しています。そして、最初の1枚は、当然のように50.0です。

質問です。初期化後、配列のすべての値(最後の値を含む)を値50.0にする方法

以下は私のコードです。

double S_L[750]={50.0};

void OnTick()
{
if (Day()==4&&Month()==1&&Year()==2010&&Hour()==0&&Minute()==0)

Print("===================== ",S_L[749]," =0= ",S_L[0]).S_L[749]は "749 "を意味します。

}

ジャーナルからのPrint() 値の下にある

2020.08.24 17:43:55.427 GBPUSD,M1: 52255 tick イベント (1440 バー、53256 バーステート) 0:00:00.047 で処理 (合計時間 0:00:02.422)

2020.08.24 17:43:55.407 2010.01.04 00:00:53 tester(b.org) gbpusd,m1: ========================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:52 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:50 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:47 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:45 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:43 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:41 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:40 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:37 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:35 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:32 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:30 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:28 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:26 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:25 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:22 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:20 tester(b.ord) gbpusd,m1: ========================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:17 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:15 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:13 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:11 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:10 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:07 tester(b.ord) gbpusd,m1: ========================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:05 tester(b.ord) gbpusd,m1: ========================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:02 tester(b.ord) gbpusd,m1: ======================= 0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00 tester(b.ord) gbpusd,m1: ========================= 0 = 0= 50

2020.08.24 17:43:55.385 2010.01.01 00:00:00 Tester(B.ORD.) テストを開始しました。


ありがとうございました


Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
 
ANDREY:

これが私のものです。

どこで?)

 
Alexey Viktorov:

どこが?)

私の編集した記事の一番上にあります。回答ありがとうございました。

 

ANDREY:

質問です。初期化後に配列のすべての値(最後の値を含む)を50.0に するにはどうすればよいですか?

int OnInit()
{
   ArrayInitialize(S_L, 50.0);
}
 
Igor Makanu:

ご指摘ありがとうございます。ところで、私ははっきりさせたかったのですが......。Kovalevのチュートリアルでは、配列は 特別な関数なしに、その宣言と同時に(私がしたように)初期化 することができると書かれています。コバレフのチュートリアルが多少古くなっていることは承知しています。Q. mql4では、配列の初期化は関数で行うように なったということでよろしいでしょうか?

ArrayInitialize(S_L, 50.0)

ありがとうございます。

Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Функция ArrayResize() позволяет задать для массива размер с некоторым запасом для его будущего увеличения без физического перераспределения памяти. Это сделано для улучшения быстродействия, так как операции по распределению памяти...