您當前的位置:首頁 > 舞蹈

量化投資學習筆記79——實現量化交易經典策略:雙均線策略

作者:由 牙醫小趙 發表于 舞蹈時間:2020-07-22

搜尋了一下,主要實現雙均線策略,布林帶策略,海龜交易法,多因子選股,網格交易法這幾種策略。

首先看雙均線策略,參考這兩篇:

http://www。

snailtoday。com/archives

/18598

https://

zhuanlan。zhihu。com/p/43

317574

由短週期均線自下方向上穿越長週期的均線,則形成“金叉”,反之為“死叉”。雙均線金叉的時候,表明該股票很強勢,反之很弱勢,我們就在強勢的時候買,弱勢的時候賣。

# coding:utf-8

# 雙均線策略實現

import

backtrader

as

bt

import

backtest

import

math

# 雙均線策略類

class

SmaCross

bt

Strategy

):

params

=

dict

pfast

=

5

pslow

=

30

def

log

self

txt

dt

=

None

):

dt

=

dt

or

self

datas

0

datetime

date

0

print

%s

%s

%

dt

isoformat

(),

txt

))

def

__init__

self

):

sma1

=

bt

ind

SMA

period

=

self

p

pfast

sma2

=

bt

ind

SMA

period

=

self

p

pslow

self

crossover

=

bt

ind

CrossOver

sma1

sma2

self

dataclose

=

self

datas

0

close

self

order

=

None

def

next

self

):

if

not

self

position

if

self

crossover

>

0

cash

=

self

broker

get_cash

()

stock

=

math

ceil

cash

/

self

dataclose

/

100

*

100

-

100

print

“數量”

stock

self

order

=

self

buy

size

=

stock

price

=

self

datas

0

close

self

log

“買入”

elif

self

crossover

<

0

self

order

=

self

close

()

self

log

“賣出”

if

__name__

==

“__main__”

start

=

“2018-01-01”

end

=

“2020-07-05”

name

=

“300etf”

code

=

“510300”

backtest

=

backtest

BackTest

SmaCross

start

end

code

name

10000

backtest

run

()

backtest

output

()

期末資金

8760。36

夏普比例

-

0。2841412997849817

年化收益率

OrderedDict

([(

2018

-

0。22430925900000043

),

2019

0。19074554997170012

),

2020

-

0。0515497175750389

)])

最大回撤

23。20

最大回撤週期292

總收益率

-

0。13

量化投資學習筆記79——實現量化交易經典策略:雙均線策略

表現不好,是虧的。一開始沒注意,預設買入數量是1股,要自己計算後設定買入數量。

再修改一下backtest類,將回測結果資料儲存到一個Series裡,方便不同策略比較。

# 計算勝率資訊

def _winInfo(self):

trade_info = self。__results[0]。analyzers。TA。get_analysis()

total_trade_num = trade_info[“total”][“total”]

win_num = trade_info[“won”][“total”]

lost_num = trade_info[“lost”][“total”]

self。__backtestResult[“交易次數”] = total_trade_num

self。__backtestResult[“勝率”] = win_num/total_trade_num

self。__backtestResult[“敗率”] = lost_num/total_trade_num

# 計算並儲存回測結果指標

def _Result(self):

self。__backtestResult[“賬戶總額”] = self。getValue()

self。__backtestResult[“總收益率”] = self。__results[0]。analyzers。RE。get_analysis()[“rtot”]

self。__backtestResult[“年化收益率”] = self。__results[0]。analyzers。RE。get_analysis()[“rnorm”]

self。__backtestResult[“夏普比率”] = self。__results[0]。analyzers。sharpe。get_analysis()[“sharperatio”]

self。__backtestResult[“最大回撤”] = self。__results[0]。analyzers。DD。get_analysis()。max。drawdown

self。__backtestResult[“最大回撤期間”] = self。__results[0]。analyzers。DD。get_analysis()。max。len

# 計算勝率資訊

self。_winInfo()

# 獲取回測指標

def getResult(self):

return self。__backtestResult

量化投資學習筆記79——實現量化交易經典策略:雙均線策略

這個策略並不咋樣啊。

另外backtrader貌似沒有直接計算α、β、資訊比例等指標的方法,自己實現吧。等下次吧。

程式碼地址:

https://

github。com/zwdnet/MyQua

nt/tree/master/47

我發文章的三個地方,歡迎大家在朋友圈等地方分享,歡迎點“在看”。

我的個人部落格地址:https://zwdnet。github。io

我的知乎文章地址:

https://www。

zhihu。com/people/zhao-y

ou-min/posts

我的微信個人訂閱號:趙瑜敏的口腔醫學學習園地

標簽: self  __  backtestResult  trade  total