我使用XTB的api xApi。我在进行交易时需要使用“offset”和“sl”的帮助

问题描述 投票:0回答:1

`嗨,我正在尝试使用 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
1个回答
0
投票

抱歉我不懂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
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.