kamap
POSITIONに関して教えてください
以前、分割約条でお世話になった者です
おかげさまで、VBA取引を行ってます。
最近、銘柄制限のためにPC2台体制に変えたのですが
(1つの口座を2台で独立にRSSを走らせています)
ところが、最近たまに片側のPCのみ、POSITIONの取得に失敗していることが分かりました。
やってることは、”TRD”シートにて
①成り行き買い
②POSITIONで買い約定の確認(分割も)
③指値売り注文
④ORDQUERY(1)で売り注文の確認
⑤成行売りへ変更
⑥ORDQUERY(2)売り約定の確認
で②が成立しません
本日、状況をみていたら、POSITIONがENDも返してませんでした
その場で、VBAの式を書くサブルーチンを実行しても、アドインの更新をしてもダメでした。
EXCELを終了して、再度実行(式のみ)したらENDがでました
実際の動作中はApplication.OnTimeが5秒間隔で走ってます
また、ORDQUERYは問題ないように思います
何かアドバイスありますでしょうか?
また、ORDQUERYで分割約定ごとに取得する方法はありますか?
該当シートのEXCELを添付します、95行が取得関数で値のコピーとなっています
実際の式を書くマクロはマクロという名前のシートに
TRD_CHK()という名前で入ってます
また、前回同様、つまらないミスと思いますが
よろしくお願いします
2020年02月03日
大野 了
kamapさん、こんにちはー!!
お久しぶりでーす!!
さて、本題ですが・・・
片側のPCのみ、POSITION関数でデータが、たまに取れない時があると・・・
毎回じゃないんですよね・・・
辛いですね・・・(涙
難しいですね・・・
上がっているソースも実行してみたんですが、問題なく書き込まれて、
ポジション情報も落ちてきました。
kamapさんのおっしゃられます通り、ORDQUERYもPOSITIONも問題ない様に思いまーす。
Excelを再起動したらちゃんと取ってくるとのことですので、
岡三RSSの環境も正常だと思います。
現状で、更新が止まる可能性としては以下のことが考えられます。
〇VBAがループなどで動きっぱなしになっている。
〇シートの『計算方法の設定』が自動以外になっている。
〇データの更新対象にならなかった
もし頻繁に起こるようでしたら、次にデータが取れなかった時に、以下のことを試して頂けますでしょうかー?
〇リボンの『数式』にある再計算実行ボタンを押してみる(F9でも大丈夫です)
〇101行目以降を選択しDELキーを押してみる
もし再計算で表示されるなら、何かしらの理由でExcelの再計算が掛からない状況になってしまっていて
岡三RSSがデータを更新できません。
また、もし101行目以降を選択して、DELキーを押して表示されるようであればー
何かしらの理由で岡三RSSが更新できなくなってるっぽいです!!
>また、ORDQUERYで分割約定ごとに取得する方法はありますか?
残念ながら・・・
確かORDQUERYはあくまでも発注した情報のみなので、
その結果までは取れなかった気がします。
一瞬でよければ、もしかしたら『約定状態』が"一部約定"で返ってくるかもしれませんが、
本当に一瞬と思いますので、判断に使用するのは厳しいと思いまーす!!
2020年02月03日
kamap
大野様、返信ありがとうございました
POSITION取得ができなくなった履歴を調べましたら
①PC1台の時はOK(旧PC)
②PC2台で別ファイルで動かしてた時はOK
③PC2台でファイルを共通にしてから、旧PCのみでNG発生
のようです
旧PCはEXCEL2010の32bit版で新PCはEXCEL2019の64bit版
アルゴルをいじるのを新PCに統一し、そのファイルを旧PCに
コピーして並列動作させるようにした頃からこの現象が発生
32と64の吸収は Declare PtrSafe で対応したのですが
ここに問題があったのかもしれません
とりあえず、旧PC用にEXCEL2019を購入し、64bitに
合わせて試してみます。結果が分かれば報告します
この現象は夜のデバックでは発生せず、昼間はずっと再現なので
本番の ontime が絡んでるのかなぁと思ってます
とりあえず、EXCELのバージョンとbit を合わせて神頼みですw
新PCをいじりたく無いので、64bitでやってみて
だめなら32bitも試してみます
2020年02月04日
大野 了
kamapさん、こんばんは!!
そんな経緯があったんですね・・・
それであればVBAが正常に動いてないのかもしれません。
kamapさんのおっしゃられます通り、VBA内でWindowsAPIを使用するときは
Officeが32bitと64bitで記述の仕方が異なります。
もし、64bitと32bitで完全に同じソースで行きたい場合は
下記のようにAPIの宣言に対し条件付きコンパイルを付けてあげると、
32bitでも64bitでも同じソースで動かすことができます。
※エラーで赤色にはなりますが、問題はありません。
#If Win64 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
また、VBAのソースに問題があるかどうかはコンパイルを行うと確認することができます。
VBAエディタの中で
『デバッグ』-『VBAProjectのコンパイル』
をクリックしますとソースをコンパイルしてくれて、問題があれば教えてくれます。
2つのPCで各々でコンパイルをクリックしてみてみますと、
ソースが正常かどうかの確認が出来まーす!!
2つのPCでうまく行くことを祈ります!!
2020年02月05日
RSSユーザー
kamap さん
投稿をあまり読み込んでいないので参考になるかわかりませんが、問題がまだ解決されていないならば、私の分割約定建玉決済の経験を書きたいと思います お知らせください
2020年04月12日