量化交易入門筆記-策略回測與評估

首先冯丙,編寫一個(gè)簡單的“雙均線量化策略”

代碼如下:

def initialize(context):
    """雙均線量化策略的初始化函數(shù)"""
    
    # 定義一個(gè)局部變量,保存要操作的股票
    g.security = '000002.XSHE'  # 萬科A
    # 設(shè)定滬深300作為基準(zhǔn)
    set_benchmark('000300.XSHG')
    # 開啟動(dòng)態(tài)復(fù)權(quán)遭京,使用真實(shí)價(jià)格交易
    set_option('use_real_price', True)
    # 設(shè)定成交量比例
    set_option('order_volume_ratio', 1)
    # 股票類交易手續(xù)費(fèi):買入時(shí)傭金的萬分之三胃惜,賣出時(shí)ew傭金的萬分之三加
    # 千分之一的印花稅泞莉,每筆交易傭金最低扣5元錢
    set_order_cost(OrderCost(open_tax=0,
        close_tax=0.001,
        open_commission=0.0003,
        close_commission=0.0003,
        close_today_commission=0, 
        min_commission=5), type='stock')
    # 運(yùn)行函數(shù)
    run_daily(trade, 'every_bar')
    
    
def trade(context):
    """雙均線量化策略的交易程序函數(shù)"""
    
    security = g.security
    # 設(shè)定均線
    n1 = 5
    n2 = 10
    # 獲取股票的收盤價(jià)
    close_data = attribute_history(
        security=security, 
        count=n2+2, 
        unit='1d', 
        fields=['close'], 
        df=True)
    # 取得過去 ma_n1 天的平均價(jià)格
    ma_n1 = close_data['close'][-n1:].mean()
    # 取得過去 ma_n2 天的平均價(jià)格
    ma_n2 = close_data['close'][-n2:].mean()
    # 取得當(dāng)前的現(xiàn)金
    cash = context.portfolio.cash
    # 如果當(dāng)前有余額,并且 n1 日無線大于 n2 日無線
    if ma_n1 > ma_n2:
        # 用所有 cash 買入股票
        order_value(security, cash)
        # 記錄這次買入
        log.info('Buying %s' % (security))
    # 如果 n1 日無線小于 n2 日無線船殉,并且目前有頭寸    
    elif ma_n1 < ma_n2 and context.portfolio.positions[security].closeable_amount > 0:
        # 全部賣出
        order_target(security, 0)
        # 記錄這次賣出
        log.info('Selling %s' % (security))
    # 繪制 n1 日均線價(jià)格
    record(ma_n1=ma_n1)
    # 繪制 ma_n2 日均線價(jià)格
    record(ma_n2=ma_n2)

然后設(shè)置回測的開始時(shí)間鲫趁、結(jié)束時(shí)間、回測資金和回測頻率利虫,點(diǎn)擊“運(yùn)行回測”

回測結(jié)果如下:

了解Bar的概念

一根完整的K線相當(dāng)于一個(gè)Bar挨厚,根據(jù)時(shí)間序列的不同,有分鐘Bar糠惫、小時(shí)Bar疫剃、日Bar等

當(dāng)選擇“每天”頻率時(shí),算法在每根日線Bar上都會(huì)運(yùn)行一次寞钥,即每天運(yùn)行一次

同理慌申,選擇“分釧”頻率時(shí),算法會(huì)在每根分鐘Bar上運(yùn)行一次理郑,即每分鐘運(yùn)行一次

了解量化策略的風(fēng)險(xiǎn)指標(biāo)

一個(gè)策略的好壞蹄溉,可以能過以下幾個(gè)指標(biāo)來判斷

風(fēng)險(xiǎn)指標(biāo)有利于投資者對策略進(jìn)行客觀的評價(jià)。需要注意的是您炉,無論是回測還是模擬柒爵,所有風(fēng)險(xiǎn)指標(biāo)都只會(huì)根據(jù)每天收盤后的收益計(jì)算并每天更新一次,并不會(huì)考慮盤中的收益情況

Alpha(阿爾法)

意義:

投資中面臨著系統(tǒng)性風(fēng)險(xiǎn)(即Beta)和非系統(tǒng)性風(fēng)險(xiǎn)(即Alpha)赚爵,Alpha是投資者獲得與市場波動(dòng)無關(guān)的回報(bào)棉胀。比如投資者獲得了15%的回報(bào),其基準(zhǔn)獲得了10%的回報(bào)冀膝,那么Alpha或者價(jià)值增值部分就是5%

公式:
Alpha = α = R_p - [R_f + β_p(R_m - R_f)]

  • Rp = 策略年化收益率
  • Rm = 基準(zhǔn)年化收益率
  • Rf = 無風(fēng)險(xiǎn)利率(默認(rèn)是0.04)
  • βp = 策略beta值

根據(jù)公式得出:當(dāng) α > 0 唁奢,策略相對于風(fēng)險(xiǎn),獲得了超額收益窝剖; α = 0麻掸,策略相對于風(fēng)險(xiǎn),獲得了適當(dāng)收益赐纱; α < 0脊奋,策略相對于風(fēng)險(xiǎn),獲得了較少收益

Beta(貝塔)

意義:

Beta表示投資的系統(tǒng)性風(fēng)險(xiǎn)疙描,反映了策略對大盤變化的敏感性诚隙。例如一個(gè)策略的Beta為1.5,則大盤漲1%時(shí)起胰,策略可能漲1.5%久又,反之亦然;如果一個(gè)策略的Beta為-1.5,說明大盤漲1%的時(shí)候籽孙,策略可能跌1.5%烈评,反之亦然

公式:
Beta = β_p = \frac{Cov(D_p,D_m)}{Var(D_m)}

  • Dp = 策略每日收益
  • Dm = 基準(zhǔn)每日收益
  • Cov(Dp,Dm) = 策略每日收益與基準(zhǔn)每日收益的協(xié)方差
  • Var(Dm) = 基準(zhǔn)每日收益的方差

當(dāng) β<0,投資組合和基準(zhǔn)的走向通常相反犯建,如空頭頭寸類讲冠。如果β=0,投資組合和基準(zhǔn)的走向沒有相關(guān)性适瓦,如固定收益類竿开。0<β<1,投資組合和基準(zhǔn)的走向相同,但是比基準(zhǔn)的移動(dòng)幅度更小玻熙。如果β=1否彩,投資組合和基準(zhǔn)的走向相同,并且和基準(zhǔn)的移動(dòng)同謀貼近嗦随。如果β>1列荔,投資組合和基準(zhǔn)的走向相同,但是比基準(zhǔn)的移動(dòng)幅度更大

Sharpe(夏普比率)

意義:

Sharpe表示每承受一單位總風(fēng)險(xiǎn)枚尼,會(huì)產(chǎn)生多少超額報(bào)酬贴浙,可以同時(shí)對策略的收益與風(fēng)險(xiǎn)進(jìn)行綜合考慮

公式:
Sharpe Ratio = \frac{R_p - R_f}{σ_p}

  • Rp = 策略年化收益率
  • Rf = 無風(fēng)險(xiǎn)利率(默認(rèn)值為0.04)
  • σp = 策略收益波動(dòng)率

Sortino(索提諾比率)

意義:

Sortino 表示每承擔(dān)一單位的下行風(fēng)險(xiǎn),將會(huì)獲得多少超額回報(bào)

公式:
Sortino Ratio = \frac{R_p - R_f}{σ_pd}

  • Rp = 策略年化收益率
  • Rf = 無風(fēng)險(xiǎn)利率(默認(rèn)值為0.04)
  • σpd = 策略下行波動(dòng)率

Information Ratio(信息比率)

意義:

Information Ratio 是用來衡量單位超額風(fēng)險(xiǎn)帶來的σp = 策略收益波動(dòng)率署恍。信息比率越大崎溃,說明該策略單位跟蹤誤差所獲得的超額收益越高,因此盯质,信息比率較大的策略的表現(xiàn)要優(yōu)于信息比率較低的基準(zhǔn)袁串。合理的投資目標(biāo)應(yīng)該是在承擔(dān)適度風(fēng)險(xiǎn)下,盡可能追求高信息比率

公式:
Information Ratio = \frac{R_p - R_m}{σ_t}

  • Rp = 策略年化收益率
  • Rm = 基準(zhǔn)年華收益率
  • σt = 策略與基準(zhǔn)每日收益差值的年化標(biāo)準(zhǔn)差

Volatility(策略波動(dòng)率)

意義:

公式:
Volatility = σ_p = \sqrt{\frac{250}{n-1} \sum_{i=1}^{n} (r_p-\overline{r_p})^2}

  • rp = 策略每日收益第
  • r- p = 策略每日收益的平均值 = lnΣi=lnrp
  • n = 策略執(zhí)行天數(shù)

Benchmark Volatility(基準(zhǔn)波動(dòng)率)

意義:

Benchmark Volatility 用來測量基準(zhǔn)的風(fēng)險(xiǎn)性呼巷,波動(dòng)越大代表基準(zhǔn)風(fēng)險(xiǎn)越高

公式:
Volatility = σ_m = \sqrt{\frac{250}{n-1} \sum_{i=1}^{n} (r_m -\overline{r_m})^2}

  • rm = 其次每日收益第
  • r- m = 基準(zhǔn)每日收益的平均值 = lnΣi=lnrm
  • n = 策略執(zhí)行天數(shù)

Max Drawdown(最大回撤)

意義:

Max Drawdown 描述策略可能出現(xiàn)最糟糕的情況囱修,最極端可能的虧損

公式:
Max Drawdown = Max(P_x - P_v)/P_x

  • Px, Pv = 策略某日股票和現(xiàn)金的總價(jià)值

注:本文章為個(gè)人學(xué)習(xí)筆記,參考了一些書籍與官方教程王悍,不作任何商業(yè)用途蔚袍!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市配名,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晋辆,老刑警劉巖渠脉,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓶佳,居然都是意外死亡芋膘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來为朋,“玉大人臂拓,你說我怎么就攤上這事∠按纾” “怎么了胶惰?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長霞溪。 經(jīng)常有香客問我孵滞,道長,這世上最難降的妖魔是什么鸯匹? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任坊饶,我火速辦了婚禮,結(jié)果婚禮上殴蓬,老公的妹妹穿的比我還像新娘匿级。我一直安慰自己,他們只是感情好染厅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布痘绎。 她就那樣靜靜地躺著,像睡著了一般糟秘。 火紅的嫁衣襯著肌膚如雪简逮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天尿赚,我揣著相機(jī)與錄音散庶,去河邊找鬼。 笑死凌净,一個(gè)胖子當(dāng)著我的面吹牛悲龟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冰寻,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼须教,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了斩芭?” 一聲冷哼從身側(cè)響起轻腺,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎划乖,沒想到半個(gè)月后贬养,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琴庵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年误算,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仰美。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡儿礼,死狀恐怖咖杂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚊夫,我是刑警寧澤诉字,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站这橙,受9級特大地震影響奏窑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屈扎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一埃唯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹰晨,春花似錦墨叛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至忍疾,卻和暖如春闯传,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卤妒。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工甥绿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人则披。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓共缕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親士复。 傳聞我的和親對象是個(gè)殘疾皇子图谷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容