本文整理汇总了C#中QuantConnect.Orders.Order类的典型用法代码示例。如果您正苦于以下问题:C# Order类的具体用法?C# Order怎么用?C# Order使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Order类属于QuantConnect.Orders命名空间,在下文中一共展示了Order类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ModifyOrderToFill
public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decimal lastMarketPrice)
{
// FXCM Buy StopMarket orders will be rejected if the stop price is below the market price
// FXCM Sell StopMarket orders will be rejected if the stop price is above the market price
var stop = (StopMarketOrder)order;
var previousStop = stop.StopPrice;
var fxcmBrokerage = (FxcmBrokerage)brokerage;
var quotes = fxcmBrokerage.GetBidAndAsk(new List<string> { new FxcmSymbolMapper().GetBrokerageSymbol(order.Symbol) });
if (order.Quantity > 0)
{
// for stop buys we need to decrease the stop price
// buy stop price must be strictly above ask price
var askPrice = Convert.ToDecimal(quotes.Single().AskPrice);
Log.Trace("FxcmStopMarketOrderTestParameters.ModifyOrderToFill(): Ask: " + askPrice);
stop.StopPrice = Math.Min(previousStop, Math.Max(askPrice, stop.StopPrice / 2) + 0.00001m);
}
else
{
// for stop sells we need to increase the stop price
// sell stop price must be strictly below bid price
var bidPrice = Convert.ToDecimal(quotes.Single().BidPrice);
Log.Trace("FxcmStopMarketOrderTestParameters.ModifyOrderToFill(): Bid: " + bidPrice);
stop.StopPrice = Math.Max(previousStop, Math.Min(bidPrice, stop.StopPrice * 2) - 0.00001m);
}
return stop.StopPrice != previousStop;
}
示例2: GetSlippageApproximation
/// <summary>
/// Get the slippage approximation for this order
/// </summary>
/// <returns>Decimal value of the slippage approximation</returns>
/// <seealso cref="Order"/>
public override decimal GetSlippageApproximation(Security security, Order order)
{
//Return 0 by default
decimal slippage = 0;
//For FOREX, the slippage is the Bid/Ask Spread for Tick, and an approximation for TradeBars
switch (security.Resolution)
{
case Resolution.Minute:
case Resolution.Second:
//Get the last data packet:
//Assume slippage is 1/10,000th of the price
slippage = security.GetLastData().Value * 0.0001m;
break;
case Resolution.Tick:
var lastTick = (Tick)security.GetLastData();
switch (order.Direction)
{
case OrderDirection.Buy:
//We're buying, assume slip to Asking Price.
slippage = Math.Abs(order.Price - lastTick.AskPrice);
break;
case OrderDirection.Sell:
//We're selling, assume slip to the bid price.
slippage = Math.Abs(order.Price - lastTick.BidPrice);
break;
}
break;
}
return slippage;
}
示例3: Fill
/********************************************************
* CLASS PROPERTIES
*********************************************************/
/********************************************************
* CLASS METHODS
*********************************************************/
/// <summary>
/// Process a order fill with the supplied security and order.
/// </summary>
/// <param name="vehicle">Asset we're working with</param>
/// <param name="order">Order class to check if filled.</param>
/// <returns>OrderEvent packet with the full or partial fill information</returns>
public virtual OrderEvent Fill(Security vehicle, Order order)
{
var fill = new OrderEvent(order);
try
{
//Based on the order type, select the fill model method.
switch (order.Type)
{
case OrderType.Limit:
fill = LimitFill(vehicle, order);
break;
case OrderType.StopMarket:
fill = StopFill(vehicle, order);
break;
case OrderType.Market:
fill = MarketFill(vehicle, order);
break;
}
}
catch (Exception err)
{
Log.Error("Equity.EquityTransactionModel.Fill(): " + err.Message);
}
return fill;
}
示例4: CanSubmitOrder
/// <summary>
/// Returns true if the brokerage could accept this order. This takes into account
/// order type, security type, and order size limits.
/// </summary>
/// <remarks>
/// For example, a brokerage may have no connectivity at certain times, or an order rate/size limit
/// </remarks>
/// <param name="security">The security of the order</param>
/// <param name="order">The order to be processed</param>
/// <param name="message">If this function returns false, a brokerage message detailing why the order may not be submitted</param>
/// <returns>True if the brokerage could process the order, false otherwise</returns>
public override bool CanSubmitOrder(Security security, Order order, out BrokerageMessageEvent message)
{
message = null;
var securityType = order.SecurityType;
if (securityType != SecurityType.Equity)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"This model only supports equities."
);
return false;
}
if (order.Type == OrderType.MarketOnOpen || order.Type == OrderType.MarketOnClose)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"Tradier brokerage only supports Market orders. MarketOnOpen and MarketOnClose orders not supported."
);
return false;
}
if (!CanExecuteOrder(security, order))
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "ExtendedMarket",
"Tradier does not support extended market hours trading. Your order will be processed at market open."
);
}
// tradier order limits
return true;
}
示例5: ModifyOrderToFill
public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decimal lastMarketPrice)
{
var stop = (StopLimitOrder) order;
var previousStop = stop.StopPrice;
if (order.Quantity > 0)
{
// for stop buys we need to decrease the stop price
stop.StopPrice = Math.Min(stop.StopPrice, Math.Max(stop.StopPrice/2, Math.Round(lastMarketPrice, 2, MidpointRounding.AwayFromZero)));
//change behaviour for forex type unit tests
if(order.SecurityType == SecurityType.Forex)
{
stop.StopPrice = Math.Min(stop.StopPrice, Math.Max(stop.StopPrice / 2, Math.Round(lastMarketPrice, 4, MidpointRounding.AwayFromZero)));
}
}
else
{
// for stop sells we need to increase the stop price
stop.StopPrice = Math.Max(stop.StopPrice, Math.Min(stop.StopPrice * 2, Math.Round(lastMarketPrice, 2, MidpointRounding.AwayFromZero)));
//change behaviour for forex type unit tests
if (order.SecurityType == SecurityType.Forex)
{
stop.StopPrice = Math.Max(stop.StopPrice, Math.Min(stop.StopPrice * 2, Math.Round(lastMarketPrice, 4, MidpointRounding.AwayFromZero)));
}
}
stop.LimitPrice = stop.StopPrice;
return stop.StopPrice != previousStop;
}
示例6: CanSubmitOrder
/// <summary>
/// Returns true if the brokerage could accept this order. This takes into account
/// order type, security type, and order size limits.
/// </summary>
/// <remarks>
/// For example, a brokerage may have no connectivity at certain times, or an order rate/size limit
/// </remarks>
/// <param name="security"></param>
/// <param name="order">The order to be processed</param>
/// <param name="message">If this function returns false, a brokerage message detailing why the order may not be submitted</param>
/// <returns>True if the brokerage could process the order, false otherwise</returns>
public override bool CanSubmitOrder(Security security, Order order, out BrokerageMessageEvent message)
{
message = null;
// validate security type
if (security.Type != SecurityType.Forex && security.Type != SecurityType.Cfd)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"This model does not support " + security.Type + " security type."
);
return false;
}
// validate order type
if (order.Type != OrderType.Limit && order.Type != OrderType.Market && order.Type != OrderType.StopMarket)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"This model does not support " + order.Type + " order type."
);
return false;
}
return true;
}
示例7: ModifyOrderToFill
public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decimal lastMarketPrice)
{
// FXCM Buy Limit orders will be rejected if the limit price is above the market price
// FXCM Sell Limit orders will be rejected if the limit price is below the market price
var limit = (LimitOrder)order;
var previousLimit = limit.LimitPrice;
var fxcmBrokerage = (FxcmBrokerage)brokerage;
var quotes = fxcmBrokerage.GetBidAndAsk(new List<string> { new FxcmSymbolMapper().GetBrokerageSymbol(order.Symbol) });
if (order.Quantity > 0)
{
// for limit buys we need to increase the limit price
// buy limit price must be at bid price or below
var bidPrice = Convert.ToDecimal(quotes.Single().BidPrice);
Log.Trace("FxcmLimitOrderTestParameters.ModifyOrderToFill(): Bid: " + bidPrice);
limit.LimitPrice = Math.Max(previousLimit, Math.Min(bidPrice, limit.LimitPrice * 2));
}
else
{
// for limit sells we need to decrease the limit price
// sell limit price must be at ask price or above
var askPrice = Convert.ToDecimal(quotes.Single().AskPrice);
Log.Trace("FxcmLimitOrderTestParameters.ModifyOrderToFill(): Ask: " + askPrice);
limit.LimitPrice = Math.Min(previousLimit, Math.Max(askPrice, limit.LimitPrice / 2));
}
return limit.LimitPrice != previousLimit;
}
示例8: ClientCancelsLimitOrder
public void ClientCancelsLimitOrder()
{
OrderStatus status = OrderStatus.New;
var manualResetEvent = new ManualResetEvent(false);
var ib = new InteractiveBrokersBrokerage();
ib.Connect();
ib.OrderEvent += (sender, args) =>
{
status = args.Status;
manualResetEvent.Set();
};
// try to sell a single share at a ridiculous price, we'll cancel this later
var order = new Order("AAPL", SecurityType.Equity, -1, OrderType.Limit, DateTime.UtcNow, 100000);
ib.PlaceOrder(order);
manualResetEvent.WaitOne(2500);
ib.CancelOrder(order);
manualResetEvent.Reset();
manualResetEvent.WaitOne(2500);
Assert.AreEqual(OrderStatus.Canceled, status);
}
示例9: GetInitialMarginRequiredForOrder
/// <summary>
/// Gets the total margin required to execute the specified order in units of the account currency including fees
/// </summary>
/// <param name="security">The security to compute initial margin for</param>
/// <param name="order">The order to be executed</param>
/// <returns>The total margin in terms of the currency quoted in the order</returns>
public override decimal GetInitialMarginRequiredForOrder(Security security, Order order)
{
//Get the order value from the non-abstract order classes (MarketOrder, LimitOrder, StopMarketOrder)
//Market order is approximated from the current security price and set in the MarketOrder Method in QCAlgorithm.
var orderFees = security.FeeModel.GetOrderFee(security, order);
var orderCostInAccountCurrency = order.GetValue(security);
return orderCostInAccountCurrency*InitialMarginRequirement + orderFees;
}
示例10: CanExecuteOrder
/// <summary>
/// Returns true if the brokerage would be able to execute this order at this time assuming
/// market prices are sufficient for the fill to take place. This is used to emulate the
/// brokerage fills in backtesting and paper trading. For example some brokerages may not perform
/// executions during extended market hours. This is not intended to be checking whether or not
/// the exchange is open, that is handled in the Security.Exchange property.
/// </summary>
/// <param name="security">The security being ordered</param>
/// <param name="order">The order to test for execution</param>
/// <returns>True if the brokerage would be able to perform the execution, false otherwise</returns>
public bool CanExecuteOrder(Security security, Order order)
{
// tradier doesn't support after hours trading
var timeOfDay = security.Time.TimeOfDay;
if (timeOfDay < EquityExchange.MarketOpen || timeOfDay > EquityExchange.MarketClose)
{
return false;
}
return true;
}
示例11: CanSubmitOrder
/// <summary>
/// Returns true if the brokerage could accept this order. This takes into account
/// order type, security type, and order size limits.
/// </summary>
/// <remarks>
/// For example, a brokerage may have no connectivity at certain times, or an order rate/size limit
/// </remarks>
/// <param name="security"></param>
/// <param name="order">The order to be processed</param>
/// <param name="message">If this function returns false, a brokerage message detailing why the order may not be submitted</param>
/// <returns>True if the brokerage could process the order, false otherwise</returns>
public override bool CanSubmitOrder(Security security, Order order, out BrokerageMessageEvent message)
{
message = null;
// validate security type
if (security.Type != SecurityType.Forex && security.Type != SecurityType.Cfd)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"This model does not support " + security.Type + " security type."
);
return false;
}
// validate order type
if (order.Type != OrderType.Limit && order.Type != OrderType.Market && order.Type != OrderType.StopMarket)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"This model does not support " + order.Type + " order type."
);
return false;
}
// validate order quantity
if (order.Quantity % 1000 != 0)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"The order quantity must be a multiple of 1000."
);
return false;
}
// validate stop/limit orders= prices
var limit = order as LimitOrder;
if (limit != null)
{
return IsValidOrderPrices(security, OrderType.Limit, limit.Direction, security.Price, limit.LimitPrice, ref message);
}
var stopMarket = order as StopMarketOrder;
if (stopMarket != null)
{
return IsValidOrderPrices(security, OrderType.StopMarket, stopMarket.Direction, stopMarket.StopPrice, security.Price, ref message);
}
var stopLimit = order as StopLimitOrder;
if (stopLimit != null)
{
return IsValidOrderPrices(security, OrderType.StopLimit, stopLimit.Direction, stopLimit.StopPrice, stopLimit.LimitPrice, ref message);
}
return true;
}
示例12: CanUpdateOrder
/// <summary>
/// Returns true if the brokerage would allow updating the order as specified by the request
/// </summary>
/// <param name="security">The security of the order</param>
/// <param name="order">The order to be updated</param>
/// <param name="request">The requested update to be made to the order</param>
/// <param name="message">If this function returns false, a brokerage message detailing why the order may not be updated</param>
/// <returns>True if the brokerage would allow updating the order, false otherwise</returns>
public override bool CanUpdateOrder(Security security, Order order, UpdateOrderRequest request, out BrokerageMessageEvent message)
{
message = null;
if (order.SecurityType == SecurityType.Forex && request.Quantity != null)
{
return IsForexWithinOrderSizeLimits(order.Symbol.Value, request.Quantity.Value, out message);
}
return true;
}
示例13: GetInitialMarginRequiredForOrder
/// <summary>
/// Gets the total margin required to execute the specified order in units of the account currency including fees
/// </summary>
/// <param name="security">The security to compute initial margin for</param>
/// <param name="order">The order to be executed</param>
/// <returns>The total margin in terms of the currency quoted in the order</returns>
public override decimal GetInitialMarginRequiredForOrder(Security security, Order order)
{
var forex = (Forex)security;
//Get the order value from the non-abstract order classes (MarketOrder, LimitOrder, StopMarketOrder)
//Market order is approximated from the current security price and set in the MarketOrder Method in QCAlgorithm.
var orderFees = security.TransactionModel.GetOrderFee(security, order);
var price = order.Status.IsFill() ? order.Price : security.Price;
var orderCostInAccountCurrency = order.GetValue(price)*forex.QuoteCurrency.ConversionRate;
return orderCostInAccountCurrency*InitialMarginRequirement + orderFees;
}
示例14: CanSubmitOrder
/// <summary>
/// Returns true if the brokerage could accept this order. This takes into account
/// order type, security type, and order size limits.
/// </summary>
/// <remarks>
/// For example, a brokerage may have no connectivity at certain times, or an order rate/size limit
/// </remarks>
/// <param name="security"></param>
/// <param name="order">The order to be processed</param>
/// <param name="message">If this function returns false, a brokerage message detailing why the order may not be submitted</param>
/// <returns>True if the brokerage could process the order, false otherwise</returns>
public override bool CanSubmitOrder(Security security, Order order, out BrokerageMessageEvent message)
{
message = null;
// validate security type
if (security.Type != SecurityType.Forex && security.Type != SecurityType.Cfd)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"This model does not support " + security.Type + " security type."
);
return false;
}
// validate order type
if (order.Type != OrderType.Limit && order.Type != OrderType.Market && order.Type != OrderType.StopMarket)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"This model does not support " + order.Type + " order type."
);
return false;
}
// validate order quantity
if (order.Quantity % 1000 != 0)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"The order quantity must be a multiple of 1000."
);
return false;
}
// validate order price
var invalidPrice = order.Type == OrderType.Limit && order.Direction == OrderDirection.Buy && ((LimitOrder)order).LimitPrice > security.Price ||
order.Type == OrderType.Limit && order.Direction == OrderDirection.Sell && ((LimitOrder)order).LimitPrice < security.Price ||
order.Type == OrderType.StopMarket && order.Direction == OrderDirection.Buy && ((StopMarketOrder)order).StopPrice < security.Price ||
order.Type == OrderType.StopMarket && order.Direction == OrderDirection.Sell && ((StopMarketOrder)order).StopPrice > security.Price;
if (invalidPrice)
{
message = new BrokerageMessageEvent(BrokerageMessageType.Warning, "NotSupported",
"Limit Buy orders and Stop Sell orders must be below market, Limit Sell orders and Stop Buy orders must be above market."
);
}
return true;
}
示例15: ModifyOrderToFill
public override bool ModifyOrderToFill(IBrokerage brokerage, Order order, decimal lastMarketPrice)
{
var stop = (StopMarketOrder)order;
var previousStop = stop.StopPrice;
if (order.Quantity > 0)
{
// for stop buys we need to decrease the stop price
stop.StopPrice = Math.Min(stop.StopPrice, Math.Max(stop.StopPrice / 2, lastMarketPrice));
}
else
{
// for stop sells we need to increase the stop price
stop.StopPrice = Math.Max(stop.StopPrice, Math.Min(stop.StopPrice * 2, lastMarketPrice));
}
return stop.StopPrice != previousStop;
}