Ejemplo n.º 1
0
        public void ShouldRegiterAndLogOperation()
        {
            IEntity operation = new TradeOperation
            {
                Time  = DateTime.Now,
                Buyer = new Trader {
                    TraderInfo = new IndividualInfo {
                        SecondName = "BuyerSecondName"
                    }
                },
                Seller = new Trader {
                    TraderInfo = new IndividualInfo {
                        SecondName = "SellerSecondName"
                    }
                },
                TradableType = new TradableType {
                    Type = "TradableType"
                },
                TradeAmount    = 10,
                TradableAmount = 11
            };

            BusinessService.RegisterEntity(operation);
            Received.InOrder(() =>
            {
                DataContext.Received(1).Add(Arg.Any <IEntity>());
                DataContext.Received(1).SaveChanges();
                //не смог заставить этот кусок работать
                //operation.Received(1).GetInfo();
                LogService.Received().Info(Arg.Any <string>());
            });
        }
        protected override void OnTick()
        {
            //if price is near special hedged position pair, unlist tuple from special
            UnlistSpecialPosNearPriceAction();

            //Loop over open positions, to close or hedge positions as appropriate
            foreach (var pos in Positions.FindAll(label, Symbol))
            {
                //if any non-special position at t/p, close it out
                if (pos.Pips * f >= TpTicks && !GetSpecialPosIdList().Contains(pos.Id))
                {
                    ClosePositionAsync(pos, OnCloseAsync);
                }

                //if any non-special position is in red hedge ticks, hedge opposite
                if (!GetSpecialPosIdList().Contains(pos.Id) && pos.Pips * f <= -HdgTicks)
                {
                    dir = pos.TradeType == TradeType.Buy ? TradeType.Sell : TradeType.Buy; //get hdg direction
                    TradeOperation hto = ExecuteMarketOrderAsync(dir, Symbol, pos.Volume, label, 0.0, 0.0, null,
                                                                 "special", OnExecuted);   //hdg

                    //add the hedged positions to the special list
                    specialPositionsList.Add(pos);
                } //if
            }     //foreach-loop over positions

            //if no open positions (not counting special hedges), open in direction of last hedg
            if (GetOpenPosIdList().Except(GetSpecialPosIdList()).Count() == 0)
            {
                ExecuteMarketOrderAsync(dir, Symbol, GetVolume(), label, 0.0, 0.0, null, "1st", OnExecuted);
            }
        }//OnTick()
Ejemplo n.º 3
0
        public IOrderInfo Merge(IOrderInfo orderInfo)
        {
            var from = ((OrderImpl)orderInfo);

            _diffBitMap = from._diffBitMap;
            if (IsTradeOperationChanged())
            {
                Type = from.Type;
            }
            if (IsOpenTimeChanged())
            {
                OpenTime = from.OpenTime;
            }
            if (IsCloseTimeChanged())
            {
                CloseTime = from.CloseTime;
                Comment   = from.Comment;
            }
            if (IsExpirationTimeChanged())
            {
                Expiration = from.Expiration;
            }
            if (IsLotsChanged())
            {
                Lots = from.Lots;
            }
            if (IsOpenPriceChanged())
            {
                OpenPrice = from.OpenPrice;
            }
            if (IsClosePriceChanged())
            {
                ClosePrice = from.ClosePrice;
            }
            if (IsStopLossChanged())
            {
                Sl = from.Sl;
            }
            if (IsTakeProfitChanged())
            {
                Tp = from.Tp;
            }
            if (IsProfitChanged())
            {
                Profit = from.Profit;
            }
            if (IsCommissionChanged())
            {
                Commission = from.Commission;
            }
            if (IsSwapChanged())
            {
                Swap = from.Swap;
            }
            _str = null;
            return(this);
        }
Ejemplo n.º 4
0
 public OComparator(IOrderInfo o)
 {
     _closeTime = o.GetCloseTime();
     _symbol    = o.GetSymbol();
     _tradeOp   = o.GetTradeOperation();
     _price     = o.GetOpenPrice();
     _time      = o.GetOpenTime();
     _magic     = o.GetMagic();
 }
Ejemplo n.º 5
0
        private bool CloseOrder(IOrderInfo order)
        {
            try
            {
                TradeOperation orderType = order.GetTradeOperation();

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

                switch (orderType)
                {
                case TradeOperation.OP_BUY:
                case TradeOperation.OP_SELL:
                    RefreshRates();
                    if (order.GetTicket() > 0 && OrderClose(order.GetTicket(), order.GetLots(),
                                                            Marketinfo(order.GetSymbol(),
                                                                       orderType == TradeOperation.OP_BUY
                                                      ? MarketInfo.MODE_BID
                                                      : MarketInfo.MODE_ASK),
                                                            20, 0))
                    {
                        Info(String.Format("Order {0} has been closed", order));
                        return(true);
                    }
                    Info(String.Format("Order {0} to be closed; todo", order));
                    return(false);

                default:
                    if (OrderDelete(order.GetTicket(), Color.Black))
                    {
                        Info(String.Format("Order {0} has been deleted", order));
                        return(true);
                    }
                    else
                    {
                        Info(String.Format("Can not delete order {0}", order));
                        return(false);
                    }
                }
            }
            catch (ErrInvalidTicket)
            {
                Info(String.Format("Looks like order {0} has been deleted manually", order));
                return(true);
            }
            catch (ErrInvalidPrice)
            {
                Info(String.Format("## ErrInvalidPrice - Price slippage ## - order.closePrice: {0} market.bid: {1} market.ask: {2} order.OrderType: {3}", order.GetClosePrice(), Marketinfo(order.GetSymbol(), MarketInfo.MODE_BID), Marketinfo(order.GetSymbol(), MarketInfo.MODE_ASK), order.GetTradeOperation()));
                return(false);
            }
        }
Ejemplo n.º 6
0
        private void sendOrder(string symbol, TradeOperation command, double volume, double price, int slippage, double stoploss, double takeprofit
                               , string comment, int magic, DateTime expiration, Color arrow_color)
        {
            int orderId = apiClient.OrderSend(symbol, command, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);

            RunOnUIThread(() =>
            {
                if (orderId >= 0)
                {
                    listBoxSendedOrders.Items.Add(orderId);
                }

                addToLog(string.Format("Sended order result: ticketId = {0}, volume - {1}", orderId, volume, slippage));
            });
        }
Ejemplo n.º 7
0
        public TradeOperation ProcessTrade(Trader seller, Trader buyer, Stock tradable)
        {
            Withdraw(seller, tradable);
            Acquire(buyer, tradable);
            UpdateEntity(buyer);
            UpdateEntity(seller);

            TradeOperation entity = TradeOperation.CreateBuilder()
                                    .SetTime(DateTime.Now)
                                    .SetBuyer(buyer)
                                    .SetSeller(seller)
                                    .SetTradableType(tradable.TradableType)
                                    .SetTradableAmount(tradable.Quantity)
                                    .SetTradeAmount(tradable.Quantity * tradable.TradableType.Price);

            return(entity);
        }
Ejemplo n.º 8
0
 public async void OpenOrder(string strSymbol, TradeOperation Cmd, double dVolumn, int nSlippage, int nMagic)
 {
     await Execute(() => {
         if (bAvailable)
         {
             double dPrice = 0;
             if (Cmd == TradeOperation.OP_BUY)
             {
                 dPrice = currentQuote.Ask;
             }
             else if (Cmd == TradeOperation.OP_SELL)
             {
                 dPrice = currentQuote.Bid;
             }
             _apiClient.OrderSend(strSymbol, Cmd, dVolumn, dPrice, nSlippage, 0, 0, null, nMagic);
         }
     });
 }
Ejemplo n.º 9
0
        private TrenderTradeOperation Calculate(List <MqlRates> rates)
        {
            //cnadles must have the same direction
            TradeOperation candle0 = TradeOperation.OP_BUYLIMIT;
            TradeOperation candle1 = TradeOperation.OP_BUYLIMIT;

            if (rates[candle0index].Close > rates[candle0index].Open)
            {
                candle0 = TradeOperation.OP_BUY;
            }
            else
            {
                candle0 = TradeOperation.OP_SELL;
            }

            if (rates[candle1index].Close > rates[candle1index].Open)
            {
                candle1 = TradeOperation.OP_BUY;
            }
            else
            {
                candle1 = TradeOperation.OP_SELL;
            }

            // no trade if candles
            if (candle0 != candle1)
            {
                Console.WriteLine("Dow Jones: Candle directions differ.");
                return(TrenderTradeOperation.OpStayAside);
            }

            //high high, high glow
            if (candle0 == TradeOperation.OP_BUY)
            {
                if ((rates[candle0index].High > rates[candle1index].High) && (rates[candle0index].Low >= rates[candle1index].Low))
                {
                    return(TrenderTradeOperation.OpBuy);
                }
                else
                {
                    Console.WriteLine("Dow Jones: OP_BUY highhighhighlow condition not met");
                    return(TrenderTradeOperation.OpStayAside);
                }
            }

            //lower lows , lower high
            if (candle0 == TradeOperation.OP_SELL)
            {
                if ((rates[candle0index].High < rates[candle1index].High) && ((rates[candle0index].Low < rates[candle1index].Low)))
                {
                    return(TrenderTradeOperation.OpSell);
                }
                else
                {
                    Console.WriteLine("Dow Jones: OP_BUY lowlowlowhigh condition not met");
                    return(TrenderTradeOperation.OpStayAside);
                }
            }

            return(TrenderTradeOperation.OpStayAside);
        }
Ejemplo n.º 10
0
 public abstract void BookTrade(TradeOperation tradeOperation);
Ejemplo n.º 11
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!!"));
             *
             * }
             **/
        }
Ejemplo n.º 12
0
        //

        public OrderImpl(String encodedOrderInfo, MT4 utils)
        {
            var p = new SDParser(encodedOrderInfo, '|');

            if (p.peek().StartsWith("C"))
            {
                // order change info
                _diffBitMap  = long.Parse(p.pop().Substring(1), CultureInfo.InvariantCulture);
                TicketNumber = long.Parse(p.pop(), CultureInfo.InvariantCulture);
                if (IsModified())
                {
                    if (IsTradeOperationChanged())
                    {
                        Type = ((TradeOperation)int.Parse(p.pop(), CultureInfo.InvariantCulture));
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsOpenTimeChanged())
                    {
                        OpenTime = utils.ToDate(int.Parse(p.pop(), CultureInfo.InvariantCulture));
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsCloseTimeChanged())
                    {
                        CloseTime = utils.ToDate(int.Parse(p.pop(), CultureInfo.InvariantCulture));
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsExpirationTimeChanged())
                    {
                        Expiration = utils.ToDate(int.Parse(p.pop(), CultureInfo.InvariantCulture));
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsLotsChanged())
                    {
                        Lots = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsOpenPriceChanged())
                    {
                        OpenPrice = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsClosePriceChanged())
                    {
                        ClosePrice = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsStopLossChanged())
                    {
                        Sl = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsTakeProfitChanged())
                    {
                        Tp = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsProfitChanged())
                    {
                        Profit = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsCommissionChanged())
                    {
                        Commission = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsSwapChanged())
                    {
                        Swap = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        p.pop();
                    }
                    if (IsCloseTimeChanged())
                    {
                        string pop = p.pop();
                        Comment = pop ?? Comment;
                    }
                    else
                    {
                        p.pop();
                    }
                }
            }
            else
            {
                TicketNumber = long.Parse(p.pop());
                Type         = (TradeOperation)int.Parse(p.pop(), CultureInfo.InvariantCulture);
                OpenTime     = utils.ToDate(int.Parse(p.pop(), CultureInfo.InvariantCulture));
                CloseTime    = utils.ToDate(int.Parse(p.pop(), CultureInfo.InvariantCulture));
                Magic        = int.Parse(p.pop(), CultureInfo.InvariantCulture);
                Expiration   = utils.ToDate(int.Parse(p.pop(), CultureInfo.InvariantCulture));
                Lots         = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                OpenPrice    = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                ClosePrice   = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                Sl           = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                Tp           = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                Profit       = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                Commission   = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                Swap         = double.Parse(p.pop(), CultureInfo.InvariantCulture);
                Symbol       = p.pop();
                Comment      = p.pop();
            }
        }
Ejemplo n.º 13
0
        private void sendOrder(string symbol, TradeOperation command, double volume, double price, int slippage, double stoploss, double takeprofit
                                , string comment, int magic, DateTime expiration, Color arrow_color)
        {
            int orderId = apiClient.OrderSend(symbol, command, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);

            RunOnUIThread(() =>
                {
                    if (orderId >= 0)
                    {
                        listBoxSendedOrders.Items.Add(orderId);
                    }

                    addToLog(string.Format("Sended order result: ticketId = {0}, volume - {1}", orderId, volume, slippage));
                });
        }
Ejemplo n.º 14
0
        private ulong SendOrder(string symbol, double volume, double price, TradeOperation command)
        {
            int orderId = apiClient.OrderSend(symbol, command, volume, price, 10, 0, 0, "Trade Request from Mt5Trade", 0, DateTime.Now, Color.Green);

            return(orderId > 0 ? (ulong)orderId : 0);
        }