order_target
order_targetは,orderと同様に,銘柄と株数を指定する注文関数ですが,このときの株数とはポートフォリオに保有したい株数という意味になります.もし既に指定した分だけの株数を持っている場合は,新たに買い増したり売り増したりすることはありません.
アルゴリズム例
(オーダー方法以外は,#Quantopian Algorithm で order - Qiitaにコメントで説明していますのでご参照下さい)
def initialize(context):
context.security = sid(24)
schedule_function(rebalance,
date_rule=date_rules.every_day(),
time_rule=time_rules.market_close(minutes = 1))
def rebalance(context, data):
price_history = data.history(
context.security,
fields='price',
bar_count=5,
frequency='1d'
)
average_price = price_history.mean()
current_price = data.current(context.security, 'price')
if data.can_trade(context.security):
if current_price > (1.01 * average_price):
# 成り行きでAAPLを100株買う.しかし,既に持っていたら買わない.
order_target(context.security, 100)
log.info("Buying %s" % (context.security.symbol))
elif current_price < average_price:
order_target(context.security, 0)
log.info("Selling %s" % (context.security.symbol))
record(current_price=current_price, average_price=average_price)
メモ
上記を full backtest
してログを確認すると,例えば2017/05/09〜13までは条件(current_price > (1.01 * average_price)
)に当てはまるので,AAPLをロング注文していますが,Transaction Detailを見ると分かるように,2017/05/09しか取引していません.
Log の画像
注文する前にポジション確認しなくてもほしい株数だけ保有してくれるというのは,とてもベンリですね.
次回は,order_target_valueです.
他のオーダー方法
#Quantopian Algorithm で order
#Quantopian Algorithm で order_value
#Quantopian Algorithm で order_percent
#Quantopian Algorithm で order_target_value