Example #1
0
    def queryNewOrderSingle44(self):
        ordType = fix.OrdType()

        message = fix44.NewOrderSingle()
        message.setField(self.queryClOrdID())
        message.setField(fix.HandlInst('1'))
        message.setField(self.querySymbol())
        message.setField(self.querySide())
        message.setField(fix.TransactTime())
        ordType = self.queryOrdType()
        message.setField(ordType)
        message.setField(self.queryOrderQty())
        message.setField(self.queryTimeInForce())
        message.setField(self.querySecurityExchange())
        message.setField(self.queryAccount())

        if ordType.getValue() == fix.OrdType_LIMIT or ordType.getValue(
        ) == fix.OrdType_STOP_LIMIT:
            message.setField(self.queryPrice())

        if ordType.getValue() == fix.OrdType_STOP or ordType.getValue(
        ) == fix.OrdType_STOP_LIMIT:
            message.setField(self.queryStopPx())

        header = message.getHeader()
        self.queryHeader(header)

        return message
Example #2
0
    def new_order(self):
        print("Creating the following order: ")
        trade = fix.Message()
        trade.getHeader().setField(fix.BeginString(fix.BeginString_FIX42))  #
        trade.getHeader().setField(fix.MsgType(
            fix.MsgType_NewOrderSingle))  #35=D
        trade.setField(fix.ClOrdID(self.genOrderID()))  #11=Unique order id

        trade.setField(fix.HandlInst(fix.HandlInst_MANUAL_ORDER_BEST_EXECUTION)
                       )  #21=3 (Manual order, best executiona)
        trade.setField(fix.Symbol("ethbtc"))  #55=ethbtc
        trade.setField(fix.Side(fix.Side_BUY))  #54=1 Buy
        trade.setField(fix.OrdType(fix.OrdType_LIMIT))  #40=2 Limit order
        trade.setField(fix.OrderQty(9))  #38=9
        trade.setField(fix.Price(1.5))  #44=1.5
        trade.setField(
            fix.StringField(
                60, (datetime.utcnow().strftime("%Y%m%d-%H:%M:%S.%f"))[:-3])
        )  #60 TransactTime, not supported in python, so use tag number
        trade.setField(fix.Text("New Order"))  #58 text
        print(trade.toString())
        try:
            fix.Session.sendToTarget(trade, self.sessionID)
        except (fix.ConfigError, fix.RuntimeError) as e:
            print(e)
    def makeOrder(self, snapshot):
        self.logger.info("FIXSIM-CLIENT Snapshot received %s", str(snapshot))
        quote = snapshot.getRandomQuote()

        self.logger.info("FIXSIM-CLIENT make order for quote %s", str(quote))
        order = self.fixVersion.NewOrderSingle()
        order.setField(
            quickfix.HandlInst(
                quickfix.
                HandlInst_AUTOMATED_EXECUTION_ORDER_PUBLIC_BROKER_INTERVENTION_OK
            ))
        order.setField(
            quickfix.SecurityType(
                quickfix.SecurityType_FOREIGN_EXCHANGE_CONTRACT))

        order.setField(quickfix.OrdType(quickfix.OrdType_PREVIOUSLY_QUOTED))
        order.setField(quickfix.ClOrdID(self.idGen.orderID()))
        order.setField(quickfix.QuoteID(quote.id))

        order.setField(quickfix.SecurityDesc("SPOT"))
        order.setField(quickfix.Symbol(snapshot.symbol))
        order.setField(quickfix.Currency(quote.currency))
        order.setField(quickfix.Side(quote.side))

        order.setField(quickfix.OrderQty(quote.size))
        order.setField(quickfix.FutSettDate("SP"))
        order.setField(quickfix.Price(quote.price))
        order.setField(quickfix.TransactTime())
        order.setField(
            quickfix.TimeInForce(quickfix.TimeInForce_IMMEDIATE_OR_CANCEL))
        self.sendToTarget(order, self.orderSession)
Example #4
0
    def queryNewOrderSingle42(self):
        ordType = fix.OrdType()

        message = fix.Message()
        message.setField(self.queryClOrdID())
        message.setField(fix.HandlInst('1'))
        message.setField(self.querySymbol())
        message.setField(self.querySide())
        message.setField(fix.TransactTime())
        ordType = self.queryOrdType()
        message.setField(ordType)
        message.setField(self.queryOrderQty())
        message.setField(self.queryTimeInForce())

        if abc.getValue() == fix.OrdType_LIMIT or abc.getValue(
        ) == fix.OrdType_STOP_LIMIT:
            message.setField(self.queryPrice())

        if abc.getValue() == fix.OrdType_STOP or abc.getValue(
        ) == fix.OrdType_STOP_LIMIT:
            message.setField(self.queryStopPx())

        header = message.getHeader()
        self.queryHeader(header)

        newOrderSingle = fix42.NewOrderSingle(message)

        return newOrderSingle
Example #5
0
def new_order(sender_comp_id, target_comp_id, symbol, quantity, price, side,
              order_type):
    if side.lower() == "buy":
        side = fix.Side_BUY
    else:
        side = fix.Side_SELL

    message = Message()
    header = message.getHeader()
    header.setField(fix.BeginString("FIX.4.2"))
    header.setField(fix.SenderCompID(sender_comp_id))
    header.setField(fix.TargetCompID(target_comp_id))
    header.setField(fix.MsgType("D"))
    ord_id = get_order_id(sender_comp_id, symbol)
    message.setField(fix.ClOrdID(ord_id))
    message.setField(fix.Symbol(symbol))
    message.setField(fix.Side(side))
    message.setField(fix.Price(float(price)))
    if order_type.lower() == "market":
        message.setField(fix.OrdType(fix.OrdType_MARKET))
    else:
        message.setField(fix.OrdType(fix.OrdType_LIMIT))
    message.setField(fix.HandlInst(fix.HandlInst_MANUAL_ORDER_BEST_EXECUTION))
    message.setField(fix.TransactTime())
    message.setField(fix.OrderQty(float(quantity)))
    message.setField(fix.Text(f"{side} {symbol} {quantity}@{price}"))

    return message
Example #6
0
 def put_order(self):
     print("Creating the following order: ")
     trade = fix.Message()
     trade.setField(fix.ClOrdID(self.genExecID()))  # 11=Unique order
     trade.setField(fix.HandlInst(fix.HandlInst_MANUAL_ORDER_BEST_EXECUTION))
     trade.setField(fix.Symbol('SMBL'))
     trade.setField(fix.Side(fix.Side_BUY))
     trade.setField(fix.OrdType(fix.OrdType_LIMIT))
     trade.setField(fix.OrderQty(100))
     trade.setField(fix.Price(10))
     print trade.toString()
     fix.Session.sendToTarget(trade, self.sessionID)
def sendHelloWorldMessage(sessionID):
    message = fix.Message()
    header = message.getHeader()

    header.setField(fix.BeginString("FIX.4.1"))
    header.setField(fix.SenderCompID("HELLOWORLD_TRADER"))
    header.setField(fix.TargetCompID("HELLOWORLD_EXCHANGE"))
    header.setField(fix.MsgType(fix.MsgType_NewOrderSingle))
    message.setField(fix.ClOrdID('1'))
    message.setField(fix.HandlInst('1'))
    message.setField(fix.Symbol('BMLL'))
    message.setField(fix.Side(fix.Side_BUY))
    message.setField(fix.OrdType(fix.OrdType_MARKET))
    message.setField(fix.Text("Hello Exchange! How are you?"))

    fix.Session.sendToTarget(message, sessionID)
Example #8
0
    def put_order(self):
        print("Creating the following order: ")
        trade = fix.Message()
        trade.getHeader().setField(fix.BeginString(fix.BeginString_FIX50))  #
        trade.getHeader().setField(fix.MsgType(
            fix.MsgType_NewOrderSingle))  #39=D
        trade.setField(fix.ClOrdID(self.genExecID()))  #11=Unique order

        trade.setField(fix.HandlInst(fix.HandlInst_MANUAL_ORDER_BEST_EXECUTION)
                       )  #21=3 (Manual order, best executiona)
        trade.setField(fix.Symbol('SMBL'))  #55=SMBL ?
        trade.setField(fix.Side(fix.Side_BUY))  #43=1 Buy
        trade.setField(fix.OrdType(fix.OrdType_LIMIT))  #40=2 Limit order
        trade.setField(fix.OrderQty(100))  #38=100
        trade.setField(fix.Price(10))
        print trade.toString()
        fix.Session.sendToTarget(trade, self.sessionID)
    def generate_message_fields(self, message_type):
        message_fields = {
            'client_orderID': fix.ClOrdID(),
            'symbol': fix.Symbol(),
            'side': fix.Side(),
            'quantity': fix.OrderQty(),
        }
        if message_type in ['new', 'replace']:
            extra_message_fields = {
                'type': fix.OrdType(),
                'price': fix.Price(),
                'handlInst': fix.HandlInst(),
            }
            message_fields.update(extra_message_fields)
            if message_type == 'replace':
                message_fields['original_orderID'] = fix.OrigClOrdID()

        return message_fields
Example #10
0
    def on_new_order(self, message):
        print('New Order!')
        message_fields = {
            'client_orderID': fix.ClOrdID(),
            'symbol': fix.Symbol(),
            'type': fix.OrdType(),
            'side': fix.Side(),
            'quantity': fix.OrderQty(),
            'price': fix.Price(),
            'handlInst': fix.HandlInst(),
        }
        message_details = {}
        for k, v in message_fields.items():
            message_details[k] = self.get_field_value(message, v)
        orderID = self.gen_orderID()
        self.orders[orderID] = message_details
        # add error checking here

        # testing
        self.test_replies(orderID, fix.OrdStatus_NEW, fix.ExecType_NEW,
                          message_details)
Example #11
0
    def on_replace_request(self, message):
        print('replace!')
        message_fields = {
            'client_orderID': fix.ClOrdID(),
            'original_clientID': fix.OrigClOrdID(),
            'symbol': fix.Symbol(),
            'type': fix.OrdType(),
            'side': fix.Side(),
            'quantity': fix.OrderQty(),
            'price': fix.Price(),
            'handlInst': fix.HandlInst(),
        }
        message_details = {}
        for k, v in message_fields.items():
            message_details[k] = self.get_field_value(message, v)
        orderID = self.gen_orderID()
        self.orders[orderID] = message_details

        # testing
        self.test_replies(orderID, fix.OrdStatus_PENDING_REPLACE,
                          fix.ExecType_REPLACE, message_details)
Example #12
0
    def order_cancel_replace(self,account,symbol,side,quantity,order_type,price):
        print("Creating order_cancel_replace message... ")
        cancel_replace_message = fix.Message()
        cancel_replace_message.getHeader().setField(fix.BeginString(fix.BeginString_FIX42)) #
        cancel_replace_message.getHeader().setField(fix.MsgType('G')) #39=D
        cancel_replace_message.getHeader().setField(fix.SendingTime(1))

        cancel_replace_message.setField(fix.Account(str(account))) #1
        cancel_replace_message.setField(fix.HandlInst(fix.HandlInst_AUTOMATED_EXECUTION_ORDER_PUBLIC_BROKER_INTERVENTION_OK)) #21=3 (Manual order), 21=2 automated execution only supported value
        cancel_replace_message.setField(fix.ClOrdID(str('order_cancel_replace'+self.genOrderID()))) #11
        cancel_replace_message.setField(fix.OrigClOrdID(str(self.orders[0]))) #41
        cancel_replace_message.setField(fix.Symbol(str(symbol))) #55
        cancel_replace_message.setField(fix.Side(str(side))) #54
        cancel_replace_message.setField(fix.OrderQty(quantity)) #38
        cancel_replace_message.setField(fix.OrdType(str(order_type))) #40
        cancel_replace_message.setField(fix.Price(price)) #44

        print('sending order_cancel_replace message...')
        print(f'order_cancel_replace message: {cancel_replace_message.toString()}')
        fix.Session.sendToTarget(cancel_replace_message, self.sessionID)
        print('order_cancel_replace message sent!')
Example #13
0
def replace_order(sender_comp_id, target_comp_id, quantity, price,
                  orig_client_order_id):
    symbol = ORDERS[orig_client_order_id][0].getValue()
    side = ORDERS[orig_client_order_id][3].getValue()

    message = fix42.OrderCancelReplaceRequest()
    header = message.getHeader()
    header.setField(fix.SenderCompID(sender_comp_id))
    header.setField(fix.TargetCompID(target_comp_id))
    ord_id = get_order_id(sender_comp_id, symbol)
    message.setField(fix.OrigClOrdID(orig_client_order_id))
    message.setField(fix.ClOrdID(ord_id))
    message.setField(fix.Symbol(symbol))
    message.setField(fix.Side(side))
    message.setField(fix.Price(float(price)))
    message.setField(fix.OrdType(fix.OrdType_LIMIT))
    message.setField(fix.HandlInst(fix.HandlInst_MANUAL_ORDER_BEST_EXECUTION))
    message.setField(fix.TransactTime())
    message.setField(fix.TransactTime())
    message.setField(fix.OrderQty(float(quantity)))
    message.setField(fix.Text(f"{side} {symbol} {quantity}@{price}"))

    return message
Example #14
0
    def put_new_order(self):
        """Request sample new order single"""
        message = fix.Message()
        header = message.getHeader()

        header.setField(fix.MsgType(fix.MsgType_NewOrderSingle))  #39 = D

        message.setField(fix.ClOrdID(
            self.genExecID()))  #11 = Unique Sequence Number
        message.setField(fix.Side(fix.Side_BUY))  #43 = 1 BUY
        message.setField(fix.Symbol("MSFT"))  #55 = MSFT
        message.setField(fix.OrderQty(10000))  #38 = 1000
        message.setField(fix.Price(100))
        message.setField(fix.OrdType(fix.OrdType_LIMIT))  #40=2 Limit Order
        message.setField(
            fix.HandlInst(fix.HandlInst_MANUAL_ORDER_BEST_EXECUTION))  #21 = 3
        message.setField(fix.TimeInForce('0'))
        message.setField(fix.Text("NewOrderSingle"))
        trstime = fix.TransactTime()
        trstime.setString(
            datetime.utcnow().strftime("%Y%m%d-%H:%M:%S.%f")[:-3])
        message.setField(trstime)

        fix.Session.sendToTarget(message, self.sessionID)
Example #15
0
            header.setField(fix.BodyLength())
            header.setField(fix.MsgType(fix.MsgType_NewOrderSingle))
            header.setField(fix.SendingTime())
            header.setField(fix.SenderSubID("SG1"))
            header.setField(fix.TargetSubID("BARCA"))
            header.setField(fix.MsgSeqNum())
            header.setField(fix.DefaultApplVerID(fix.ApplVerID_FIX42))
            message.setField(fix.ClOrdID("ClOrdID"))
            message.setField(
                fix.AccountType(
                    fix.
                    AccountType_ACCOUNT_IS_CARRIED_ON_CUSTOMER_SIDE_OF_BOOKS))
            message.setField(fix.Symbol("APPL"))
            message.setField(
                fix.HandlInst(
                    fix.
                    HandlInst_AUTOMATED_EXECUTION_ORDER_PRIVATE_NO_BROKER_INTERVENTION
                ))
            message.setField(fix.ReceivedDeptID("I"))

            message.setField(fix.Side(fix.Side_BUY))
            message.setField(fix.TransactTime())
            message.setField(fix.OrderQty(1000))
            message.setField(fix.OrdType(fix.OrdType_MARKET))
            message.setField(fix.Price(2000))

            trailer.setField(fix.CheckSum())
            application.send(message)
            message_flag = False
except (fix.ConfigError, fix.RuntimeError) as e:
    print(e)
Example #16
0
    def send_parent_order(self, setting: dict):
        """"""
        vt_symbol = setting["vt_symbol"]
        volume = setting["volume"]
        price = setting["price"]
        order_type = OrderType(setting["order_type"])
        direction = Direction(setting["direction"])
        offset = Offset(setting["offset"])
        template_name = setting["template_name"]
        algo_type = template_name.replace("Genus", "")

        message = new_message(fix.MsgType_NewOrderSingle)

        symbol, exchange = extract_vt_symbol(vt_symbol)
        genus_exchange = EXCHANGE_VT2GNS[exchange]
        genus_symbol = f"{symbol}.{genus_exchange}"

        side = DIRECTION_VT2GNS[direction]
        genus_type = ORDERTYPE_VT2GNS[order_type]

        self.parent_orderid += 1
        parent_orderid = f"{template_name}_{self.parent_orderid}"
        message.setField(fix.ClOrdID(parent_orderid))

        message.setField(fix.HandlInst("2"))
        message.setField(fix.Currency("CNY"))

        message.setField(fix.ExDestination(genus_exchange))
        message.setField(fix.Symbol(genus_symbol))
        message.setField(fix.Side(side))
        message.setField(fix.OrdType(genus_type))
        message.setField(fix.OrderQty(volume))
        message.setField(526, parent_orderid)
        message.setField(fix.Text("vnpy"))

        if order_type == OrderType.LIMIT:
            message.setField(fix.Price(price))

        seconds = setting["time"]
        dt = datetime.now() + timedelta(seconds=seconds)
        local_dt = CHINA_TZ.localize(dt)
        utc_dt = local_dt.astimezone(pytz.utc)
        utc_end = utc_dt.strftime("%Y%m%d-%H:%M:%S")

        parameters = f"EndTime;{utc_end}"

        message.setField(847, algo_type)
        message.setField(848, parameters)

        fix.Session.sendToTarget(message, self.session_id)

        self.algo_settings[parent_orderid] = {
            "symbol": genus_symbol,
            "side": side,
            "algo_type": algo_type
        }

        self.client.set_parent_offset(parent_orderid, offset)
        self.client.put_parameters_event(parent_orderid, setting)

        return parent_orderid
Example #17
0
    def put_order(self,security_type,symbol,currency,quantity,side,order_type,account,time_id,price=None):

        if quantity != 0 :
            trade = fix.Message()
            '''
            STANDARD MESSAGE HEADER
            Required Tags: 8(BeginString) - 9(BodyLength) - 35(MsgType) - 49(SenderCompID) - 56(TargetCompID) - 34(MsgSeqNum) - 52(SendingTime)
            '''
            trade.getHeader().setField(fix.BeginString(fix.BeginString_FIX42)) #
            trade.getHeader().setField(fix.MsgType(fix.MsgType_NewOrderSingle)) #39=D
            trade.getHeader().setField(fix.SendingTime(1))
            # unique_order_id = self.genExecID()
            # print(f'Unique Order ID: {unique_order_id}')
            # trade.setField(fix.ClOrdID(unique_order_id)) #11=Unique order

            trade.setField(fix.HandlInst(fix.HandlInst_AUTOMATED_EXECUTION_ORDER_PUBLIC_BROKER_INTERVENTION_OK)) #21=3 (Manual order), 21=2 automated execution only supported value
            trade.setField(fix.Symbol(str(symbol))) #55
            trade.setField(fix.Currency(str(currency))) #15
            trade.setField(fix.SecurityType(str(security_type))) #167
            trade.setField(fix.Side(str(side))) #54=1 Buy
            trade.setField(fix.OrdType(str(order_type))) #40=2 Limit order, 40=1 Market
            trade.setField(fix.OrderQty(quantity)) #38
            if order_type != 1: #not market
                trade.setField(fix.Price(price)) # if market, this tag  should be absent
            else:
                price = None
            trade.setField(fix.Account(str(account)))
            trade.setField(fix.ExDestination('IDEALPRO'))
            trade.setField(fix.CustomerOrFirm(0))
            trade.setField(fix.ClOrdID(time_id+trade.getField(55)+trade.getField(15)+trade.getField(54))) #11=
            # trade.setField(fix.ClOrdID(datetime.datetime.utcnow().strftime('%Y%m%d%H%M%S')+trade.getField(55)+trade.getField(15)+trade.getField(54))) #11=

            # dnow = datetime.utcnow().strftime('%Y%m%d-%H:%M:%S')
            # tag = fix.TransactTime() #default = current time, SendingTime does the same thing
            # tag.setString(dnow.strftime('%Y%m%d-%H:%M:%S'))
            # trade.setField(tag)

            print(f'CREATING THE FOLLOWING ORDER:\n {trade.toString()}')
            fix.Session.sendToTarget(trade, self.sessionID)
            self.orders_dict[trade.getField(11)] = {#'id':trade.getField(11),
                                                    #'datetime': trade.getField(11)[:12],
                                                    'account':trade.getField(1),
                                                    'symbol':trade.getField(55)+'.' + trade.getField(15),
                                                    'qty':trade.getField(38),
                                                    'ord_type':trade.getField(40),
                                                    'side':trade.getField(54),
                                                    'price':price,
                                                    'status':'sent'
                                                    }
        else:
            print(f'QUANTITY IS 0!\nCHECK FOR STATUS OF LAST ORDER')
            if os.path.exists(f'{self.write_path}fix_orders.csv'):
                temp_orders = pd.read_csv(f'{self.write_path}fix_orders.csv',index_col=0)
                symbol_entries = temp_orders[temp_orders['symbol'] == symbol]
                last_symbol_entry = symbol_entries.iloc[-1]
                new_entry = last_symbol_entry
                new_id = time_id + last_symbol_entry.name[6:]
                new_entry.name = new_id
                temp_orders = temp_orders.append(last_symbol_entry,ignore_index=False)
                temp_orders.to_csv(f'{self.write_path}fix_orders.csv',)
                self.order_status_request(cl_ord_id=last_symbol_entry)
                # self.order_status_request(cl_ord_id=temp_orders.index[-1])
            else:
                print(f'QUANTITY IS 0!\n FIX ORDERS FIRST RUN')
                time.sleep(100)