首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Coding
V2EX  ›  分享创造

用 Python 写了个简单的股票量化交易框架

  •  2
     
  •   shidenggui · 2016-01-03 21:59:40 +08:00 · 13429 次点击
    这是一个创建于 1440 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github 地址

    因为行情的获取用到了 async / await 所以暂时只支持 Python3.5+

    交易

    支持 佣金宝华泰 两家券商的自动登录和买卖。

    行情

    使用的是新浪的免费行情,大概一秒钟推送一次 所有的 3000 多只股票的实时数据。
    也可以自己引入 tushare 这个免费的财经信息获取包

    策略

    其中的事件驱动引擎策略模板 是模仿的 vnpy 的框架

    Demo

    运行之后基本是下面这样

    启动主引擎
    [2015-12-28 14:05:36.649599] INFO: main_engine.py: 加载策略: 策略 1_Demo
    [2015-12-28 14:05:36.650250] INFO: main_engine.py: 加载策略: 策略 2_Demo
    [2015-12-28 14:05:36.650713] INFO: main_engine.py: 加载策略完毕
    
    
    触发每秒定时计时器
    
    策略 1 触发
    
    行情数据: 万科价格:  {'ask4': 0.0, 'ask1': 0.0, 'bid2_volume': 0, 'bid3': 0.0, 'bid5_volume': 0, 'name': '万  科A', 'ask4_volume': 0, 'close': 24.43, 'volume': 0.0, 'ask3_volume': 0, 'bid5': 0.0, 'bid1': 0.0, 'ask2': 0.0, 'bid4_volume': 0, 'high': 0.0, 'ask5': 0.0, 'bid4': 0.0, 'ask5_volume': 0, 'turnover': 0, 'ask2_volume': 0, 'sell': 0.0, 'open': 0.0, 'bid3_volume': 0, 'bid2': 0.0, 'bid1_volume': 0, 'buy': 0.0, 'ask3': 0.0, 'low': 0.0, 'now': 0.0, 'ask1_volume': 0}
    检查持仓
    [{'asset_balance': 2758.98, 'market_value': 2740.9, 'enable_balance': 18.08, 'current_balance': 18.08, 'money_name': '人民币', 'fetch_balance': 18.08, 'money_type': '0'}]
    
    
    策略 2 触发
    行情数据: 华宝油气 {'ask4': 0.5, 'ask1': 0.497, 'bid2_volume': 4594100, 'bid3': 0.494, 'bid5_volume': 851300, 'name': '华宝油气', 'ask4_volume': 15650706, 'close': 0.5, 'volume': 138149552.799, 'ask3_volume': 19611307, 'bid5': 0.492, 'bid1': 0.496, 'ask2': 0.498, 'bid4_volume': 313700, 'high': 0.501, 'ask5': 0.501, 'bid4': 0.493, 'ask5_volume': 10108300, 'turnover': 277462973, 'ask2_volume': 10747730, 'sell': 0.497, 'open': 0.5, 'bid3_volume': 997500, 'bid2': 0.495, 'bid1_volume': 5507952, 'buy': 0.496, 'ask3': 0.499, 'low': 0.495, 'now': 0.497, 'ask1_volume': 14948518}
    检查持仓
    [{'asset_balance': 2758.98, 'market_value': 2740.9, 'enable_balance': 18.08, 'current_balance': 18.08, 'money_name': '人民币', 'fetch_balance': 18.08, 'money_type': '0'}]
    
    第 1 条附言  ·  2016-01-03 23:21:42 +08:00

    策略编写非常简单,因为功能比较有限。可以查看下面的 策略_Demo1

    # 引入策略模板
    from easyquant import StrategyTemplate
    
    
    class Strategy(StrategyTemplate):
        # 主要实现下面这个 `strategy` 函数就可以了
        def strategy(self, event):
            """:param event event.data 为所有股票的信息,结构如下
            {'162411':
            {'ask1': '0.493',
             'ask1_volume': '75500',
             'ask2': '0.494',
             'ask2_volume': '7699281',
             'ask3': '0.495',
             'ask3_volume': '2262666',
             'ask4': '0.496',
             'ask4_volume': '1579300',
             'ask5': '0.497',
             'ask5_volume': '901600',
             'bid1': '0.492',
             'bid1_volume': '10765200',
             'bid2': '0.491',
             'bid2_volume': '9031600',
             'bid3': '0.490',
             'bid3_volume': '16784100',
             'bid4': '0.489',
             'bid4_volume': '10049000',
             'bid5': '0.488',
             'bid5_volume': '3572800',
             'buy': '0.492',
             'close': '0.499',
             'high': '0.494',
             'low': '0.489',
             'name': '华宝油气',
             'now': '0.493',
             'open': '0.490',
             'sell': '0.493',
             'turnover': '420004912',
             'volume': '206390073.351'}}
            """
            # 使用 self.user 来操作账户,使用 self.user.buy() / self.user.sell() 来买卖,用法同 easytrader 用法
            # 使用 self.log.info('message') 来打印你所需要的 log
            print('策略 1 触发')
            print('行情数据: 万科价格: ', event.data['000002'])
            print('检查持仓')
            print(self.user.balance)
    
    23 回复  |  直到 2016-06-24 23:03:32 +08:00
        1
    itommy   2016-01-03 23:55:02 +08:00 via iPhone
    牛逼
        2
    orzcc   2016-01-03 23:59:00 +08:00
    请叫我雷锋, https://www.ricequant.com
        3
    mzer0   2016-01-04 00:02:27 +08:00
    始终不理解量化交易赚钱的原理...
        4
    Luzifer   2016-01-04 00:54:21 +08:00
    不明觉厉,战略留名
        5
    WildCat   2016-01-04 06:08:18 +08:00 via iPhone
    觉得 T+1 散户做量化交易意义不大吧
        6
    bigtan   2016-01-04 08:40:22 +08:00 via Android
    @mzer0 在市场上寻找预期正收益的买卖机会,要么是高胜率,要么是高盈亏比。
        7
    exuxu   2016-01-04 08:42:30 +08:00 via Android
    鬼哥厉害
        8
    shidenggui   2016-01-04 08:44:15 +08:00   ♥ 1
    @orzcc 商业化的推荐这个 https://uqer.io ,主要是实盘交易都还没开放
    @mzer0 量化只是个工具
    @WildCat T+0 的目前也有,而且量化不等于一定要高频交易,只是取代一些机器的操作
        9
    CareiOS   2016-01-04 08:57:36 +08:00
    你是如何获取交易接口的?
        10
    shidenggui   2016-01-04 09:07:04 +08:00
        11
    nawsix   2016-01-04 11:48:54 +08:00
    厉害!!
        12
    haogefeifei   2016-01-04 15:27:17 +08:00
    今日熔断了。。。。。
        13
    wolfan   2016-01-04 15:31:54 +08:00 via Android
    不明觉厉,话说,这东西能不能帮俺解角套?
        14
    shidenggui   2016-01-05 12:39:54 +08:00
    @wolfan 解套还需系套人
        15
    wolfan   2016-01-05 21:12:43 +08:00
    @shidenggui (⊙﹏⊙)一身家产全在套上,已经感觉解不开了。
        16
    shidenggui   2016-01-05 21:54:20 +08:00
    @wolfan 股市起起浮浮,总有机会的
        17
    CareiOS   2016-01-07 13:55:30 +08:00
    今天又熔断了
        18
    xiaoyu9527   2016-01-07 15:39:18 +08:00
    我一直想写一个这种自动赚钱机。

    到底能不能实现呢?
        19
    shidenggui   2016-01-07 16:27:12 +08:00
    @CareiOS 恩,熔断这个机制不太合理
    @xiaoyu9527 自动赚钱机的话 Google / Office 就是啊
        20
    mew7wo   2016-01-07 23:56:20 +08:00
    自动赚钱不可能,用程序来做一些量化辅助工作是可以的
        21
    shidenggui   2016-01-08 10:28:22 +08:00
    @mew7wo 我一直想写一个这种 (自动赚钱机 / Google / Office / Skype / Minecraft),写出来了自动赚钱不是梦
        22
    thinkingmind   2016-01-08 12:14:46 +08:00
    @orzcc 感谢雷锋!请拍个照吧!
        23
    julf   2016-06-24 23:03:32 +08:00
    请问楼主怎么联系?能否接活?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2434 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 07:24 · PVG 15:24 · LAX 23:24 · JFK 02:24
    ♥ Do have faith in what you're doing.