Open yutiansut opened 5 years ago
部分代码: 模拟盘下单
import QUANTAXIS as QA
from QAPUBSUB.producer import publisher, publisher_routing
import datetime
from QAPUBSUB import producer
import json
p = producer.publisher_routing(
user='admin', password='admin',exchange='QAORDER_ROUTER')
for acc in ['99999999','100010']:
p.pub(json.dumps({
'topic': 'sendorder',
'account_cookie': acc,
'strategy_id': 'test',
'code': 'rb2001',
'price': 3400,
'order_direction': 'SELL',
'order_offset': 'CLOSETODAY',
'volume': 3,
'order_time': str(datetime.datetime.now()),
'exchange_id': 'SHFE'
}), routing_key=acc)
模拟盘撤单
p.pub(json.dumps({
'topic': 'cancel_order',
'order_id': 'QAOTG_BIn7hPtG',
'account_cookie': '100010'
}), routing_key='100010')
查看模拟盘账户
import pymongo
import os
db =pymongo.MongoClient(host=os.getenv('MONGODB')).QAREALTIME
simacc = db.account.find_one({'account_cookie':'100010'})
simacc['positions']
{'SHFE_rb2001': {'user_id': '100010',
'exchange_id': 'SHFE',
'instrument_id': 'rb2001',
'volume_long_today': 1,
'volume_long_his': 0,
'volume_long': 1,
'volume_long_frozen_today': 0,
'volume_long_frozen_his': 0,
'volume_long_frozen': 0,
'volume_short_today': 1,
'volume_short_his': 0,
'volume_short': 1,
'volume_short_frozen_today': 0,
'volume_short_frozen_his': 0,
'volume_short_frozen': 0,
'volume_long_yd': 0,
'volume_short_yd': 0,
'pos_long_his': 0,
'pos_long_today': 1,
'pos_short_his': 0,
'pos_short_today': 1,
'open_price_long': 3434.0,
'open_price_short': 3426.0,
'open_cost_long': 34340.0,
'open_cost_short': 34260.0,
'position_price_long': 3434.0,
'position_price_short': 3426.0,
'position_cost_long': 34340.0,
'position_cost_short': 34260.0,
'last_price': 3438.0,
'float_profit_long': 40.0,
'float_profit_short': -120.0,
'float_profit': -80.0,
'position_profit_long': 40.0,
'position_profit_short': -120.0,
'position_profit': -80.0,
'margin_long': 2736.0,
'margin_short': 2736.0,
'margin': 5472.0}}
流计算概念/ 实时模拟盘策略/ papertrading
import QAPUBSUB
import QUANTAXIS as QA
from QAPUBSUB.producer import publisher, publisher_routing
from QAPUBSUB.consumer import subscriber, subscriber_routing
user = QA.QA_User(username ='admin', password = 'admin')
port = user.new_portfolio('x1')
acc = port.new_account('test_realtime', market_type=QA.MARKET_TYPE.FUTURE_CN, init_cash=100000)
from QAPUBSUB import producer
import json
p = producer.publisher_routing(
user='admin', password='admin',exchange='QAORDER_ROUTER')
def buy_open(acc, code, price, towards):
p.pub(json.dumps({
'topic': 'sendorder',
'account_cookie': acc,
'strategy_id': 'test',
'code': 'rb2001',
'price': 3400,
'order_direction': 'SELL',
'order_offset': 'CLOSETODAY',
'volume':1,
'order_time': str(datetime.datetime.now()),
'exchange_id': 'SHFE'
}), routing_key=acc)
sub = subscriber(exchange='realtime_5min_rb2001')
import threading
market_data = []
import json
import pandas as pd
def on_data(a,b,c,data):
'修改订阅者的回调函数'
print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!on callback data')
lastest_data = json.loads(str(data, encoding='utf-8'))
print(lastest_data['datetime'][0:16])
dt = None
if dt != lastest_data['datetime'][0:16] or len(market_data) < 1:
dt = lastest_data['datetime'][0:16]
print('append')
market_data.append(lastest_data)
else:
market_data[-1] = lastest_data
bar =lastest_data
market_data.append(bar)
#print(market_data)
print('receive data')
x1 =pd.DataFrame(market_data)
ind = QA.QA_indicator_MA(x1, 2,4)
#print(ind)
try:
if ind.iloc[-1]['MA2']> ind.iloc[-1]['MA4']:
print('signal ==> buy')
if acc.hold_available.get('RB2001',0) ==0:
#acc.send_order()
acc.receive_simpledeal(
code=bar['code'],
trade_price = bar['close'],
trade_amount =1 ,
trade_towards=QA.ORDER_DIRECTION.BUY_OPEN,
trade_time=bar['datetime'])
acc.save()
elif acc.hold_available.get('RB2001',0)>0:
#acc.send_order()
print('alread buyopen')
elif acc.hold_available.get('RB2001',0) <0:
acc.receive_simpledeal(
code=bar['code'],
trade_price = bar['close'],
trade_amount =1 ,
trade_towards=QA.ORDER_DIRECTION.BUY_CLOSE,
trade_time=bar['datetime'])
acc.save()
if ind.iloc[-1]['MA2']< ind.iloc[-1]['MA4']:
print('signal ==> sell')
if acc.hold_available.get('RB2001',0) ==0:
#acc.send_order()
acc.receive_simpledeal(
code=bar['code'],
trade_price = bar['close'],
trade_amount =1 ,
trade_towards=QA.ORDER_DIRECTION.SELL_OPEN,
trade_time=bar['datetime'])
acc.save()
elif acc.hold_available.get('RB2001',0)>0:
#acc.send_order()
acc.receive_simpledeal(
code=bar['code'],
trade_price = bar['close'],
trade_amount =1 ,
trade_towards=QA.ORDER_DIRECTION.SELL_CLOSE,
trade_time=bar['datetime'])
acc.save()
elif acc.hold_available.get('RB2001',0) <0:
print('alread sellopen')
except:
pass
sub.callback = on_data
threading.Thread(target=sub.start).start()
更新一个群友的安装心得:
我部署docker版的心得:
1确保主板开启虚拟化支持(vt),开启CPU虚拟化,打开任务管理器查看性能,是否显示处理器项,有虚拟化
2下载docker,群文件就有,无脑安装,启动docker
3显示docker is runing,说明docker已经跑起来了
4.下载quantaxis/docker/qa-service下的docker配置脚本文件(docker-compose.yaml),不会下载就github上打开那个文件,复制张贴到记事本里保存,改名成一样的
5到命令行下cmd窗口,输入docker volume create qamg 回车 再输入docker volume create qacode 回车 再输入docker-compose up -d 回车 (发现已经搞定了,docker ps查看容器是否跑起)
6浏览器输入,localhost:81,出现web前端界面
---一柱擎天xinan
哔哩哔哩 传送门
docker拉起教程
1. 先安装docker
ubuntu 一键脚本
win/mac 安装 一般是 19.03.2 版本的docker 可以去官网下载docker-ce
https://www.docker.com/products/docker-desktop
文件较大, 我在群文件也共享了
ps: quantaxis强烈推荐不要使用win10以下的系统...(好吧忽略我)
2. 创建两个docker Volume [此步骤只需要执行一次]
3. 下载docker_compose.yaml 或者 cd QUANTAXIS/docker/qa-service
docker-compose.yaml 地址 :
https://github.com/QUANTAXIS/QUANTAXIS/blob/master/docker/qa-service/docker-compose.yaml
4. 在有docker_compose.yaml的目录 输入 docker-compose up
相关项目