Beispiel #1
0
 private SlotMachineEngine()
 {
     this.symbolFactory = new SymbolFactory();
     this.messageWriter = new ConsoleMessageWriter();
     this.messageReader = new ConsoleMessageReader();
     this.player        = new Player();
 }
 public RepositoryBootstrapper(
     IExchangeFactory exchangeFactory,
     IIntervalFactory intervalFactory,
     ICurrencyFactory currencyFactory,
     ISymbolFactory symbolFactory,
     IOrderSideFactory orderSideFactory,
     IStorageTransactionFactory <HistorianDbContext> storageTransactionFactory,
     IHistorianRepository historianRepository,
     IExchangeRepository exchangeRepository,
     IIntervalRepository intervalRepository,
     ICurrencyRepository currencyRepository,
     ISymbolRepository symbolRepository,
     IOrderSideRepository orderSideRepository)
 {
     ExchangeFactory           = exchangeFactory;
     IntervalFactory           = intervalFactory;
     CurrencyFactory           = currencyFactory;
     SymbolFactory             = symbolFactory;
     OrderSideFactory          = orderSideFactory;
     StorageTransactionFactory = storageTransactionFactory;
     HistorianRepository       = historianRepository;
     ExchangeRepository        = exchangeRepository;
     IntervalRepository        = intervalRepository;
     CurrencyRepository        = currencyRepository;
     SymbolRepository          = symbolRepository;
     OrderSideRepository       = orderSideRepository;
 }
Beispiel #3
0
        internal AdsSymbolLoader(IAdsConnection connection, SymbolLoaderSettings settings, IAccessorRawValue accessor, ISession session, SymbolUploadInfo symbolsInfo)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }
            if (accessor == null)
            {
                throw new ArgumentNullException("accessor");
            }
            if (symbolsInfo == null)
            {
                throw new ArgumentNullException("symbolsInfo");
            }
            ISymbolFactory symbolFactory = null;

            this._connection       = connection;
            this._symbolUploadInfo = symbolsInfo;
            symbolFactory          = (settings.SymbolsLoadMode != SymbolsLoadMode.DynamicTree) ? ((ISymbolFactory) new TwinCAT.Ads.TypeSystem.SymbolFactory(settings.NonCachedArrayElements)) : ((ISymbolFactory) new DynamicSymbolFactory(new TwinCAT.Ads.TypeSystem.SymbolFactory(settings.NonCachedArrayElements), settings.NonCachedArrayElements));
            this._settings         = settings;
            AdsBinder binder = new AdsBinder(this._connection.Address, this, symbolFactory, this.UseVirtualInstances);

            this._symbolFactorServices = new SymbolFactoryServices(binder, symbolFactory, accessor, session);
            symbolFactory.Initialize(this._symbolFactorServices);
            this._rootNamespace = this._connection.Address.ToString();
            this._namespaces    = new NamespaceCollection();
        }
Beispiel #4
0
        public Client(Bitfinex ex, ISymbolFactory symbolFactory)
        {
            Exchange = ex;

            SymbolFactory = symbolFactory;

            RateLimiter = new BitfinexRateLimiter();
        }
Beispiel #5
0
        public Client(Binance exchange, ICurrencyFactory currencyFactory, ISymbolFactory symbolFactory)
        {
            Exchange        = exchange;
            CurrencyFactory = currencyFactory;
            SymbolFactory   = symbolFactory;

            RateLimiter = new BinanceRateLimiter();
        }
Beispiel #6
0
        public Client(CoinbasePro exchange, ICurrencyFactory currencyFactory, ISymbolFactory symbolFactory)
        {
            Exchange        = exchange;
            CurrencyFactory = currencyFactory;
            SymbolFactory   = symbolFactory;

            RateLimiter = new CoinbaseProRateLimiter();
        }
Beispiel #7
0
 public DynamicSymbolFactory(ISymbolFactory inner, bool nonCachedArrayElements)
 {
     if (inner == null)
     {
         throw new ArgumentNullException("inner");
     }
     this.inner = inner;
     this.nonCachedArrayElements = nonCachedArrayElements;
     this.inner.SetInvalidCharacters(DefaultInvalidChars);
 }
Beispiel #8
0
 public ExchangeTradeStatWorker(
     ILoggerFactory loggerFactory,
     ISymbolFactory symbolFactory,
     IStorageTransactionFactory <HistorianDbContext> storageTransactionFactory,
     IMarketRepository marketRepository)
 {
     LoggerFactory             = loggerFactory;
     SymbolFactory             = symbolFactory;
     StorageTransactionFactory = storageTransactionFactory;
     MarketRepository          = marketRepository;
 }
 public ExchangeTradeCatchupWorker(
     ILoggerFactory loggerFactory,
     ISymbolFactory symbolFactory,
     IStorageTransactionFactory <HistorianDbContext> storageTransactionFactory,
     IExchangeTradeProvider exchangeTradeProvider,
     IHistorianRepository historianRepository)
 {
     LoggerFactory             = loggerFactory;
     SymbolFactory             = symbolFactory;
     StorageTransactionFactory = storageTransactionFactory;
     ExchangeTradeProvider     = exchangeTradeProvider;
     HistorianRepository       = historianRepository;
 }
Beispiel #10
0
 public SymbolFactoryServices(IBinder binder, ISymbolFactory factory, IAccessorRawValue accessor, ISession session)
 {
     if (binder == null)
     {
         throw new ArgumentNullException("binder");
     }
     if (factory == null)
     {
         throw new ArgumentNullException("loader");
     }
     this._binder        = binder;
     this._valueAccessor = accessor;
     this._symbolFactory = factory;
     this._session       = session;
 }
Beispiel #11
0
 public ExchangeTradeStatAggregateWorker(
     ILoggerFactory loggerFactory,
     ISymbolFactory symbolFactory,
     IStorageTransactionFactory <HistorianDbContext> storageTransactionFactory,
     IExchangeTradeStatProvider exchangeTradeStatProvider,
     IHistorianRepository historianRepository,
     IMarketRepository marketRepository)
 {
     LoggerFactory             = loggerFactory;
     SymbolFactory             = symbolFactory;
     StorageTransactionFactory = storageTransactionFactory;
     ExchangeTradeStatProvider = exchangeTradeStatProvider;
     HistorianRepository       = historianRepository;
     MarketRepository          = marketRepository;
 }
Beispiel #12
0
        internal override ISymbolCollection OnCreateSubSymbols(ISymbol parentInstance)
        {
            ISymbolCollection symbols       = null;
            ArrayType         dataType      = (ArrayType)base.DataType;
            ISymbolFactory    symbolFactory = this.FactoryServices.SymbolFactory;

            try
            {
                symbols = symbolFactory.CreateArrayElementInstances(parentInstance, dataType);
            }
            catch (Exception exception)
            {
                TwinCAT.Ads.Module.Trace.TraceError(exception);
                throw;
            }
            return(symbols);
        }
Beispiel #13
0
        internal override ISymbolCollection OnCreateSubSymbols(ISymbol parentInstance)
        {
            IDataType         type    = ((DataType)base.DataType).ResolveType(DataTypeResolveStrategy.AliasReference);
            ISymbolCollection symbols = base.OnCreateSubSymbols(parentInstance);

            try
            {
                ISymbolFactory symbolFactory = this.FactoryServices.SymbolFactory;
                if (type != null)
                {
                    DataTypeCategory category = type.Category;
                    if (category <= DataTypeCategory.Struct)
                    {
                        if (category == DataTypeCategory.Array)
                        {
                            symbols = symbolFactory.CreateArrayElementInstances(parentInstance, (IArrayType)type);
                        }
                        else if (category == DataTypeCategory.Struct)
                        {
                            symbols = symbolFactory.CreateFieldInstances(parentInstance, (IStructType)type);
                        }
                    }
                    else if (category != DataTypeCategory.Pointer)
                    {
                        if (category == DataTypeCategory.Union)
                        {
                            symbols = symbolFactory.CreateFieldInstances(parentInstance, (IUnionType)type);
                        }
                    }
                    else
                    {
                        ISymbol item = symbolFactory.CreateReferenceInstance((IPointerType)type, parentInstance);
                        if (item != null)
                        {
                            symbols.Add(item);
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Module.Trace.TraceError(exception);
            }
            return(symbols);
        }
Beispiel #14
0
 protected Binder(IInternalSymbolProvider provider, ISymbolFactory symbolFactory, bool useVirtualInstances)
 {
     if (provider == null)
     {
         throw new ArgumentNullException("provider");
     }
     if (symbolFactory == null)
     {
         throw new ArgumentNullException("symbolFactory");
     }
     if ((provider.SymbolsInternal != null) && (provider.SymbolsInternal.Mode != InstanceCollectionMode.PathHierarchy))
     {
         throw new ArgumentException($"Symbol provider has to be in Mode: {InstanceCollectionMode.PathHierarchy}", "provider");
     }
     this._provider            = provider;
     this._useVirtualInstances = useVirtualInstances;
     this._symbolFactory       = symbolFactory;
 }
Beispiel #15
0
        internal override ISymbolCollection OnCreateSubSymbols(ISymbol parentInstance)
        {
            ISymbolCollection symbols       = null;
            ISymbolFactory    symbolFactory = this.FactoryServices.SymbolFactory;
            IArrayType        arrayType     = this.UpdateDynamicType();

            base.size = arrayType.Size;
            try
            {
                symbols = symbolFactory.CreateArrayElementInstances(parentInstance, arrayType);
            }
            catch (Exception exception)
            {
                Module.Trace.TraceError(exception);
                throw;
            }
            return(symbols);
        }
Beispiel #16
0
        public ExchangeWorker(
            ILoggerFactory loggerFactory,
            ISymbolFactory symbolFactory,
            IHistorianRepository historianRepository,
            IExchangeTradeWorker tradeWorker,
            IExchangeTradeAggregateWorker tradeAggregateWorker,
            IExchangeTradeStatWorker tradeStatWorker,
            IExchangeTradeStatAggregateWorker tradeStatAggregateWorker)
        {
            LoggerFactory       = loggerFactory;
            SymbolFactory       = symbolFactory;
            HistorianRepository = historianRepository;

            TradeWorker              = tradeWorker;
            TradeStatWorker          = tradeStatWorker;
            TradeAggregateWorker     = tradeAggregateWorker;
            TradeStatAggregateWorker = tradeStatAggregateWorker;
        }
Beispiel #17
0
        public static T2 ChangeType <T, T2>(this Bitfinex exchange, ISymbolFactory symbolFactory, T obj, NameValueCollection query, NameValueCollection additionalData)
        {
            if (typeof(T2) == typeof(ICollection <MarketTick>))
            {
                var ticks = obj as List <object[]>;

                return((T2)(object)ticks.Select(t => new MarketTick
                {
                    Exchange = exchange.Name,
                    Epoch = new Epoch(DateTime.UtcNow),
                    SymbolCode = symbolFactory.Get(exchange.DecodeSymbol(t[0].ToString())[0], exchange.DecodeSymbol(t[0].ToString())[1]).Code,
                    BuyPrice = Convert.ToDecimal(t[1]),
                    SellPrice = Convert.ToDecimal(t[3]),
                    LastPrice = Convert.ToDecimal(t[7])
                }).ToList());
            }

            if (typeof(T2) == typeof(MarketTick))
            {
                var tick = obj as object[];

                var symbolCode = (SymbolCodeEnum)Enum.Parse(typeof(SymbolCodeEnum), additionalData["SymbolCode"]);

                return((T2)(object)new MarketTick
                {
                    Exchange = exchange.Name,
                    Epoch = new Epoch(DateTime.UtcNow),
                    SymbolCode = symbolCode,
                    BuyPrice = Convert.ToDecimal(tick[0]),
                    SellPrice = Convert.ToDecimal(tick[2]),
                    LastPrice = Convert.ToDecimal(tick[6])
                });
            }

            if (typeof(T2) == typeof(TradeResult))
            {
                var trades = obj as JArray;

                var filter = trades.Count > 0 ? Convert.ToString(trades.Max(t => t[1])) : query["start"];

                var symbolCode = (SymbolCodeEnum)Enum.Parse(typeof(SymbolCodeEnum), additionalData["SymbolCode"]);

                return((T2)(object)new TradeResult
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbolCode,
                    Trades = trades.Select(t => new MarketTrade
                    {
                        Exchange = exchange.Name,
                        SymbolCode = symbolCode,
                        Epoch = Epoch.FromMilliseconds(Convert.ToInt64(t[1])),
                        Price = Convert.ToDecimal(t[3]),
                        Volume = Math.Abs(Convert.ToDecimal(t[2])),
                        Side = Convert.ToDecimal(t[2]) > 0 ? OrderSideEnum.Buy : OrderSideEnum.Sell,
                        SourceTradeId = Convert.ToString(t[0])
                    }).OrderBy(t => t.Epoch.TimestampMilliseconds).ThenBy(t => t.SourceTradeId).ToList(),
                    Filter = filter
                });
            }

            if (typeof(T2) == typeof(ICollection <ExchangeStats>))
            {
                var tradeStats = (obj as List <BitfinexMarketStats>);

                var statKey    = (ExchangeStatsKeyEnum)Enum.Parse(typeof(ExchangeStatsKeyEnum), additionalData["StatKey"]);
                var symbolCode = (SymbolCodeEnum)Enum.Parse(typeof(SymbolCodeEnum), additionalData["SymbolCode"]);

                return((T2)(object)tradeStats.Select(t => new ExchangeStats
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbolCode,
                    StatKey = statKey,
                    Epoch = Epoch.FromMilliseconds(Convert.ToInt64(t[0])),
                    Value = Convert.ToDecimal(t[1])
                }).ToList());
            }

            if (typeof(T) == typeof(T2))
            {
                return((T2)(object)obj);
            }

            throw new Exception("Invalid type provided - " + typeof(T2));
        }
Beispiel #18
0
 public SlotFactory(ISymbolFactory symbolFactory)
 {
     this.symbolFactory = symbolFactory;
 }
Beispiel #19
0
        public static T2 ChangeType <T, T2>(this Binance exchange, ICurrencyFactory currencyFactory, ISymbolFactory symbolFactory, NameValueCollection postData, T obj)
        {
            if (typeof(T) == typeof(ICollection <BinancePriceTicker>))
            {
                var ticks = new List <MarketTick>();

                var priceTicks = obj as ICollection <BinancePriceTicker>;

                foreach (var tick in priceTicks)
                {
                    var binanceSymbol = exchange.Info.Symbols.Where(x => x.Symbol == tick.Symbol).FirstOrDefault();

                    var baseCurrencyCode  = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.BaseAsset);
                    var quoteCurrencyCode = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.QuoteAsset);
                    var symbol            = symbolFactory.Get(baseCurrencyCode, quoteCurrencyCode);

                    ticks.Add(new MarketTick
                    {
                        Exchange   = exchange.Name,
                        SymbolCode = symbol.Code,
                        Epoch      = Epoch.Now,
                        LastPrice  = tick.Price,
                    });
                }

                return((T2)(object)ticks);
            }

            if (typeof(T) == typeof(ICollection <BinanceOrderBookTicker>))
            {
                var ticks = new List <MarketTick>();

                var bookTicks = (obj as ICollection <BinanceOrderBookTicker>);

                foreach (var tick in bookTicks)
                {
                    var binanceSymbol = exchange.Info.Symbols.Where(x => x.Symbol == tick.Symbol).FirstOrDefault();

                    var baseCurrencyCode  = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.BaseAsset);
                    var quoteCurrencyCode = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.QuoteAsset);
                    var symbol            = symbolFactory.Get(baseCurrencyCode, quoteCurrencyCode);

                    ticks.Add(new MarketTick
                    {
                        Exchange   = exchange.Name,
                        SymbolCode = symbol.Code,
                        Epoch      = Epoch.Now,
                        BuyPrice   = tick.AskPrice,
                        SellPrice  = tick.BidPrice
                    });
                }

                return((T2)(object)ticks);
            }

            if (typeof(T2) == typeof(TradeResult))
            {
                var trades = obj as ICollection <Dictionary <string, object> >;

                var filter = trades.Count > 0 ? trades.Last()["a"].ToString() : postData["fromId"];

                var binanceSymbol = exchange.Info.Symbols.Where(x => x.Symbol == postData["symbol"]).FirstOrDefault();

                var baseCurrencyCode  = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.BaseAsset);
                var quoteCurrencyCode = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.QuoteAsset);
                var symbol            = symbolFactory.Get(baseCurrencyCode, quoteCurrencyCode);

                return((T2)(object)new TradeResult
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbol.Code,
                    Trades = trades.Select(t => new MarketTrade
                    {
                        Exchange = exchange.Name,
                        SymbolCode = symbol.Code,
                        Epoch = Epoch.FromMilliseconds(Convert.ToInt64(t["T"])),
                        Price = Convert.ToDecimal(t["p"]),
                        Volume = Convert.ToDecimal(t["q"]),
                        Side = Convert.ToBoolean(t["m"]) ? OrderSideEnum.Sell : OrderSideEnum.Buy,
                        SourceTradeId = Convert.ToString(t["a"])
                    }).ToList(),
                    Filter = filter
                });
            }

            if (typeof(T) == typeof(ICollection <BinanceTradeItem>))
            {
                var binanceSymbol = exchange.Info.Symbols.Where(x => x.Symbol == postData["symbol"]).FirstOrDefault();

                var baseCurrencyCode  = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.BaseAsset);
                var quoteCurrencyCode = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.QuoteAsset);

                var symbol = symbolFactory.Get(baseCurrencyCode, quoteCurrencyCode);

                var trades = obj as ICollection <BinanceTradeItem>;

                return((T2)(object)trades.Select(t => new TradeItem
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbol.Code,
                    Created = Epoch.FromMilliseconds(t.Time),
                    Id = t.Id.ToString(),
                    OrderId = t.OrderId.ToString(),
                    Fee = t.Commission,
                    FeeCurrencyCode = exchange.GetStandardisedCurrencyCode(currencyFactory, t.CommissionAsset),
                    Price = t.Price,
                    Volume = t.Quantity,
                    Side = t.IsBuyer ? OrderSideEnum.Buy : OrderSideEnum.Sell
                }).ToList());
            }

            if (typeof(T) == typeof(BinanceNewOrder))
            {
                var binanceSymbol = exchange.Info.Symbols.Where(x => x.Symbol == postData["symbol"]).FirstOrDefault();

                var baseCurrencyCode  = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.BaseAsset);
                var quoteCurrencyCode = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.QuoteAsset);

                var symbol = symbolFactory.Get(baseCurrencyCode, quoteCurrencyCode);

                var newOrder = obj as BinanceNewOrder;

                var orderType = exchange.GetOrderType(newOrder.Type);

                var price = orderType == OrderTypeEnum.Limit ? newOrder.Price : newOrder.Fills.Average(f => f.Price);

                return((T2)(object)new CreateOrder
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbol.Code,
                    Id = newOrder.OrderId,
                    Side = exchange.GetOrderSide(newOrder.Side),
                    Type = orderType,
                    State = exchange.GetOrderState(newOrder.Status),
                    OrderEpoch = Epoch.FromMilliseconds(newOrder.TransactTime),
                    Price = price,
                    Volume = newOrder.OriginalQuantity
                });
            }

            if (typeof(T) == typeof(ICollection <BinanceOpenOrder>))
            {
                var binanceSymbol = exchange.Info.Symbols.Where(x => x.Symbol == postData["symbol"]).FirstOrDefault();

                var baseCurrencyCode  = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.BaseAsset);
                var quoteCurrencyCode = exchange.GetStandardisedCurrencyCode(currencyFactory, binanceSymbol.QuoteAsset);

                var symbol = symbolFactory.Get(baseCurrencyCode, quoteCurrencyCode);

                var openOrders = obj as ICollection <BinanceOpenOrder>;

                return((T2)(object)openOrders.Select(o => new OrderItem
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbol.Code,
                    Id = o.OrderId,
                    Side = exchange.GetOrderSide(o.Side),
                    Type = exchange.GetOrderType(o.Type),
                    State = exchange.GetOrderState(o.Status),
                    OrderEpoch = Epoch.FromMilliseconds(o.Time),
                    Price = o.Price,
                    AvgPrice = o.Price,
                    Volume = o.OriginalQuantity,
                    RemainingVolume = o.OriginalQuantity - o.ExecutedQuantity
                }).ToList());
            }

            if (typeof(T) == typeof(BinanceCancelOrder))
            {
                var cancelOrder = obj as BinanceCancelOrder;

                return((T2)(object)new CancelOrder
                {
                    Exchange = exchange.Name,
                    Id = cancelOrder.OrderId,
                    Epoch = Epoch.FromMilliseconds(cancelOrder.TransactTime),
                    State = exchange.GetOrderState(cancelOrder.Status)
                });
            }

            if (typeof(T) == typeof(T2))
            {
                return((T2)(object)obj);
            }

            throw new Exception("Invalid type provided - " + typeof(T2));
        }
Beispiel #20
0
 public Client(Kraken ex, ICurrencyFactory currencyFactory, ISymbolFactory symbolFactory)
 {
     Exchange        = ex;
     CurrencyFactory = currencyFactory;
     SymbolFactory   = symbolFactory;
 }
Beispiel #21
0
 internal AdsBinder(AmsAddress imageBaseAddress, IInternalSymbolProvider provider, ISymbolFactory symbolFactory, bool useVirtualInstance) : base(provider, symbolFactory, useVirtualInstance)
 {
     this._imageBaseAddress = imageBaseAddress;
 }
Beispiel #22
0
 public CoinbasePro(ICurrencyFactory currencyFactory, ISymbolFactory symbolFactory)
 {
     CurrencyFactory = currencyFactory;
     SymbolFactory   = symbolFactory;
 }
        protected void SetUp()
        {
            var currency = new List <ICurrency>();

            currency.Add(new Bitcoin());
            currency.Add(new Litecoin());
            currency.Add(new Ethereum());
            currency.Add(new EthereumClassic());
            currency.Add(new Ripple());
            currency.Add(new Aud());
            currency.Add(new Eur());
            currency.Add(new Usd());
            currency.Add(new Iota());
            currency.Add(new Neo());
            currency.Add(new Dash());
            currency.Add(new Tether());
            currency.Add(new StellarLumens());
            currency.Add(new BinanceCoin());
            currency.Add(new Monero());
            currency.Add(new EOS());
            currency.Add(new Zcash());
            currency.Add(new TRON());
            currency.Add(new Qtum());
            currency.Add(new Verge());
            currency.Add(new OmiseGo());
            currency.Add(new NEM());
            currency.Add(new Cardano());
            currency.Add(new Lisk());
            currency.Add(new ICON());
            currency.Add(new Stratis());
            currency.Add(new BitShares());
            currency.Add(new Siacoin());
            currency.Add(new AdEx());
            currency.Add(new Waves());
            currency.Add(new Golem());
            currency.Add(new Status());
            currency.Add(new DigixDAO());
            currency.Add(new Augur());
            currency.Add(new Zrx());
            currency.Add(new IOStoken());
            currency.Add(new Nano());
            currency.Add(new BasicAttentionToken());
            currency.Add(new Monaco());
            currency.Add(new Steem());
            currency.Add(new Civic());
            currency.Add(new Aelf());
            currency.Add(new PowerLedger());
            currency.Add(new Poet());
            currency.Add(new Cindicator());
            currency.Add(new Storj());
            currency.Add(new Decentraland());
            currency.Add(new Rcoin());
            currency.Add(new FunFair());
            currency.Add(new Syscoin());
            currency.Add(new Ark());
            currency.Add(new Enigma());
            currency.Add(new Walton());
            currency.Add(new Ontology());
            currency.Add(new NAVCoin());
            currency.Add(new BitcoinDiamond());
            currency.Add(new Tierion());
            currency.Add(new TimeNewBank());
            currency.Add(new district0x());
            currency.Add(new Bancor());
            currency.Add(new Gas());
            currency.Add(new BlockMason());
            currency.Add(new NucleusVision());
            currency.Add(new Decred());
            currency.Add(new Ardor());
            currency.Add(new Neblio());
            currency.Add(new Viberate());
            currency.Add(new RequestNetwork());
            currency.Add(new Gifto());
            currency.Add(new AppCoins());
            currency.Add(new Viacoin());
            currency.Add(new Quantstamp());
            currency.Add(new ETHLend());
            currency.Add(new Komodo());
            currency.Add(new SingularDTV());
            currency.Add(new ChainLink());
            currency.Add(new ZCoin());
            currency.Add(new Lunyr());
            currency.Add(new Zilliqa());
            currency.Add(new PIVX());
            currency.Add(new KyberNetwork());
            currency.Add(new AirSwap());
            currency.Add(new CyberMiles());
            currency.Add(new SimpleToken());
            currency.Add(new Nebulas());
            currency.Add(new VIBE());
            currency.Add(new Aion());
            currency.Add(new Storm());
            currency.Add(new Bluzelle());
            currency.Add(new SONM());
            currency.Add(new iExecRLC());
            currency.Add(new EnjinCoin());
            currency.Add(new Eidoo());
            currency.Add(new GenesisVision());
            currency.Add(new Loopring());
            currency.Add(new CoinDash());
            currency.Add(new INSEcosystem());
            currency.Add(new Everex());
            currency.Add(new Groestlcoin());
            currency.Add(new RaidenNetworkToken());
            currency.Add(new ThetaToken());
            currency.Add(new Aeternity());
            currency.Add(new Nuls());
            currency.Add(new Populous());
            currency.Add(new Nexus());
            currency.Add(new Ambrosus());
            currency.Add(new Aeron());
            currency.Add(new ZenCash());
            currency.Add(new WaBi());
            currency.Add(new Etherparty());
            currency.Add(new OpenAnx());
            currency.Add(new POANetwork());
            currency.Add(new Bread());
            currency.Add(new Agrello());
            currency.Add(new Monetha());
            currency.Add(new Mithril());
            currency.Add(new WePower());
            currency.Add(new GXShares());
            currency.Add(new MoedaLoyaltyPoints());
            currency.Add(new Dent());
            currency.Add(new Skycoin());
            currency.Add(new QLINK());
            currency.Add(new SingularityNET());
            currency.Add(new RepublicProtocol());
            currency.Add(new Selfkey());
            currency.Add(new TrueUSD());
            currency.Add(new StreamrDATAcoin());
            currency.Add(new Polymath());
            currency.Add(new PhoenixCoin());
            currency.Add(new VeChain());
            currency.Add(new Dock());
            currency.Add(new GoChain());
            currency.Add(new onGsocial());
            currency.Add(new PaxosStandardToken());
            currency.Add(new HyperCash());
            currency.Add(new IoTeX());
            currency.Add(new Mainframe());
            currency.Add(new LoomNetwork());
            currency.Add(new Holo());
            currency.Add(new PundiX());
            currency.Add(new MalteseLira());
            currency.Add(new StableUSD());
            currency.Add(new Ravencoin());
            currency.Add(new QuarkChain());
            currency.Add(new USDC());
            currency.Add(new Wanchain());
            currency.Add(new Yoyow());
            currency.Add(new Ethos());

            CurrencyFactory = new CurrencyFactory(currency);
            SymbolFactory   = new SymbolFactory(CurrencyFactory);
        }
Beispiel #24
0
 public Kraken(ICurrencyFactory currencyFactory, ISymbolFactory symbolFactory)
 {
     CurrencyFactory = currencyFactory;
     SymbolFactory   = symbolFactory;
 }
Beispiel #25
0
 public Binance(ICurrencyFactory currencyFactory, ISymbolFactory symbolFactory)
 {
     CurrencyFactory = currencyFactory;
     SymbolFactory   = symbolFactory;
 }
Beispiel #26
0
        public static T2 ChangeType <T, T2>(this CoinbasePro exchange, ICurrencyFactory currencyFactory, ISymbolFactory symbolFactory, object requestData, T obj, long?cbBefore)
        {
            if (typeof(T) == typeof(CoinbaseProCancelOrder))
            {
                return((T2)(object)new CancelOrder());
            }

            if (typeof(T) == typeof(CoinbaseProCreateOrderResponse))
            {
                var order = obj as CoinbaseProCreateOrderResponse;

                var symbol = exchange.DecodeProductId(order.ProductId);

                return((T2)(object)new CreateOrder
                {
                    Id = order.Id,
                    SymbolCode = symbol.Code,
                    Side = exchange.GetOrderSide(order.Side),
                    Type = exchange.GetOrderType(order.Type),
                    OrderEpoch = new Epoch(order.CreatedAt.ToUniversalTime()),
                    Price = order.Price,
                    Volume = order.Size,
                    State = exchange.GetOrderState(order.Status)
                });
            }

            if (typeof(T) == typeof(ICollection <CoinbaseProAccount>))
            {
                var account = obj as ICollection <CoinbaseProAccount>;

                return((T2)(object)account.Select(a => new AccountBalance
                {
                    CurrencyCode = exchange.GetStandardisedCurrencyCode(currencyFactory, a.Currency),
                    Balance = a.Balance,
                    PendingFunds = a.Hold
                }).ToList());
            }

            if (typeof(T) == typeof(ICollection <CoinbaseProOrder>))
            {
                var orders = obj as ICollection <CoinbaseProOrder>;

                return((T2)(object)orders.Select(o => new OrderItem
                {
                    Id = o.Id,
                    SymbolCode = exchange.DecodeProductId(o.ProductId).Code,
                    Side = exchange.GetOrderSide(o.Side),
                    Type = exchange.GetOrderType(o.Type),
                    Price = o.Price,
                    Volume = o.Size,
                    AvgPrice = o.Price,
                    RemainingVolume = o.Size - o.FilledSize,
                    Fee = o.FillFees,
                    State = exchange.GetOrderState(o.Status)
                }).ToList());
            }

            if (typeof(T) == typeof(CoinbaseProOrderBook))
            {
                var orderBook = obj as CoinbaseProOrderBook;

                var nvc = requestData as NameValueCollection;

                return((T2)(object)new OrderBook
                {
                    Exchange = exchange.Name,
                    SymbolCode = exchange.DecodeProductId(nvc["ProductId"]).Code,
                    Ask = orderBook.Asks.Select(a => new OrderBookItem
                    {
                        Side = OrderSideEnum.Buy,
                        Price = a.ElementAt(0),
                        AvgPrice = a.ElementAt(0),
                        Volume = a.ElementAt(1)
                    }).ToList(),
                    Bid = orderBook.Bids.Select(a => new OrderBookItem
                    {
                        Side = OrderSideEnum.Sell,
                        Price = a.ElementAt(0),
                        AvgPrice = a.ElementAt(0),
                        Volume = a.ElementAt(1)
                    }).ToList()
                });
            }

            if (typeof(T) == typeof(CoinbaseProTick))
            {
                var tick = obj as CoinbaseProTick;

                var nvc = requestData as NameValueCollection;

                return((T2)(object)new MarketTick
                {
                    Exchange = exchange.Name,
                    SymbolCode = exchange.DecodeProductId(nvc["ProductId"]).Code,
                    Epoch = new Epoch(tick.Time.ToUniversalTime()),
                    BuyPrice = tick.Ask,
                    SellPrice = tick.Bid,
                    LastPrice = tick.Price
                });
            }

            if (typeof(T) == typeof(ICollection <CoinbaseProFill>))
            {
                var trades = obj as ICollection <CoinbaseProFill>;

                return((T2)(object)trades.Select(t => new TradeItem
                {
                    Exchange = exchange.Name,
                    SymbolCode = exchange.DecodeProductId(t.ProductId).Code,
                    Id = t.TradeId,
                    OrderId = t.OrderId,
                    Created = new Epoch(t.CreatedAt.ToUniversalTime()),
                    Side = exchange.GetOrderSide(t.Side),
                    Price = t.Price,
                    Volume = t.Size,
                    Fee = t.Fee
                }).ToList());
            }

            if (typeof(T) == typeof(ICollection <CoinbaseProMarketTrade>))
            {
                var trades = obj as ICollection <CoinbaseProMarketTrade>;

                var data = (Dictionary <string, object>)requestData;

                var symbolCode = (SymbolCodeEnum)data["SymbolCode"];
                var limit      = (int)data["Limit"];

                return((T2)(object)new TradeResult
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbolCode,
                    Filter = cbBefore.HasValue ? (cbBefore.Value + limit).ToString() : null,
                    Trades = trades.Select(t => new MarketTrade
                    {
                        Exchange = exchange.Name,
                        SymbolCode = symbolCode,
                        Epoch = new Epoch(t.Time),
                        Price = t.Price,
                        Volume = t.Size,
                        Side = exchange.GetOrderSide(t.Side),
                        SourceTradeId = t.TradeId.ToString()
                    }).ToList()
                });
            }

            throw new Exception("Invalid type provided - " + typeof(T2));
        }
Beispiel #27
0
 public Bitfinex(ICurrencyFactory currencyFactory, ISymbolFactory symbolFactory)
 {
     CurrencyFactory = currencyFactory;
     SymbolFactory   = symbolFactory;
 }
Beispiel #28
0
        public Client(Bitfinex ex, ISymbolFactory symbolFactory)
        {
            Exchange = ex;

            SymbolFactory = symbolFactory;
        }
Beispiel #29
0
        public static T2 ChangeType <T, T2>(this Kraken exchange, ICurrencyFactory currencyFactory, ISymbolFactory symbolFactory, NameValueCollection postData, T obj)
        {
            if (typeof(T) == typeof(KrakenCancelOrderResult))
            {
                var cancelOrder = obj as KrakenCancelOrderResult;

                return((T2)(object)new CancelOrder());
            }

            if (typeof(T) == typeof(KrakenOrderQuery))
            {
                var orders = obj as KrakenOrderQuery;

                return((T2)(object)orders.Select(kvp => new OrderItem
                {
                    SymbolCode = symbolFactory.Get(exchange.DecodeAssetPair(kvp.Value.Descr.Pair)[0], exchange.DecodeAssetPair(kvp.Value.Descr.Pair)[1]).Code,
                    Id = kvp.Key,
                    OrderEpoch = Epoch.FromSeconds((long)kvp.Value.OpenTm),
                    Side = exchange.GetOrderSide(kvp.Value.Descr.Type),
                    Type = exchange.GetOrderType(kvp.Value.Descr.OrderType),
                    State = exchange.GetOrderState(kvp.Value.Status),
                    Price = exchange.GetOrderType(kvp.Value.Descr.OrderType) == OrderTypeEnum.Limit ? kvp.Value.LimitPrice : kvp.Value.Price,
                    AvgPrice = kvp.Value.Price,
                    Fee = kvp.Value.Fee,
                    Volume = kvp.Value.Volume,
                    RemainingVolume = kvp.Value.Volume - kvp.Value.VolumeExec
                }));
            }

            if (typeof(T) == typeof(KrakenOpenOrders))
            {
                var orders = obj as KrakenOpenOrders;

                return((T2)(object)orders.Open.Where(o => o.Value.Descr.Pair == postData["pair"]).Select(kvp => new OrderItem
                {
                    SymbolCode = symbolFactory.Get(exchange.DecodeAssetPair(kvp.Value.Descr.Pair)[0], exchange.DecodeAssetPair(kvp.Value.Descr.Pair)[1]).Code,
                    Id = kvp.Key,
                    OrderEpoch = Epoch.FromSeconds((long)kvp.Value.OpenTm),
                    Side = exchange.GetOrderSide(kvp.Value.Descr.Type),
                    Type = exchange.GetOrderType(kvp.Value.Descr.OrderType),
                    State = exchange.GetOrderState(kvp.Value.Status),
                    Price = exchange.GetOrderType(kvp.Value.Descr.OrderType) == OrderTypeEnum.Limit ? kvp.Value.LimitPrice : kvp.Value.Price,
                    AvgPrice = kvp.Value.Price,
                    Fee = kvp.Value.Fee,
                    Volume = kvp.Value.Volume,
                    RemainingVolume = kvp.Value.Volume - kvp.Value.VolumeExec
                }).ToList());
            }

            if (typeof(T) == typeof(KrakenClosedOrders))
            {
                var orders = obj as KrakenClosedOrders;

                return((T2)(object)orders.Closed.Where(o => o.Value.Descr.Pair == postData["pair"]).Select(kvp => new OrderItem
                {
                    SymbolCode = symbolFactory.Get(exchange.DecodeAssetPair(kvp.Value.Descr.Pair)[0], exchange.DecodeAssetPair(kvp.Value.Descr.Pair)[1]).Code,
                    Id = kvp.Key,
                    OrderEpoch = Epoch.FromSeconds((long)kvp.Value.OpenTm),
                    Side = exchange.GetOrderSide(kvp.Value.Descr.Type),
                    Type = exchange.GetOrderType(kvp.Value.Descr.OrderType),
                    State = exchange.GetOrderState(kvp.Value.Status),
                    Price = exchange.GetOrderType(kvp.Value.Descr.OrderType) == OrderTypeEnum.Limit ? kvp.Value.LimitPrice : kvp.Value.Price,
                    AvgPrice = kvp.Value.Price,
                    Fee = kvp.Value.Fee,
                    Volume = kvp.Value.Volume,
                    RemainingVolume = kvp.Value.Volume - kvp.Value.VolumeExec
                }).ToList());
            }

            if (typeof(T) == typeof(KrakenAddOrderResult))
            {
                var order = obj as KrakenAddOrderResult;

                return((T2)(object)new CreateOrder
                {
                    Id = order.TxId.First(),
                    OrderEpoch = Epoch.Now,
                    SymbolCode = symbolFactory.Get(exchange.DecodeAssetPair(postData["pair"])[0], exchange.DecodeAssetPair(postData["pair"])[1]).Code,
                    Side = exchange.GetOrderSide(postData["type"]),
                    Type = exchange.GetOrderType(postData["ordertype"]),
                    Price = Convert.ToDecimal(postData["price"]),
                    Volume = Convert.ToDecimal(postData["volume"]),
                    State = OrderStateEnum.Pending
                });
            }

            if (typeof(T) == typeof(KrakenAccount))
            {
                var balance = obj as KrakenAccount;

                var assets = exchange.Assets;

                return((T2)(object)balance.Select(kvp => new AccountBalance
                {
                    CurrencyCode = exchange.GetStandardisedCurrencyCode(currencyFactory, assets[kvp.Key].AltName),
                    Balance = kvp.Value
                }).ToList());
            }

            if (typeof(T) == typeof(KrakenTradeHistory))
            {
                var assets = exchange.Assets;

                var assetPairs = exchange.AssetPairs;

                var trades = obj as KrakenTradeHistory;

                return((T2)(object)trades.Trades
                       .Where(kvp => postData["pair"] == $"{exchange.GetCurrencyCode(exchange.DecodeQuotePair(kvp.Value.Pair)[0])}{exchange.GetCurrencyCode(exchange.DecodeQuotePair(kvp.Value.Pair)[1])}")
                       .Select(kvp => new TradeItem
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbolFactory.Get(exchange.GetStandardisedCurrencyCode(currencyFactory, assets[assetPairs[kvp.Value.Pair].Base].AltName), exchange.GetStandardisedCurrencyCode(currencyFactory, assets[assetPairs[kvp.Value.Pair].Quote].AltName)).Code,
                    Id = kvp.Key,
                    OrderId = kvp.Value.OrderTxId,
                    Created = Epoch.FromSeconds(kvp.Value.Time),
                    Side = exchange.GetOrderSide(kvp.Value.Type),
                    Price = kvp.Value.Price,
                    Fee = kvp.Value.Fee,
                    Volume = kvp.Value.Volume
                }).ToList());
            }

            if (typeof(T) == typeof(KrakenTick))
            {
                var assets = exchange.Assets;

                var assetPairs = exchange.AssetPairs;

                var tick = (obj as KrakenTick).First();

                return((T2)(object)new MarketTick
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbolFactory.Get(exchange.GetStandardisedCurrencyCode(currencyFactory, assets[assetPairs[tick.Key].Base].AltName), exchange.GetStandardisedCurrencyCode(currencyFactory, assets[assetPairs[tick.Key].Quote].AltName)).Code,
                    Epoch = Epoch.Now,
                    BuyPrice = tick.Value.Ask.First(),
                    SellPrice = tick.Value.Bid.First(),
                    LastPrice = tick.Value.Last.First()
                });
            }

            if (typeof(T) == typeof(KrakenTicks))
            {
                var assets = exchange.Assets;

                var assetPairs = exchange.AssetPairs;

                var ticks = obj as KrakenTicks;

                return((T2)(object)ticks.Select(kvp => new MarketTick
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbolFactory.Get(exchange.GetStandardisedCurrencyCode(currencyFactory, assets[assetPairs[kvp.Key].Base].AltName), exchange.GetStandardisedCurrencyCode(currencyFactory, assets[assetPairs[kvp.Key].Quote].AltName)).Code,
                    Epoch = Epoch.Now,
                    BuyPrice = kvp.Value.Ask.First(),
                    SellPrice = kvp.Value.Bid.First(),
                    LastPrice = kvp.Value.Last.First()
                }).ToList());
            }

            if (typeof(T) == typeof(KrakenOrderBook))
            {
                var book = (obj as KrakenOrderBook).First();

                var pair = exchange.DecodeAssetPair(postData["pair"]);

                var symbol = symbolFactory.Get(pair[0], pair[1]);

                return((T2)(object)new OrderBook
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbol.Code,
                    Ask = book.Value.Asks.Select(a => new OrderBookItem
                    {
                        Price = a.ElementAt(0),
                        AvgPrice = a.ElementAt(0),
                        Volume = a.ElementAt(1),
                        OrderTime = Epoch.FromSeconds((long)a.ElementAt(2)).DateTime
                    }).ToList(),
                    Bid = book.Value.Bids.Select(a => new OrderBookItem
                    {
                        Price = a.ElementAt(0),
                        Volume = a.ElementAt(1),
                        OrderTime = Epoch.FromSeconds((long)a.ElementAt(2)).DateTime
                    }).ToList()
                });
            }

            if (typeof(T) == typeof(KrakenTradeVolume))
            {
                var tradeVol = (obj as KrakenTradeVolume);

                var takerFee = tradeVol.Fees.First().Value.Fee;

                return((T2)(object)new TradeFee
                {
                    CurrencyCode = CurrencyCodeEnum.USD,
                    Taker = takerFee / 100.0m,
                    Maker = (tradeVol.FeesMaker != null && tradeVol.FeesMaker.Count > 0 ? tradeVol.FeesMaker.First().Value.Fee : takerFee) / 100.0m
                });
            }

            if (typeof(T) == typeof(KrakenTrade <string, List <List <object> > >))
            {
                var tradeResult = (obj as KrakenTrade <string, List <List <object> > >);

                var pair = exchange.DecodeAssetPair(postData["pair"]);

                var symbol = symbolFactory.Get(pair[0], pair[1]);

                return((T2)(object)new TradeResult
                {
                    Exchange = exchange.Name,
                    SymbolCode = symbol.Code,
                    Filter = Convert.ToString(tradeResult.Last),
                    Trades = tradeResult.First().Value.Select(t => new MarketTrade
                    {
                        Exchange = exchange.Name,
                        SymbolCode = symbol.Code,
                        Epoch = Epoch.FromSeconds(Convert.ToDouble(t[2])),
                        Price = Convert.ToDecimal(t[0]),
                        Volume = Convert.ToDecimal(t[1]),
                        Side = Convert.ToString(t[3]) == "b" ? OrderSideEnum.Buy : OrderSideEnum.Sell
                    }).ToList()
                });
            }

            if (typeof(T) == typeof(T2))
            {
                return((T2)(object)obj);
            }

            throw new Exception("Invalid type provided - " + typeof(T2));
        }
Beispiel #30
0
 internal ArrayElementSymbolCollection(ISymbol arrayInstance, IArrayType arrayType, ISymbolFactory factory)
 {
     this._arrayInstance = arrayInstance;
     this._arrayType     = arrayType;
     this._symbolFactory = factory;
 }