前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pyalgotrade教程5--多标的策略

pyalgotrade教程5--多标的策略

作者头像
钱塘小甲子
发布2019-01-28 15:49:19
9120
发布2019-01-28 15:49:19
举报

        pyalgotrade相比于zipline而言,对于多个标的的投资,似乎是薄弱了一点,但也并不是不行呀。既然是多标的策略,那么肯定有多个csv的add,其实逻辑是很简单,就直接上demo吧,反正很好理解。

代码语言:javascript
复制
# coding=utf-8
from pyalgotrade import strategy
from pyalgotrade.barfeed.csvfeed import GenericBarFeed
from pyalgotrade.bar import Frequency
from pyalgotrade.stratanalyzer import returns
from pyalgotrade.stratanalyzer import sharpe
from pyalgotrade.utils import stats


class MyStrategy(strategy.BacktestingStrategy):
    def __init__(self, feed):
        super(MyStrategy, self).__init__(feed, 10000000)
        self.__position = None

    def onEnterOk(self, position):
        execInfo = position.getEntryOrder().getExecutionInfo()
        self.info("BUY at %.2f" % (execInfo.getPrice()))

    def onEnterCanceled(self, position):
        self.__position = None

    def onExitOk(self, position):
        execInfo = position.getExitOrder().getExecutionInfo()
        self.info("SELL at $%.2f" % (execInfo.getPrice()))
        self.__position = None

    def onExitCanceled(self, position):
        self.__position.exitMarket()

    def onBars(self, bars):
        # 1.我们弄一个简单的策略来假装一下
        day = bars.getDateTime().date().day
        if day == 5:
            self.__position = self.enterLong('a', 1, True)
        elif day == 10:
            self.__position = self.enterLong('b', 1, True)
        elif day == 15:
            self.__position = self.enterLong('c', 1, True)
        elif day == 20:
            self.__position = self.enterLong('d', 1, True)

# 2.读取csv文件.
feed = GenericBarFeed(Frequency.DAY, None, None)
feed.addBarsFromCSV("a", "a.csv")
feed.addBarsFromCSV("b", "b.csv")
feed.addBarsFromCSV("c", "c.csv")
feed.addBarsFromCSV("d", "d.csv")

myStrategy = MyStrategy(feed)

# 3.加入分析器
retAnalyzer = returns.Returns()
myStrategy.attachAnalyzer(retAnalyzer)
sharpeRatioAnalyzer = sharpe.SharpeRatio()
myStrategy.attachAnalyzer(sharpeRatioAnalyzer)

# 4.运行策略
myStrategy.run()

# 5.输出结果
print "Final portfolio value: $%.2f" % myStrategy.getResult()
print "Anual return: %.2f %%" % (retAnalyzer.getCumulativeReturns()[-1] * 100)
print "Average daily return: %.2f %%" % (stats.mean(retAnalyzer.getReturns()) * 100)
print "Std. dev. daily return: %.4f" % (stats.stddev(retAnalyzer.getReturns()))
print "Sharpe ratio: %.2f" % (sharpeRatioAnalyzer.getSharpeRatio(0))
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年06月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档