public void SetUp()
        {
            LaunchSettingsFixture.SetupEnvVars();
            _config = new ConfigurationBuilder()
                      .AddJsonFile($"appsettings.json", true, true)
                      .AddEnvironmentVariables()
                      .Build();

            _trackingConfig = _config.Get <TrackingConfig>();

            var alpacaConfig = _config.Get <AlpacaConfig>();
            var env          = alpacaConfig.Alpaca_Use_Live_Api ? Environments.Live : Environments.Paper;
            var key          = new SecretKey(alpacaConfig.Alpaca_App_Id, alpacaConfig.Alpaca_Secret_Key);

            _alpacaClient = new AlpacaClient(
                env.GetAlpacaTradingClient(key),
                env.GetAlpacaStreamingClient(key),
                env.GetAlpacaDataClient(key),
                env.GetAlpacaDataStreamingClient(key)
                );

            _mockAlpacaClient = new Mock <IAlpacaClient>();
            _mockAlpacaClient.Setup(x => x.GetTotalEquity()).ReturnsAsync(TOTAL_EQUITY);

            _context          = new StockContext();
            _initStockContext = new InitStockContext(Mock.Of <ILogger <InitStockContext> >(), _context);
            _initStockContext.StartAsync(default).Wait();
 public Strategy(IAlpacaClient alpacaClient)
 {
     _alpacaClient = alpacaClient;
     MoneyTracker  = new MoneyTracker
     {
         CostOfLastPosition = 0,
         MoneyMade          = 0
     };
 }
        public void SetUp()
        {
            LaunchSettingsFixture.SetupEnvVars();
            _config = new ConfigurationBuilder()
                      .AddJsonFile($"appsettings.json", true, true)
                      .AddEnvironmentVariables()
                      .Build();

            _alpacaClient     = new AlpacaClient(_config.Get <AlpacaConfig>());
            _mockAlpacaClient = new Mock <IAlpacaClient>();
        }
 public ScheduledTrader(
     ILogger <ScheduledTrader> logger,
     ITrackingRepository trackingRepository,
     IAlpacaClient alpacaClient,
     IEnumerable <StrategyHandler> strategies)
 {
     _logger             = logger ?? throw new ArgumentNullException(nameof(logger));
     _trackingRepository = trackingRepository ?? throw new ArgumentNullException(nameof(trackingRepository));
     _alpacaClient       = alpacaClient ?? throw new ArgumentNullException(nameof(alpacaClient));
     _strategies         = strategies?.Where(x => x.StockStrategy.TradingFrequency != Domain.TradingFrequency.Minute) ?? throw new ArgumentNullException(nameof(strategies));
 }
 public StartStreamingTrader(
     ILogger <StartStreamingTrader> logger,
     IAlpacaClient alpacaClient,
     IEnumerable <StrategyHandler> strategies,
     ITrackingRepository trackingRepository
     )
 {
     _logger             = logger ?? throw new ArgumentNullException(nameof(logger));
     _alpacaClient       = alpacaClient ?? throw new ArgumentNullException(nameof(alpacaClient));
     _strategies         = strategies ?? throw new ArgumentNullException(nameof(strategies));
     _trackingRepository = trackingRepository ?? throw new ArgumentNullException(nameof(trackingRepository));
 }
Esempio n. 6
0
 public ReconcileStockData(
     ILogger <ReconcileStockData> logger,
     IAlpacaClient alpacaClient,
     IEnumerable <StrategyHandler> strategies,
     ITrackingRepository trackingRepository
     )
 {
     _logger             = logger ?? throw new ArgumentNullException(nameof(logger));
     _alpacaClient       = alpacaClient ?? throw new ArgumentNullException(nameof(alpacaClient));
     _strategies         = strategies ?? throw new ArgumentNullException(nameof(strategies));
     _trackingRepository = trackingRepository ?? throw new ArgumentNullException(nameof(trackingRepository));
 }
        public StrategyHandler(
            ILogger <StrategyHandler> logger,
            IAlpacaClient alpacaClient,
            ITrackingRepository trackingRepository,
            IStrategy strategy,
            TradingFrequency frequency,
            decimal percentageOfEquityToAllocate,
            string stockSymbol)
        {
            _logger                       = logger ?? throw new ArgumentNullException(nameof(logger));
            _alpacaClient                 = alpacaClient ?? throw new ArgumentException(nameof(alpacaClient));
            _trackingRepository           = trackingRepository ?? throw new ArgumentException(nameof(trackingRepository));
            _strategy                     = strategy ?? throw new ArgumentException(nameof(strategy));
            _tradingFrequency             = frequency;
            _percentageOfEquityToAllocate = percentageOfEquityToAllocate;
            _stockSymbol                  = stockSymbol;

            HistoricalData = new List <StockInput>();
        }
    private static async Task AutoTradeStocks(IAlpacaClient alpacaClient, StockConfig stockConfig, MLConfig mlConfig)
    {
        if ((stockConfig.Stock_List?.Count ?? 0) == 0)
        {
            throw new ArgumentException("You must pass an least one valid stock symbol", nameof(stockConfig));
        }

        var strategies = new List <Strategy>()
        {
            new MeanReversionStrategy(alpacaClient),
            new MLStrategy(alpacaClient, mlConfig),
            new MicrotrendStrategy(alpacaClient),
            //new NewsStrategy(alpacaClient, config.Get<NewsSearchConfig>()),
        };

        var strategy = strategies
                       .SingleOrDefault(x => string.Equals(x.GetType().Name, stockConfig.Stock_Strategy, StringComparison.OrdinalIgnoreCase));

        if (strategy == null)
        {
            throw new ArgumentException($"Could not find any strategies with the name '{stockConfig.Stock_Strategy}'", nameof(stockConfig));
        }

        if (!await alpacaClient.ConnectStreamApi())
        {
            throw new UnauthorizedAccessException("Failed to connect to streaming API. Authorization failed.");
        }

        foreach (var stockSymbol in stockConfig.Stock_List)
        {
            var stockData = await alpacaClient.GetStockData(stockSymbol);

            if ((stockData?.Count ?? 0) == 0)
            {
                throw new ArgumentException($"You stock symbol {stockSymbol} is not valid.", nameof(stockConfig));
            }

            strategy.HistoricalData = stockData;
            alpacaClient.SubscribeMinuteAgg(stockSymbol, async y => await strategy.HandleMinuteAgg(y));
        }
    }
Esempio n. 9
0
 public async Task SellStocks(string sym, int quantity, decimal price, IAlpacaClient alpaca)
 {
     await alpaca.AlpacaClientTrading().PostOrderAsync(sym, quantity, OrderSide.Sell, OrderType.Limit,
                                                       TimeInForce.Day, price);
 }
 public MLStrategy(IAlpacaClient client, MLConfig config) : base(client)
 {
     _config = config;
 }
 public NewsStrategy(IAlpacaClient client, NewsSearchConfig config) : base(client)
 {
     _config     = config;
     _lastReturn = false;
 }
 public MicrotrendStrategy(IAlpacaClient client) : base(client)
 {
 }
 public AccountController(IAlpacaClient alpacaClient)
 {
     _alpacaClient = alpacaClient;
 }
 public MeanReversionStrategy(IAlpacaClient client) : base(client)
 {
 }
 public AssestsController(IAlpacaClient alpacaClient)
 {
     _alpacaClient = alpacaClient;
 }