private void ExecuteTransaction(Transaction transaction)
        {
            transaction.Succeeded = false;
            transaction.Error     = "No execution";

            // notify transaction status
            _strategy.NotifyTransactionStatus(transaction);
        }
Beispiel #2
0
        private bool ExecuteTransaction(Transaction transaction, bool notifyTransactionStatus, bool forcibly = false)
        {
            string error;

            CompletedTransaction completedTransaction;
            var succeeded = _equityManager.ExecuteTransaction(
                transaction,
                _settings.AllowNegativeCapital,
                out completedTransaction,
                out error,
                forcibly);

            if (!succeeded)
            {
                if (transaction.Action == TradingAction.OpenLong)
                {
                    // HACK: try to adjust volume to reduce money used and make transaction succeeded.
                    var volume = (int)((double)transaction.Volume / 1.1);
                    volume -= volume % 100;

                    if (volume > 0)
                    {
                        transaction.Volume = volume;
                        succeeded          = _equityManager.ExecuteTransaction(
                            transaction,
                            _settings.AllowNegativeCapital,
                            out completedTransaction,
                            out error);
                    }
                }
            }

            transaction.Succeeded = succeeded;
            transaction.Error     = error;

            if (notifyTransactionStatus)
            {
                // notify transaction status
                _strategy.NotifyTransactionStatus(transaction);
            }

            // add to history
            _tradingTracker.AddTransaction(transaction);
            if (completedTransaction != null)
            {
                _tradingTracker.AddCompletedTransaction(completedTransaction);
            }

            // log transaction
            _context.Log(transaction.Print());

            return(succeeded);
        }