Tuesday, October 31, 2023

Linkedin learning | Algorithmic Trading and Stocks Essential Training

Linkedin learning | Finance Foundations

Linkedin learning | Behavioral Finance Foundations Behavioral finance and the stock market

Trading Psychology: What it is and Importance | Investopedia

 Overcoming cognitive biases and mitigating emotional biases are key for sustainable trading

Trading and investment psychology as well as behavioral finance have evolved over the years, driven by advances in psychology, economics, and technology. Initially, the conversation amongst market participants, traders and financial theorists surrounded the idea of the Efficient Market Hypothesis (EMH), where it was assumed that individuals were rational beings and that the financial markets were efficient.1


Then, in the 1970s, Prospect Theory was introduced. This challenged the rationality assumption and highlighted the role of biases in decision making. Further along the timeline, in the 1990s, behavioral finance emerged. This was a recognition that investors, traders and individuals in general are prone to cognitive and emotional biases as well as heuristics that affect their investment decisions.23


SABR stock | Morningstar analysis report | August 2023

 Sabre's financial health was tested in 2020, as lower demand from COVID-19 and higher incremental investment into new markets and the cloud, caused its near-term net debt/adjusted EBITDA to breach covenants. While Sabre's net debt/adjusted EBITDA ended 2019 at 3.1 times, it turned negative in 2020 and 2021, and was at an elevated 60 times ratio in 2022 as EBITDA was barely positive. Sabre's liquidity profile remains under duress, as a simmering U.S. regional banking crisis and slowing economic growth keep credit costs high and the pace of corporate travel recovery uncertain. To this point, Sabre recently raised $700 million private tender at 16% payment-in-kind rates, which was used to pay 2025 maturing debt. We expect Sabre's net debt/adjusted EBITDA to improve to 7.5 times in 2024, followed by 3.9 in 2025. The company's EBIT/interest coverage was 2.3 times in 2019 and is expected to surpass that level by 2028. We project free cash flow generation of $1.6 billion during 2023-27.

Steven Anthony Ballmer

 Steven Anthony Ballmer (/ˈbɔːlmər/; March 24, 1956)[1] is an American billionaire businessman and investor who served as the chief executive officer of Microsoft from 2000 to 2014.[1] He is the owner of the Los Angeles Clippers of the National Basketball Association (NBA). As of October 2023, Bloomberg Billionaires Index estimates his personal wealth at around $115 billion, making him the fifth-richest person in the world.[2]

Ballmer was hired by Bill Gates at Microsoft in 1980, and subsequently left the MBA program at Stanford University. He eventually became president in 1998, and replaced Gates as CEO on January 13, 2000.[3][4] On February 4, 2014, Ballmer retired as CEO and was replaced by Satya Nadella; Ballmer remained on Microsoft's Board of Directors until August 19, 2014, when he left to prepare for teaching a new class.[5][6]

His tenure as Microsoft CEO is widely viewed as mixed. The company tripled sales and doubled profits, but lost its market dominance and missed out on 21st-century technology trends such as the ascendance of smartphones in the forms of iPhone and Android.[7][8][9]

His ownership of the Clippers has generally been well-received. Players and sportswriters consider him a marked improvement over previous owner Donald Sterling, citing his enthusiasm for the team as well as his willingness to spend large amounts of money to acquire superstar players and finance the construction of Intuit Dome.[10][11]

微软前CEO鲍尔默超越盖茨,也是NBA球队老板

 IT之家 10 月 31 日消息,微软创始人比尔.盖茨的前助理、微软前 CEO 史蒂夫.鲍尔默(Steve Ballmer)现在已经成为世界上最富有的人之一,其财富可能很快就会超过这位世界著名的微软联合创始人和他的前老板。

据彭博亿万富翁指数显示,鲍尔默今年的财富增长了约 290 亿美元,达到了 1150 亿美元(IT之家备注:当前约 8418 亿元人民币),排名全球第五。他现在仅比盖茨(排名第四,拥有 1210 亿美元)少 60 亿美元,而三个月前,他们之间的差距还有 170 亿美元。鲍尔默目前比拉里.埃里森(1140 亿美元)、沃伦.巴菲特(1110 亿美元)、拉里.佩奇(1100 亿美元)、马克.扎克伯格(1080 亿美元)和谢尔盖.布林(1050 亿美元)都要富有。
鲍尔默于 1980 年加入微软担任总裁助理,不过他更像是一名业务经理而不是个人助理。他最初的工资是 5 万美元的基本工资加上他所创造的利润增长的 10%,后来他的利润分成过高,他同意用一笔可观的股权来交换。
作为盖茨的亲信,鲍尔默逐步晋升为微软的首席执行官,并于 2014 年退休。根据监管文件显示,他退休时拥有 3.33 亿股(或 4%)微软的股份。彭博假设他保留了大部分股份,根据微软目前的股价计算,他的持股价值超过 1000 亿美元。多年来,他还可能收到了数十亿美元的股息。
鲍尔默今年的财富之所以飙升,部分原因是人工智能的热潮推动了微软股价的上涨,其股价在过去 10 个月里上涨了 38%。
IT之家注意到,在彭博富豪榜上排名前十位的人中,鲍尔默是一个特例。埃隆.马斯克、贝尔纳.阿诺特、杰夫.贝索斯等人都是凭借自己创立或仍然经营的公司的股份而致富的,而鲍尔默既不是微软的创始人也不是现任首席执行官。
如果他能超过盖茨,那么这将是一个非常罕见的情况,即一名员工最终比他所在公司的创始人更富有。

Monday, October 30, 2023

PROCURIFY CLOSES $68-MILLION CAD SERIES C TO INVEST IN AI, GLOBAL EXPANSION OF SPEND MANAGEMENT PLATFORM

 Ten Coves Capital, EDC join existing backers Information VP, HarbourVest.

Vancouver-based spend management and procurement software startup Procurify has secured more than $68 million CAD ($50 million USD) in Series C funding.

The all-equity, all-primary round closed in the summer and was led by United States-based FinTech investor Ten Coves Capital and included a co-investment from fellow new investor Export Development Canada. It also saw participation from existing Procurify backers like Toronto’s Information Venture Partners and Boston-based HarbourVest Partners.

Procurify’s Series A round comes over four years after the company closed $26 million CAD in Series B financing. This latest capital brings Procurify’s total funding to more than $95 million. Procurify plans to use the funding to fuel its global expansion, roll out new payment capabilities, and strengthen its core procure-to-pay platform with artificial intelligence (AI).

Founded in 2013, Procurify aims to take some of the pain out of enterprise procurement. The company sells an all-in-one intelligent spend management platform to mid-market organizations. Procurify’s solution combines purchasing, accounts payable automation, and data analytics into a single platform. Today, Procurify helps hundreds of customers across dozens of industries manage more than $40 billion CAD in global spending, with a list of clients that includes Questrade, SkipTheDishes, Hootsuite, and Asana.

“Understanding how money exits the company is just as crucial as tracking the money flowing in,” Procurify co-founder and CEO Aman Mann said in a statement. “Not only do we want our customers around the globe to spend wisely and grow during the best of times, we also want them to leverage responsible spend practices to thrive during the worst of times.”

A Procurify spokesperson declined to disclose Procurify’s exact valuation as part of its Series C funding to BetaKit but claimed that it was “a significant up round” compared to its previous financing.

Within the procurement software space, Procurify’s competitors include incumbents like Coupa and SAP Ariba, enterprise resource management software solutions that have procurement features, such as NetSuite, as well as other tech startups, like Precoro and Zip. Compared to the competition, the company spokesperson claimed that Procurify offers “the most complete, affordable, and user-friendly solution for mid-market organizations.”

Ten Coves Capital invests in high-growth B2B software companies across the FinTech ecosystem. In addition to Procurify, the Connecticut-based growth equity firm’s Canadian portfolio also includes Q4 Inc7shiftsTealBookTouchBistro, and Versapay.

According to the Procurify spokesperson, the pandemic brought some tailwinds for Procurify, including an acceleration in digital transformation efforts as it highlighted the need for cost savings, efficiency, and better risk management.

Amid a tough economic environment, Procurify claimed that the demand for its tech has grown and the firm has seen a 100 percent year-over-year increase in new sales, all while the startup has managed to avoid layoffs and grow to 171 employees.

Steve Lula, partner at Ten Coves Capital, is joining Procurify’s board as part of the round. In a statement, Lula cited Procurify’s performance during these challenging market conditions as evidence of the need for intelligent spend management solutions.

According to Lula, Procurify’s expertise in procurement, coupled with its plan to roll out enhanced payment offerings and use AI to offer data-driven predictive insights, position the startup “to shape and lead the future of the procure-to-pay market.”

While Procurify already has hundreds of customers worldwide, the startup sees room to continue to expand and deepen its global presence in Europe and the Oceania markets.

UPDATE (10/17/23): This story was updated to note responses from a Procurify spokesperson.

Suncor stock | 2020 | My youtube.com video

Here is the link. 

166 views Oct 3, 2020

  1. Suncor might go to $10/ share? I did not know what was bottom? $1800 dollar loss, 1000 shares in 2020. $20.29, $18/ share.
  2. 10 year saving $60,000 Canadian dollars, invested on Canadian oil stocks. 
  3. I tried to listen the videos a few times first, and then take some notes here. 
  4. There is no perfect solution for short term investor. Only way is to bet on 3 year return. Get in and then leave in the market for 3 years. 

Leetcode | Tree algorithm | Unsolved 40 algorithms | What to learn?

Oct. 30, 2023


2049. Count Nodes With the Highest Score

Here is the discussion post. 

Here is the gist. 

Intuition

I am review unsolved 40 medium level tree algorithms, and then I came cross this algorithm. I thought about the solution for near 10 minutes, and then I decided to study only C# solution shared.

Approach

Here are highlights:

  1. Build a graph using hashmap, C# Dictionary class
  2. Define three variables inside the class
  3. Apply DFS to calculate the score
  4. Write a test case for example 1, and debug through the code

I did not come out the idea by myself, so I took extra time to test the following test cases:

  1. int[]{-1}, analysis: maxScore = 1, number of nodes = 1
  2. int[]{-1, 0}, analysis: maxScore = 1, but number of nodes is 2; Remove 0 or remove 1
  3. int{-1, 0, 0}, analysis: maxScore = 2, and number of nodes is 2, remove 1 or remove 2.
  4. int[]{-1, 2, 0, 2, 0}, result: 3
        static void Main(string[] args)
        {
            var test = new Solution();

            var result1 = test.CountHighestScoreNodes(new int[]{-1});  // 1
            var result2 = test.CountHighestScoreNodes(new int[]{-1,0}); // maxScore = 1, but number of nodes is 2; two cases, remove 0, remove 1
            var result3 = test.CountHighestScoreNodes(new int[]{-1, 0, 0}); // maxScore = 2, and number of nodes is 2

            var result4 = test.CountHighestScoreNodes(new int[]{-1, 2, 0, 2, 0}); 
        }

Complexity

  • Time complexity:

O(N), N is total number of nodes in the tree. Apply post order traversal once.

  • Space complexity:

Code

public class Solution {
    Dictionary<int, int[]> children = new Dictionary<int, int[]>();
        long maxScore = 0;
        int  numberNodes = 0;
        
    public int CountHighestScoreNodes(int[] parents)
        {
            int n = parents.Length;
            var lstParents = new List<int>(parents);

            // build a graph based on parents - left or right child - does not matter
            for (int i = 0; i < parents.Length; i++)
            {
                var childNodes = new int[] { -1, -1 };

                // two children
                // 
                var parentNode = parents[i];

                if (children.ContainsKey(parentNode))
                {
                    children[parentNode][1] = i;
                }
                else
                {
                    childNodes[0] = i;
                    children.Add(parentNode, childNodes);
                }
            }

            // Extra - no children 
            // Leaf node 
            for (int i = 0; i < parents.Length; i++)
            {
                var arr = new int[] { -1, -1 };

                if (!children.ContainsKey(i))
                {
                    children.Add(i, arr);
                }
            }

            countNodesDFS(0, n);
            return numberNodes;
        }

        /// <summary>   
        /// Return number of nodes that have the highest score
        /// node's value from 0 to n - 1
        /// </summary>
        /// <param name="root"></param>
        /// <param name="n"></param>
        /// <returns></returns>
        private long countNodesDFS(int root, int n)
        {
            long score = 0;
            long subtreeCount = 0;

            if (root == -1)
            {
                return 0;
            }

            long leftCount = countNodesDFS(children[root][0], n);
            long rightCount = countNodesDFS(children[root][1], n);

            subtreeCount = leftCount + rightCount + 1;
            long remain = n - subtreeCount;
            
            score = (leftCount == 0 ? 1 : leftCount) * (rightCount == 0 ? 1 : rightCount);
            score *= remain == 0 ? 1 : remain;

            if (score > maxScore)
            {
                maxScore = score;
                numberNodes = 1;
            }
            else if (score == maxScore)
            {
                numberNodes++;
            }

            return subtreeCount;
        }        
}