エラー、バグ、質問 - ページ 2469

 

知ることになる)その後、ハッキング

 

MQL4から MQL5へ プログラムを移行しています。

私はこのエラーに直面しました。

m30までのタイムフレームでは、Period()の値は正しいです。

2019.05.22 17:45:38.628 TestStat (GBPUSD,M15) 4854 Period()=15
2019.05.22 17:46:08.267 TestStat (GBPUSD,M30) 4854 Period()=30

タイムフレームH1からは、理解しがたい値が表示されます。

2019.05.22 17:31:07.446 TestStat (GBPUSD,H1) 4854 Period()=16385
。 2019.05.22 17:46:39.362 TestStat (GBPUSD,H4) 4854 Period()=16388。
2019.05.22 17:46:55.552 TestStat (GBPUSD,D1) 4854 Period()=16408

2019年5月21日付の端末版ビルド2057。

 

ありがとうございます。

説明文に

期間

現在のチャートのタイムフレーム値を返します。

ENUM_TIMEFRAMESPeriod()。

戻り値

現在のチャートのタイムフレーム値を保持する_Period 変数の内容。Value には ENUM_TIMEFRAMES列挙値のいずれ かを指定することができる。

こちらもご覧ください

周期秒チャート周期日付と 時刻、オブジェクトの可視性

=================

それがあまりできていない。説明文に正しく記載されていること。フォーラムで原因を探すのはやめたほうがいい。

Period() は、次のように、現在のタイムフレームの値を出力しないことが判明しました:値は 列挙型 ENUM_TIMEFRAMES値のいずれかであることが できます。

まったく別のものです。

開発者向けの言語表記を修正してほしい。

 
コードを提供してくれたTheXpertに 改めて感謝します。
ArrayResize capacity MT5(build 2057)で以下のような結果が出ています。

#import "msvcrt.dll"
  long memcpy(int &dst[], long &src, int cnt);
#import

#define  PRINT(x) ; Print(#x, ":", string(x))

template<typename T>
struct ArrayStore
{
   long offset;
   T x[];
   
   int capacity() 
   {
      int ints[sizeof(ArrayStore) / sizeof(int)];
      memcpy(ints, this.offset, sizeof(ArrayStore));
      return ints[8];
   }
   
   int size() 
   {
      int ints[sizeof(ArrayStore) / sizeof(int)];
      memcpy(ints, this.offset, sizeof(ArrayStore));
      return ints[4];
   }
};

template<typename T>
int TestArrayCapacity(ArrayStore<T> &store, int size, int reserved_size = 0){
   ArrayResize(store.x, size, reserved_size);
   return store.capacity(); 
}

template<typename T>
int TestArraySize(ArrayStore<T> &store, int size, int reserved_size = 0){
   ArrayResize(store.x, size, reserved_size);
   return store.size(); 
}


void OnStart()
{
   ArrayStore<int> store;
   
   PRINT("TEST_ArrayCapacity");
   
   PRINT(TestArrayCapacity(store, 100, 0)); 
   PRINT(TestArrayCapacity(store, 100, 100)); 
   PRINT(TestArrayCapacity(store, 101, 100)); 
   PRINT(TestArrayCapacity(store, 200, 100)); 
   PRINT(TestArrayCapacity(store, 201, 100)); 
   PRINT(TestArrayCapacity(store, 202, 100)); 
   PRINT(TestArrayCapacity(store, 100,   1)); 
   PRINT(TestArrayCapacity(store, 100, 400)); 
   PRINT(TestArrayCapacity(store, 300, 400)); 
   PRINT(TestArrayCapacity(store, 301, 600));
   PRINT(TestArrayCapacity(store, 302, 600));
   PRINT(TestArrayCapacity(store, 303, 600));
   PRINT(TestArrayCapacity(store, 100,   0)); 
   PRINT(TestArrayCapacity(store, 100, 100)); 
   PRINT(TestArrayCapacity(store, 100,  -1)); 
   PRINT(TestArrayCapacity(store, 100, 100)); 
   PRINT(TestArrayCapacity(store, 105, 100)); 
}

結果
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TEST_ArrayCapacity:TEST_ArrayCapacity
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,101,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,200,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,201,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,202,100):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,1):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,300,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,301,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,302,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,303,600):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):903
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,-1):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,105,100):205
 
Eugeni Neumoin:

説明

現在のチャートのタイムフレーム値を格納する_Period 変数の内容。 ENUM_TIMEFRAMES列挙の 値のいずれかを 指定することができる。

これがうまくできていない。説明文に正しく記載されていること。フォーラムで原因を探すのはやめたほうがいい。

だから、この値が分単位の期間と等しいとはどこにも書かれていない(4分の1であったように)。

https://www.mql5.com/ru/articles/81

そこからリンク記事が始まります。

Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
Igor Zakharov:

だから、この値が(4分の1であったように)分単位の期間と等しいとはどこにも書いていない。

https://www.mql5.com/ru/articles/81

リンク先の記事はここからです。

Value can be one of ENUM_TIMEFRAMESenumeration values という言語記述がある。

さらに下の言語説明をご覧ください。

グラフ期間

すべての定義済みチャートピリオドには一意の識別子があります。PERIOD_CURRENT 識別子は、mql5-program が動作しているチャートの現在の期間を意味します。

enum_timeframes

識別子

商品説明

PERIOD_CURRENT

当 期

PERIOD_M1

1分

PERIOD_M2

2分

PERIOD_M3

3分

PERIOD_M4

4分

PERIOD_M5

5分

PERIOD_M6

6分

PERIOD_M10

10分

PERIOD_M12

12分

PERIOD_M15

15分

PERIOD_M20

20分

PERIOD_M30

30分

PERIOD_H1

1時間

PERIOD_H2

2時間

PERIOD_H3

3時間

PERIOD_H4

4時間

PERIOD_H6

6時間

PERIOD_H8

8時間

PERIOD_H12

12時間

PERIOD_D1

1日

PERIOD_W1

1週間

PERIOD_MN1

1ヶ月

======================

そして、説明のどこにも、この値が秒単位であることは書かれていません。

説明文が全てを物語っているはずです。

他の記事も調べないといけないとなると、それはもう大変です。

 
Sergey Dzyublik:
コードを提供してくれたTheXpertに 改めて感謝します。
ArrayResize capacity MT5(build 2057)で以下のような結果が出ています。
そこで、ArrayResizeのパフォーマンスと実容量への影響について、結論を述べます。

1.最初のArrayResizeは非常に重要で、size + reserved_sizeを考慮して本当にメモリを割り当て、容量を設定します。
2.以後、reserved_size の値を変更して ArrayResize を実行しても、それぞれ割り当てられたメモリ量と容量に影響はない。
3 メモリの新規確保は容量を超えた場合のみ行われ、その場合は再度size + reserved_sizeで確保されたメモリ量を決定し、新たな容量を設定します。
4.reserved_size < 0 の場合、予約されたメモリをサイズ分解放する。
 
Eugeni Neumoin:

そして、説明のどこにも、この値が秒単位であることは書かれていません。

だから、秒単位じゃないんです...。

 
Eugeni Neumoin:

Value can be one of ENUM_TIMEFRAMESenumeration valuesという言語記述がある。

言語の説明でさらに詳しくご覧ください。

グラフ期間

すべての定義済みチャート期間には一意の識別子があります。PERIOD_CURRENT 識別子は、mql5 プログラムが動作しているチャートの現在の期間を意味します。

enum_timeframes

======================

そして、この値が秒単位であることは説明のどこにも書かれていない。

説明文が全てを物語っているはずです。

そして、他の記事にも目を通さなければならないときは、残念なことです。

これが秒単位の値だと誰が言ったのですか?

 
Eugeni Neumoin :

Value can be one of enumeration ENUM_TIMEFRAMES... という言語記述がある。

言語の説明でさらに詳しくご覧ください。

グラフ期間

すべての定義済みチャートピリオドには一意の識別子があります。PERIOD_CURRENT 識別子は、mql5 プログラムが実行されているチャートの現在の期間を表 します。

enum_timeframes

識別子

商品説明

PERIOD_CURRENT

当 期

PERIOD_M1

1分

PERIOD_M2

2分

PERIOD_M3

3分

PERIOD_M4

4分

PERIOD_M5

5分

PERIOD_M6

6分

PERIOD_M10

10分

PERIOD_M12

12分

PERIOD_M15

15分

PERIOD_M20

20分

PERIOD_M30

30分

PERIOD_H1

1時間

PERIOD_H2

2時間

PERIOD_H3

3 時間

PERIOD_H4

4 時間

PERIOD_H6

6 時間

PERIOD_H8

8 時間

PERIOD_H12

12時間

PERIOD_D1

1日

PERIOD_W1

1週間

PERIOD_MN1

1ヶ月

======================

そして、この値が秒単位であることは説明のどこにも書かれていない。

説明文が全てを物語っているはずです。

また、他の記事をスルーしてしまうと、それはそれで残念なことになります。

列挙値には決して依存してはならない。

PeriodSeconds()を使用する。

理由: