国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

json - The third question about placing orders with python and oanda's simulated trading api
為情所困
為情所困 2017-05-18 10:54:22
0
2
1255

This time I want to buy 50 USD_CAD contracts at the current market price
Procedure:
import requests
import json

Display the current exchange rate of USD_CAD--------------------------------------------- ------------------------------------------------

url = 'https://api-fxpractice.oanda....'
instruments = 'USD_CAD'
account_id = 'cawa11' #Username
params = {'instruments':instruments ,'accountId':account_id}
access_token = 'a554db3a48ac8180a6996a5547ba1663-ac5947e64456cc5842a34f4ce05e4380'
headers = {'Authorization':'Bearer ' access_token}
r = requests.get(url,headers = headers , params=params )
price = r.json()
print(price)

Buy 50 USD_CAD contracts at the current market price--------------------------------------------- --------------------------------------------------

url = 'https://api-fxpractice.oanda....' #5898545 is part of account 101-011-5898545-001
headers = {'Content-Type' : 'application/x- www-form-urlencoded','Authorization':'Bearer ' access_token}
data = {'instrument':'USD_CAD','accountId':'cawa11','units':50,'type':'market ','side':'buy'}
req = requests.post(url,data=data,headers=headers)
print(req.text)
print(req.json())

The second program error report:
{"code" : 4,"message" : "The access token provided does not allow this request to be made","moreInfo":"http://developer.oanda .com/docs/v1/auth/#overview"}
{'message': 'The access token provided does not allow this request to be made', 'moreInfo': 'http://developer.oanda.com /do...', 'code': 4}
But there is no problem with access token through the normal operation of the first program, and the error list in http://developer.oanda.com/do... Error list

HTTP狀態(tài)代碼 HTTP狀態(tài)消息 信息                        詳細(xì)說明
    4           401       擅自 提供不允許該請求的訪問令牌進(jìn)行 確保與請求提供的訪問令牌是正確的,是有效的。請參閱認(rèn)證以獲取更多細(xì)節(jié)。
    

Attached is a document from oanda company:
import http.client
import urllib
import json
import datetime

This file contains some very simple calls to the OANDA API

This indicates that if the threshold is exceeded, get the current price of the instrument and place a trade

def checkAndTrade():

conn = httplib.HTTPSConnection("api-sandbox.oanda.com")
conn.request("GET", "/v1/prices?instruments=USD_CAD")
response = conn.getresponse()
resptext = response.read()
if response.status == 200:
    data = json.loads(resptext)
    if data['prices'][0]['ask'] > 0.994:
        headers = {"Content-Type" : "application/x-www-form-urlencoded"}
        params = urllib.urlencode({"instrument" : "USD_CAD",
                                   "units" : 50,
                                   "type" : 'market',
                                   "side" : "buy"})
        conn.request("POST", "/v1/accounts/8026346/orders", params, headers)
        print(conn.getresponse().read())
else:
    print(resptext)

This sets an order with the same price as above, and the transaction will be executed when the price crosses 0.994

def order():

now = datetime.datetime.now()
expire = now + datetime.timedelta(days=1)
expire = expire.isoformat('T') + "Z"    
conn = httplib.HTTPSConnection("api-sandbox.oanda.com")
params = urllib.urlencode({"instrument": "USD_CAD",
                           "units" : 50,
                           "price" : 0.994,
                           "expiry" : expire,
                           "side" : "buy",
                           "type" : "limit"})
headers = {"Content-Type" : "application/x-www-form-urlencoded"}
conn.request("POST", "/v1/accounts/8026346/orders", params, headers)
print(conn.getresponse().read())

order()
checkAndTrade()
This program may be older and its api address is different from the current api address

為情所困
為情所困

reply all(2)
某草草

Accounts have permission to read data, but may not have permission to place orders
The problems you have now are all related to things in the API. You should study the API documentation carefully, otherwise you will encounter countless similar problems in the future

Unless someone happens to be familiar with this API, I can’t give you any help
============================== =========
If you order and monitor from the website, you will find that your url and data are completely different from those of the website

import requests

access_token = '81e6f8b8ae23d2c0122cfee68cd26fc2-5681d2e539e0c8d01925bad19ff141f5'
url = 'https://api-fxpractice.oanda.com/v3/accounts/101-011-5898545-001/orders'
headers = {'Content-Type' : 'application/json','Authorization':'Bearer '+access_token}
data = {"order":{"instrument":"EUR_USD","type":"MARKET","units":"1"}}
req = requests.post(url,json=data,headers=headers)
print(req.text)

==================================================== ==================

伊謝爾倫

@prolifes:

test.py-----------------------------------------------------

from vnoanda import OandaApi
if name == '__main__':

token = ''
accountId = ''   
api = OandaApi()
api.DEBUG = True    
api.init('practice', token, accountId)    
# 獲取交易合約列表,通過
#api.getInstruments({'accountId': accountId})    
# 獲取價(jià)格,通過
#api.getPrices({'instruments': 'EUR_USD'})    
# 獲取歷史數(shù)據(jù),失敗
#api.getPriceHisory({'instrument': 'EUR_USD',
                    #'granularity': 'D',
                    #'candleFormat': 'midpoint',
                    #'count': '50'})    
# 查詢用戶的所有賬戶,通過
#api.getAccounts()    
# 查詢賬戶信息,通過
#api.getAccountInfo()    
# 查詢委托數(shù)據(jù),通過
#api.getOrders({})    
# 發(fā)送委托,通過
#api.sendOrder({'instrument': 'EUR_USD',
               #'units': '10000',
               #'side': 'buy',
               #'type': 'market'})    
# 查詢委托數(shù)據(jù),通過
#api.getOrderInfo('123')    
# 修改委托,通過
#api.modifyOrder({'units': '10000',
               #'side': 'buy',
               #'type': 'market'}, '123')        
# 撤銷委托,通過
#api.cancelOrder('123')    
# 查詢所有持倉,通過
#api.getTrades({})    
# 查詢持倉數(shù)據(jù),通過
#api.getTradeInfo('10125150909')    
# 修改持倉,通過
#api.modifyTrade({'trailingStop': '150'}, '10125150909')        
# 平倉,通過
#api.closeTrade('10125150909')       
# 查詢匯總持倉,通過
#api.getPositions()    
# 查詢匯總持倉細(xì)節(jié),通過
#api.getPositionInfo('EUR_USD')    
# 平倉匯總持倉,通過
#api.closePosition('EUR_USD')    
# 查詢賬戶資金變動,通過
#api.getTransactions({})    
# 查詢資金變動信息,通過
#api.getTransactionInfo('10135713982')    
# 查詢賬戶變動歷史,部分通過,某些情況下可能觸發(fā)JSONDecodeError
#api.getAccountHistory()    
# 查詢財(cái)經(jīng)日歷,通過
#api.getCalendar({'period': '604800'})    
# 查詢歷史持倉比,通過
#api.getPositionRatios({'instrument': 'EUR_USD',
                       #'period': '604800'})    
# 查詢歷史價(jià)差,通過
#api.getSpreads({'instrument': 'EUR_USD',
                #'period': '604800'})    
# 查詢交易商持倉,通過
#api.getCommitments({'instrument': 'EUR_USD'})    
# 查詢訂單簿,通過
#api.getOrderbook({'instrument': 'EUR_USD',
                  #'period': '604800'})    
# 查詢Autochartist,失敗,OANDA服務(wù)器報(bào)錯
#api.getAutochartist({'instrument': 'EUR_USD'})    
# 阻塞
input() 

vnoanda.py--------------------------------------------------------------

encoding: utf-8

import json
import requests
from Queue import Queue, Empty
from threading import Thread

API_SETTING = {}
API_SETTING['practice'] = {'rest': 'https://api-fxpractice.oanda.com','stream': 'https://stream-fxpractice.oan...'}
API_SETTING['trade'] = {'rest': 'https://api-fxtrade.oanda.com','stream': 'https://stream-fxtrade.oanda....'}

FUNCTIONCODE_GETINSTRUMENTS = 0
FUNCTIONCODE_GETPRICES = 1
FUNCTIONCODE_GETPRICEHISTORY = 2
FUNCTIONCODE_GETACCOUNTS = 3
FUNCTIONCODE_GETACCOUNTINFO = 4
FUNCTIONCODE_GETORDERS = 5
FUNCTIONCODE_SENDORDER = 6
FUNCTIONCODE_GETORDERINFO = 7
FUNCTIONCODE_MODIFYORDER = 8
FUNCTIONCODE_CANCELORDER = 9
FUNCTIONCODE_GETTRADES = 10
FUNCTIONCODE_GETTRADEINFO = 11
FUNCTIONCODE_MODIFYTRADE= 12
FUNCTIONCODE_CLOSETRADE = 13
FUNCTIONCODE_GETPOSITIONS = 14
FUNCTIONCODE_GETPOSITIONINFO= 15
FUNCTIONCODE_CLOSEPOSITION = 16
FUNCTIONCODE_GETTRANSACTIONS = 17
FUNCTIONCODE_GETTRANSACTIONINFO = 18
FUNCTIONCODE_GETACCOUNTHISTORY = 19
FUNCTIONCODE_GETCALENDAR = 20
FUNCTIONCODE_GETPOSITIONRATIOS = 21
FUNCTIONCODE_GETSPREADS = 22
FUNCTIONCODE_GETCOMMIMENTS = 23
FUNCTIONCODE_GETORDERBOOK = 24
FUNCTIONCODE_GETAUTOCHARTIST = 25
FUNCTIONCODE_STREAMPRICES = 26
FUNCTIONCODE_STREAMEVENTS = 27

class OandaApi(object):

""""""
DEBUG = False
#----------------------------------------------------------------------
def __init__(self):
    """Constructor"""
    self.token = ''
    self.accountId = ''
    self.headers = {}
    self.restDomain = ''
    self.streamDomain = ''
    self.session = None
    
    self.functionSetting = {}
    
    self.active = False         # API的工作狀態(tài)
    
    self.reqID = 0              # 請求編號
    self.reqQueue = Queue()     # 請求隊(duì)列
    self.reqThread = Thread(target=self.processQueue)   # 請求處理線程
    
    self.streamPricesThread = Thread(target=self.processStreamPrices)   # 實(shí)時(shí)行情線程
    self.streamEventsThread = Thread(target=self.processStreamEvents)   # 實(shí)時(shí)事件線程(成交等)        
#----------------------------------------------------------------------
def init(self, settingName, token, accountId):
    """初始化接口"""
    self.restDomain = API_SETTING[settingName]['rest']
    self.streamDomain = API_SETTING[settingName]['stream']
    self.session = requests.Session()
    
    self.token = token
    self.accountId = accountId
    
    self.headers['Authorization'] = 'Bearer ' + self.token
    
    self.initFunctionSetting(FUNCTIONCODE_GETINSTRUMENTS, {'path': '/v1/instruments',
                                                      'method': 'GET'})
    
    self.initFunctionSetting(FUNCTIONCODE_GETPRICES, {'path': '/v1/prices',
                                                      'method': 'GET'})        
    
    self.initFunctionSetting(FUNCTIONCODE_GETPRICEHISTORY, {'path': '/v1/candles',
                                                            'method': 'GET'})
    
    self.initFunctionSetting(FUNCTIONCODE_GETACCOUNTS, {'path': '/v1/accounts',
                                                      'method': 'GET'})  
    
    self.initFunctionSetting(FUNCTIONCODE_GETACCOUNTINFO, {'path': '/v1/accounts/%s' %self.accountId,
                                                      'method': 'GET'})    
    
    self.initFunctionSetting(FUNCTIONCODE_GETORDERS, {'path': '/v1/accounts/%s/orders' %self.accountId,
                                                      'method': 'GET'})        
    
    self.initFunctionSetting(FUNCTIONCODE_SENDORDER, {'path': '/v1/accounts/%s/orders' %self.accountId,
                                                      'method': 'POST'})     
    
    self.initFunctionSetting(FUNCTIONCODE_GETORDERINFO, {'path': '/v1/accounts/%s/orders' %self.accountId,
                                                      'method': 'GET'})     
    
    self.initFunctionSetting(FUNCTIONCODE_MODIFYORDER, {'path': '/v1/accounts/%s/orders' %self.accountId,
                                                      'method': 'PATCH'})    
    
    self.initFunctionSetting(FUNCTIONCODE_CANCELORDER, {'path': '/v1/accounts/%s/orders' %self.accountId,
                                                      'method': 'DELETE'})             
    
    self.initFunctionSetting(FUNCTIONCODE_GETTRADES, {'path': '/v1/accounts/%s/trades' %self.accountId,
                                                      'method': 'GET'})        

    self.initFunctionSetting(FUNCTIONCODE_GETTRADEINFO, {'path': '/v1/accounts/%s/trades' %self.accountId,
                                                         'method': 'GET'})     
    
    self.initFunctionSetting(FUNCTIONCODE_MODIFYTRADE, {'path': '/v1/accounts/%s/trades' %self.accountId,
                                                        'method': 'PATCH'})    
    
    self.initFunctionSetting(FUNCTIONCODE_CLOSETRADE, {'path': '/v1/accounts/%s/trades' %self.accountId,
                                                       'method': 'DELETE'})     
    
    self.initFunctionSetting(FUNCTIONCODE_GETPOSITIONS, {'path': '/v1/accounts/%s/positions' %self.accountId,
                                                         'method': 'GET'})     
    
    self.initFunctionSetting(FUNCTIONCODE_GETPOSITIONINFO, {'path': '/v1/accounts/%s/positions' %self.accountId,
                                                            'method': 'GET'})    
    
    self.initFunctionSetting(FUNCTIONCODE_CLOSEPOSITION, {'path': '/v1/accounts/%s/positions' %self.accountId,
                                                          'method': 'DELETE'})            
    
    self.initFunctionSetting(FUNCTIONCODE_GETTRANSACTIONS, {'path': '/v1/accounts/%s/transactions' %self.accountId,
                                                            'method': 'GET'})    
    
    self.initFunctionSetting(FUNCTIONCODE_GETTRANSACTIONINFO, {'path': '/v1/accounts/%s/transactions' %self.accountId,
                                                               'method': 'GET'})    
    
    self.initFunctionSetting(FUNCTIONCODE_GETACCOUNTHISTORY, {'path': '/v1/accounts/%s/alltransactions' %self.accountId,
                                                              'method': 'GET'})     
    
    self.initFunctionSetting(FUNCTIONCODE_GETCALENDAR, {'path': '/labs/v1/calendar',
                                                        'method': 'GET'})           
    
    self.initFunctionSetting(FUNCTIONCODE_GETPOSITIONRATIOS, {'path': '/labs/v1/historical_position_ratios',
                                                              'method': 'GET'})    
    
    self.initFunctionSetting(FUNCTIONCODE_GETSPREADS, {'path': '/labs/v1/spreads',
                                                       'method': 'GET'})    
    
    self.initFunctionSetting(FUNCTIONCODE_GETCOMMIMENTS, {'path': '/labs/v1/commitments',
                                                          'method': 'GET'})    
    
    self.initFunctionSetting(FUNCTIONCODE_GETORDERBOOK, {'path': '/labs/v1/orderbook_data',
                                                         'method': 'GET'})    
    
    self.initFunctionSetting(FUNCTIONCODE_GETAUTOCHARTIST, {'path': '/labs/v1/autochartist',
                                                            'method': 'GET'})  
    
    self.initFunctionSetting(FUNCTIONCODE_GETAUTOCHARTIST, {'path': '/labs/v1/autochartist',
                                                            'method': 'GET'})  
    
    self.initFunctionSetting(FUNCTIONCODE_STREAMPRICES, {'path': '/v1/prices',
                                                         'method': 'GET'})  
    
    self.initFunctionSetting(FUNCTIONCODE_STREAMEVENTS, {'path': '/v1/events',
                                                         'method': 'GET'})          
    
    
    self.active = True
    self.reqThread.start()
    self.streamEventsThread.start()
    self.streamPricesThread.start()
    
#----------------------------------------------------------------------
def exit(self):
    """退出接口"""
    if self.active:
        self.active = False
        self.reqThread.join()
    
#----------------------------------------------------------------------
def initFunctionSetting(self, code, setting):
    """初始化API功能字典"""
    self.functionSetting[code] = setting
    
#----------------------------------------------------------------------
def processRequest(self, req):
    """發(fā)送請求并通過回調(diào)函數(shù)推送數(shù)據(jù)結(jié)果"""
    url = req['url']
    method = req['method']
    params = req['params']
    
    stream = False
    if 'stream' in req:
        stream = req['stream']

    if method in ['GET', 'DELETE']:
        myreq = requests.Request(method, url, headers=self.headers, params=params)
    elif method in ['POST', 'PATCH']:
        myreq = requests.Request(method, url, headers=self.headers, data=params)
    pre = myreq.prepare()

    r = None
    error = None
    
    try:
        r = self.session.send(pre, stream=stream)
    except Exception, e:
        error = e

    return r, error

#----------------------------------------------------------------------
def processQueue(self):
    """處理請求隊(duì)列中的請求"""
    while self.active:
        try:
            req = self.reqQueue.get(block=True, timeout=1)  # 獲取請求的阻塞為一秒
            callback = req['callback']
            reqID = req['reqID']
            
            r, error = self.processRequest(req)
            
            if r:
                try:
                    data = r.json()
                    if self.DEBUG:
                        print callback.__name__                        
                    callback(data, reqID)    
                except Exception, e:                  
                    self.onError(str(e), reqID)                      
            else:                
                self.onError(error, reqID)
        except Empty:
            pass
        
#----------------------------------------------------------------------
def sendRequest(self, code, params, callback, optional=''):
    """發(fā)送請求"""
    setting = self.functionSetting[code]
    
    url = self.restDomain + setting['path']
    if optional:
        url = url + '/' + optional
        
    self.reqID += 1
        
    req = {'url': url,
           'method': setting['method'],
           'params': params,
           'callback': callback,
           'reqID': self.reqID}
    self.reqQueue.put(req)
    
    return self.reqID

#----------------------------------------------------------------------
def onError(self, error, reqID):
    """錯誤信息回調(diào)"""
    print error, reqID
        
#----------------------------------------------------------------------
def getInstruments(self, params):
    """查詢可交易的合約列表"""
    return self.sendRequest(FUNCTIONCODE_GETINSTRUMENTS, params, self.onGetInstruments)
    
#----------------------------------------------------------------------
def onGetInstruments(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID
    
#----------------------------------------------------------------------
def getPrices(self, params):
    """查詢價(jià)格"""
    return self.sendRequest(FUNCTIONCODE_GETPRICES, params, self.onGetPrices)
    
#----------------------------------------------------------------------
def onGetPrices(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID
    
#----------------------------------------------------------------------
def getPriceHisory(self, params):
    """查詢歷史價(jià)格數(shù)據(jù)"""
    return self.sendRequest(FUNCTIONCODE_GETPRICEHISTORY, params, self.onGetPriceHistory)
    
#----------------------------------------------------------------------
def onGetPriceHistory(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID    
    
#----------------------------------------------------------------------
def getAccounts(self):
    """查詢用戶的所有賬戶"""
    return self.sendRequest(FUNCTIONCODE_GETACCOUNTS, {}, self.onGetAccounts)

#----------------------------------------------------------------------
def onGetAccounts(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID   
    
#----------------------------------------------------------------------
def getAccountInfo(self):
    """查詢賬戶數(shù)據(jù)"""
    return self.sendRequest(FUNCTIONCODE_GETACCOUNTINFO, {}, self.onGetAccountInfo)

#----------------------------------------------------------------------
def onGetAccountInfo(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID   
    
#----------------------------------------------------------------------
def getOrders(self, params):
    """查詢所有委托"""
    return self.sendRequest(FUNCTIONCODE_GETORDERS, params, self.onGetOrders)

#----------------------------------------------------------------------
def onGetOrders(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID     

#----------------------------------------------------------------------
def sendOrder(self, params):
    """發(fā)送委托"""
    return self.sendRequest(FUNCTIONCODE_SENDORDER, params, self.onSendOrder)

#----------------------------------------------------------------------
def onSendOrder(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID         

#----------------------------------------------------------------------
def getOrderInfo(self, optional):
    """查詢委托信息"""
    return self.sendRequest(FUNCTIONCODE_GETORDERINFO, {}, self.onGetOrderInfo, optional)

#----------------------------------------------------------------------
def onGetOrderInfo(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID     
    
#----------------------------------------------------------------------
def modifyOrder(self, params, optional):
    """修改委托"""
    return self.sendRequest(FUNCTIONCODE_MODIFYORDER, params, self.onModifyOrder, optional)

#----------------------------------------------------------------------
def onModifyOrder(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID      

#----------------------------------------------------------------------
def cancelOrder(self, optional):
    """查詢委托信息"""
    return self.sendRequest(FUNCTIONCODE_CANCELORDER, {}, self.onCancelOrder, optional)

#----------------------------------------------------------------------
def onCancelOrder(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID     

#----------------------------------------------------------------------
def getTrades(self, params):
    """查詢所有倉位"""
    return self.sendRequest(FUNCTIONCODE_GETTRADES, params, self.onGetTrades)

#----------------------------------------------------------------------
def onGetTrades(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID     

#----------------------------------------------------------------------
def getTradeInfo(self, optional):
    """查詢倉位信息"""
    return self.sendRequest(FUNCTIONCODE_GETTRADEINFO, {}, self.onGetTradeInfo, optional)

#----------------------------------------------------------------------
def onGetTradeInfo(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID     
    
#----------------------------------------------------------------------
def modifyTrade(self, params, optional):
    """修改倉位"""
    return self.sendRequest(FUNCTIONCODE_MODIFYTRADE, params, self.onModifyTrade, optional)

#----------------------------------------------------------------------
def onModifyTrade(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID      

#----------------------------------------------------------------------
def closeTrade(self, optional):
    """平倉"""
    return self.sendRequest(FUNCTIONCODE_CLOSETRADE, {}, self.onCloseTrade, optional)

#----------------------------------------------------------------------
def onCloseTrade(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID         

#----------------------------------------------------------------------
def getPositions(self):
    """查詢所有匯總倉位"""
    return self.sendRequest(FUNCTIONCODE_GETPOSITIONS, {}, self.onGetPositions)

#----------------------------------------------------------------------
def onGetPositions(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID  
    
#----------------------------------------------------------------------
def getPositionInfo(self, optional):
    """查詢匯總倉位信息"""
    return self.sendRequest(FUNCTIONCODE_GETPOSITIONINFO, {}, self.onGetPositionInfo, optional)

#----------------------------------------------------------------------
def onGetPositionInfo(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID         

#----------------------------------------------------------------------
def closePosition(self, optional):
    """平倉匯總倉位信息"""
    return self.sendRequest(FUNCTIONCODE_CLOSEPOSITION, {}, self.onClosePosition, optional)

#----------------------------------------------------------------------
def onClosePosition(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID      


#----------------------------------------------------------------------
def getTransactions(self, params):
    """查詢所有資金變動"""
    return self.sendRequest(FUNCTIONCODE_GETTRANSACTIONS, params, self.onGetTransactions)

#----------------------------------------------------------------------
def onGetTransactions(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID  
    
#----------------------------------------------------------------------
def getTransactionInfo(self, optional):
    """查詢資金變動信息"""
    return self.sendRequest(FUNCTIONCODE_GETTRANSACTIONINFO, {}, self.onGetTransactionInfo, optional)

#----------------------------------------------------------------------
def onGetTransactionInfo(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID   
    
#----------------------------------------------------------------------
def getAccountHistory(self):
    """查詢賬戶資金變動歷史"""
    return self.sendRequest(FUNCTIONCODE_GETACCOUNTHISTORY, {}, self.onGetAccountHistory)

#----------------------------------------------------------------------
def onGetAccountHistory(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID      

#----------------------------------------------------------------------
def getCalendar(self, params):
    """查詢?nèi)諝v"""
    return self.sendRequest(FUNCTIONCODE_GETCALENDAR, params, self.onGetCalendar)

#----------------------------------------------------------------------
def onGetCalendar(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID       
    
#----------------------------------------------------------------------
def getPositionRatios(self, params):
    """查詢持倉比例"""
    return self.sendRequest(FUNCTIONCODE_GETPOSITIONRATIOS, params, self.onGetPositionRatios)

#----------------------------------------------------------------------
def onGetPositionRatios(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID  
    
#----------------------------------------------------------------------
def getSpreads(self, params):
    """查詢所有倉位"""
    return self.sendRequest(FUNCTIONCODE_GETSPREADS, params, self.onGetSpreads)

#----------------------------------------------------------------------
def onGetSpreads(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID       
    
#----------------------------------------------------------------------
def getCommitments(self, params):
    """查詢交易商持倉情況"""
    return self.sendRequest(FUNCTIONCODE_GETCOMMIMENTS, params, self.onGetCommitments)

#----------------------------------------------------------------------
def onGetCommitments(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID       

#----------------------------------------------------------------------
def getOrderbook(self, params):
    """查詢訂單簿"""
    return self.sendRequest(FUNCTIONCODE_GETORDERBOOK, params, self.onGetOrderbook)

#----------------------------------------------------------------------
def onGetOrderbook(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID       
    
#----------------------------------------------------------------------
def getAutochartist(self, params):
    """查詢Autochartist識別的模式"""
    return self.sendRequest(FUNCTIONCODE_GETAUTOCHARTIST, params, self.onGetAutochartist)

#----------------------------------------------------------------------
def onGetAutochartist(self, data, reqID):
    """回調(diào)函數(shù)"""
    print data, reqID   
    
#----------------------------------------------------------------------
def onPrice(self, data):
    """行情推送"""
    print data
    
#----------------------------------------------------------------------
def onEvent(self, data):
    """事件推送(成交等)"""
    print data
    
#----------------------------------------------------------------------
def processStreamPrices(self):
    """獲取價(jià)格推送"""
    # 首先獲取所有合約的代碼
    setting = self.functionSetting[FUNCTIONCODE_GETINSTRUMENTS]
    req = {'url': self.restDomain + setting['path'],
           'method': setting['method'],
           'params': {'accountId': self.accountId}}
    r, error = self.processRequest(req)
    if r:
        try:
            data = r.json()
            symbols = [d['instrument'] for d in data['instruments']]   
        except Exception, e:
            self.onError(e, -1)
            return
    else:
        self.onError(error, -1)
        return

    # 然后訂閱所有的合約行情
    setting = self.functionSetting[FUNCTIONCODE_STREAMPRICES]
    params = {'accountId': self.accountId,
              'instruments': ','.join(symbols)}
    req = {'url': self.streamDomain + setting['path'],
           'method': setting['method'],
           'params': params,
           'stream': True}      
    r, error = self.processRequest(req)
    
    if r:
        for line in r.iter_lines():
            if line:
                try:
                    msg = json.loads(line)
                    
                    if self.DEBUG:
                        print self.onPrice.__name__
                        
                    self.onPrice(msg)
                except Exception, e:
                    self.onError(e, -1)
            
            if not self.active:
                break
    else:
        self.onError(error, -1)

#----------------------------------------------------------------------
def processStreamEvents(self):
    """獲取事件推送"""
    setting = self.functionSetting[FUNCTIONCODE_STREAMEVENTS]
    req = {'url': self.streamDomain + setting['path'],
           'method': setting['method'],
           'params': {},
           'stream': True}
    r, error = self.processRequest(req)
    if r:
        for line in r.iter_lines():
            if line:
                try:
                    msg = json.loads(line)
                    
                    if self.DEBUG:
                        print self.onEvent.__name__
                        
                    self.onEvent(msg)
                except Exception, e:
                    self.onError(e, -1)
            
            if not self.active:
                break
    else:
        self.onError(error, -1)
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template