ゾウ
CANDLE_M関数で1分足始値の即時取得
いつもお世話になっております、ゾウと申します。
CANDLE_M関数を用いて、1分足始値をなるべく素早く(目標は1秒以内)取得したいのですが、
どうしても5秒程度掛かってしまいます。
プログラム方法やパソコンの設定も含めて、
みなさまのお知恵をお貸しいただけませんでしょうか。
イメージとしては添付ファイルの通りで、
①VBAで毎秒外部データを更新
(Application.CommandBars("岡三RSS2").Controls(5).Execute で始値も毎秒更新)
②条件に合致した銘柄を外部データから取得
③1分足の始値を利用して発注
という流れを5秒以内に行いたいです。
①②はおよそ1秒で済むのですが、③の始値を出すのに時間が掛かってしまい困っております。
現在パソコンの設定で試していることとしては、
タスクマネージャーからエクセルと岡三RSSの優先度を「高」に設定しております。
なお、CANDLEではなくCANDLE_Mを使っている理由としては、
実際試行したときに発注が若干早かったためです。
条件等々の説明が不十分かと思いますので、必要な情報があればお申し付けいただければと思います。
以上、どうぞよろしくお願いいたします。
2017年08月02日
Ryo Ohno
ゾウさん初めましてー
③の始値を出すのに時間がかかってるととのことですが・・・
CANDLE_Mの結果が表示されるのに時間がかかる感じでしょうか?
自分もやってみたのですが、225件の始値を表示するのに大体
0.5~1秒ぐらいで帰ってきました。
ですが、確かにたまーに3秒ぐらいかかるときもあり、
いろいろと調べてみたのですが、
岡三RSSのデータ表示に時間がかかってる感じでした。
岡三RSSの優先度を上げておられるとのことでしたので、
以下のことを試して頂けますでしょうか?
1.計算方式の設定を、手動にしてみる
ファイルーオプションー数式ー計算方法の設定
手動を選ぶ
2.画面描画を一時的に止めてみる
Application.CommandBars("岡三RSS2").Controls(5).Executeの処理が入っているVBAのコードを
Application.ScreenUpdating = False
と
Application.ScreenUpdating = True
で囲む
※これはExcelの画面表示を一時的に止めて、処理を高速化させます。
※しかし、たぶん効果は無いと思われますが、一応・・・
3.ハードウェアのグラフィックアクセサレータを止めてみる
ファイルーオプションー詳細設定ー表示
『ハードウェアグラフィックアクセサレータを無効にする』にチェックを入れる
※古いPCとかで対応してない場合、Excelがもっさりすることがあります
※自分が昔これで解決したのですが、最近のPCでは効果がないと思われます・・・
4.マルチスレッド計算が外れてないか確認
ファイルーオプションー詳細設定ー数式
『マルチスレッド計算を行う』のチェックが外れてないか確認する
※表示でもたついてる感じなので、望みは薄いですが、これも一応・・・
いずれかで解決できるとよいのですが・・・
2017年08月06日
ゾウ
Ryo Ohno様
ご回答ありがとうございます、是非参考にさせていただきます。
1:
発注の一部にエクセルの計算を使っているため、できれば避けたいところです。
どうしても他のところで解決しなければ、手動にして毎秒再計算させるようなプログラムに変更してみます。
2:
実行済みでした。。(常にFalseに設定)
仰る通り、大きな改善は見られなかった記憶があります。
4:
チェックが入っておりました。
3と場合によっては1について試行してみます。
そもそもネット回線が遅いのでは?と思い、いま使っている古めのルーターを買い替え予定です。
少しお時間いただきますが、結果が出ましたらまた改めてご報告いたします。
ありがとうございました!
2017年08月07日
ゾウ
Ryo Ohno様
1の手動計算を試してみたところ、若干の改善が見られました。
元々有線なこともあってかルーターの変更では改善なさそうです。。
3については、Excel2007を使用しており方法がわからなかったので未実施です。
ちなみに10程度の銘柄を一度に取得しているのですが、それでも1秒弱で取得可能でしょうか?
ご教示いただけますと幸いです。
どうぞよろしくお願いいたします。
2017年08月09日
Ryo Ohno
手動計算で若干解決されましたか・・・
良かったですが、あまり解決策にはならないですね・・・
ちなみに、手動計算にされた場合でも、目標の1秒以内には遠く及ばない感じでしょうか?
自分のところも回線の帯域(回線を使っている量)はほとんど使っていませんでしたので、
よほどの事がない限り回線速度の問題は低そうですね・・・
>ちなみに10程度の銘柄を一度に取得しているのですが、それでも1秒弱で取得可能でしょうか?
今、255銘柄から、10銘柄に減らして条件を合わせてみたのですが、やはり1秒弱ぐらいでした。
あとは解決策とは違いますが、
QUOTE関数で現在値を取得しVBAで1分ごとに、
その時の価格をセルに設定するというのはいかがでしょうか?
それなら、比較的目標の時間には近づけられる気がします。
2017年08月10日
ゾウ
コメントいただき、ありがとうございます。
>ちなみに、手動計算にされた場合でも、目標の1秒以内には遠く及ばない感じでしょうか?
そうですね、まだ2秒程度かかってしまうようです。
>今、255銘柄から、10銘柄に減らして条件を合わせてみたのですが、やはり1秒弱ぐらいでした。
255本分の値を取得していたのと勘違いしておりました。
255銘柄でも1秒弱で表示できていたのですね。。
>あとは解決策とは違いますが、
QUOTE関数で現在値を取得しVBAで1分ごとに、
その時の価格をセルに設定するというのはいかがでしょうか?
当初QUOTE関数を使っていて、うまくいかなかったのでCANDLEに変更した経緯がありまして...
ですが、他のアプローチを考えた方が早いかもしれないですね!
諸々ご助言いただき、誠にありがとうございました!
2017年08月13日