精华内容
下载资源
问答
  • # 此例子采用Talib提供的STOCH(Stochastic Oscillator Slow),更直接的理解他就是我们常用的KDJ指标中的KD指标。 # 是由两条线一条是快速确认线,另外一条是慢速主干线组成。 # K线是快速确认线——数值在90以上...

    代码主要来自于米框官方教程,由于官方教程有很多,且在开源代码上不一定运行成功,因此将试验成功的代码放于此,便于日后查验。
    rqalpha取自官方版本3.4.0到3.4.1之间。

    关键代码:

    rqalpha.api.instruments(id_or_symbols)

    获取合约的详细信息

    rqalpha.api.current_snapshot(order_book_id)

    get_trading_dates(start_date, end_date)

    交易列表

    get_previous_trading_date(date)

    上一交易日

    get_next_trading_date(date)

    下一交易日

    获取交易日列表

    当日快照

    1 history_bars():

    (order_book_id, bar_count, frequency, fields=None, skip_suspended=True, include_now=False, adjust_type=‘pre’)
    得到的是一个ndarray序列,这里是前30天的数据集

    2 get_bar():

    handle_bar()函数中通过bar_dict[stock].close获取到当日收盘价,最终调用到get_bar()中数据

    bar_dict[stock].close调用的BarMap中的__getitem__()函数,然后通过

    self._data_proxy.get_bar(order_book_id, self._dt, self._frequency)
    

    获取股票的相关信息,data_proxy.get_bar()调用_data_source.get_bar()函数,这个_data_source是数据源,如果重写了数据源,那么get_bar()也需要重写。我重写成minute_data_source,因此这儿就接管过来了

    3 账户信息:

    context.portfolio.positions这个指账户相关信息

    完整代码:

    # 此例子采用Talib提供的STOCH(Stochastic Oscillator Slow),更直接的理解他就是我们常用的KDJ指标中的KD指标。
    # 是由两条线一条是快速确认线,另外一条是慢速主干线组成。
    # K线是快速确认线——数值在90以上为超买,数值在10以下为超卖;
    # D线是慢速主干线——数值在90以上为超买,数值在10以下为超卖;
    import talib
    from rqalpha.api import *
    
    
    def init(context):
        # 定义一个全局变量, 保存要操作的证券
        context.stocks = ['600048.XSHG', '000002.XSHE', '000024.XSHE', '000031.XSHE', '000040.XSHE']
        # 设置我们要操作的股票池
        update_universe(context.stocks)
    
    
    # 初始化此策略
    def handle_bar(context, bar_dict):
        # 取得当前的现金
        cash = context.portfolio.cash
    
        # 循环股票列表
        for stock in context.stocks:
            # 获取股票的数据
            hhigh = history_bars(stock, 30, '1d', 'high')
            hlow = history_bars(stock, 30, '1d', 'low')
            hclose = history_bars(stock, 30, '1d', 'close')
            # 创建STOCH买卖信号,包括最高价,最低价,收盘价和快速线(一般取为9),慢速线
            # 注意:STOCH函数使用的price必须是narray
            slowk, slowd = talib.STOCH(hhigh,
                                       hlow,
                                       hclose,
                                       fastk_period=9,
                                       slowk_period=3,
                                       slowk_matype=0,
                                       slowd_period=3,
                                       slowd_matype=0)
            # 获得最近的kd值
            slowk = slowk[-1]
            slowd = slowd[-1]
            # 获取当前股票的数据
            current_position = context.portfolio.positions[stock].quantity
            # 获取当前股票价格
            current_price = bar_dict[stock].close
            # 当slowk > 90 or slowd > 90,且拥有的股票数量>=0时,卖出所有股票
            if slowk > 90 or slowd > 90 and current_position >= 0:
                order_target_percent(stock, 0)
            # 当slowk < 10 or slowd < 10, 且拥有的股票数量<=0时,则全仓买入
            elif slowk < 10 or slowd < 10 and current_position <= 0:
                number_of_shares = int(cash / current_price)
                # logger.info(cash)
                # logger.info(current_price)
                # 购买量大于0时,下单
                if number_of_shares > 0:
                    # 买入股票
                    order_shares(stock, number_of_shares)
    

    运行结果:
    在这里插入图片描述
    日线级别的get_bar逻辑:

    获取
    通过daybar_store
    order_book_id
    instrument
    日线级数据

    股票日线原始数据:
    在这里插入图片描述
    股票日线转换后的数据:
    在这里插入图片描述
    股票分钟原始数据:
    在这里插入图片描述
    股票分钟转换后数据
    在这里插入图片描述
    关于分钟数据的datetime列
    将datetime替换成原来的date, 然后将datetime*=1000000, 再加上time列的数据

    股指期货字段多一些,其它与分钟线相同:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • # 根据不同的时间段设置滑点与手续费 def set_slip_fee(context): # 将滑点设置为0 set_slippage(FixedSlippage(0)) # 根据不同的时间段设置手续费 dt=context.current_dt ...datetime.datetime(2013,1, ...

    # 根据不同的时间段设置滑点与手续费 def set_slip_fee(context): # 将滑点设置为0 set_slippage(FixedSlippage(0)) # 根据不同的时间段设置手续费 dt=context.current_dt if dt>datetime.datetime(2013,1, 1): set_commission(PerTrade(buy_cost=0.0003, sell_cost=0.0013, min_cost=5)) elif dt>datetime.datetime(2011,1, 1): set_commission(PerTrade(buy_cost=0.001, sell_cost=0.002, min_cost=5)) elif dt>datetime.datetime(2009,1, 1): set_commission(PerTrade(buy_cost=0.002, sell_cost=0.003, min_cost=5)) else: set_commission(PerTrade(buy_cost=0.003, sell_cost=0.004, min_cost=5))

      

    计算指数移动平均线
    # 计算指数移动平均线数据
    # 输入:股票代码-字符串,移动指数平均线天数-整数,data
    # 输出:今天和昨天的移动指数平均数-浮点数
    def get_EMA(security_code,days,data):
        # 如果只有一天的话,前一天的收盘价就是移动平均
        if days==1:
        # 获得前两天的收盘价数据,一个作为上一期的移动平均值,后一个作为当期的移动平均值
            t = attribute_history(security_code, 2, '1d', ('close'))
            return t['close'][-2],t['close'][-1]
        else:
        # 如果全局变量g.EMAs不存在的话,创建一个字典类型的变量,用来记录已经计算出来的EMA值
            if 'EMAs' not in dir(g):
                g.EMAs={}
            # 字典的关键字用股票编码和天数连接起来唯一确定,以免不同股票或者不同天数的指数移动平均弄在一起了
            key="%s%d" %(security_code,days)
            # 如果关键字存在,说明之前已经计算过EMA了,直接迭代即可
            if key in g.EMAs:
                #计算alpha值
                alpha=(days-1.0)/(days+1.0)
                # 获得前一天的EMA(这个是保存下来的了)
                EMA_pre=g.EMAs[key]
                # EMA迭代计算
                EMA_now=EMA_pre*alpha+data[security_code].close*(1.0-alpha)
                # 写入新的EMA值
                g.EMAs[key]=EMA_now
                # 给用户返回昨天和今天的两个EMA值
                return (EMA_pre,EMA_now)
            # 如果关键字不存在,说明之前没有计算过这个EMA,因此要初始化
            else:
                # 获得days天的移动平均
                ma=get_MA(security_code,days) 
                # 如果滑动平均存在(不返回NaN)的话,那么我们已经有足够数据可以对这个EMA初始化了
                if not(isnan(ma)):
                    g.EMAs[key]=ma
                    # 因为刚刚初始化,所以前一期的EMA还不存在
                    return (float("nan"),ma)
                else:
                    # 移动平均数据不足days天,只好返回NaN值
                    return (float("nan"),float("nan"))
    

      

     

    • 计算移动平均线
    • # 计算移动平均线数据
      # 输入:股票代码-字符串,移动平均线天数-整数
      # 输出:算术平均值-浮点数
      def get_MA(security_code,days):
      # 获得前days天的数据,详见API
      a=attribute_history(security_code, days, '1d', ('close'))
      # 定义一个局部变量sum,用于求和
      sum=0
      # 对前days天的收盘价进行求和
      for i in range(1,days+1):
      sum+=a['close'][-i]
      # 求和之后除以天数就可以的得到算术平均值啦
      return sum/days

    转载于:https://www.cnblogs.com/medik/p/11108650.html

    展开全文
  • 二: 指标策略 组装指标(RSI MACD ......等等 可以自由组合) 基于指标的值 触发买入卖出 - 买入 / 卖出 - 策略中心 - 简单策略 - 指标策略 - 策略列表 - 指标策略 - 策略自定义添加 - 策略回测(不完善) - ...
  • 量化交易风险指标

    2019-08-15 10:07:18
    风险指标数据有利于对策略进行一个客观的评价,主要风险指标包括: •策略收益(Total Returns) •策略年化收益(Total Annualized Returns) •基准收益(Benchmark Returns) •基准年化收益(Benchmark ...

    风险指标数据有利于对策略进行一个客观的评价,主要风险指标包括:

    •策略收益(Total Returns)

    •策略年化收益(Total Annualized Returns)

    •基准收益(Benchmark Returns)

    •基准年化收益(Benchmark Annualized Returns)

    •阿尔法(Alpha):投资中面临着系统性风险(Beta)和非系统性风险(Alpha),Alpha是投资者获得与市场波动无关的回报。比如投资者获得了15%的回报,其基准获得了10%的回报,那么Alpha获得价值增值的部分就是5%。

    • 贝塔(Beta):表示投资的系统性风险,反映了策略对大盘变化的敏感性。例如一个策略的Beta为1.5,则大盘上涨1%的时候,策略可能涨1.5%,反之亦然。如果一个策略的Beta为-1.5,说明大盘涨1%的时候,策略可能跌1.5%。

    •夏普比率(Sharpe):表示每承受一单位总风险,会产生多少的超额报酬,可以同时对策略的收益与风险进行综合考虑。

    •索提诺比率(Sortino):表示每承担一单位的下行风险,将会获得多少超额回报。

    •信息比率(Information Ratio):衡量单位超额风险带来的超额收益。信息比率越大,说明该策略单位跟踪误差所获得的超额收益越高。因此,信息比率较大的策略的表现要由于信息比率较低的基准。合理的投资目标应该是在承担适度风险下,尽可能追求高信息比率。

    •策略波动率(Algorithm Volatility):用来测量策略的风险性,波动越大代表策略风险越高。

    •基准波动率(Benchmark Volatility):用来策略基准的风险性,波动越大代表基准风险越高。

    •最大回撤(Max Drawdown):描述策略可能出现的最糟糕的情况,最极端可能的亏损情况。

    •下行波动率(Downside Risk):策略收益下行波动率。和普通收益波动率相比,下行标准差区分了好的和坏的波动。

    •胜率:盈利的次数在总交易次数中的占比。

    •日胜率:盈利超过基准的日数在总交易数中的占比。

    •盈亏比:周期盈利亏损的比例

    注意: 无论是回测还是模拟, 所有风险指标(alpha/beta/sharpe/max_drawdown等指标)都只会每天更新一次, 也只根据每天收盘后的收益计算, 并不考虑每天盘中的收益情况. 例外:

    • 分钟和TICK模拟盘每分钟会更新策略收益和基准收益

    • 按天模拟盘每天开盘后和收盘后会更新策略收益和基准收益

    那么可能会造成这种现象: 模拟时收益曲线中有回撤, 但是 max_drawdown 可能为0.

    拓展阅读:

    1.海龟交易法则策略,多读几遍少走10年路

    2.网格交易法,一个不容易亏钱的投资策略(附源码)

    3.揭开日内回转交易策略做“T+0”的面纱

    4.配对交易——这个股票策略曾年赚5000万美元

    5.被动与主动的完美结合:指数增强策略的魅力

    6.经典量化选股方法——没有秘密的多因子

    展开全文
  • 量化交易风险指标有哪些

    千次阅读 2019-02-28 14:59:44
    量化交易风险指标有哪些?https://blog.csdn.net/myquant/article/details/86507033风险指标数据有利于对策略进行一个客观的评价,主要风险指标包括: 策略收益(Total Returns) 策略年化收益(Total Annualized...

    转 量化交易风险指标有哪些?https://blog.csdn.net/myquant/article/details/86507033风险指标数据有利于对策略进行一个客观的评价,主要风险指标包括:
    策略收益(Total Returns)
    策略年化收益(Total Annualized Returns)
    基准收益(Benchmark Returns)
    基准年化收益(Benchmark Annualized Returns)
    阿尔法(Alpha):投资中面临着系统性风险(Beta)和非系统性风险(Alpha),Alpha是投资者获得与市场波动无关的回报。比如投资者获得了15%的回报,其基准获得了10%的回报,那么Alpha获得价值增值的部分就是5%。

    贝塔(Beta):表示投资的系统性风险,反映了策略对大盘变化的敏感性。例如一个策略的Beta为1.5,则大盘上涨1%的时候,策略可能涨1.5%,反之亦然。如果一个策略的Beta为-1.5,说明大盘涨1%的时候,策略可能跌1.5%。

    夏普比率(Sharpe):表示每承受一单位总风险,会产生多少的超额报酬,可以同时对策略的收益与风险进行综合考虑。
    索提诺比率(Sortino):表示每承担一单位的下行风险,将会获得多少超额回报。
    信息比率(Information Ratio):衡量单位超额风险带来的超额收益。信息比率越大,说明该策略单位跟踪误差所获得的超额收益越高。因此,信息比率较大的策略的表现要由于信息比率较低的基准。合理的投资目标应该是在承担适度风险下,尽可能追求高信息比率。
    策略波动率(Algorithm Volatility):用来测量策略的风险性,波动越大代表策略风险越高。
    基准波动率(Benchmark Volatility):用来策略基准的风险性,波动越大代表基准风险越高。
    最大回撤(Max Drawdown):描述策略可能出现的最糟糕的情况,最极端可能的亏损情况。
    下行波动率(Downside Risk):策略收益下行波动率。和普通收益波动率相比,下行标准差区分了好的和坏的波动。
    胜率:盈利的次数在总交易次数中的占比。
    日胜率:盈利超过基准的日数在总交易数中的占比。
    盈亏比:周期盈利亏损的比例
    注意: 无论是回测还是模拟, 所有风险指标(alpha/beta/sharpe/max_drawdown等指标)都只会每天更新一次, 也只根据每天收盘后的收益计算, 并不考虑每天盘中的收益情况. 例外:
    分钟和TICK模拟盘每分钟会更新策略收益和基准收益
    按天模拟盘每天开盘后和收盘后会更新策略收益和基准收益
    那么可能会造成这种现象: 模拟时收益曲线中有回撤, 但是 max_drawdown 可能为0.
    来源:博客园     宽客
    ----------------------------------------------------------------------------------------------------------
    拓展视野:如何使用掘金进行绩效分析?
     https://img-blog.csdnimg.cn/20190217105710569.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwNzgxNDE=,size_16,color_FFFFFF,t_70《算法导论 第三版英文版》_高清中文版.pdf
    https://pan.baidu.com/s/17D1kXU6dLdU0YwHM2cvNMw
    《深度学习入门:基于Python的理论与实现》_高清中文版.pdf
    https://pan.baidu.com/s/1IeVs35f3gX5r6eAdiRQw4A
    《深入浅出数据分析》_高清中文版.pdf
    https://pan.baidu.com/s/1GV-QNbtmjZqumDkk8s7z5w
    《Python编程:从入门到实践》_高清中文版.pdf
    https://pan.baidu.com/s/1GUNSg4mdpeOf1LC_MjXunQ
    《Python科学计算》_高清中文版.pdf
    https://pan.baidu.com/s/1-hDKhK-7rDDFll_UFpKmpw

    展开全文
  • 二、什么是量化交易? 针对可交易的投资商品,理性的运用逻辑分析和归纳统计判断市场趋势。 三、有哪些指标可以用于分析呢? 赚钱“因子” 盈利能力 财报数据没有用,主要踏踏实实去看去分析,靠虚无缥缈的消息去...
  • 通达信指标公式源码量化交易.doc
  • 量化交易指标详解

    2019-02-25 08:56:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 通达信指标公式源码量化交易系统.doc
  • 本文是量化交易零基础入门教程中的第一篇。 摘要 为什么需要量化交易量化交易是做什么? 量化交易的价值何在? 做量化交易需要什么? 聚宽是什么? 零基础如何快速入门量化交易? 自测与自学 量化交易比...
  • 量化交易策略——CCI指标

    千次阅读 2020-12-14 16:58:44
    20世纪80年代,美国股市分析家唐纳德·蓝伯特(Donald Lambert)发明了顺势指标,即CCI指标,早期被用于期货市场的判断,后来被广泛应用在股票市场的研判。与大多数技术分析指标相比,根据统计学原理的CCI指标是比较...
  • 各种指标和挖掘方式 隔夜shibor指数 上海银行间拆借利率 http://www.shibor.org/shibor/Shibor.do?date=2021-04-20
  • # 绘图 plt.rcParams['font.sans-serif'] = ['SimHei'] C_RSV.plot(subplots=True, title='未成熟随机指标RSV')
  • 量化交易

    2020-07-21 15:21:59
    定位: 掌握数据挖掘/机器学习技术的应用场景 从事量化策略工程师、量化策略分析方向 目标: 掌握回测框架的使用 掌握股标的量化投资策略 最化交易简介 ...量化交易从庞大的历史数据中海选...
  • 通达信指标公式源码 量化交易多空概率系统.doc
  • 量化交易 第六课 策略评估指标计算

    千次阅读 多人点赞 2021-04-13 02:39:20
    策略评估指标计算. 包括回测收益率, 回测年化收益率, 最大回撤, 夏普比率.
  • 在本文中,我们将介绍该指标的基础知识,并向您展示如何将其纳入您的量化交易策略。我们还将看一下该指标的一些缺点。 关键要点 由J. Welles Wilder Jr.开发的抛物线SAR指标被交易者用来确定趋势方向和潜在的价格...
  • 超过130个技术指标(Aroon,ATR,移动平均线,抛物线SAR,RSI等) https://github.com/ta4j/ta4j 2) ta-lib TA-Lib是一个计算股市中常见指标的算法库,支持多种编程语言 https://github.com/BYVoid/TA-Lib ...
  • 第一部分:量化交易基础第1章 量化交易基础:成对交易与模型自动化1.1 量化交易简介1.2 大纲简介与课程设置1.3 成对交易算法1.4 【Python实战】基于成对交易算法的目标股票池选取和自动化交易1.5 成对交易问题探讨与...
  • 文华财经智能量化指标公式交易系统技术.doc
  • #会在策略开始前触发一次,我们可以从get_fundamentals函数中更新我们的股票池 #并且保存查询获得的数据以作之后使用 def initialize(context): # 获取A股所有的股票 Ashares = get_Ashares() ...
  • python 量化交易:MACD指标双金叉形态识别: df 是pandas的Dataframe,基础数据原来是 tushare 中的股票交易数据,MACD指标是用 talib 库计算得来: df = df.sort_values(by='trade_date', ascending=True) # ...
  • 为什么需要量化交易量化交易是做什么? 量化交易的价值何在? 做量化交易需要什么? 聚宽是什么? 零基础如何快速入门量化交易? 自测与自学 量化交易比传统交易强多少? 它能让你的交易效率提高百倍,...
  • 原标题:基于python的开源量化交易...现阶段的量化策略还是人工编写的代码,abu量化交易系统的设计将会向着由计算机自动实现整套流程的方向迈进,包括编写量化策略本身。abupy的设计目标是:用户只需要提供一些简单...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,294
精华内容 3,717
关键字:

量化交易指标