RefreshRates()の更新内容

 
RefreshRates()で更新されるデータや時系列を正確に知りたかったのですが、いつ頃が本当なのでしょうか?
 
開発者も知らないような秘密の機能)))
 

ただ、そのような質問に答える忍耐力はない。

RefreshRates

Осуществляет обновление данных в предопределенных переменных и массивах-таймсериях.


また、定義済み変数や 時系列配列とは何かは、ドキュメントに記載されています。

Предопределенные переменные - Справочник MQL4
Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Предопределенные переменные - Справочник MQL4
 
Alexey Viktorov:

ただ、そのような質問に答える忍耐力はない。


また、定義済み変数や 時系列配列については、ドキュメントに記載されています。

つまり、iClose()関数のデータはRefreshRates()の影響を一切受けません。では、iClose() 関数に更新情報を出力させるにはどうすればよいのでしょうか

 
Mikhail Nazarenko:

そのため、iClose()内のデータはRefreshRates()の影響を受けません。では、iClose() 関数で更新情報を出力させるにはどうすればよいのでしょうか?

iClose() はどのバー ですか?

 
Alexey Viktorov:

iClose() どのバー?

ゼロです。恣意的な時間枠

 
Mikhail Nazarenko:

ゼロです。任意の時間枠。

正直、驚いた...というのが率直な感想です。iClose()はブローカーのサーバーから値を取得すると思っていたが、違うのか... RefreshRates();iClose()で 取得した値を更新する。

/********************Script program start function*******************/
void OnStart()
 {
  for(int i = 0; i < 10; i++)
   {
    Print(Bid, " *** ", iClose(_Symbol, PERIOD_CURRENT, 0));
    Sleep(1000);
    RefreshRates();// Без RefreshRates(); значения iClose(_Symbol, PERIOD_CURRENT, 0) не меняются…
                   // То, что без RefreshRates(); не меняются значения Bid, это понятно и нормально…
   }
 }/******************************************************************/

以下は、スクリプトの実行結果です。

2021.02.15 11:39:35.559 00 EURUSD,M5: 1.21375 *** 1.21375
2021.02.15 11:39:34.559 00 EURUSD,M5: 1.21375 *** 1.21375
2021.02.15 11:39:33.559 00 EURUSD,M5: 1.21375 *** 1.21375
2021.02.15 11:39:32.559 00 EURUSD,M5: 1.21375 *** 1.21375
2021.02.15 11:39:31.559 00 EURUSD,M5: 1.2138 *** 1.2138
2021.02.15 11:39:30.559 00 EURUSD,M5: 1.21378 *** 1.21378
2021.02.15 11:39:29.559 00 EURUSD,M5: 1.21379 *** 1.21379
2021.02.15 11:39:28.559 00 EURUSD,M5: 1.21378 *** 1.21378
2021.02.15 11:39:27.559 00 EURUSD,M5: 1.21379 *** 1.21379
2021.02.15 11:39:26.559 00 EURUSD,M5: 1.21379 *** 1.21379

まあ、いいや...この機能を覚えておいて、必要ならRefreshRates()を挿入することにしよう。


ps; そして、iClose(_Symbol, PERIOD_CURRENT, 0)はMT5で変更されます。

 
Alexey Viktorov:

正直、驚きました......というのが率直な感想です。iClose()はブローカーのサーバーから値を取得すると思っていましたが、そうではありませんでした。

以下は、スクリプトの実行結果です。

まあ、いいや...個人的にはこの機能だけ覚えておいて、必要な時にRefreshRates()を挿入することにします。

タイムフレームを現在のものと別のものに変更すると、RefreshRates() を使用してもデータが時間通りに更新されなくなります。そのため、iCloseをはじめとするMT4の基本機能は、無関係な無意味なものを作り出してしまうのです。8割のインフォは、このようなMT4独自の機能を考慮していないのではないでしょうか。どう生きるか)))

 
Alexey Viktorov:

正直、驚きました......というのが率直な感想です。iClose()はブローカーのサーバーから値を取得すると思っていましたが、そうではありませんでした。

以下は、スクリプトの実行結果です。

まあ、いいや...この機能を覚えておいて、必要ならRefreshRates()を挿入することにしよう。


ps; そして、iClose(_Symbol, PERIOD_CURRENT, 0)がMT5で変化します。

4倍速のiXXXXXの値は常に正しく表示されています。関数の結果を確認しないんですね。カルテットもそれを必要とする(絶対的なシンプルさを信奉する一部の人々にとっては奇妙に思えるかもしれないが)
 
その解決策とは?もっと松葉杖を?ティック履歴を残して、EAで全てのタイムフレームを勝手に再計算する、みたいな。これは善悪を超えている))
 
Mikhail Nazarenko:
その解決策とは?もっと松葉杖を?ティック履歴を残して、EAで全てのタイムフレームを勝手に再計算する、みたいな。これは善悪を超えている)))。
いいえ、そんなことはありません。関数のヘルプには、戻り値についてどのように書かれていますか?
理由: