Example #1
0
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine

        # 当前日期
        self.today = todayDate()

        # 主力合约代码映射字典,key为具体的合约代码(如IF1604),value为主力合约代码(如IF0000)
        self.activeSymbolDict = {}

        # Tick对象字典
        self.tickDict = {}

        # K线对象字典
        self.barDict = {}
        self.m5barDict = {}
        self.daybarDict = {}

        #负责执行数据库插入的单独线程相关
        self.active = False  #工作状态
        self.queue = Queue()  #队列
        self.thread = Thread(target=self.run)  #线程

        # 交易时间字典
        self.timeDict = {}

        # 每分钟的的第一个tick的成交量
        self.firstvolumes = {}

        # 载入设置,订阅行情
        self.loadSetting()
Example #2
0
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine

        # 是否登录CTP
        self.ctpConnected = False
        # 数据库客户端
        self.dbClient = None
        # 主力合约检查
        self.contractsOK = False

        # 期货账号
        self.userID = ''

        # 当前日期
        self.today = todayDate()
        
        # 主力合约代码映射字典,key为具体的合约代码(如IF1604),value为主力合约代码(如IF0000)
        self.activeSymbolDict = {}
        
        # Tick对象字典
        self.tickDict = {}
        
        # K线对象字典
        self.barDict = {}

        # 负责执行数据库插入的单独线程相关
        self.active = False                     # 工作状态
        self.queue = Queue()                    # 队列
        self.thread = Thread(target=self.run)   # 线程
Example #3
0
 def __init__(self, mainEngine, eventEngine):
     """Constructor"""
     self.mainEngine = mainEngine
     self.eventEngine = eventEngine
     
     # 当前日期
     self.today = todayDate()
     
     # 保存策略实例的字典
     # key为策略名称,value为策略实例,注意策略名称不允许重复
     self.strategyDict = {}
     
     # 保存vtSymbol和策略实例映射的字典(用于推送tick数据)
     # 由于可能多个strategy交易同一个vtSymbol,因此key为vtSymbol
     # value为包含所有相关strategy对象的list
     self.tickStrategyDict = {}
     
     # 保存vtOrderID和strategy对象映射的字典(用于推送order和trade数据)
     # key为vtOrderID,value为strategy对象
     self.orderStrategyDict = {}     
     
     # 本地停止单编号计数
     self.stopOrderCount = 0
     # stopOrderID = STOPORDERPREFIX + str(stopOrderCount)
     
     # 本地停止单字典
     # key为stopOrderID,value为stopOrder对象
     self.stopOrderDict = {}             # 停止单撤销后不会从本字典中删除
     self.workingStopOrderDict = {}      # 停止单撤销后会从本字典中删除
     
     # 注册事件监听
     self.registerEvent()
Example #4
0
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine

        # 当前日期
        # Date of today
        self.today = todayDate()

        # 保存策略实例的字典
        # key为策略名称,value为策略实例,注意策略名称不允许重复

        # Dictionary: record strategy instances
        # key: name of strategies, value: strategy instance, notice that the names of strategies cannot repeat
        self.strategyDict = {}

        # 保存vtSymbol和策略实例映射的字典(用于推送tick数据)
        # 由于可能多个strategy交易同一个vtSymbol,因此key为vtSymbol
        # value为包含所有相关strategy对象的list

        # Dictionary: record market systems (combination of vtSymbol and strategies) (to push tick data)
        # key: vtSymbol, more than one strategies can be used to trade one vtSymbol
        # value: list the contains all the strategies
        self.tickStrategyDict = {}

        # 保存vtOrderID和strategy对象映射的字典(用于推送order和trade数据)
        # key为vtOrderID,value为strategy对象

        # Dictionary: record combination of vtOrderID and strategy (to push order and trade information)
        # key: vtOrderID; value: strategy instance
        self.orderStrategyDict = {}

        # 本地停止单编号计数
        # count local stop orders
        self.stopOrderCount = 0
        # stopOrderID = STOPORDERPREFIX + str(stopOrderCount)

        # 本地停止单字典
        # key为stopOrderID,value为stopOrder对象

        # Dictionary: local stop order
        # key: StopOrderID; value: stopOrder instence
        self.stopOrderDict = {}  # 停止单撤销后不会从本字典中删除
        self.workingStopOrderDict = {}  # 停止单撤销后会从本字典中删除

        # 持仓缓存字典
        # key为vtSymbol,value为PositionBuffer对象

        # Dictionary: buffer position
        # key: vtSymbol, value: PositionBuffer
        self.posBufferDict = {}

        # 引擎类型为实盘
        # set engine type to real trading
        self.engineType = ENGINETYPE_TRADING

        # 注册事件监听
        # register event
        self.registerEvent()
Example #5
0
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine

        # 当前日期
        self.today = todayDate()

        # 保存策略实例的字典
        # key为策略名称,value为策略实例,注意策略名称不允许重复
        self.strategyDict = {}

        # 保存vtSymbol和策略实例映射的字典(用于推送tick数据)
        # 由于可能多个strategy交易同一个vtSymbol,因此key为vtSymbol
        # value为包含所有相关strategy对象的list
        self.tickStrategyDict = {}

        # 保存vtOrderID和strategy对象映射的字典(用于推送order和trade数据)
        # key为vtOrderID,value为strategy对象
        self.orderStrategyDict = {}

        # 本地停止单编号计数
        self.stopOrderCount = 0
        # stopOrderID = STOPORDERPREFIX + str(stopOrderCount)

        # 本地停止单字典
        # key为stopOrderID,value为stopOrder对象
        self.stopOrderDict = {}  # 停止单撤销后不会从本字典中删除
        self.workingStopOrderDict = {}  # 停止单撤销后会从本字典中删除

        # 保存策略名称和委托号列表的字典
        # key为name,value为保存orderID(限价+本地停止)的集合
        self.strategyOrderDict = {}

        # 成交号集合,用来过滤已经收到过的成交推送
        self.tradeSet = set()

        # 引擎类型为实盘
        self.engineType = ENGINETYPE_TRADING

        # RQData数据服务
        self.rq = None

        # RQData能获取的合约代码列表
        self.rqSymbolSet = set()

        # 初始化RQData服务
        self.initRqData()

        # 注册日式事件类型
        self.mainEngine.registerLogEvent(EVENT_CTA_LOG)

        # 注册事件监听
        self.registerEvent()
Example #6
0
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine  # 指向主引擎
        self.eventEngine = eventEngine  # 指向事件引擎

        # 当前日期
        self.today = todayDate()

        # 主力合约代码映射字典,key为具体的合约代码(如IF1604),value为主力合约代码(如IF0000)
        self.activeSymbolDict = {}

        # 合约代码映射字典,key为vtSymbol(如IF1604),value为字典对象,包括该vtSymbol的各种属性以及生成后的合约对象
        # {'EUR.USD':{'currency':'USD','contract':contract   }}
        #
        self.vtSymbolContractDict = {
        }  #  vtSymbol 和合约对照表,载入时生成  key 为 vtSymbol,value为列表,合约和历史数据接口

        # Tick对象字典
        self.tickDict = {}

        # K线对象字典
        self.barDict = {}

        # Timer计时器
        self.sbTimerCount = 0
        self.sbTimerTrigger = 60  # 每秒都会收到一次Timer事件,60秒检查一次
        self.minute_timer_counter = 0

        # 每一次加载模块

        self.pre_minute = 0
        self.pre_hour = 0
        self.pre_day = 0  # 当前day变化。也要同时检查一下EST 的day 是不是也变了。

        self.initForStrategyDays = 5  # 策略载入时,自动下载 5 天数据给策略初始化。
        self.fromStrategyInit = True  #  是否来自策略请求,是:只处理该合约,否则处理全部json的合约

        # tickerId下载对应的参数
        self.tickerIdKwargsDict = {
        }  # 请求历史数据时把 tickerId及参数存入此字典中。回调收到后再删除。最后再检查一下是否还有内容。如有则表示下载不成功。
        self.missingDataReDownloadTimes = 0  #

        # 载入设置,生成合约
        self.loadSetting()  # 历史数据不必订阅,因为不需要实时行情

        # 补全json中设置合约的历史数据
        thread = Thread(target=self.downLoadAllDataManager,
                        kwargs=({
                            'days': 500,
                        }))  #补全最近500天的。只要补一次就行,平时策略启动就自动补5天
        thread.start()
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine
        
        # 当前日期
        self.today = todayDate()
        
        # 保存策略实例的字典
        # key为策略名称,value为策略实例,注意策略名称不允许重复
        self.strategyDict = {}
        
        # 保存vtSymbol和策略实例映射的字典(用于推送tick数据)
        # 由于可能多个strategy交易同一个vtSymbol,因此key为vtSymbol
        # value为包含所有相关strategy对象的list
        self.tickStrategyDict = {}
        
        # 保存vtOrderID和strategy对象映射的字典(用于推送order和trade数据)
        # key为vtOrderID,value为strategy对象
        self.orderStrategyDict = {}     
        
        # 本地停止单编号计数
        self.stopOrderCount = 0
        # stopOrderID = STOPORDERPREFIX + str(stopOrderCount)
        
        # 本地停止单字典
        # key为stopOrderID,value为stopOrder对象
        self.stopOrderDict = {}             # 停止单撤销后不会从本字典中删除
        self.workingStopOrderDict = {}      # 停止单撤销后会从本字典中删除
        
        # 持仓缓存字典
        # key为vtSymbol,value为PositionBuffer对象
        self.posBufferDict = {}
        
        # 引擎类型为实盘
        self.engineType = ENGINETYPE_TRADING
        
        # 注册事件监听
        self.eventEngine.register(EVENT_GATEWAY, self.processGatewayEvent)


        self.positionDict_inf2={}
        self.positionDict_inf1={}
        self.posGatwayDict_inf2={}
        self.posGatwayDict_inf1={}
        self.dbCon = rwDbConnection()

        self.gatewayNameDict={}
Example #8
0
    def __init__(self, mainEngine, eventEngine, context=' '):
        """Constructor"""
        self.context = context
        self.doCheck()
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine
        #=================================================================
        self.posFileName = "PositionInfo.json"
        self.mPosInfo = {}
        self.loadPosInfo()
        #=================================================================
        # 当前日期

        self.today = todayDate()
        self.dbtype = 'mongodb'
        # 保存策略实例的字典
        # key为策略名称,value为策略实例,注意策略名称不允许重复
        self.strategyDict = {}

        # 保存vtSymbol和策略实例映射的字典(用于推送tick数据)
        # 由于可能多个strategy交易同一个vtSymbol,因此key为vtSymbol
        # value为包含所有相关strategy对象的list
        self.tickStrategyDict = {}

        # 保存vtOrderID和strategy对象映射的字典(用于推送order和trade数据)
        # key为vtOrderID,value为strategy对象
        self.orderStrategyDict = {}

        # 本地停止单编号计数
        self.stopOrderCount = 0
        # stopOrderID = STOPORDERPREFIX + str(stopOrderCount)

        # 本地停止单字典
        # key为stopOrderID,value为stopOrder对象
        self.stopOrderDict = {}  # 停止单撤销后不会从本字典中删除
        self.workingStopOrderDict = {}  # 停止单撤销后会从本字典中删除

        # 持仓缓存字典
        # key为vtSymbol,value为PositionBuffer对象
        self.posBufferDict = {}

        # 引擎类型为实盘
        self.engineType = ENGINETYPE_TRADING

        # 注册事件监听
        self.registerEvent()
Example #9
0
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine

        # 当前日期
        self.today = todayDate()

        # 主力合约代码映射字典,key为具体的合约代码(如IF1604),value为主力合约代码(如IF0000)
        self.activeSymbolDict = {}

        # Tick对象字典
        self.tickDict = {}

        # K线对象字典
        self.barDict = {}

        # 载入设置,订阅行情
        self.loadSetting()
Example #10
0
 def __init__(self, mainEngine, eventEngine):
     """Constructor"""
     self.mainEngine = mainEngine
     self.eventEngine = eventEngine
     
     # 当前日期
     self.today = todayDate()
     
     # 主力合约代码映射字典,key为具体的合约代码(如IF1604),value为主力合约代码(如IF0000)
     self.activeSymbolDict = {}
     
     # Tick对象字典
     self.tickDict = {}
     
     # K线对象字典
     self.barDict = {}
     
     # 载入设置,订阅行情
     self.loadSetting()
Example #11
0
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine

        # 当前日期
        self.today = todayDate()

        # 保存策略实例的字典
        # key为策略名称,value为策略实例,注意策略名称不允许重复
        self.strategyDict = {}

        # 保存vtSymbol和策略实例映射的字典(用于推送tick数据)
        # 由于可能多个strategy交易同一个vtSymbol,因此key为vtSymbol
        # value为包含所有相关strategy对象的list
        self.tickStrategyDict = {}

        # 保存vtOrderID和strategy对象映射的字典(用于推送order和trade数据)
        # key为vtOrderID,value为strategy对象
        self.orderStrategyDict = {}

        # 本地停止单编号计数
        self.stopOrderCount = 0
        # stopOrderID = STOPORDERPREFIX + str(stopOrderCount)

        # 本地停止单字典
        # key为stopOrderID,value为stopOrder对象
        self.stopOrderDict = {}  # 停止单撤销后不会从本字典中删除
        self.workingStopOrderDict = {}  # 停止单撤销后会从本字典中删除

        # 持仓缓存字典
        # key为vtSymbol,value为PositionBuffer对象
        self.posBufferDict = {}

        # 成交号集合,用来过滤已经收到过的成交推送
        self.tradeSet = set()

        # 引擎类型为实盘
        self.engineType = ENGINETYPE_TRADING

        # 注册事件监听
        self.registerEvent()
Example #12
0
 def __init__(self, mainEngine, eventEngine):
     """Constructor"""
     self.mainEngine = mainEngine
     self.eventEngine = eventEngine
     
     # 当前日期
     self.today = todayDate()
     
     # 保存策略实例的字典
     # key为策略名称,value为策略实例,注意策略名称不允许重复
     self.strategyDict = {}
     
     # 保存vtSymbol和策略实例映射的字典(用于推送tick数据)
     # 由于可能多个strategy交易同一个vtSymbol,因此key为vtSymbol
     # value为包含所有相关strategy对象的list
     self.tickStrategyDict = {}
     
     # 保存vtOrderID和strategy对象映射的字典(用于推送order和trade数据)
     # key为vtOrderID,value为strategy对象
     self.orderStrategyDict = {}     
     
     # 本地停止单编号计数
     self.stopOrderCount = 0
     # stopOrderID = STOPORDERPREFIX + str(stopOrderCount)
     
     # 本地停止单字典
     # key为stopOrderID,value为stopOrder对象
     self.stopOrderDict = {}             # 停止单撤销后不会从本字典中删除
     self.workingStopOrderDict = {}      # 停止单撤销后会从本字典中删除
     
     # 持仓缓存字典
     # key为vtSymbol,value为PositionBuffer对象
     self.posBufferDict = {}
     
     # 成交号集合,用来过滤已经收到过的成交推送
     self.tradeSet = set()
     
     # 引擎类型为实盘
     self.engineType = ENGINETYPE_TRADING
     
     # 注册事件监听
     self.registerEvent()
Example #13
0
 def __init__(self, mainEngine, eventEngine):
     """Constructor"""
     self.mainEngine = mainEngine
     self.eventEngine = eventEngine
     
     # 当前日期
     self.today = todayDate()
     
     # 主力合约代码映射字典,key为具体的合约代码(如IF1703),value为主力合约代码(如IF0000)
     self.activeSymbolDict = {}
     
     # Tick对象字典
     self.tickDict = {}
     
     # K线对象字典
     self.barDict = {}
     
     # 负责执行数据库插入的单独线程相关
     self.active = False                     # 工作状态
     self.queue = Queue()                    # 队列
     self.thread = Thread(target=self.run)   # 线程
Example #14
0
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine

        # 当前日期
        self.today = todayDate()

        #数据库类型mysql/mongodb by hw
        self.dbtype = 'mysql'
        #mysql连接标志
        self.__mysqlConnected = False

        # 保存策略实例的字典
        # key为策略名称,value为策略实例,注意策略名称不允许重复
        self.strategyDict = {}

        # 保存vtSymbol和策略实例映射的字典(用于推送tick数据)
        # 由于可能多个strategy交易同一个vtSymbol,因此key为vtSymbol
        # value为包含所有相关strategy对象的list
        self.tickStrategyDict = {}

        # 保存vtOrderID和strategy对象映射的字典(用于推送order和trade数据)
        # key为vtOrderID,value为strategy对象
        self.orderStrategyDict = {}

        # 本地停止单编号计数
        self.stopOrderCount = 0
        # stopOrderID = STOPORDERPREFIX + str(stopOrderCount)

        # 本地停止单字典
        # key为stopOrderID,value为stopOrder对象
        self.stopOrderDict = {}  # 停止单撤销后不会从本字典中删除
        self.workingStopOrderDict = {}  # 停止单撤销后会从本字典中删除

        # 持仓缓存字典
        # key为vtSymbol,value为PositionBuffer对象
        self.posBufferDict = {}
        # 注册事件监听
        self.registerEvent()
Example #15
0
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine
        
        # 当前日期
        self.today = todayDate()
        
        # 主力合约代码映射字典,key为具体的合约代码(如IF1604),value为主力合约代码(如IF0000)
        self.activeSymbolDict = {}
        
        # Tick对象字典
        self.tickDict = {}
        
        # K线对象字典
        self.barDict = {}
        
        # 负责执行数据库插入的单独线程相关
        self.active = False                     # 工作状态
        self.queue = Queue()                    # 队列
        self.thread = Thread(target=self.run)   # 线程

        # 载入设置,订阅行情
        self.loadSetting()
Example #16
0
    def __init__(self, mainEngine, eventEngine):
        self.mainEngine = mainEngine
        self.ctaEngine = mainEngine.ctaEngine
        self.eventEngine = eventEngine

        # 当前日期
        self.today = todayDate()

        # Order 对象字典
        self.orderDict = {}

        # Trade 对象字典
        self.tradeDict = {}

        # 复制执行数据库插入的单独线程相关
        self.active = False  #工作状态
        self.queue = Queue()  #队列
        self.thread = Thread(target=self.run)  #线程

        # 载入设置
        self.loadSetting()

        # vtSymbol_pmColletionName_map
        self.vtSymbol_pmColletionName_map = {}
Example #17
0
    def __init__(self, mainEngine, eventEngine):
        """Constructor"""
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine

        # 当前日期
        self.today = todayDate()

        # 保存策略实例的字典
        # key为策略名称,value为策略实例,注意策略名称不允许重复
        self.strategyDict = {}

        # 保存vtSymbol和策略实例映射的字典(用于推送tick数据)
        # 由于可能多个strategy交易同一个vtSymbol,因此key为vtSymbol
        # value为包含所有相关strategy对象的list
        self.tickStrategyDict = {}

        # 保存vtOrderID和strategy对象映射的字典(用于推送order和trade数据)
        # key为vtOrderID,value为strategy对象
        self.orderStrategyDict = {}

        # 保存vtOrderID和在order上关联的信息 (发单时任意填写的信息,用于保存到数据库,方便分析)
        self.orderAppendInfoDict = {}

        #保存gatewayName和strategy对象映射的字典,用于推送balance数据
        self.gatewayNameStrategyDict = {}

        #保存task和strategy对象映射的字典,用于推送task数据
        self.taskStrategyDict = {}

        # 本地停止单编号计数
        self.stopOrderCount = 0
        # stopOrderID = STOPORDERPREFIX + str(stopOrderCount)

        # 本地停止单字典
        # key为stopOrderID,value为stopOrder对象
        self.stopOrderDict = {}  # 停止单撤销后不会从本字典中删除
        self.workingStopOrderDict = {}  # 停止单撤销后会从本字典中删除

        # 预埋单集合
        self.parkedOrderSet = set()
        self.workingParkedOrderSet = set()
        # key为parkedOrderID, value为vtOrderID
        self.parkedOrderMap = {}

        # 持仓缓存字典
        # key为vtSymbol,value为PositionBuffer对象
        self.posBufferDict = {}

        # 成交号集合,用来过滤已经收到过的成交推送
        self.tradeSet = set()

        # 引擎类型为实盘
        self.engineType = ENGINETYPE_TRADING

        # 注册事件监听
        self.eventEngine.register(EVENT_TICK, self.processTickEvent)
        self.eventEngine.register(EVENT_ORDER, self.processOrderEvent)
        self.eventEngine.register(EVENT_TRADE, self.processTradeEvent)
        self.eventEngine.register(EVENT_BALANCE, self.processBalanceEvent)
        self.eventEngine.register(EVENT_POSITION, self.processPositionEvent)
        self.eventEngine.register(EVENT_CTA_TASK, self.processTaskEvent)