portfolio對(duì)象的持倉(cāng)變化問題
作者:金字塔 來源:cxh99.com 發(fā)布時(shí)間:2020年12月28日
-
咨詢內(nèi)容:
def handle_bar(context):??
? ??print('新的一天開始了')??? ? portfolio = get_portfolio(context.s1,0)#讀取portfolio? ? print('當(dāng)前空頭持倉(cāng)為%d'%portfolio.sell_quantity)? ? print('當(dāng)前多頭持倉(cāng)為%d'%portfolio.buy_quantity)? ? if close[-1]>sg[-1] and close[-2]<=sg[-2]:? ? ? ? print('符合平空開多')? ? ? ? if portfolio.sell_quantity>0:? ? ? ? ? ? print('有空頭持倉(cāng),平空')? ? ? ? ? ? buy_close(context.s1,"market", volume=portfolio.sell_quantity,serial_id = 1)#空頭平倉(cāng)? ? ? ? ? ? portfolio = get_portfolio(context.s1,0)#平空之后讀portfolio? ? ? ? ? ? print('買平后空頭持倉(cāng)為%d'%portfolio.sell_quantity)#輸出顯示空頭持倉(cāng)已經(jīng)變?yōu)?? ? ? ? if portfolio.buy_quantity == 0:? ? print('無(wú)多頭持倉(cāng),開多')?? ? ? ? ? ? buy_open(context.s1, "market", volume=1,serial_id = 2)#多頭開倉(cāng)? ? ? ? ? ? portfolio = get_portfolio(context.s1,0)#開多后讀portfolio? ? ? ? ? ? print('多開后多頭持倉(cāng)為%d'%portfolio.buy_quantity)#輸出顯示多頭持倉(cāng)依然為零,不應(yīng)該為1嗎?? ?? ? if close[-1]<xg[-1] and close[-2]>=xg[-2]:? ? ? ? if portfolio.buy_quantity>0:? ? ? ? ? ? print('有多頭持倉(cāng),平多')? ? ? ? ? ? sell_close(context.s1,"market", volume=portfolio.buy_quantity,serial_id = 3)? ? ? ? ? ? portfolio = get_portfolio(context.s1,0)? ? ? ? ? ? print('平多后多頭持倉(cāng)為%d'%portfolio.buy_quantity)? ? ? ? if portfolio.sell_quantity == 0:? ? ? ? ? ? print('無(wú)空頭持倉(cāng),開空')? ?? ? ? ? ? ? sell_open(context.s1, "market", volume=1,serial_id = 4)? ? ? ? ? ? portfolio = get_portfolio(context.s1,0)? ? ? ? ? ? print('開空后空頭持倉(cāng)為%d'%portfolio.sell_quantity)? ? print('當(dāng)天結(jié)束了')
def after_trading(context):? ? portfolio = get_portfolio(context.s1,0)? ? print('收盤空頭%d'%portfolio.sell_quantity)? ? print('收盤多頭%d'%portfolio.buy_quantity)#盤后顯示多頭持倉(cāng)為1? ? pass
上文是平倉(cāng)反手代碼片段,在handle_bar(context)中,平倉(cāng)指令發(fā)出,持倉(cāng)馬上歸零,但是反手開倉(cāng)指令發(fā)出后,持倉(cāng)不能正確顯示,依然為零,必須要在after_trading(context)中,才能正確顯示為1.請(qǐng)教這是機(jī)制問題,還是我的代碼有問題?
?
?來源: CXH99.COM
-
金字塔客服:
你是回測(cè)還是實(shí)盤運(yùn)行?回測(cè)時(shí)候下單后不是立即成交的,如果你handle_bar只執(zhí)行了一次,那么那一次下單后持倉(cāng)是不會(huì)變化的
?
-
用戶回復(fù):
無(wú)論是回測(cè)還是實(shí)盤都不可能下單后立馬就能在持倉(cāng)中體現(xiàn)的。
單子總有到交易所撮合交易的過程
[此貼子已經(jīng)被作者于2020/11/15 19:21:57編輯過]
?
-
網(wǎng)友回復(fù):
我是日線級(jí)別回測(cè),handle_bar每天執(zhí)行一次。我的測(cè)試結(jié)果,如果是平倉(cāng)語(yǔ)句,持倉(cāng)馬上就會(huì)發(fā)生變化,這個(gè)似乎是虛擬持倉(cāng)變化,跟是否成交沒關(guān)系。但是對(duì)于開倉(cāng)語(yǔ)句,在之后handle_bar中任何位置GET_PORTFOLIO,都不會(huì)有持倉(cāng)變化。只有在當(dāng)日AFTER_TRADING方法中
GET_PORTFOLIO,持倉(cāng)才會(huì)會(huì)發(fā)生變化。
所以問題一,
PORTFOLIO對(duì)象中的持倉(cāng)是虛擬持倉(cāng),還是實(shí)際持倉(cāng),回測(cè)和實(shí)盤有何區(qū)別?
問題二:無(wú)論是虛擬持倉(cāng)還是實(shí)際持倉(cāng),開倉(cāng)和平倉(cāng)語(yǔ)句之后的持倉(cāng)變化時(shí)機(jī)是不同的,如上文所述,這個(gè)我反復(fù)測(cè)試過,難以理解。
?
-
網(wǎng)友回復(fù):
你日線執(zhí)行一次自然會(huì)有這個(gè)問題,因?yàn)槟闳站€程序相當(dāng)于只執(zhí)行一次那么在執(zhí)行下單動(dòng)作后,馬上輸出持倉(cāng)這個(gè)時(shí)候持倉(cāng)是沒有變化的。這個(gè)如果實(shí)盤你應(yīng)該能理解回測(cè)的話也一樣,不同于圖表策略那種回測(cè),python這個(gè)回測(cè)他在下單瞬間是沒有持倉(cāng)的
你如果實(shí)盤的話,用固定間隔一直去執(zhí)行程序,那么可能第一次執(zhí)行下單,等后面幾秒后執(zhí)行時(shí)候持倉(cāng)就會(huì)發(fā)生變化了