public CryptoCoinSummary(CryptoExchangeBase exchange, CryptoCoin coin)
 {
     Symbol       = coin.Symbol;
     ExchangeName = exchange.Name;
     HighestBid   = coin.HighestBid;
     LowestAsk    = coin.LowestAsk;
 }
Beispiel #2
0
        private void saveButton_Click(object sender, EventArgs e)
        {
            CryptoCoin knownCoin = null;

            if (coinCombo.SelectedIndex >= 0)
            {
                knownCoin = filteredCoins[coinCombo.SelectedIndex];
            }

            if (knownCoin == null)
            {
                CryptoCoin newCoin = new CryptoCoin();
                newCoin.Name      = coinCombo.Text;
                newCoin.Algorithm = algoCombo.Text.ToAlgorithm();

                using (CoinEditForm coinEditForm = new CoinEditForm(newCoin))
                {
                    if (coinEditForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        SelectedCoin = newCoin;
                    }
                    else
                    {
                        DialogResult = System.Windows.Forms.DialogResult.Cancel;
                    }
                }
            }
            else
            {
                SelectedCoin = knownCoin;
            }
        }
Beispiel #3
0
        private EngineConfiguration CreateEngineConfiguration()
        {
            EngineConfiguration engineConfiguration;

            engineConfiguration = new EngineConfiguration();

            engineConfiguration.XgminerConfiguration.MinerBackend = MinerBackend.Cgminer;
            if (minerComboBox.SelectedIndex == 1)
            {
                engineConfiguration.XgminerConfiguration.MinerBackend = MinerBackend.Bfgminer;
            }

            CoinConfiguration coinConfiguration = new CoinConfiguration();

            CryptoCoin coin = coins.Single(c => c.Name.Equals(coinComboBox.Text));

            coinConfiguration.Coin    = coin;
            coinConfiguration.Enabled = true;

            MiningPool miningPool = new MiningPool();

            miningPool.Host     = hostEdit.Text;
            miningPool.Port     = Int32.Parse(portEdit.Text);
            miningPool.Username = usernameEdit.Text;
            miningPool.Password = passwordEdit.Text;

            coinConfiguration.Pools.Add(miningPool);

            engineConfiguration.CoinConfigurations.Add(coinConfiguration);
            return(engineConfiguration);
        }
Beispiel #4
0
        private void saveButton_Click(object sender, EventArgs e)
        {
            CryptoCoin knownCoin = null;

            if (coinCombo.SelectedIndex >= 0)
            {
                knownCoin = sortedCoins[coinCombo.SelectedIndex];
            }

            if (knownCoin == null)
            {
                CryptoCoin newCoin = new CryptoCoin();
                newCoin.Name      = coinCombo.Text;
                newCoin.Algorithm = Xgminer.Data.CoinAlgorithm.SHA256;

                CoinEditForm coinEditForm = new CoinEditForm(newCoin);
                if (coinEditForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    SelectedCoin = newCoin;
                }
                else
                {
                    DialogResult = System.Windows.Forms.DialogResult.Cancel;
                }
            }
            else
            {
                SelectedCoin = knownCoin;
            }
        }
Beispiel #5
0
        private void LoadSettings()
        {
            CryptoCoin coin = knownCoins.SingleOrDefault(c => c.Symbol.Equals(this.strategyConfiguration.MinimumThresholdSymbol));

            if (coin != null)
            {
                thresholdSymbolCombo.Text = coin.Name;
            }

            singleCoinRadio.Checked = strategyConfiguration.SwitchStrategy == StrategyConfiguration.CoinSwitchStrategy.SingleMost;
            multiCoinRadio.Checked  = strategyConfiguration.SwitchStrategy == StrategyConfiguration.CoinSwitchStrategy.AllMost;

            thresholdValueEdit.Text = strategyConfiguration.MinimumThresholdValue.ToString();

            if (multiCoinRadio.Checked)
            {
                exceptionEdit.Text = strategyConfiguration.MineSingleMostOverrideValue.ToString();
            }

            profitabilityKindCombo.SelectedIndex = (int)strategyConfiguration.ProfitabilityKind;
            baseCoinCombo.SelectedIndex          = (int)strategyConfiguration.BaseCoin;
            miningBasisCombo.SelectedIndex       = (int)strategyConfiguration.MiningBasis;

            intervalCombo.SelectedIndex = (int)applicationConfiguration.StrategyCheckInterval;
        }
Beispiel #6
0
 public CoinValueSummary(CryptoCoin coin)
 {
     Symbol     = coin.Symbol;
     HighestBid = coin.HighestBid;
     LowestAsk  = coin.LowestAsk;
     Time       = coin.Time;
 }
Beispiel #7
0
        private void AddCoinConfiguration(CryptoCoin cryptoCoin)
        {
            CoinConfiguration configuration = configurations.SingleOrDefault(c => c.Coin.Symbol.Equals(cryptoCoin.Symbol));

            if (configuration != null)
            {
                coinListBox.SelectedIndex = configurations.IndexOf(configuration);
            }
            else
            {
                configuration = new CoinConfiguration();

                configuration.Coin = knownCoins.SingleOrDefault(c => c.Symbol.Equals(cryptoCoin.Symbol, StringComparison.OrdinalIgnoreCase));

                //user may have manually entered a coin
                if (configuration.Coin == null)
                {
                    configuration.Coin           = new CryptoCoin();
                    configuration.Coin.Name      = cryptoCoin.Name;
                    configuration.Coin.Symbol    = cryptoCoin.Symbol;
                    configuration.Coin.Algorithm = cryptoCoin.Algorithm;
                }

                configuration.Pools.Add(new MiningPool());

                configurations.Add(configuration);

                coinListBox.Items.Add(configuration.Coin.Name);
                coinListBox.SelectedIndex = configurations.IndexOf(configuration);
            }

            hostEdit.Focus();
        }
        protected override void Update(dynamic data, string symbol, string exchangeName = "")
        {
            CryptoCoin old = null;
            var        id  = symbol.ToEnum(CryptoCoinId.NULL);

            if (ExchangeData.ContainsKey(id))
            {
                old = ExchangeData[id].Clone( );
            }
            else
            {
                ExchangeData[id] = new CryptoCoin(symbol);
            }

            DeserializeData(data, id);

            ApplyFees(id);

            LastUpdate = DateTime.UtcNow;
            OnNext(ExchangeData[id].Clone( ));

            if (ExchangeData[id] != old)
            {
                OnChanged(ExchangeData[id]);
            }
        }
Beispiel #9
0
        private void EditCurrentCoin()
        {
            if (coinListBox.SelectedIndex == -1)
            {
                return;
            }

            Engine.Data.Configuration.Coin currentConfiguration = configurations[coinListBox.SelectedIndex];

            CryptoCoin workingCoin = new CryptoCoin();

            ObjectCopier.CopyObject(currentConfiguration.CryptoCoin, workingCoin);

            using (CoinEditForm coinEditForm = new CoinEditForm(workingCoin))
            {
                DialogResult dialogResult = coinEditForm.ShowDialog();

                if (dialogResult == System.Windows.Forms.DialogResult.OK)
                {
                    if (configurations.SingleOrDefault(c => c.CryptoCoin.Symbol.Equals(workingCoin.Symbol, StringComparison.OrdinalIgnoreCase)) == null)
                    {
                        ObjectCopier.CopyObject(workingCoin, currentConfiguration.CryptoCoin);
                        coinListBox.Items[coinListBox.SelectedIndex] = workingCoin.Name;
                    }
                    else
                    {
                        //don't create a dupe
                        MessageBox.Show(String.Format("A configuration for {0} already exists.", workingCoin.Symbol),
                                        "Duplicate Configuration", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
        }
Beispiel #10
0
        /// <summary>
        /// Updates the coin as sold. Populates the sold coin's SOLD & Original properties, such as SoldCurrency, SoldPrice, and TotalSoldPriceUSD,
        /// based on the original coin. Basically, update soldCoin to have both bought & sold values.
        /// </summary>
        /// <param name="originalCoin">The original coin that was bought</param>
        /// <param name="soldCoin">The sold version of that original coin</param>
        /// <param name="updateOnlySoldPrice">
        ///     If we don't know the bought price, set bought details as 0, and only update the sold price. The coin could have been transferred over and sold here;
        ///     which could be the reason we don't know bought price.
        /// </param>
        /// <returns>Sold version of the coin with original bought/paid price</returns>
        private static CryptoCoin UpdateSoldCoinsFieldFromOriginal(CryptoCoin originalCoin, CryptoCoin soldCoin, bool updateOnlySoldPrice = false)
        {
            // If soldCoin's sold prices are not already populated, that means their sold values resides in the bought properties.
            // So, move bought properties over to the sold property.
            if (soldCoin.SoldCoinCurrency == Types.CoinCurrency.Unknown)
            {
                soldCoin.SoldCoinCurrency = soldCoin.CoinCurrency;
            }
            if (soldCoin.SoldPricePerUnit.GetValueOrDefault() == 0)
            {
                soldCoin.SoldPricePerUnit = soldCoin.PricePerUnit;
            }
            if (soldCoin.TotalSoldPricePaidUSD.GetValueOrDefault() == 0)
            {
                soldCoin.TotalSoldPricePaidUSD = soldCoin.TotalPricePaidUSD;
            }

            if (!updateOnlySoldPrice)
            {
                // originalCoin still holds the original BOUGHT price for this sold coin.
                soldCoin.CoinCurrency      = originalCoin.CoinCurrency;
                soldCoin.PricePerUnit      = originalCoin.PricePerUnit;
                soldCoin.TotalPricePaidUSD = originalCoin.TotalPricePaidUSD;
            }
            else
            {
                // Unknown bought price, but it's a sold coin so we know the sold price. (Could be tranferred over).
                soldCoin.PricePerUnit      = 0;
                soldCoin.TotalPricePaidUSD = 0;
            }

            return(soldCoin);
        }
Beispiel #11
0
        private static CoinDisplay ToCoinDisplay(this CryptoCoin item, Types.CoinCurrency currency)
        {
            // Why manually and not auto-mapper? Tons of data, and most used method. So Mapster can get slow.
            // Also, You cannot cast a child object into a parent object. Need to create a new instance of it or use reflection.

            return(new CoinDisplay
            {
                CoinId = item.CoinId,
                Symbol = item.Symbol,
                Shares = item.Shares,
                OrderDate = item.OrderDate,
                PricePerUnit = item.PricePerUnit,
                CoinCurrency = item.CoinCurrency,
                TotalPricePaidUSD = item.TotalPricePaidUSD,
                OrderType = item.OrderType,
                Notes = item.Notes,
                Exchange = item.Exchange,
                SoldCoinCurrency = item.SoldCoinCurrency,
                SoldPricePerUnit = item.SoldPricePerUnit,
                TotalSoldPricePaidUSD = item.TotalSoldPricePaidUSD,
                PortfolioId = item.PortfolioId,
                MarketCoin = item.MarketCoin,
                GeneratedPricePerUnitETH = item.GeneratedPricePerUnitETH,
                CurrentUSDPriceOfBTC = item.CurrentUSDPriceOfBTC,
                CurrentUSDPriceOfETH = item.CurrentUSDPriceOfETH,
                OrderedDateUSDPriceOfBTC = item.OrderedDateUSDPriceOfBTC,
                OrderedDateUSDPriceOfETH = item.OrderedDateUSDPriceOfETH,
                DisplayCurrency = currency,
                IsCurrentlyCombined = item.IsCurrentlyCombined
            });
        }
Beispiel #12
0
        private void saveButton_Click(object sender, EventArgs e)
        {
            string     coinName  = coinCombo.Text;
            CryptoCoin knownCoin = sortedCoins.SingleOrDefault(c => c.Name.Equals(coinName, StringComparison.OrdinalIgnoreCase));

            if (knownCoin == null)
            {
                CryptoCoin newCoin = new CryptoCoin();
                newCoin.Name      = coinName;
                newCoin.Algorithm = Xgminer.CoinAlgorithm.SHA256;

                CoinEditForm coinEditForm = new CoinEditForm(newCoin);
                if (coinEditForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    SelectedCoin = newCoin;
                }
                else
                {
                    DialogResult = System.Windows.Forms.DialogResult.Cancel;
                }
            }
            else
            {
                SelectedCoin = knownCoin;
            }
        }
        public override async void OnNext(CryptoCoin coin)
        {
            if (!Symbols.Contains(coin.Symbol))
            {
                return;
            }

            if (!LastSignificantPrice.ContainsKey(coin.Symbol))
            {
                LastSignificantPrice[coin.Symbol] = coin;
            }

            var change     = PriceChange.Difference(coin, LastSignificantPrice[coin.Symbol]);
            var percentage = Math.Abs(change.Percentage);

            if (percentage >= Threshold)
            {
                var previous = LastSignificantPrice[coin.Symbol].Clone( );
                LastSignificantPrice[coin.Symbol] = coin.Clone( );

                await OnTriggerAsync(previous.Clone( ), coin.Clone( )).ConfigureAwait(false);

                Trigger?.Invoke(this, previous.Clone( ), coin.Clone( ));
            }
        }
Beispiel #14
0
        protected override void Update(dynamic data,
                                       string symbol)
        {
            symbol = CleanAndExtractSymbol(symbol);

            if (ExchangeData.TryGetValue(symbol, out var old))
            {
                old = old.Clone( );
            }
            else
            {
                ExchangeData[symbol] = new CryptoCoin(symbol);
            }

            DeserializeData(data, symbol);
            Markets.AddOrUpdate(ExchangeData[symbol]);

            LastUpdate = DateTime.UtcNow;
            OnNext(ExchangeData[symbol]);

            if (!ExchangeData[symbol].HasSameValues(old))
            {
                OnChanged(ExchangeData[symbol]);
            }
        }
Beispiel #15
0
        private void SaveSettings()
        {
            if (string.IsNullOrEmpty(thresholdSymbolCombo.Text))
            {
                this.strategyConfiguration.MinimumThresholdSymbol = string.Empty;
            }
            else
            {
                CryptoCoin coin = knownCoins.SingleOrDefault(c => c.Name.Equals(thresholdSymbolCombo.Text));
                if (coin != null)
                {
                    this.strategyConfiguration.MinimumThresholdSymbol = coin.Symbol;
                }
            }

            if (singleCoinRadio.Checked)
            {
                strategyConfiguration.SwitchStrategy = StrategyConfiguration.CoinSwitchStrategy.SingleMost;
            }
            else
            {
                strategyConfiguration.SwitchStrategy = StrategyConfiguration.CoinSwitchStrategy.AllMost;
            }

            if (string.IsNullOrEmpty(thresholdValueEdit.Text))
            {
                this.strategyConfiguration.MinimumThresholdValue = null;
            }
            else
            {
                double percentage;
                if (double.TryParse(thresholdValueEdit.Text, out percentage))
                {
                    strategyConfiguration.MinimumThresholdValue = percentage;
                }
            }

            if (multiCoinRadio.Checked)
            {
                if (string.IsNullOrEmpty(exceptionEdit.Text))
                {
                    this.strategyConfiguration.MineSingleMostOverrideValue = null;
                }
                else
                {
                    double percentage;
                    if (double.TryParse(exceptionEdit.Text, out percentage))
                    {
                        strategyConfiguration.MineSingleMostOverrideValue = percentage;
                    }
                }
            }

            strategyConfiguration.ProfitabilityKind = (StrategyConfiguration.CoinProfitabilityKind)profitabilityKindCombo.SelectedIndex;
            strategyConfiguration.BaseCoin          = (Coinchoose.Api.BaseCoin)baseCoinCombo.SelectedIndex;
            strategyConfiguration.MiningBasis       = (StrategyConfiguration.CoinMiningBasis)miningBasisCombo.SelectedIndex;

            applicationConfiguration.StrategyCheckInterval = (ApplicationConfiguration.CoinStrategyCheckInterval)intervalCombo.SelectedIndex;
        }
Beispiel #16
0
        private void LoadSettings()
        {
            CryptoCoin coin = knownCoins.SingleOrDefault(c => c.Symbol.Equals(this.strategyConfiguration.MinimumThresholdSymbol));

            if (coin != null)
            {
                thresholdSymbolCombo.Text = coin.Name;
            }

            singleCoinRadio.Checked = strategyConfiguration.SwitchStrategy == StrategyConfiguration.CoinSwitchStrategy.SingleMost;
            multiCoinRadio.Checked  = strategyConfiguration.SwitchStrategy == StrategyConfiguration.CoinSwitchStrategy.AllMost;

            thresholdValueEdit.Text = strategyConfiguration.MinimumThresholdValue.ToString();

            if (multiCoinRadio.Checked)
            {
                exceptionEdit.Text = strategyConfiguration.MineSingleMostOverrideValue.ToString();
            }

            profitabilityKindCombo.SelectedIndex = (int)strategyConfiguration.ProfitabilityKind;

            if (applicationConfiguration.UseCoinWarzApi)
            {
                baseCoinCombo.SelectedIndex = 0;
                baseCoinCombo.Enabled       = false;
            }
            else
            {
                baseCoinCombo.SelectedIndex = (int)strategyConfiguration.BaseCoin;
            }

            miningBasisCombo.SelectedIndex = (int)strategyConfiguration.MiningBasis;

            intervalCombo.SelectedIndex = (int)applicationConfiguration.StrategyCheckInterval;

            if (applicationConfiguration.SuggestCoinsToMine)
            {
                if (applicationConfiguration.SuggestionsAlgorithm == ApplicationConfiguration.CoinSuggestionsAlgorithm.SHA256)
                {
                    suggestionsCombo.SelectedIndex = 1;
                }
                else if (applicationConfiguration.SuggestionsAlgorithm == ApplicationConfiguration.CoinSuggestionsAlgorithm.Scrypt)
                {
                    suggestionsCombo.SelectedIndex = 2;
                }
                else if (applicationConfiguration.SuggestionsAlgorithm == (ApplicationConfiguration.CoinSuggestionsAlgorithm.SHA256 | ApplicationConfiguration.CoinSuggestionsAlgorithm.Scrypt))
                {
                    suggestionsCombo.SelectedIndex = 3;
                }
                else
                {
                    suggestionsCombo.SelectedIndex = 0;
                }
            }
            else
            {
                suggestionsCombo.SelectedIndex = 0;
            }
        }
Beispiel #17
0
 private async Task OnChangedAsync(ICryptoExchange exchange,
                                   CryptoCoin coin)
 {
     foreach (var service in Services)
     {
         await service.OnChangedAsync(exchange, coin).ConfigureAwait(false);
     }
     Changed?.Invoke(exchange, coin);
 }
Beispiel #18
0
        private void SaveSettings()
        {
            if (string.IsNullOrEmpty(minCoinCombo.Text))
            {
                this.strategyConfiguration.MinimumProfitabilitySymbol = string.Empty;
            }
            else
            {
                CryptoCoin coin = knownCoins.SingleOrDefault(c => c.Name.Equals(minCoinCombo.Text));
                if (coin != null)
                {
                    this.strategyConfiguration.MinimumProfitabilitySymbol = coin.Symbol;
                }
            }

            if (singleCoinRadio.Checked)
            {
                strategyConfiguration.SwitchStrategy = StrategyConfiguration.CoinSwitchStrategy.SingleMostProfitable;
            }
            else
            {
                strategyConfiguration.SwitchStrategy = StrategyConfiguration.CoinSwitchStrategy.AllMostProfitable;
            }

            if (string.IsNullOrEmpty(minPercentageEdit.Text))
            {
                this.strategyConfiguration.MinimumProfitabilityPercentage = null;
            }
            else
            {
                double percentage;
                if (double.TryParse(minPercentageEdit.Text, out percentage))
                {
                    strategyConfiguration.MinimumProfitabilityPercentage = percentage;
                }
            }

            if (multiCoinRadio.Checked)
            {
                if (string.IsNullOrEmpty(exceptionEdit.Text))
                {
                    this.strategyConfiguration.MineMostProfitableOverridePercentage = null;
                }
                else
                {
                    double percentage;
                    if (double.TryParse(exceptionEdit.Text, out percentage))
                    {
                        strategyConfiguration.MineMostProfitableOverridePercentage = percentage;
                    }
                }
            }

            strategyConfiguration.ProfitabilityBasis = (StrategyConfiguration.CoinProfitabilityBasis)proftabilityBasisCombo.SelectedIndex;

            applicationConfiguration.StrategyCheckInterval = (ApplicationConfiguration.CoinStrategyCheckInterval)intervalCombo.SelectedIndex;
        }
        public override Task OnChangedAsync(ICryptoExchange exchange,
                                            CryptoCoin coin)
        {
            lock ( consoleLock )
            {
                Console.Write($"{exchange.Name,-12}", Color.DodgerBlue);
                Console.WriteLineStyled($" | {coin}", StyleSheet);
            }

            return(Task.CompletedTask);
        }
Beispiel #20
0
        public static async Task <ResultsItem> UpdateUserCoinAsync(CryptoCoin coin, PegaUser user)
        {
            var validateRequest = IsValidDBRequest(user, coin.PortfolioId, validatePortfolio: true);

            if (!validateRequest.IsSuccess)
            {
                return(validateRequest);
            }

            return(await CryptoRepository.UpdateUserCoinAsync(coin));
        }
Beispiel #21
0
 public static PriceChange Difference(CryptoCoin newCoin,
                                      CryptoCoin oldCoin)
 => new PriceChange
 {
     Value      = newCoin.Rate - oldCoin.Rate,
     Percentage = (newCoin.Rate - oldCoin.Rate) /
                  (newCoin.Rate + oldCoin.Rate) *
                  2m,
     TimeDiff     = newCoin.Time - oldCoin.Time,
     AbsoluteTime = newCoin.Time
 };
Beispiel #22
0
        private Engine.Data.Configuration.Coin AddCoinConfiguration(CryptoCoin cryptoCoin)
        {
            //don't allow two configurations for the same coin symbol
            Engine.Data.Configuration.Coin configuration = configurations.SingleOrDefault(c => c.CryptoCoin.Symbol.Equals(cryptoCoin.Symbol, StringComparison.OrdinalIgnoreCase));
            if (configuration == null)
                //don't allow two configurations for the same coin name
                configuration = configurations.SingleOrDefault(c => c.CryptoCoin.Name.Equals(cryptoCoin.Name, StringComparison.OrdinalIgnoreCase));

            if (configuration != null)
            {
                coinListBox.SelectedIndex = configurations.IndexOf(configuration);
            }
            else
            {
                configuration = new Engine.Data.Configuration.Coin();

                configuration.CryptoCoin = knownCoins.SingleOrDefault(c => c.Symbol.Equals(cryptoCoin.Symbol, StringComparison.OrdinalIgnoreCase));

                //user may have manually entered a coin
                if (configuration.CryptoCoin == null)
                {
                    configuration.CryptoCoin = new CryptoCoin();
                    configuration.CryptoCoin.Name = cryptoCoin.Name;
                    configuration.CryptoCoin.Symbol = cryptoCoin.Symbol;
                    configuration.CryptoCoin.Algorithm = cryptoCoin.Algorithm;
                }

                //at this point, configuration.CryptoCoin.Algorithm is the CoinAlgorithm.FullName
                //that is how data from Coin API is stored
                //but coin configurations are based on CoinAlgorithm.Name
                string algorithmFullName = configuration.CryptoCoin.Algorithm;
                CoinAlgorithm algorithm = MinerFactory.Instance.Algorithms.SingleOrDefault(a => a.FullName.Equals(algorithmFullName, StringComparison.OrdinalIgnoreCase));
                configuration.CryptoCoin.Algorithm = algorithm.Name;

                MiningPool miningPool = new MiningPool()
                {
                    Host = Data.Configuration.PoolDefaults.HostPrefix,
                    Port = Data.Configuration.PoolDefaults.Port
                };
                configuration.Pools.Add(miningPool);

                configurations.Add(configuration);

                coinListBox.Items.Add(configuration.CryptoCoin.Name);
                coinListBox.SelectedIndex = configurations.IndexOf(configuration);
            }

            hostEdit.Focus();
            hostEdit.SelectionStart = hostEdit.SelectionLength;

            return configuration;
        }
Beispiel #23
0
        public async Task <JsonResult> DeleteCoin(int coinId, int portfolioId)
        {
            CryptoCoin fetchedCoin = await CryptoLogic.GetSingleCoinByUser(coinId, CurrentUser);

            if (fetchedCoin?.PortfolioId != portfolioId)
            {
                return(Json(ResultsItem.Error(Lang.PortfolioNotFound)));
            }
            return(Json(await CryptoLogic.DeleteUserCoinsAsync(new List <CryptoCoin> {
                new CryptoCoin {
                    CoinId = coinId, PortfolioId = portfolioId
                }
            }, CurrentUser)));
        }
Beispiel #24
0
        public void MarkCryptoCoinAsFavorite(User user, CryptoCoin cryptoCoin)
        {
            var isCoinAlreadyMarked = user.FavoriteCoins.Any(c => c.Name.Equals(cryptoCoin.Name));

            if (!isCoinAlreadyMarked)
            {
                using (_uow)
                {
                    user.FavoriteCoins.Add(cryptoCoin);
                    _uow.UserRepository.SaveOrAdd(user);

                    _uow.Commit();
                }
            }
        }
Beispiel #25
0
            public void Process(CryptoCoin coin)
            {
                if (!LastSignificantPrice.ContainsKey(coin.Symbol))
                {
                    LastSignificantPrice[coin.Symbol] = coin.Clone( );
                }

                var change     = coin - LastSignificantPrice[coin.Symbol];
                var percentage = Math.Abs(change.Percentage);

                if (percentage >= Threshold)
                {
                    Changed?.BeginInvoke(Exchange, LastSignificantPrice[coin.Symbol], coin, null, null);
                    LastSignificantPrice[coin.Symbol] = coin.Clone( );
                }
            }
Beispiel #26
0
        public decimal GetCryptoCoinAvarageValue(CryptoCoin cryptoCoin, string currency)
        {
            var dicCoinAveragePrice = _cryptoCoinGateway.GetCoinAveragePrice(cryptoCoin);

            if (dicCoinAveragePrice.Count == 0)
            {
                return(0);
            }

            if (!dicCoinAveragePrice.ContainsKey(currency))
            {
                return(0);
            }

            return(dicCoinAveragePrice[currency]);
        }
Beispiel #27
0
 /// <summary>
 /// Gets the price per unit of the coin based on currency. For example, Coin-USD: $500, Coin-BTC: .1
 /// </summary>
 public static decimal GetPricePerUnitOfCoin(CryptoCoin coin, Types.CoinCurrency currency)
 {
     if (currency == Types.CoinCurrency.BTC)
     {
         return(coin.MarketCoin.CurrentSymbolPriceBTC);
     }
     if (currency == Types.CoinCurrency.USD)
     {
         return(coin.MarketCoin.CurrentSymbolPriceUSD);
     }
     if (currency == Types.CoinCurrency.ETH)
     {
         return(coin.CurrentSymbolPriceETH);
     }
     return(0);
 }
Beispiel #28
0
        public async Task <decimal> GetCurrentCoinPrice(string symbol)
        {
            Types.CoinCurrency predictedCurrency = CryptoLogic.GenerateCoinCurrencyFromSymbol(symbol);
            if (predictedCurrency == Types.CoinCurrency.Unknown)
            {
                return(0);
            }

            CryptoCoin coin = (await UpdateCoinsCurrentPrice(new List <CryptoCoin> {
                new CryptoCoin {
                    Symbol = symbol.ToUpperInvariant()
                }
            }, false)).First();

            return(CryptoLogic.GetPricePerUnitOfCoin(coin, predictedCurrency));
        }
        private async Task SendSubscriptionReply(long id, CryptoExchangeBase ex, CryptoCoin oldValue, CryptoCoin newValue)
        {
            var change  = newValue - oldValue;
            var builder = new StringBuilder( );

            builder
            .AppendLine($"{ex.Name,-14} {newValue.Symbol}")
            .AppendLine($"Current Price: {ex[newValue.Symbol].Average:C}")
            .AppendLine($"Change:        {change.Value.ToCurrency ( )}")
            .AppendLine($"Change %:      {change.Percentage:P}")
            .AppendLine($"in {change.TimeDiff:dd\\:hh\\:mm\\:ss}");

            SaveSubscriptions( );

            await bot.SendTextMessageAsync(id, $"```\n{builder}\n```", ParseMode.Markdown);
        }
Beispiel #30
0
        private Engine.Data.Configuration.Coin AddCoinConfiguration(CryptoCoin cryptoCoin)
        {
            //don't allow two configurations for the same coin symbol
            Engine.Data.Configuration.Coin configuration = configurations.SingleOrDefault(c => c.CryptoCoin.Symbol.Equals(cryptoCoin.Symbol, StringComparison.OrdinalIgnoreCase));
            if (configuration == null)
            {
                //don't allow two configurations for the same coin name
                configuration = configurations.SingleOrDefault(c => c.CryptoCoin.Name.Equals(cryptoCoin.Name, StringComparison.OrdinalIgnoreCase));
            }

            if (configuration != null)
            {
                coinListBox.SelectedIndex = configurations.IndexOf(configuration);
            }
            else
            {
                configuration = new Engine.Data.Configuration.Coin();

                configuration.CryptoCoin = knownCoins.SingleOrDefault(c => c.Symbol.Equals(cryptoCoin.Symbol, StringComparison.OrdinalIgnoreCase));

                //user may have manually entered a coin
                if (configuration.CryptoCoin == null)
                {
                    configuration.CryptoCoin           = new CryptoCoin();
                    configuration.CryptoCoin.Name      = cryptoCoin.Name;
                    configuration.CryptoCoin.Symbol    = cryptoCoin.Symbol;
                    configuration.CryptoCoin.Algorithm = cryptoCoin.Algorithm;
                }

                MiningPool miningPool = new MiningPool()
                {
                    Host = "stratum+tcp://",
                    Port = 3333
                };
                configuration.Pools.Add(miningPool);

                configurations.Add(configuration);

                coinListBox.Items.Add(configuration.CryptoCoin.Name);
                coinListBox.SelectedIndex = configurations.IndexOf(configuration);
            }

            hostEdit.Focus();
            hostEdit.SelectionStart = hostEdit.SelectionLength;

            return(configuration);
        }
Beispiel #31
0
        private Engine.Data.Configuration.Engine CreateEngineConfiguration()
        {
            Engine.Data.Configuration.Engine engineConfiguration;
            engineConfiguration = new Engine.Data.Configuration.Engine();

            Engine.Data.Configuration.Coin coinConfiguration = new Engine.Data.Configuration.Coin();

            CryptoCoin coin = null;

            //no Internet connection - only BTC and LTC were available
            if (coins.Count == 0)
            {
                coin      = new CryptoCoin();
                coin.Name = coinComboBox.Text;

                if (coin.Name.Equals(KnownCoins.LitecoinName, StringComparison.OrdinalIgnoreCase))
                {
                    coin.Algorithm = CoinAlgorithm.Scrypt;
                    coin.Symbol    = KnownCoins.LitecoinSymbol;
                }
                else
                {
                    coin.Algorithm = CoinAlgorithm.SHA256;
                    coin.Symbol    = KnownCoins.BitcoinSymbol;
                }
            }
            else
            {
                coin = coins.Single(c => c.Name.Equals(coinComboBox.Text));
            }

            coinConfiguration.CryptoCoin = coin;
            coinConfiguration.Enabled    = true;

            MiningPool miningPool = new MiningPool();

            miningPool.Host     = hostEdit.Text;
            miningPool.Port     = Int32.Parse(portEdit.Text);
            miningPool.Username = usernameEdit.Text;
            miningPool.Password = passwordEdit.Text;

            coinConfiguration.Pools.Add(miningPool);

            engineConfiguration.CoinConfigurations.Add(coinConfiguration);
            return(engineConfiguration);
        }
Beispiel #32
0
        private void LoadKnownCoinsFromCoinStats()
        {
            foreach (CoinInformation item in coinApiInformation)
            {
                //find existing known coin or create a knew one
                CryptoCoin knownCoin = knownCoins.SingleOrDefault(c => c.Symbol.Equals(item.Symbol));
                if (knownCoin == null)
                {
                    knownCoin = new CryptoCoin();
                    this.knownCoins.Add(knownCoin);
                }

                knownCoin.Symbol = item.Symbol;
                knownCoin.Name = item.Name;
                knownCoin.Algorithm = item.Algorithm.ToAlgorithm();
            }
            SaveKnownCoinsToFile();
        }
Beispiel #33
0
        private void EditCurrentCoin()
        {
            if (coinListBox.SelectedIndex == -1)
                return;

            Engine.Data.Configuration.Coin currentConfiguration = configurations[coinListBox.SelectedIndex];

            CryptoCoin workingCoin = new CryptoCoin();
            ObjectCopier.CopyObject(currentConfiguration.CryptoCoin, workingCoin);

            using (CoinEditForm coinEditForm = new CoinEditForm(workingCoin))
            {
                DialogResult dialogResult = coinEditForm.ShowDialog();

                if (dialogResult == System.Windows.Forms.DialogResult.OK)
                {
                    MultiMiner.Engine.Data.Configuration.Coin existingConfiguration =
                        configurations.SingleOrDefault(c => (c != currentConfiguration)
                            && c.CryptoCoin.Symbol.Equals(workingCoin.Symbol, StringComparison.OrdinalIgnoreCase));

                    if (existingConfiguration == null)
                    {
                        ObjectCopier.CopyObject(workingCoin, currentConfiguration.CryptoCoin);
                        coinListBox.Items[coinListBox.SelectedIndex] = workingCoin.Name;
                    }
                    else
                    {
                        //don't create a dupe
                        MessageBox.Show(String.Format("A configuration for {0} already exists.", workingCoin.Symbol),
                            "Duplicate Configuration", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
        }
Beispiel #34
0
 public CoinEditForm(CryptoCoin cryptoCoin)
 {
     InitializeComponent();
     this.cryptoCoin = cryptoCoin;
 }
        private void saveButton_Click(object sender, EventArgs e)
        {
            CryptoCoin knownCoin = null;
            if (coinCombo.SelectedIndex >= 0)
                knownCoin = filteredCoins[coinCombo.SelectedIndex];

            if (knownCoin == null)
            {
                CryptoCoin newCoin = new CryptoCoin();
                newCoin.Name = coinCombo.Text;
                newCoin.Algorithm = GetSelectedAlgorithm().Name;

                using (CoinEditForm coinEditForm = new CoinEditForm(newCoin))
                {
                    if (coinEditForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                        SelectedCoin = newCoin;
                    else
                        DialogResult = System.Windows.Forms.DialogResult.Cancel;
                }
            }
            else
            {
                SelectedCoin = knownCoin;
            }
        }
Beispiel #36
0
        private Engine.Data.Configuration.Engine CreateEngineConfiguration()
        {
            Engine.Data.Configuration.Engine engineConfiguration;
            engineConfiguration = new Engine.Data.Configuration.Engine();

            Engine.Data.Configuration.Coin coinConfiguration = new Engine.Data.Configuration.Coin();

            CryptoCoin coin = null;

            //no Internet connection - only BTC and LTC were available
            if (coins.Count == 0)
            {
                coin = new CryptoCoin();
                coin.Name = coinComboBox.Text;

                if (coin.Name.Equals(KnownCoins.LitecoinName, StringComparison.OrdinalIgnoreCase))
                {
                    coin.Algorithm = CoinAlgorithm.Scrypt;
                    coin.Symbol = KnownCoins.LitecoinSymbol;
                }
                else
                {
                    coin.Algorithm = CoinAlgorithm.SHA256;
                    coin.Symbol = KnownCoins.BitcoinSymbol;
                }
            }
            else
            {
                coin = coins.Single(c => c.Name.Equals(coinComboBox.Text));
            }

            coinConfiguration.CryptoCoin = coin;
            coinConfiguration.Enabled = true;

            MiningPool miningPool = new MiningPool();

            miningPool.Host = hostEdit.Text;
            miningPool.Port = Int32.Parse(portEdit.Text);
            miningPool.Username = usernameEdit.Text;
            miningPool.Password = passwordEdit.Text;

            coinConfiguration.Pools.Add(miningPool);

            engineConfiguration.CoinConfigurations.Add(coinConfiguration);
            return engineConfiguration;
        }
Beispiel #37
0
        private void LoadKnownCoinsFromCoinStats()
        {
            foreach (CoinInformation item in coinApiInformation)
            {
                //find existing known coin or create a knew one
                CryptoCoin knownCoin = knownCoins.SingleOrDefault(c => c.Symbol.Equals(item.Symbol));
                if (knownCoin == null)
                {
                    knownCoin = new CryptoCoin();
                    this.knownCoins.Add(knownCoin);
                }

                knownCoin.Symbol = item.Symbol;
                knownCoin.Name = item.Name;

                //needs to be a case insensitive check to work with both CoinChoose and CoinWarz
                if (item.Algorithm.ToLower().Contains(AlgorithmNames.Scrypt.ToLower()))
                    knownCoin.Algorithm = CoinAlgorithm.Scrypt;
                else
                    knownCoin.Algorithm = CoinAlgorithm.SHA256;

            }
            SaveKnownCoinsToFile();
        }