Пример #1
0
        public void MakeTrade(OptionTrade trade)
        {
            if (trade.Spread.Options[0] != null || trade.Spread.Options[0].Strike != 0)
            {
                if (trade.Spread.Options.Length == 2)
                {
                    if (trade.Spread.Options[0].Strike > 0 && trade.Spread.Options[1].Strike == 0)
                    {
                        if ((trade.Spread.Options[0].OptionType == OptionType.Call && trade.Spread.Options[0].PositionType == PositionType.Short))
                        {
                            return;
                        }

                        Option[] newSpreadOption = new Option[1];
                        newSpreadOption[0] = trade.Spread.Options[0];
                        trade.Spread       = new Spread(newSpreadOption);
                    }
                }
                _portfolio.MakeTrade(trade, Api.Interval.Daily);
            }
        }
Пример #2
0
        public async void Run(OptionTradeList tradeList)
        {
            if (tradeList != null && tradeList.Trades.Count > 0)
            {
                //find DataRange
                StockData firstData = await StockDataBase.Get(tradeList.Stock, tradeList.Interval);

                int startIndex = firstData.FindDateIndex(_startDate);
                int stopIndex  = firstData.FindDateIndex(_endDate);
                int dataCount  = firstData.TimeSeries.DataPoints.Count;

                if (stopIndex == 0)
                {
                    stopIndex = dataCount - 1;
                }

                //Simulate trades
                OptionPortfolio portfolio = new OptionPortfolio(_startBalance, _fee, _slippage);
                _balanceChart = new GraphData(_name + " Balance");

                for (int i = startIndex; i <= stopIndex; i++)
                {
                    foreach (OptionTrade trade in tradeList.Trades)
                    {
                        int dateIndex = firstData.FindDateIndex(trade.TradeDate);
                        if (dateIndex == i)
                        {
                            portfolio.MakeTrade(trade, tradeList.Interval);
                        }
                    }
                    DateTime       date = firstData.TimeSeries.DataPoints[i].DateTime;
                    GraphDataPoint balanceGraphDataPoint = new GraphDataPoint(date, await portfolio.TotalBalance(date, tradeList.Interval));
                    _balanceChart.DataPoints.Add(balanceGraphDataPoint);
                }
            }
        }