diff --git a/components/TradesTable/index.tsx b/components/TradesTable/index.tsx index c92de882..d244c28d 100644 --- a/components/TradesTable/index.tsx +++ b/components/TradesTable/index.tsx @@ -55,6 +55,7 @@ export class TradesTable extends React.Component [ @@ -66,6 +67,7 @@ export class TradesTable extends React.Component{trade.boughtCurrency}, {(trade.amountSold / trade.rate).toFixed(8)}, {`${trade.transactionFee} ${trade.transactionFeeCurrency}`}, + {`${trade.tradeFee} ${trade.tradeFeeCurrency}`}, , ])} /> diff --git a/src/parsers/trades/index.ts b/src/parsers/trades/index.ts index 30b720d4..b045d43c 100644 --- a/src/parsers/trades/index.ts +++ b/src/parsers/trades/index.ts @@ -6,6 +6,7 @@ import geminiParser from './gemini'; import krakenParser from './kraken'; import poloniexParser from './poloniex'; import revolutParser from './revolut'; +import tradeOgreParser from './tradeogre' const parserMapping: {[key in EXCHANGES]: any} = { [EXCHANGES.Binance]: binanceParser, @@ -14,6 +15,7 @@ const parserMapping: {[key in EXCHANGES]: any} = { [EXCHANGES.Kraken]: krakenParser, [EXCHANGES.Poloniex]: poloniexParser, [EXCHANGES.Revolut]: revolutParser, + [EXCHANGES.TradeOgre]: tradeOgreParser, } export default async function processTradesImport(importDetails: IImport): Promise { diff --git a/src/parsers/trades/tradeogre/index.ts b/src/parsers/trades/tradeogre/index.ts new file mode 100644 index 00000000..c4fea9f1 --- /dev/null +++ b/src/parsers/trades/tradeogre/index.ts @@ -0,0 +1,48 @@ +import { getCSVData } from '../../'; +import { EXCHANGES, IImport, IPartialTrade, ITrade } from '../../../types'; +import { createDateAsUTC, createID } from '../../utils'; + +enum TradeOgreOrderType { + SELL = 'SELL', + BUY = 'BUY', +} + +interface ITradeOgre { + Type: string; + Exchange: string; + Date: string; + Amount: string; + Price: string; + Fee: string; +} + +export default async function processData(importDetails: IImport): Promise { + const data: ITradeOgre[] = await getCSVData(importDetails.data) as ITradeOgre[]; + const internalFormat: ITrade[] = []; + for (const trade of data) { + const tradeToAdd: IPartialTrade = { + date : createDateAsUTC(new Date(trade.Date)).getTime(), + exchange : EXCHANGES.TradeOgre, + }; + if (trade.Type === TradeOgreOrderType.BUY) { + [tradeToAdd.soldCurrency, tradeToAdd.boughtCurrency] = trade.Exchange.split('-'); + tradeToAdd.amountSold = parseFloat(trade.Amount) * parseFloat(trade.Price); + tradeToAdd.rate = parseFloat(trade.Price); + tradeToAdd.tradeFeeCurrency = tradeToAdd.soldCurrency; + } else if (trade.Type === TradeOgreOrderType.SELL) { + [tradeToAdd.boughtCurrency, tradeToAdd.soldCurrency] = trade.Exchange.split('-'); + tradeToAdd.amountSold = parseFloat(trade.Amount); + tradeToAdd.rate = 1 / parseFloat(trade.Price); + tradeToAdd.tradeFeeCurrency = tradeToAdd.boughtCurrency; + } else { + console.error(`Error parsing ${tradeToAdd.exchange} trade. + Unknown type ${trade.Type}`); + continue; + } + tradeToAdd.tradeFee = parseFloat(trade.Fee); + tradeToAdd.ID = createID(tradeToAdd); + tradeToAdd.exchangeID = tradeToAdd.ID; + internalFormat.push(tradeToAdd as ITrade); + } + return internalFormat; +} diff --git a/src/types/locations.ts b/src/types/locations.ts index c0053d4b..bbe6aea5 100644 --- a/src/types/locations.ts +++ b/src/types/locations.ts @@ -7,6 +7,7 @@ export enum EXCHANGES { Kraken = 'KRAKEN', Binance = 'BINANCE', Revolut = 'REVOLUT', + TradeOgre = 'TRADEOGRE', } export enum IncomeImportTypes { @@ -20,4 +21,5 @@ export enum ExchangesTradeHeaders { KRAKEN = '85bf27e799cc0a30fe5b201cd6a4724e4a52feb433f41a1e8b046924e3bf8dc5', BINANCE = '4d0d5df894fe488872e513f6148dfa14ff29272e759b7fb3c86d264687a7cf99', REVOLUT = 'ef10a780b82fdd31bb5b5f4f21eb7332c46b324513ab15418448f360f268e37c', + TRADEOGRE = '6828e5ff7c7adc2107f64db75ec75cdd23d159cd41bccaf9cdc0c266d62e83a6', } diff --git a/src/types/trade.ts b/src/types/trade.ts index 07731197..1de8b25b 100644 --- a/src/types/trade.ts +++ b/src/types/trade.ts @@ -13,6 +13,8 @@ export interface ITrade { ID: string; transactionFee: number; transactionFeeCurrency: string; + tradeFee?: number; + tradeFeeCurrency?: string; } export interface ITradeWithFiatRate extends ITrade {