creates One Cancels All Bracket Order
        trailingStop = None (regular stop) / percent / amount

def createBracketOrder(self, contract, quantity,
            entry=0., target=0., stop=0.,
            targetType=None, trailingStop=None, group=None, tif="DAY",
            fillorkill=False, iceberg=False, rth=False, stop_limit=False,
            transmit=True, account=None, **kwargs):

        """
        creates One Cancels All Bracket Order
        trailingStop = None (regular stop) / percent / amount
        """
        if group == None:
            group = "bracket_" + str(int(time.time()))

        # main order
        enteyOrder = self.createOrder(quantity, price=entry, transmit=False,
                        tif=tif, fillorkill=fillorkill, iceberg=iceberg,
                        rth=rth, account=account)
        entryOrderId = self.placeOrder(contract, enteyOrder)

        # target
        targetOrderId = 0
        if target > 0:
            targetOrder = self.createTargetOrder(-quantity,
                            parentId  = entryOrderId,
                            target    = target,
                            transmit  = False if stop > 0 else True,
                            orderType = targetType,
                            group     = group,
                            rth       = rth,
                            tif       = tif,
                            account   = account
                        )

            time.sleep(0.0001)
            self.requestOrderIds()
            targetOrderId = self.placeOrder(contract, targetOrder, self.orderId + 1)

        # stop
        stopOrderId = 0
        if stop > 0:
            stopOrder = self.createStopOrder(-quantity,
                            parentId   = entryOrderId,
                            stop       = stop,
                            trail      = trailingStop,
                            transmit   = transmit,
                            group      = group,
                            rth        = rth,
                            tif        = tif,
                            stop_limit = stop_limit,
                            account    = account
                        )

            time.sleep(0.0001)
            self.requestOrderIds()
            stopOrderId = self.placeOrder(contract, stopOrder, self.orderId + 2)

        # triggered trailing stop?
        # if ("triggerPrice" in kwargs) & ("trailPercent" in kwargs):
            # self.pendingTriggeredTrailingStopOrders.append()
            # self.signal_ttl    = kwargs["signal_ttl"] if "signal_ttl" in kwargs else 0

        return {
            "group": group,
            "entryOrderId": entryOrderId,
            "targetOrderId": targetOrderId,
            "stopOrderId": stopOrderId
        }