search
LoginSignup
0

posted at

updated at

【v5】auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(情報収集編)

はじめに

過去記事は「auカブコム証券のkabuステーションREST APIに関する記事一覧」。

トレイル注文とは、逆指値注文で、含み益が増加するたびにSL(ストップロス)価格を変更して順張りに追尾していく注文方式です。
auカブコム証券にもトレーリングストップ注文はありますが、その日の高値/安値をベースに逆指値を決めるので、1日に1度しかチャンスがなく、中長期に保有した場合の注文方法と思います。
そこで、自分の建玉単価ごとに含み益の最高値を管理すれば、建玉単価ごとに逆指値価格を決められるのでは?ということで、自前のトレイル注文を作って、検証してみる。
なお、この記事では、定期的に実行し、含み益/含み損を監視した結果を記録するのみで、実際の新規注文や注文変更(キャンセル+新規注文)は、注文指示ファイルを保存して、別PGMで実施する予定です。

現物の売り、(信用買建、信用売建、先物買建、先物売建、OP買建、OP売建)の返済と、残高JSONデータや発注JSONデータがややこしいので、先物mini(SecurityType=901)のみ扱う。

事前準備

6番目の記事と同じです。非同期に実行されるPGMが増えてきたので、TOKENはプロセス間で共有し、ファイルロックにより排他制御を行います。

ツール

6番目の記事と同じです。

設定ファイル

事前に用意する設定ファイルはありません。
PGM実行すると、建玉情報ファイル(タブ区切り形式)に保存され、次回からこれを読んで初期化します。→MainPositions.txt
PGM実行すると、ログファイルに追記します。→MainPositions.log

建玉情報ファイルのカラム定義

1行目は、#で始まるコメント行。
2行目以降は、独立したレコードで、11カラムをタブ区切りで保存する。
データ値にはタブ文字や改行文字は含まれず、エスケープは行わない。
主キーは、code_price_sideStrの文字列でファイルには持たない。sideStrは1->S、2->L。

No Name Description Example
1 code 残高照会APIの銘柄コード(Symbol) 167060019
2 name 残高照会APIの銘柄名(SymbolName) 日経225mini 22/06
3 price 残高照会APIの値段(Price) 28000
4 side 残高照会APIの売買区分(Side)。1:売、2:買。 1
5 curPrice 残高照会APIの現在値(CurrentPrice) 27675
6 profitHigh 含み益の最大値 325
7 profitLow 含み損の最小値 -10
8 createDate 作成日時(currentTimeMillis値) 1649136073840
9 createDateStr 作成日時の文字列形式。インスタンスには持たない。 2022/04/05 14:21:13.840
10 updateDate 更新日時(currentTimeMillis値) 1649136073841
11 updateDateStr 更新日時の文字列形式。インスタンスには持たない。 2022/04/05 14:21:13.841

ログファイル

  • 新規登録 main(): create 167060019_27705_S 日経225mini 22/06: curPrice=27720 profit=-15
  • 含み益更新 main(): update 167060019_28005_S 日経225mini 22/06: curPrice=27725 profitHigh=280 <- 275
  • 含み損更新 main(): update 167060019_28005_S 日経225mini 22/06: curPrice=27730 profitLow=275 <- 280
  • 削除 writePositions(): delete 167060019_29005_S 日経225mini 22/06

stdoutサンプル

抜粋(16:30のGDにより含み損-50円拡大。昼に約定した数量0が出てくる→06,07。)

readPositions(): posMap.size=4
  167060019_27705_S: {name=日経225mini 22/06, profitHigh=-45, profitLow=-95}
  167060019_27805_S: {name=日経225mini 22/06, profitHigh=55, profitLow=5}
  167060019_28000_S: {name=日経225mini 22/06, profitHigh=250, profitLow=200}
  167060019_28005_S: {name=日経225mini 22/06, profitHigh=255, profitLow=205}
main(): response.size=9
  04: 167060019_27705_S 901 167060019 日経225mini 22/06 -1 27705 27850 -145
  > update 167060019_27705_S 日経225mini 22/06: curPrice=27850 profitLowDelta=-50 (-145 <- -95)
  05: 167060019_28000_S 901 167060019 日経225mini 22/06 -3 28000 27850 150
  > update 167060019_28000_S 日経225mini 22/06: curPrice=27850 profitLowDelta=-50 (150 <- 200)
  06: SKIP 901 167060019 日経225mini 22/06 0 27805 27850
  07: SKIP 901 167060019 日経225mini 22/06 0 27905 27850
  08: 167060019_28005_S 901 167060019 日経225mini 22/06 -2 28005 27850 155
  > update 167060019_28005_S 日経225mini 22/06: curPrice=27850 profitLowDelta=-50 (155 <- 205)
  09: 167060019_27805_S 901 167060019 日経225mini 22/06 -2 27805 27850 -45
  > update 167060019_27805_S 日経225mini 22/06: curPrice=27850 profitLowDelta=-50 (-45 <- 5)
writePositions(): posKeySet.size=0
writePositions(): posMap.size=4
  167060019_27705_S: {name=日経225mini 22/06, profitHigh=-45, profitLow=-145}
  167060019_27805_S: {name=日経225mini 22/06, profitHigh=55, profitLow=-45}
  167060019_28000_S: {name=日経225mini 22/06, profitHigh=250, profitLow=150}
  167060019_28005_S: {name=日経225mini 22/06, profitHigh=255, profitLow=155}

その後

profitHigh >= 200となった頃から、price+(profitHigh-100)*signの価格で逆指値を入れる。signは、S:-1、L:1。
profitHighが増加するごとに逆指値を再計算する。
ログファイルで検証する。

28000付近なので、適当に200を想定しているが、1%としたら、280円が閾値となる。

追記:気になった部分の改修

初回のソースと出力ファイルをMainPositions_r1.java/txt/logにリネームして、以下の修正を加える。

  • 朝kabuステーション起動後にcurrentPrice=0が来るので、これを除外
  • parseInt/Longを"("以降を除外して数値に変換
  • sideを1(S)、2(L)のように説明を追加
  • createDate(createDateStr)、updateDate(updateDateStr)のように説明を追加(カラム数11→9)
  • 約定番号(executionID)の配列を追加(カラム数9→10)
  • executionID(leavesQty-holdQty)のように数量を追加
  • ヘッダ行のカラム名の文字列長の調整
  • priceにprice(qty)に変更(残数量と拘束数量の集計値)
  • 将来のためPosInfoにComparableを実装(現行はkeyと同じ並び順)

修正後のカラム定義

No Name Description Example
1 code 残高照会APIの銘柄コード(Symbol) 167060019
2 name 残高照会APIの銘柄名(SymbolName) 日経225mini 22/06
3 price(qty) 残高照会APIの値段(Price)と残数量(LeavesQty)、拘束数量(HoldQty)の集計 28000(2-0)
4 side 残高照会APIの売買区分(Side)。1(S):売、2(L):買。 1(S)
5 curPrice 残高照会APIの現在値(CurrentPrice) 27675
6 profitHigh 含み益の最大値 325
7 profitLow 含み損の最小値 -10
8 createDate 作成日時(currentTimeMillis値)と文字列形式 1649136073840(2022/04/05 14:21:13.840)
9 updateDate 更新日時(currentTimeMillis値)と文字列形式 1649136073841(2022/04/05 14:21:13.841)
10 executionIds 残高照会APIの約定番号(ExecutionID)と残数量(LeavesQty)、拘束数量(HoldQty)の配列をカンマ区切り E2022040601ZS8(1-0),E2022040603BWT(1-0)

追記:ソースをarchiveブランチへ移動

最新版に移行し、もう使われることはないので、アーカイブする。

githubソース

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0