我正在寻找使用Python向OANDA API发送POST请求以打开订单的方法。他们没有Python封装程序并使用cURL,因此我不得不尝试将cURL转换为Python。我已经使用https://curl.trillworks.com/进行了此操作,但是转换下一个无效。
您可以在此处的第一个绿色POST选项卡下查看OANDA API文档-http://developer.oanda.com/rest-live-v20/order-ep/
这就是我正在使用的。第一个块指定订单详细信息。在这种情况下,EUR_USD工具中的市场订单数量为100个单位,有效时间等于“填充或杀死”:
body=$(cat << EOF
{
"order": {
"units": "100",
"instrument": "EUR_USD",
"timeInForce": "FOK",
"type": "MARKET",
"positionFill": "DEFAULT"
}
}
EOF
)
curl \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SECRET TOKEN" \
-d "$body" \
"https://api-fxpractice.oanda.com/v3/accounts/{ACCOUNT-NUMBER}/orders"
转换为Python:
import requests
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer SECRET TOKEN',
}
data = '$body'
response = requests.post('https://api-fxpractice.oanda.com/v3/accounts/{ACCOUNT-NUMBER}/orders', headers=headers, data=data)
如您所见,我相信“ body = $”部分中存在格式错误,但我不确定。我只是收到一个400错误,“无效值”。
答案 0 :(得分:1)
如果您以JSON格式发送数据,则应将其传递给json
参数而不是data
(explanation,method)。
import requests
headers = {
# 'Content-Type': 'application/json', # will be set automatically
'Authorization': 'Bearer SECRET TOKEN',
}
body = {
"order": {
"units": "100",
"instrument": "EUR_USD",
"timeInForce": "FOK",
"type": "MARKET",
"positionFill": "DEFAULT"
}
}
response = requests.post('https://api-fxpractice.oanda.com/v3/accounts/{ACCOUNT-NUMBER}/orders',
headers=headers, json=body)