free-fx
Version:
81 lines (74 loc) • 2.77 kB
text/typescript
import { readFileSync } from 'fs';
import {
EncryptMethod,
Field,
Fields,
FIXParser,
HandlInst,
LicenseManager,
Message,
Messages,
OrderTypes,
Side,
TimeInForce,
} from '../src/FIXParser'; // from 'fixparser';
// NOTE: This feature requires a FIXParser Enterprise license
void LicenseManager.setLicenseKey('<your license here>');
const fixParser = new FIXParser();
const SENDER = 'BANZAI';
const TARGET = 'EXEC';
fixParser.connect({
host: 'localhost',
port: 9878,
protocol: 'tls-tcp',
sender: SENDER,
target: TARGET,
fixVersion: 'FIXT.1.1',
tlsKey: readFileSync('key.pem'),
tlsCert: readFileSync('cert.pem'),
tlsUseSNI: false, // Set to true to use TLS SNI connection, requires host to be FQDN
onOpen: () => {
console.log('Open');
sendLogon();
setInterval(() => {
sendOrder();
}, 500);
},
onMessage: (message: Message) => console.log('received message', message.description, message.messageString),
onClose: () => console.log('Disconnected'),
});
const sendLogon = () => {
const logon = fixParser.createMessage(
new Field(Fields.MsgType, Messages.Logon),
new Field(Fields.MsgSeqNum, fixParser.getNextTargetMsgSeqNum()),
new Field(Fields.SenderCompID, SENDER),
new Field(Fields.SendingTime, fixParser.getTimestamp()),
new Field(Fields.TargetCompID, TARGET),
new Field(Fields.ResetSeqNumFlag, 'Y'),
new Field(Fields.EncryptMethod, EncryptMethod.None),
new Field(Fields.HeartBtInt, 10),
);
const messages = fixParser.parse(logon.encode());
console.log('sending message', messages[0].description, messages[0].messageString);
fixParser.send(logon);
};
const sendOrder = () => {
const order = fixParser.createMessage(
new Field(Fields.MsgType, Messages.NewOrderSingle),
new Field(Fields.MsgSeqNum, fixParser.getNextTargetMsgSeqNum()),
new Field(Fields.SenderCompID, SENDER),
new Field(Fields.SendingTime, fixParser.getTimestamp()),
new Field(Fields.TargetCompID, TARGET),
new Field(Fields.ClOrdID, '11223344'),
new Field(Fields.HandlInst, HandlInst.AutomatedExecutionNoIntervention),
new Field(Fields.OrderQty, '123'),
new Field(Fields.TransactTime, fixParser.getTimestamp()),
new Field(Fields.OrdType, OrderTypes.Market),
new Field(Fields.Side, Side.Buy),
new Field(Fields.Symbol, '700.HK'),
new Field(Fields.TimeInForce, TimeInForce.Day),
);
const messages = fixParser.parse(order.encode());
console.log('sending message', messages[0].description, messages[0].messageString.replace(/\x01/g, '|'));
fixParser.send(order);
};