@quantform/core 0.5.13 → 0.5.23
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 +8 -5
- package/dist/adapter/adapter-aggregate.js +18 -20
- package/dist/adapter/adapter-aggregate.js.map +1 -1
- package/dist/adapter/adapter.d.ts +20 -32
- package/dist/adapter/adapter.js +8 -43
- package/dist/adapter/adapter.js.map +1 -1
- package/dist/adapter/backtester/backtester-adapter.d.ts +11 -9
- package/dist/adapter/backtester/backtester-adapter.js +17 -16
- 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 +83 -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 +19 -18
- package/dist/adapter/backtester/backtester-cursor.spec.js.map +1 -1
- package/dist/adapter/backtester/backtester-streamer.d.ts +3 -1
- package/dist/adapter/backtester/backtester-streamer.js +25 -14
- package/dist/adapter/backtester/backtester-streamer.js.map +1 -1
- package/dist/adapter/backtester/backtester-streamer.spec.js +17 -16
- package/dist/adapter/backtester/backtester-streamer.spec.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/paper/engine/paper-engine.d.ts +11 -0
- package/dist/adapter/paper/engine/paper-engine.js +104 -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 +1 -2
- package/dist/adapter/paper/index.js.map +1 -1
- package/dist/adapter/paper/paper-adapter.d.ts +10 -9
- package/dist/adapter/paper/paper-adapter.js +26 -23
- package/dist/adapter/paper/paper-adapter.js.map +1 -1
- package/dist/adapter/paper/paper-adapter.spec.js +36 -17
- package/dist/adapter/paper/paper-adapter.spec.js.map +1 -1
- package/dist/bootstrap.js +11 -10
- package/dist/bootstrap.js.map +1 -1
- package/dist/cli/pull.js +8 -11
- package/dist/cli/pull.js.map +1 -1
- package/dist/cli/test.js +5 -1
- package/dist/cli/test.js.map +1 -1
- package/dist/domain/asset.d.ts +10 -9
- package/dist/domain/asset.js +26 -23
- package/dist/domain/asset.js.map +1 -1
- package/dist/domain/asset.spec.js +36 -36
- package/dist/domain/asset.spec.js.map +1 -1
- package/dist/domain/balance.d.ts +13 -13
- 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/{indicator/truerange.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 +73 -12
- package/dist/domain/balance.spec.js.map +1 -1
- package/dist/domain/candle.d.ts +8 -23
- package/dist/domain/candle.js +6 -72
- package/dist/domain/candle.js.map +1 -1
- package/dist/domain/candle.operator.d.ts +10 -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 +112 -0
- package/dist/domain/candle.operator.spec.js.map +1 -0
- package/dist/domain/candle.spec.js +16 -58
- package/dist/domain/candle.spec.js.map +1 -1
- package/dist/domain/commission.d.ts +12 -8
- package/dist/domain/commission.js +6 -6
- 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 +31 -0
- package/dist/domain/commission.spec.js.map +1 -0
- package/dist/domain/component.d.ts +1 -0
- package/dist/domain/error.d.ts +6 -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 +8 -1
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/instrument.d.ts +3 -2
- package/dist/domain/instrument.js +17 -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/{store/event/store-balance.event.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 +16 -18
- package/dist/domain/order.js +39 -27
- 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-candle.event.spec.d.ts → domain/order.operator.spec.d.ts} +0 -0
- package/dist/domain/order.operator.spec.js +65 -0
- package/dist/domain/order.operator.spec.js.map +1 -0
- package/dist/{store/event/store-instrument.event.spec.d.ts → domain/order.spec.d.ts} +0 -0
- package/dist/domain/order.spec.js +34 -0
- package/dist/domain/order.spec.js.map +1 -0
- package/dist/domain/orderbook.d.ts +19 -6
- package/dist/domain/orderbook.js +6 -4
- 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-order.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-trade.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 +9 -14
- package/dist/domain/position.js +9 -31
- package/dist/domain/position.js.map +1 -1
- package/dist/domain/position.operator.d.ts +11 -0
- package/dist/domain/position.operator.js +38 -0
- package/dist/domain/position.operator.js.map +1 -0
- package/dist/domain/position.operator.spec.d.ts +1 -0
- package/dist/domain/position.operator.spec.js +49 -0
- package/dist/domain/position.operator.spec.js.map +1 -0
- package/dist/domain/position.spec.js +22 -17
- package/dist/domain/position.spec.js.map +1 -1
- package/dist/domain/session.d.ts +15 -18
- package/dist/domain/session.js +21 -31
- package/dist/domain/session.js.map +1 -1
- package/dist/domain/session.spec.js +2 -2
- package/dist/domain/session.spec.js.map +1 -1
- package/dist/domain/trade.d.ts +4 -3
- package/dist/domain/trade.js +1 -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/indicator/atr.d.ts +2 -1
- package/dist/indicator/atr.js +3 -3
- package/dist/indicator/atr.js.map +1 -1
- package/dist/indicator/cross.d.ts +3 -2
- package/dist/indicator/cross.js +13 -13
- package/dist/indicator/cross.js.map +1 -1
- package/dist/indicator/cross.spec.js +23 -22
- package/dist/indicator/cross.spec.js.map +1 -1
- package/dist/indicator/donchian.d.ts +3 -2
- package/dist/indicator/donchian.js.map +1 -1
- package/dist/indicator/drawdown.d.ts +2 -1
- package/dist/indicator/drawdown.js +3 -2
- package/dist/indicator/drawdown.js.map +1 -1
- package/dist/indicator/ema.d.ts +2 -1
- package/dist/indicator/ema.js +3 -2
- package/dist/indicator/ema.js.map +1 -1
- package/dist/indicator/ema.spec.js +4 -3
- package/dist/indicator/ema.spec.js.map +1 -1
- package/dist/indicator/envelope.d.ts +4 -3
- package/dist/indicator/envelope.js +4 -4
- package/dist/indicator/envelope.js.map +1 -1
- package/dist/indicator/index.d.ts +1 -1
- package/dist/indicator/index.js +1 -1
- package/dist/indicator/index.js.map +1 -1
- package/dist/indicator/macd.d.ts +2 -1
- package/dist/indicator/macd.js +1 -1
- package/dist/indicator/macd.js.map +1 -1
- package/dist/indicator/min-max.d.ts +4 -3
- package/dist/indicator/min-max.js +5 -4
- package/dist/indicator/min-max.js.map +1 -1
- package/dist/indicator/rma.d.ts +2 -1
- package/dist/indicator/rma.js +3 -2
- package/dist/indicator/rma.js.map +1 -1
- package/dist/indicator/sma.d.ts +2 -1
- package/dist/indicator/sma.js +4 -6
- package/dist/indicator/sma.js.map +1 -1
- package/dist/indicator/sma.spec.js +4 -3
- package/dist/indicator/sma.spec.js.map +1 -1
- package/dist/indicator/swma.d.ts +2 -1
- package/dist/indicator/swma.js +5 -1
- package/dist/indicator/swma.js.map +1 -1
- package/dist/indicator/tma.d.ts +2 -1
- package/dist/indicator/tma.js.map +1 -1
- package/dist/indicator/tma.spec.js +4 -3
- package/dist/indicator/tma.spec.js.map +1 -1
- package/dist/indicator/trailing.d.ts +8 -7
- package/dist/indicator/trailing.js +12 -11
- package/dist/indicator/trailing.js.map +1 -1
- package/dist/indicator/trailing.spec.js +15 -14
- package/dist/indicator/trailing.spec.js.map +1 -1
- package/dist/indicator/true-range.d.ts +4 -0
- package/dist/indicator/true-range.js +20 -0
- package/dist/indicator/true-range.js.map +1 -0
- package/dist/indicator/true-range.spec.d.ts +1 -0
- package/dist/indicator/true-range.spec.js +28 -0
- package/dist/indicator/true-range.spec.js.map +1 -0
- package/dist/indicator/window.d.ts +1 -1
- package/dist/indicator/window.js +1 -1
- package/dist/indicator/window.js.map +1 -1
- package/dist/indicator/wma.d.ts +2 -1
- package/dist/indicator/wma.js +6 -5
- package/dist/indicator/wma.js.map +1 -1
- package/dist/indicator/wma.spec.js +4 -3
- package/dist/indicator/wma.spec.js.map +1 -1
- package/dist/shared/collections.d.ts +26 -0
- package/dist/shared/collections.js +115 -0
- package/dist/shared/collections.js.map +1 -0
- package/dist/shared/collections.spec.d.ts +1 -0
- package/dist/shared/collections.spec.js +28 -0
- package/dist/shared/collections.spec.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 +15 -6
- package/dist/shared/decimals.js +22 -36
- package/dist/shared/decimals.js.map +1 -1
- package/dist/shared/decimals.spec.js +18 -22
- package/dist/shared/decimals.spec.js.map +1 -1
- package/dist/shared/index.d.ts +2 -1
- package/dist/shared/index.js +2 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/io.js.map +1 -1
- package/dist/shared/pipe.d.ts +4 -0
- package/dist/shared/pipe.js +9 -0
- package/dist/shared/pipe.js.map +1 -0
- 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.js +1 -1
- package/dist/storage/cache.js.map +1 -1
- 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 +7 -4
- package/dist/storage/feed.js +55 -8
- package/dist/storage/feed.js.map +1 -1
- package/dist/storage/storage.d.ts +2 -7
- package/dist/storage/storage.js +6 -11
- package/dist/storage/storage.js.map +1 -1
- package/dist/store/index.d.ts +8 -2
- package/dist/store/index.js +8 -2
- 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} +10 -10
- 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/store-orderbook.event.d.ts +12 -0
- package/dist/store/store-orderbook.event.js +42 -0
- package/dist/store/store-orderbook.event.js.map +1 -0
- package/dist/store/store-orderbook.event.spec.d.ts +1 -0
- package/dist/store/store-orderbook.event.spec.js +28 -0
- package/dist/store/store-orderbook.event.spec.js.map +1 -0
- package/dist/store/store-position.event.d.ts +21 -0
- package/dist/store/store-position.event.js +89 -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/store-trade.event.d.ts +12 -0
- 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/store-trade.event.spec.js +44 -0
- 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} +2 -2
- package/package.json +4 -6
- package/src/adapter/adapter-aggregate.ts +39 -38
- package/src/adapter/adapter.ts +39 -71
- package/src/adapter/backtester/backtester-adapter.spec.ts +133 -0
- package/src/adapter/backtester/backtester-adapter.ts +41 -21
- package/src/adapter/backtester/backtester-cursor.spec.ts +19 -18
- package/src/adapter/backtester/backtester-cursor.ts +7 -7
- package/src/adapter/backtester/backtester-streamer.spec.ts +23 -22
- package/src/adapter/backtester/backtester-streamer.ts +28 -15
- package/src/adapter/error.ts +9 -0
- package/src/adapter/paper/engine/paper-engine.spec.ts +99 -0
- package/src/adapter/paper/engine/paper-engine.ts +142 -0
- package/src/adapter/paper/index.ts +1 -2
- package/src/adapter/paper/paper-adapter.spec.ts +65 -20
- package/src/adapter/paper/paper-adapter.ts +42 -27
- package/src/bootstrap.ts +26 -19
- package/src/cli/pull.ts +11 -6
- package/src/cli/test.ts +5 -2
- package/src/domain/asset.spec.ts +37 -33
- package/src/domain/asset.ts +33 -34
- package/src/domain/balance.operator.spec.ts +25 -0
- package/src/domain/balance.operator.ts +15 -0
- package/src/domain/balance.spec.ts +101 -12
- package/src/domain/balance.ts +57 -51
- package/src/domain/candle.operator.spec.ts +126 -0
- package/src/domain/candle.operator.ts +107 -0
- package/src/domain/candle.spec.ts +18 -73
- package/src/domain/candle.ts +9 -121
- package/src/domain/commission.spec.ts +34 -0
- package/src/domain/commission.ts +13 -11
- package/src/domain/component.ts +1 -0
- package/src/domain/error.ts +27 -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 +20 -11
- package/src/domain/order.operator.spec.ts +82 -0
- package/src/domain/order.operator.ts +23 -0
- package/src/domain/order.spec.ts +44 -0
- package/src/domain/order.ts +55 -55
- 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 +18 -9
- package/src/domain/position.operator.spec.ts +59 -0
- package/src/domain/position.operator.ts +64 -0
- package/src/domain/position.spec.ts +28 -23
- package/src/domain/position.ts +17 -49
- package/src/domain/session.spec.ts +4 -4
- package/src/domain/session.ts +42 -134
- 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 +7 -4
- package/src/indicator/atr.ts +6 -5
- package/src/indicator/cross.spec.ts +33 -48
- package/src/indicator/cross.ts +18 -10
- package/src/indicator/donchian.ts +5 -4
- package/src/indicator/drawdown.ts +7 -5
- package/src/indicator/ema.spec.ts +5 -4
- package/src/indicator/ema.ts +7 -6
- package/src/indicator/envelope.ts +11 -6
- package/src/indicator/index.ts +1 -1
- package/src/indicator/macd.ts +5 -4
- package/src/indicator/min-max.ts +10 -7
- package/src/indicator/rma.ts +7 -6
- package/src/indicator/sma.spec.ts +5 -4
- package/src/indicator/sma.ts +9 -8
- package/src/indicator/swma.ts +8 -4
- package/src/indicator/tma.spec.ts +5 -4
- package/src/indicator/tma.ts +4 -3
- package/src/indicator/trailing.spec.ts +29 -16
- package/src/indicator/trailing.ts +22 -16
- package/src/indicator/true-range.spec.ts +32 -0
- package/src/indicator/true-range.ts +32 -0
- package/src/indicator/window.ts +3 -3
- package/src/indicator/wma.spec.ts +5 -4
- package/src/indicator/wma.ts +8 -7
- package/src/shared/collections.spec.ts +30 -0
- package/src/shared/collections.ts +141 -0
- package/src/shared/datetime.ts +0 -12
- package/src/shared/decimals.spec.ts +19 -24
- package/src/shared/decimals.ts +22 -55
- package/src/shared/index.ts +2 -1
- package/src/shared/io.ts +0 -2
- package/src/shared/pipe.ts +12 -0
- package/src/shared/policy.ts +0 -13
- package/src/storage/cache.spec.ts +18 -0
- package/src/storage/cache.ts +1 -1
- package/src/storage/feed.ts +88 -23
- package/src/storage/storage.ts +9 -13
- package/src/store/index.ts +8 -2
- package/src/store/{event/store-balance.event.spec.ts → store-balance.event.spec.ts} +10 -10
- 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.spec.ts +37 -0
- package/src/store/store-orderbook.event.ts +54 -0
- package/src/store/store-position.event.ts +114 -0
- package/src/store/store-state.ts +48 -0
- package/src/store/store-trade.event.spec.ts +60 -0
- 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 +10 -208
- 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/indicator/truerange.d.ts +0 -3
- package/dist/indicator/truerange.js +0 -19
- package/dist/indicator/truerange.js.map +0 -1
- package/dist/indicator/truerange.spec.js +0 -28
- package/dist/indicator/truerange.spec.js.map +0 -1
- package/dist/shared/policy.spec.js +0 -22
- package/dist/shared/policy.spec.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/store/event/index.d.ts +0 -8
- package/dist/store/event/index.js +0 -25
- 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.d.ts +0 -15
- 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.d.ts +0 -23
- 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.d.ts +0 -13
- 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 +0 -44
- 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 -61
- 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 -121
- 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 -119
- package/src/indicator/truerange.spec.ts +0 -32
- package/src/indicator/truerange.ts +0 -31
- package/src/shared/policy.spec.ts +0 -25
- package/src/shared/topic.spec.ts +0 -34
- package/src/shared/topic.ts +0 -43
- 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.spec.ts +0 -60
- 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 -88
- package/src/tests/session.spec.ts +0 -121
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { InstrumentSelector } from '../../domain/instrument';
|
|
2
|
-
import { timestamp } from '../../shared';
|
|
3
|
-
import { State, StateChangeTracker } from '../store.state';
|
|
4
|
-
import { StoreEvent } from './store.event';
|
|
5
|
-
export declare class OrderbookPatchEvent implements StoreEvent {
|
|
6
|
-
readonly instrument: InstrumentSelector;
|
|
7
|
-
readonly bestAskRate: number;
|
|
8
|
-
readonly bestAskQuantity: number;
|
|
9
|
-
readonly bestBidRate: number;
|
|
10
|
-
readonly bestBidQuantity: number;
|
|
11
|
-
readonly timestamp: timestamp;
|
|
12
|
-
type: string;
|
|
13
|
-
constructor(instrument: InstrumentSelector, bestAskRate: number, bestAskQuantity: number, bestBidRate: number, bestBidQuantity: number, timestamp: timestamp);
|
|
14
|
-
}
|
|
15
|
-
export declare function OrderbookPatchEventHandler(event: OrderbookPatchEvent, state: State, changes: StateChangeTracker): void;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.OrderbookPatchEventHandler = exports.OrderbookPatchEvent = void 0;
|
|
13
|
-
const instrument_1 = require("../../domain/instrument");
|
|
14
|
-
const orderbook_1 = require("../../domain/orderbook");
|
|
15
|
-
const topic_1 = require("../../shared/topic");
|
|
16
|
-
let OrderbookPatchEvent = class OrderbookPatchEvent {
|
|
17
|
-
constructor(instrument, bestAskRate, bestAskQuantity, bestBidRate, bestBidQuantity, timestamp) {
|
|
18
|
-
this.instrument = instrument;
|
|
19
|
-
this.bestAskRate = bestAskRate;
|
|
20
|
-
this.bestAskQuantity = bestAskQuantity;
|
|
21
|
-
this.bestBidRate = bestBidRate;
|
|
22
|
-
this.bestBidQuantity = bestBidQuantity;
|
|
23
|
-
this.timestamp = timestamp;
|
|
24
|
-
this.type = 'orderbook-patch';
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
OrderbookPatchEvent = __decorate([
|
|
28
|
-
topic_1.event,
|
|
29
|
-
__metadata("design:paramtypes", [instrument_1.InstrumentSelector, Number, Number, Number, Number, Number])
|
|
30
|
-
], OrderbookPatchEvent);
|
|
31
|
-
exports.OrderbookPatchEvent = OrderbookPatchEvent;
|
|
32
|
-
function OrderbookPatchEventHandler(event, state, changes) {
|
|
33
|
-
const instrumentKey = event.instrument.toString();
|
|
34
|
-
if (!(instrumentKey in state.subscription.instrument)) {
|
|
35
|
-
throw new Error(`Trying to patch unsubscribed instrument: ${instrumentKey}`);
|
|
36
|
-
}
|
|
37
|
-
let orderbook = state.orderbook[instrumentKey];
|
|
38
|
-
if (!orderbook) {
|
|
39
|
-
const instrument = state.universe.instrument[instrumentKey];
|
|
40
|
-
orderbook = new orderbook_1.Orderbook(instrument);
|
|
41
|
-
state.orderbook[instrumentKey] = orderbook;
|
|
42
|
-
}
|
|
43
|
-
state.timestamp = event.timestamp;
|
|
44
|
-
orderbook.timestamp = event.timestamp;
|
|
45
|
-
orderbook.bestAskRate = orderbook.instrument.quote.fixed(event.bestAskRate);
|
|
46
|
-
orderbook.bestAskQuantity = orderbook.instrument.base.fixed(event.bestAskQuantity);
|
|
47
|
-
orderbook.bestBidRate = orderbook.instrument.quote.fixed(event.bestBidRate);
|
|
48
|
-
orderbook.bestBidQuantity = orderbook.instrument.base.fixed(event.bestBidQuantity);
|
|
49
|
-
const quote = state.balance[orderbook.instrument.quote.toString()];
|
|
50
|
-
if (quote) {
|
|
51
|
-
for (const position of Object.values(quote.position)) {
|
|
52
|
-
if (position.instrument.toString() != orderbook.toString()) {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
const rate = position.size >= 0 ? orderbook.bestBidRate : orderbook.bestAskRate;
|
|
56
|
-
position.calculatePnL(rate);
|
|
57
|
-
}
|
|
58
|
-
if (quote.total < 0) {
|
|
59
|
-
throw new Error('liquidated');
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
changes.commit(orderbook);
|
|
63
|
-
}
|
|
64
|
-
exports.OrderbookPatchEventHandler = OrderbookPatchEventHandler;
|
|
65
|
-
//# sourceMappingURL=store-orderbook.event.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store-orderbook.event.js","sourceRoot":"","sources":["../../../src/store/event/store-orderbook.event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6D;AAC7D,sDAAmD;AAEnD,8CAA2C;AAK3C,IAAa,mBAAmB,GAAhC,MAAa,mBAAmB;IAG9B,YACW,UAA8B,EAC9B,WAAmB,EACnB,eAAuB,EACvB,WAAmB,EACnB,eAAuB,EACvB,SAAoB;QALpB,eAAU,GAAV,UAAU,CAAoB;QAC9B,gBAAW,GAAX,WAAW,CAAQ;QACnB,oBAAe,GAAf,eAAe,CAAQ;QACvB,gBAAW,GAAX,WAAW,CAAQ;QACnB,oBAAe,GAAf,eAAe,CAAQ;QACvB,cAAS,GAAT,SAAS,CAAW;QAR/B,SAAI,GAAG,iBAAiB,CAAC;IAStB,CAAC;CACL,CAAA;AAXY,mBAAmB;IAD/B,aAAK;qCAKmB,+BAAkB;GAJ9B,mBAAmB,CAW/B;AAXY,kDAAmB;AAahC,SAAgB,0BAA0B,CACxC,KAA0B,EAC1B,KAAY,EACZ,OAA2B;IAE3B,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAElD,IAAI,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACrD,MAAM,IAAI,KAAK,CAAC,4CAA4C,aAAa,EAAE,CAAC,CAAC;KAC9E;IAED,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAE/C,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE5D,SAAS,GAAG,IAAI,qBAAS,CAAC,UAAU,CAAC,CAAC;QAEtC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;KAC5C;IAED,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACtC,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5E,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACnF,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5E,SAAS,CAAC,eAAe,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEnE,IAAI,KAAK,EAAE;QACT,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACpD,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE;gBAC1D,SAAS;aACV;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;YAEhF,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SAC7B;QAED,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;SAC/B;KACF;IAED,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AAhDD,gEAgDC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Instrument, Position, PositionMode } from '../../domain';
|
|
2
|
-
import { timestamp } from '../../shared';
|
|
3
|
-
import { State, StateChangeTracker } from '../store.state';
|
|
4
|
-
import { StoreEvent } from './store.event';
|
|
5
|
-
export declare class PositionLoadEvent implements StoreEvent {
|
|
6
|
-
readonly position: Position;
|
|
7
|
-
readonly timestamp: timestamp;
|
|
8
|
-
type: string;
|
|
9
|
-
constructor(position: Position, timestamp: timestamp);
|
|
10
|
-
}
|
|
11
|
-
export declare function PositionLoadEventHandler(event: PositionLoadEvent, state: State, changes: StateChangeTracker): Position;
|
|
12
|
-
export declare class PositionPatchEvent implements StoreEvent {
|
|
13
|
-
readonly id: string;
|
|
14
|
-
readonly instrument: Instrument;
|
|
15
|
-
readonly rate: number;
|
|
16
|
-
readonly size: number;
|
|
17
|
-
readonly leverage: number;
|
|
18
|
-
readonly mode: PositionMode;
|
|
19
|
-
readonly timestamp: timestamp;
|
|
20
|
-
type: string;
|
|
21
|
-
constructor(id: string, instrument: Instrument, rate: number, size: number, leverage: number, mode: PositionMode, timestamp: timestamp);
|
|
22
|
-
}
|
|
23
|
-
export declare function PositionPatchEventHandler(event: PositionPatchEvent, state: State, changes: StateChangeTracker): void;
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.PositionPatchEventHandler = exports.PositionPatchEvent = exports.PositionLoadEventHandler = exports.PositionLoadEvent = void 0;
|
|
13
|
-
const domain_1 = require("../../domain");
|
|
14
|
-
const topic_1 = require("../../shared/topic");
|
|
15
|
-
let PositionLoadEvent = class PositionLoadEvent {
|
|
16
|
-
constructor(position, timestamp) {
|
|
17
|
-
this.position = position;
|
|
18
|
-
this.timestamp = timestamp;
|
|
19
|
-
this.type = 'position-load';
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
PositionLoadEvent = __decorate([
|
|
23
|
-
topic_1.event,
|
|
24
|
-
__metadata("design:paramtypes", [domain_1.Position, Number])
|
|
25
|
-
], PositionLoadEvent);
|
|
26
|
-
exports.PositionLoadEvent = PositionLoadEvent;
|
|
27
|
-
function PositionLoadEventHandler(event, state, changes) {
|
|
28
|
-
if (event.position.instrument.toString() in state.subscription.instrument ||
|
|
29
|
-
event.position.size == 0) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
event.position.timestamp = event.timestamp;
|
|
33
|
-
const balance = state.balance[event.position.instrument.quote.toString()];
|
|
34
|
-
const orderbook = state.orderbook[event.position.instrument.toString()];
|
|
35
|
-
balance.position[event.position.toString()] = event.position;
|
|
36
|
-
if (orderbook) {
|
|
37
|
-
const rate = event.position.size >= 0 ? orderbook.bestBidRate : orderbook.bestAskRate;
|
|
38
|
-
event.position.calculatePnL(rate);
|
|
39
|
-
}
|
|
40
|
-
return event.position;
|
|
41
|
-
}
|
|
42
|
-
exports.PositionLoadEventHandler = PositionLoadEventHandler;
|
|
43
|
-
let PositionPatchEvent = class PositionPatchEvent {
|
|
44
|
-
constructor(id, instrument, rate, size, leverage, mode, timestamp) {
|
|
45
|
-
this.id = id;
|
|
46
|
-
this.instrument = instrument;
|
|
47
|
-
this.rate = rate;
|
|
48
|
-
this.size = size;
|
|
49
|
-
this.leverage = leverage;
|
|
50
|
-
this.mode = mode;
|
|
51
|
-
this.timestamp = timestamp;
|
|
52
|
-
this.type = 'position-patch';
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
PositionPatchEvent = __decorate([
|
|
56
|
-
topic_1.event,
|
|
57
|
-
__metadata("design:paramtypes", [String, domain_1.Instrument, Number, Number, Number, String, Number])
|
|
58
|
-
], PositionPatchEvent);
|
|
59
|
-
exports.PositionPatchEvent = PositionPatchEvent;
|
|
60
|
-
function PositionPatchEventHandler(event, state, changes) {
|
|
61
|
-
if (!(event.instrument.toString() in state.subscription.instrument)) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
const balance = state.balance[event.instrument.quote.toString()];
|
|
65
|
-
const orderbook = state.orderbook[event.instrument.toString()];
|
|
66
|
-
let position = balance.position[event.id];
|
|
67
|
-
if (event.size == 0) {
|
|
68
|
-
if (position) {
|
|
69
|
-
position.averageExecutionRate = event.instrument.quote.fixed(event.rate);
|
|
70
|
-
position.size = event.instrument.base.fixed(event.size);
|
|
71
|
-
position.leverage = event.leverage;
|
|
72
|
-
delete balance.position[event.id];
|
|
73
|
-
if (orderbook) {
|
|
74
|
-
const rate = position.size >= 0 ? orderbook.bestBidRate : orderbook.bestAskRate;
|
|
75
|
-
position.calculatePnL(rate);
|
|
76
|
-
}
|
|
77
|
-
changes.commit(position);
|
|
78
|
-
changes.commit(balance);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
if (!position) {
|
|
82
|
-
position = new domain_1.Position(event.id, event.instrument);
|
|
83
|
-
balance.position[event.id] = position;
|
|
84
|
-
}
|
|
85
|
-
position.averageExecutionRate = event.instrument.quote.fixed(event.rate);
|
|
86
|
-
position.size = event.instrument.base.fixed(event.size);
|
|
87
|
-
position.leverage = event.leverage;
|
|
88
|
-
position.mode = event.mode;
|
|
89
|
-
if (orderbook) {
|
|
90
|
-
const rate = position.size >= 0 ? orderbook.bestBidRate : orderbook.bestAskRate;
|
|
91
|
-
position.calculatePnL(rate);
|
|
92
|
-
}
|
|
93
|
-
changes.commit(position);
|
|
94
|
-
changes.commit(balance);
|
|
95
|
-
}
|
|
96
|
-
exports.PositionPatchEventHandler = PositionPatchEventHandler;
|
|
97
|
-
//# sourceMappingURL=store-position.event.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store-position.event.js","sourceRoot":"","sources":["../../../src/store/event/store-position.event.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { InstrumentSelector } from '../../domain/instrument';
|
|
2
|
-
import { timestamp } from '../../shared';
|
|
3
|
-
import { State, StateChangeTracker } from '../store.state';
|
|
4
|
-
import { StoreEvent } from './store.event';
|
|
5
|
-
export declare class TradePatchEvent implements StoreEvent {
|
|
6
|
-
readonly instrument: InstrumentSelector;
|
|
7
|
-
readonly rate: number;
|
|
8
|
-
readonly quantity: number;
|
|
9
|
-
readonly timestamp: timestamp;
|
|
10
|
-
type: string;
|
|
11
|
-
constructor(instrument: InstrumentSelector, rate: number, quantity: number, timestamp: timestamp);
|
|
12
|
-
}
|
|
13
|
-
export declare function TradePatchEventHandler(event: TradePatchEvent, state: State, changes: StateChangeTracker): void;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.TradePatchEventHandler = exports.TradePatchEvent = void 0;
|
|
13
|
-
const domain_1 = require("../../domain");
|
|
14
|
-
const instrument_1 = require("../../domain/instrument");
|
|
15
|
-
const topic_1 = require("../../shared/topic");
|
|
16
|
-
let TradePatchEvent = class TradePatchEvent {
|
|
17
|
-
constructor(instrument, rate, quantity, timestamp) {
|
|
18
|
-
this.instrument = instrument;
|
|
19
|
-
this.rate = rate;
|
|
20
|
-
this.quantity = quantity;
|
|
21
|
-
this.timestamp = timestamp;
|
|
22
|
-
this.type = 'trade-patch';
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
TradePatchEvent = __decorate([
|
|
26
|
-
topic_1.event,
|
|
27
|
-
__metadata("design:paramtypes", [instrument_1.InstrumentSelector, Number, Number, Number])
|
|
28
|
-
], TradePatchEvent);
|
|
29
|
-
exports.TradePatchEvent = TradePatchEvent;
|
|
30
|
-
function TradePatchEventHandler(event, state, changes) {
|
|
31
|
-
const instrumentKey = event.instrument.toString();
|
|
32
|
-
if (!(instrumentKey in state.subscription.instrument)) {
|
|
33
|
-
throw new Error(`Trying to patch unsubscribed instrument: ${instrumentKey}`);
|
|
34
|
-
}
|
|
35
|
-
let trade = state.trade[instrumentKey];
|
|
36
|
-
if (!trade) {
|
|
37
|
-
trade = new domain_1.Trade(state.universe.instrument[instrumentKey]);
|
|
38
|
-
state.trade[instrumentKey] = trade;
|
|
39
|
-
}
|
|
40
|
-
state.timestamp = event.timestamp;
|
|
41
|
-
trade.timestamp = event.timestamp;
|
|
42
|
-
trade.rate = trade.instrument.quote.fixed(event.rate);
|
|
43
|
-
trade.quantity = trade.instrument.base.fixed(event.quantity);
|
|
44
|
-
changes.commit(trade);
|
|
45
|
-
}
|
|
46
|
-
exports.TradePatchEventHandler = TradePatchEventHandler;
|
|
47
|
-
//# sourceMappingURL=store-trade.event.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store-trade.event.js","sourceRoot":"","sources":["../../../src/store/event/store-trade.event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAqC;AACrC,wDAA6D;AAE7D,8CAA2C;AAQ3C,IAAa,eAAe,GAA5B,MAAa,eAAe;IAG1B,YACW,UAA8B,EAC9B,IAAY,EACZ,QAAgB,EAChB,SAAoB;QAHpB,eAAU,GAAV,UAAU,CAAoB;QAC9B,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAW;QAN/B,SAAI,GAAG,aAAa,CAAC;IAOlB,CAAC;CACL,CAAA;AATY,eAAe;IAD3B,aAAK;qCAKmB,+BAAkB;GAJ9B,eAAe,CAS3B;AATY,0CAAe;AAe5B,SAAgB,sBAAsB,CACpC,KAAsB,EACtB,KAAY,EACZ,OAA2B;IAE3B,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAElD,IAAI,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACrD,MAAM,IAAI,KAAK,CAAC,4CAA4C,aAAa,EAAE,CAAC,CAAC;KAC9E;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE;QACV,KAAK,GAAG,IAAI,cAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;QAE5D,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;KACpC;IAED,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC;AAzBD,wDAyBC"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const domain_1 = require("../../domain");
|
|
4
|
-
const shared_1 = require("../../shared");
|
|
5
|
-
const __1 = require("..");
|
|
6
|
-
const _1 = require(".");
|
|
7
|
-
const instrument = new domain_1.Instrument(new domain_1.Asset('btc', 'binance', 8), new domain_1.Asset('usdt', 'binance', 2), 'binance:btc-usdt');
|
|
8
|
-
describe('trade patch event tests', () => {
|
|
9
|
-
test('should create a new trade object and patch a store', () => {
|
|
10
|
-
const timestamp = (0, shared_1.now)();
|
|
11
|
-
const store = new __1.Store();
|
|
12
|
-
store.snapshot.universe.instrument[instrument.toString()] = instrument;
|
|
13
|
-
store.snapshot.subscription.instrument[instrument.toString()] = instrument;
|
|
14
|
-
store.dispatch(new _1.TradePatchEvent(instrument, 1000, 0.1, timestamp));
|
|
15
|
-
const trade = store.snapshot.trade[instrument.toString()];
|
|
16
|
-
expect(trade.timestamp).toEqual(timestamp);
|
|
17
|
-
expect(trade.instrument.toString()).toEqual(trade.instrument.toString());
|
|
18
|
-
expect(trade.rate).toEqual(1000);
|
|
19
|
-
expect(trade.quantity).toEqual(0.1);
|
|
20
|
-
expect(store.snapshot.timestamp).toEqual(timestamp);
|
|
21
|
-
});
|
|
22
|
-
test('should use the existing instance of trade when patching a store', () => {
|
|
23
|
-
const store = new __1.Store();
|
|
24
|
-
store.snapshot.universe.instrument[instrument.toString()] = instrument;
|
|
25
|
-
store.snapshot.subscription.instrument[instrument.toString()] = instrument;
|
|
26
|
-
store.dispatch(new _1.TradePatchEvent(instrument, 1000, 0.1, (0, shared_1.now)()));
|
|
27
|
-
const timestamp = (0, shared_1.now)();
|
|
28
|
-
const trade = store.snapshot.trade[instrument.toString()];
|
|
29
|
-
store.dispatch(new _1.TradePatchEvent(instrument, 2000, 0.2, (0, shared_1.now)()));
|
|
30
|
-
expect(trade.timestamp).toEqual(timestamp);
|
|
31
|
-
expect(trade.instrument.toString()).toEqual(instrument.toString());
|
|
32
|
-
expect(trade.rate).toEqual(2000);
|
|
33
|
-
expect(trade.quantity).toEqual(0.2);
|
|
34
|
-
expect(store.snapshot.timestamp).toEqual(timestamp);
|
|
35
|
-
});
|
|
36
|
-
test('should throw exception when patching unsubscribed instrument', () => {
|
|
37
|
-
const store = new __1.Store();
|
|
38
|
-
const fn = () => {
|
|
39
|
-
store.dispatch(new _1.TradePatchEvent(instrument, 1000, 0.1, (0, shared_1.now)()));
|
|
40
|
-
};
|
|
41
|
-
expect(fn).toThrow(Error);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
//# sourceMappingURL=store-trade.event.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store-trade.event.spec.js","sourceRoot":"","sources":["../../../src/store/event/store-trade.event.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.event.js","sourceRoot":"","sources":["../../../src/store/event/store.event.ts"],"names":[],"mappings":""}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Asset, AssetSelector, Balance, Component, Instrument, InstrumentSelector, Order, Orderbook, Trade } from '../domain';
|
|
2
|
-
import { timestamp } from '../shared';
|
|
3
|
-
export interface StateChangeTracker {
|
|
4
|
-
commit(component: Component): any;
|
|
5
|
-
commitPendingChanges(): any;
|
|
6
|
-
}
|
|
7
|
-
export declare class State {
|
|
8
|
-
timestamp: timestamp;
|
|
9
|
-
universe: {
|
|
10
|
-
asset: Record<string, Asset>;
|
|
11
|
-
instrument: Record<string, Instrument>;
|
|
12
|
-
};
|
|
13
|
-
subscription: {
|
|
14
|
-
asset: Record<string, AssetSelector>;
|
|
15
|
-
instrument: Record<string, InstrumentSelector>;
|
|
16
|
-
};
|
|
17
|
-
trade: Record<string, Trade>;
|
|
18
|
-
orderbook: Record<string, Orderbook>;
|
|
19
|
-
balance: Record<string, Balance>;
|
|
20
|
-
order: Record<string, Order>;
|
|
21
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.State = void 0;
|
|
4
|
-
class State {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.universe = {
|
|
7
|
-
asset: {},
|
|
8
|
-
instrument: {}
|
|
9
|
-
};
|
|
10
|
-
this.subscription = {
|
|
11
|
-
asset: {},
|
|
12
|
-
instrument: {}
|
|
13
|
-
};
|
|
14
|
-
this.trade = {};
|
|
15
|
-
this.orderbook = {};
|
|
16
|
-
this.balance = {};
|
|
17
|
-
this.order = {};
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
exports.State = State;
|
|
21
|
-
//# sourceMappingURL=store.state.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.state.js","sourceRoot":"","sources":["../../src/store/store.state.ts"],"names":[],"mappings":";;;AAkBA,MAAa,KAAK;IAAlB;QAIE,aAAQ,GAGJ;YACF,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,iBAAY,GAGR;YACF,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,UAAK,GAA0B,EAAE,CAAC;QAClC,cAAS,GAA8B,EAAE,CAAC;QAC1C,YAAO,GAA4B,EAAE,CAAC;QACtC,UAAK,GAA0B,EAAE,CAAC;IACpC,CAAC;CAAA;AAxBD,sBAwBC"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const adapter_1 = require("../adapter/adapter");
|
|
4
|
-
const backtester_adapter_1 = require("../adapter/backtester/backtester-adapter");
|
|
5
|
-
const backtester_streamer_1 = require("../adapter/backtester/backtester-streamer");
|
|
6
|
-
const paper_1 = require("../adapter/paper");
|
|
7
|
-
const domain_1 = require("../domain");
|
|
8
|
-
const storage_1 = require("../storage");
|
|
9
|
-
const store_1 = require("../store");
|
|
10
|
-
const base = new domain_1.Asset('btc', 'binance', 8);
|
|
11
|
-
const quote = new domain_1.Asset('usdt', 'binance', 4);
|
|
12
|
-
class DefaultAdapter extends adapter_1.Adapter {
|
|
13
|
-
constructor() {
|
|
14
|
-
super(...arguments);
|
|
15
|
-
this.name = 'default';
|
|
16
|
-
}
|
|
17
|
-
timestamp() {
|
|
18
|
-
return 123;
|
|
19
|
-
}
|
|
20
|
-
createPaperSimulator(adapter) {
|
|
21
|
-
return new paper_1.PaperSpotSimulator(adapter);
|
|
22
|
-
}
|
|
23
|
-
async awake(context) {
|
|
24
|
-
await super.awake(context);
|
|
25
|
-
context.dispatch(new store_1.InstrumentPatchEvent(context.timestamp, base, quote, new domain_1.Commission(0.1, 0.1), 'btc-usdt'));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
const instrument = (0, domain_1.instrumentOf)('binance:btc-usdt');
|
|
29
|
-
const adapter = new DefaultAdapter();
|
|
30
|
-
const store = new store_1.Store();
|
|
31
|
-
const feed = new storage_1.Feed(new storage_1.InMemoryStorage());
|
|
32
|
-
const cache = new storage_1.Cache(new storage_1.InMemoryStorage());
|
|
33
|
-
describe('backtester adapter tests', () => {
|
|
34
|
-
test('should return proper adapter name and timestamp', () => {
|
|
35
|
-
const sut = new backtester_adapter_1.BacktesterAdapter(adapter, new backtester_streamer_1.BacktesterStreamer(store, feed, {
|
|
36
|
-
from: 1,
|
|
37
|
-
to: 100
|
|
38
|
-
}));
|
|
39
|
-
expect(sut.name).toEqual('default');
|
|
40
|
-
expect(sut.timestamp()).toEqual(1);
|
|
41
|
-
});
|
|
42
|
-
test('should stream data from input array', done => {
|
|
43
|
-
const streamer = new backtester_streamer_1.BacktesterStreamer(store, feed, {
|
|
44
|
-
from: 0,
|
|
45
|
-
to: 100
|
|
46
|
-
}, {
|
|
47
|
-
onBacktestCompleted: () => {
|
|
48
|
-
expect(store.snapshot.timestamp).toEqual(1);
|
|
49
|
-
expect(store.snapshot.trade[instrument.toString()].rate).toEqual(100);
|
|
50
|
-
expect(store.snapshot.trade[instrument.toString()].quantity).toEqual(10);
|
|
51
|
-
done();
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
feed.save(instrument, [new store_1.TradePatchEvent(instrument, 100, 10, 1)]);
|
|
55
|
-
const sut = new backtester_adapter_1.BacktesterAdapter(adapter, streamer);
|
|
56
|
-
sut.awake(new adapter_1.AdapterContext(sut, store, cache));
|
|
57
|
-
sut.subscribe([instrument]);
|
|
58
|
-
expect(sut.name).toEqual('default');
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
//# sourceMappingURL=backtester-adapter.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"backtester-adapter.spec.js","sourceRoot":"","sources":["../../src/tests/backtester-adapter.spec.ts"],"names":[],"mappings":";;AAAA,gDAA6D;AAC7D,iFAA6E;AAC7E,mFAA+E;AAC/E,4CAAsD;AAGtD,sCAA4D;AAC5D,wCAA0D;AAC1D,oCAAwE;AAExE,MAAM,IAAI,GAAG,IAAI,cAAK,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAC5C,MAAM,KAAK,GAAG,IAAI,cAAK,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAE9C,MAAM,cAAe,SAAQ,iBAAO;IAApC;;QACE,SAAI,GAAG,SAAS,CAAC;IAuBnB,CAAC;IArBC,SAAS;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IAED,oBAAoB,CAAC,OAAqB;QACxC,OAAO,IAAI,0BAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAuB;QACjC,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE3B,OAAO,CAAC,QAAQ,CACd,IAAI,4BAAoB,CACtB,OAAO,CAAC,SAAS,EACjB,IAAI,EACJ,KAAK,EACL,IAAI,mBAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EACxB,UAAU,CACX,CACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,GAAG,IAAA,qBAAY,EAAC,kBAAkB,CAAC,CAAC;AACpD,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;AACrC,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;AAC1B,MAAM,IAAI,GAAG,IAAI,cAAI,CAAC,IAAI,yBAAe,EAAE,CAAC,CAAC;AAC7C,MAAM,KAAK,GAAG,IAAI,eAAK,CAAC,IAAI,yBAAe,EAAE,CAAC,CAAC;AAE/C,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAG,IAAI,sCAAiB,CAC/B,OAAO,EACP,IAAI,wCAAkB,CAAC,KAAK,EAAE,IAAI,EAAE;YAClC,IAAI,EAAE,CAAC;YACP,EAAE,EAAE,GAAG;SACR,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qCAAqC,EAAE,IAAI,CAAC,EAAE;QACjD,MAAM,QAAQ,GAAG,IAAI,wCAAkB,CACrC,KAAK,EACL,IAAI,EACJ;YACE,IAAI,EAAE,CAAC;YACP,EAAE,EAAE,GAAG;SACR,EACD;YACE,mBAAmB,EAAE,GAAG,EAAE;gBACxB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAEzE,IAAI,EAAE,CAAC;YACT,CAAC;SACF,CACF,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,uBAAe,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,MAAM,GAAG,GAAG,IAAI,sCAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAErD,GAAG,CAAC,KAAK,CAAC,IAAI,wBAAc,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACjD,GAAG,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAE5B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=session.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.spec.js","sourceRoot":"","sources":["../../src/tests/session.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"moduleFileExtensions": ["js", "json", "ts"],
|
|
3
|
-
"verbose": true,
|
|
4
|
-
"rootDir": "src/tests",
|
|
5
|
-
"testRegex": ".spec.ts$",
|
|
6
|
-
"transform": {
|
|
7
|
-
"^.+\\.(t|j)s$": "ts-jest"
|
|
8
|
-
},
|
|
9
|
-
"coverageDirectory": "../coverage",
|
|
10
|
-
"testEnvironment": "node",
|
|
11
|
-
"testTimeout": 300000
|
|
12
|
-
}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { Order } from '../../../domain';
|
|
2
|
-
import { pnl, weightedMean } from '../../../shared';
|
|
3
|
-
import {
|
|
4
|
-
BalanceTransactEvent,
|
|
5
|
-
OrderCanceledEvent,
|
|
6
|
-
OrderCancelingEvent,
|
|
7
|
-
OrderFilledEvent,
|
|
8
|
-
OrderNewEvent,
|
|
9
|
-
OrderPendingEvent,
|
|
10
|
-
PositionPatchEvent
|
|
11
|
-
} from '../../../store';
|
|
12
|
-
import { PaperAdapter } from '..';
|
|
13
|
-
import { PaperSimulator } from './paper-simulator';
|
|
14
|
-
|
|
15
|
-
export class PaperMarginSimulator extends PaperSimulator {
|
|
16
|
-
leverage = 10;
|
|
17
|
-
|
|
18
|
-
constructor(adapter: PaperAdapter) {
|
|
19
|
-
super(adapter);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
onOrderOpened(order: Order) {
|
|
23
|
-
const timestamp = this.adapter.timestamp();
|
|
24
|
-
|
|
25
|
-
this.adapter.store.dispatch(new OrderNewEvent(order, timestamp));
|
|
26
|
-
this.adapter.store.dispatch(new OrderPendingEvent(order.id, timestamp));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
onOrderCompleted(order: Order, averageExecutionRate: number, timestamp: number) {
|
|
30
|
-
const instrument =
|
|
31
|
-
this.adapter.store.snapshot.universe.instrument[order.instrument.toString()];
|
|
32
|
-
|
|
33
|
-
let transact = instrument.quote.floor(
|
|
34
|
-
-instrument.commission.calculateMakerFee(averageExecutionRate * order.quantity)
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
const id = instrument.toString();
|
|
38
|
-
const position =
|
|
39
|
-
this.adapter.store.snapshot.balance[instrument.quote.toString()].position[id];
|
|
40
|
-
|
|
41
|
-
let rate = position?.averageExecutionRate ?? 0;
|
|
42
|
-
let size = position?.size ?? 0;
|
|
43
|
-
let quantity = order.quantity;
|
|
44
|
-
|
|
45
|
-
switch (order.side) {
|
|
46
|
-
case 'BUY':
|
|
47
|
-
if (size < 0) {
|
|
48
|
-
const comsumeQuantity = Math.min(Math.abs(size), quantity);
|
|
49
|
-
|
|
50
|
-
transact += pnl(averageExecutionRate, rate, comsumeQuantity);
|
|
51
|
-
|
|
52
|
-
size += comsumeQuantity;
|
|
53
|
-
quantity -= comsumeQuantity;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (!size) {
|
|
57
|
-
rate = averageExecutionRate;
|
|
58
|
-
size = quantity;
|
|
59
|
-
} else {
|
|
60
|
-
rate = weightedMean([rate, averageExecutionRate], [size, quantity]);
|
|
61
|
-
size += quantity;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
break;
|
|
65
|
-
|
|
66
|
-
case 'SELL':
|
|
67
|
-
if (size > 0) {
|
|
68
|
-
const comsumeQuantity = Math.min(size, quantity);
|
|
69
|
-
|
|
70
|
-
transact += pnl(rate, averageExecutionRate, comsumeQuantity);
|
|
71
|
-
|
|
72
|
-
size -= comsumeQuantity;
|
|
73
|
-
quantity -= comsumeQuantity;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
if (!size) {
|
|
77
|
-
rate = averageExecutionRate;
|
|
78
|
-
size = -quantity;
|
|
79
|
-
} else {
|
|
80
|
-
rate = weightedMean([rate, averageExecutionRate], [size, -quantity]);
|
|
81
|
-
size -= quantity;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
this.adapter.store.dispatch(
|
|
88
|
-
new OrderFilledEvent(order.id, averageExecutionRate, timestamp),
|
|
89
|
-
new BalanceTransactEvent(instrument.quote, transact, timestamp),
|
|
90
|
-
new PositionPatchEvent(
|
|
91
|
-
id,
|
|
92
|
-
instrument,
|
|
93
|
-
rate,
|
|
94
|
-
size,
|
|
95
|
-
this.leverage,
|
|
96
|
-
'CROSS',
|
|
97
|
-
timestamp
|
|
98
|
-
)
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
onOrderCanceled(order: Order) {
|
|
103
|
-
const timestamp = this.adapter.timestamp();
|
|
104
|
-
|
|
105
|
-
this.adapter.store.dispatch(new OrderCancelingEvent(order.id, timestamp));
|
|
106
|
-
this.adapter.store.dispatch(new OrderCanceledEvent(order.id, timestamp));
|
|
107
|
-
}
|
|
108
|
-
}
|