コード例 #1
0
        private async Task RunAccountsTest()
        {
            // Get Account List
            List <Account> result;

            if (Credentials.GetDefaultCredentials().IsSandbox)
            {
                result = await Rest.GetAccountListAsync(Credentials.GetDefaultCredentials().Username);
            }
            else
            {
                result = await Rest.GetAccountListAsync();
            }
            _results.Verify(result.Count > 0, "Accounts are returned");
            foreach (var account in result)
            {
                _results.Verify(VerifyDefaultData(account), "Checking account data for " + account.accountId);
                // Get Account Information
                var accountDetails = await Rest.GetAccountDetailsAsync(account.accountId);

                _results.Verify(VerifyAllData(accountDetails), "Checking account details data for " + account.accountId);
            }
        }
コード例 #2
0
        protected virtual async Task <int> TradeUnitsCapacity(string instrument, double entryPrice, double stopLossPrice, bool forOrderUpdate = false)
        {
            ApiOANDA.Account oandaAccount = await Rest.GetAccountDetailsAsync(_accountId);

            MarketMinerAccount account = new MarketMinerAccount(oandaAccount);

            List <Order> openOrders = await Rest.GetOrderListAsync(_accountId);

            if (!forOrderUpdate)
            {
                if (openOrders.FirstOrDefault(o => o.instrument == instrument) != null)
                {
                    return(MAC.Constants.MissedTradeReason.AccountOpenOrder);
                }
                //if (account.HasOpenOrders())
                //   return MAC.Constants.MissedTradeReason.AccountOpenOrder;
                //if (account.HasOpenTrades())
                //   return MAC.Constants.MissedTradeReason.AccountOpenTrade;
                if (!account.HasBalance())
                {
                    return(MAC.Constants.MissedTradeReason.AccountZeroBalance);
                }
                if (!account.HasMarginAvail())
                {
                    return(MAC.Constants.MissedTradeReason.AccountInsufficientMargin);
                }
            }

            #region How to compute trade risk

            /*
             * Example 1:
             * You see that the rate for EUR/USD is 0.9517/22 and decide to sell 10,000 EUR. Your trade is executed at 0.9517.
             * 10,000 EUR * 0.9517= 9,517.00 USD
             * You sold 10,000 EUR and bought 9,517.00 USD.
             * After you trade, the market rate of EUR/USD decreases to EUR/USD=0.9500/05. You then buy back 10,000 EUR at 0.9505.
             * 10,000 EUR *0.9505= 9,505.00 USD
             * You sold 10,000 EUR for 9,517 USD and bought 10,000 back for 9,505. The difference is your profit:
             * 9,517.00-9,505.00= $12.00 USD
             *
             * Example 2:
             * You see that the rate for USD/JPY is 115.00/05 and decide to buy 10,000 USD. Your trade is executed at 115.05.
             * 10,000 USD*115.05= 1,150,500 JPY
             * You bought 10,000 USD and sold 1,150,500 JPY.
             * The market rate of USD/JPY falls to 114.45/50. You decide to sell back 10,000 USD at 114.45.
             * 10,000 USD*114.45=1,144,500 JPY
             * You bought 10,000 USD for 1,150,500 JPY and sold 10,000 USD back for 1,144,500 JPY.
             * The difference is your loss and is calculated as follows:
             *    1,150,500-1,144,500= 6,000 JPY. Note that your loss is in JPY and must be converted back to dollars.
             * To calculate this amount in USD:
             * 6,000 JPY/ 114.45 = $52.42 USD or
             * 6,000 *1/114.45=$52.42
             */
            #endregion

            int    tradeUnits = 0;
            double balance, marginAvail, marginRate, maxVaR, perUnitVaR;

            double.TryParse(account.balance, out balance);
            double.TryParse(account.marginAvail, out marginAvail);
            double.TryParse(account.marginRate, out marginRate);

            maxVaR     = balance * Parameters.GetDouble("maxTradeValueAtRisk") ?? 0.01;
            perUnitVaR = GetPerUnitVaR(instrument, entryPrice, stopLossPrice);
            tradeUnits = Convert.ToInt32(maxVaR / perUnitVaR);

            return(tradeUnits);
        }