示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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);
            }
        }
示例#6
0
 public void AddPriceData(string symbol, MarketDataPoint dataPoint)
 {
     _PriceData.Add(symbol, dataPoint);
 }