Skip to content

Commit

Permalink
Testing clean up & minor fix (#4)
Browse files Browse the repository at this point in the history
  • Loading branch information
Martin-Molinero authored Jul 18, 2024
1 parent 4030d2c commit a650870
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ private static IEnumerable<Symbol> QuoteSymbolParameters
TestGlobals.Initialize();
yield return Symbols.AAPL;
yield return Symbols.BTCUSD;
yield return Symbol.CreateOption(Symbols.AAPL, Symbols.AAPL.ID.Market, OptionStyle.American, OptionRight.Call, 5, new DateTime(2024, 06, 21));
yield return Symbol.CreateOption(Symbols.AAPL, Symbols.AAPL.ID.Market, OptionStyle.American, OptionRight.Call, 230, new DateTime(2024, 12, 20));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ private static TestCaseData[] TestParameters
new TestCaseData(Symbols.ETHUSD, Resolution.Tick, false),
new TestCaseData(Symbols.AAPL, Resolution.Minute, false),
new TestCaseData(Symbols.AAPL, Resolution.Second, false),
new TestCaseData(Symbol.CreateOption(Symbols.AAPL, Symbols.AAPL.ID.Market, OptionStyle.American, OptionRight.Call, 230, new DateTime(2024, 12, 20)), Resolution.Second, false),
new TestCaseData(Symbol.CreateOption(Symbols.AAPL, Symbols.AAPL.ID.Market, OptionStyle.American, OptionRight.Call, 230, new DateTime(2024, 12, 20)), Resolution.Second, false).Explicit("TODO"),
};
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@
*/

using NUnit.Framework;
using QuantConnect.Interfaces;
using QuantConnect.Util;
using QuantConnect.Interfaces;

namespace QuantConnect.Brokerages.Alpaca.Tests
{
[TestFixture, Ignore("This test requires a configured AlpacaBrokerageFactory")]
[TestFixture]
public class AlpacaBrokerageFactoryTests
{
[Test]
Expand Down
36 changes: 9 additions & 27 deletions QuantConnect.AlpacaBrokerage.Tests/AlpacaBrokerageTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ private static IEnumerable<TestCaseData> EquityOrderParameters
{
get
{
var EPU = Symbol.Create("EPU", SecurityType.Equity, Market.USA);
var EPU = Symbol.Create("AAPL", SecurityType.Equity, Market.USA);
yield return new TestCaseData(new MarketOrderTestParameters(EPU));
yield return new TestCaseData(new LimitOrderTestParameters(EPU, 40m, 30m));
yield return new TestCaseData(new StopMarketOrderTestParameters(EPU, 40m, 30m));
yield return new TestCaseData(new StopLimitOrderTestParameters(EPU, 40m, 30m));
yield return new TestCaseData(new LimitOrderTestParameters(EPU, 250m, 200m));
yield return new TestCaseData(new StopMarketOrderTestParameters(EPU, 250m, 200m));
yield return new TestCaseData(new StopLimitOrderTestParameters(EPU, 250m, 200m));
}
}

Expand All @@ -71,8 +71,10 @@ private static IEnumerable<TestCaseData> OptionOrderParameters
var option = Symbol.CreateOption(Symbols.AAPL, Symbols.AAPL.ID.Market, OptionStyle.American, OptionRight.Call, 230, new DateTime(2024, 12, 20));
yield return new TestCaseData(new MarketOrderTestParameters(option));
yield return new TestCaseData(new LimitOrderTestParameters(option, 20m, 10m));
yield return new TestCaseData(new StopMarketOrderTestParameters(option, 20m, 10m));
yield return new TestCaseData(new StopLimitOrderTestParameters(option, 20m, 10m));

// see https://docs.alpaca.markets/docs/options-trading-overview
yield return new TestCaseData(new StopMarketOrderTestParameters(option, 20m, 10m)).Explicit("Not supported by alpaca");
yield return new TestCaseData(new StopLimitOrderTestParameters(option, 20m, 10m)).Explicit("Not supported by alpaca");
}
}

Expand All @@ -90,7 +92,7 @@ private static IEnumerable<TestCaseData> CryptoOrderParameters
}
}

[Test, TestCaseSource(nameof(OptionOrderParameters))]
[Test, TestCaseSource(nameof(EquityOrderParameters))]
public override void CancelOrders(OrderTestParameters parameters)
{
base.CancelOrders(parameters);
Expand Down Expand Up @@ -168,39 +170,19 @@ public override void ShortFromZero(OrderTestParameters parameters)
base.ShortFromZero(parameters);
}

[Test, TestCaseSource(nameof(OptionOrderParameters))]
public void ShortFromZeroOption(OrderTestParameters parameters)
{
base.ShortFromZero(parameters);
}

[Test, TestCaseSource(nameof(CryptoOrderParameters))]
public void ShortFromZeroCrypto(OrderTestParameters parameters)
{
base.ShortFromZero(parameters);
}

[Test, TestCaseSource(nameof(EquityOrderParameters))]
public override void CloseFromShort(OrderTestParameters parameters)
{
base.CloseFromShort(parameters);
}

[Test, TestCaseSource(nameof(OptionOrderParameters))]
public void CloseFromShortOption(OrderTestParameters parameters)
{
base.CloseFromShort(parameters);
}

[Test, TestCaseSource(nameof(EquityOrderParameters))]
[Explicit("Not supported: Different side position if we have bought 1 quantity we can not sell more then 1")]
public override void ShortFromLong(OrderTestParameters parameters)
{
base.ShortFromLong(parameters);
}

[Test, TestCaseSource(nameof(EquityOrderParameters))]
[Explicit("Not supported: Different side position if we have sold -1 quantity we can not bought more then 1")]
public override void LongFromShort(OrderTestParameters parameters)
{
base.LongFromShort(parameters);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ private IEnumerable<BaseData> GetOptionHistory(HistoryRequest request, string br
var alpacaRequest = new HistoricalOptionBarsRequest(brokerageSymbol, request.StartTimeUtc, request.EndTimeUtc, request.Resolution.ConvertLeanResolutionToAlpacaBarTimeFrame());
return GetGenericHistoricalTradeBar(request, brokerageSymbol, _optionsHistoricalDataClient, alpacaRequest);
case TickType.OpenInterest:
// TODO
// TODO: not supported by alpaca
default:
return null;
}
Expand Down
2 changes: 1 addition & 1 deletion QuantConnect.AlpacaBrokerage/AlpacaBrokerage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ public override bool UpdateOrder(Order order)
}

var brokerageOrderId = order.BrokerId.Last();
var pathOrderRequest = new ChangeOrderRequest(new Guid(brokerageOrderId)) { Quantity = Convert.ToInt64(orderQuantity) };
var pathOrderRequest = new ChangeOrderRequest(new Guid(brokerageOrderId)) { Quantity = Convert.ToInt64(Math.Abs(orderQuantity)) };

switch (order)
{
Expand Down
24 changes: 22 additions & 2 deletions QuantConnect.AlpacaBrokerage/AlpacaBrokerageExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,17 @@ private static AlpacaMarket.OrderBase CreateAlpacaSellOrder(this Order order, st
var trailOffset = tso.TrailingAsPercentage ? AlpacaMarket.TrailOffset.InPercent(tso.TrailingAmount) : AlpacaMarket.TrailOffset.InDollars(tso.TrailingAmount);
return AlpacaMarket.TrailingStopOrder.Sell(brokerageSymbol, quantity, trailOffset);
case OrderType.Limit:
return AlpacaMarket.LimitOrder.Sell(brokerageSymbol, quantity, ((LimitOrder)order).LimitPrice);
decimal limitPrice;
if (order is StopLimitOrder stopLimitOrder)
{
// for cross zero, second part of StopLimit is converted to limit, see 'CrossZeroSecondOrderRequest'
limitPrice = stopLimitOrder.LimitPrice;
}
else
{
limitPrice = ((LimitOrder)order).LimitPrice;
}
return AlpacaMarket.LimitOrder.Sell(brokerageSymbol, quantity, limitPrice);
case OrderType.StopMarket:
return AlpacaMarket.StopOrder.Sell(brokerageSymbol, quantity, ((StopMarketOrder)order).StopPrice);
case OrderType.StopLimit:
Expand Down Expand Up @@ -101,7 +111,17 @@ private static AlpacaMarket.OrderBase CreateAlpacaBuyOrder(this Order order, str
var trailOffset = tso.TrailingAsPercentage ? AlpacaMarket.TrailOffset.InPercent(tso.TrailingAmount) : AlpacaMarket.TrailOffset.InDollars(tso.TrailingAmount);
return AlpacaMarket.TrailingStopOrder.Buy(brokerageSymbol, quantity, trailOffset);
case OrderType.Limit:
return AlpacaMarket.LimitOrder.Buy(brokerageSymbol, quantity, ((LimitOrder)order).LimitPrice);
decimal limitPrice;
if (order is StopLimitOrder stopLimitOrder)
{
// for cross zero, second part of StopLimit is converted to limit, see 'CrossZeroSecondOrderRequest'
limitPrice = stopLimitOrder.LimitPrice;
}
else
{
limitPrice = ((LimitOrder)order).LimitPrice;
}
return AlpacaMarket.LimitOrder.Buy(brokerageSymbol, quantity, limitPrice);
case OrderType.StopMarket:
return AlpacaMarket.StopOrder.Buy(brokerageSymbol, quantity, ((StopMarketOrder)order).StopPrice);
case OrderType.StopLimit:
Expand Down

0 comments on commit a650870

Please sign in to comment.