public void Initialize() { _algorithm = new QCAlgorithm(); _algorithm.SetBrokerageModel(BrokerageName.FxcmBrokerage); _algorithm.SetCash(100000); _algorithm.AddSecurity(SecurityType.Forex, Ticker); _algorithm.SetFinishedWarmingUp(); }
//[Test] //public void SetHoldings_LongToLonger_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // Update(msft, 25)); // //Half cash spent on 2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio["MSFT"].SetHoldings(25, 2000); // //Price rises to $50. // Update(msft, 50)); // //Now: 2000 * 50 = $100k Holdings, $50k Cash: $150k. MSFT is already 66% of holdings. // //Calculate the order for 75% MSFT: // var actual = algo.CalculateOrderQuantity("MSFT", 0.75m); // //Need to buy to make position $112.5k == $12.5k / 50 = 250 shares // Assert.AreEqual(250, actual); //} //[Test] //public void SetHoldings_LongerToLong_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // Update(msft, 25)); // //75% cash spent on 3000 MSFT shares. // algo.Portfolio.SetCash(25000); // algo.Portfolio["MSFT"].SetHoldings(25, 3000); // //Price rises to $50. // Update(msft, 50)); // //Now: 3000 * 50 = $150k Holdings, $25k Cash: $175k. MSFT is 86% of holdings. // //Calculate the order for 50% MSFT: // var actual = algo.CalculateOrderQuantity("MSFT", 0.5m); // //Need to sell to 50% = 87.5k target from $150k = 62.5 / $50-share = 1250 // Assert.AreEqual(-1250, actual); //} //[Test] //public void SetHoldings_LongToShort_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // Update(msft, 25)); // //Half cash spent on 2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio["MSFT"].SetHoldings(25, 2000); // //Price rises to $50. // Update(msft, 50)); // //Now: 2000 * 50 = $100k Holdings, $50k Cash: $150k. MSFT is 66% of holdings. // var actual = algo.CalculateOrderQuantity("MSFT", -0.5m); // // Need to hold -75k from $100k = delta: $175k / $50-share = -3500 shares. // Assert.AreEqual(-3500, actual); //} //[Test] //public void SetHoldings_ShortToShorter_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // Update(msft, 25)); // //Half cash spent on -2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio["MSFT"].SetHoldings(25, -2000); // //Price rises to $50. // Update(msft, 50)); // //Now: 2000 * 50 = $0k Net Holdings, $50k Cash: $50k. MSFT is 0% of holdings. // var actual = algo.CalculateOrderQuantity("MSFT", -0.75m); // //Want to hold -75% of MSFT: 50k total, -37.5k / $50-share = -750 TOTAL. // // Currently -2000, so net order +1250. // Assert.AreEqual(1250, actual); //} //[Test] //public void SetHoldings_ShortToLong_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // Update(msft, 25)); // //Half cash spent on -2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio["MSFT"].SetHoldings(25, -2000); // //Price rises to $50. // Update(msft, 50)); // //Now: 2000 * 50 = $0k Net Holdings, $50k Cash: $50k. MSFT is 0% of holdings. // var actual = algo.CalculateOrderQuantity("MSFT", 0.5m); // //We want to be 50% long, this is currently +2000 holdings + 50% 50k = $25k/ $50-share=500 // Assert.AreEqual(2500, actual); //} private QCAlgorithm GetAlgorithm(out Security msft, decimal fee = 0) { //Initialize algorithm var algo = new QCAlgorithm(); algo.AddSecurity(SecurityType.Equity, "MSFT"); algo.SetCash(100000); algo.Securities["MSFT"].TransactionModel = new ConstantFeeTransactionModel(fee); msft = algo.Securities["MSFT"]; return algo; }
public void SetHoldings_Long_ToZero_RoundOff() { var algo = new QCAlgorithm(); algo.AddSecurity(SecurityType.Forex, "EURUSD"); algo.SetCash(10000); algo.SetBrokerageModel(BrokerageName.FxcmBrokerage); algo.Securities[Symbols.EURUSD].TransactionModel = new ConstantFeeTransactionModel(0); Security eurusd = algo.Securities[Symbols.EURUSD]; // Set Price to $25 Update(eurusd, 25); // So 10000/25 = 400, After Rounding off becomes 0 var actual = algo.CalculateOrderQuantity("EURUSD", 1m); Assert.AreEqual(0m, actual); }
private QCAlgorithm GetAlgorithm(out Security msft, decimal initialMarginRequirement, decimal maintenanceMarginRequirement, decimal fee) { //Initialize algorithm var algo = new QCAlgorithm(); algo.AddSecurity(SecurityType.Equity, "MSFT"); algo.SetCash(100000); algo.Securities[Symbols.MSFT].TransactionModel = new ConstantFeeTransactionModel(fee); msft = algo.Securities[Symbols.MSFT]; msft.MarginModel = new SecurityMarginModel(initialMarginRequirement, maintenanceMarginRequirement); return algo; }
//[Test] //public void SetHoldings_LongToLonger_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // Update(msft, 25)); // //Half cash spent on 2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio[Symbols.MSFT].SetHoldings(25, 2000); // //Price rises to $50. // Update(msft, 50)); // //Now: 2000 * 50 = $100k Holdings, $50k Cash: $150k. MSFT is already 66% of holdings. // //Calculate the order for 75% MSFT: // var actual = algo.CalculateOrderQuantity(Symbols.MSFT, 0.75m); // //Need to buy to make position $112.5k == $12.5k / 50 = 250 shares // Assert.AreEqual(250, actual); //} //[Test] //public void SetHoldings_LongerToLong_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // Update(msft, 25)); // //75% cash spent on 3000 MSFT shares. // algo.Portfolio.SetCash(25000); // algo.Portfolio[Symbols.MSFT].SetHoldings(25, 3000); // //Price rises to $50. // Update(msft, 50)); // //Now: 3000 * 50 = $150k Holdings, $25k Cash: $175k. MSFT is 86% of holdings. // //Calculate the order for 50% MSFT: // var actual = algo.CalculateOrderQuantity(Symbols.MSFT, 0.5m); // //Need to sell to 50% = 87.5k target from $150k = 62.5 / $50-share = 1250 // Assert.AreEqual(-1250, actual); //} //[Test] //public void SetHoldings_LongToShort_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // Update(msft, 25)); // //Half cash spent on 2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio[Symbols.MSFT].SetHoldings(25, 2000); // //Price rises to $50. // Update(msft, 50)); // //Now: 2000 * 50 = $100k Holdings, $50k Cash: $150k. MSFT is 66% of holdings. // var actual = algo.CalculateOrderQuantity(Symbols.MSFT, -0.5m); // // Need to hold -75k from $100k = delta: $175k / $50-share = -3500 shares. // Assert.AreEqual(-3500, actual); //} //[Test] //public void SetHoldings_ShortToShorter_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // Update(msft, 25)); // //Half cash spent on -2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio[Symbols.MSFT].SetHoldings(25, -2000); // //Price rises to $50. // Update(msft, 50)); // //Now: 2000 * 50 = $0k Net Holdings, $50k Cash: $50k. MSFT is 0% of holdings. // var actual = algo.CalculateOrderQuantity(Symbols.MSFT, -0.75m); // //Want to hold -75% of MSFT: 50k total, -37.5k / $50-share = -750 TOTAL. // // Currently -2000, so net order +1250. // Assert.AreEqual(1250, actual); //} //[Test] //public void SetHoldings_ShortToLong_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // Update(msft, 25)); // //Half cash spent on -2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio[Symbols.MSFT].SetHoldings(25, -2000); // //Price rises to $50. // Update(msft, 50)); // //Now: 2000 * 50 = $0k Net Holdings, $50k Cash: $50k. MSFT is 0% of holdings. // var actual = algo.CalculateOrderQuantity(Symbols.MSFT, 0.5m); // //We want to be 50% long, this is currently +2000 holdings + 50% 50k = $25k/ $50-share=500 // Assert.AreEqual(2500, actual); //} private QCAlgorithm GetAlgorithm(out Security msft, decimal leverage, decimal fee) { //Initialize algorithm var algo = new QCAlgorithm(); algo.AddSecurity(SecurityType.Equity, "MSFT"); algo.SetCash(100000); algo.Securities[Symbols.MSFT].TransactionModel = new ConstantFeeTransactionModel(fee); msft = algo.Securities[Symbols.MSFT]; msft.SetLeverage(leverage); return algo; }
//[Test] //public void SetHoldings_LongToLonger_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // algo.Securities.Update(DateTime.Now, Update("MSFT", 25)); // //Half cash spent on 2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio["MSFT"].SetHoldings(25, 2000); // //Price rises to $50. // algo.Securities.Update(DateTime.Now, Update("MSFT", 50)); // //Now: 2000 * 50 = $100k Holdings, $50k Cash: $150k. MSFT is already 66% of holdings. // //Calculate the order for 75% MSFT: // var actual = algo.CalculateOrderQuantity("MSFT", 0.75m); // //Need to buy to make position $112.5k == $12.5k / 50 = 250 shares // Assert.AreEqual(250, actual); //} //[Test] //public void SetHoldings_LongerToLong_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // algo.Securities.Update(DateTime.Now, Update("MSFT", 25)); // //75% cash spent on 3000 MSFT shares. // algo.Portfolio.SetCash(25000); // algo.Portfolio["MSFT"].SetHoldings(25, 3000); // //Price rises to $50. // algo.Securities.Update(DateTime.Now, Update("MSFT", 50)); // //Now: 3000 * 50 = $150k Holdings, $25k Cash: $175k. MSFT is 86% of holdings. // //Calculate the order for 50% MSFT: // var actual = algo.CalculateOrderQuantity("MSFT", 0.5m); // //Need to sell to 50% = 87.5k target from $150k = 62.5 / $50-share = 1250 // Assert.AreEqual(-1250, actual); //} //[Test] //public void SetHoldings_LongToShort_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // algo.Securities.Update(DateTime.Now, Update("MSFT", 25)); // //Half cash spent on 2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio["MSFT"].SetHoldings(25, 2000); // //Price rises to $50. // algo.Securities.Update(DateTime.Now, Update("MSFT", 50)); // //Now: 2000 * 50 = $100k Holdings, $50k Cash: $150k. MSFT is 66% of holdings. // var actual = algo.CalculateOrderQuantity("MSFT", -0.5m); // // Need to hold -75k from $100k = delta: $175k / $50-share = -3500 shares. // Assert.AreEqual(-3500, actual); //} //[Test] //public void SetHoldings_ShortToShorter_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // algo.Securities.Update(DateTime.Now, Update("MSFT", 25)); // //Half cash spent on -2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio["MSFT"].SetHoldings(25, -2000); // //Price rises to $50. // algo.Securities.Update(DateTime.Now, Update("MSFT", 50)); // //Now: 2000 * 50 = $0k Net Holdings, $50k Cash: $50k. MSFT is 0% of holdings. // var actual = algo.CalculateOrderQuantity("MSFT", -0.75m); // //Want to hold -75% of MSFT: 50k total, -37.5k / $50-share = -750 TOTAL. // // Currently -2000, so net order +1250. // Assert.AreEqual(1250, actual); //} //[Test] //public void SetHoldings_ShortToLong_PriceRise() //{ // var algo = GetAlgorithm(); // //Set price to $25 // algo.Securities.Update(DateTime.Now, Update("MSFT", 25)); // //Half cash spent on -2000 MSFT shares. // algo.Portfolio.SetCash(50000); // algo.Portfolio["MSFT"].SetHoldings(25, -2000); // //Price rises to $50. // algo.Securities.Update(DateTime.Now, Update("MSFT", 50)); // //Now: 2000 * 50 = $0k Net Holdings, $50k Cash: $50k. MSFT is 0% of holdings. // var actual = algo.CalculateOrderQuantity("MSFT", 0.5m); // //We want to be 50% long, this is currently +2000 holdings + 50% 50k = $25k/ $50-share=500 // Assert.AreEqual(2500, actual); //} private QCAlgorithm GetAlgorithm() { //Initialize algorithm var algo = new QCAlgorithm(); algo.AddSecurity(SecurityType.Equity, "MSFT"); algo.SetCash(100000); algo.Securities["MSFT"].TransactionModel = new ConstantFeeTransactionModel(0); return algo; }
public void SetHoldings_Short_RoundOff() { var algo = new QCAlgorithm(); algo.AddSecurity(SecurityType.Forex, "EURUSD"); algo.SetCash(100000); algo.SetBrokerageModel(BrokerageName.FxcmBrokerage); algo.Securities[Symbols.EURUSD].TransactionModel = new ConstantFeeTransactionModel(0); Security eurusd = algo.Securities[Symbols.EURUSD]; // Set Price to $26 Update(eurusd, 26); // So -100000/26 = -3846, After Rounding off becomes -3000 var actual = algo.CalculateOrderQuantity(Symbols.EURUSD, -1m); Assert.AreEqual(-3000m, actual); }