private async Task AnalizeBuy() { foreach (var stock in Settings.Stocks) { var data = MarketData.GetData()[stock]; var lastIndex = data.Count - 1; if (lastIndex < 2) { return; } var p0 = Convert.ToDouble(data[lastIndex - 0].Price()); var p1 = Convert.ToDouble(data[lastIndex - 1].Price()); var p2 = Convert.ToDouble(data[lastIndex - 2].Price()); var buyVolume = 5; if (p0 > p1 && p1 > p2 && p0 - p1 > p1 - p2 && AlpacaData.GetPositionCount(stock) == 0 && AlpacaData.GetAccountData().Equity() - p0 * buyVolume >= 0) { await Buy(stock, p0, buyVolume); } //if ((p0 < p1 || p0 - p1 < p1 - p2) && AlpacaData.GetPositionCount(stock) > 0) // await Sell(stock, p2); } }
private async Task AnalizeSell() { foreach (var stock in Settings.Stocks) { if (AlpacaData.GetPositionCount(stock) == 0) { continue; } var stockShortHistory = AlpacaData.GetPositionShortHistory()[stock]; if (stockShortHistory.Count < 2) { return; } var p0 = stockShortHistory[stockShortHistory.Count - 1]; var p1 = stockShortHistory[stockShortHistory.Count - 2]; if (p0 < p1 && AlpacaData.GetPositionCount(stock) > 0) { await Sell(stock, p0); } } }
public void Update(ref Dictionary <string, List <MarketDataTimePoint> > marketData, AlpacaAccountData accountData, List <AlpacaPosition> positionData) { if (!_initialized) { return; } foreach (var stock in Settings.Stocks) { var count = marketData[stock].Count; if (count < 1) { return; } if (count > 1) { if (Convert.ToDouble(marketData[stock][count - 1].Price()) > Convert.ToDouble(marketData[stock][count - 2].Price())) { _stockTextColors[stock] = Colors.Green; } else if (Convert.ToDouble(marketData[stock][count - 1].Price()) < Convert.ToDouble(marketData[stock][count - 2].Price())) { _stockTextColors[stock] = Colors.Red; } else { _stockTextColors[stock] = Colors.Gray; } } _stockTextBlocks[stock].Text = "(" + AlpacaData.GetPositionCount(stock) + ") " + stock + " - " + $"{Convert.ToDouble(marketData[stock][count - 1].Price()):#.00} " + accountData.Currency(); _stockTextBlocks[stock].Width = LegendCanvas.ActualWidth; _stockTextBlocks[stock].Foreground = new SolidColorBrush(_stockTextColors[stock]); if (stock == Settings.SelectedStock) { _stockTextBlocks[stock].Background = new SolidColorBrush(_selectedStockBackgroungColor); _stockTextBlocks[stock].FontWeight = FontWeights.ExtraBold; } else { _stockTextBlocks[stock].Background = new SolidColorBrush(Colors.Transparent); _stockTextBlocks[stock].FontWeight = FontWeights.Normal; } _equityTextBlock.Text = $"Equity: {accountData.Equity():#.00} " + accountData.Currency(); _equityTextBlock.Margin = new Thickness(0, LegendCanvas.ActualHeight - 20, 0, 0); _equityTextBlock.Width = LegendCanvas.ActualWidth; } }
private async Task Sell(string stock, double price) { var stockCount = AlpacaData.GetPositionCount(stock); if (await MakeTransaction(stock, stockCount, TransactionOption.SELL)) { AlpacaData.ClearPositionShortHistory(stock); LogMessage("Sell " + stockCount + " of " + stock + " at " + price); } else { LogMessage("Sell " + stockCount + " of " + stock + " at " + price + " - FAILED"); } }