public static async Task InitializeAccountMenu(IOandaApiConnection connection)
        {
            var selection = -1;

            while (selection != 0)
            {
                // Print out menu header
                Console.Clear();
                Console.WriteLine("===========");
                Console.WriteLine("= Account =");
                Console.WriteLine("===========");
                Console.WriteLine("1) All accounts");
                Console.WriteLine("2) Specific account");
                Console.WriteLine("0) Go back to the Main Menu");

                // Wait for the user selection
                Console.WriteLine("");
                Console.Write("Please input the menupoint: ");
                selection = Utilities.TryParseIntegerValue(Console.ReadLine(), 0, 2);

                // Show submenu details based on the selection
                switch (selection)
                {
                case 1:
                    ShowAllAccounts(connection);
                    break;

                case 2:
                    await ShowOneAccountSelector(connection);

                    break;
                }
            }
        }
        private static async Task ShowOneAccountMenu(IOandaApiConnection connection, string selectedAccountId)
        {
            var selection = -1;

            while (selection != 0)
            {
                // Print out menu header
                Console.Clear();
                Console.WriteLine("==================================");
                Console.WriteLine($"= Account '{selectedAccountId}' =");
                Console.WriteLine("==================================");
                Console.WriteLine("1) Account details");
                Console.WriteLine("2) Trading");
                Console.WriteLine("0) Go back to the Main Menu");

                // Wait for the user selection
                Console.WriteLine("");
                Console.Write("Please input the menupoint: ");
                selection = Utilities.TryParseIntegerValue(Console.ReadLine(), 0, 2);

                // Show submenu details based on the selection
                switch (selection)
                {
                case 1:
                    await ShowOneAccountDetails(connection, selectedAccountId);

                    break;

                case 2:
                    await TradeMenu.InitializeTradeMenu(connection, selectedAccountId);

                    break;
                }
            }
        }
        private static async Task ShowOneAccountSelector(IOandaApiConnection connection)
        {
            var selection = -1;

            while (selection != 0)
            {
                // Print out menu header
                Console.Clear();
                Console.WriteLine("====================");
                Console.WriteLine("= Specific account =");
                Console.WriteLine("====================");

                // Print out accounts as menu points
                var accounts = connection.GetAccounts();
                foreach (var account in accounts.Select((content, index) => new { index = index + 1, content }))
                {
                    Console.WriteLine($"{account.index}) {account.content.Id}");
                }

                // Add exit menu point
                Console.WriteLine("0) Exit");

                // Wait for user selection
                Console.WriteLine("");
                Console.Write("Please select an account: ");
                selection = Utilities.TryParseIntegerValue(Console.ReadLine(), 0, Convert.ToInt32(accounts.Count()));

                // Handle selection
                if (selection != 0)
                {
                    await ShowOneAccountMenu(connection, accounts.ElementAt(selection - 1).Id);
                }
            }
        }
Beispiel #4
0
        public static async Task InitializeInstrumentMenu(IOandaApiConnection connection)
        {
            var selection = -1;

            while (selection != 0)
            {
                // Print out menu header
                Console.Clear();
                Console.WriteLine("==============");
                Console.WriteLine("= Instrument =");
                Console.WriteLine("==============");
                Console.WriteLine("1) Instrument candles");
                Console.WriteLine("0) Go back to the Main Menu");

                // Wait for the user selection
                Console.WriteLine("");
                Console.Write("Please input the menupoint: ");
                selection = Utilities.TryParseIntegerValue(Console.ReadLine(), 0, 1);

                // Show submenu details based on the selection
                switch (selection)
                {
                case 1:
                    await ShowInstrumentCandles(connection);

                    break;
                }
            }
        }
        public static async Task InitializeMainMenu(IOandaApiConnection connection)
        {
            var selection = -1;

            while (selection != 0)
            {
                Console.Clear();
                Console.WriteLine("=============");
                Console.WriteLine("= Main menu =");
                Console.WriteLine("=============");
                Console.WriteLine("1) Account");
                Console.WriteLine("2) Instrument");
                Console.WriteLine("0) Exit");

                Console.WriteLine("");
                Console.Write("Please input the menupoint: ");

                selection = Utilities.TryParseIntegerValue(Console.ReadLine(), 0, 2);

                switch (selection)
                {
                case 1:
                    await AccountMenu.InitializeAccountMenu(connection);

                    break;

                case 2:
                    await InstrumentMenu.InitializeInstrumentMenu(connection);

                    break;
                }
            }
        }
        public static async Task InitializeTradeMenu(IOandaApiConnection connection, string selectedAccountId)
        {
            var selection = -1;

            while (selection != 0)
            {
                // Print out menu header
                Console.Clear();
                Console.WriteLine("=========");
                Console.WriteLine("= Trade =");
                Console.WriteLine("=========");
                Console.WriteLine("1) Open trades");
                Console.WriteLine("2) Open new trade");
                Console.WriteLine("0) Go back to the Account Menu");

                // Wait for the user selection
                Console.WriteLine("");
                Console.Write("Please input the menupoint: ");
                selection = Utilities.TryParseIntegerValue(Console.ReadLine(), 0, 2);

                // Show submenu details based on the selection
                switch (selection)
                {
                case 1:
                    await ShowOpenTrade(connection, selectedAccountId);

                    break;

                case 2:
                    await ShowOpenNewTrade(connection, selectedAccountId);

                    break;
                }
            }
        }
        public static IOandaApiConnection InitializeApiConnection()
        {
            IOandaApiConnection connection = null;

            while (connection == null)
            {
                try
                {
                    Console.WriteLine("==========================");
                    Console.WriteLine("= Connect to OANDA's API =");
                    Console.WriteLine("==========================");
                    Console.WriteLine("");
                    var server = ServerSelector();
                    var token  = InputToken();
                    connection = new OandaApiConnectionFactory().CreateConnection(server, token);
                }
                catch (ApiException ae)
                {
                    Console.WriteLine($"Failed to initialize connection. Exception message: {ae.Message}. Please double check that the server and the access token are correct.");
                    Console.WriteLine("");
                }
            }

            return(connection);
        }
        private static async Task ShowOneAccountDetails(IOandaApiConnection connection, string selectedAccountId)
        {
            Console.Clear();
            Console.WriteLine("==========================================");
            Console.WriteLine($"= Account '{selectedAccountId}' details =");
            Console.WriteLine("==========================================");
            Console.WriteLine("");

            // Load details for the selected accounts
            var accountDetails = await connection.GetAccount(selectedAccountId).GetDetailsAsync();

            Console.WriteLine(JToken.Parse(accountDetails.ToJson()));
            Console.WriteLine("");

            // Wait for a keypress to go back to menu selector
            Console.WriteLine("Press any key to continue");
            Console.ReadKey();
        }
        private static void ShowAllAccounts(IOandaApiConnection connection)
        {
            // Print out menu header
            Console.Clear();
            Console.WriteLine("================");
            Console.WriteLine("= All accounts =");
            Console.WriteLine("================");
            Console.WriteLine("");

            // Collect and print out accounts
            var accounts = connection.GetAccounts();

            foreach (var account in accounts)
            {
                Console.WriteLine(JToken.Parse(account.ToJson()));
                Console.WriteLine("");
            }

            // Wait for a keypress to go back to menu selector
            Console.WriteLine("Press any key to continue");
            Console.ReadKey();
        }
        private static async Task ShowOpenTrade(IOandaApiConnection connection, string selectedAccountId)
        {
            // Print out menu header
            Console.Clear();
            Console.WriteLine("===============");
            Console.WriteLine("= Open trades =");
            Console.WriteLine("===============");
            Console.WriteLine("");

            // Collect and print out open trades for the account
            var trades = await connection.GetAccount(selectedAccountId).Trades.GetOpenTradesAsync();

            foreach (var trade in trades)
            {
                Console.WriteLine(JToken.Parse(trade.ToJson()));
                Console.WriteLine("");
            }

            // Wait for a keypress to go back to menu selector
            Console.WriteLine("Press any key to continue");
            Console.ReadKey();
        }
Beispiel #11
0
 /// <summary>
 /// Instrument constructor to setup the connection and instrument name
 /// </summary>
 /// <param name="connection">The Oanda API connection</param>
 /// <param name="instrument">The instrument name</param>
 public Instrument(IOandaApiConnection connection, InstrumentName instrument)
 {
     _connection = connection;
     _instrument = instrument;
 }
Beispiel #12
0
 /// <summary>
 /// Trades constructor to initialize the connection and accountId
 /// </summary>
 /// <param name="connection">The Oanda API connection</param>
 /// <param name="accountId">The account id within the connection</param>
 public Trades(IOandaApiConnection connection, string accountId)
 {
     _connection = connection;
     _accountId  = accountId;
 }
Beispiel #13
0
 /// <summary>
 /// Account implementation constructor
 /// Sets up the connection.
 /// </summary>
 /// <param name="connection">The Oanda API connection</param>
 /// <param name="accountId">The account ID</param>
 public Account(IOandaApiConnection connection, string accountId)
 {
     _connection = connection;
     _accountId  = accountId;
     Trades      = new Trades(_connection, _accountId);
 }
Beispiel #14
0
        private static async Task ShowInstrumentCandles(IOandaApiConnection connection)
        {
            // Print out menu header
            Console.Clear();
            Console.WriteLine("======================");
            Console.WriteLine("= Instrument candles =");
            Console.WriteLine("======================");
            Console.WriteLine("");

            // Let the user select from instruments
            Console.WriteLine("Please select the instrument");
            Console.WriteLine("-----------------------------");
            var availableInstruments = Enum.GetValues(typeof(InstrumentName)).Cast <InstrumentName>().ToList();

            foreach (var instrument in availableInstruments.Select((name, index) => new { index = index + 1, name }))
            {
                Console.WriteLine($"{instrument.index}) {instrument.name}");
            }
            Console.WriteLine("");
            Console.Write("Selected instrument: ");
            var selectedInstrument = Utilities.TryParseIntegerValue(Console.ReadLine(), 1, Convert.ToInt32(availableInstruments.Count));

            Console.WriteLine("");

            // Let the user select the candle granularity
            Console.WriteLine("Please select the candle granularity");
            Console.WriteLine("-------------------------------------");
            var availableGranularities = Enum.GetValues(typeof(CandlestickGranularity)).Cast <CandlestickGranularity>().ToList();

            foreach (var granularity in availableGranularities.Select((name, index) => new { index = index + 1, name }))
            {
                Console.WriteLine($"{granularity.index}) {granularity.name}");
            }
            Console.WriteLine("");
            Console.Write("Selected granularity: ");
            var selectedGranularity = Utilities.TryParseIntegerValue(Console.ReadLine(), 1, Convert.ToInt32(availableGranularities.Count));

            Console.WriteLine("");

            // Let the user input how many days to show
            Console.WriteLine("Please input how many days to show");
            Console.WriteLine("-----------------------------------");
            Console.Write("Days (max 5000 candlestick will be shown): ");
            var selectedDays = Utilities.TryParseIntegerValue(Console.ReadLine(), 1);

            Console.WriteLine("");

            // Load details for the instrument
            var candles = await connection
                          .GetInstrument(availableInstruments.ElementAt(selectedInstrument - 1))
                          .GetCandlesByTimeAsync(availableGranularities.ElementAt(selectedGranularity - 1), DateTime.UtcNow.AddDays(selectedDays * -1), DateTime.UtcNow);

            Console.WriteLine("Candles");
            Console.WriteLine("---------------------------------");
            Console.WriteLine("");
            Console.WriteLine(JToken.Parse(
                                  new CandlesResponse(
                                      availableInstruments.ElementAt(selectedInstrument - 1),
                                      availableGranularities.ElementAt(selectedGranularity - 1),
                                      candles as List <Candlestick>).ToJson()
                                  )
                              );
            Console.WriteLine("");

            // Wait for a keypress to go back to menu selector
            Console.WriteLine("Press any key to continue");
            Console.ReadKey();
        }
        private static async Task ShowOpenNewTrade(IOandaApiConnection connection, string selectedAccountId)
        {
            // Print out menu header
            Console.Clear();
            Console.WriteLine("==================");
            Console.WriteLine("= Open new trade =");
            Console.WriteLine("==================");
            Console.WriteLine("");

            // Let the user select from instruments
            Console.WriteLine("Please select the instrument");
            Console.WriteLine("-----------------------------");
            var availableInstruments = Enum.GetValues(typeof(InstrumentName)).Cast <InstrumentName>().ToList();

            foreach (var instrument in availableInstruments.Select((name, index) => new { index = index + 1, name }))
            {
                Console.WriteLine($"{instrument.index}) {instrument.name}");
            }
            Console.WriteLine("");
            Console.Write("Selected instrument: ");
            var selectedInstrument = Utilities.TryParseIntegerValue(Console.ReadLine(), 1, Convert.ToInt32(availableInstruments.Count));

            Console.WriteLine("");

            // Let the user input how many units to trade
            Console.WriteLine("Please input how many units to trade");
            Console.WriteLine("-------------------------------------");
            Console.Write("Number of units to trade: ");
            var unitsToTrade = Utilities.TryParseIntegerValue(Console.ReadLine());

            Console.WriteLine("");

            // Let the user select from the trade directions
            Console.WriteLine("Please select the direction");
            Console.WriteLine("----------------------------");
            var availableDirections = Enum.GetValues(typeof(TradeDirection)).Cast <TradeDirection>().ToList();

            foreach (var direction in availableDirections.Select((name, index) => new { index = index + 1, name }))
            {
                Console.WriteLine($"{direction.index}) {direction.name}");
            }
            Console.WriteLine("");
            Console.Write("Selected direction: ");
            var selectedDirection = Utilities.TryParseIntegerValue(Console.ReadLine(), 1, Convert.ToInt32(availableDirections.Count));

            Console.WriteLine("");

            // Let the user input how many units to trade
            Console.WriteLine("Lease input how far the trailing stop loss should be");
            Console.WriteLine("-----------------------------------------------------");
            Console.Write("Trailing stop loss in PIPs: ");
            var trailingStopLossInPips = Utilities.TryParseIntegerValue(Console.ReadLine(), 1);

            Console.WriteLine("");

            var tradeOpenResponse = await connection.GetAccount(selectedAccountId).Trades.OpenTradeAsync(
                availableInstruments.ElementAt(selectedInstrument - 1),
                availableDirections.ElementAt(selectedDirection - 1),
                unitsToTrade,
                trailingStopLossInPips
                );
        }