示例#1
0
        public static void UpdateSetting(this Setting settingDb, BotSettingViewModel settingVm)
        {
            settingDb.ID               = settingVm.ID;
            settingDb.BotID            = settingVm.BotID;
            settingDb.CardID           = settingVm.CardID;
            settingDb.Color            = settingVm.Color;
            settingDb.FormName         = settingVm.FormName;
            settingDb.IsMDSearch       = settingVm.IsMDSearch;
            settingDb.Logo             = settingVm.Logo;
            settingDb.TextIntroductory = settingVm.TextIntroductory;
            settingDb.UserID           = settingVm.UserID;
            settingDb.StopWord         = settingVm.StopWord;
            if (settingDb.CardID == null && String.IsNullOrEmpty(settingDb.TextIntroductory))
            {
                settingDb.IsActiveIntroductory = false;
            }
            else if (settingDb.CardID != null || !String.IsNullOrEmpty(settingDb.TextIntroductory))
            {
                settingDb.IsActiveIntroductory = true;
            }

            settingDb.IsProactiveMessageZalo     = settingVm.IsProactiveMessageZalo;
            settingDb.IsProactiveMessageFacebook = settingVm.IsProactiveMessageFacebook;
            settingDb.ProactiveMessageText       = settingVm.ProactiveMessageText;
            settingDb.Timeout            = settingVm.Timeout;
            settingDb.FacebookAppSecrect = settingVm.FacebookAppSecrect;
            settingDb.FacebookPageToken  = settingVm.FacebookPageToken;
            settingDb.ZaloAppSecrect     = settingVm.ZaloAppSecrect;
            settingDb.ZaloPageToken      = settingVm.ZaloPageToken;
            settingDb.ZaloQRCode         = settingVm.ZaloQRCode;
            settingDb.IsHaveMaintenance  = settingVm.IsHaveMaintenance;
            settingDb.MessageMaintenance = settingVm.MessageMaintenance;
        }
示例#2
0
        public async Task PreviewBotsCreation(int numberOfBots, BotSettingViewModel settings, CancellationToken cancellationToken)
        {
            var existingBots = await GetAllBots();

            var blacklistedPairs = await RetrieveBlacklistedPairs();

            int created = 0;

            _logger.LogInformation($"Retrieving pairs from {_exchange.Name}...");
            var prices = await _exchange.GetAllPairsByQuoteCurrency(settings.QuoteCurrency);

            _logger.LogInformation($"{prices.Count} Pairs for {settings.QuoteCurrency.ToUpper()} found");

            foreach (var pair in prices.OrderByDescending(x => x.TotalTradedQuoteAssetVolume))
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    _logger.LogInformation($"Operation cancelled!");
                    break;
                }

                var symbol = TransformPairTo3CommasSymbolString(pair.QuoteCurrency, pair.BaseCurrency);

                if (SymbolShouldBeSkipped(symbol, settings.SkipExistingPairs, settings.SkipBaseStablecoin, settings.Strategy, pair, existingBots, settings.SkipBlacklistedPairs, blacklistedPairs))
                {
                    continue;
                }

                var marketData = await _xCommasClient.GetCurrencyRateAsync(symbol);

                if (!marketData.IsSuccess)
                {
                    if (!marketData.Error.StartsWith("Unknown pair"))
                    {
                        _logger.LogInformation($"Skipped Pair {symbol}. Reason: '{marketData.Error}'");
                    }
                    continue;
                }

                var botName = NameHelper.GenerateBotName(settings.Botname, symbol, settings.Strategy);
                _logger.LogInformation($"Bot to be created: '{botName}'");

                if (settings.BuyBaseCurrency && settings.BaseCurrencyToBuy > 0)
                {
                    _logger.LogInformation($"Market Buy Order to be placed: {settings.BaseCurrencyToBuy} {pair.QuoteCurrency}");
                }

                created++;

                if (created == numberOfBots)
                {
                    break;
                }
            }

            _logger.LogInformation($"{created} bots to be created");
        }
示例#3
0
        private Bot CreateBot(string botName, bool enabled, string symbol, BotSettingViewModel request)
        {
            var bot = new Bot();

            // Main Settings
            bot.Name      = botName;
            bot.IsEnabled = enabled;
            bot.Type      = "";

            // Pairs
            bot.Pairs          = new[] { symbol };
            bot.MaxActiveDeals = 1;

            // Strategy
            bot.Strategy              = request.Strategy;
            bot.ProfitCurrency        = request.ProfitCurrency;
            bot.BaseOrderVolume       = request.BaseOrderSize;
            bot.BaseOrderVolumeType   = request.BaseOrderSizeType;
            bot.SafetyOrderVolume     = request.SafetyOrderSize;
            bot.SafetyOrderVolumeType = request.SafetyOrderSizeType;
            bot.StartOrderType        = request.StartOrderType;

            // Leverage
            bot.LeverageType = request.LeverageType;
            if (request.LeverageType != LeverageType.NotSpecified)
            {
                bot.LeverageCustomValue = request.LeverageCustomValue;
            }

            // Signals
            bot.Strategies = request.DealStartConditions;

            // Stop Loss
            decimal      stopLossPercentage       = 0;
            StopLossType stopLossType             = StopLossType.StopLoss;
            bool         stopLossTimeoutEnabled   = false;
            int          stopLossTimeoutInSeconds = 0;

            if (request.StopLossEnabled)
            {
                stopLossPercentage       = request.StopLossPercentage;
                stopLossType             = request.StopLossAction;
                stopLossTimeoutEnabled   = request.StopLossTimeoutEnabled;
                stopLossTimeoutInSeconds = request.StopLossTimeout;
            }

            bot.StopLossPercentage       = stopLossPercentage;
            bot.StopLossType             = stopLossType;
            bot.StopLossTimeoutEnabled   = stopLossTimeoutEnabled;
            bot.StopLossTimeoutInSeconds = stopLossTimeoutInSeconds;

            // TP
            bot.TakeProfitType = TakeProfitType.Total;
            bot.TakeProfit     = request.TargetProfit;

            // Trailing
            bot.TrailingEnabled   = request.TrailingEnabled;
            bot.TrailingDeviation = request.TrailingDeviation;

            // Safety orders
            bot.MaxSafetyOrders             = request.MaxSafetyTradesCount;
            bot.ActiveSafetyOrdersCount     = request.MaxActiveSafetyTradesCount;
            bot.SafetyOrderStepPercentage   = request.PriceDeviationToOpenSafetyOrders;
            bot.MartingaleVolumeCoefficient = request.SafetyOrderVolumeScale;
            bot.MartingaleStepCoefficient   = request.SafetyOrderStepScale;

            // Advanced
            bot.Cooldown = request.CooldownBetweenDeals;
            return(bot);
        }
示例#4
0
        public async Task CreateBots(int numberOfBots, bool enable, BotSettingViewModel settings, CancellationToken cancellationToken)
        {
            var existingBots = await GetAllBots();

            var blacklistedPairs = await RetrieveBlacklistedPairs();

            int created = 0;

            _logger.LogInformation($"Retrieving pairs from {_exchange.Name}...");
            var prices = await _exchange.GetAllPairsByQuoteCurrency(settings.QuoteCurrency);

            _logger.LogInformation($"{prices.Count} Pairs for {settings.QuoteCurrency.ToUpper()} found");

            foreach (var pair in prices.OrderByDescending(x => x.TotalTradedQuoteAssetVolume))
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    _logger.LogInformation($"Operation cancelled!");
                    break;
                }

                var symbol = TransformPairTo3CommasSymbolString(pair.QuoteCurrency, pair.BaseCurrency);

                if (SymbolShouldBeSkipped(symbol, settings.SkipExistingPairs, settings.SkipBaseStablecoin, settings.Strategy, pair, existingBots, settings.SkipBlacklistedPairs, blacklistedPairs))
                {
                    continue;
                }

                var marketData = await _xCommasClient.GetCurrencyRateAsync(symbol);

                if (!marketData.IsSuccess)
                {
                    if (!marketData.Error.StartsWith("Unknown pair"))
                    {
                        _logger.LogInformation($"Skipped Pair {symbol}. Reason: '{marketData.Error}'");
                    }
                    continue;
                }

                var botName = NameHelper.GenerateBotName(settings.Botname, symbol, settings.Strategy);

                var bot      = CreateBot(botName, enable, symbol, settings);
                var response = await _xCommasClient.CreateBotAsync(settings.ExchangeAccountId.Value, settings.Strategy, bot);

                if (!response.IsSuccess)
                {
                    _logger.LogError($"Could not create bot for {symbol}: {response.Error.Replace(Environment.NewLine, " ")}");
                    continue;
                }

                if (enable)
                {
                    var res = await _xCommasClient.EnableBotAsync(response.Data.Id);

                    if (!res.IsSuccess)
                    {
                        _logger.LogError($"Bot '{botName}' created but there was an error with activation: {res.Error.Replace(Environment.NewLine, " ")}");
                    }
                    else
                    {
                        _logger.LogInformation($"Bot created and started: '{botName}'");
                    }
                }
                else
                {
                    _logger.LogInformation($"Bot created: '{botName}'");
                }

                if (settings.BuyBaseCurrency && settings.BaseCurrencyToBuy > 0)
                {
                    var placeOrderResult = await _exchange.PlaceOrder(pair, settings.BaseCurrencyToBuy);

                    if (placeOrderResult.Success)
                    {
                        _logger.LogInformation(placeOrderResult.Message);
                    }
                    else
                    {
                        _logger.LogError(placeOrderResult.Message);
                    }
                }

                created++;

                if (created == numberOfBots)
                {
                    break;
                }
            }

            _logger.LogInformation($"{created} bots created");
        }
 public void Init(BotSettingViewModel settings)
 {
     _botSettings = settings;
 }