예제 #1
0
        internal void MasterOrderCreated(IOrderInfo masterOrder)
        {
            RefreshRates();
            double orderPrice = Marketinfo(masterOrder.GetSymbol(),
                                           (masterOrder.GetTradeOperation() == TradeOperation.OP_BUY)
                                                      ? MarketInfo.MODE_ASK
                                                      : MarketInfo.MODE_BID);
            TradeOperation orderType = masterOrder.GetTradeOperation();

            Console.WriteLine("Creating an order - order.closePrice: {0} market.bid: {1} market.ask: {2} order.OrderType: {3}", masterOrder.GetClosePrice(), Marketinfo(masterOrder.GetSymbol(), MarketInfo.MODE_BID), Marketinfo(masterOrder.GetSymbol(), MarketInfo.MODE_ASK), orderType);


            //Info(String.Format("Executing order for account {0}", _acc));

            try {
                int ticket = OrderSend(
                    masterOrder.GetSymbol(),
                    masterOrder.GetTradeOperation(),
                    masterOrder.GetLots(),
                    //masterOrder.GetOpenPrice(), // todo: adjust price to current Bid/Ask if OrderType==OP_BUY/SELL
                    orderPrice,
                    20,
                    masterOrder.GetStopLoss(),
                    masterOrder.GetTakeProfit(),
                    _master.Acc + "@" + _master.Broker + "-> _acc:" + _acc,
                    masterOrder.GetTicket(),
                    masterOrder.GetExpiration(),
                    0
                    );
                if (ticket != 0)
                {
                    _ordersMap.Add(masterOrder.GetTicket(), ticket);
                    Info(String.Format("Master order {0} is mapped to {1}", masterOrder, ticket));
                }
            }
            catch (ErrTradeDisabled)
            {
                Info(String.Format("Trade disabled for accoutn: {0}", _acc));
            }
            catch (ErrInvalidPrice)
            {
                Info(String.Format("## ErrInvalidPrice - Price slippage ## - order.closePrice: {0} market.bid: {1} market.ask: {2} order.OrderType: {3}", masterOrder.GetClosePrice(), Marketinfo(masterOrder.GetSymbol(), MarketInfo.MODE_BID), Marketinfo(masterOrder.GetSymbol(), MarketInfo.MODE_ASK), orderType));
            }

            /*
             * catch(ErrInvalidPrice)
             * {
             * Info(String.Format("Price invalid: {0} ", masterOrder.GetOpenPrice()));
             *
             * }
             * catch(ErrInvalidTradeVolume)
             * {
             * Info(String.Format("Trade volume invalid: {0} ", masterOrder.GetLots()));
             *
             * }
             * catch(ErrTradeDisabled)
             * {
             * Info(String.Format("Trade disabled!!"));
             *
             * }
             * catch(ErrOffQuotes)
             * {
             * Info(String.Format("This trade is off quotes!!"));
             *
             * }
             **/
        }