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

 
Alexey Viktorov #:

議論しているわけではありません。"グレー "は、この記事の写真に写っているものです。


原作がなければ、こういうのは


そうですね......私が言っていたのは「これら」のことです。オーバーフローしてインジケーターが表示されないとき、ご紹介いただいた投稿のスクリーンショットにあるメニューに表示されているものを見ていませんでした。ここでは何とも言えませんね。

しかし、インジケーターがナビゲーターになく、フォルダーにある場合、フォルダーから古いインジケーターのいくつかが削除されるまで、新しいインジケーターはナビゲーターに表示されないということになります。

そうですね。私だけじゃないんです。

 

動的配列をインジケータバッファとして割り当てることで、手動でリサイズする必要性を回避したいと考えました。しかし、ArrayResize() を、サイズが端末自身によって監視されるべきで、手動でサイズを変更してはならないインジケータバッファの動的配列のように取り除くことができません。

https://www.mql5.com/ru/docs/series/bufferdirection。

Индикаторный буфер представляет из себя динамический массив типа double, размером которого управляет клиентский терминал с тем, чтобы он всегда соответствовал количеству баров, на которых индикатор рассчитывается. Обычный динамический массив типа double назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(). Для индикаторных буферов не требуется задавать размер с помощью функции ArrayResize(), исполняющая система терминала сама позаботится об этом.

https://www.mql5.com/ru/docs/array/arrayisdynamic にアクセスし、 コードを実行すると、いきなり次のようなことがわかります。

2022.01.24 21:25:27.543 t (NZDUSD,D1) 3.インジケーターバッファーの確認

2022.01.24 21:25:27.543 t (NZDUSD,D1) メモリ解放前のサイズ = 7278

2022.01.24 21:25:27.543 t (NZDUSD,D1)This is dynamic array = None

2022.01.24 21:25:27.543 t (NZDUSD,D1) メモリ解放後のサイズ = 0

を同時に表示します。

double ExtBuff[];      // индикаторный буфер
SetIndexBuffer(0,ExtBuff);

本を見ると......イチジクがいる。それとも、今までずっと騙されていたのだろうか?

それとも、一回(最初の初期化時)ダイナミックに動いて、それで終わりなのでしょうか?

 
x572intraday #:

ArrayResize() は、端末自身がサイズを監視すべきインジケータバッファの動的配列で、手動でサイズを変更する必要はないはずなのに、どうにもならない。

https://www.mql5.com/ru/docs/series/bufferdirection。

https://www.mql5.com/ru/docs/array/arrayisdynamic にアクセスし、 コードを実行すると、いきなり次のようなことがわかります。

同時にそれは。

本を見ると......イチジクがいる。それとも、今までずっと騙されていたのだろうか?

それとも、一回(最初の初期化時)ダイナミックに動いて、それで終わりなのでしょうか?

22:23:17.002 Dynamic EURCAD,H1: +=============================+.

0 22:23:17.002 Dynamic EURCAD,H1: 1.動的配列のチェック

0 22:23:17.002 Dynamic EURCAD,H1: Size before memory release = 100

0 22:23:17.002 Dynamic EURCAD,H1: This is Dynamic Array = Yes.

0 22:23:17.002 Dynamic EURCAD,H1: Size after memory free = 0.

0 22:23:17.002 ダイナミックEURCAD,H1:2.静的配列のチェック。

0 22:23:17.002 Dynamic EURCAD,H1: Size before memory free = 100

0 22:23:17.002 Dynamic EURCAD,H1: This is dynamic array = None.

0 22:23:17.002 Dynamic EURCAD,H1: Size after memory free = 0.

0 22:23:17.002 ダイナミックEURCAD,H1:3.インジケーターバッファを確認する。

0 22:23:17.002 Dynamic EURCAD,H1: Size before memory free = 2725

0 22:23:17.002 Dynamic EURCAD,H1:This is dynamic array = Yes.

0 22:23:17.002 Dynamic EURCAD,H1: Size after memory release = 0

0 22:23:24.754 Dynamic EURCAD,H1: uninit reason 1

0 22:23:24.758 カスタムインジケーター Dynamic EURCAD,H1: 削除されました。

これは4での話です。

 
x572intraday #:

動的配列をインジケータバッファとして割り当てることで、手動でリサイズする必要性を回避したいと考えました。しかし、ArrayResize() を、サイズが端末自身によって監視されるべきで、手動でサイズを変更してはいけないインジケータバッファの動的配列のように取り除くことができません。

https://www.mql5.com/ru/docs/series/bufferdirection。

https://www.mql5.com/ru/docs/array/arrayisdynamic にアクセスし、 コードを実行すると、いきなり次のようなことがわかります。

同時にそれは。

本を見ると......イチジクがいる。それとも、これまでずっと騙されていたのか?

それとも、一回だけ(最初の初期化時)ダイナミックに動いて、それで終わりなのでしょうか

はい、ではそうします :-)

...SetIndexBufferの後ではArrayResizeを使うことができず、プログラムの観点からは、配列はあらかじめ定義された(外部で制御された)サイズを持つ静的なものであると言えます。

 
Alekseu Fedotov #:

22:23:17.002 Dynamic EURCAD,H1: +=============================+.

0 22:23:17.002 Dynamic EURCAD,H1: 1.動的配列のチェック

0 22:23:17.002 Dynamic EURCAD,H1: Size before memory release = 100

0 22:23:17.002 Dynamic EURCAD,H1: This is Dynamic Array = Yes.

0 22:23:17.002 Dynamic EURCAD,H1: Size after memory free = 0.

0 22:23:17.002 ダイナミックEURCAD,H1:2.静的配列のチェック。

0 22:23:17.002 Dynamic EURCAD,H1: Size before memory free = 100

0 22:23:17.002 Dynamic EURCAD,H1: This is dynamic array = None.

0 22:23:17.002 Dynamic EURCAD,H1: Size after memory free = 0.

0 22:23:17.002 ダイナミックEURCAD,H1:3.インジケーターバッファを確認する。

0 22:23:17.002 Dynamic EURCAD,H1: Size before memory free = 2725

0 22:23:17.002 Dynamic EURCAD,H1:This is dynamic array = Yes.

0 22:23:17.002 Dynamic EURCAD,H1: Size after memory release = 0

0 22:23:24.754 Dynamic EURCAD,H1: uninit reason 1

0 22:23:24.758 カスタムインジケーター Dynamic EURCAD,H1: 削除されました。

これは4での話です。

ファンタスティック!この魔法は何なのでしょうか?EURCAD,H1で確認したところ、やはりダメでした。

また、4とは何でしょうか?例では3点だけです。

 
x572intraday #:

ファンタスティック!魔法ってなんだろう?EURCAD,H1で確認したところ、また「No」でした。

そして、4とは?例では3点だけです。

MT4端子

 
x572intraday #:

ファンタスティック!この魔法は何なのでしょうか?EURCAD,H1で確認したところ、また「No」でした。

そして、4とは?例では3点だけです。

0 23:33:06.088 test (EURUSD,D1) +======================+

0 23:33:06.088 test (EURUSD,D1) 1.ダイナミックアレイのチェック

0 23:33:06.088 test (EURUSD,D1) メモリ解放前のサイズ = 100

0 23:33:06.088 test (EURUSD,D1) This is 動的配列 = Yes

0 23:33:06.088 test (EURUSD,D1) メモリ解放後のサイズ = 0

0 23:33:06.088 test (EURUSD,D1) 2.静止画アレイテスト。

0 23:33:06.088 test (EURUSD,D1) メモリ解放前のサイズ = 100

0 23:33:06.088 test (EURUSD,D1) This is dynamic array = None

0 23:33:06.088 test (EURUSD,D1) メモリ解放後のサイズ = 100

0 23:33:06.088 test (EURUSD,D1) 3.インジケータバッファを確認します。

0 23:33:06.088 test (EURUSD,D1) メモリ解放前のサイズ = 1054

0 23:33:06.088 test (EURUSD,D1) This is dynamic array = None.

0 23:33:06.088 test (EURUSD,D1) メモリ解放後のサイズ = 0


端末MT5、感想なし。

 
x572intraday #:

動的配列をインジケータバッファとして割り当てることで、手動でリサイズする必要性を回避したいと考えました。しかし、ArrayResize() を、サイズが端末自身によって監視されるべきで、手動でサイズを変更してはいけないインジケータバッファの動的配列のように取り除くことができません。

https://www.mql5.com/ru/docs/series/bufferdirection。

https://www.mql5.com/ru/docs/array/arrayisdynamic にアクセスし、 コードを実行すると、いきなり次のようなことがわかります。

同時にそれは。

本を見ると......イチジクがいる。それとも、今までずっと騙されていたのだろうか?

それとも、一回(最初の初期化時)だけダイナミックに動いて、それっきりなのでしょうか?

バッファ配列は動的である。MQLでは、動的配列は、(超高水準言語と同様に)私が作業しながら理解した限りでは、オブジェクトの符号を持っています。しかし、動的配列をバッファとして宣言(SetIndexBufferを使用)すると、このメモリ領域は予約されるようになります。そのため、ほとんどの標準的な関数では、そのサイズを変更することができません。私は、オブジェクト配列を指標バッファとして使うことがあります。そして、そのような配列のメモリは、オブジェクトのデストラクタで解放されます。したがって、アプリケーション(またはオブジェクト)自身によるインジケータ・バッファ・メモリの解放は許可される。しかし、インジケーターの動作中にすぐに配列が解放されるわけではありません。何事も賢明に行うことが大切です。

 

午後

Expert Advisorを作成 しようとしているのですが、テストすると奇妙なことが起こります。

私は、関数

CalcAngleTrend(NormalizeDouble((a[0]-a[1]), MA_DIGITS));

double CalcAngleTrend(double d)
 {
  double a = (double) ((atan(d*pow(10,_Digits-2)))*(180/M_PI)*coefAngle);
Print("d: ", d);
  return(NormalizeDouble(a, ANGLE_DIGITS));
 }

どういう状況かというと、チャート上で動いているEAのインスタンスを1つ起動し、同じチャート上で2つ目のインスタンスをデバッグモードでMT4
関数の入力データは同じなのに、出力データが違う!!? 何か理解できていないだけ、みたいです......(

Это выдает запущеный вариант:

2022.01.25 15:01:12.880 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:12.880 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:12.880 USDJPY,M5: Angle Slow: +1.70580000
2022.01.25 15:01:12.880 USDJPY,M5: Angle Fast: -6.96560000

это в режиме отладки:

2022.01.25 15:01:14.330 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:14.330 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:14.330 USDJPY,M5: Angle Slow: +4.26450000
2022.01.25 15:01:14.330 USDJPY,M5: Angle Fast: -17.41390000

どのように情報を掘り出せばいいのか、教えてください。

追記:ちょうど2.5倍の出力の差を計算しました
 
Владимир Казаков Expert Advisorを作成 しようとしているのですが、テストすると奇妙なことが起こります。

私は、関数

どういう状況かというと、チャート上で動いているEAのインスタンスを1つ起動し、同じチャート上で2つ目のインスタンスをデバッグモードでMT4
関数の入力データは同じなのに、出力データが違う!!? 何か理解できていないだけみたいです...(

どの方向に情報を掘り出せばいいのか、教えてください!

追記:ちょうど2.5倍の出力の差を計算しました

角度の計算式が重要なんです。このコードでは、計算のために1つの座標といくつかの係数が使用されていることがわかりますが、その目的は明らかではありません。これは何でしょう?どのようなデータで角度を計算しているのか、詳しく教えてください。