Backtesting到底要怎麽用呢?这边我们会一步一步向大家介绍,
最简单的方式就是直接实做一个策略来和大家讲解里面的细节。
那我们就先从实做一条均线(季线60MA)做进出场依据的策略开始吧,把策略取名为OneMA。
from backtesting import Backtest, Strategy
from backtesting.lib import crossover
from backtesting.test import SMA
import talib
class OneMA(Strategy):
n1 = 60 #预设的均线参数
def init(self): #初始化会用到的参数和指标,告知要如何计算
self.sma1 = self.I(SMA, self.data.Close, self.n1)
def next(self): #回测的时候每一根K棒出现什麽状况要触发进出场
#如果收盘价>sma1(也就是60ma),而且目前没有多单部位
if (self.data.Close > self.sma1) and (not self.position.is_long) :
self.buy()#做多
#如果收盘价<sma1(也就是60ma)
elif (self.data.Close < self.sma1):
self.position.close()#部位出场
#如果要做空就用self.sell()
策略搞定之後就要来用Backtest回测罗!
#输入回测的条件,df是上一篇台积电日K资料,OneMA是写好的策略,初始资金10000,交易成本0.2%
bt = Backtest(df, OneMA, cash=10000, commission=0.002)
#将跑完回测得到的数据放到stats
stats = bt.run()
stats
从下面的回测结果可以发现:
资料:台积电2020-2021/9/22
策略:「高於季线做多,跌破出场」
绩效有超过50%,但却比买进并持有的绩效还差!
这段期间的Sharpe Ratio更是低到只有0.23!
胜率也只有不到3成的27.7%!
Out:
---------------------------------------------
Start 2020-01-02 00:00:00
End 2021-09-22 00:00:00
Duration 629 days 00:00:00
Exposure [%] 58.028617
Equity Final [$] 15061.227055
Equity Peak [$] 21692.629027
Return [%] 50.612271
Buy & Hold Return [%] 72.861357
Max. Drawdown [%] -30.56984
Avg. Drawdown [%] -4.895715
Max. Drawdown Duration 244 days 00:00:00
Avg. Drawdown Duration 30 days 00:00:00
# Trades 18
Win Rate [%] 27.777778
Best Trade [%] 47.195966
Worst Trade [%] -3.02392
Avg. Trade [%] 3.034155
Max. Trade Duration 162 days 00:00:00
Avg. Trade Duration 21 days 00:00:00
Expectancy [%] 5.630253
SQN 0.84756
Sharpe Ratio 0.231967
Sortino Ratio 3.252764
Calmar Ratio 0.099253
_strategy OneMA
接着我们用下面这行code就能把图画出来罗!
bt.plot(superimpose = False)
这张图配色舒服,互动体验也很好,也可以客制化调整只秀出你想看到的数据,赶快来玩玩看吧!
从回测资料看来这个策略还有很大的改善空间,那要怎麽做策略的最佳化呢?
请期待我们下一篇的文章喔!
>>: 【Day 30】JavaScript Async/Await
使用 MySQLi MySQLi 全称 MySQL Improved extension, 算是 M...
设计大纲 在上一篇设计「Reviews」这个区块时,有提到切版时可能会有「切不出来」的情况发生,所以...
大家好! 今天要实作的是表单的输入提示。 我们进入今天的主题吧! 程序码 const input =...
前言 今天要继续 user_bp,今天会把验证的部分处理掉。 /register 理论上我们现在应该...
在客体机刚建立的初期,也许我们会将磁碟的容量配置的少一些,若之後使用量增加後需要更大的磁碟空间,在...