0
Help us understand the problem. What are the problem?

posted at

updated at

auカブコム証券のkabuステーションREST APIで自前のトレイル注文の改善(前回実行時からの高値/安値)

はじめに

前記事

  1. auカブコム証券のkabuステーションREST APIをcurlで叩く
  2. auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く
  3. auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く
  4. auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する
  5. auカブコム証券のkabuステーションREST APIのテスト用モックサーバーを作る
  6. auカブコム証券のkabuステーションREST APIの認証済TOKENをファイル管理する
  7. auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(情報収集編)
  8. auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(注文発注編)
  9. auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(ツール完成編)
  10. auカブコム証券のkabuステーションREST APIで自前のリピート注文を作ってみる(注文約定調査編)
  11. auカブコム証券のkabuステーションREST APIで自前のトレイル注文の改善(トレイル幅の動的拡張)
  12. auカブコム証券のkabuステーションREST APIで自前のリピート注文を作ってみる(設計、検証用実装編)
  13. auカブコム証券のチャートデータの日付を調整する
  14. auカブコム証券のkabuステーションPUSH APIのサンプル
  15. auカブコム証券のkabuステーションREST APIで自前のリピート注文を作ってみる(リファクタリング編)
  16. auカブコム証券のkabuステーションPUSH APIを受信してCSVファイルへ保存する
  17. 5分足の時刻を列挙する
  18. 保存した4本値チャートデータの終値と、PUSH APIで受信したチャートデータをマージする
  19. マージしたチャートデータからテクニカル指標を計算する(SMA6,SMA12,SMA24編)
  20. マージしたチャートデータからテクニカル指標を計算する(ボリンジャーバンド編)

しばらく使ってみて、当初はREST APIのみで実行時の現値で含み益を計算して、トレイル注文の調整を行っていたが、気が付けばPUSH APIでリアルタイムにTick値が保存できているので、トレイル注文ツールで、前回実行した時刻からの高値/安値を取得して、トレイル幅を計算するように修正する。

対象ソースとデータ

トレイルツールは15番目の記事でリファクタリングした最新のソース(v9_2 r4)をv17 r5にコピーして修正する。
Tick値は16番目の記事のツールが保存したChartData.csvを参照する。

ChartDataLogicクラス

ChartData.csvを読み込み、ChartInfoのリストを管理する。
日時と約定価格しか使用しない。

カラム定義

No Name Description Example
1 date 日時 2022-05-03 00:36:37
2 price 約定価格 26730.0
3 volume 売買高 407256.0

数日間取得したファイルの1日分のサイズは、約2.5MB程度、7万行程度だった。
何度も検索するのならば検索インデックスを作成した方がよいが、毎回プロセス起動されメモリはその都度クリアされ、また、建玉に同じ銘柄の異なる価格で数回検索する用途のため、先頭から逐次検索し、同じ検索条件はキャッシュすることにする。

実行結果

stdoutの抜粋

ChartDataLogic.readCsvChartData(): chartList.size=1944

ChartDataLogic.searchIdx(): startDate=2022/05/19 08:57:11
ChartDataLogic.searchHighLow(): idx=1869, ci={date=2022/05/19 08:57:11, price=26170, volume=491123}
ChartDataLogic.searchHighLow(): vals[0]=26180, vals[1]=26165

priceHighLow profitHigh=-10 <- -15, highPrice=26180 <- 26175
priceHighLow profitLow=20 <- 10, lowPrice=26165 <- 26175

すでに1944件チャートデータが収集されていて、8:57:11時点のログは1869+1番目。
末尾までの高値26180、安値26165。
従来では26175で計算していたので、ロングならば26180の方が含み益が+5大きくなり、ショートならば26165の方が含み益が+10大きくなる。

追記:fix EntryOrdersから削除されるとstateが遷移できなくなる。

O,XXXのままリンク切れとなっていることがある。
原因は、XXXが決済済で、新たにYYYを発注する予定が、値幅が大きいため注文しない状態のまま放置していたところ、ordersAPIから削除されるので、リンク切れとなる。

O,XXXがリンク切れの場合、Rに戻す。
P,XXXがリンク切れの場合、Pに戻す。
C,XXXがリンク切れの場合、Pに戻す。

githubソース

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?