Пример #1
0
 def get_orders(self,
                sec_type=SecurityType.ALL,
                market=Market.ALL,
                symbol=None,
                start_time=None,
                end_time=None,
                limit=100,
                is_brief=False):
     params = OrdersParams()
     params.account = self._account
     params.sec_type = sec_type.value
     params.market = market.value
     params.symbol = symbol
     params.start_data = start_time
     params.end_date = end_time
     params.limit = limit
     params.is_brief = is_brief
     request = OpenApiRequest(ORDERS, biz_model=params)
     response_content = self.__fetch_data(request)
     if response_content:
         response = OrdersResponse()
         response.parse_response_content(response_content)
         if response.is_success():
             return response.orders
         else:
             raise ApiException(response.code, response.message)
     return None
Пример #2
0
    def get_contracts(self,
                      symbol,
                      sec_type=SecurityType.STK,
                      currency=Currency.USD,
                      exchange=None):
        params = ContractParams()
        params.account = self._account
        params.symbol = symbol
        if sec_type:
            params.sec_type = sec_type.value
        if currency:
            params.currency = currency.value
        params.exchange = exchange

        request = OpenApiRequest(CONTRACT, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = ContractsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.contracts
            else:
                raise ApiException(response.code, response.message)

        return None
Пример #3
0
    def get_contract(self, symbol, sec_type=SecurityType.STK, currency=None, exchange=None, expiry=None, strike=None,
                     right=None):
        params = ContractParams()
        params.account = self._account
        params.symbol = symbol
        if sec_type:
            params.sec_type = sec_type.value
        if currency:
            params.currency = currency.value
        if expiry:
            params.expiry = expiry
        if strike:
            params.strike = strike
        if right:
            params.right = right
        params.exchange = exchange

        request = OpenApiRequest(CONTRACT, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = ContractsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.contracts[0] if len(response.contracts) == 1 else None
            else:
                raise ApiException(response.code, response.message)

        return None
Пример #4
0
    def place_order(self, order):
        params = PlaceModifyOrderParams()
        params.account = order.account
        params.contract = order.contract
        params.action = order.action
        params.order_type = order.order_type
        params.order_id = order.order_id
        params.quantity = order.quantity
        params.limit_price = order.limit_price
        params.aux_price = order.aux_price
        params.trail_stop_price = order.trail_stop_price
        params.trailing_percent = order.trailing_percent
        params.percent_offset = order.percent_offset
        params.time_in_force = order.time_in_force
        params.outside_rth = order.outside_rth
        request = OpenApiRequest(PLACE_ORDER, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OrderIdResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.order_id == order.order_id
            else:
                raise ApiException(response.code, response.message)

        return False
Пример #5
0
    def get_contracts(self,
                      symbol,
                      sec_type=SecurityType.STK,
                      currency=None,
                      exchange=None):
        """
        批量获取合约
        :param symbol:
        :param sec_type:
        :param currency:
        :param exchange:
        :return: 合约对象列表, 每个列表项的对象信息同 get_contract 返回
        """
        params = ContractParams()
        params.account = self._account
        params.symbols = symbol if isinstance(symbol, list) else [symbol]
        if sec_type:
            params.sec_type = sec_type.value
        if currency:
            params.currency = currency.value
        params.exchange = exchange

        request = OpenApiRequest(CONTRACTS, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = ContractsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.contracts
            else:
                raise ApiException(response.code, response.message)

        return None
Пример #6
0
    def modify_order(self, order, quantity=None, limit_price=None, aux_price=None,
                     trail_stop_price=None, trailing_percent=None, percent_offset=None,
                     time_in_force=None, outside_rth=None):
        params = PlaceModifyOrderParams()
        params.account = order.account
        params.order_id = order.order_id
        params.contract = order.contract
        params.action = order.action
        params.order_type = order.order_type
        params.quantity = quantity if quantity is not None else order.quantity
        params.limit_price = limit_price if limit_price is not None else order.limit_price
        params.aux_price = aux_price if aux_price is not None else order.aux_price
        params.trail_stop_price = trail_stop_price if trail_stop_price is not None else order.trail_stop_price
        params.trailing_percent = trailing_percent if trailing_percent is not None else order.trailing_percent
        params.percent_offset = percent_offset if percent_offset is not None else order.percent_offset
        params.time_in_force = time_in_force if time_in_force is not None else order.time_in_force
        params.outside_rth = outside_rth if outside_rth is not None else order.outside_rth
        request = OpenApiRequest(MODIFY_ORDER, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OrderIdResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.order_id == order.order_id
            else:
                raise ApiException(response.code, response.message)

        return False
Пример #7
0
 def get_order(self, account=None, id=None, order_id=None, is_brief=False):
     """
     获取指定订单
     :param account:
     :param id:
     :param order_id:
     :param is_brief: 是否返回精简的订单数据
     :return: Order 对象. 对象信息参见 tigeropen.trade.domain.order
     """
     params = OrderParams()
     params.account = account if account else self._account
     params.id = id
     params.order_id = order_id
     params.is_brief = is_brief
     request = OpenApiRequest(ORDERS, biz_model=params)
     response_content = self.__fetch_data(request)
     if response_content:
         response = OrdersResponse()
         response.parse_response_content(response_content)
         if response.is_success():
             return response.orders[0] if len(
                 response.orders) == 1 else None
         else:
             raise ApiException(response.code, response.message)
     return None
Пример #8
0
    def get_positions(self,
                      sec_type=SecurityType.STK,
                      currency=Currency.ALL,
                      market=Market.ALL,
                      symbol=None,
                      sub_accounts=None):
        params = PositionParams()
        params.account = self._account
        if sec_type:
            params.sec_type = sec_type.value
        params.sub_accounts = sub_accounts
        if currency:
            params.currency = currency.value
        if market:
            params.market = market.value
        params.symbol = symbol

        request = OpenApiRequest(POSITIONS, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = PositionsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.positions
            else:
                raise ApiException(response.code, response.message)

        return None
Пример #9
0
 def get_open_orders(self,
                     account=None,
                     sec_type=None,
                     market=Market.ALL,
                     symbol=None,
                     start_time=None,
                     end_time=None):
     """
     获取待成交订单列表
     :param account:
     :param sec_type:
     :param market:
     :param symbol:
     :param start_time:
     :param end_time:
     :return:
     """
     params = OrdersParams()
     params.account = account if account else self._account
     if sec_type:
         params.sec_type = sec_type.value
     params.market = market.value
     params.symbol = symbol
     params.start_date = start_time
     params.end_date = end_time
     request = OpenApiRequest(ACTIVE_ORDERS, biz_model=params)
     response_content = self.__fetch_data(request)
     if response_content:
         response = OrdersResponse()
         response.parse_response_content(response_content)
         if response.is_success():
             return response.orders
         else:
             raise ApiException(response.code, response.message)
     return None
Пример #10
0
    def create_order(self,
                     account,
                     contract,
                     action,
                     order_type,
                     quantity,
                     limit_price=None,
                     aux_price=None,
                     trail_stop_price=None,
                     trailing_percent=None,
                     percent_offset=None,
                     time_in_force=None,
                     outside_rth=None):
        """
        创建订单对象.
        :param account:
        :param contract:
        :param action:
        :param order_type:
        :param quantity:
        :param limit_price: 限价
        :param aux_price: 在止损单表示止损价格; 在跟踪止损单表示价差
        :param trail_stop_price: 跟踪止损单--触发止损单的价格
        :param trailing_percent: 跟踪止损单--百分比
        :param percent_offset:
        :param time_in_force: 订单有效期, 'DAY'(当日有效)和'GTC'(取消前有效)
        :param outside_rth: 是否允许盘前盘后交易(美股专属)
        :return:
        """
        params = AccountsParams()
        params.account = account if account else self._account
        request = OpenApiRequest(ORDER_NO, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OrderIdResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                order_id = response.order_id
                order = Order(account,
                              contract,
                              action,
                              order_type,
                              quantity,
                              limit_price=limit_price,
                              aux_price=aux_price,
                              trail_stop_price=trail_stop_price,
                              trailing_percent=trailing_percent,
                              percent_offset=percent_offset,
                              time_in_force=time_in_force,
                              outside_rth=outside_rth,
                              order_id=order_id)
                return order
            else:
                raise ApiException(response.code, response.message)

        return None
Пример #11
0
    def get_assets(self,
                   account=None,
                   sub_accounts=None,
                   segment=False,
                   market_value=False):
        """
        获取账户资产信息
        :param account:
        :param sub_accounts: 子账户列表
        :param segment: 是否包含证券/期货分类
        :param market_value: 是否包含分市场市值
        :return: 由 PortfolioAccount 对象构成的列表. PortfolioAccount 对象下的 summary 属性包含一个 Account 对象,
         Account 对象有如下属性:
            net_liquidation: 净清算值
            accrued_cash: 净累计利息
            accrued_dividend: 净累计分红
            available_funds: 可用资金(可用于交易)
            accrued_interest: 累计利息
            buying_power: 购买力
            cash: 证券账户金额+期货账户金额
            currency: 货币
            cushion: 当前保证金缓存
            day_trades_remaining: 剩余日内交易次数,-1表示无限制
            equity_with_loan: 含借贷值股权
            excess_liquidity: 当前结余流动性,为保持当前拥有的头寸,必须维持的缓冲保证金的数额,日内风险数值(App)
            gross_position_value: 持仓市值
            initial_margin_requirement: 初始保证金要求
            maintenance_margin_requirement: 维持保证金要求
            regt_equity: RegT 资产
            regt_margin: RegT 保证金
            sma: 特殊备忘录账户,隔夜风险数值(App)
            settled_cash: 结算利息
            leverage: 总杠杆
            net_leverage: 净杠杆
        """
        params = AssetParams()
        params.account = account if account else self._account
        params.sub_accounts = sub_accounts
        params.segment = segment
        params.market_value = market_value

        request = OpenApiRequest(ASSETS, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = AssetsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.assets
            else:
                raise ApiException(response.code, response.message)

        return None
Пример #12
0
 def get_managed_accounts(self):
     params = AccountsParams()
     params.account = self._account
     request = OpenApiRequest(ACCOUNTS, biz_model=params)
     response_content = self.__fetch_data(request)
     if response_content:
         response = ProfilesResponse()
         response.parse_response_content(response_content)
         if response.is_success():
             return response.profiles
         else:
             raise ApiException(response.code, response.message)
     return None
Пример #13
0
    def modify_order(self,
                     order,
                     quantity=None,
                     limit_price=None,
                     aux_price=None,
                     trail_stop_price=None,
                     trailing_percent=None,
                     percent_offset=None,
                     time_in_force=None,
                     outside_rth=None):
        """
        修改订单
        :param order:
        :param quantity:
        :param limit_price: 限价
        :param aux_price: 在止损单表示止损价格; 在跟踪止损单表示价差
        :param trail_stop_price: 跟踪止损单--触发止损单的价格
        :param trailing_percent: 跟踪止损单--百分比
        :param percent_offset:
        :param time_in_force: 订单有效期, 'DAY'(当日有效)和'GTC'(取消前有效)
        :param outside_rth: 是否允许盘前盘后交易(美股专属)
        :return:
        """
        params = PlaceModifyOrderParams()
        params.account = order.account
        params.order_id = order.order_id
        params.id = order.id
        params.contract = order.contract
        params.action = order.action
        params.order_type = order.order_type
        params.quantity = quantity if quantity is not None else order.quantity
        params.limit_price = limit_price if limit_price is not None else order.limit_price
        params.aux_price = aux_price if aux_price is not None else order.aux_price
        params.trail_stop_price = trail_stop_price if trail_stop_price is not None else order.trail_stop_price
        params.trailing_percent = trailing_percent if trailing_percent is not None else order.trailing_percent
        params.percent_offset = percent_offset if percent_offset is not None else order.percent_offset
        params.time_in_force = time_in_force if time_in_force is not None else order.time_in_force
        params.outside_rth = outside_rth if outside_rth is not None else order.outside_rth
        request = OpenApiRequest(MODIFY_ORDER, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OrderIdResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.order_id == order.order_id if order.order_id else response.id == order.id
            else:
                raise ApiException(response.code, response.message)

        return False
Пример #14
0
 def get_order(self, order_id, is_brief=False):
     params = OrderParams()
     params.account = self._account
     params.order_id = order_id
     params.is_brief = is_brief
     request = OpenApiRequest(ORDERS, biz_model=params)
     response_content = self.__fetch_data(request)
     if response_content:
         response = OrdersResponse()
         response.parse_response_content(response_content)
         if response.is_success():
             return response.orders[0] if len(response.orders) == 1 else None
         else:
             raise ApiException(response.code, response.message)
     return None
Пример #15
0
    def cancel_order(self, order_id):
        params = CancelOrderParams()
        params.account = self._account
        params.order_id = order_id
        request = OpenApiRequest(CANCEL_ORDER, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OrderIdResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.order_id == order_id
            else:
                raise ApiException(response.code, response.message)

        return False
Пример #16
0
    def get_contract(self, contract_id):
        params = ContractParams()
        params.account = self._account
        params.contract_id = contract_id

        request = OpenApiRequest(CONTRACT, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = ContractsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.contracts[0] if len(response.contracts) == 1 else None
            else:
                raise ApiException(response.code, response.message)

        return None
Пример #17
0
    def get_positions(self,
                      account=None,
                      sec_type=SecurityType.STK,
                      currency=Currency.ALL,
                      market=Market.ALL,
                      symbol=None,
                      sub_accounts=None):
        """
        获取持仓数据
        :param account:
        :param sec_type:
        :param currency:
        :param market:
        :param symbol:
        :param sub_accounts:
        :return: 由 Position 对象构成的列表. Position 对象有如下属性:
            account: 所属账户
            contract: 合约对象
            quantity: 持仓数量
            average_cost: 持仓成本
            market_price: 最新价格
            market_value: 市值
            realized_pnl: 实现盈亏
            unrealized_pnl: 持仓盈亏
        """
        params = PositionParams()
        params.account = account if account else self._account
        if sec_type:
            params.sec_type = sec_type.value
        params.sub_accounts = sub_accounts
        if currency:
            params.currency = currency.value
        if market:
            params.market = market.value
        params.symbol = symbol

        request = OpenApiRequest(POSITIONS, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = PositionsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.positions
            else:
                raise ApiException(response.code, response.message)

        return None
Пример #18
0
 def get_orders(self,
                account=None,
                sec_type=None,
                market=Market.ALL,
                symbol=None,
                start_time=None,
                end_time=None,
                limit=100,
                is_brief=False,
                states=None):
     """
     获取订单列表
     :param account:
     :param sec_type:
     :param market:
     :param symbol:
     :param start_time: 开始时间. 若是时间戳需要精确到毫秒, 为13位整数;
                                 或是日期时间格式的字符串,如"2017-01-01"和 "2017-01-01 12:00:00"
     :param end_time: 截至时间. 格式同 start_time
     :param limit: 每次获取订单的数量
     :param is_brief: 是否返回精简的订单数据
     :param states: 订单状态枚举对象列表, 可选, 若传递则按状态筛选
     :return: Order 对象构成的列表. Order 对象信息参见 tigeropen.trade.domain.order
     """
     params = OrdersParams()
     params.account = account if account else self._account
     if sec_type:
         params.sec_type = sec_type.value
     params.market = market.value
     params.symbol = symbol
     params.start_date = start_time
     params.end_date = end_time
     params.limit = limit
     params.is_brief = is_brief
     params.states = [state.value for state in states] if states else None
     request = OpenApiRequest(ORDERS, biz_model=params)
     response_content = self.__fetch_data(request)
     if response_content:
         response = OrdersResponse()
         response.parse_response_content(response_content)
         if response.is_success():
             return response.orders
         else:
             raise ApiException(response.code, response.message)
     return None
Пример #19
0
    def get_assets(self, sub_accounts=None, segment=False, market_value=False):
        params = AssetParams()
        params.account = self._account
        params.sub_accounts = sub_accounts
        params.segment = segment
        params.market_value = market_value

        request = OpenApiRequest(ASSETS, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = AssetsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.assets
            else:
                raise ApiException(response.code, response.message)

        return None
Пример #20
0
    def preview_order(self, order):
        """
        预览订单
        :param order:  Order 对象
        :return: dict. 字段如下
            init_margin_before      下单前账户初始保证金
            init_margin             预计下单后的账户初始保证金
            maint_margin_before     下单前账户的维持保证金
            maint_margin            预计下单后的账户维持保证金
            margin_currency         保证金货币币种
            equity_with_loan_before 下单前账户的含借贷值股权(含贷款价值资产)
            equity_with_loan        下单后账户的含借贷值股权(含贷款价值资产)
            min_commission          预期最低佣金
            max_commission          预期最高佣金
            commission_currency     佣金货币币种

            若无法下单, 返回的 dict 中仅有如下字段:
            warning_text            无法下单的原因
        """
        params = PlaceModifyOrderParams()
        params.account = order.account
        params.contract = order.contract
        params.action = order.action
        params.order_type = order.order_type
        params.order_id = order.order_id
        params.quantity = order.quantity
        params.limit_price = order.limit_price
        params.aux_price = order.aux_price
        params.trail_stop_price = order.trail_stop_price
        params.trailing_percent = order.trailing_percent
        params.percent_offset = order.percent_offset
        params.time_in_force = order.time_in_force
        params.outside_rth = order.outside_rth
        request = OpenApiRequest(PREVIEW_ORDER, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = PreviewOrderResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.preview_order
            else:
                raise ApiException(response.code, response.message)
Пример #21
0
 def get_managed_accounts(self, account=None):
     """
     获取管理的账号列表
     :param account:
     :return: AccountProfile 对象, 有如下属性:
         account: 交易账户
         capability: 账户类型(CASH:现金账户, MGRN: Reg T 保证金账户, PMGRN: 投资组合保证金)
         status: 账户状态(New, Funded, Open, Pending, Abandoned, Rejected, Closed, Unknown)
     """
     params = AccountsParams()
     params.account = account if account else self._account
     request = OpenApiRequest(ACCOUNTS, biz_model=params)
     response_content = self.__fetch_data(request)
     if response_content:
         response = ProfilesResponse()
         response.parse_response_content(response_content)
         if response.is_success():
             return response.profiles
         else:
             raise ApiException(response.code, response.message)
     return None
Пример #22
0
    def create_order(self, account, contract, action, order_type, quantity, limit_price=None, aux_price=None,
                     trail_stop_price=None, trailing_percent=None, percent_offset=None, time_in_force=None,
                     outside_rth=None):
        params = AccountsParams()
        params.account = self._account
        request = OpenApiRequest(ORDER_NO, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OrderIdResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                order_id = response.order_id
                order = Order(account, contract, action, order_type, quantity, limit_price=limit_price,
                              aux_price=aux_price, trail_stop_price=trail_stop_price,
                              trailing_percent=trailing_percent, percent_offset=percent_offset,
                              time_in_force=time_in_force, outside_rth=outside_rth, order_id=order_id)
                return order
            else:
                raise ApiException(response.code, response.message)

        return None
Пример #23
0
    def cancel_order(self, account=None, id=None, order_id=None):
        """
        取消订单
        :param account:
        :param id: 全局订单 id
        :param order_id: 账户自增订单 id
        :return:
        """
        params = CancelOrderParams()
        params.account = account if account else self._account
        params.order_id = order_id
        params.id = id
        request = OpenApiRequest(CANCEL_ORDER, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = OrderIdResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.order_id == order_id if order_id else response.id == id
            else:
                raise ApiException(response.code, response.message)

        return False
Пример #24
0
    def get_contract(self,
                     symbol,
                     sec_type=SecurityType.STK,
                     currency=None,
                     exchange=None,
                     expiry=None,
                     strike=None,
                     right=None):
        """
        获取合约
        :param symbol:
        :param sec_type:
        :param currency:
        :param exchange:
        :param expiry:
        :param strike:
        :param right:
        :return: Contract 对象. 有如下属性:
            symbol: 合约 symbol
            identifier: 合约唯一标识
            currency: 币种
            exchange: 交易所
            name: 合约名称
            sec_type: 合约类型
            long_initial_margin: 做多初始保证金比例
            long_maintenance_margin: 做多维持保证金比例
            short_fee_rate: 做空费率
            short_margin: 做空保证金
            shortable: 做空池剩余
            multiplier: 合约乘数
            expiry: 合约到期日(期货/期权)
            contract_month: 合约月份(期货)
            strike: 行权价(期权)
            put_call: 看跌/看涨(期权)
        """
        params = ContractParams()
        params.account = self._account
        params.symbol = symbol
        if sec_type:
            params.sec_type = sec_type.value
        if currency:
            params.currency = currency.value
        if expiry:
            params.expiry = expiry
        if strike:
            params.strike = strike
        if right:
            params.right = right
        params.exchange = exchange

        request = OpenApiRequest(CONTRACT, biz_model=params)
        response_content = self.__fetch_data(request)
        if response_content:
            response = ContractsResponse()
            response.parse_response_content(response_content)
            if response.is_success():
                return response.contracts[0] if len(
                    response.contracts) == 1 else None
            else:
                raise ApiException(response.code, response.message)

        return None