Quantopian自学笔记01

      听了一个前辈的指导,说学习量化可以在 quantopian 这个平台上学习,虽然国内也是有相关的,但是还是想训练自己的英文能力,于是还是决定看外国的。然后百度了一下相关的教程很少,不知为啥用的人不多,哎那我这个初生牛犊就来试试,把自己的学习过程用中文讲解出来,也顺便能增加自己的理解,而不是想知乎上面说的,“ quantopian 写几篇文章就当成是求职时的敲门砖,之后就不再触及”,虽说事实的确可能如此,但是诚恳的学习态度终究是一个人成长的根本。

       在 tutorials 的 tutorial 1 : get started 里面就可以看到所给出的若干课程。

       LESSON 1: Introduction 就是简介,介绍了说什么是 Trading Algorithm 交易算法,就是一个设定好了买卖资产 asseets的规则的计算机程序。

      

       LESSON 2: Data Exploration 就给了我们第一个程序,目的就是获取数据 Data Exploration,代码如下:

# Research environment functions
from quantopian.research import returns, symbols

# Select a time range to inspect
period_start = '2014-01-01'
period_end = '2014-12-31'

# Query returns data for AAPL
# over the selected time range
aapl_returns = returns(
    assets=symbols('AAPL'),
    start=period_start,
    end=period_end,
)

# Display first 10 rows
aapl_returns.head(10)

       感觉还是认清楚每个API的使用方法为主,而不是去理解里面具体底层的东西。

       从 quantopian.research 中调用两个函数(我也不确定是不是准确的称呼为函数) returns 和 symbols ,returns 的用法比较显而易见,returns(assets,start,end),assets 就是我们要获取的资产的名称,然后 returns 函数在吸收这个参数的时候实参应该是经过 symbols 函数处理一个字符串后得到的 security objective 证券对象,应该就是转化成一个编号以便搜索;start和end就是所获取数据的时间段的起点和终点,也有固定的数据类型time。

       查文档可以知道,returns函数实际上还有其他的形参:

       periods,默认值为1。

       frequency,获取数据的时候的频率,默认值为daily,按日获取数据,也可以理解是日K。另外也可以设置成minute,按分钟获取数据,应该是结合periods设置1以外的数值例如5,10,30,就可以得到5分钟K,10分钟K和30分钟K。

      price_field,默认值是price,得到的效果就是获取收盘价,或者是那个周期内的收盘价。另外可选的还有open,high,low,close,其中close和price是相同的。

      symbol_reference_date,默认值为None,数据类型为TimeStamp,我的理解就是assets得到的一个代码在当下指代一种资产,但是可能在一段时间之前这个代码并不是指代这种资产或者是这种资产以前不是用这个代码描述的,我们就选定一个日期说用这个日期下该代码所指定的资产作为我们获取的对象。通常是不用怎么管的保持默认就好。

       returns这个收益率函数得到的对象有两种。如果我们是单种资产,得到的就是pandas下的series类型,相当于一个数组但是有index的;如果assets是多种资产,我们用的也是symbols而不是symbol(symbols具备同时获取多个参数的能力)也就是assets可以是一个数组,得到的将会是pandas下的DataFrame类型。再利用head(10)就可以输出头10行的数据。

       接下来就blabla给了一大段代码,讲的就是数据有很多,不单只是盘面的数据,还有公司财务,市场交易情绪trading mood等很多数据库可以去获取,例如后面提及的stockswits。不过代码段在这里一下字没办法解释清楚,分在了后面若干个lesson里面慢慢讲的,所以就先不放上来,等全部讲完了再跟输出的图像一起放出来。

       

      LESSON 3: Pipeline API。开始介绍在 quantopian 里面很关键的一个东西(是类吗?这个问题以后理解透了再回来解决)Pipeline,以及他的一些API用法。我们用 Pipeline 的 API 可以做到什么呢?

1.Selecting assets based on filtering rules. 使用一些筛选的原则来挑选资产

2.Ranking assets based on a scored function. 通过一个分数的函数来排列我们的资产,排定优劣

3.Calculating portfolio allocations. 计算一个资产组合的配比

        首先创建空的 pipeline 实例。我们是把创建的步骤封装在一个函数里面。

from quantopian.pipeline import Pipeline

def make_pipeline():
    #Create and return an empty pipeline
    return Pipeline()

为了给我们的 pipeline 添加一个输出,我们先要包含一个来自外部数据集 dataset 的引用,然后制定一些在这个引用的数据上的计算方法。例如,我们添加一个引用,来自 USEquityPricing 数据集中的 close 列。然后我们定义我们的输出,就是这一列中的最新的数值。

#Import Pipeline class and USEquityPricing class
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data import USEquityPricing

def make_pipeline():
    #Get lastest closing price
    close_price = USEquityPricing.close.lastest

    #Return Pipeline containing lastest closeing price
    return Pipeline(
        columns = {
            'close_price': close_price,
        }
    )

           Pipeline API 还提供了不少内建计算函数,可以用来在各种方向上处理数据。例如,我们导入 Psychsignal 心理信号中的 stockwits 数据集,用其中的 bull_minus_bear "牛熊差"这一列的数据构建一个三日均线。   

#Import Pipeline and datasets
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data import USEquityPricing
from quantopian.pipeline.data.psychsignal import stockwits

#Import built-in moving average calculation
from quantopian.pipeline.factors import SimpleMovingAverage

def make_pipeline():
    #Get lastest closing price
    close_price = USEquityPricing.close.lastest

    #Calculating 3 day average of bull_minus_bear scores
    sentiment_score = SimpleMovingAverage(
        inputs = [stockwits.bull_minsu_bear],window_length = 3,
    )

    #Return Pipeline containing close_price
    #and sentiment_score
    return Pipeline(
        columns = {
            'close_price': close_price,
            'sentiment_score': sentiment_score,
        }
    )

可以看到我们在创建实例的时候,传递给Pipeline的参数名是 columns,类型为一个字典。

        接下来就是 Universe Selection。我们在发展我们的策略的过程中,有一步就是选定我们将会在我们的资产组合中考虑一些资产,并不是一定要持有,观望的对象也应该列进来,这些资产,set of assets 就可以称为 trading universe,交易空间,定义类似于概率论中的事件空间。

       交易空间要尽量大,同时也要排除一些不适合我们资产组合的资产,例如流动性太差难以交易的资产。Quantopian 中的 QTradabelStockUS 空间提供了这个特性,我们可以将 QTradabelStockUS 设置为我们的交易空间并使用里面的参数作为我们创建 Pipeline 实例时的传入对象。

# Import Pipeline class and datasets
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data import USEquityPricing
from quantopian.pipeline.data.psychsignal import stocktwits

# Import built-in moving average calculation
from quantopian.pipeline.factors import SimpleMovingAverage

# Import built-in trading universe
from quantopian.pipeline.experimental import QTradableStocksUS


def make_pipeline():
    # Create a reference to our trading universe
    base_universe = QTradableStocksUS()

    # Get latest closing price
    close_price = USEquityPricing.close.latest

    # Calculate 3 day average of bull_minus_bear scores
    sentiment_score = SimpleMovingAverage(
        inputs=[stocktwits.bull_minus_bear],
        window_length=3,
    )

    # Return Pipeline containing close_price and
    # sentiment_score that has our trading universe as screen
    return Pipeline(
        columns={
            'close_price': close_price,
            'sentiment_score': sentiment_score,
        },
        screen=base_universe
    )

       在 quantopian 上面的 start-code 里面尝试运行上述代码中导入 QTradabelStocksUS 时提示,现在不从 experiment 导入了,现在是在 filter 导入。 

       现在我们的 pipeline 已经定义好了,接下来就是在一段特定的时间上执行这个 pipeline,我们将会用到 run_pipeline() 这个函数。输出将会是一个以日期和资产名作为索引的 pandas.DataFrame,其中一列一列的内容就是我们在定义是添加的输出 output。

# Import run_pipeline method
from quantopian.research import run_pipeline

# Execute pipeline created by make_pipeline
# between start_date and end_date
pipeline_output = run_pipeline(
    make_pipeline(),
    start_date='2013-01-01',
    end_date='2013-12-31'
)

# Display last 10 rows
pipeline_output.tail(10)

tail(10) 就是返回最后10行的内容,而不是全部返回。这个是 DataFrame 的一个技巧。
 

 

 

 

 

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值