XTB xAPI开仓交易offset与sl参数配置问题求助
XTB xAPI 自动化交易买入单追踪止损配置问题及资料需求
问题详情
卖出单(做空)正常表现
卖出交易(cmd=1、type=0)设置offset=50、sl=50时,可正常开启5点追踪止损,符合预期。
买入单(做多)异常情况
买入交易(cmd=0、type=0)尝试多组offset与sl组合均未实现预期追踪止损:
offset=-50、sl=-50:成功开仓但未触发止损offset=50、sl=50:返回"无效sl/tp值"错误offset=1、sl=-50:返回"无效追踪止损"错误offset=0/-1/-10搭配sl=-50:成功开仓但无止损
个人判断买入单的sl需设为负值(止损价低于开仓价),但对offset参数的配置逻辑存疑,原本预期offset=-50、sl=-50的组合可正常生效。
额外需求
求比xApi playground更详细的xAPI官方资料,XTB客服未提供相关API技术支持。
相关Python代码
def open_account(): ''' opens an instance to the API ''' global open_ctr 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: open_ctr+=1 break def Close_account(): ''' Closes the open Instance ''' global open_ctr parameters = { "command" : "logout" } packet = json.dumps(parameters, indent=4) try: S.send(packet.encode("UTF-8")) response = S.recv(8192) open_ctr-=1 except: 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) 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)
内容的提问来源于stack exchange,提问作者user144131
相关产品推荐
相关产品推荐

