private void rakeInButton_Click(object sender, EventArgs e) { string comment = Interaction.InputBox("Comment"); sellPoint = day.MarketDay.DataPoints[count - 1]; testLog.WriteLine(day.ToString()); testLog.WriteLine(goingLong ? "Went Long" : "Shorted"); testLog.WriteLine($"BuyPoint:{buyPoint.ToStringNice()}"); testLog.WriteLine($"SellPoint:{sellPoint.ToStringNice()}"); testLog.WriteLine($"Profit:{profit}"); testLog.WriteLine($"Commment:{comment}"); testLog.WriteLine("----------------------------------------"); rakeInButton.Enabled = false; goLongButton.Enabled = false; shortButton.Enabled = false; noTouchButton.Enabled = false; totalProfit += profit; totalCount++; count = day.MarketDay.DataPoints.Count; PopulateChart(day); }
private bool ProcessLimitOrder(Order order, MarketDataPoint currentMarketDataPoint) { Log.Debug($"Processing limit order {order}"); var orderProcessed = false; switch (order.Side) { case OrderSide.Buy: if (order.Price >= currentMarketDataPoint.Price) { if (Portfolio.UnfreezeSecurity(order.BaseCurrency, order.Volume * order.Price * (1 + _TradeFee)) && Portfolio.RemoveSecurity(order.BaseCurrency, order.Volume * currentMarketDataPoint.Price * (1 + _TradeFee))) { Portfolio.AddSecurity(order.Security, order.Volume); orderProcessed = true; } } break; case OrderSide.Sell: if (order.Price <= currentMarketDataPoint.Price) { if (Portfolio.UnfreezeSecurity(order.Security, order.Volume) && Portfolio.RemoveSecurity(order.Security, order.Volume)) { var transactionAmount = order.Volume * currentMarketDataPoint.Price * (1 - _TradeFee); Portfolio.AddSecurity(order.BaseCurrency, transactionAmount); orderProcessed = true; } } break; } if (orderProcessed) { Log.Debug($"Limit order processed"); _PendingOrders.Remove(order); OnTradeExecuted(new Trade() { Timestamp = currentMarketDataPoint.Timestamp, Order = order, ExecutionPrice = currentMarketDataPoint.Price, ExecutionVolume = order.Volume }); } else { Log.Warn($"Cannot place order: {order.ToFormattedString()}"); } return(orderProcessed); }
private void newButton_Click(object sender, EventArgs e) { count = 1; buyPoint = null; profit = 0; rakeInButton.Enabled = false; goLongButton.Enabled = true; shortButton.Enabled = true; noTouchButton.Enabled = true; day = GetMarketGuess("", days); PopulateChart(day); }
private void shortButton_Click(object sender, EventArgs e) { if (buyPoint == null) { rakeInButton.Enabled = true; goLongButton.Enabled = false; shortButton.Enabled = false; noTouchButton.Enabled = false; buyPoint = day.MarketDay.DataPoints[count - 1]; goingLong = false; PopulateChart(day); } }
private Order ProcessMarketOrder(Order order, MarketDataPoint currentMarketDataPoint) { Log.Debug($"Processed market order {order}"); var orderProcessed = false; switch (order.Side) { case OrderSide.Buy: if (Portfolio.RemoveSecurity(order.BaseCurrency, order.Volume * currentMarketDataPoint.Price * (1 + _TradeFee))) { Portfolio.AddSecurity(order.Security, order.Volume); orderProcessed = true; } break; case OrderSide.Sell: if (Portfolio.RemoveSecurity(order.Security, order.Volume)) { Portfolio.AddSecurity(order.BaseCurrency, order.Volume * currentMarketDataPoint.Price * (1 - _TradeFee)); orderProcessed = true; } break; } if (orderProcessed) { Log.Debug($"Market order processed"); OnTradeExecuted(new Trade() { Timestamp = currentMarketDataPoint.Timestamp, Order = order, ExecutionPrice = currentMarketDataPoint.Price, ExecutionVolume = order.Volume }); return(order); } else { Log.Warn($"Unable to place order: {order.ToFormattedString()}"); return(null); } }
public void AddPriceData(string symbol, MarketDataPoint dataPoint) { _PriceData.Add(symbol, dataPoint); }