本文整理匯總了C#中QuantConnect.Securities.Security類的典型用法代碼示例。如果您正苦於以下問題:C# Security類的具體用法?C# Security怎麽用?C# Security使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
Security類屬於QuantConnect.Securities命名空間,在下文中一共展示了Security類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: PerformsLimitFillSell
public void PerformsLimitFillSell()
{
var model = new SecurityTransactionModel();
var order = new LimitOrder(Symbol, -100, 101.5m, DateTime.Now, type: SecurityType.Equity);
var config = new SubscriptionDataConfig(typeof(TradeBar), SecurityType.Equity, Symbol, Resolution.Minute, true, true, true, true, false, 0);
var security = new Security(config, 1);
security.SetMarketPrice(DateTime.Now, new IndicatorDataPoint(Symbol, DateTime.Now, 101m));
var fill = model.LimitFill(security, order);
Assert.AreEqual(0, fill.FillQuantity);
Assert.AreEqual(0, fill.FillPrice);
Assert.AreEqual(OrderStatus.None, fill.Status);
Assert.AreEqual(OrderStatus.None, order.Status);
security.SetMarketPrice(DateTime.Now, new TradeBar(DateTime.Now, Symbol, 102m, 103m, 101m, 102.3m, 100));
fill = model.LimitFill(security, order);
// this fills worst case scenario, so it's at the limit price
Assert.AreEqual(order.Quantity, fill.FillQuantity);
Assert.AreEqual(Math.Max(order.LimitPrice, security.Low), fill.FillPrice);
Assert.AreEqual(OrderStatus.Filled, fill.Status);
Assert.AreEqual(OrderStatus.Filled, order.Status);
}
示例2: Fill
/********************************************************
* CLASS PROPERTIES
*********************************************************/
/********************************************************
* CLASS METHODS
*********************************************************/
/// <summary>
/// Perform neccessary check to see if the model has been filled, appoximate the best we can.
/// </summary>
/// <param name="vehicle">Asset we're working with</param>
/// <param name="order">Order class to check if filled.</param>
public virtual OrderEvent Fill(Security vehicle, Order order)
{
//Default order event to return.
var fill = new OrderEvent(order);
try
{
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("SecurityTransactionModel.TransOrderDirection.Fill(): " + err.Message);
}
return fill;
}
示例3: ApplyFunds
/// <summary>
/// Applies cash settlement rules
/// </summary>
/// <param name="portfolio">The algorithm's portfolio</param>
/// <param name="security">The fill's security</param>
/// <param name="applicationTimeUtc">The fill time (in UTC)</param>
/// <param name="currency">The currency symbol</param>
/// <param name="amount">The amount of cash to apply</param>
public void ApplyFunds(SecurityPortfolioManager portfolio, Security security, DateTime applicationTimeUtc, string currency, decimal amount)
{
if (amount > 0)
{
// positive amount: sell order filled
portfolio.UnsettledCashBook[currency].AddAmount(amount);
// find the correct settlement date (usually T+3 or T+1)
var settlementDate = applicationTimeUtc.ConvertFromUtc(security.Exchange.TimeZone).Date;
for (var i = 0; i < _numberOfDays; i++)
{
settlementDate = settlementDate.AddDays(1);
// only count days when market is open
if (!security.Exchange.Hours.IsDateOpen(settlementDate))
i--;
}
// use correct settlement time
var settlementTimeUtc = settlementDate.Add(_timeOfDay).ConvertToUtc(security.Exchange.Hours.TimeZone);
portfolio.AddUnsettledCashAmount(new UnsettledCashAmount(settlementTimeUtc, currency, amount));
}
else
{
// negative amount: buy order filled
portfolio.CashBook[currency].AddAmount(amount);
}
}
示例4: GetOrderFee
/// <summary>
/// Gets the order fee associated with the specified order. This returns the cost
/// of the transaction in the account currency
/// </summary>
/// <param name="security">The security matching the order</param>
/// <param name="order">The order to compute fees for</param>
/// <returns>The cost of the order in units of the account currency</returns>
public decimal GetOrderFee(Security security, Order order)
{
switch (security.Type)
{
case SecurityType.Forex:
// get the total order value in the account currency
var totalOrderValue = order.GetValue(security);
var fee = Math.Abs(_forexCommissionRate*totalOrderValue);
return Math.Max(_forexMinimumOrderFee, fee);
case SecurityType.Equity:
var tradeValue = Math.Abs(order.GetValue(security));
//Per share fees
var tradeFee = 0.005m * order.AbsoluteQuantity;
//Maximum Per Order: 0.5%
//Minimum per order. $1.0
var maximumPerOrder = 0.005m * tradeValue;
if (tradeFee < 1)
{
tradeFee = 1;
}
else if (tradeFee > maximumPerOrder)
{
tradeFee = maximumPerOrder;
}
//Always return a positive fee.
return Math.Abs(tradeFee);
}
// all other types default to zero fees
return 0m;
}
示例5: GetSlippageApproximation
/// <summary>
/// Slippage Model. Return a decimal cash slippage approximation on the order.
/// </summary>
public override decimal GetSlippageApproximation(Security asset, Order order)
{
var lastData = asset.GetLastData();
if (lastData == null) return 0;
return lastData.Value*_slippagePercent;
}
示例6: LiveSubscription
/// <summary>
/// Initializes a new instance of the <see cref="LiveSubscription"/> class
/// </summary>
/// <param name="universe">The universe of the subscription</param>
/// <param name="security">The security this subscription is for</param>
/// <param name="enumerator">The subscription's data source</param>
/// <param name="utcStartTime">The start time of the subscription</param>
/// <param name="utcEndTime">The end time of the subscription</param>
public LiveSubscription(IUniverse universe, Security security, IEnumerator<BaseData> enumerator, DateTime utcStartTime, DateTime utcEndTime)
: base(universe, security, enumerator, utcStartTime, utcEndTime)
{
NeedsMoveNext = true;
IsCustomData = security.SubscriptionDataConfig.IsCustomData;
StreamStore = new StreamStore(Configuration, security);
}
示例7: 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;
}
示例8: PerformsLimitFillSell
public void PerformsLimitFillSell()
{
var model = new ForexTransactionModel();
var order = new LimitOrder(Symbol, -100, 101.5m, DateTime.Now, type: SecurityType.Forex);
var config = CreateTradeBarDataConfig(SecurityType.Forex, Symbol);
var security = new Security(SecurityExchangeHours.AlwaysOpen, config, 1);
security.SetLocalTimeKeeper(TimeKeeper.GetLocalTimeKeeper(TimeZones.NewYork));
security.SetMarketPrice(new IndicatorDataPoint(Symbol, DateTime.Now, 101m));
var fill = model.LimitFill(security, order);
Assert.AreEqual(0, fill.FillQuantity);
Assert.AreEqual(0, fill.FillPrice);
Assert.AreEqual(OrderStatus.None, fill.Status);
Assert.AreEqual(OrderStatus.None, order.Status);
security.SetMarketPrice(new TradeBar(DateTime.Now, Symbol, 102m, 103m, 101m, 102.3m, 100));
fill = model.LimitFill(security, order);
// this fills worst case scenario, so it's at the limit price
Assert.AreEqual(order.Quantity, fill.FillQuantity);
Assert.AreEqual(Math.Max(order.LimitPrice, security.Low), fill.FillPrice);
Assert.AreEqual(OrderStatus.Filled, fill.Status);
Assert.AreEqual(OrderStatus.Filled, order.Status);
}
示例9: 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;
}
示例10: LiveSubscription
/// <summary>
/// Initializes a new instance of the <see cref="LiveSubscription"/> class
/// </summary>
/// <param name="security">The security this subscription is for</param>
/// <param name="enumerator">The subscription's data source</param>
/// <param name="utcStartTime">The start time of the subscription</param>
/// <param name="utcEndTime">The end time of the subscription</param>
/// <param name="isUserDefined">True if the user explicitly defined this subscription, false otherwise</param>
/// <param name="isFundamentalSubscription">True if this subscription is used to define the times to perform universe selection
/// for a specific market, false for all other subscriptions</param>
public LiveSubscription(Security security, IEnumerator<BaseData> enumerator, DateTime utcStartTime, DateTime utcEndTime, bool isUserDefined, bool isFundamentalSubscription)
: base(security, enumerator, utcStartTime, utcEndTime, isUserDefined, isFundamentalSubscription)
{
NeedsMoveNext = true;
IsCustomData = security.IsDynamicallyLoadedData;
StreamStore = new StreamStore(Configuration, security);
}
示例11: StreamStore
/// <summary>
/// Initializes a new instance of the <see cref="StreamStore"/> class
/// </summary>
/// <param name="config">The subscripton's configuration</param>
/// <param name="security">The security object, used for exchange hours</param>
public StreamStore(SubscriptionDataConfig config, Security security)
{
_security = security;
_config = config;
_increment = config.Increment;
_queue = new ConcurrentQueue<BaseData>();
}
示例12: 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;
}
示例13: HoldingsTests
public void HoldingsTests()
{
var security = new Security(SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), CreateTradeBarConfig());
// Long 100 stocks test
security.Holdings.SetHoldings(100m, 100);
Assert.AreEqual(100m, security.Holdings.AveragePrice);
Assert.AreEqual(100, security.Holdings.Quantity);
Assert.IsTrue(security.HoldStock);
Assert.IsTrue(security.Invested);
Assert.IsTrue(security.Holdings.IsLong);
Assert.IsFalse(security.Holdings.IsShort);
// Short 100 stocks test
security.Holdings.SetHoldings(100m, -100);
Assert.AreEqual(100m, security.Holdings.AveragePrice);
Assert.AreEqual(-100, security.Holdings.Quantity);
Assert.IsTrue(security.HoldStock);
Assert.IsTrue(security.Invested);
Assert.IsFalse(security.Holdings.IsLong);
Assert.IsTrue(security.Holdings.IsShort);
// Flat test
security.Holdings.SetHoldings(100m, 0);
Assert.AreEqual(100m, security.Holdings.AveragePrice);
Assert.AreEqual(0, security.Holdings.Quantity);
Assert.IsFalse(security.HoldStock);
Assert.IsFalse(security.Invested);
Assert.IsFalse(security.Holdings.IsLong);
Assert.IsFalse(security.Holdings.IsShort);
}
示例14: UpdatesAfterCorrectPeriodElapses
public void UpdatesAfterCorrectPeriodElapses()
{
const int periods = 3;
var periodSpan = Time.OneMinute;
var reference = new DateTime(2016, 04, 06, 12, 0, 0);
var referenceUtc = reference.ConvertToUtc(TimeZones.NewYork);
var timeKeeper = new TimeKeeper(referenceUtc);
var config = new SubscriptionDataConfig(typeof (TradeBar), Symbols.SPY, Resolution.Minute, TimeZones.NewYork, TimeZones.NewYork, true, false, false);
var security = new Security(SecurityExchangeHours.AlwaysOpen(TimeZones.NewYork), config, new Cash("USD", 0, 0), SymbolProperties.GetDefault("USD"));
security.SetLocalTimeKeeper(timeKeeper.GetLocalTimeKeeper(TimeZones.NewYork));
var model = new RelativeStandardDeviationVolatilityModel(periodSpan, periods);
security.VolatilityModel = model;
var first = new IndicatorDataPoint(reference, 1);
security.SetMarketPrice(first);
Assert.AreEqual(0m, model.Volatility);
const decimal value = 0.471404520791032M; // std of 1,2 is ~0.707 over a mean of 1.5
var second = new IndicatorDataPoint(reference.AddMinutes(1), 2);
security.SetMarketPrice(second);
Assert.AreEqual(value, model.Volatility);
// update should not be applied since not enough time has passed
var third = new IndicatorDataPoint(reference.AddMinutes(1.01), 1000);
security.SetMarketPrice(third);
Assert.AreEqual(value, model.Volatility);
var fourth = new IndicatorDataPoint(reference.AddMinutes(2), 3m);
security.SetMarketPrice(fourth);
Assert.AreEqual(0.5m, model.Volatility);
}
示例15: MarketFill
public override OrderEvent MarketFill(Security asset, MarketOrder order)
{
// this model randomly fills market orders
decimal absoluteRemaining;
if (!_absoluteRemainingByOrderId.TryGetValue(order.Id, out absoluteRemaining))
{
absoluteRemaining = order.AbsoluteQuantity;
_absoluteRemainingByOrderId.Add(order.Id, order.AbsoluteQuantity);
}
var fill = base.MarketFill(asset, order);
var absoluteFillQuantity = (int) (Math.Min(absoluteRemaining, _random.Next(0, 2*(int)order.AbsoluteQuantity)));
fill.FillQuantity = Math.Sign(order.Quantity) * absoluteFillQuantity;
if (absoluteRemaining == absoluteFillQuantity)
{
fill.Status = OrderStatus.Filled;
_absoluteRemainingByOrderId.Remove(order.Id);
}
else
{
absoluteRemaining = absoluteRemaining - absoluteFillQuantity;
_absoluteRemainingByOrderId[order.Id] = absoluteRemaining;
fill.Status = OrderStatus.PartiallyFilled;
}
_algorithm.Log("CustomFillModel: " + fill);
return fill;
}