#初めに
QunatXで注文コードを書くとき、いくつかのorder関数の中でどちらを使うのかに困ったことがあったので、今回は各order関数の意味や使い方法について簡単に紹介したいと思います。
(詳細内容はアルゴリズム開発入門の「APIリファレンス Security」に書いてあります)
#6種order関数の分類
QuantXで使われたorder関数は注文方法x注文量を組み合わせて、下記六つになります。
注文方法\注文量 | 株単位 | 金額 | ポートフォリオ総評価額比率 |
---|---|---|---|
order系 | order() | order_value() | order_percent() |
order_target系 | order_target() | order_target_value() | order_target_percent() |
(ポートフォリオ総評価額)
=現金+保有ポジション評価額
=現金+[各株数量*現在株価]
では、これからorder系とorder_target系二種類の注文方法に分けて各order関数を説明します。
#【order系】指定単位ごと、一個一個注文
order系の関数を使えば、買いシグナルが続いて出てくる場合に連続的に注文することができます。一方、売買制限がないため(資金が足りないまで)、ポートフォリオで各銘柄の比例を制御できません。
(売買例)
株AのSec.unit()=100, 1株=2,000円。現ポートフォリオ総評価額=10,000,000円
-
order(amount, comment):株の数量(Sec.unit()*倍数)を指定して注文を行います。
Sec.unit(): 最低売買株単位(主に100だが、非100の場合もあるので要注意) -
買い注文:order(sec.unit()*10) → 100*10=1000株を買う
-
売り注文:order(sec.unit()*-10) → 100*(-10)=1000株を売る
-
order_value(amount, comment):金額を指定して注文を行ないます。
-
買い注文:買い注文:order_value(100000) → <=100,000円 で株を買う
-
売り注文:order_value(-100000) → >=100,000円 で株を売る
-
order_percent(amount, comment):現在のポートフォリオに比した割合で注文を行ないます。
-
買い注文:order_percent(0.05) → <=10,000,000*0.05 = 500,000円 で株を買う
-
売り注文:order_percent(-0.05) → >=10,000,0000.05 = 500,000円 で株を売る
() 初期資金量が少なくて、割合も低く設定する場合、注文金額は銘柄の最低限注文額を下回って注文できなくなる可能性がある。
#【order_target系】総所持量を指定し、注文を一回でしまい
各株の量を控えることで、ポートフォリオの組成をある程度に把握できますが、一回の注文は最高制限の量/金額で注文しましたので、連続的に注文することはほぼできません。
(二回目の売買シグナルが出ても、所持量はもうマックスになったため、再び注文できない)
(売買例)
株Bの1株=2,000円。現ポートフォリオ総評価額=10,000,000円
-
order_target(amount, comment):
-
買い注文:order_target(300) → 300株を買い
-
売り注文:order_target(0) → 株所持量を0にする = 全部の株を売る(手仕舞い)
-
order_target_value(amount, comment):この銘柄の総額を指定して注文を行ないます。
-
買い注文:order_target_value(15000) → 保有ポジション評価額が<=15,000円まで株を買い
-
売り注文:order_target_value(0) → 保有ポジション評価額が=0まで株を売る = 全部の株を売る(手仕舞い)
-
order_target_percenet(amount, comment):この銘柄の総保有額が総資産評価額(現金+保有ポジション評価額)に対して指定の割合となるように注文を行ないます。 amountには割合(例:5%なら0.05)を指定します。
-
買い注文:order_target_percent(0.07) → **(銘柄の保有ポジション評価額/ポートフォリオ総評価額)**の割合が<=0.07まで株を買い
-
売り注文:order_target_percent(0) → **(銘柄の保有ポジション評価額/ポートフォリオ総評価額)**の割合が=0まで株を売る = 全部の株を売る(手仕舞い)
#結論
order系もorder_target系も長所と短所があって、連続的に注文できる一方指定したポートフォリオの割合に至ると注文停止、という両方の長所を持つ関数は今なさそうです。
自分で条件式でorder関数の使用を切り替えるか、またはアルゴリズムを一回で一番いい時点で注文できる程度まで改善するか、今考える課題です。