@quantform/core 0.4.11 → 0.5.15
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/dist/adapter/adapter-aggregate.d.ts +7 -3
- package/dist/adapter/adapter-aggregate.js +17 -18
- package/dist/adapter/adapter-aggregate.js.map +1 -1
- package/dist/adapter/adapter.d.ts +21 -21
- package/dist/adapter/adapter.js +8 -40
- package/dist/adapter/adapter.js.map +1 -1
- package/dist/adapter/backtester/backtester-adapter.d.ts +9 -7
- package/dist/adapter/backtester/backtester-adapter.js +15 -13
- package/dist/adapter/backtester/backtester-adapter.js.map +1 -1
- package/dist/{tests → adapter/backtester}/backtester-adapter.spec.d.ts +0 -0
- package/dist/adapter/backtester/backtester-adapter.spec.js +82 -0
- package/dist/adapter/backtester/backtester-adapter.spec.js.map +1 -0
- package/dist/adapter/backtester/backtester-cursor.d.ts +3 -4
- package/dist/adapter/backtester/backtester-cursor.js +2 -1
- package/dist/adapter/backtester/backtester-cursor.js.map +1 -1
- package/dist/adapter/backtester/backtester-cursor.spec.js +17 -18
- package/dist/adapter/backtester/backtester-cursor.spec.js.map +1 -1
- package/dist/adapter/backtester/backtester-streamer.d.ts +4 -1
- package/dist/adapter/backtester/backtester-streamer.js +39 -18
- package/dist/adapter/backtester/backtester-streamer.js.map +1 -1
- package/dist/adapter/backtester/backtester-streamer.spec.js +13 -13
- package/dist/adapter/backtester/backtester-streamer.spec.js.map +1 -1
- package/dist/adapter/backtester/index.js +5 -1
- package/dist/adapter/backtester/index.js.map +1 -1
- package/dist/adapter/error.d.ts +2 -0
- package/dist/adapter/error.js +12 -0
- package/dist/adapter/error.js.map +1 -0
- package/dist/adapter/index.js +5 -1
- package/dist/adapter/index.js.map +1 -1
- package/dist/adapter/paper/engine/paper-engine.d.ts +11 -0
- package/dist/adapter/paper/engine/paper-engine.js +103 -0
- package/dist/adapter/paper/engine/paper-engine.js.map +1 -0
- package/dist/adapter/paper/{simulator/paper-spot-simulator.spec.d.ts → engine/paper-engine.spec.d.ts} +0 -0
- package/dist/adapter/paper/engine/paper-engine.spec.js +54 -0
- package/dist/adapter/paper/engine/paper-engine.spec.js.map +1 -0
- package/dist/adapter/paper/index.d.ts +1 -2
- package/dist/adapter/paper/index.js +6 -3
- package/dist/adapter/paper/index.js.map +1 -1
- package/dist/adapter/paper/paper-adapter.d.ts +7 -7
- package/dist/adapter/paper/paper-adapter.js +21 -19
- package/dist/adapter/paper/paper-adapter.js.map +1 -1
- package/dist/adapter/paper/paper-adapter.spec.js +35 -15
- package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
- package/dist/bootstrap.js +32 -15
- package/dist/bootstrap.js.map +1 -1
- package/dist/cli/build.d.ts +1 -0
- package/dist/cli/build.js +16 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/dev.d.ts +1 -0
- package/dist/cli/dev.js +17 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +72 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/internal/workspace.d.ts +8 -0
- package/dist/cli/internal/workspace.js +14 -0
- package/dist/cli/internal/workspace.js.map +1 -0
- package/dist/cli/pull.d.ts +1 -0
- package/dist/cli/pull.js +52 -0
- package/dist/cli/pull.js.map +1 -0
- package/dist/cli/run.d.ts +1 -0
- package/dist/cli/run.js +19 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/test.d.ts +1 -0
- package/dist/cli/test.js +41 -0
- package/dist/cli/test.js.map +1 -0
- package/dist/domain/asset.d.ts +6 -5
- package/dist/domain/asset.js +22 -16
- package/dist/domain/asset.js.map +1 -1
- package/dist/domain/asset.spec.js +32 -32
- package/dist/domain/asset.spec.js.map +1 -1
- package/dist/domain/balance.d.ts +11 -10
- package/dist/domain/balance.js +38 -32
- package/dist/domain/balance.js.map +1 -1
- package/dist/domain/balance.operator.d.ts +6 -0
- package/dist/domain/balance.operator.js +10 -0
- package/dist/domain/balance.operator.js.map +1 -0
- package/dist/{ipc.spec.d.ts → domain/balance.operator.spec.d.ts} +0 -0
- package/dist/domain/balance.operator.spec.js +23 -0
- package/dist/domain/balance.operator.spec.js.map +1 -0
- package/dist/domain/balance.spec.js +69 -9
- package/dist/domain/balance.spec.js.map +1 -1
- package/dist/domain/candle.d.ts +2 -15
- package/dist/domain/candle.js +3 -66
- package/dist/domain/candle.js.map +1 -1
- package/dist/domain/candle.operator.d.ts +9 -0
- package/dist/domain/candle.operator.js +64 -0
- package/dist/domain/candle.operator.js.map +1 -0
- package/dist/{shared/policy.spec.d.ts → domain/candle.operator.spec.d.ts} +0 -0
- package/dist/domain/candle.operator.spec.js +111 -0
- package/dist/domain/candle.operator.spec.js.map +1 -0
- package/dist/domain/candle.spec.js +11 -53
- package/dist/domain/candle.spec.js.map +1 -1
- package/dist/domain/commission.d.ts +4 -1
- package/dist/domain/commission.js +2 -2
- package/dist/domain/commission.js.map +1 -1
- package/dist/{shared/topic.spec.d.ts → domain/commission.spec.d.ts} +0 -0
- package/dist/domain/commission.spec.js +30 -0
- package/dist/domain/commission.spec.js.map +1 -0
- package/dist/domain/component.d.ts +2 -0
- package/dist/domain/error.d.ts +5 -0
- package/dist/domain/error.js +24 -0
- package/dist/domain/error.js.map +1 -0
- package/dist/domain/index.d.ts +8 -1
- package/dist/domain/index.js +13 -2
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/instrument.d.ts +4 -2
- package/dist/domain/instrument.js +18 -9
- package/dist/domain/instrument.js.map +1 -1
- package/dist/domain/instrument.operator.d.ts +6 -0
- package/dist/domain/instrument.operator.js +14 -0
- package/dist/domain/instrument.operator.js.map +1 -0
- package/dist/{shared/worker.spec.d.ts → domain/instrument.operator.spec.d.ts} +0 -0
- package/dist/domain/instrument.operator.spec.js +24 -0
- package/dist/domain/instrument.operator.spec.js.map +1 -0
- package/dist/domain/instrument.spec.js +22 -30
- package/dist/domain/instrument.spec.js.map +1 -1
- package/dist/domain/order.d.ts +15 -16
- package/dist/domain/order.js +39 -26
- package/dist/domain/order.js.map +1 -1
- package/dist/domain/order.operator.d.ts +7 -0
- package/dist/domain/order.operator.js +14 -0
- package/dist/domain/order.operator.js.map +1 -0
- package/dist/{store/event/store-balance.event.spec.d.ts → domain/order.operator.spec.d.ts} +0 -0
- package/dist/domain/order.operator.spec.js +64 -0
- package/dist/domain/order.operator.spec.js.map +1 -0
- package/dist/{store/event/store-candle.event.spec.d.ts → domain/order.spec.d.ts} +0 -0
- package/dist/domain/order.spec.js +33 -0
- package/dist/domain/order.spec.js.map +1 -0
- package/dist/domain/orderbook.d.ts +2 -0
- package/dist/domain/orderbook.js +2 -0
- package/dist/domain/orderbook.js.map +1 -1
- package/dist/domain/orderbook.operator.d.ts +6 -0
- package/dist/domain/orderbook.operator.js +10 -0
- package/dist/domain/orderbook.operator.js.map +1 -0
- package/dist/{store/event/store-instrument.event.spec.d.ts → domain/orderbook.operator.spec.d.ts} +0 -0
- package/dist/domain/orderbook.operator.spec.js +22 -0
- package/dist/domain/orderbook.operator.spec.js.map +1 -0
- package/dist/{store/event/store-order.event.spec.d.ts → domain/orderbook.spec.d.ts} +0 -0
- package/dist/domain/orderbook.spec.js +13 -0
- package/dist/domain/orderbook.spec.js.map +1 -0
- package/dist/domain/position.d.ts +6 -10
- package/dist/domain/position.js +10 -31
- package/dist/domain/position.js.map +1 -1
- package/dist/domain/position.operator.d.ts +10 -0
- package/dist/domain/position.operator.js +38 -0
- package/dist/domain/position.operator.js.map +1 -0
- package/dist/{store/event/store-trade.event.spec.d.ts → domain/position.operator.spec.d.ts} +0 -0
- package/dist/domain/position.operator.spec.js +48 -0
- package/dist/domain/position.operator.spec.js.map +1 -0
- package/dist/domain/position.spec.js +21 -17
- package/dist/domain/position.spec.js.map +1 -1
- package/dist/domain/session.d.ts +18 -35
- package/dist/domain/session.js +27 -53
- package/dist/domain/session.js.map +1 -1
- package/dist/domain/session.spec.js +1 -1
- package/dist/domain/session.spec.js.map +1 -1
- package/dist/domain/trade.d.ts +3 -1
- package/dist/domain/trade.js +2 -0
- package/dist/domain/trade.js.map +1 -1
- package/dist/domain/trade.operator.d.ts +6 -0
- package/dist/domain/trade.operator.js +10 -0
- package/dist/domain/trade.operator.js.map +1 -0
- package/dist/domain/trade.operator.spec.d.ts +1 -0
- package/dist/domain/trade.operator.spec.js +24 -0
- package/dist/domain/trade.operator.spec.js.map +1 -0
- package/dist/domain/trade.spec.d.ts +1 -0
- package/dist/domain/trade.spec.js +13 -0
- package/dist/domain/trade.spec.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/indicator/atr.js.map +1 -1
- package/dist/indicator/cross.spec.js +2 -2
- package/dist/indicator/cross.spec.js.map +1 -1
- package/dist/indicator/donchian.js.map +1 -1
- package/dist/indicator/ema.js.map +1 -1
- package/dist/indicator/ema.spec.js +1 -1
- package/dist/indicator/ema.spec.js.map +1 -1
- package/dist/indicator/envelope.js.map +1 -1
- package/dist/indicator/index.js +5 -1
- package/dist/indicator/index.js.map +1 -1
- package/dist/indicator/macd.js.map +1 -1
- package/dist/indicator/min-max.js.map +1 -1
- package/dist/indicator/rma.js.map +1 -1
- package/dist/indicator/sma.js.map +1 -1
- package/dist/indicator/sma.spec.js +1 -1
- package/dist/indicator/sma.spec.js.map +1 -1
- package/dist/indicator/swma.js.map +1 -1
- package/dist/indicator/tma.js.map +1 -1
- package/dist/indicator/tma.spec.js +1 -1
- package/dist/indicator/tma.spec.js.map +1 -1
- package/dist/indicator/trailing.spec.js +2 -2
- package/dist/indicator/trailing.spec.js.map +1 -1
- package/dist/indicator/truerange.js.map +1 -1
- package/dist/indicator/truerange.spec.js +1 -1
- package/dist/indicator/truerange.spec.js.map +1 -1
- package/dist/indicator/window.js.map +1 -1
- package/dist/indicator/wma.js.map +1 -1
- package/dist/indicator/wma.spec.js +1 -1
- package/dist/indicator/wma.spec.js.map +1 -1
- package/dist/shared/collections.d.ts +10 -0
- package/dist/shared/collections.js +33 -0
- package/dist/shared/collections.js.map +1 -0
- package/dist/shared/datetime.d.ts +0 -1
- package/dist/shared/datetime.js +1 -12
- package/dist/shared/datetime.js.map +1 -1
- package/dist/shared/decimals.d.ts +1 -1
- package/dist/shared/decimals.js +4 -5
- package/dist/shared/decimals.js.map +1 -1
- package/dist/shared/decimals.spec.js +2 -1
- package/dist/shared/decimals.spec.js.map +1 -1
- package/dist/shared/index.d.ts +1 -3
- package/dist/shared/index.js +6 -4
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/io.js.map +1 -1
- package/dist/shared/policy.d.ts +0 -1
- package/dist/shared/policy.js +1 -11
- package/dist/shared/policy.js.map +1 -1
- package/dist/storage/cache.d.ts +9 -0
- package/dist/storage/cache.js +32 -0
- package/dist/storage/cache.js.map +1 -0
- package/dist/storage/cache.spec.d.ts +1 -0
- package/dist/storage/cache.spec.js +18 -0
- package/dist/storage/cache.spec.js.map +1 -0
- package/dist/storage/feed.d.ts +3 -4
- package/dist/storage/feed.js +16 -6
- package/dist/storage/feed.js.map +1 -1
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.js +6 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/storage.d.ts +2 -0
- package/dist/storage/storage.js +6 -1
- package/dist/storage/storage.js.map +1 -1
- package/dist/store/index.d.ts +8 -2
- package/dist/store/index.js +13 -3
- package/dist/store/index.js.map +1 -1
- package/dist/store/store-balance.event.d.ts +33 -0
- package/dist/store/store-balance.event.js +90 -0
- package/dist/store/store-balance.event.js.map +1 -0
- package/dist/store/store-balance.event.spec.d.ts +1 -0
- package/dist/store/{event/store-balance.event.spec.js → store-balance.event.spec.js} +8 -8
- package/dist/store/store-balance.event.spec.js.map +1 -0
- package/dist/store/{event/store-instrument.event.d.ts → store-instrument.event.d.ts} +5 -8
- package/dist/store/store-instrument.event.js +52 -0
- package/dist/store/store-instrument.event.js.map +1 -0
- package/dist/store/store-instrument.event.spec.d.ts +1 -0
- package/dist/store/store-instrument.event.spec.js +22 -0
- package/dist/store/store-instrument.event.spec.js.map +1 -0
- package/dist/store/store-order.event.d.ts +59 -0
- package/dist/store/store-order.event.js +181 -0
- package/dist/store/store-order.event.js.map +1 -0
- package/dist/store/store-order.event.spec.d.ts +1 -0
- package/dist/store/{event/store-order.event.spec.js → store-order.event.spec.js} +8 -8
- package/dist/store/store-order.event.spec.js.map +1 -0
- package/dist/store/{event/store-orderbook.event.d.ts → store-orderbook.event.d.ts} +4 -5
- package/dist/store/store-orderbook.event.js +42 -0
- package/dist/store/store-orderbook.event.js.map +1 -0
- package/dist/store/{event/store-position.event.d.ts → store-position.event.d.ts} +5 -7
- package/dist/store/store-position.event.js +77 -0
- package/dist/store/store-position.event.js.map +1 -0
- package/dist/store/store-state.d.ts +27 -0
- package/dist/store/store-state.js +29 -0
- package/dist/store/store-state.js.map +1 -0
- package/dist/store/{event/store-trade.event.d.ts → store-trade.event.d.ts} +4 -5
- package/dist/store/store-trade.event.js +25 -0
- package/dist/store/store-trade.event.js.map +1 -0
- package/dist/store/store-trade.event.spec.d.ts +1 -0
- package/dist/store/{event/store-trade.event.spec.js → store-trade.event.spec.js} +14 -14
- package/dist/store/store-trade.event.spec.js.map +1 -0
- package/dist/store/store.d.ts +4 -25
- package/dist/store/store.event.d.ts +6 -0
- package/dist/store/{event/store.event.js → store.event.js} +0 -0
- package/dist/store/store.event.js.map +1 -0
- package/dist/store/store.js +7 -195
- package/dist/store/store.js.map +1 -1
- package/dist/store/store.spec.d.ts +1 -0
- package/dist/store/store.spec.js +119 -0
- package/dist/store/store.spec.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/{jestconfig.unit.json → jestconfig.json} +1 -2
- package/package.json +24 -20
- package/src/adapter/adapter-aggregate.ts +31 -34
- package/src/adapter/adapter.ts +26 -49
- package/src/adapter/backtester/backtester-adapter.spec.ts +124 -0
- package/src/adapter/backtester/backtester-adapter.ts +30 -17
- package/src/adapter/backtester/backtester-cursor.spec.ts +18 -19
- package/src/adapter/backtester/backtester-cursor.ts +7 -7
- package/src/adapter/backtester/backtester-streamer.spec.ts +19 -19
- package/src/adapter/backtester/backtester-streamer.ts +50 -20
- package/src/adapter/error.ts +9 -0
- package/src/adapter/paper/engine/paper-engine.spec.ts +92 -0
- package/src/adapter/paper/engine/paper-engine.ts +135 -0
- package/src/adapter/paper/index.ts +1 -2
- package/src/adapter/paper/paper-adapter.spec.ts +55 -17
- package/src/adapter/paper/paper-adapter.ts +27 -24
- package/src/bootstrap.ts +57 -21
- package/src/cli/build.ts +15 -0
- package/src/cli/dev.ts +18 -0
- package/src/cli/index.ts +81 -0
- package/src/cli/internal/workspace.ts +18 -0
- package/src/cli/pull.ts +71 -0
- package/src/cli/run.ts +22 -0
- package/src/cli/test.ts +53 -0
- package/src/domain/asset.spec.ts +33 -29
- package/src/domain/asset.ts +27 -21
- package/src/domain/balance.operator.spec.ts +25 -0
- package/src/domain/balance.operator.ts +15 -0
- package/src/domain/balance.spec.ts +97 -9
- package/src/domain/balance.ts +48 -41
- package/src/domain/candle.operator.spec.ts +125 -0
- package/src/domain/candle.operator.ts +106 -0
- package/src/domain/candle.spec.ts +12 -67
- package/src/domain/candle.ts +2 -104
- package/src/domain/commission.spec.ts +33 -0
- package/src/domain/commission.ts +2 -2
- package/src/domain/component.ts +2 -0
- package/src/domain/error.ts +25 -0
- package/src/domain/index.ts +8 -1
- package/src/domain/instrument.operator.spec.ts +28 -0
- package/src/domain/instrument.operator.ts +25 -0
- package/src/domain/instrument.spec.ts +22 -30
- package/src/domain/instrument.ts +21 -11
- package/src/domain/order.operator.spec.ts +81 -0
- package/src/domain/order.operator.ts +23 -0
- package/src/domain/order.spec.ts +43 -0
- package/src/domain/order.ts +46 -47
- package/src/domain/orderbook.operator.spec.ts +28 -0
- package/src/domain/orderbook.operator.ts +15 -0
- package/src/domain/orderbook.spec.ts +17 -0
- package/src/domain/orderbook.ts +5 -1
- package/src/domain/position.operator.spec.ts +58 -0
- package/src/domain/position.operator.ts +61 -0
- package/src/domain/position.spec.ts +28 -24
- package/src/domain/position.ts +17 -47
- package/src/domain/session.spec.ts +1 -1
- package/src/domain/session.ts +57 -197
- package/src/domain/trade.operator.spec.ts +31 -0
- package/src/domain/trade.operator.ts +15 -0
- package/src/domain/trade.spec.ts +17 -0
- package/src/domain/trade.ts +6 -2
- package/src/index.ts +0 -1
- package/src/indicator/atr.ts +1 -0
- package/src/indicator/cross.spec.ts +3 -2
- package/src/indicator/donchian.ts +1 -0
- package/src/indicator/ema.spec.ts +2 -1
- package/src/indicator/ema.ts +1 -0
- package/src/indicator/envelope.ts +1 -0
- package/src/indicator/macd.ts +1 -0
- package/src/indicator/min-max.ts +1 -0
- package/src/indicator/rma.ts +1 -0
- package/src/indicator/sma.spec.ts +2 -1
- package/src/indicator/sma.ts +1 -0
- package/src/indicator/swma.ts +1 -0
- package/src/indicator/tma.spec.ts +2 -1
- package/src/indicator/tma.ts +1 -0
- package/src/indicator/trailing.spec.ts +3 -2
- package/src/indicator/truerange.spec.ts +2 -1
- package/src/indicator/truerange.ts +1 -0
- package/src/indicator/window.ts +1 -0
- package/src/indicator/wma.spec.ts +2 -1
- package/src/indicator/wma.ts +1 -0
- package/src/shared/collections.ts +35 -0
- package/src/shared/datetime.ts +0 -12
- package/src/shared/decimals.spec.ts +2 -1
- package/src/shared/decimals.ts +6 -6
- package/src/shared/index.ts +1 -3
- package/src/shared/io.ts +0 -2
- package/src/shared/policy.ts +0 -13
- package/src/storage/cache.spec.ts +18 -0
- package/src/storage/cache.ts +35 -0
- package/src/storage/feed.ts +26 -16
- package/src/storage/index.ts +1 -0
- package/src/storage/storage.ts +11 -0
- package/src/store/index.ts +8 -2
- package/src/store/{event/store-balance.event.spec.ts → store-balance.event.spec.ts} +7 -7
- package/src/store/store-balance.event.ts +124 -0
- package/src/store/store-instrument.event.spec.ts +25 -0
- package/src/store/store-instrument.event.ts +72 -0
- package/src/store/store-order.event.spec.ts +28 -0
- package/src/store/store-order.event.ts +214 -0
- package/src/store/store-orderbook.event.ts +54 -0
- package/src/store/store-position.event.ts +102 -0
- package/src/store/store-state.ts +48 -0
- package/src/store/{event/store-trade.event.spec.ts → store-trade.event.spec.ts} +15 -15
- package/src/store/store-trade.event.ts +36 -0
- package/src/store/store.event.ts +8 -0
- package/src/store/store.spec.ts +180 -0
- package/src/store/store.ts +11 -208
- package/tsconfig.json +2 -2
- package/dist/adapter/paper/simulator/paper-margin-simulator.d.ts +0 -10
- package/dist/adapter/paper/simulator/paper-margin-simulator.js +0 -69
- package/dist/adapter/paper/simulator/paper-margin-simulator.js.map +0 -1
- package/dist/adapter/paper/simulator/paper-simulator.d.ts +0 -16
- package/dist/adapter/paper/simulator/paper-simulator.js +0 -93
- package/dist/adapter/paper/simulator/paper-simulator.js.map +0 -1
- package/dist/adapter/paper/simulator/paper-spot-simulator.d.ts +0 -13
- package/dist/adapter/paper/simulator/paper-spot-simulator.js +0 -81
- package/dist/adapter/paper/simulator/paper-spot-simulator.js.map +0 -1
- package/dist/adapter/paper/simulator/paper-spot-simulator.spec.js +0 -49
- package/dist/adapter/paper/simulator/paper-spot-simulator.spec.js.map +0 -1
- package/dist/domain/statement.d.ts +0 -4
- package/dist/domain/statement.js +0 -87
- package/dist/domain/statement.js.map +0 -1
- package/dist/ipc.d.ts +0 -33
- package/dist/ipc.js +0 -244
- package/dist/ipc.js.map +0 -1
- package/dist/ipc.spec.js +0 -57
- package/dist/ipc.spec.js.map +0 -1
- package/dist/shared/policy.spec.js +0 -26
- package/dist/shared/policy.spec.js.map +0 -1
- package/dist/shared/task.d.ts +0 -6
- package/dist/shared/task.js +0 -25
- package/dist/shared/task.js.map +0 -1
- package/dist/shared/topic.d.ts +0 -14
- package/dist/shared/topic.js +0 -40
- package/dist/shared/topic.js.map +0 -1
- package/dist/shared/topic.spec.js +0 -43
- package/dist/shared/topic.spec.js.map +0 -1
- package/dist/shared/worker.d.ts +0 -10
- package/dist/shared/worker.js +0 -46
- package/dist/shared/worker.js.map +0 -1
- package/dist/shared/worker.spec.js +0 -18
- package/dist/shared/worker.spec.js.map +0 -1
- package/dist/store/event/index.d.ts +0 -8
- package/dist/store/event/index.js +0 -21
- package/dist/store/event/index.js.map +0 -1
- package/dist/store/event/store-balance.event.d.ts +0 -37
- package/dist/store/event/store-balance.event.js +0 -119
- package/dist/store/event/store-balance.event.js.map +0 -1
- package/dist/store/event/store-balance.event.spec.js.map +0 -1
- package/dist/store/event/store-candle.event.d.ts +0 -18
- package/dist/store/event/store-candle.event.js +0 -63
- package/dist/store/event/store-candle.event.js.map +0 -1
- package/dist/store/event/store-candle.event.spec.js +0 -23
- package/dist/store/event/store-candle.event.spec.js.map +0 -1
- package/dist/store/event/store-instrument.event.js +0 -78
- package/dist/store/event/store-instrument.event.js.map +0 -1
- package/dist/store/event/store-instrument.event.spec.js +0 -21
- package/dist/store/event/store-instrument.event.spec.js.map +0 -1
- package/dist/store/event/store-order.event.d.ts +0 -61
- package/dist/store/event/store-order.event.js +0 -205
- package/dist/store/event/store-order.event.js.map +0 -1
- package/dist/store/event/store-order.event.spec.js.map +0 -1
- package/dist/store/event/store-orderbook.event.js +0 -65
- package/dist/store/event/store-orderbook.event.js.map +0 -1
- package/dist/store/event/store-position.event.js +0 -97
- package/dist/store/event/store-position.event.js.map +0 -1
- package/dist/store/event/store-trade.event.js +0 -47
- package/dist/store/event/store-trade.event.js.map +0 -1
- package/dist/store/event/store-trade.event.spec.js.map +0 -1
- package/dist/store/event/store.event.d.ts +0 -5
- package/dist/store/event/store.event.js.map +0 -1
- package/dist/store/store.state.d.ts +0 -21
- package/dist/store/store.state.js +0 -21
- package/dist/store/store.state.js.map +0 -1
- package/dist/tests/backtester-adapter.spec.js +0 -60
- package/dist/tests/backtester-adapter.spec.js.map +0 -1
- package/dist/tests/session.spec.d.ts +0 -0
- package/dist/tests/session.spec.js +0 -1
- package/dist/tests/session.spec.js.map +0 -1
- package/jestconfig.integration.json +0 -12
- package/src/adapter/paper/simulator/paper-margin-simulator.ts +0 -108
- package/src/adapter/paper/simulator/paper-simulator.ts +0 -120
- package/src/adapter/paper/simulator/paper-spot-simulator.spec.ts +0 -87
- package/src/adapter/paper/simulator/paper-spot-simulator.ts +0 -134
- package/src/domain/statement.ts +0 -118
- package/src/ipc.spec.ts +0 -73
- package/src/ipc.ts +0 -321
- package/src/shared/policy.spec.ts +0 -29
- package/src/shared/task.ts +0 -30
- package/src/shared/topic.spec.ts +0 -34
- package/src/shared/topic.ts +0 -43
- package/src/shared/worker.spec.ts +0 -25
- package/src/shared/worker.ts +0 -55
- package/src/store/event/index.ts +0 -8
- package/src/store/event/store-balance.event.ts +0 -161
- package/src/store/event/store-candle.event.spec.ts +0 -30
- package/src/store/event/store-candle.event.ts +0 -71
- package/src/store/event/store-instrument.event.spec.ts +0 -25
- package/src/store/event/store-instrument.event.ts +0 -84
- package/src/store/event/store-order.event.spec.ts +0 -28
- package/src/store/event/store-order.event.ts +0 -218
- package/src/store/event/store-orderbook.event.ts +0 -70
- package/src/store/event/store-position.event.ts +0 -109
- package/src/store/event/store-trade.event.ts +0 -52
- package/src/store/event/store.event.ts +0 -6
- package/src/store/store.state.ts +0 -43
- package/src/tests/backtester-adapter.spec.ts +0 -87
- package/src/tests/session.spec.ts +0 -121
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const rxjs_1 = require("rxjs");
|
|
4
|
+
const candle_1 = require("./candle");
|
|
5
|
+
const candle_operator_1 = require("./candle.operator");
|
|
6
|
+
describe('candle', () => {
|
|
7
|
+
test('should aggregate and pipe candle updates', done => {
|
|
8
|
+
const input$ = (0, rxjs_1.from)([
|
|
9
|
+
{ timestamp: 1, rate: 1 },
|
|
10
|
+
{ timestamp: 2, rate: 2 },
|
|
11
|
+
{ timestamp: 3, rate: 3 },
|
|
12
|
+
{ timestamp: 4, rate: 0 },
|
|
13
|
+
{ timestamp: 5, rate: 7 },
|
|
14
|
+
{ timestamp: 6, rate: 8 }
|
|
15
|
+
]);
|
|
16
|
+
const output = [
|
|
17
|
+
{ timestamp: 0, open: 1, high: 1, low: 1, close: 1 },
|
|
18
|
+
{ timestamp: 0, open: 1, high: 2, low: 1, close: 2 },
|
|
19
|
+
{ timestamp: 0, open: 1, high: 3, low: 1, close: 3 },
|
|
20
|
+
{ timestamp: 0, open: 1, high: 3, low: 0, close: 0 },
|
|
21
|
+
{ timestamp: 5, open: 0, high: 7, low: 7, close: 7 },
|
|
22
|
+
{ timestamp: 5, open: 0, high: 8, low: 7, close: 8 }
|
|
23
|
+
].reverse();
|
|
24
|
+
input$.pipe((0, candle_operator_1.candle)(5, it => it.rate)).subscribe({
|
|
25
|
+
next: it => {
|
|
26
|
+
expect(it).toEqual(output.pop());
|
|
27
|
+
if (output.length === 0) {
|
|
28
|
+
done();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('candleCompleted', () => {
|
|
35
|
+
test('should aggregate and pipe distinct completed candles', done => {
|
|
36
|
+
const input$ = (0, rxjs_1.from)([
|
|
37
|
+
{ timestamp: 1, rate: 1 },
|
|
38
|
+
{ timestamp: 2, rate: 2 },
|
|
39
|
+
{ timestamp: 3, rate: 3 },
|
|
40
|
+
{ timestamp: 4, rate: 0 },
|
|
41
|
+
{ timestamp: 5, rate: 7 },
|
|
42
|
+
{ timestamp: 6, rate: 8 }
|
|
43
|
+
]);
|
|
44
|
+
input$
|
|
45
|
+
.pipe((0, candle_operator_1.candle)(5, it => it.rate), (0, candle_operator_1.candleCompleted)())
|
|
46
|
+
.subscribe({
|
|
47
|
+
next: it => {
|
|
48
|
+
expect(it).toEqual({ timestamp: 0, open: 1, high: 3, low: 0, close: 0 });
|
|
49
|
+
done();
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('mergeCandle', () => {
|
|
55
|
+
test('should pipe and merge candle from history', done => {
|
|
56
|
+
const history$ = (0, rxjs_1.from)([
|
|
57
|
+
new candle_1.Candle(1, 1, 1.5, 0.5, 2),
|
|
58
|
+
new candle_1.Candle(2, 2, 2.5, 1.5, 3),
|
|
59
|
+
new candle_1.Candle(3, 3, 3.5, 2.5, 4)
|
|
60
|
+
]);
|
|
61
|
+
const input$ = (0, rxjs_1.from)([
|
|
62
|
+
{ timestamp: 3, rate: 5 },
|
|
63
|
+
{ timestamp: 4, rate: 3 },
|
|
64
|
+
{ timestamp: 5, rate: 4 }
|
|
65
|
+
]);
|
|
66
|
+
const output = [
|
|
67
|
+
{ timestamp: 1, open: 1, high: 1.5, low: 0.5, close: 2 },
|
|
68
|
+
{ timestamp: 2, open: 2, high: 2.5, low: 1.5, close: 3 },
|
|
69
|
+
{ timestamp: 3, open: 3, high: 5, low: 2.5, close: 5 },
|
|
70
|
+
{ timestamp: 4, open: 5, high: 3, low: 3, close: 3 },
|
|
71
|
+
{ timestamp: 5, open: 3, high: 4, low: 4, close: 4 }
|
|
72
|
+
].reverse();
|
|
73
|
+
input$.pipe((0, candle_operator_1.mergeCandle)(1, it => it.rate, history$)).subscribe({
|
|
74
|
+
next: it => {
|
|
75
|
+
expect(it).toEqual(output.pop());
|
|
76
|
+
if (output.length === 0) {
|
|
77
|
+
done();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
test('should pipe and not merge candle from history', done => {
|
|
83
|
+
const history$ = (0, rxjs_1.from)([
|
|
84
|
+
new candle_1.Candle(1, 1, 1.5, 0.5, 2),
|
|
85
|
+
new candle_1.Candle(2, 2, 2.5, 1.5, 3),
|
|
86
|
+
new candle_1.Candle(3, 3, 3.5, 2.5, 4)
|
|
87
|
+
]);
|
|
88
|
+
const input$ = (0, rxjs_1.from)([
|
|
89
|
+
{ timestamp: 4, rate: 5 },
|
|
90
|
+
{ timestamp: 5, rate: 3 },
|
|
91
|
+
{ timestamp: 6, rate: 4 }
|
|
92
|
+
]);
|
|
93
|
+
const output = [
|
|
94
|
+
{ timestamp: 1, open: 1, high: 1.5, low: 0.5, close: 2 },
|
|
95
|
+
{ timestamp: 2, open: 2, high: 2.5, low: 1.5, close: 3 },
|
|
96
|
+
{ timestamp: 3, open: 3, high: 3.5, low: 2.5, close: 4 },
|
|
97
|
+
{ timestamp: 4, open: 4, high: 5, low: 5, close: 5 },
|
|
98
|
+
{ timestamp: 5, open: 5, high: 3, low: 3, close: 3 },
|
|
99
|
+
{ timestamp: 6, open: 3, high: 4, low: 4, close: 4 }
|
|
100
|
+
].reverse();
|
|
101
|
+
input$.pipe((0, candle_operator_1.mergeCandle)(1, it => it.rate, history$)).subscribe({
|
|
102
|
+
next: it => {
|
|
103
|
+
expect(it).toEqual(output.pop());
|
|
104
|
+
if (output.length === 0) {
|
|
105
|
+
done();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=candle.operator.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"candle.operator.spec.js","sourceRoot":"","sources":["../../src/domain/candle.operator.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const rxjs_1 = require("rxjs");
|
|
4
3
|
const shared_1 = require("../shared");
|
|
5
|
-
const store_1 = require("../store");
|
|
6
4
|
const candle_1 = require("./candle");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
describe('candle tests', () => {
|
|
10
|
-
test('should instantiate valid candle', () => {
|
|
5
|
+
describe('Candle', () => {
|
|
6
|
+
test('should construct a candle', () => {
|
|
11
7
|
const timestamp = (0, shared_1.now)();
|
|
12
8
|
const sut = new candle_1.Candle(timestamp, 2, 4, 1, 3);
|
|
13
9
|
expect(sut.timestamp).toEqual(timestamp);
|
|
@@ -16,53 +12,15 @@ describe('candle tests', () => {
|
|
|
16
12
|
expect(sut.low).toEqual(1);
|
|
17
13
|
expect(sut.close).toEqual(3);
|
|
18
14
|
});
|
|
19
|
-
test('should
|
|
20
|
-
const timestamp = 0;
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
new store_1.TradePatchEvent(instrument, 5, 1, timestamp + timeframe_1.Timeframe.D1 * 3),
|
|
29
|
-
new store_1.TradePatchEvent(instrument, 3, 1, timestamp + timeframe_1.Timeframe.D1 * 4),
|
|
30
|
-
new store_1.TradePatchEvent(instrument, 4, 1, timestamp + timeframe_1.Timeframe.D1 * 5)
|
|
31
|
-
]);
|
|
32
|
-
const high = [1.5, 2.5, 5, 3];
|
|
33
|
-
input$
|
|
34
|
-
.pipe((0, candle_1.mergeCandle)(timeframe_1.Timeframe.D1, it => it.rate, history$))
|
|
35
|
-
.pipe((0, rxjs_1.map)(it => {
|
|
36
|
-
expect(it.high).toBe(high.shift());
|
|
37
|
-
if (!high.length) {
|
|
38
|
-
done();
|
|
39
|
-
}
|
|
40
|
-
}))
|
|
41
|
-
.subscribe();
|
|
42
|
-
});
|
|
43
|
-
test('should pipe and not merge candle from history', done => {
|
|
44
|
-
const timestamp = 0;
|
|
45
|
-
const instrument = (0, instrument_1.instrumentOf)('binance:btc-usdt');
|
|
46
|
-
const history$ = (0, rxjs_1.from)([
|
|
47
|
-
new candle_1.Candle(timestamp + timeframe_1.Timeframe.D1 * 1, 1, 1.5, 0.5, 2),
|
|
48
|
-
new candle_1.Candle(timestamp + timeframe_1.Timeframe.D1 * 2, 2, 2.5, 1.5, 3),
|
|
49
|
-
new candle_1.Candle(timestamp + timeframe_1.Timeframe.D1 * 3, 3, 3.5, 2.5, 4)
|
|
50
|
-
]);
|
|
51
|
-
const input$ = (0, rxjs_1.from)([
|
|
52
|
-
new store_1.TradePatchEvent(instrument, 5, 1, timestamp + timeframe_1.Timeframe.D1 * 4),
|
|
53
|
-
new store_1.TradePatchEvent(instrument, 3, 1, timestamp + timeframe_1.Timeframe.D1 * 5),
|
|
54
|
-
new store_1.TradePatchEvent(instrument, 4, 1, timestamp + timeframe_1.Timeframe.D1 * 6)
|
|
55
|
-
]);
|
|
56
|
-
const high = [1.5, 2.5, 3.5, 5, 3];
|
|
57
|
-
input$
|
|
58
|
-
.pipe((0, candle_1.mergeCandle)(timeframe_1.Timeframe.D1, it => it.rate, history$))
|
|
59
|
-
.pipe((0, rxjs_1.map)(it => {
|
|
60
|
-
expect(it.high).toBe(high.shift());
|
|
61
|
-
if (!high.length) {
|
|
62
|
-
done();
|
|
63
|
-
}
|
|
64
|
-
}))
|
|
65
|
-
.subscribe();
|
|
15
|
+
test('should modify a candle', () => {
|
|
16
|
+
const timestamp = (0, shared_1.now)();
|
|
17
|
+
const sut = new candle_1.Candle(timestamp, 2, 4, 1, 3);
|
|
18
|
+
sut.apply(10);
|
|
19
|
+
expect(sut.timestamp).toEqual(timestamp);
|
|
20
|
+
expect(sut.open).toEqual(2);
|
|
21
|
+
expect(sut.high).toEqual(10);
|
|
22
|
+
expect(sut.low).toEqual(1);
|
|
23
|
+
expect(sut.close).toEqual(10);
|
|
66
24
|
});
|
|
67
25
|
});
|
|
68
26
|
//# sourceMappingURL=candle.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candle.spec.js","sourceRoot":"","sources":["../../src/domain/candle.spec.ts"],"names":[],"mappings":";;AAAA
|
|
1
|
+
{"version":3,"file":"candle.spec.js","sourceRoot":"","sources":["../../src/domain/candle.spec.ts"],"names":[],"mappings":";;AAAA,sCAAgC;AAChC,qCAAkC;AAElC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACrC,MAAM,SAAS,GAAG,IAAA,YAAG,GAAE,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,eAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9C,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAClC,MAAM,SAAS,GAAG,IAAA,YAAG,GAAE,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,eAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAEd,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -7,4 +7,7 @@ export declare class Commission {
|
|
|
7
7
|
applyMakerFee(value: number): number;
|
|
8
8
|
applyTakerFee(value: number): number;
|
|
9
9
|
}
|
|
10
|
-
export declare function commissionPercentOf(
|
|
10
|
+
export declare function commissionPercentOf(fees: {
|
|
11
|
+
maker: number;
|
|
12
|
+
taker: number;
|
|
13
|
+
}): Commission;
|
|
@@ -20,8 +20,8 @@ class Commission {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
exports.Commission = Commission;
|
|
23
|
-
function commissionPercentOf(
|
|
24
|
-
return new Commission(maker / 100.0, taker / 100.0);
|
|
23
|
+
function commissionPercentOf(fees) {
|
|
24
|
+
return new Commission(fees.maker / 100.0, fees.taker / 100.0);
|
|
25
25
|
}
|
|
26
26
|
exports.commissionPercentOf = commissionPercentOf;
|
|
27
27
|
//# sourceMappingURL=commission.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commission.js","sourceRoot":"","sources":["../../src/domain/commission.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAU;IACrB,YAAqB,SAAiB,EAAW,SAAiB;QAA7C,cAAS,GAAT,SAAS,CAAQ;QAAW,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAEtE,iBAAiB,CAAC,KAAa;QAC7B,OAAO,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;IAChC,CAAC;IAED,iBAAiB,CAAC,KAAa;QAC7B,OAAO,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;IAChC,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;CACF;AAlBD,gCAkBC;AAED,SAAgB,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"commission.js","sourceRoot":"","sources":["../../src/domain/commission.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAU;IACrB,YAAqB,SAAiB,EAAW,SAAiB;QAA7C,cAAS,GAAT,SAAS,CAAQ;QAAW,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAEtE,iBAAiB,CAAC,KAAa;QAC7B,OAAO,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;IAChC,CAAC;IAED,iBAAiB,CAAC,KAAa;QAC7B,OAAO,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;IAChC,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;CACF;AAlBD,gCAkBC;AAED,SAAgB,mBAAmB,CAAC,IAAsC;IACxE,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AAChE,CAAC;AAFD,kDAEC"}
|
|
File without changes
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const commission_1 = require("./commission");
|
|
4
|
+
describe('Commission', () => {
|
|
5
|
+
test('should construct a Commission', () => {
|
|
6
|
+
const sut = (0, commission_1.commissionPercentOf)({
|
|
7
|
+
maker: 0.1,
|
|
8
|
+
taker: 0.2
|
|
9
|
+
});
|
|
10
|
+
expect(sut.makerRate).toEqual(0.001);
|
|
11
|
+
expect(sut.takerRate).toEqual(0.002);
|
|
12
|
+
});
|
|
13
|
+
test('should calculate a maker fee', () => {
|
|
14
|
+
const sut = (0, commission_1.commissionPercentOf)({
|
|
15
|
+
maker: 0.1,
|
|
16
|
+
taker: 0.2
|
|
17
|
+
});
|
|
18
|
+
expect(sut.calculateMakerFee(2000)).toEqual(2);
|
|
19
|
+
expect(sut.applyMakerFee(2000)).toEqual(1998);
|
|
20
|
+
});
|
|
21
|
+
test('should calculate a taker fee', () => {
|
|
22
|
+
const sut = (0, commission_1.commissionPercentOf)({
|
|
23
|
+
maker: 0.1,
|
|
24
|
+
taker: 0.2
|
|
25
|
+
});
|
|
26
|
+
expect(sut.calculateTakerFee(2000)).toEqual(4);
|
|
27
|
+
expect(sut.applyTakerFee(2000)).toEqual(1996);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=commission.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commission.spec.js","sourceRoot":"","sources":["../../src/domain/commission.spec.ts"],"names":[],"mappings":";;AAAA,6CAAmD;AAEnD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,GAAG,GAAG,IAAA,gCAAmB,EAAC;YAC9B,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,MAAM,GAAG,GAAG,IAAA,gCAAmB,EAAC;YAC9B,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,MAAM,GAAG,GAAG,IAAA,gCAAmB,EAAC;YAC9B,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function insufficientFundsError(assetName: string, requiredAmount: number, availableAmount: number): Error;
|
|
2
|
+
export declare function invalidArgumentError(value: any): void;
|
|
3
|
+
export declare function invalidAssetSelectorError(selector: string): void;
|
|
4
|
+
export declare function invalidInstrumentSelectorError(selector: string): void;
|
|
5
|
+
export declare function adapterMismatchError(): Error;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.adapterMismatchError = exports.invalidInstrumentSelectorError = exports.invalidAssetSelectorError = exports.invalidArgumentError = exports.insufficientFundsError = void 0;
|
|
4
|
+
function insufficientFundsError(assetName, requiredAmount, availableAmount) {
|
|
5
|
+
return new Error(`insufficient funds of ${assetName} has: ${availableAmount} requires: ${requiredAmount}`);
|
|
6
|
+
}
|
|
7
|
+
exports.insufficientFundsError = insufficientFundsError;
|
|
8
|
+
function invalidArgumentError(value) {
|
|
9
|
+
throw new Error(`invalid argument: ${value}`);
|
|
10
|
+
}
|
|
11
|
+
exports.invalidArgumentError = invalidArgumentError;
|
|
12
|
+
function invalidAssetSelectorError(selector) {
|
|
13
|
+
throw new Error(`invalid asset selector: ${selector}`);
|
|
14
|
+
}
|
|
15
|
+
exports.invalidAssetSelectorError = invalidAssetSelectorError;
|
|
16
|
+
function invalidInstrumentSelectorError(selector) {
|
|
17
|
+
throw new Error(`invalid instrument selector: ${selector}`);
|
|
18
|
+
}
|
|
19
|
+
exports.invalidInstrumentSelectorError = invalidInstrumentSelectorError;
|
|
20
|
+
function adapterMismatchError() {
|
|
21
|
+
return new Error('adapters must be the same');
|
|
22
|
+
}
|
|
23
|
+
exports.adapterMismatchError = adapterMismatchError;
|
|
24
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/domain/error.ts"],"names":[],"mappings":";;;AAAA,SAAgB,sBAAsB,CACpC,SAAiB,EACjB,cAAsB,EACtB,eAAuB;IAEvB,OAAO,IAAI,KAAK,CACd,yBAAyB,SAAS,SAAS,eAAe,cAAc,cAAc,EAAE,CACzF,CAAC;AACJ,CAAC;AARD,wDAQC;AAED,SAAgB,oBAAoB,CAAC,KAAU;IAC7C,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC;AAChD,CAAC;AAFD,oDAEC;AAED,SAAgB,yBAAyB,CAAC,QAAgB;IACxD,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;AACzD,CAAC;AAFD,8DAEC;AAED,SAAgB,8BAA8B,CAAC,QAAgB;IAC7D,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;AAC9D,CAAC;AAFD,wEAEC;AAED,SAAgB,oBAAoB;IAClC,OAAO,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAChD,CAAC;AAFD,oDAEC"}
|
package/dist/domain/index.d.ts
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
export * from './asset';
|
|
2
2
|
export * from './balance';
|
|
3
|
+
export * from './balance.operator';
|
|
4
|
+
export * from './error';
|
|
3
5
|
export * from './candle';
|
|
6
|
+
export * from './candle.operator';
|
|
4
7
|
export * from './commission';
|
|
5
8
|
export * from './component';
|
|
6
9
|
export * from './instrument';
|
|
10
|
+
export * from './instrument.operator';
|
|
7
11
|
export * from './order';
|
|
12
|
+
export * from './order.operator';
|
|
8
13
|
export * from './orderbook';
|
|
14
|
+
export * from './orderbook.operator';
|
|
9
15
|
export * from './position';
|
|
16
|
+
export * from './position.operator';
|
|
10
17
|
export * from './session';
|
|
11
|
-
export * from './statement';
|
|
12
18
|
export * from './timeframe';
|
|
13
19
|
export * from './trade';
|
|
20
|
+
export * from './trade.operator';
|
package/dist/domain/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -12,15 +16,22 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
12
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
17
|
__exportStar(require("./asset"), exports);
|
|
14
18
|
__exportStar(require("./balance"), exports);
|
|
19
|
+
__exportStar(require("./balance.operator"), exports);
|
|
20
|
+
__exportStar(require("./error"), exports);
|
|
15
21
|
__exportStar(require("./candle"), exports);
|
|
22
|
+
__exportStar(require("./candle.operator"), exports);
|
|
16
23
|
__exportStar(require("./commission"), exports);
|
|
17
24
|
__exportStar(require("./component"), exports);
|
|
18
25
|
__exportStar(require("./instrument"), exports);
|
|
26
|
+
__exportStar(require("./instrument.operator"), exports);
|
|
19
27
|
__exportStar(require("./order"), exports);
|
|
28
|
+
__exportStar(require("./order.operator"), exports);
|
|
20
29
|
__exportStar(require("./orderbook"), exports);
|
|
30
|
+
__exportStar(require("./orderbook.operator"), exports);
|
|
21
31
|
__exportStar(require("./position"), exports);
|
|
32
|
+
__exportStar(require("./position.operator"), exports);
|
|
22
33
|
__exportStar(require("./session"), exports);
|
|
23
|
-
__exportStar(require("./statement"), exports);
|
|
24
34
|
__exportStar(require("./timeframe"), exports);
|
|
25
35
|
__exportStar(require("./trade"), exports);
|
|
36
|
+
__exportStar(require("./trade.operator"), exports);
|
|
26
37
|
//# sourceMappingURL=index.js.map
|
package/dist/domain/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,4CAA0B;AAC1B,qDAAmC;AACnC,0CAAwB;AACxB,2CAAyB;AACzB,oDAAkC;AAClC,+CAA6B;AAC7B,8CAA4B;AAC5B,+CAA6B;AAC7B,wDAAsC;AACtC,0CAAwB;AACxB,mDAAiC;AACjC,8CAA4B;AAC5B,uDAAqC;AACrC,6CAA2B;AAC3B,sDAAoC;AACpC,4CAA0B;AAC1B,8CAA4B;AAC5B,0CAAwB;AACxB,mDAAiC"}
|
|
@@ -2,8 +2,9 @@ import { timestamp } from '../shared';
|
|
|
2
2
|
import { Asset, AssetSelector } from './asset';
|
|
3
3
|
import { Commission } from './commission';
|
|
4
4
|
import { Component } from './component';
|
|
5
|
+
export declare const InstrumentSelectorSeparator = "-";
|
|
5
6
|
export declare class InstrumentSelector {
|
|
6
|
-
|
|
7
|
+
readonly id: string;
|
|
7
8
|
readonly base: AssetSelector;
|
|
8
9
|
readonly quote: AssetSelector;
|
|
9
10
|
constructor(base: string, quote: string, adapter: string);
|
|
@@ -13,10 +14,11 @@ export declare class Instrument extends InstrumentSelector implements Component
|
|
|
13
14
|
readonly base: Asset;
|
|
14
15
|
readonly quote: Asset;
|
|
15
16
|
readonly raw: string;
|
|
17
|
+
kind: string;
|
|
16
18
|
timestamp: timestamp;
|
|
17
19
|
commission: Commission;
|
|
18
20
|
cross: Instrument;
|
|
19
21
|
leverage?: number;
|
|
20
22
|
constructor(base: Asset, quote: Asset, raw: string);
|
|
21
23
|
}
|
|
22
|
-
export declare function instrumentOf(
|
|
24
|
+
export declare function instrumentOf(selector: string): InstrumentSelector;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.instrumentOf = exports.Instrument = exports.InstrumentSelector = void 0;
|
|
3
|
+
exports.instrumentOf = exports.Instrument = exports.InstrumentSelector = exports.InstrumentSelectorSeparator = void 0;
|
|
4
4
|
const asset_1 = require("./asset");
|
|
5
|
+
const error_1 = require("./error");
|
|
6
|
+
exports.InstrumentSelectorSeparator = '-';
|
|
5
7
|
class InstrumentSelector {
|
|
6
8
|
constructor(base, quote, adapter) {
|
|
7
9
|
this.base = new asset_1.AssetSelector(base.toLowerCase(), adapter.toLowerCase());
|
|
8
10
|
this.quote = new asset_1.AssetSelector(quote.toLowerCase(), adapter.toLowerCase());
|
|
9
|
-
this.id = `${this.base.
|
|
11
|
+
this.id = `${this.base.id}${exports.InstrumentSelectorSeparator}${this.quote.name}`;
|
|
10
12
|
}
|
|
11
13
|
toString() {
|
|
12
14
|
return this.id;
|
|
@@ -15,21 +17,28 @@ class InstrumentSelector {
|
|
|
15
17
|
exports.InstrumentSelector = InstrumentSelector;
|
|
16
18
|
class Instrument extends InstrumentSelector {
|
|
17
19
|
constructor(base, quote, raw) {
|
|
18
|
-
super(base.name, quote.name, base.
|
|
20
|
+
super(base.name, quote.name, base.adapterName);
|
|
19
21
|
this.base = base;
|
|
20
22
|
this.quote = quote;
|
|
21
23
|
this.raw = raw;
|
|
24
|
+
this.kind = 'instrument';
|
|
22
25
|
this.leverage = null;
|
|
23
|
-
if (base.
|
|
24
|
-
throw
|
|
26
|
+
if (base.adapterName != quote.adapterName) {
|
|
27
|
+
throw (0, error_1.adapterMismatchError)();
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
30
|
}
|
|
28
31
|
exports.Instrument = Instrument;
|
|
29
|
-
function instrumentOf(
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
function instrumentOf(selector) {
|
|
33
|
+
const [adapterName, asset, ...rest] = selector.split(asset_1.AssetSelectorSeparator);
|
|
34
|
+
if (!adapterName || !asset || rest.length) {
|
|
35
|
+
throw (0, error_1.invalidInstrumentSelectorError)(selector);
|
|
36
|
+
}
|
|
37
|
+
const [baseAssetName, quoteAssetName] = asset.split(exports.InstrumentSelectorSeparator);
|
|
38
|
+
if (!baseAssetName || !quoteAssetName) {
|
|
39
|
+
throw (0, error_1.invalidInstrumentSelectorError)(selector);
|
|
40
|
+
}
|
|
41
|
+
return new InstrumentSelector(baseAssetName, quoteAssetName, adapterName);
|
|
33
42
|
}
|
|
34
43
|
exports.instrumentOf = instrumentOf;
|
|
35
44
|
//# sourceMappingURL=instrument.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument.js","sourceRoot":"","sources":["../../src/domain/instrument.ts"],"names":[],"mappings":";;;AACA,mCAA+
|
|
1
|
+
{"version":3,"file":"instrument.js","sourceRoot":"","sources":["../../src/domain/instrument.ts"],"names":[],"mappings":";;;AACA,mCAAuE;AAGvE,mCAA+E;AAElE,QAAA,2BAA2B,GAAG,GAAG,CAAC;AAE/C,MAAa,kBAAkB;IAK7B,YAAY,IAAY,EAAE,KAAa,EAAE,OAAe;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAa,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAa,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAE3E,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,mCAA2B,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC9E,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;CACF;AAfD,gDAeC;AAKD,MAAa,UAAW,SAAQ,kBAAkB;IAOhD,YAAqB,IAAW,EAAW,KAAY,EAAW,GAAW;QAC3E,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAD5B,SAAI,GAAJ,IAAI,CAAO;QAAW,UAAK,GAAL,KAAK,CAAO;QAAW,QAAG,GAAH,GAAG,CAAQ;QAN7E,SAAI,GAAG,YAAY,CAAC;QAIpB,aAAQ,GAAY,IAAI,CAAC;QAKvB,IAAI,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,EAAE;YACzC,MAAM,IAAA,4BAAoB,GAAE,CAAC;SAC9B;IACH,CAAC;CACF;AAdD,gCAcC;AAED,SAAgB,YAAY,CAAC,QAAgB;IAC3C,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,8BAAsB,CAAC,CAAC;IAC7E,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;QACzC,MAAM,IAAA,sCAA8B,EAAC,QAAQ,CAAC,CAAC;KAChD;IAED,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,mCAA2B,CAAC,CAAC;IACjF,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE;QACrC,MAAM,IAAA,sCAA8B,EAAC,QAAQ,CAAC,CAAC;KAChD;IAED,OAAO,IAAI,kBAAkB,CAAC,aAAa,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;AAC5E,CAAC;AAZD,oCAYC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { State } from '../store';
|
|
3
|
+
import { Component } from './component';
|
|
4
|
+
import { Instrument, InstrumentSelector } from './instrument';
|
|
5
|
+
export declare function instrument(selector: InstrumentSelector, state: State): (source$: Observable<Component>) => Observable<Instrument>;
|
|
6
|
+
export declare function instruments(state: State): (source$: Observable<Component>) => Observable<readonly Instrument[]>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.instruments = exports.instrument = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const instrument_1 = require("./instrument");
|
|
6
|
+
function instrument(selector, state) {
|
|
7
|
+
return (source$) => source$.pipe((0, rxjs_1.startWith)(state.universe.instrument.get(selector.id)), (0, rxjs_1.filter)(it => it instanceof instrument_1.Instrument && it.id == selector.id), (0, rxjs_1.map)(it => it));
|
|
8
|
+
}
|
|
9
|
+
exports.instrument = instrument;
|
|
10
|
+
function instruments(state) {
|
|
11
|
+
return (source$) => source$.pipe((0, rxjs_1.filter)(it => it instanceof instrument_1.Instrument), (0, rxjs_1.map)(() => state.universe.instrument.asReadonlyArray()), (0, rxjs_1.startWith)(state.universe.instrument.asReadonlyArray()), (0, rxjs_1.filter)(it => it.length > 0), (0, rxjs_1.distinctUntilChanged)((lhs, rhs) => lhs.length == rhs.length));
|
|
12
|
+
}
|
|
13
|
+
exports.instruments = instruments;
|
|
14
|
+
//# sourceMappingURL=instrument.operator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrument.operator.js","sourceRoot":"","sources":["../../src/domain/instrument.operator.ts"],"names":[],"mappings":";;;AAAA,+BAAgF;AAIhF,6CAA8D;AAE9D,SAAgB,UAAU,CAAC,QAA4B,EAAE,KAAY;IACnE,OAAO,CAAC,OAA8B,EAAE,EAAE,CACxC,OAAO,CAAC,IAAI,CACV,IAAA,gBAAS,EAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EACrD,IAAA,aAAM,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,uBAAU,IAAI,EAAE,CAAC,EAAE,IAAI,QAAQ,CAAC,EAAE,CAAC,EAC9D,IAAA,UAAG,EAAC,EAAE,CAAC,EAAE,CAAC,EAAgB,CAAC,CAC5B,CAAC;AACN,CAAC;AAPD,gCAOC;AAED,SAAgB,WAAW,CAAC,KAAY;IACtC,OAAO,CAAC,OAA8B,EAAE,EAAE,CACxC,OAAO,CAAC,IAAI,CACV,IAAA,aAAM,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,uBAAU,CAAC,EACtC,IAAA,UAAG,EAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,EACtD,IAAA,gBAAS,EAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,EACtD,IAAA,aAAM,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAC3B,IAAA,2BAAoB,EAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAC7D,CAAC;AACN,CAAC;AATD,kCASC"}
|
|
File without changes
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const rxjs_1 = require("rxjs");
|
|
4
|
+
const store_1 = require("../store");
|
|
5
|
+
const asset_1 = require("./asset");
|
|
6
|
+
const instrument_1 = require("./instrument");
|
|
7
|
+
const instrument_operator_1 = require("./instrument.operator");
|
|
8
|
+
describe('instrument', () => {
|
|
9
|
+
const state = new store_1.State();
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
state.universe.instrument.upsert(new instrument_1.Instrument(new asset_1.Asset('abc', 'xyz', 4), new asset_1.Asset('def', 'xyz', 4), 'abc-def'));
|
|
12
|
+
});
|
|
13
|
+
test('should pipe an instrument on subscription', done => {
|
|
14
|
+
new rxjs_1.Subject()
|
|
15
|
+
.pipe((0, instrument_operator_1.instrument)((0, instrument_1.instrumentOf)('xyz:abc-def'), state))
|
|
16
|
+
.subscribe({
|
|
17
|
+
next: it => {
|
|
18
|
+
expect(it.id).toEqual('xyz:abc-def');
|
|
19
|
+
done();
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=instrument.operator.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrument.operator.spec.js","sourceRoot":"","sources":["../../src/domain/instrument.operator.spec.ts"],"names":[],"mappings":";;AAAA,+BAA+B;AAE/B,oCAAiC;AACjC,mCAAgC;AAEhC,6CAAwD;AACxD,+DAAmD;AAEnD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;IAE1B,UAAU,CAAC,GAAG,EAAE;QACd,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAC9B,IAAI,uBAAU,CAAC,IAAI,aAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,aAAK,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAClF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,IAAI,CAAC,EAAE;QACvD,IAAI,cAAO,EAAa;aACrB,IAAI,CAAC,IAAA,gCAAU,EAAC,IAAA,yBAAY,EAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;aACpD,SAAS,CAAC;YACT,IAAI,EAAE,EAAE,CAAC,EAAE;gBACT,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBACrC,IAAI,EAAE,CAAC;YACT,CAAC;SACF,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -2,56 +2,48 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const asset_1 = require("./asset");
|
|
4
4
|
const instrument_1 = require("./instrument");
|
|
5
|
-
describe('
|
|
6
|
-
test('should
|
|
5
|
+
describe('Instrument', () => {
|
|
6
|
+
test('should construct a instrument', () => {
|
|
7
7
|
const sut = new instrument_1.Instrument(new asset_1.Asset('abc', 'xyz', 4), new asset_1.Asset('def', 'xyz', 4), 'abc-def');
|
|
8
8
|
expect(sut.base.name).toEqual('abc');
|
|
9
|
-
expect(sut.base.
|
|
9
|
+
expect(sut.base.adapterName).toEqual('xyz');
|
|
10
10
|
expect(sut.quote.name).toEqual('def');
|
|
11
|
-
expect(sut.quote.
|
|
12
|
-
expect(sut.
|
|
11
|
+
expect(sut.quote.adapterName).toEqual('xyz');
|
|
12
|
+
expect(sut.id).toEqual('xyz:abc-def');
|
|
13
13
|
});
|
|
14
14
|
});
|
|
15
|
-
describe('
|
|
16
|
-
test('should
|
|
15
|
+
describe('InstrumentSelector', () => {
|
|
16
|
+
test('should construct a instrument selector', () => {
|
|
17
17
|
const sut = (0, instrument_1.instrumentOf)('xyz:abc-def');
|
|
18
18
|
expect(sut.base.name).toEqual('abc');
|
|
19
|
-
expect(sut.base.
|
|
19
|
+
expect(sut.base.adapterName).toEqual('xyz');
|
|
20
20
|
expect(sut.quote.name).toEqual('def');
|
|
21
|
-
expect(sut.quote.
|
|
22
|
-
expect(sut.
|
|
21
|
+
expect(sut.quote.adapterName).toEqual('xyz');
|
|
22
|
+
expect(sut.id).toEqual('xyz:abc-def');
|
|
23
23
|
});
|
|
24
|
-
test('should
|
|
24
|
+
test('should construct a instrument selector capital case', () => {
|
|
25
25
|
const sut = (0, instrument_1.instrumentOf)('XYZ:ABC-DEF');
|
|
26
26
|
expect(sut.base.name).toEqual('abc');
|
|
27
|
-
expect(sut.base.
|
|
27
|
+
expect(sut.base.adapterName).toEqual('xyz');
|
|
28
28
|
expect(sut.quote.name).toEqual('def');
|
|
29
|
-
expect(sut.quote.
|
|
30
|
-
expect(sut.
|
|
29
|
+
expect(sut.quote.adapterName).toEqual('xyz');
|
|
30
|
+
expect(sut.id).toEqual('xyz:abc-def');
|
|
31
31
|
});
|
|
32
32
|
test('should throw invalid format message for missing separator', () => {
|
|
33
|
-
const fn = () =>
|
|
34
|
-
|
|
35
|
-
};
|
|
36
|
-
expect(fn).toThrow(Error);
|
|
33
|
+
const fn = () => (0, instrument_1.instrumentOf)('xyzabc-def');
|
|
34
|
+
expect(fn).toThrowError();
|
|
37
35
|
});
|
|
38
36
|
test('should throw invalid format message for multiple separators', () => {
|
|
39
|
-
const fn = () =>
|
|
40
|
-
|
|
41
|
-
};
|
|
42
|
-
expect(fn).toThrow(Error);
|
|
37
|
+
const fn = () => (0, instrument_1.instrumentOf)('xyz:abc:-def');
|
|
38
|
+
expect(fn).toThrowError();
|
|
43
39
|
});
|
|
44
40
|
test('should throw invalid format message for missing pair name', () => {
|
|
45
|
-
const fn = () =>
|
|
46
|
-
|
|
47
|
-
};
|
|
48
|
-
expect(fn).toThrow(Error);
|
|
41
|
+
const fn = () => (0, instrument_1.instrumentOf)('xyz:');
|
|
42
|
+
expect(fn).toThrowError();
|
|
49
43
|
});
|
|
50
44
|
test('should throw invalid format message for missing adapter name', () => {
|
|
51
|
-
const fn = () =>
|
|
52
|
-
|
|
53
|
-
};
|
|
54
|
-
expect(fn).toThrow(Error);
|
|
45
|
+
const fn = () => (0, asset_1.assetOf)(':abc-def');
|
|
46
|
+
expect(fn).toThrowError();
|
|
55
47
|
});
|
|
56
48
|
});
|
|
57
49
|
//# sourceMappingURL=instrument.spec.js.map
|