量化交易入门笔记-策略常用对象
在股票量化策略中,還會(huì)用到一些常用的對(duì)象,如 Order 對(duì)象、全局對(duì)象 g 、Trade 對(duì)象等。下面詳細(xì)講解一下常用的對(duì)象
Order 對(duì)象
Order 對(duì)象常用的屬性如下:
- amount : 下單數(shù)量,不管是買還是賣,都是正數(shù)
- filled : 已經(jīng)成交的股票數(shù)量,正數(shù)
- security : 股票代碼
- order_id : 訂單 id
- price : 平均成交價(jià)格,已經(jīng)成交的股票的平均成交價(jià)格(一個(gè)訂單可能分多次成交)
- avg_cost : 賣出時(shí)表示下單賣出前的此股票的持倉(cāng)成本,用來(lái)計(jì)算此次賣出的收益。買入時(shí)表示此次買入的均價(jià)(等于 price )
- side : 用來(lái)指定開多單,還是空單。如果其值是 long 代表開多單,如果其值是 short 代表開空單
- action : 用來(lái)指定是開倉(cāng),還是平倉(cāng)。如果其值是 open 代表開倉(cāng),如果其值是 close 代表平倉(cāng)
- add_time : 訂單添加時(shí)間
全局對(duì)象 g
全局對(duì)象 g,用來(lái)存儲(chǔ)用戶的種類可被 pickle.dumps 函數(shù)序列化的全局?jǐn)?shù)據(jù)
在模擬盤中,如果中途進(jìn)程中斷,我們會(huì)使用 pickle.dumps 序列化所有的 g 下面的變量?jī)?nèi)容,保存到磁盤中,再啟動(dòng)的時(shí)候模擬盤就不會(huì)有任何數(shù)據(jù)影響。如果沒有用 g 聲明,會(huì)出現(xiàn)模擬盤重啟后,變量數(shù)據(jù)丟失的問題
如果不想 g 中某個(gè)變量被序列化,可以讓變量以 "_"開頭,這樣,這個(gè)變量在序列化會(huì)被忽略
全局對(duì)象 g 的實(shí)例代碼如下:
def initialize(context):g.secruity = "000001.XSHG"g.count = 1g.flag = 0def process_initialize(context):# 保存不能被序列化的對(duì)象,進(jìn)程每次重啟都初始化g._q = query(valuation)def handle_data(context, data):log.info(g.security)log.info(g.count)log.info(g.flag)Trade 對(duì)象
Trade 對(duì)象用于記錄訂單的一次交易。但需要注意的是,一個(gè)訂單可能分多次交易。Trade 對(duì)象的常用屬性如下:
- time : 交易時(shí)間
- amount : 交易數(shù)量
- price : 交易價(jià)格
- trade_id : 交易記錄 id
- order_id : 對(duì)應(yīng)的訂單 id
tick 對(duì)象
tick 中的信息是在 tikc 事件發(fā)生時(shí),盤面的一個(gè)快照。tikc 對(duì)象的家長(zhǎng)屬性如下:
- code : 標(biāo)的代碼
- datetime : tick 發(fā)生的時(shí)間
- current : 最新價(jià)
- high : 最高價(jià)
- low : 最低價(jià)
- volume : 截至當(dāng)前時(shí)刻的成交量
- amount : 截至當(dāng)前時(shí)刻的成交額
- position : 截至當(dāng)前時(shí)刻的持倉(cāng)量,只適用于期貨 tick 對(duì)象
- a1_v ~ a5_v : 賣一量到賣五量,對(duì)于期貨,只有賣一量
- a1_p ~ a5_p : 賣一價(jià)到賣五價(jià),對(duì)于期貨,只有賣一價(jià)
- b1_v ~ b5_v : 買一量到買五量,對(duì)于期貨,只有買一量
- b1_p ~ b5_p : 買一價(jià)到買五價(jià),對(duì)于期貨,只有買一價(jià)
Context 對(duì)象
Context 對(duì)象,即量化策略加油對(duì)象,其常用屬性如下:
- subportfolios : 當(dāng)前單個(gè)操作倉(cāng)位的資金和標(biāo)的的信息
- portfolio : 賬戶信息,即 subportfolios 的匯總信息
- cruuent_dt : 當(dāng)前單位時(shí)間的開始時(shí)間。如果是按天回測(cè),那么開始時(shí)間是 hour = 9, minute = 30, second = microsecond = 0; 如果是按分鐘回測(cè),那么開始時(shí)間是 second = microsecond = 0
- previous_date : 前一個(gè)交易日
- universe : 查詢 set_universe() 設(shè)定的股票池,例如:[“000001.XSHG”, “600000.XSHG”]
- run_params : 表示此次運(yùn)行的參數(shù),有如下屬性:
- start_date : 回測(cè)/模擬開始日期
- end_date : 回測(cè)/模擬結(jié)束日期
- type : 運(yùn)行方式,如果其值是 “simple_backtest”,表示回測(cè)是通過單擊“編譯運(yùn)行”運(yùn)行;如果其值是"full_backtest"表示回測(cè)是通過單擊“運(yùn)行回測(cè)”運(yùn)行;如果其值是"sim_trade",表示模擬交易
- frequency : 運(yùn)行頻率,只能是 “day”/ “minute"或"tick”
另外,此對(duì)象也做了和 g 一樣的處理:
可以添加自己的變量,每次進(jìn)程關(guān)閉時(shí)持久保存,進(jìn)程重啟時(shí)恢復(fù)
以"_"開頭的變量不會(huì)被持久保存
如果添加的變量與系統(tǒng)的沖突,將覆蓋掉系統(tǒng)變量,如果想恢復(fù)系統(tǒng)變量,就要?jiǎng)h除自己的變量
實(shí)例代碼:
def handle_data(context, data):# 執(zhí)行下面的語(yǔ)句之后,context.portfolio 的整數(shù) 1context.portfolio = 1log.info(context.portfolio)# 要恢復(fù)系統(tǒng)的變量,只需要使用下面的語(yǔ)句即可del context.portfolio# 此時(shí),context.portfolio 將變成賬戶信息log.info(context.portfolio.portfolio_value)以后可能會(huì)向 context 中添加新的變量來(lái)支持量多功能,為了減少麻煩,這里建議大家使用 g
Context 對(duì)象的實(shí)例代碼如下:
def handle_data(context, data):#獲得當(dāng)前回測(cè)相關(guān)時(shí)間year = context.current_dt.yearmonth = context.current_dt.monthday = context.current_dt.dayhour = context.current_dt.hourminute = context.current_dt.minutesecond = context.current_dt.second#得到"年-月-日"格式date = context.current_dt.strftime("%Y-%m-%d")#得到周幾weekday = context.current_dt.isoweekday()# 獲取賬戶的持倉(cāng)價(jià)值positions_value = context.portfolio.positions_value# 獲取倉(cāng)位subportfolios[0]的可用資金available_cash = context.subportfolios[0].available_cash# 獲取subportfolios[0]中多頭倉(cāng)位的security的持倉(cāng)成本hold_cost = context.subportfolios[0].long_positions[security].hold_costPosition 對(duì)象
Position 對(duì)象是特有的某個(gè)標(biāo)的的信息,其常用屬性如下:
- security : 標(biāo)的的代碼
- price : 最新行情價(jià)格
- avg_cost : 開創(chuàng)均價(jià),買入標(biāo)的的加權(quán)平均價(jià)
- hold_cost : 持倉(cāng)成本,針對(duì)期貨有效
- init_time : 建倉(cāng)時(shí)間,格式為 datetime.datetime
- total_amount : 總倉(cāng)位,但不包括掛單凍結(jié)倉(cāng)位
- closeable_amount : 可賣出的倉(cāng)位
- today_amount : 今天開的倉(cāng)位
- locked_amount : 掛單凍結(jié)倉(cāng)位
- value : 標(biāo)的的價(jià)值,計(jì)算方法是 :price * total_amount * multiplier, 其中股票、基金的 multiplier 為1,期貨為相應(yīng)的合約乘數(shù)
- side : 用來(lái)指定開多單,還是空單。如果其值是 long 代表開多單,如果其值是 short 代表開空單
- pindex : 倉(cāng)位索引
SubPortfolio 對(duì)象
SubPortfolio 對(duì)象是某個(gè)倉(cāng)位的資金和標(biāo)的信息,其常用屬性如下:
- inount_cash : 累計(jì)的出入金,比如初始資金為1000元,后來(lái)轉(zhuǎn)移出去100元,則這值是 1000-100=900元
- available_cash : 可用資金,可用來(lái)購(gòu)買證券的資金
- transferable_cash : 可取資金,即可以提現(xiàn)的資金,不包括今日賣出的證券所得資金
- locked_cash : 掛單鎖住資金
- type : 賬戶所屬類型
- long_positions : 多單倉(cāng)位
- short_positions: 空單倉(cāng)位
- positions_value : 持倉(cāng)價(jià)值,股票基金才有持倉(cāng)價(jià)值,期貨為0
- total_value : 總資產(chǎn),包括現(xiàn)金,保證金,倉(cāng)位的總價(jià)值,可用來(lái)計(jì)算收益
- toatl_liability : 總負(fù)債,等于融資負(fù)債、融券負(fù)債、利息總負(fù)債的總和
- net_value : 凈資產(chǎn),等于總資產(chǎn)減去總負(fù)債
- cash_liability : 融資負(fù)債
- sec_liability : 融券負(fù)債
- interest : 利息總負(fù)債
- maintenance_margin_rate : 維持擔(dān)保比例
- available_margin : 融資融券可用保證金
- margin : 保證金,股票、基金保證金都為100%;融資融券保證金為0;期貨保證金會(huì)實(shí)時(shí)更新,總是等于當(dāng)前期貨價(jià)值 * 保證金比率,當(dāng)保證金不足時(shí),強(qiáng)制平倉(cāng)。平倉(cāng)順序是:虧損多的(相對(duì)于開倉(cāng)均價(jià))平倉(cāng)
Portfolio 對(duì)象
Portfolio 對(duì)象是所有標(biāo)的的操作倉(cāng)位的信息匯總,其常用屬性如下
- inout_cash : 累計(jì)出入金,比如初始資金為1000元,后來(lái)轉(zhuǎn)移出去100元,則這個(gè)值是1000-100=900
- available_cash : 可用資金,可用來(lái)購(gòu)買證券的資金
- transferable_cash : 可取資金,即可以提現(xiàn)的資金,不包括今日賣出證券所得資金
- locked_cash : 掛單鎖住資金
- margin : 保證金,股票、基金保證金都為100%
- positions : 等同于 long_positions
- long_positions : 多單的倉(cāng)位
- short_positions: 空間的倉(cāng)位
- total_value : 總的權(quán)益,包括現(xiàn)金,保證金,倉(cāng)位的總價(jià)值,可用來(lái)計(jì)算的收益
- returns : 總權(quán)益的累計(jì)收益
- starting_cash : 初始資金
- positions_value : 持倉(cāng)價(jià)值,股票基金才有持倉(cāng)價(jià)值,期貨為0
- locked_cash_by_purchase : 基金申購(gòu)未完成所凍結(jié)的金額
- locked_cash_by_redeem : 基金贖回未到賬的金額
- locked_amount_by_redeem : 基金贖回時(shí),凍結(jié)的份額
SecurityUnitData 對(duì)象
SecurityUintData 對(duì)象是一個(gè)單位時(shí)間內(nèi)的股票的數(shù)據(jù),其常用屬性如下:
- security : 股票代碼。例如"000001.XSHG"
- returns : 股票在這個(gè)單位時(shí)間的相對(duì)收益比例
- open : 時(shí)間段開始時(shí)價(jià)格
- close : 時(shí)間段結(jié)束時(shí)價(jià)格
- low : 最低價(jià)
- high : 最高價(jià)
- volume : 成交的股票的數(shù)量
- factor : 前復(fù)權(quán)因子。利用前復(fù)權(quán)因子可以算出原始價(jià)格,方法是價(jià)格除以 factor ,即原始價(jià)格 = close / factor
- high_limit : 漲停價(jià)
- low_limit : 跌停價(jià)
- avg : 這段時(shí)間的平均價(jià)
注:本文章為個(gè)人學(xué)習(xí)筆記,參考了一些書籍與官方教程,不作任何商業(yè)用途!
總結(jié)
以上是生活随笔為你收集整理的量化交易入门笔记-策略常用对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有没有一款手机桌面便签软件?真正好用的便
- 下一篇: 电脑桌面便签软件怎么通过便签快捷键快速云