`嗨,我正在尝试使用 xAPI 实现交易自动化。使用以下方式进行销售交易效果很好:
这是打开卖出交易,即 cmd = 1 type = 0。 offset = 50 sl = 50 我得到一个带有 5 点追踪止损的未平仓交易。 这正是我所期望的。
当尝试进行买入交易时,cmd = 0 type = 0,使用: offset = -50 sl = -50 买入交易开启,没有止损或追踪止损。 offset = 50 sl = 50 错误 sl/tp 值无效。 offset = 1 sl = -50 错误追踪止损无效。 offset = 0 sl = -50 买入交易开启,没有止损或追踪止损。 offset = -1 sl = -50 买入交易开启,没有止损或追踪止损。 offset = -10 sl = -50 买入交易开启,没有止损或追踪止损。
从这些尝试来看,在我看来,买入交易的 SL 需要为负值,即止损低于交易价格。
我相当确定问题出在偏移上,但无法弄清楚它的头尾。
我期待第一个结果尝试能够发挥作用。`
def open_account():
'''
opens an instanece to the API
'''
# print('open api')
global open_ctr
#open_ctr += 1
host = 'xapia.x-station.eu'
##this is the address for the demo account##'xapia.x- station.eu' real account is 'xapi.xtb.com
port = 5124 ##demo acc 5124 real 5112
USERID = # Account number
PASSWORD = # my password
host = socket.getaddrinfo(host, port)[0][4][0]
global S
global END
context=ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = False
context.load_default_certs()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
S = context.wrap_socket(s, server_hostname=host)
S.connect(('xapia.x-station.eu',5124))
S.settimeout(5)
parameters = {
"command" : "login",
"arguments" : {
"userId": USERID,
"password": PASSWORD
}
}
packet = json.dumps(parameters, indent=4)
S.send(packet.encode("UTF-8"))
END = b'\n\n'
response=b''
while True:
try:
response += S.recv(8192)
except:
print('67 login fail')
open_account
if END in response:
pass
open_ctr+=1
break
def Close_account():
'''
Closes the open Instance
'''
# print('98 close api')
global open_ctr
# open_ctr -= 1
parameters = {
"command" : "logout"
}
packet = json.dumps(parameters, indent=4)
try:
S.send(packet.encode("UTF-8"))
response = S.recv(8192)
open_ctr-=1
except:
#print('Close account Failed ')
Close_account()
def open_a_trade(symbol, price , volume , cmd, sl, offset, tp=0):
'''
opens the trade
'''
end_date=get_server_time()
order_result.iloc[0:0]
order_result.loc[1,'datetime']=end_date
order_result['symbol']=symbol
order_result['cmd']=cmd
order_result['offset']=offset
order_result['sl']=sl
order_result['tp']=tp
order_result['volume']=volume
order_result['price']=price
open_account()
parameters={
"command": "tradeTransaction",
"arguments": {
"tradeTransInfo": {
"cmd": cmd,
"customComment": '',
"expiration": 0,
"offset": offset,
"order": 0,
"price": price,
"sl": sl,
"symbol": symbol,
"type": 0,
"volume": volume
}
}
}
packet = json.dumps(parameters, indent=4)
S.send(packet.encode("UTF-8"))
response_open_trade = S.recv(328192)
## open trade was timing out , changed open response time in open_account to 5s from 3.5s
order_number_response=json.loads(response_open_trade)
if order_number_response['status']==False:
order_result['order_number_response']=order_number_response['status']
print('427 order result')
print(order_result)
order_result.to_csv('order_result.csv', mode='a', index=False, header=False)
else:
order_result['order_number_response']=order_number_response['returnData']['order']
print('427 order result')
print(order_result)
order_result.to_csv('order_result.csv', mode='a', index=False, header=False)
# print('427 open worked')
Close_account()
# set values for the trade
symbol='GBPUSD'
price=.61801
volume=.2
cmd=0
offset=0
sl=-50
tp=0
print('943 ' , sl)
open_a_trade(symbol, price , volume , cmd, sl, offset, tp)
有谁知道有比 xApi Playground 更详细地解释 xapi 的可用资源吗? 我尝试过 xtb 客户支持,他们不为 API 提供任何支持。
抱歉我不懂python,但是为什么你的SL是负值? 这就是我修改交易以使用追踪止损的方法
{
"command": "tradeTransaction",
"arguments": {
"tradeTransInfo": {
"cmd": 1,
"order": xxx,
"symbol": "GBPUSD",
"type": 3,
"volume": 0.2,
"price": 1.29954,
"sl": 1.29707,
"offset": 15
}
}
}