首页  >  问答  >  正文

json - python连oanda的模拟交易api下订单问题第三问

这次我想以现时市场价买入50份USD_CAD合约
程序:
import requests
import json

显示当前USD_CAD的汇率------------------------------------------------------------------------------------------

url = 'https://api-fxpractice.oanda....'
instruments = 'USD_CAD'
account_id = 'cawa11' #用户名
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)

以现时市场价买入50份USD_CAD合约---------------------------------------------------------------------------------

url = 'https://api-fxpractice.oanda....' #5898545为账号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())

第二段程序报错:
{"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}
但通过第一段程序的正常运行access token是没有问题的,同时http://developer.oanda.com/do...中错误列表错误列表

HTTP状态代码 HTTP状态消息 信息                        详细说明
    4           401       擅自 提供不允许该请求的访问令牌进行 确保与请求提供的访问令牌是正确的,是有效的。请参阅认证以获取更多细节。
    

附上一份oanda公司的文档:
import http.client
import urllib
import json
import datetime

该文件包含一些非常简单的对OANDA API的调用

这表明如果超过阈值,则获取仪器的当前价格并进行交易

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)

这样设定了与上述价格相同的订单,当价格跨越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()
此程序可能时间比较久其api地址与现在的api地址不同

为情所困为情所困2711 天前1045

全部回复(2)我来回复

  • 某草草

    某草草2017-05-18 10:56:22

    账户有权限读取数据,不一定有权限下单
    你现在的问题都是api里的东西,应该仔细研究api文档,不然你后面会遇到无数类似的问题

    除非刚好有人对这份api熟悉,不然也给不了你什么帮助
    =========================================
    如果你是从网站下单监听的话你就会发现你的url和data完全和网站的不一样

    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)

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

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-18 10:56:22

    @prolifes:

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

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

    雷雷

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

    编码:utf-8

    导入 json
    导入请求
    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
    FUNCTION CODE_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
    FUNC TIONCODE_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

    OandaApi 类(对象):

    雷雷

    回复
    0
  • 取消回复