Exemplo n.º 1
0
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, TraceWriter log)
        {
            try
            {
                CryptoTrader.Timestamp = DateTime.Now.Ticks;
                Logger.Init(log);
                Logger.Log($"Started function at {DateTime.UtcNow}");
                AzureContainerManager azureContainerManager = new AzureContainerManager();
                var status = req.GetQueryNameValuePairs()
                             .FirstOrDefault(q => string.Compare(q.Key, "status", StringComparison.OrdinalIgnoreCase) == 0)
                             .Value;

                if (status == "loaded")
                {
                    foreach (var marketChart in MarketCharts)
                    {
                        Logger.Log($"Retrieving signal for {marketChart.Market}");
                        var cryptoTrader = new CryptoTrader();
                        await cryptoTrader.RetrieveAndProcessSignal(Environment.GetEnvironmentVariable("containerUrl"), marketChart);
                    }
                    azureContainerManager.StopImageAnalyzer();
                }
                Logger.Log($"Finished function at {DateTime.UtcNow}");
            }
            catch (Exception e)
            {
                Logger.Log(e.ToString());
                return(req.CreateResponse(HttpStatusCode.InternalServerError, e.ToString()));
            }
            return(req.CreateResponse(HttpStatusCode.OK, "invalid"));
        }
Exemplo n.º 2
0
        private void CreateDefaultSetups()
        {
            _clusterClientMock = new Mock <IClusterClient>();
            _hubNotifier       = new Mock <IHubNotifier>();
            _cryptoTrader      = new CryptoTrader(_cryptoApiMock.Object, _clusterClientMock.Object, _hubNotifier.Object)
            {
            };
            _traderGrainMock = new Mock <ITraderGrain>();
            _traderGrainMock.Setup(t => t.UpdatePriceAsync(It.IsAny <Ticker>())).Returns(Task.CompletedTask);
            _clusterClientMock.Setup(c => c.GetGrain <ITraderGrain>(It.IsAny <string>(), It.IsAny <string>())).Returns(_traderGrainMock.Object);
            _traderGrainMock.Setup(t => t.GetActiveTrades()).ReturnsAsync(new List <Trade>());

            _traderGrainMock.Setup(t => t.GetSettings()).ReturnsAsync(new TraderSettings
            {
                BuyLowerPercentage     = -2,
                DefaultBudget          = 0.0012M,
                MinimumTakeProfit      = 0.1M,
                HighStopLossPercentage = -5,
            });
            _cryptoApiMock.Setup(c => c.GetTickerAsync(It.IsAny <string>()))
            .ReturnsAsync(new CryptoResponse <Ticker>(new Ticker
            {
                Ask  = 100,
                Bid  = 100,
                Last = 100
            }));
        }
Exemplo n.º 3
0
        public SellCoinTests()
        {
            _cryptoApiMock     = new Mock <ICryptoApi>();
            _clusterClientMock = new Mock <IClusterClient>();
            _hubNotifier       = new Mock <IHubNotifier>();
            _cryptoTrader      = new CryptoTrader(_cryptoApiMock.Object, _clusterClientMock.Object, _hubNotifier.Object);
            _cryptoApiMock.Setup(c => c.BuyCoinAsync(It.IsAny <CryptoOrder>())).ReturnsAsync(new CryptoResponse <CryptoOrder>("hello"));
            _updatedOrder = new CryptoOrder();
            _cryptoApiMock.Setup(c => c.SellCoinAsync(It.IsAny <CryptoOrder>())).ReturnsAsync(new CryptoResponse <CryptoOrder>(_updatedOrder));

            _currentTrade = new Trade
            {
                BuyOrder = new CryptoOrder
                {
                    PricePerUnit = 100M
                },
                IsActive = true
            };

            _cryptoApiMock.Setup(c => c.GetTickerAsync(It.IsAny <string>()))
            .ReturnsAsync(new CryptoResponse <Ticker>(new Ticker
            {
                Ask = 15,
                Bid = 100
            }));
            _traderGrainMock = new Mock <ITraderGrain>();
            _clusterClientMock.Setup(c => c.GetGrain <ITraderGrain>(It.IsAny <string>(), It.IsAny <string>())).Returns(_traderGrainMock.Object);
            _traderGrainMock.Setup(t => t.UpdatePriceAsync(It.IsAny <Ticker>())).Returns(Task.CompletedTask);

            _traderGrainMock.Setup(t => t.UpdatePriceAsync(It.IsAny <Ticker>())).Returns(Task.CompletedTask);
            _traderGrainMock.Setup(t => t.GetSettings()).ReturnsAsync(new TraderSettings
            {
                HighStopLossPercentage = -10,
                StopLoss          = -2,
                BuyTrigger        = -1,
                MinimumTakeProfit = 2
            });

            _traderGrainMock.Setup(t => t.GetActiveTrades()).ReturnsAsync(new List <Trade>
            {
                _currentTrade
            });
        }
        public static async Task <HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, TraceWriter log, ExecutionContext context)
        {
            try
            {
                CryptoTrader.Timestamp = DateTime.Now.Ticks;
                Logger.Init(log);
                Logger.Info($"Started function at {DateTime.UtcNow}");
                AzureContainerManager.StopIfRunning(context.FunctionAppDirectory);

                var timestamp = GetParam(req, "timestamp");
                var buyNow    = GetParam(req, "symbol");
                var isBullish = GetParam(req, "bullish");
                var env       = GetParam(req, "env");
                if (string.IsNullOrEmpty(buyNow) == false)
                {
                    string message;
                    if (string.IsNullOrWhiteSpace(isBullish) == false)
                    {
                        message = await CryptoTrader.CreateTrades(SignalType.Bullish,
                                                                  TradedSymbols.MarketCharts.FirstOrDefault(m => m.Market == buyNow), env);
                    }
                    else
                    {
                        message = await CryptoTrader.CreateTrades(SignalType.Bearish,
                                                                  TradedSymbols.MarketCharts.FirstOrDefault(m => m.Market == buyNow), env);
                    }
                    return(req.CreateResponse(HttpStatusCode.OK, message));
                }
                var signalManager = new SignalManager();
                return(await signalManager.ProcessImages(timestamp));
            }
            catch (Exception e)
            {
                Logger.Error(e.ToString());
                return(req.CreateResponse(HttpStatusCode.InternalServerError, e.ToString()));
            }
            finally
            {
                Logger.Info($"Finished function at {DateTime.UtcNow}");
            }
        }