@stoqey/ib 1.3.8 → 1.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/api/api.d.ts +58 -55
- package/dist/api/api.js +50 -44
- package/dist/api/api.js.map +1 -1
- package/dist/api/contract/contract.d.ts +4 -0
- package/dist/api/contract/forex.js.map +1 -1
- package/dist/api/contract/wsh.d.ts +15 -0
- package/dist/api/contract/wsh.js +21 -0
- package/dist/api/contract/wsh.js.map +1 -0
- package/dist/api/data/enum/duration-unit.js +1 -1
- package/dist/api/data/enum/duration-unit.js.map +1 -1
- package/dist/api/data/enum/event-name.js +1 -1
- package/dist/api/data/enum/event-name.js.map +1 -1
- package/dist/api/data/enum/fad-data-type.d.ts +2 -1
- package/dist/api/data/enum/fad-data-type.js +3 -2
- package/dist/api/data/enum/fad-data-type.js.map +1 -1
- package/dist/api/data/enum/log-level.js +1 -1
- package/dist/api/data/enum/log-level.js.map +1 -1
- package/dist/api/data/enum/min-server-version.d.ts +3 -1
- package/dist/api/data/enum/min-server-version.js +3 -1
- package/dist/api/data/enum/min-server-version.js.map +1 -1
- package/dist/api/data/enum/option-exercise-action.js +1 -1
- package/dist/api/data/enum/option-exercise-action.js.map +1 -1
- package/dist/api/data/enum/option-type.js +1 -1
- package/dist/api/data/enum/option-type.js.map +1 -1
- package/dist/api/data/enum/sec-type.d.ts +22 -13
- package/dist/api/data/enum/sec-type.js +24 -15
- package/dist/api/data/enum/sec-type.js.map +1 -1
- package/dist/api/historical/bar-size-setting.js +1 -1
- package/dist/api/historical/bar-size-setting.js.map +1 -1
- package/dist/api/historical/what-to-show.d.ts +21 -0
- package/dist/api/historical/what-to-show.js +25 -0
- package/dist/api/historical/what-to-show.js.map +1 -0
- package/dist/api/market/tickByTickDataType.js +1 -1
- package/dist/api/market/tickByTickDataType.js.map +1 -1
- package/dist/api/market/tickType.d.ts +12 -0
- package/dist/api/market/tickType.js +13 -1
- package/dist/api/market/tickType.js.map +1 -1
- package/dist/api/order/enum/conjunction-connection.js +1 -1
- package/dist/api/order/enum/conjunction-connection.js.map +1 -1
- package/dist/api/order/enum/order-action.js +1 -1
- package/dist/api/order/enum/order-action.js.map +1 -1
- package/dist/api/order/enum/order-condition-type.js +1 -1
- package/dist/api/order/enum/order-condition-type.js.map +1 -1
- package/dist/api/order/enum/order-status.js +1 -1
- package/dist/api/order/enum/order-status.js.map +1 -1
- package/dist/api/order/enum/orderType.d.ts +4 -0
- package/dist/api/order/enum/orderType.js +24 -2
- package/dist/api/order/enum/orderType.js.map +1 -1
- package/dist/api/order/enum/tif.d.ts +30 -0
- package/dist/api/order/enum/tif.js +33 -0
- package/dist/api/order/enum/tif.js.map +1 -0
- package/dist/api/order/enum/trigger-method.js +1 -1
- package/dist/api/order/enum/trigger-method.js.map +1 -1
- package/dist/api/order/execution.d.ts +1 -0
- package/dist/api/order/order.d.ts +21 -6
- package/dist/api/order/order.js +2 -0
- package/dist/api/order/order.js.map +1 -1
- package/dist/api/order/stop.d.ts +3 -2
- package/dist/api/order/stop.js +2 -1
- package/dist/api/order/stop.js.map +1 -1
- package/dist/api/order/stopLimit.d.ts +3 -2
- package/dist/api/order/stopLimit.js +2 -1
- package/dist/api/order/stopLimit.js.map +1 -1
- package/dist/api/order/trailingStop.d.ts +4 -3
- package/dist/api/order/trailingStop.js +2 -1
- package/dist/api/order/trailingStop.js.map +1 -1
- package/dist/api-next/api-next.d.ts +19 -8
- package/dist/api-next/api-next.js +91 -35
- package/dist/api-next/api-next.js.map +1 -1
- package/dist/api-next/common/connection-state.js +1 -1
- package/dist/api-next/common/connection-state.js.map +1 -1
- package/dist/api-next/common/item-list-update.d.ts +0 -2
- package/dist/api-next/market/market-data-type.js +1 -1
- package/dist/api-next/market/market-data-type.js.map +1 -1
- package/dist/api-next/market/tick-type.js +1 -1
- package/dist/api-next/market/tick-type.js.map +1 -1
- package/dist/api-next/market-scanner/market-scanner.d.ts +0 -5
- package/dist/api-next/market-scanner/market-scanner.js +8 -8
- package/dist/api-next/market-scanner/market-scanner.js.map +1 -1
- package/dist/common/errorCode.d.ts +4 -1
- package/dist/common/errorCode.js +5 -1
- package/dist/common/errorCode.js.map +1 -1
- package/dist/core/api-next/item-list-update.d.ts +1 -2
- package/dist/core/api-next/item-list-update.js +1 -2
- package/dist/core/api-next/item-list-update.js.map +1 -1
- package/dist/core/api-next/subscription.d.ts +7 -7
- package/dist/core/api-next/subscription.js +16 -16
- package/dist/core/api-next/subscription.js.map +1 -1
- package/dist/core/io/controller.js +9 -0
- package/dist/core/io/controller.js.map +1 -1
- package/dist/core/io/decoder.d.ts +12 -6
- package/dist/core/io/decoder.js +79 -57
- package/dist/core/io/decoder.js.map +1 -1
- package/dist/core/io/encoder.d.ts +9 -7
- package/dist/core/io/encoder.js +99 -14
- package/dist/core/io/encoder.js.map +1 -1
- package/dist/core/io/enum/in-msg-id.js +1 -1
- package/dist/core/io/enum/in-msg-id.js.map +1 -1
- package/dist/core/io/socket.d.ts +4 -0
- package/dist/core/io/socket.js +5 -5
- package/dist/core/io/socket.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.js +12 -7
- package/dist/index.js.map +1 -1
- package/dist/tests/unit/api/api.test.js +22 -22
- package/dist/tests/unit/api/api.test.js.map +1 -1
- package/dist/tests/unit/api/connect.test.js +11 -9
- package/dist/tests/unit/api/connect.test.js.map +1 -1
- package/dist/tests/unit/api/contract-details.test.d.ts +1 -0
- package/dist/tests/unit/api/contract-details.test.js +114 -0
- package/dist/tests/unit/api/contract-details.test.js.map +1 -0
- package/dist/tests/unit/api/market-data.test.js +16 -13
- package/dist/tests/unit/api/market-data.test.js.map +1 -1
- package/dist/tests/unit/api/market-scanner.test.d.ts +1 -0
- package/dist/tests/unit/api/market-scanner.test.js +71 -0
- package/dist/tests/unit/api/market-scanner.test.js.map +1 -0
- package/dist/tests/unit/api/matching-symbols.test.d.ts +1 -0
- package/dist/tests/unit/api/matching-symbols.test.js +84 -0
- package/dist/tests/unit/api/matching-symbols.test.js.map +1 -0
- package/dist/tests/unit/api/order/cancelOrder.test.d.ts +1 -0
- package/dist/tests/unit/api/order/cancelOrder.test.js +86 -0
- package/dist/tests/unit/api/order/cancelOrder.test.js.map +1 -0
- package/dist/tests/unit/api/order/placeOrder.test.js +69 -92
- package/dist/tests/unit/api/order/placeOrder.test.js.map +1 -1
- package/dist/tests/unit/api/order/reqAllOpenOrders.test.js +27 -26
- package/dist/tests/unit/api/order/reqAllOpenOrders.test.js.map +1 -1
- package/dist/tests/unit/api/wsh-event-data.test.d.ts +1 -0
- package/dist/tests/unit/api/wsh-event-data.test.js +113 -0
- package/dist/tests/unit/api/wsh-event-data.test.js.map +1 -0
- package/dist/tests/unit/api-next/get-account-summary.test.js +17 -6
- package/dist/tests/unit/api-next/get-account-summary.test.js.map +1 -1
- package/dist/tests/unit/api-next/get-all-open-orders.test.js +1 -2
- package/dist/tests/unit/api-next/get-all-open-orders.test.js.map +1 -1
- package/dist/tests/unit/api-next/get-head-timestamp.test.js +1 -1
- package/dist/tests/unit/api-next/get-head-timestamp.test.js.map +1 -1
- package/dist/tests/unit/api-next/get-historical-data-updates.test.js +1 -1
- package/dist/tests/unit/api-next/get-historical-data-updates.test.js.map +1 -1
- package/dist/tests/unit/api-next/get-historical-data.test.js +2 -2
- package/dist/tests/unit/api-next/get-historical-data.test.js.map +1 -1
- package/dist/tests/unit/api-next/{search-contracts.test.js → get-matching-symbols.js} +3 -3
- package/dist/tests/unit/api-next/get-matching-symbols.js.map +1 -0
- package/dist/tests/unit/api-next/get-positions.test.js +3 -0
- package/dist/tests/unit/api-next/get-positions.test.js.map +1 -1
- package/dist/tools/account-summary.js +1 -7
- package/dist/tools/account-summary.js.map +1 -1
- package/dist/tools/commission-reports.d.ts +3 -0
- package/dist/tools/commission-reports.js +2 -8
- package/dist/tools/commission-reports.js.map +1 -1
- package/dist/tools/common/ib-api-next-app.d.ts +2 -0
- package/dist/tools/common/ib-api-next-app.js +8 -0
- package/dist/tools/common/ib-api-next-app.js.map +1 -1
- package/dist/tools/contract-details.js +1 -7
- package/dist/tools/contract-details.js.map +1 -1
- package/dist/tools/current-time.js +1 -7
- package/dist/tools/current-time.js.map +1 -1
- package/dist/tools/execution-details.d.ts +3 -0
- package/dist/tools/execution-details.js +2 -8
- package/dist/tools/execution-details.js.map +1 -1
- package/dist/tools/get-head-timestamp.js +3 -8
- package/dist/tools/get-head-timestamp.js.map +1 -1
- package/dist/tools/histogram-data.d.ts +3 -0
- package/dist/tools/histogram-data.js +4 -7
- package/dist/tools/histogram-data.js.map +1 -1
- package/dist/tools/historical-data-updates.js +3 -11
- package/dist/tools/historical-data-updates.js.map +1 -1
- package/dist/tools/historical-data.d.ts +3 -0
- package/dist/tools/historical-data.js +4 -9
- package/dist/tools/historical-data.js.map +1 -1
- package/dist/tools/historical-ticks-bid-ask.js +1 -7
- package/dist/tools/historical-ticks-bid-ask.js.map +1 -1
- package/dist/tools/historical-ticks-last.js +1 -7
- package/dist/tools/historical-ticks-last.js.map +1 -1
- package/dist/tools/historical-ticks-mid.js +1 -7
- package/dist/tools/historical-ticks-mid.js.map +1 -1
- package/dist/tools/managed-accts.js +1 -7
- package/dist/tools/managed-accts.js.map +1 -1
- package/dist/tools/market-data-snapshot.js +1 -8
- package/dist/tools/market-data-snapshot.js.map +1 -1
- package/dist/tools/market-data.js +1 -8
- package/dist/tools/market-data.js.map +1 -1
- package/dist/tools/market-depth-exchanges.js +1 -7
- package/dist/tools/market-depth-exchanges.js.map +1 -1
- package/dist/tools/market-depth.js +1 -7
- package/dist/tools/market-depth.js.map +1 -1
- package/dist/tools/market-scanner.js +1 -7
- package/dist/tools/market-scanner.js.map +1 -1
- package/dist/tools/modify-order.js +1 -4
- package/dist/tools/modify-order.js.map +1 -1
- package/dist/tools/next-valid-order-id.js +1 -7
- package/dist/tools/next-valid-order-id.js.map +1 -1
- package/dist/tools/open-orders-auto.js +1 -7
- package/dist/tools/open-orders-auto.js.map +1 -1
- package/dist/tools/open-orders.js +1 -7
- package/dist/tools/open-orders.js.map +1 -1
- package/dist/tools/place-new-order.js +1 -4
- package/dist/tools/place-new-order.js.map +1 -1
- package/dist/tools/place-order.js +1 -2
- package/dist/tools/place-order.js.map +1 -1
- package/dist/tools/pnl-single.js +1 -10
- package/dist/tools/pnl-single.js.map +1 -1
- package/dist/tools/pnl.js +1 -10
- package/dist/tools/pnl.js.map +1 -1
- package/dist/tools/positions.js +1 -7
- package/dist/tools/positions.js.map +1 -1
- package/dist/tools/search-contracts.js +2 -8
- package/dist/tools/search-contracts.js.map +1 -1
- package/dist/tools/sec-def-opt-params.js +1 -7
- package/dist/tools/sec-def-opt-params.js.map +1 -1
- package/dist/tools/user-info.js +1 -7
- package/dist/tools/user-info.js.map +1 -1
- package/package.json +6 -6
- package/dist/tests/unit/api-next/search-contracts.test.js.map +0 -1
- /package/dist/tests/unit/api-next/{search-contracts.test.d.ts → get-matching-symbols.d.ts} +0 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const market_scanner_1 = require("../../../api-next/market-scanner/market-scanner");
|
|
7
|
+
const api_1 = require("../../../api/api");
|
|
8
|
+
const event_name_1 = require("../../../api/data/enum/event-name");
|
|
9
|
+
const configuration_1 = __importDefault(require("../../../common/configuration"));
|
|
10
|
+
describe("IBApi market scanner tests", () => {
|
|
11
|
+
jest.setTimeout(5000);
|
|
12
|
+
let ib;
|
|
13
|
+
const clientId = Math.floor(Math.random() * 32766) + 1; // ensure unique client
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
ib = new api_1.IBApi({
|
|
16
|
+
host: configuration_1.default.ib_host,
|
|
17
|
+
port: configuration_1.default.ib_port,
|
|
18
|
+
clientId,
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
if (ib) {
|
|
23
|
+
ib.disconnect();
|
|
24
|
+
ib = undefined;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
test("Scanner parameters", (done) => {
|
|
28
|
+
ib.on(event_name_1.EventName.scannerParameters, (xml) => {
|
|
29
|
+
const match = '<?xml version="1.0" encoding="UTF-8"?>'; // eslint-disable-line quotes
|
|
30
|
+
expect(xml.substring(0, match.length)).toEqual(match);
|
|
31
|
+
ib.disconnect();
|
|
32
|
+
})
|
|
33
|
+
.on(event_name_1.EventName.disconnected, () => {
|
|
34
|
+
done();
|
|
35
|
+
})
|
|
36
|
+
.on(event_name_1.EventName.error, (err, code, reqId) => {
|
|
37
|
+
if (reqId !== -1)
|
|
38
|
+
done(`[${reqId}] ${err.message} (#${code})`);
|
|
39
|
+
});
|
|
40
|
+
ib.connect().reqScannerParameters();
|
|
41
|
+
});
|
|
42
|
+
test("Most active US stocks", (done) => {
|
|
43
|
+
const refId = 1;
|
|
44
|
+
ib.once(event_name_1.EventName.nextValidId, (_reqId) => {
|
|
45
|
+
ib.reqScannerSubscription(refId, {
|
|
46
|
+
abovePrice: 1,
|
|
47
|
+
scanCode: market_scanner_1.ScanCode.MOST_ACTIVE,
|
|
48
|
+
locationCode: market_scanner_1.LocationCode.STK_US,
|
|
49
|
+
instrument: market_scanner_1.Instrument.STK,
|
|
50
|
+
numberOfRows: 20,
|
|
51
|
+
});
|
|
52
|
+
})
|
|
53
|
+
.on(event_name_1.EventName.scannerData, (reqId, _rank, _contract, _distance, _benchmark, _projection, _legStr) => {
|
|
54
|
+
expect(reqId).toEqual(refId);
|
|
55
|
+
})
|
|
56
|
+
.on(event_name_1.EventName.scannerDataEnd, (reqId) => {
|
|
57
|
+
expect(reqId).toEqual(refId);
|
|
58
|
+
if (ib)
|
|
59
|
+
ib.disconnect();
|
|
60
|
+
})
|
|
61
|
+
.on(event_name_1.EventName.disconnected, () => {
|
|
62
|
+
done();
|
|
63
|
+
})
|
|
64
|
+
.on(event_name_1.EventName.error, (err, code, reqId) => {
|
|
65
|
+
if (reqId == refId)
|
|
66
|
+
done(`[${reqId}] ${err.message} (#${code})`);
|
|
67
|
+
});
|
|
68
|
+
ib.connect();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=market-scanner.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market-scanner.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/api/market-scanner.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const api_1 = require("../../../api/api");
|
|
7
|
+
const event_name_1 = require("../../../api/data/enum/event-name");
|
|
8
|
+
const configuration_1 = __importDefault(require("../../../common/configuration"));
|
|
9
|
+
describe("IBApi reqMatchingSymbols Tests", () => {
|
|
10
|
+
jest.setTimeout(5000);
|
|
11
|
+
let ib;
|
|
12
|
+
const clientId = Math.floor(Math.random() * 32766) + 1; // ensure unique client
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
ib = new api_1.IBApi({
|
|
15
|
+
host: configuration_1.default.ib_host,
|
|
16
|
+
port: configuration_1.default.ib_port,
|
|
17
|
+
clientId,
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
if (ib) {
|
|
22
|
+
ib.disconnect();
|
|
23
|
+
ib = undefined;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
test("SPY", (done) => {
|
|
27
|
+
const refId = 1;
|
|
28
|
+
ib.once(event_name_1.EventName.nextValidId, (_reqId) => {
|
|
29
|
+
ib.reqMatchingSymbols(refId, "SPY");
|
|
30
|
+
})
|
|
31
|
+
.on(event_name_1.EventName.symbolSamples, (reqId, contractDescriptions) => {
|
|
32
|
+
expect(reqId).toEqual(refId);
|
|
33
|
+
expect(contractDescriptions[0].contract.symbol).toEqual("SPY");
|
|
34
|
+
ib.disconnect();
|
|
35
|
+
})
|
|
36
|
+
.on(event_name_1.EventName.disconnected, () => {
|
|
37
|
+
done();
|
|
38
|
+
})
|
|
39
|
+
.on(event_name_1.EventName.error, (err, code, reqId) => {
|
|
40
|
+
if (reqId == refId)
|
|
41
|
+
done(`[${reqId}] ${err.message} (#${code})`);
|
|
42
|
+
});
|
|
43
|
+
ib.connect();
|
|
44
|
+
});
|
|
45
|
+
test("META", (done) => {
|
|
46
|
+
const refId = 2;
|
|
47
|
+
ib.once(event_name_1.EventName.nextValidId, (_reqId) => {
|
|
48
|
+
ib.reqMatchingSymbols(refId, "META");
|
|
49
|
+
})
|
|
50
|
+
.on(event_name_1.EventName.symbolSamples, (reqId, contractDescriptions) => {
|
|
51
|
+
expect(reqId).toEqual(refId);
|
|
52
|
+
expect(contractDescriptions[0].contract.symbol).toEqual("META");
|
|
53
|
+
ib.disconnect();
|
|
54
|
+
})
|
|
55
|
+
.on(event_name_1.EventName.disconnected, () => {
|
|
56
|
+
done();
|
|
57
|
+
})
|
|
58
|
+
.on(event_name_1.EventName.error, (err, code, reqId) => {
|
|
59
|
+
if (reqId == refId)
|
|
60
|
+
done(`[${reqId}] ${err.message} (#${code})`);
|
|
61
|
+
});
|
|
62
|
+
ib.connect();
|
|
63
|
+
});
|
|
64
|
+
test("AMC", (done) => {
|
|
65
|
+
const refId = 3;
|
|
66
|
+
ib.once(event_name_1.EventName.nextValidId, (_reqId) => {
|
|
67
|
+
ib.reqMatchingSymbols(refId, "AMC");
|
|
68
|
+
})
|
|
69
|
+
.on(event_name_1.EventName.symbolSamples, (reqId, contractDescriptions) => {
|
|
70
|
+
expect(reqId).toEqual(refId);
|
|
71
|
+
expect(contractDescriptions[0].contract.symbol).toEqual("AMC");
|
|
72
|
+
ib.disconnect();
|
|
73
|
+
})
|
|
74
|
+
.on(event_name_1.EventName.disconnected, () => {
|
|
75
|
+
done();
|
|
76
|
+
})
|
|
77
|
+
.on(event_name_1.EventName.error, (err, code, reqId) => {
|
|
78
|
+
if (reqId == refId)
|
|
79
|
+
done(`[${reqId}] ${err.message} (#${code})`);
|
|
80
|
+
});
|
|
81
|
+
ib.connect();
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=matching-symbols.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matching-symbols.test.js","sourceRoot":"","sources":["../../../../src/tests/unit/api/matching-symbols.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/**
|
|
7
|
+
* This file implement test code for the placeOrder function .
|
|
8
|
+
*/
|
|
9
|
+
const __1 = require("../../../..");
|
|
10
|
+
const configuration_1 = __importDefault(require("../../../../common/configuration"));
|
|
11
|
+
const logger_1 = __importDefault(require("../../../../common/logger"));
|
|
12
|
+
describe("CancelOrder", () => {
|
|
13
|
+
jest.setTimeout(20 * 1000);
|
|
14
|
+
let ib;
|
|
15
|
+
let clientId = Math.floor(Math.random() * 32766) + 1; // ensure unique client
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
ib = new __1.IBApi({
|
|
18
|
+
host: configuration_1.default.ib_host,
|
|
19
|
+
port: configuration_1.default.ib_port,
|
|
20
|
+
clientId: clientId++, // increment clientId for each test so they don't interfere on each other
|
|
21
|
+
});
|
|
22
|
+
// logger.info("IBApi created");
|
|
23
|
+
});
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
if (ib) {
|
|
26
|
+
ib.disconnect();
|
|
27
|
+
ib = undefined;
|
|
28
|
+
}
|
|
29
|
+
// logger.info("IBApi disconnected");
|
|
30
|
+
});
|
|
31
|
+
test("cancelOrder", (done) => {
|
|
32
|
+
let refId;
|
|
33
|
+
const contract = {
|
|
34
|
+
symbol: "AAPL",
|
|
35
|
+
exchange: "SMART",
|
|
36
|
+
currency: "USD",
|
|
37
|
+
secType: __1.SecType.STK,
|
|
38
|
+
};
|
|
39
|
+
const order = {
|
|
40
|
+
orderType: __1.OrderType.LMT,
|
|
41
|
+
action: __1.OrderAction.BUY,
|
|
42
|
+
lmtPrice: 1,
|
|
43
|
+
totalQuantity: 1,
|
|
44
|
+
// account: "DU123567",
|
|
45
|
+
tif: __1.TimeInForce.GTC,
|
|
46
|
+
transmit: true,
|
|
47
|
+
};
|
|
48
|
+
let order_found = false;
|
|
49
|
+
ib.once(__1.EventName.nextValidId, (orderId) => {
|
|
50
|
+
refId = orderId;
|
|
51
|
+
ib.placeOrder(refId, contract, order);
|
|
52
|
+
})
|
|
53
|
+
.on(__1.EventName.openOrder, (orderId, _contract, _order, _orderState) => {
|
|
54
|
+
expect(orderId).toEqual(refId);
|
|
55
|
+
if (!order_found && orderId === refId) {
|
|
56
|
+
order_found = true;
|
|
57
|
+
ib.cancelOrder(refId);
|
|
58
|
+
}
|
|
59
|
+
})
|
|
60
|
+
.on(__1.EventName.orderStatus, (orderId, _status, _filled, _remaining, _avgFillPrice, _permId, _parentId, _lastFillPrice, _clientId, _whyHeld, _mktCapPrice) => {
|
|
61
|
+
expect(orderId).toEqual(refId);
|
|
62
|
+
})
|
|
63
|
+
.on(__1.EventName.openOrderEnd, () => { })
|
|
64
|
+
.on(__1.EventName.error, (error, code, reqId, _advancedOrderReject) => {
|
|
65
|
+
if (reqId === -1) {
|
|
66
|
+
logger_1.default.info(error.message);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const msg = `[${reqId}] ${error.message} (Error #${code})`;
|
|
70
|
+
if (error.message.includes("Warning:")) {
|
|
71
|
+
logger_1.default.warn(msg);
|
|
72
|
+
}
|
|
73
|
+
else if (code == __1.ErrorCode.ORDER_CANCELLED &&
|
|
74
|
+
reqId == refId &&
|
|
75
|
+
order_found) {
|
|
76
|
+
done();
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
done(msg);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
ib.connect().reqOpenOrders();
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=cancelOrder.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancelOrder.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/api/order/cancelOrder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
* This file implement test code for the placeOrder function .
|
|
8
8
|
*/
|
|
9
9
|
const __1 = require("../../../..");
|
|
10
|
-
// import OptionType from "../../../../api/data/enum/option-type";
|
|
11
10
|
const configuration_1 = __importDefault(require("../../../../common/configuration"));
|
|
12
11
|
const logger_1 = __importDefault(require("../../../../common/logger"));
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
jest.setTimeout(10000);
|
|
12
|
+
describe("Place Orders", () => {
|
|
13
|
+
jest.setTimeout(20 * 1000);
|
|
16
14
|
let ib;
|
|
17
15
|
let clientId = Math.floor(Math.random() * 32766) + 1; // ensure unique client
|
|
18
16
|
beforeEach(() => {
|
|
@@ -31,7 +29,36 @@ describe("PlaceOrder", () => {
|
|
|
31
29
|
// logger.info("IBApi disconnected");
|
|
32
30
|
});
|
|
33
31
|
test("Simple placeOrder", (done) => {
|
|
34
|
-
|
|
32
|
+
let refId;
|
|
33
|
+
const contract = {
|
|
34
|
+
symbol: "AAPL",
|
|
35
|
+
exchange: "SMART",
|
|
36
|
+
currency: "USD",
|
|
37
|
+
secType: __1.SecType.STK,
|
|
38
|
+
};
|
|
39
|
+
const order = {
|
|
40
|
+
orderType: __1.OrderType.LMT,
|
|
41
|
+
action: __1.OrderAction.BUY,
|
|
42
|
+
lmtPrice: 1,
|
|
43
|
+
orderId: refId,
|
|
44
|
+
totalQuantity: 2,
|
|
45
|
+
// account: "DU123567",
|
|
46
|
+
tif: __1.TimeInForce.DAY,
|
|
47
|
+
transmit: true,
|
|
48
|
+
};
|
|
49
|
+
ib.once(__1.EventName.nextValidId, (orderId) => {
|
|
50
|
+
refId = orderId;
|
|
51
|
+
ib.placeOrder(refId, contract, order);
|
|
52
|
+
})
|
|
53
|
+
.on(__1.EventName.openOrder, (orderId, contract, order, _orderState) => {
|
|
54
|
+
expect(orderId).toEqual(refId);
|
|
55
|
+
expect(contract.symbol).toEqual("AAPL");
|
|
56
|
+
expect(order.totalQuantity).toEqual(2);
|
|
57
|
+
if (orderId === refId) {
|
|
58
|
+
done();
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
.on(__1.EventName.error, (error, code, reqId, _advancedOrderReject) => {
|
|
35
62
|
if (reqId === -1) {
|
|
36
63
|
logger_1.default.info(error.message);
|
|
37
64
|
}
|
|
@@ -45,49 +72,45 @@ describe("PlaceOrder", () => {
|
|
|
45
72
|
done(msg);
|
|
46
73
|
}
|
|
47
74
|
}
|
|
48
|
-
})
|
|
49
|
-
.on(__1.EventName.connected, () => {
|
|
50
|
-
// logger.info("connected");
|
|
51
|
-
ib.reqIds();
|
|
52
|
-
})
|
|
53
|
-
.once(__1.EventName.nextValidId, (orderId) => {
|
|
54
|
-
// buy an Apple call, with a PriceCondition on underlying
|
|
55
|
-
const contract = {
|
|
56
|
-
symbol: "AAPL",
|
|
57
|
-
exchange: "SMART",
|
|
58
|
-
currency: "USD",
|
|
59
|
-
secType: __1.SecType.STK,
|
|
60
|
-
};
|
|
61
|
-
ib.placeOrder(orderId, contract, {
|
|
62
|
-
orderType: __1.OrderType.LMT,
|
|
63
|
-
action: __1.OrderAction.BUY,
|
|
64
|
-
lmtPrice: 1,
|
|
65
|
-
orderId,
|
|
66
|
-
totalQuantity: 1,
|
|
67
|
-
// account: "DU123567",
|
|
68
|
-
tif: "DAY",
|
|
69
|
-
transmit: true,
|
|
70
|
-
});
|
|
71
|
-
// verify result
|
|
72
|
-
let received = false;
|
|
73
|
-
ib.on(__1.EventName.openOrder, (id, _contract, _order, _orderState) => {
|
|
74
|
-
if (id === orderId) {
|
|
75
|
-
received = true;
|
|
76
|
-
}
|
|
77
|
-
}).on(__1.EventName.openOrderEnd, () => {
|
|
78
|
-
ib.disconnect();
|
|
79
|
-
if (received)
|
|
80
|
-
done();
|
|
81
|
-
else
|
|
82
|
-
done(`Order ${orderId} not placed`);
|
|
83
|
-
});
|
|
84
|
-
// Give a few secs delay to get order placed
|
|
85
|
-
awaitTimeout(5).then(() => ib.reqOpenOrders());
|
|
86
75
|
});
|
|
87
|
-
ib.connect();
|
|
76
|
+
ib.connect().reqOpenOrders();
|
|
88
77
|
});
|
|
89
78
|
test("placeOrder with PriceCondition", (done) => {
|
|
90
|
-
|
|
79
|
+
let refId;
|
|
80
|
+
// buy an Apple call, with a PriceCondition on underlying
|
|
81
|
+
const contract = {
|
|
82
|
+
symbol: "AAPL",
|
|
83
|
+
exchange: "SMART",
|
|
84
|
+
currency: "USD",
|
|
85
|
+
secType: __1.SecType.OPT,
|
|
86
|
+
right: __1.OptionType.Call,
|
|
87
|
+
strike: 200,
|
|
88
|
+
multiplier: 100,
|
|
89
|
+
lastTradeDateOrContractMonth: "20251219",
|
|
90
|
+
};
|
|
91
|
+
const priceCondition = new __1.PriceCondition(29, __1.TriggerMethod.Default, 265598, "SMART", true, __1.ConjunctionConnection.OR);
|
|
92
|
+
const order = {
|
|
93
|
+
orderType: __1.OrderType.LMT,
|
|
94
|
+
action: __1.OrderAction.BUY,
|
|
95
|
+
lmtPrice: 0.01,
|
|
96
|
+
totalQuantity: 1,
|
|
97
|
+
// account: "DU123567",
|
|
98
|
+
conditionsIgnoreRth: true,
|
|
99
|
+
conditionsCancelOrder: false,
|
|
100
|
+
conditions: [priceCondition],
|
|
101
|
+
transmit: true,
|
|
102
|
+
};
|
|
103
|
+
ib.once(__1.EventName.nextValidId, (orderId) => {
|
|
104
|
+
refId = orderId;
|
|
105
|
+
ib.placeOrder(refId, contract, order);
|
|
106
|
+
})
|
|
107
|
+
.on(__1.EventName.openOrder, (orderId, _contract, _order, _orderState) => {
|
|
108
|
+
expect(orderId).toEqual(refId);
|
|
109
|
+
if (orderId === refId) {
|
|
110
|
+
done();
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
.on(__1.EventName.error, (error, code, reqId, _advancedOrderReject) => {
|
|
91
114
|
if (reqId === -1) {
|
|
92
115
|
logger_1.default.info(error.message);
|
|
93
116
|
}
|
|
@@ -101,54 +124,8 @@ describe("PlaceOrder", () => {
|
|
|
101
124
|
done(msg);
|
|
102
125
|
}
|
|
103
126
|
}
|
|
104
|
-
})
|
|
105
|
-
.on(__1.EventName.connected, () => {
|
|
106
|
-
// logger.info("connected");
|
|
107
|
-
ib.reqIds();
|
|
108
|
-
})
|
|
109
|
-
.once(__1.EventName.nextValidId, (orderId) => {
|
|
110
|
-
// buy an Apple call, with a PriceCondition on underlying
|
|
111
|
-
const contract = {
|
|
112
|
-
symbol: "AAPL",
|
|
113
|
-
exchange: "SMART",
|
|
114
|
-
currency: "USD",
|
|
115
|
-
secType: __1.SecType.OPT,
|
|
116
|
-
right: __1.OptionType.Call,
|
|
117
|
-
strike: 200,
|
|
118
|
-
multiplier: 100,
|
|
119
|
-
lastTradeDateOrContractMonth: "20251219",
|
|
120
|
-
};
|
|
121
|
-
const priceCondition = new __1.PriceCondition(29, __1.TriggerMethod.Default, 3691937, // AMZN Stock on SMART
|
|
122
|
-
"SMART", true, __1.ConjunctionConnection.OR);
|
|
123
|
-
ib.placeOrder(orderId, contract, {
|
|
124
|
-
orderType: __1.OrderType.LMT,
|
|
125
|
-
action: __1.OrderAction.BUY,
|
|
126
|
-
lmtPrice: 0.01,
|
|
127
|
-
orderId,
|
|
128
|
-
totalQuantity: 1,
|
|
129
|
-
// account: "DU123567",
|
|
130
|
-
conditionsIgnoreRth: true,
|
|
131
|
-
conditionsCancelOrder: false,
|
|
132
|
-
conditions: [priceCondition],
|
|
133
|
-
transmit: true,
|
|
134
|
-
});
|
|
135
|
-
// verify result
|
|
136
|
-
let received = false;
|
|
137
|
-
ib.on(__1.EventName.openOrder, (id, _contract, _order, _orderState) => {
|
|
138
|
-
if (id === orderId) {
|
|
139
|
-
received = true;
|
|
140
|
-
}
|
|
141
|
-
}).on(__1.EventName.openOrderEnd, () => {
|
|
142
|
-
ib.disconnect();
|
|
143
|
-
if (received)
|
|
144
|
-
done();
|
|
145
|
-
else
|
|
146
|
-
done(`Order ${orderId} not placed`);
|
|
147
|
-
});
|
|
148
|
-
// Give a few secs delay to get order placed
|
|
149
|
-
awaitTimeout(5).then(() => ib.reqOpenOrders());
|
|
150
127
|
});
|
|
151
|
-
ib.connect();
|
|
128
|
+
ib.connect().reqOpenOrders();
|
|
152
129
|
});
|
|
153
130
|
});
|
|
154
131
|
//# sourceMappingURL=placeOrder.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placeOrder.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/api/order/placeOrder.test.ts"],"names":[],"mappings":";;;;;AAAA;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"placeOrder.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/api/order/placeOrder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,42 +13,43 @@ const TEST_SERVER_HOST = configuration_1.default.ib_host;
|
|
|
13
13
|
const TEST_SERVER_POST = configuration_1.default.ib_port;
|
|
14
14
|
describe("RequestAllOpenOrders", () => {
|
|
15
15
|
jest.setTimeout(10000);
|
|
16
|
-
let
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
let ib;
|
|
17
|
+
const clientId = Math.floor(Math.random() * 32766) + 1; // ensure unique client
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
ib = new __1.IBApi({
|
|
20
|
+
host: configuration_1.default.ib_host,
|
|
21
|
+
port: configuration_1.default.ib_port,
|
|
22
|
+
clientId,
|
|
21
23
|
});
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
// logger.info("IBApi created");
|
|
25
|
+
});
|
|
26
|
+
afterEach(() => {
|
|
27
|
+
if (ib) {
|
|
28
|
+
ib.disconnect();
|
|
29
|
+
ib = undefined;
|
|
30
|
+
}
|
|
31
|
+
// logger.info("IBApi disconnected");
|
|
32
|
+
});
|
|
33
|
+
it("Test reqAllOpenOrders", (done) => {
|
|
34
|
+
ib.once(__1.EventName.nextValidId, (orderId) => {
|
|
35
|
+
ib.reqAllOpenOrders();
|
|
36
|
+
})
|
|
37
|
+
.on(__1.EventName.openOrder, (orderId, contract, order, orderState) => {
|
|
24
38
|
// logger.info("openOrder message received");
|
|
25
39
|
// todo add proper verification code here
|
|
26
40
|
// expect(orderId).toBeTruthy(); We sometimes get zeros
|
|
27
41
|
})
|
|
28
42
|
.on(__1.EventName.openOrderEnd, () => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
// done
|
|
32
|
-
ib.disconnect();
|
|
33
|
-
})
|
|
34
|
-
.on(__1.EventName.connected, () => {
|
|
35
|
-
// logger.info("connected");
|
|
36
|
-
ib.reqIds();
|
|
43
|
+
if (ib)
|
|
44
|
+
ib.disconnect();
|
|
37
45
|
})
|
|
38
46
|
.on(__1.EventName.disconnected, () => {
|
|
39
|
-
|
|
40
|
-
done();
|
|
41
|
-
else
|
|
42
|
-
done("We didn't received acknowledge");
|
|
47
|
+
done();
|
|
43
48
|
})
|
|
44
|
-
.on(__1.EventName.error, (err, code,
|
|
45
|
-
done(
|
|
46
|
-
})
|
|
47
|
-
.once(__1.EventName.nextValidId, (orderId) => {
|
|
48
|
-
// logger.info(`nextValidId: ${orderId}, requesting orders`);
|
|
49
|
-
ib.reqAllOpenOrders();
|
|
49
|
+
.on(__1.EventName.error, (err, code, reqId) => {
|
|
50
|
+
done(`[${reqId}] ${err.message} (#${code})`);
|
|
50
51
|
});
|
|
51
|
-
ib.connect(
|
|
52
|
+
ib.connect();
|
|
52
53
|
});
|
|
53
54
|
});
|
|
54
55
|
//# sourceMappingURL=reqAllOpenOrders.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reqAllOpenOrders.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/api/order/reqAllOpenOrders.test.ts"],"names":[],"mappings":";;;;;AAAA,sDAAsD;AACtD;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"reqAllOpenOrders.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/api/order/reqAllOpenOrders.test.ts"],"names":[],"mappings":";;;;;AAAA,sDAAsD;AACtD;;GAEG;AACH,mCAA+C;AAC/C,qFAA6D;AAE7D,MAAM,gBAAgB,GAAG,uBAAa,CAAC,OAAO,CAAC;AAC/C,MAAM,gBAAgB,GAAG,uBAAa,CAAC,OAAO,CAAC;AAE/C,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAEvB,IAAI,EAAS,CAAC;IACd,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB;IAE/E,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,GAAG,IAAI,SAAK,CAAC;YACb,IAAI,EAAE,uBAAa,CAAC,OAAO;YAC3B,IAAI,EAAE,uBAAa,CAAC,OAAO;YAC3B,QAAQ;SACT,CAAC,CAAC;QACH,gCAAgC;IAClC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,EAAE,EAAE;YACN,EAAE,CAAC,UAAU,EAAE,CAAC;YAChB,EAAE,GAAG,SAAS,CAAC;SAChB;QACD,qCAAqC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE;QACnC,EAAE,CAAC,IAAI,CAAC,aAAS,CAAC,WAAW,EAAE,CAAC,OAAe,EAAE,EAAE;YACjD,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACxB,CAAC,CAAC;aACC,EAAE,CAAC,aAAS,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAChE,6CAA6C;YAC7C,yCAAyC;YACzC,uDAAuD;QACzD,CAAC,CAAC;aACD,EAAE,CAAC,aAAS,CAAC,YAAY,EAAE,GAAG,EAAE;YAC/B,IAAI,EAAE;gBAAE,EAAE,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC,CAAC;aACD,EAAE,CAAC,aAAS,CAAC,YAAY,EAAE,GAAG,EAAE;YAC/B,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;aACD,EAAE,CAAC,aAAS,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YACxC,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,OAAO,MAAM,IAAI,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEL,EAAE,CAAC,OAAO,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|