kabuステーションAPIをPHPで利用するポイント
kabuステーションAPIをPHPで利用するのは非常に簡単です。例えば「トークン発行」は、エラー判定などを省略すると数行のコードで書くことができます。
<?php
$option_ary = [
'http' => [
'method' => "POST" ,
'header'=> "Content-type: application/json\r\nAccept: application/json" ,
'content' => json_encode(['APIPassword' => API_PASSWORD]) ,
'ignore_errors' => true ,
'protocol_version' => '1.1' ,
]
];
$json = file_get_contents('http://localhost:18080/kabusapi/token' , false , stream_context_create($option_ary));
$response = json_decode($json , true);
var_dump($response);
はい。これだけでトークンが表示されました。
あまりに簡単すぎるので、kabuステーションAPIのプログラム側についてはブログに書く内容がありませんでした、また売買戦略などはブログに書くべき内容では無いので書けません。
よって、kabuステーションAPIをPHPで使う上で、初心者の方がハマるポイントの攻略法を記事にしてみます。
発注処理のデータの意味が分かりにくい
株を発注する時の送信するデータの内容が、0,1,2などの意味がない数値なので、意味が分かりにくいし、発注ミスも起こりやすくなります。
そこで、このように、名前に意味がある定数に置き換えてわかりやすくします。
define('SIDE_SALE' , "1");
define('SIDE_BUY' , "2");
define('DELIVTYPE_NONE' , 0);
define('DELIVTYPE_AZUKARIKIN' , 2);
define('EXCHANGE_TOSHOU' , 1);
define('EXCHANGE_SOR' , 9);
define('SECURITYTYPE_KABUSHIKI' , 1);
define('CASHMARGIN_GENBUTSU' , 1);
define('CASHMARGIN_OPEN' , 2);
define('CASHMARGIN_CLOSE' , 3);
define('MARGINTRADETYPE_SEIDO' , 1);
define('MARGINTRADETYPE_IPPAN' , 2);
define('CLOSEPOSITIONORDER_PROFIT_OLD' , 4);
define('CLOSEPOSITIONORDER_PROFIT_NEW' , 5);
define('FUNDTYPE_SHINYOUDAIYOU' , "AA");
define('FUNDTYPE_NONE' , " ");
define('ACCOUNTTYPE_TOKUTEI' , 4);
define('FRONTORDERTYPE_NARIYUKI' , 10);
define('FRONTORDERTYPE_SASHINE' , 20);
define('FRONTORDERTYPE_GOBA_YORISASHI' , 22);
このように定数に置き換えることで、1と2はどっちが買い?と悩まなくてすみます。
現物株の注文処理はこのように分かりやすくなります。
$data = [
"Password" => ORDER_PASSWORD ,
"Symbol" => "{$p_code}" ,
"Exchange" => EXCHANGE_TOSHOU ,
"SecurityType" => SECURITYTYPE_KABUSHIKI ,
"Side" => ($p_side === 'buy') ? SIDE_BUY : SIDE_SALE ,
"CashMargin" => CASHMARGIN_GENBUTSU ,
"DelivType" => ($p_side === 'buy') ? DELIVTYPE_AZUKARIKIN : DELIVTYPE_NONE ,
"FundType" => ($p_side === 'buy') ? FUNDTYPE_SHINYOUDAIYOU : FUNDTYPE_NONE ,
"AccountType" => ACCOUNTTYPE_TOKUTEI ,
"Qty" => $p_qty ,
"Price" => $p_price ,
"ExpireDay" => $p_expire ,
"FrontOrderType" => (empty($p_price)) ? FRONTORDERTYPE_NARIYUKI : FRONTORDERTYPE_SASHINE ,
];
さらに、信用取引ではこのような感じになります。
$data = [
"Password" => ORDER_PASSWORD ,
"Symbol" => "{$p_code}" ,
"Exchange" => EXCHANGE_TOSHOU ,
"SecurityType" => SECURITYTYPE_KABUSHIKI ,
"Side" => ($p_side === 'buy') ? SIDE_BUY : SIDE_SALE ,
"CashMargin" => ($p_side === 'buy') ? CASHMARGIN_OPEN : CASHMARGIN_CLOSE ,
"MarginTradeType" => ($p_trade_type === 'ippan') ? MARGINTRADETYPE_IPPAN : MARGINTRADETYPE_SEIDO ,
"DelivType" => ($p_side === 'buy') ? DELIVTYPE_NONE : DELIVTYPE_AZUKARIKIN ,
"FundType" => FUNDTYPE_NONE ,
"ClosePositionOrder" => CLOSEPOSITIONORDER_PROFIT_NEW ,
"AccountType" => ACCOUNTTYPE_TOKUTEI ,
"Qty" => $p_qty ,
"Price" => $p_price ,
"ExpireDay" => 0 ,
"FrontOrderType" => FRONTORDERTYPE_SASHINE ,
];
おそらく、初心者の方が躓くであろうポイントを記事にしてみました!