Exemplo n.º 1
0
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var result = new SequencedRuleResult();

            if (solbot.Actions.StopLossReached &&
                solbot.Actions.BoughtPrice == 0 &&
                solbot.Actions.StopLossCurrentCycle < solbot.Strategy.AvailableStrategy.StopLossPauseCycles)
            {
                solbot.Actions.StopLossCurrentCycle++;

                result.Success = false;
                result.Message = LogGenerator.SequenceError(SequenceName, $"{solbot.Actions.StopLossCurrentCycle}/{solbot.Strategy.AvailableStrategy.StopLossPauseCycles}");
            }
            else if (!solbot.Actions.StopLossReached &&
                     solbot.Actions.BoughtPrice > 0)
            {
                result.Success = true;
                result.Message = LogGenerator.SequenceSuccess(SequenceName, $"{solbot.Actions.StopLossCurrentCycle}");
            }
            else
            {
                solbot.Actions.StopLossCurrentCycle = 0;
                solbot.Actions.BoughtPrice          = 0;
                solbot.Actions.StopLossReached      = false;

                result.Success = true;
                result.Message = LogGenerator.SequenceSuccess(SequenceName, $"{solbot.Actions.StopLossCurrentCycle}");
            }
            return(result);
        }
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var result = new SequencedRuleResult();

            try
            {
                var count = _storageService.GetValues().Count;

                var storedPriceAverage = AverageContext.Average(
                    solbot.Strategy.AvailableStrategy.AverageType,
                    _storageService.GetValues(),
                    solbot.Communication.Symbol.QuoteAssetPrecision,
                    solbot.Strategy.AvailableStrategy.Average);

                solbot.Communication.Average = new PriceMessage
                {
                    Current = storedPriceAverage,
                    Count   = count < solbot.Strategy.AvailableStrategy.Average
                    ? count
                    : solbot.Strategy.AvailableStrategy.Average
                };

                result.Success = true;
                result.Message = LogGenerator.SequenceSuccess(SequenceName, $"{storedPriceAverage}");
            }
            catch (Exception e)
            {
                result.Success = false;
                result.Message = LogGenerator.SequenceException(SequenceName, e);
            }
            return(result);
        }
Exemplo n.º 3
0
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var result = new SequencedRuleResult();

            try
            {
                var currentPrice = _tickerPriceService.GetPriceValue(solbot.Strategy.AvailableStrategy);

                if (currentPrice.Success)
                {
                    solbot.Communication.Price = new PriceMessage
                    {
                        Current = currentPrice.Result
                    };
                    result.Success = true;
                    result.Message = LogGenerator.SequenceSuccess(SequenceName, $"{currentPrice.Result}");
                }
                else
                {
                    result.Success = false;
                    result.Message = LogGenerator.SequenceError(SequenceName, currentPrice.Message);
                }
            }
            catch (Exception e)
            {
                result.Success = false;
                result.Message = LogGenerator.SequenceException(SequenceName, e);
            }
            return(result);
        }
Exemplo n.º 4
0
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var result = new SequencedRuleResult();

            try
            {
                var exchangeInfo = _binanceClient.Spot.System.GetExchangeInfo();

                if (exchangeInfo.Success)
                {
                    var symbol = exchangeInfo
                                 .Data
                                 .Symbols
                                 .FirstOrDefault(e => e.Name == solbot.Strategy.AvailableStrategy.Symbol);

                    if (!(symbol is null) && symbol.Status == SymbolStatus.Trading)
                    {
                        solbot.Communication = new Communication
                        {
                            Symbol = new SymbolMessage
                            {
                                BaseAsset           = symbol.BaseAsset,
                                QuoteAsset          = symbol.QuoteAsset,
                                QuoteAssetPrecision = symbol.QuoteAssetPrecision,
                                MinNotional         = symbol.MinNotionalFilter.MinNotional,
                                StepSize            = symbol.LotSizeFilter.StepSize,
                                MaxQuantity         = symbol.LotSizeFilter.MaxQuantity,
                                MinQuantity         = symbol.LotSizeFilter.MinQuantity,
                                TickSize            = symbol.PriceFilter.TickSize,
                                MaxPrice            = symbol.PriceFilter.MaxPrice,
                                MinPrice            = symbol.PriceFilter.MinPrice
                            }
                        };
                        result.Success = true;
                        result.Message = LogGenerator.SequenceSuccess(SequenceName, solbot.Strategy.AvailableStrategy.Symbol);
                    }
                    else
                    {
                        result.Success = false;
                        result.Message = LogGenerator.SequenceError(SequenceName, solbot.Strategy.AvailableStrategy.Symbol);
                    }
                }
                else
                {
                    result.Success = false;
                    result.Message = LogGenerator.SequenceError(SequenceName, exchangeInfo.Error.Message);
                }
            }
Exemplo n.º 5
0
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var result = new SequencedRuleResult();

            if (_exchange.Type.HasValue)
            {
                switch (_exchange.Type.Value)
                {
                case Domain.Enums.ExchangeType.Binance:
                {
                    _rules.Add(new BinanceSymbolSequenceRule(_binanceClient));
                    _rules.Add(new BinanceGetPriceSequenceRule(_binanceTickerService));
                }
                break;

                case Domain.Enums.ExchangeType.KuCoin:
                {
                    _rules.Add(new KucoinSymbolSequenceRule(_kucoinClient));
                    _rules.Add(new KucoinGetPriceSequenceRule(_kucoinTickerService));
                }
                break;
                }

                foreach (var item in _rules)
                {
                    var res = item.RuleExecuted(solbot);

                    if (res.Success)
                    {
                        result.Success = true;
                        result.Message = LogGenerator.SequenceSuccess(SequenceName, _exchange.Type.Value.GetDescription());
                    }
                    else
                    {
                        result.Success = false;
                        result.Message = LogGenerator.SequenceError(SequenceName, res.Message);
                        break;
                    }
                }
            }
            else
            {
                result.Success = false;
                result.Message = "No exchange type provided";
            }
            return(result);
        }
Exemplo n.º 6
0
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var result = new SequencedRuleResult();

            try
            {
                var exchangeInfo = _kucoinClient.GetSymbols();

                if (exchangeInfo.Success)
                {
                    var symbol = exchangeInfo
                                 .Data
                                 .FirstOrDefault(e => e.Symbol == solbot.Strategy.AvailableStrategy.Symbol);

                    if (!(symbol is null) && symbol.EnableTrading)
                    {
                        solbot.Communication = new Communication
                        {
                            Symbol = new SymbolMessage
                            {
                                BaseAsset           = symbol.BaseCurrency,
                                QuoteAsset          = symbol.QuoteCurrency,
                                BasePrecision       = symbol.BaseIncrement,
                                QuotePrecision      = symbol.QuoteIncrement,
                                BaseAssetPrecision  = BitConverter.GetBytes(decimal.GetBits(symbol.BaseIncrement)[3])[2],
                                QuoteAssetPrecision = BitConverter.GetBytes(decimal.GetBits(symbol.QuoteIncrement)[3])[2],
                                StepSize            = symbol.PriceIncrement,
                                MaxQuantity         = symbol.QuoteMaxSize,
                                MinQuantity         = symbol.QuoteMinSize
                            }
                        };
                        result.Success = true;
                        result.Message = LogGenerator.SequenceSuccess(SequenceName, solbot.Strategy.AvailableStrategy.Symbol);
                    }
                    else
                    {
                        result.Success = false;
                        result.Message = LogGenerator.SequenceError(SequenceName, solbot.Strategy.AvailableStrategy.Symbol);
                    }
                }
                else
                {
                    result.Success = false;
                    result.Message = LogGenerator.SequenceError(SequenceName, exchangeInfo.Error.Message);
                }
            }
Exemplo n.º 7
0
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var result = new SequencedRuleResult();

            try
            {
                _storageService.SaveValue(solbot.Communication.Price.Current);

                result.Success = true;
                result.Message = LogGenerator.SequenceSuccess(SequenceName, $"{solbot.Communication.Price.Current}");
            }
            catch (Exception e)
            {
                result.Success = false;
                result.Message = LogGenerator.SequenceException(SequenceName, e);
            }
            return(result);
        }
Exemplo n.º 8
0
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var result = new SequencedRuleResult();

            switch (_exchange.Type.Value)
            {
            case Domain.Enums.ExchangeType.Binance:
            {
                _rules.Add(new BinanceModeProductionRule(
                               _marketService,
                               _pushOverNotificationService,
                               _binanceClient));
            }
            break;

            case Domain.Enums.ExchangeType.KuCoin:
            {
                _rules.Add(new KucoinModeProductionRule(
                               _marketService,
                               _pushOverNotificationService,
                               _kucoinClient));
            }
            break;
            }

            foreach (var item in _rules)
            {
                var res = item.RuleExecuted(solbot);

                if (res.Success)
                {
                    result.Success = true;
                    result.Message = LogGenerator.SequenceSuccess(SequenceName, _exchange.Type.Value.GetDescription());
                }
                else
                {
                    result.Success = false;
                    result.Message = LogGenerator.SequenceError(SequenceName, res.Message);
                    break;
                }
            }

            return(result);
        }
Exemplo n.º 9
0
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var storagePath = GlobalConfig.PriceFile(solbot.Strategy.AvailableStrategy.Symbol);

            var result = new SequencedRuleResult();

            try
            {
                _storageService.SetPath(storagePath);

                result.Success = true;
                result.Message = LogGenerator.SequenceSuccess(SequenceName, storagePath);
            }
            catch (Exception e)
            {
                result.Success = false;
                result.Message = LogGenerator.SequenceException(SequenceName, e);
            }
            return(result);
        }
Exemplo n.º 10
0
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var result = new SequencedRuleResult();
            var symbol = solbot.Strategy.AvailableStrategy.Symbol;

            if (solbot.Strategy.AvailableStrategy.ClearOnStartup && _runForTheFirstTime)
            {
                try
                {
                    if (_storageService.Exist(symbol))
                    {
                        var backup = _storageService.CreateBackup(symbol);
                        _storageService.ClearFile(symbol);

                        result.Success = true;
                        result.Message = LogGenerator.SequenceSuccess(SequenceName, $"{backup}");
                    }
                    else
                    {
                        result.Success = true;
                        result.Message = LogGenerator.SequenceSuccess(SequenceName, $"{solbot.Strategy.AvailableStrategy.ClearOnStartup}");
                    }
                }
                catch (Exception e)
                {
                    result.Success = false;
                    result.Message = LogGenerator.SequenceException(SequenceName, e);
                }
            }
            else
            {
                result.Success = true;
                result.Message = LogGenerator.SequenceSuccess(SequenceName, $"{solbot.Strategy.AvailableStrategy.ClearOnStartup}");
            }
            return(result);
        }
Exemplo n.º 11
0
        public IRuleResult RuleExecuted(Solbot solbot)
        {
            var result = new SequencedRuleResult
            {
                Success = true,
                Message = LogGenerator.SequenceSuccess(SequenceName, $"Notification ({_pushOverNotificationService.IsActive()})")
            };

            try
            {
                if (_runForTheFirstTime)
                {
                    _pushOverNotificationService.Send(
                        LogGenerator.NotificationTitleStart,
                        LogGenerator.NotificationMessageStart);
                }
            }
            catch (Exception e)
            {
                result.Message = LogGenerator.SequenceException(SequenceName, e);
            }

            return(result);
        }