如何使用Python连接TT X_TRADER API以创建自动交易系统?

4 投票
1 回答
2901 浏览
提问于 2025-04-17 14:29

我在内部开发论坛上看到这个问题被提了好几次,所以我想给大家一个简单的例子,教你们如何在Python中快速实现这个功能。

1 个回答

3

首先,注意我们要做的就是连接到相关的 X_TRADER com 对象,所以下面的内容都是适用的:

https://www.tradingtechnologies.com/documents/user%20documents/xtapi_classreference_v7.7.8_dg.pdf

下面是完整的 Python 代码,这段代码会让你订阅一个原油的 3 月 13 日期货:

import pythoncom
from time import sleep
from win32com.client import Dispatch, DispatchWithEvents, getevents
from win32com.client.gencache import EnsureDispatch, EnsureModule

GATE = None
NOTIFY = None

class InstrNotify(getevents('XTAPI.TTInstrNotify')):
    def __init__(self):
        pass

    def Subscribe(self, pInstr):
        self.AttachInstrument(pInstr)
        pInstr.Open(0)

    def OnNotifyFound(self, pNotify=None, pInstr=None):
        pInstr = Dispatch(pInstr)        
        print 'Found instrument:'
        print '--> Contract: %s' % pInstr.Get('Contract')
        print '--> Exchange: %s' % pInstr.Get('Exchange')

    def OnNotifyNotFound(self, pNotify=None, pInstr=None):
        pInstr = Dispatch(pInstr)        
        print 'Unable to find instrument'

    def OnNotifyUpdate(self, pNotify=None, pInstr=None):
        pInstr = Dispatch(pInstr)
        contract = pInstr.Get('Contract')

        bid = pInstr.Get('Bid')
        ask = pInstr.Get('Ask')
        last = pInstr.Get('Last')

        print '[UPDATE] %s: %s/%s' % (contract, bid, ask)


def Connect():
    global NOTIFY, GATE
    #the below is required in order to establish the com-object links
    #that way you don't need to run makepy first
    EnsureModule('{98B8AE14-466F-11D6-A27B-00B0D0F3CCA6}', 0, 1, 0)

    GATE = EnsureDispatch('XTAPI.TTGate')
    NOTIFY = DispatchWithEvents('XTAPI.TTInstrNotify', InstrNotify) 


def main():
    Connect()

    pInstr = EnsureDispatch('XTAPI.TTInstrObj')
    pInstr.Exchange = 'CME-A'
    pInstr.Product  = 'CL'
    pInstr.Contract = 'CL Mar13'
    pInstr.ProdType = 'FUTURE'

    NOTIFY.Subscribe(pInstr)

    for i in range(10):
        pythoncom.PumpWaitingMessages()
        sleep(1.0)

如果你已经启动并运行了 X_TRADER Pro,这段代码会产生类似这样的结果:

Found instrument:
--> Contract: CL Mar13
--> Exchange: CME-A
[UPDATE] CL Mar13: 9760/9764

撰写回答