关键词:云服务器,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])) |
|