add swicht {real, paper} url function

This commit is contained in:
vigarbuaa 2019-06-15 15:07:07 +08:00
parent e8e2e1121d
commit 1e0248ce5c

View File

@ -36,19 +36,19 @@ from vnpy.trader.object import (
) )
REST_HOST = "https://api.alpaca.markets" REST_HOST = "https://api.alpaca.markets"
WEBSOCKET_HOST = "wss://api.alpaca.markets/stream" # Market Data
PAPER_REST_HOST = "https://paper-api.alpaca.markets" PAPER_REST_HOST = "https://paper-api.alpaca.markets"
WEBSOCKET_HOST = "wss://paper-api.alpaca.markets/stream" # Market Data PAPER_WEBSOCKET_HOST = "wss://paper-api.alpaca.markets/stream" # Market Data
KEY = "" KEY = ""
SECRET = "" SECRET = ""
STATUS_ALPACA2VT = { STATUS_ALPACA2VT = {
"new": Status.SUBMITTING, "new": Status.SUBMITTING,
"open": Status.NOTTRADED, "partial_fill": Status.PARTTRADED,
"part_filled": Status.PARTTRADED, "fill": Status.ALLTRADED,
"filled": Status.ALLTRADED,
"cancelled": Status.CANCELLED, "cancelled": Status.CANCELLED,
"cancelling": Status.CANCELLED, #"done_for_day": Status.CANCELLED,
"failure": Status.REJECTED, "expired": Status.NOTTRADED
} }
DIRECTION_VT2ALPACA = {Direction.LONG: "buy", Direction.SHORT: "sell"} DIRECTION_VT2ALPACA = {Direction.LONG: "buy", Direction.SHORT: "sell"}
@ -71,6 +71,7 @@ class AlpacaGateway(BaseGateway):
"key": "", "key": "",
"secret": "", "secret": "",
"session": 3, "session": 3,
"服务器": ["REAL", "PAPER"],
"proxy_host": "127.0.0.1", "proxy_host": "127.0.0.1",
"proxy_port": 1080, "proxy_port": 1080,
} }
@ -85,15 +86,17 @@ class AlpacaGateway(BaseGateway):
def connect(self, setting: dict): def connect(self, setting: dict):
"""""" """"""
print("[debug] gateway setting: ",setting)
key = setting["key"] key = setting["key"]
secret = setting["secret"] secret = setting["secret"]
session = setting["session"] session = setting["session"]
proxy_host = setting["proxy_host"] proxy_host = setting["proxy_host"]
proxy_port = setting["proxy_port"] proxy_port = setting["proxy_port"]
env=setting['服务器']
self.rest_api.connect(key, secret, session, proxy_host, proxy_port) rest_url = REST_HOST if env == "REAL" else PAPER_REST_HOST
websocket_url = WEBSOCKET_HOST if env == "REAL" else PAPER_WEBSOCKET_HOST
self.ws_api.connect(key, secret, proxy_host, proxy_port) self.rest_api.connect(key, secret, session, proxy_host, proxy_port,rest_url)
self.ws_api.connect(key, secret, proxy_host, proxy_port,websocket_url)
def subscribe(self, req: SubscribeRequest): def subscribe(self, req: SubscribeRequest):
"""""" """"""
@ -152,6 +155,7 @@ class AlpacaRestApi(RestClient):
) )
def on_query_account(self, data, request): def on_query_account(self, data, request):
print("on_query_account debug: " , data)
account = AccountData( account = AccountData(
accountid=data['id'], accountid=data['id'],
balance=float(data['cash']), balance=float(data['cash']),
@ -207,15 +211,15 @@ class AlpacaRestApi(RestClient):
session_num: int, session_num: int,
proxy_host: str, proxy_host: str,
proxy_port: int, proxy_port: int,
url: str,
): ):
""" """
Initialize connection to REST server. Initialize connection to REST server.
""" """
self.key = key self.key = key
self.secret = secret self.secret = secret
self.init(url, proxy_host, proxy_port)
self.init(PAPER_REST_HOST, proxy_host, proxy_port) print("rest connect: ", url, proxy_host, proxy_port)
print("rest connect: ", PAPER_REST_HOST, proxy_host, proxy_port)
self.start(session_num) self.start(session_num)
self.connect_time = ( self.connect_time = (
int(datetime.now().strftime("%y%m%d%H%M%S")) * self.order_count int(datetime.now().strftime("%y%m%d%H%M%S")) * self.order_count
@ -227,7 +231,6 @@ class AlpacaRestApi(RestClient):
#self.query_contracts() #self.query_contracts()
def on_send_order(self, data, request ): def on_send_order(self, data, request ):
print("debug on_send_order data is {} request is {} ---".format( data, request))
remote_order_id = data['id'] remote_order_id = data['id']
order = request.extra order = request.extra
self.order_list.append(remote_order_id) self.order_list.append(remote_order_id)
@ -384,12 +387,12 @@ class AlpacaWebsocketApi(WebsocketClient):
self.channelDict = {} # ChannelID : (Channel, Symbol) self.channelDict = {} # ChannelID : (Channel, Symbol)
def connect( def connect(
self, key: str, secret: str, proxy_host: str, proxy_port: int self, key: str, secret: str, proxy_host: str, proxy_port: int,url:str
): ):
"""""" """"""
self.key = key self.key = key
self.secret = secret self.secret = secret
self.init(WEBSOCKET_HOST, proxy_host, proxy_port) self.init(url, proxy_host, proxy_port)
self.start() self.start()
def authenticate(self): def authenticate(self):
@ -397,16 +400,13 @@ class AlpacaWebsocketApi(WebsocketClient):
params={"action":"authenticate", "data": { params={"action":"authenticate", "data": {
"key_id":self.key,"secret_key":self.secret "key_id":self.key,"secret_key":self.secret
}} }}
print("string is {} ===".format(params))
self.send_packet(params) self.send_packet(params)
def on_authenticate(self): def on_authenticate(self):
"""""" """"""
print("websocket authenticate success!!! msg: " )
params={"action":"listen", "data": { params={"action":"listen", "data": {
"streams":["account_updates", "trade_updates"] "streams":["account_updates", "trade_updates"]
}} }}
print("on_authenticate func", params)
self.send_packet(params) self.send_packet(params)
def subscribe(self, req: SubscribeRequest): def subscribe(self, req: SubscribeRequest):
@ -446,8 +446,37 @@ class AlpacaWebsocketApi(WebsocketClient):
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
def on_data(self, data): def on_data(self, data):
print("on_data is {}".format(data))
stream_ret = data['stream']
data_ret = data['data']
if(stream_ret == "account_updates"):
#handle account
account = AccountData(
accountid=data_ret['id'],
balance=float(data_ret['cash']),
frozen=float(data_ret['cash']) - float(data_ret['cash_withdrawable']),
gateway_name=self.gateway_name
)
self.gateway.on_account(account)
elif(stream_ret == "trade_updates"):
d=data_ret['order']
trade = TradeData(
symbol=d["symbol"],
exchange=Exchange.ALPACA,
orderid=d['id'],
tradeid=None,
direction=DIRECTION_ALPACA2VT[d["side"]],
price=data_ret["price"],
volume=data_ret["qty"],
time=data_ret["timestamp"][11:19],
gateway_name=self.gateway_name,
)
self.gateway.on_trade(trade)
#self.gateway.on_order(order) # udpate order status
else:
pass pass
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
def handle_auth(self, data): def handle_auth(self, data):
stream_ret = data['stream'] stream_ret = data['stream']