Ejemplo n.º 1
0
        // used for determining capital requirement during initial load
        public static TWMargins MarginData(string accountNumber)
        {
            SetHeaders(Token);
            string reply = Web.DownloadString("https://api.tastyworks.com/margin/accounts/" + accountNumber);

            JObject package = JObject.Parse(reply);

            List <JToken> list = package["data"]["underlyings"].Children().ToList();

            TWMargins retval = new TWMargins();

            foreach (JToken item in list)
            {
                TWMargin mar = new TWMargin();
                mar.Symbol             = item["underlying-symbol"].ToString();
                mar.CapitalRequirement = Convert.ToDecimal(item["maintenance-requirement"]);
                retval.Add(mar.Symbol, mar);
            }

            return(retval);
        }
Ejemplo n.º 2
0
        public static void Load(Accounts accounts)
        {
            try
            {
                // establish db connection
                App.OpenConnection();

                if (TastyWorks.InitiateSession(Config.GetEncryptedProp("Username"), Config.GetEncryptedProp("Password")))
                {
                    // cache the current positions for details required to establish default risk and capreq
                    twpositions = new Dictionary <string, TWPositions>();
                    twMarginReq = new Dictionary <string, TWMargins>();
                    foreach (Account a in accounts)
                    {
                        if (a.Active)
                        {
                            // retrieve Tastyworks positions for given account
                            TWPositions pos = TastyWorks.Positions(a.ID);
                            twpositions.Add(a.ID, pos);

                            TWMargins mar = TastyWorks.MarginData(a.ID);
                            twMarginReq.Add(a.ID, mar);
                        }
                    }

                    // proceed with transactions from all accounts
                    foreach (Account a in accounts)
                    {
                        if (a.Active)
                        {
                            Debug.WriteLine(a.ID);

                            // retrieve Tastyworks transactions for the past month
                            TWTransactions transactions = TastyWorks.Transactions(a.ID, DateTime.Today.AddDays(-30), null);

                            SaveTransactions(transactions);  // transfer transaction array to database

                            // save latest transaction for next upload
                            SQLiteCommand cmd = new SQLiteCommand("SELECT max(time) FROM transactions WHERE Account = @ac", App.ConnStr);
                            cmd.Parameters.AddWithValue("ac", a.ID);
                            SQLiteDataReader rdr      = cmd.ExecuteReader();
                            string           propName = "LastDate-" + a.ID;
                            if (rdr.Read())
                            {
                                Config.SetProp(propName, rdr[0].ToString());
                            }
                        }
                    }

                    UpdateNewTransactions();  // matches unassociated asignments and exercises
                }
                else
                {
                    MessageBox.Show("Login to TastyWorks failed", "Error");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR DataLoader: " + ex.Message);
                MessageBox.Show(ex.Message, "Sync Error");
            }
        }