程序化交易平台搭建记录

论坛 期权论坛 期权     
期权匿名问答   2022-8-17 09:39   5385   0

关键词:云服务器,Ubuntu,Redis,Python,Celery,Fabric,Grafana
在知乎上参考了很多信息,现总结一下我的开发过程,仅供参考
程序化交易平台,底线要求是程序稳定执行,如今云服务器价格亲民且稳定,作为执行平台最具性价比,
我采用3台云服务器作为运行平台,分别命名为 2C2G,2C4G,4C8G
2C2G作为开发服务器,VSCode + Remote Development 作为开发工具,方便开发及代码管理,
用Fabric实现对另外两台服务器进行统一管理,包括安装,代码同步,任务调度
def git():
    with cd('~/stonequant'):
        run('git checkout -- .')
        run('git fetch')
        run('git rebase')2C4G主要用于模拟交易,策略回测,数据整理等
4C8G主要用于实盘交易,程序基于Celery框架,对各个环节解耦,
行情数据,仓位数据,交易指令,这3个任务仅仅是对交易接口的实现,
获取的行情数据,仓位数据将通过Redis发布到指定Channel
策略任务通过订阅Redis获取行情数据,仓位数据,进行策略判断,
若有符合策略的交易时机,则通过Redis发布,交易指令通过订阅Redis执行下单
@agentapp.task(name='kline', ignore_result=True)
def kline(**kwargs):
    try:
        tqapi = get_tqapi()
        redis = get_redis()

        config = get_yamlcfg('tqsdk.yaml')['klines']
        klines = []

        for symbol in config['symbol']:
            klines.append({
                'symbol': symbol,
                'kline': tqapi.get_kline_serial(symbol, config['duration'], config['length'])
            })

        while tqapi.wait_update(deadline=TqSdkUtil.get_deadline()):
            for kline in klines:
                if tqapi.is_changing(kline['kline'].iloc[-1], 'datetime'):
                    redis.publish(CHANNEL_KLINE,
                                  TqSdkUtil.kline_to_str(kline['symbol'], kline['kline'].iloc[-2]))
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:391757
帖子:78352
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP