UWSCを用いた注文処理


 シグナルダイアログの解析①

 エクセル側の準備が整ったので、次にUWSCのスクリプトを記述しよう。このコラムで紹介するUWSCスクリプトは、先ほども紹介したとおり、エクセル側でシグナルのダイアログが発生したことを認識し、実行されるものだ。シグナルの発生を監視する方法は一番最後に記載するが、これはUWSCスクリプト内に記述しなくても、UWSCアプリケーション本体の設定で行うことができる。なので、シグナルの発生の監視に関してはスクリプト記述時には一旦忘れてもらってかまわないが、このスクリプトがシグナル発生時に呼び出されて実行されることを前提にしている、ということは念頭においておいてほしい。

 UWSCスクリプトの記述方法だが、UWSCスクリプトはVBAを記述する際にVBEを用いたような、専用のスクリプトエディタのようなものは存在していない。また、UWSCのスクリプトは通常のテキスト形式で記述する。よって、記述に用いるテキストエディタは基本的にどのようなものでもかまわない。

 テキストエディタを起動し、新規のドキュメントを開いたら、まずはVBAでもそうであったように、変数や定数の宣言を行っていこう。なお、VBAでは変数の宣言を、型を指定して行ったが、UWSCでは変数の宣言も型の指定も基本的に必要ない※。よってここでは配列及び定数の宣言のみを行う。

 DIM TEMP[12]
 CONST SLPD = 0.2
 CONST ACTYPE = "特定"

 これが配列及び定数の宣言となる。配列の宣言には、DIM以下に配列名[インデックス数]を挙げれば良い。定数の宣言には、CONST以下に定数名を挙げ、その定数に代入する値を=(イコール)で結ぶ。ここでは、配列にTEMPという配列名を宣言し、インデックス数を12とした。同様に、SLPDという定数に0.2を代入し、ACTYPEという定数に"特定"という文字列を代入した。代入時には、型の指定をする必要がないので、文字列であろうと値であろうと気にすることなく代入して問題ない。なお、定数と代入した値に関してあらかじめ解説しておくと、SLPDという定数は処理の待ち時間を表している。ACTYPEという定数は、楽天証券における口座区分を表している。楽天証券の口座区分に関してはこちらを参照してほしい。楽天証券の口座区分は「一般」と「特定」が存在し、ここでは特定としているが、一般を利用したい場合はこの文字列を「一般」と書き換えてもらえば良い。

 CONST PASS = "0000"

 もうひとつ定数を宣言しておこう。これは、楽天証券における取引暗証番号だ。マーケットスピードを通じて取引を行う際に必要となる。ここでは0000としているので、各自の暗証番号に置き換えてほしい。

 EXCELORDERWINDOW = GETID("++買い")
 SLEEP(SLPD)

 このスクリプトは前述の通り、エクセルの売買シグナル発生時のダイアログが表示されたことを受けて発動する。よって最初に、表示されたダイアログを解析する必要がある。まず、EXCELORDERWINDOWという変数に、GETIDという関数で取得した値を代入する。上記の通り、変数の宣言の必要はないのでいきなり値を代入して問題ない。GETIDは、指定された引数と同様または一部が一致するウィンドウのIDを取得する関数だ。UWSCでは、コントロールしたいウィンドウのIDをGETID関数で取得し、その後、そのIDを用いて各命令を出す。また、引数にはウィンドウタイトルを与える必要があるが、他のウィンドウと間違われなければ、ウィンドウ名の一部でもかまわない。ここではウィンドウタイトルのすべてを記述せず、一部のみとしているが、その理由は、エントリー時でもエグジット時でも動作させるためだ(空売りは行わないので、買いのウィンドウのみの取得となる)。SLEEPは、指定された引数の間だけ処理を中断する関数だ。先ほど定数として宣言したSLPDを与えることにって、代入されている0.2秒間、UWSCスクリプトの処理を中断する。これは、コンピュータの処理速度や画面の描画速度などが追いつかないことを想定して、若干の間を持たせる意味を持つ。スクリプトは人間が実際に操作するよりもはるかに高速にマウスやキーボードなどの操作をコントロールするため、このような間を持たせないと、ソフトの処理が追いつかないうちに、先に操作を行ってしまうことがある。それを回避するためにこのような処理を行う。また、必要な待ち時間はコンピュータのスペックなどによっても変わるため、うまく動作しない場合は各自、先ほどのSLPDという定数の値を変更してほしい。

※変数の宣言
VBAでも変数や型を宣言せずに扱うことが出来るが、大きなプロジェクトになると、例えば宣言を行わないことによってどれが変数なのかわからなくなり、エラーを起こしたり、型の指定を行わないことによって、メモリを無駄遣いしたりしてしまう。よって筆者はVBAでは変数の宣言を行うことを推奨する。UWSCでも変数の宣言を行うことが出来るが、VBAと比較して簡潔であったり、スクリプト自体が短かったりすることからここでは省略している。

免責事項
※コラムに基づく行為の結果発生した障害、損失などについて筆者及び出版社は一切の責任を負いません。
※コラムに記載されている会社名、製品名は、それぞれ各社の商標及び登録商標です。

このページに関連する商品: