예제 #1
0
        internal void UpdateContractDetail(ContractDetail contractDetail)
        {
            contractDetails.Add(contractDetail);
            if (contractDetail.ContractDetails.MarketRuleIds != null)
            {
                foreach (int marketRuleId in contractDetail.ContractDetails.MarketRuleIds)
                {
                    clientManager.RequestMarketRule(marketRuleId);
                }
            }

            BuyOrder buyOrder = buyOrders.FirstOrDefault(x => x.Id == contractDetail.ReqId);

            buyOrder.MinTick = (decimal)contractDetail.ContractDetails.MinTick;
        }
예제 #2
0
        private void SubscribeTicker(BuyOrder buyOrder)
        {
            Contract contract = new Contract();

            contract.Symbol   = txtTicker.Text;
            contract.SecType  = "STK";
            contract.Exchange = "SMART";
            if (txtTicker.Text == "MSFT")
            {
                contract.PrimaryExch = "NASDAQ";                           // todo paramaterise
            }
            contract.Currency = "USD";

            clientManager.RequestMarketData(contract, buyOrder);
        }
예제 #3
0
        private void btnPlaceOrder_Click(object sender, EventArgs e)
        {
            try
            {
                // create buy order - this will add to grid
                BuyOrder buyOrder = new BuyOrder(GetNextId(), txtTicker.Text, numStop.Value, numStopBuyLimit.Value, numRiskPercent.Value, numDollarValue.Value, rdoUseRiskPercent.Checked);
                buyOrders.Add(buyOrder);
                SubscribeTicker(buyOrder);

                // req contract details for Order
                clientManager.RequestContractDetails(buyOrder.Id, buyOrder.Ticker);
            }
            catch (ArgumentNullException ae)
            {
                MessageBox.Show(ae.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
예제 #4
0
 private decimal CalculateStopOrderPrice(BuyOrder buyOrder)
 {
     return(buyOrder.Low - buyOrder.MinTick);
 }