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); } }
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); }