set_max_order_size 函數介紹¶
zipline.api.set_max_order_size(asset=None, max_shares=None, max_notional=None, on_error='fail')
- 功能:限制單筆訂單的下單股數與金額
- 參數
asset
(Asset, optional): 要限制的標的,None 則對所有標的生效。max_shares
(int, optional): 單筆最多下單股數。max_notional
(float, optional): 單筆最多下單金額(下單數 × 當日收盤價)。-
on_error
(str, optional): 'fail'(中止)或 'log'(記錄),預設 'fail'。 -
注意
- 檢查的是下單量與當日收盤價相乘的結果,實際成交價導致金額超出不會觸發錯誤。
-
on_error='log'
時超限僅記錄訊息,訂單仍照常執行。 -
補充說明:
max_shares
是以下單時股數為準。max_notional
計算方法為下單時的股數 * 下單當天收盤價,所以成交時的股數和金額可能還是會超過set_max_order_size的限制,細節在下面的範例說明。
範例¶
在以下這個範例,我們限制 1101 的 max_shares = 1000,且限制 2330 的 max_shares = 2000 、max_notional = 481000。
def initialize(context):
...
set_max_order_size(asset= symbol('1101'), max_shares=1000, on_error='log')
set_max_order_size(asset= symbol('2330'), max_shares=2000, max_notional=481000, on_error='log')
...
在7/25 long 1000股的 1101 股票及 2000 股的 2330 股票。
def handle_data(context, data):
if context.i == 1: # 2018-07-25
order(symbol('1101'), 1000)
order(symbol('2330'), 2000)
在8/16 long 2005 股的 2330 股票。
ef initialize(context):
context.i = 0
set_max_order_size(asset= symbol('1101'), max_shares=1000, on_error='log')
set_max_order_size(asset= symbol('2330'), max_shares=2000, max_notional=481000, on_error='log')
set_slippage(slippage.FixedSlippage(spread = 0.0))
set_commission(commission.PerDollar(cost=0.01))
set_benchmark(symbol('IR0001'))
def handle_data(context, data):
if context.i == 1: # 2018-07-25
order(symbol('1101'), 1000)
order(symbol('2330'), 2000)
if context.i == 17: # 2018-08-16
order(symbol('2330'), 2005)
context.i += 1
commission_cost = 0.001425
capital_base = 1e6
performance = run_algorithm(start=start_dt,
end=end_dt,
initialize=initialize,
handle_data=handle_data,
capital_base=capital_base,
trading_calendar=get_calendar(calendar_name),
bundle=bundle_name)
closing_price = tejapi.fastget('TWN/APIPRCD',
coid=['1101','2330'],
opts={'columns':['mdate','coid','close_d']},
mdate={'gte':start_dt,'lte':end_dt },
paginate=True)
positions, transactions, orders = get_transaction_detail(performance)