のび太
HISTORICALRATEDATAAUTOの価格取得の所要時間は正規分布ではない件
他スレッド(「HISTORICALRATEDATAAUTOの取得本数がおかしい」「単位時間あたりにアクセスが集中しました」)に書いたことにも関係するのですが、新しい事柄なので、別スレッドにします。
時々、価格取得に失敗することがあって、どうにも謎だったので簡単なテストプログラムを書いて、CFDHISTORICALRATEDATAAUTOによる価格取得の所要時間を調べてみました。
すると全く正規分布にはなってなくて、2秒程度で更新される場合と10秒以上かかる場合とに二極分布していることが分かりました。
RSSの仕様になんらかの問題があるのだろうと思いますのが、いずれにせよこの事実は運用上の注意を要することだと思いますので、念のためみなさんに情報共有します。
ネットトレーダーで「単位時間あたりにアクセスが集中しました。しばらくたってご利用ください」というメッセージが表示されることがあるので、仕様上の何らかのネットワークのボトルネックが関係するのかもしれません。そうだとすると、「HISTORICALRATEDATAAUTOの取得本数がおかしい」の原因も関連するのでしょう。
もしそうなら、システムの改善を希望します。
関連して何かご存じの方があれば教えてください。
2025年05月05日



大野 了
のび太さん、こんにちは!!
では、自分もこちらにまとめてー
情報共有ありがとうございます!!
ありがたい限りです!
こちらは、CFDHISTORICALRATEDATAAUTOで取得間隔を60秒などにしておいて、
60秒ごとに行われるCFDHISTORICALRATEDATAAUTOの実行時間がxxx秒かかるという情報の分布になりますでしょうか?
※実行が2秒程度で終わる場合や、10秒以上かかってしまうなど両極端
※ホントは最頻値や平均値で正規分布してほしい
『単位時間あたりにアクセスが集中しました。』を再現させたいところですね。
もうちょっと再現できないか、チャレンジしてみます!
2025年05月05日
のび太
大野さん
早速ありがとうございます
>CFDHISTORICALRATEDATAAUTOで取得間隔を60秒などにしておいて、
>60秒ごとに行われるCFDHISTORICALRATEDATAAUTOの実行時間がxxx秒かかるという情報の分布になりますでしょうか?
以下のような処理を行っています。
1.画面をアクティベイトした後で、そこに表示されたヘッダーより下のデータをいったん全て空白にする
2.空白にしたセルに新たなデータが表示されているかどうかをチェックする*(空白である場合は、2秒待機して繰り返し合計50回まで*を行なう。リソース不足になることを回避するため、再帰処理は使わずdo whileとgotoで繰り返し処理する。)
処理2においては、2*5秒以上かかる場合は、単に待機するだけではなく、RSSアドインの更新をかけるようにしています。
(以前、大野さんに教えていただいた方法が役に合っています。改めまして、お礼を申し上げます。)
すると、2*1秒で収まる場合もありますが、2*5秒以上かかることも結構あり、その途中の秒数(2*2秒から2*2秒)で収まることは少ないので、結構二極分解します。
ということは、仕様上のなんらかのネットワークボトルネックで更新が必要なシステム状態になっているのかもしれません。
また、私はCPUはi3からi9まで、メモリは16GBから128GMまでいろいろなPCを利用していますが、低機能のPCのほうが止まってしまうことが多いようです。
もしかしたらCPUやメモリがボトルネックなのかもしれません。
といっても、単純な処理すし、CPUi3メモリ16GBでもタスクマネージャで見ると余力はたっぷりあるので、CPUやメモリがボトルネックとはちょっと考えられないです。
もしかしたら、仮想メモリが無駄に多くなっていてボトルネックになっているかもしれないので、今後仮想メモリをゼロにしたらどうなるかも調べてみます。
2025年05月06日
大野 了
のび太さん、こんにちは!!
なるほど!!
純粋に更新処理にかかる時間を観られてるんですねー
もしあるとしたら・・・
『再帰処理は使わずdo whileとgotoで繰り返し処理する』
こちらの処理をonTimeメソッドに変更する感じでしょうか・・・
ザラ場中は価格のチェックなどの処理を動かし続けたい為、do whileなどで繰り返し処理をされていると思います。
ですが、基本RSSはVBAが動作している時はシートへの更新処理が行えないため、いったんVBAを終了させてあげる必要があります。
このため、VBAから自分自身のVBAを呼ぶような形に変更することにより、動作が安定します!!
以前いただいた質問のリンクで大変申し訳ございませんが、こちらをご参考いただけますと幸いです。
onTimeの使い方
https://bbs.okasan-online.co.jp/ont/rss/board/?page=1&topic_id=258#comment_1385
これで直るとよいのですが・・・
2025年05月07日
のび太
すごい遅い返信になってすみません。
メールがログインできなくなって困っていましたが、ようやくログインできました。
教えていただいたonTimeも使ってみたのですが、はやり上手くいきませんでした。
推測するに、どうやら情報更新が頻繁過ぎるとサーバーが通信を強制フリーズさせているようですが、私の誤解かも知れません。
そのあたり真相をご存じの方がいらっしゃれば教えてください。
いずれにせよ、通貨ペアごとにある程度時間間隔をあけて価格取得する問題なく動作するので、いまはあきらめて15分足まででトレードするようにしています。
本当は、5分足や1分足でトレードしたいので、いい方法をご存じの方がいらしたら教えてください。
VBAの Application.OnTime でFXREFRESH を使う方法があるようですが、よくわかりませんでした。
2025年10月18日
大野 了
のび太さん、こんにちは!
以前、ご質問をいただいた内容は、
関数の応答速度が不安定(速かったり遅かったりする)というご質問だったと記憶しているのですが、
もう一度、ご質問を整理させてください!!
・RSSは、CFDとFXどちらの HISTORICALRATEDATAAUTO になりますでしょうか?
・応答速度が不安定(速かったり遅かったりする)という現象は、
以下のような関数を指定した場合
=CFDHISTORICALRATEDATAAUTO("日経 225","60 分足","買気配","60 秒","始値",A2)
60秒ごとに取得される情報の表示速度が不安定という感じでしょうか?
以下、FX、指定間隔ごと取得される情報の表示が不安定であるという前提で回答させていただければと思います!
>推測するに、どうやら情報更新が頻繁過ぎるとサーバーが通信を強制フリーズさせているようですが、私の誤解かも知れません。
>そのあたり真相をご存じの方がいらっしゃれば教えてください。
自分も正確なところは知らないので、憶測でしかないことをご容赦いただきたいのですが・・・
FXHISTORICALRATEDATAAUTO の更新間隔は、最短で "10秒"間隔のため、
通常の使い方ですと、情報更新が頻繁過ぎる状態にはなり辛いかと思われます。
>本当は、5分足や1分足でトレードしたいので、いい方法をご存じの方がいらしたら教えてください。
週末なのでザラバ中だと違いがあるかもしれませんが、自分がやった感じでは・・・
1分足の場合も、15分足の場合も表示速度の違いはありませんでしたー
日時、始値、高値、安値、終値 と5項目取ると、安定的に2,3秒で表示が終わりました。
念のため、明日ザラバ中にやってみます!
>VBAの Application.OnTime でFXREFRESH を使う方法があるようですが、よくわかりませんでした。
確かVBAから365系のRSSのワークシート関数は直接呼べなかったと思います。
(間違っていたら申し訳ありません)
このため、どこかのセルに"=FXREFRESH()"を記述していただき、そのセルを再計算させる必要があります
例)
H1に"=FXREFRESH()" を記述した場合
Worksheets("Sheet1").Range("H1").Calculate
ご参考になれば幸いです!!
2025年10月19日