発注関数の内容を理解する(RssMarginOpenOrder関数)
まず信用新規で買建する前提で使う関数はRssMarginOpenOrder関数だ。
必要な引数が上の画像の通りだが羅列しても訳が分からないだろう。今回の記事ではこれをわかる状態にするのがゴールだ。
自動売買の話の前に、発注関数の中身を理解しておくことが重要となるので各引数に対してどのように記述していくかを説明する。
というのも発注関数は引数(システム側に渡さなければいけない情報)が多すぎて初見で嫌になること間違いなしだからだ。
例えば下記の画像のようなシートがあったとして、M2セルに発注関数を入力するとしよう。A2に入力されている銘柄CD:7912の大日本印刷(あくまで発注関数の説明のための一例であり、買い推奨銘柄ではない)を発注したいとする。
次章から各引数に対しての入力例を説明する。
発注ID:1~
一意の値である必要がある。つまり1を一度使ったら二度と使えない(ただしエクセルを一度再起動すれば再度使用できる)。そのため2→3→4と加算していくかもしくは、完全ランダムに作っていくかいくつか方法はある。
桁の上限数だがマニュアルを当サイトで確認する限りは8もしくは9桁までは使えたことを報告しておく。そのため、例えば05月01日09時39分に発注であれば、05010939という数列を生成して発注番号として割り当てることも可能というわけだ。
後々登場するが発注IDと注文番号は異なるので注意。(注文番号は訂正注文時必要になる)
なおRANDBETWEEN関数使用できない。確かにこの関数を使えば膨大なパターンの乱数を生成できるため一見よさそうに見えるが、使ったら壊れたスロットのように永遠に数字が変わり続け最後にはフリーズしたことをここに報告しておく。
RSSの更新間隔との相性と思われるが、使わないほうがいいだろう。
とにかく、RSSの内部的に更新間隔(1秒?)ごとにシートを更新しているので、RANDBETWEENで生成されたランダム整数もまた更新されてしまい、無限ループしてしまっている様子。最悪応答なくなって強制終了しか手段なくなるのでやらないことをお勧めする。
発注トリガー:0または1(セル参照も可能)
これは簡単。0は待機(注文されない状態)、1は注文したら飛ぶ状態(誤発注注意!)
察しがいい方はお気づきかと思うが、ここが1に変われば勝手に発注されるので、判定条件を作り0から1に値が変わるよう関数を書いておけば自動で発注がされることとなる。返済注文もあらかじめ関数と条件を作っておけば自動売買成立となるわけだ。
※トリガーが1になっている間は際限なく注文が飛び続ける。つまり発注IDさえ被っていなければ、重複発注も十分あり得るということ。考えただけでも恐ろしいが、検証の際100株注文するつもりが1000株分くらい重複で飛んでいたらしく資金が底をつきかけた。絶対誤発注せぬようご注意のほど喚起しておく。
あくまで参考アイデアとしてだが、注文照会(RssOrderList関数)を活用して、該当銘柄の返済注文が注文照会に載った場合はトリガーを0に戻すなど対策すればいいかと思われる。あるいは発注が正常に飛んだことを確認できるまで発注IDを変更しなければ少なくとも重複注文が飛んで資金いっぱいまで買われることはない。
銘柄コード:東証のコードを参照
特に説明不要かと思うが、もちろんセル参照で行けるため上の画像で説明するとA2選択でOK。
売買区分:1/売・3/買
買建オンリーの人は3しか使わないのではないだろうか。空売りの手法も取り入れている場合は売建で1も使われるといいだろう。(ここでいう売買はあくまで新規注文。返済注文とは別なので注意してほしい)
注文区分:0/通常注文、1/逆指値付き通常注文、2/逆指値注文
いつもトレードで使用する注文方法を選択。ZACK ITでは検証時、新規発注では0/通常注文しか使わず、返済注文で逆指値付きを使うことが多かった。
SOR区分:0/通常注文、1/SOR注文
1のSORは東証の他JNXやChi-Xなど、自分の注文に対して有利な条件価格があればそっちで約定させてあげますよという内容。検証ではとりあえず1/SOR注文。
信用区分:1/制度信用、2/一般信用(無期限)、3/一般信用(14日)、4/一般信用(一日)
今回はデイトレでの検証だったため4/一般信用(一日)を使用。その場合は必ず大引までに返済するように注意が必要。
注文数量:100~
自動売買構築直後は実際に運用してみて予測してない挙動にならないかのチェックの為資金沢山あってもテスト運用で100をお勧めする。
価格区分:0/成行、1/指値
これは例などはないため、手法やタイミングに合わせて使いわけてほしい。
注文価格:指値の場合は入力(成行の場合は省略可)
1/指値の際は呼値に注意。例えば1ティック5円なのに10,001円で発注してもエラーで発注が飛ばない。その場合は10,005円や10,000円で発注しなければいけない。呼値って何の人はまずはそこを調べよう。
執行条件:大体の場合は1/本日中。場合によっては6/大引不成とか使うかも?
指値で期間指定したい場合は、5/期間指定を選択。
注文期限:執行条件で5/期間指定を選んだ場合は入力(それ以外は省略可)
期間指定の書式はYYYYMMDD。
今日(2024/5/1)から1か月後とかにしたいんだったら下記みたいな感じで指定が可能。MONTH(NOW())+1にすれば5月+1で6になるって感じ。
TEXT(YEAR(NOW()),"0000")&TEXT(MONTH(NOW())+1,"00")&TEXT(DAY(NOW()),"00")
とはいえ検証では期間指定をしたことがなかったが、祝日や土日などってどうなるんだろう避けなきゃってなると色々面倒な前提条件の設定が必要になるだろう。
祝日シート作って、WORKDAY関数等々検討しよう。
口座区分:0/特定、1/一般
大体の場合は0/特定ではないだろうか。
逆指値条件価格:逆指値付き注文にした場合は条件価格を入力(それ以外は省略可)
新規注文で逆指値あまり使ったことないのでわからないが、とりあえず指値で待ち構えておくけど、節目の価格をブレイクして上がってしまう場合乗り遅れるので成行にしたい場面等で使用。
その場合「10,000円」以上になったら成行発注するのであれば10,000を引数にすればOK。
呼値に注意。例えば1ティック5円なのに10,001円で発注してもエラーで発注飛ばない。その場合は10,005円や10,000円で発注しなければいけない。呼値って何の人はまずそれ調べ(ry
逆指値条件区分:1/以上、2/以下
例えば10,000以上になったら成行発注するといった逆指値トリガーを予約したい場合、逆指値条件価格に10,000と入力し、逆指値条件区分1/以上を選択する。
逆指値価格区分:0/成行、1/指値
逆指値はそもそも新規ではなく返済で使うことが当方は多いが使うのであれば十中八九逆指値使う場合は0/成行を使うのではないか。
例を挙げると10,000以上になったら成行発注するといった感じです。
逆指値価格:逆指値価格区分が指値の場合は指値を入力(成行の場合は省略可)
呼値に注意。例えば1ティック5円なのに10,001円で発注してもエラーで発注飛ばない。その場合は10,005円や10,000円で発注しなければいけない。呼値って何の人はま(ry
セット注文区分:0/通常(予約しない)、1/セット注文(予約する)
例えばこの関数の前半で指定している銘柄の新規買い建て注文が約定したとする。するとすぐさまそれの利確のための予約注文がされるわけだ。便利とはいえ使い時は限られるかも。また、一日信用を使っている場合は大引不成もしくは不成を選択しないとエラーになるため注意。
セット注文価格区分:セット注文ありの場合、1/指値、2/値幅指定(セット注文しない場合は省略可)
意外と値幅指定が便利かも。10円利益のったら利確したい的な。勿論株価の利幅だ。1,000円の株が1,010円で売りたいなら利幅は10円で指定。
1/指値の場合は呼値に注意。例えば1ティック5円なのに10,001円で発注してもエラーで発注飛ぶことはない。その場合は10,005円や10,000円で発注しなければいけない。呼値っt(ry
セット注文価格:セット注文価格区分1/指値選択した場合は指定
1/指値の場合は呼値に注(ry
セット注文執行条件:通常注文の執行条件と同じなのでそちら参照
セット注文期限:通常注文の注文期限と同じなのでそちら参照
まとめると…
いかがだっただろうか。だいぶ条件定義が長いため気が遠くなった読者もいるのではないだろうか。
全てまとめるとM2セルにはこんな感じになるい。今回省略可のところは”,(カンマ)”だけにしている。
=RssMarginOpenOrder(1,0,A2,3,0,1,4,100,0,,1,,0,,,,,0,,,,)
M2セルの末尾に”=>待機中”と表示されていれば成功。発注トリガーが1になって建余力がある場合はもう後は勝手に発注してザラ場であればキャンセルできず約定するので(成行なら)ご注意を。
よくある注意点
まだ発注するうえでいくつか見落としがちな注意点がある。
ExcelのマーケットスピードⅡのタブにて、発注不可の状態になっている場合は発注トリガーが1の状態でも発注されない。せっかくいい自動売買ロジックができたから寄付から試すぞー!って思って中々発注されないからなんでだろうと思ってよく見たら発注ロックがかかっていた状態が稀によくある。
同じくExcelのマーケットスピードⅡのタブにて、各種設定の中にあるRSSの設定だが、おそらく初期設定は発注上限金額が0円だったと思うので、これも変更してあげないといつまでも発注されないため注意。
こちらはマーケットスピードⅡの環境設定にある、注文・約定2の画面。
この二つにチェックを入れて右に隠れてしまっているが、取引暗証番号をあらかじめ入力して適用しておくことをすすめる。
おわりに
さて、いかがだっただろうか?
今回は楽天RSSを活用して自動売買を実現するために必要不可欠なまずは新規発注を手動で行うというところまで説明してきた。
言ってしまえば自動で売買を行うことは今日学んだことの応用なのでここがまだ少しよくわからないよという方はぜひX(旧Twitter)の当アカウントへブログ読んだ旨伝えて気軽に質問してもらえればありがたい。わかる範囲・答えられる範囲でお答えする所存だ。
次回は返済注文の関数について説明する予定なのでぜひTwitterと当サイトをブックマークしてお待ちいただきたい。