Skip to content

Commit

Permalink
feat: support gate.io trades import
Browse files Browse the repository at this point in the history
  • Loading branch information
Zahrun committed Dec 11, 2022
1 parent 3ff4bab commit 5fe0225
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 0 deletions.
94 changes: 94 additions & 0 deletions src/parsers/trades/gate.io/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import { getCSVData } from '../../';
import { EXCHANGES, IImport, IPartialTrade, ITrade } from '../../../types';
import { createDateAsUTC, createID } from '../../utils';

interface IGateIO {
No: string;
'Account Type': string;
Time: string;
'Action type': string;
Currency: string;
'Order id': string;
'Change amount': string;
Amount: string;
'Additional Info': string;
}

export default async function processData(importDetails: IImport): Promise<ITrade[]> {
const data: IGateIO[] = await getCSVData(importDetails.data) as IGateIO[];
const internalFormat: ITrade[] = [];
if (data.length < 1) {
return internalFormat;
}
let feeTrade = data[0];
let filledTrade = data[0];
let pointTrade = data[0];
let lineContinuity = 0;
for (const trade of data) {
const tradeToAdd: IPartialTrade = {
date : createDateAsUTC(new Date(trade.Time)).getTime(),
exchangeID : trade['Order id'],
exchange = EXCHANGES.GateIO,
};
switch (trade['Action type']) {
case 'Trading Fees': {
lineContinuity = 1;
feeTrade = trade;
continue;
}
case 'Order Filled': {
if (lineContinuity++ !== 1) {
console.error('Error parsing Gate.io trade lineContinuity++ !== 1 lineContinuity=${lineContinuity}');
lineContinuity = 0;
break;
}
filledTrade = trade;
continue;
}
case 'Order Placed': {
if (lineContinuity !== 2) {
console.error('Error parsing Gate.io trade lineContinuity !== 2 lineContinuity=${lineContinuity}');
lineContinuity = 0;
break;
}
lineContinuity = 0;
tradeToAdd.boughtCurrency = filledTrade.Currency;
tradeToAdd.soldCurrency = trade.Currency;
tradeToAdd.amountSold = Math.abs(parseFloat(trade['Change amount']));
tradeToAdd.rate = Math.abs(parseFloat(trade['Change amount']) / parseFloat(filledTrade['Change amount']));
tradeToAdd.transactionFeeCurrency = feeTrade.Currency;
tradeToAdd.transactionFee = Math.abs(parseFloat(feeTrade['Change amount']));
break;
}
case 'Points Purchase': {
switch (lineContinuity) {
case 0: {
pointTrade = trade;
lineContinuity = 1;
continue;
}
case 1: {
lineContinuity = 0;
tradeToAdd.boughtCurrency = pointTrade.Currency;
tradeToAdd.soldCurrency = trade.Currency;
tradeToAdd.amountSold = Math.abs(parseFloat(trade['Change amount']));
tradeToAdd.rate = Math.abs(parseFloat(trade['Change amount']) / parseFloat(pointTrade['Change amount']));
break;
}
default: {
console.error(`Error parsing Gate.io trade lineContinuity=${lineContinuity}`);
break;
}
}
break;
}
default: {
console.log(`Ignored Gate.io trade of type ${trade['Action type']}`);
continue;
}
}
tradeToAdd.ID = createID(tradeToAdd);
internalFormat.push(tradeToAdd as ITrade);
}
return internalFormat;
}
2 changes: 2 additions & 0 deletions src/parsers/trades/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { EXCHANGES, ExchangesTradeHeaders, IImport, ITrade } from '@types';
import * as crypto from 'crypto';
import binanceParser from './binance';
import bittrexParser from './bittrex';
import gateIOParser from './gate.io';
import geminiParser from './gemini';
import krakenParser from './kraken';
import poloniexParser from './poloniex';
Expand All @@ -10,6 +11,7 @@ import revolutParser from './revolut';
const parserMapping: {[key in EXCHANGES]: any} = {
[EXCHANGES.Binance]: binanceParser,
[EXCHANGES.Bittrex]: bittrexParser,
[EXCHANGES.GateIO]: gateIOParser,
[EXCHANGES.Gemini]: geminiParser,
[EXCHANGES.Kraken]: krakenParser,
[EXCHANGES.Poloniex]: poloniexParser,
Expand Down
2 changes: 2 additions & 0 deletions src/types/locations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ export type Location = EXCHANGES | string;

export enum EXCHANGES {
Bittrex = 'BITTREX',
GateIO = 'GATE_IO',
Gemini= 'GEMINI',
Poloniex = 'POLONIEX',
Kraken = 'KRAKEN',
Expand All @@ -15,6 +16,7 @@ export enum IncomeImportTypes {

export enum ExchangesTradeHeaders {
BITTREX = '07230399aaa8d1f15e88e38bd43a01c5ef1af6c1f9131668d346e196ff090d80',
GATE_IO = '99ff90ddaa0826df50d15296f504ca71e4b04dff45ae7798e7ba5f688fec9209',
GEMINI = '996edee25db7f3d1dd16c83c164c6cff8c6d0f5d6b3aafe6d1700f2a830f6c9e',
POLONIEX = 'd7484d726e014edaa059c0137ac91183a7eaa9ee5d52713aa48bb4104b01afb0',
KRAKEN = '85bf27e799cc0a30fe5b201cd6a4724e4a52feb433f41a1e8b046924e3bf8dc5',
Expand Down

0 comments on commit 5fe0225

Please sign in to comment.