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()
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); }
public OComparator(IOrderInfo o) { _closeTime = o.GetCloseTime(); _symbol = o.GetSymbol(); _tradeOp = o.GetTradeOperation(); _price = o.GetOpenPrice(); _time = o.GetOpenTime(); _magic = o.GetMagic(); }
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); } }
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)); }); }
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); }
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); } }); }
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); }
public abstract void BookTrade(TradeOperation tradeOperation);
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!!")); * * } **/ }
// 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(); } }
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); }