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")); }
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 })); }
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}"); } }