import { Quote , Broker , Order } from './common' ; import { ConfigRoot } from './config' ; import OrderImpl from '../OrderImpl' ; import { TimeSeries } from '@bitr/chronodb' ; import { EventEmitter } from 'events' ; export interface BrokerAdapter { broker : Broker ; send ( order ) : Promise < void > ; refresh ( order ) : Promise < void > ; cancel ( order ) : Promise < void > ; getBtcPosition ( ) : Promise < number > ; getPositions ? : ( ) => Promise < Map < string , number > > ; fetchQuotes ( ) : Promise < Quote [ ] > ; } export interface BrokerMap < T > { [ key ] : T ; } export type OrderPair = [ OrderImpl , OrderImpl ] ; export interface SpreadAnalysisResult { bid : Quote ; ask : Quote ; invertedSpread : number ; availableVolume : number ; targetVolume : number ; targetProfit : number ; profitPercentAgainstNotional : number ; } export interface PairSummary { entryProfit : number ; entryProfitRatio : number ; currentExitCost ? : number ; currentExitCostRatio ? : number ; currentExitNetProfitRatio ? : number ; } export interface PairWithSummary { key : string ; pair : OrderPair ; pairSummary : PairSummary ; exitAnalysisResult ? : SpreadAnalysisResult ; } export interface SpreadStat { timestamp : number ; byBroker : { [ x ] : { ask ? : Quote ; bid ? : Quote ; spread ? : number ; } ; } ; bestCase : SpreadAnalysisResult ; worstCase : SpreadAnalysisResult ; } export interface LimitChecker { check ( ) : LimitCheckResult ; } export interface LimitCheckResult { success : boolean ; reason : string ; message : string ; } export interface ConfigStore extends EventEmitter { config : ConfigRoot ; } export interface BrokerPosition { broker : Broker ; longAllowed : boolean ; shortAllowed : boolean ; baseCcyPosition : number ; allowedLongSize : number ; allowedShortSize : number ; } export type OrderPairKeyValue = { key : string ; value : OrderPair ; } ; export interface ActivePairStore extends EventEmitter { get ( key ) : Promise < OrderPair > ; getAll ( ) : Promise < OrderPairKeyValue [ ] > ; put ( value ) : Promise < string > ; del ( key ) : Promise < void > ; delAll ( ) : Promise < { } > ; } export interface SpreadStatTimeSeries extends TimeSeries < SpreadStat > { } export type OrderKeyValue = { key : string ; value : Order ; } ; export interface HistoricalOrderStore extends EventEmitter { get ( key ) : Promise < Order > ; getAll ( ) : Promise < OrderKeyValue [ ] > ; put ( value ) : Promise < string > ; del ( key ) : Promise < void > ; delAll ( ) : Promise < { } > ; }