Saturday, March 19, 2022

中概股“跌麻了”!

 

中概股“跌麻了”!超30股自高位跌超90%,市值缩水6万亿!芒格去年底已“抄底”,桥水、景林也出手…

胡华雄 证券时报 2022-03-12 21:50





近日中概股又经历了新一轮下跌风暴。从2021年初以来,中概股总体累计跌幅巨大,不少个股累计跌幅已超过90%,粗略推算,中概公司从2021年高位的市值累计缩水超过1万亿美元(折合人民币超6.3万亿元)。

在大幅下挫后,如何看待其中的机会和风险,机构动向和观点如何看?

中概股经历新一轮下跌 不少个股自去年高位跌超90%

3月11日,滴滴暴跌44%,雾芯科技暴跌36%,在此之前的3月10日,逸仙电商暴跌39.5%,贝壳暴跌23.9%,爱奇艺暴跌近22%。近日中概股又经历了新一轮下跌。

总的来看,从2021年开始,中概股经历了多轮下跌,总体跌势惨烈,不少个股累计跌幅惊人。

据Wind数据统计口径,目前272只在美上市的中资民营股中,2021年以来合计有244只股票股价出现下跌,占比约九成,这里面有178股累计跌幅超过50%,占比接近2/3,其中31股累计跌幅超过90%,占比超一成。

如果统计2021年以来自最高位以来的最大跌幅,调整幅度还要更大一些。

一些规模较大的中概公司期间累计跌幅也十分惊人,比如拼多多、贝壳、滴滴出行、爱奇艺2021年以来累计跌幅均已超过80%。目前市值仍超过10亿美元的中概公司中,好未来、雾芯科技、新东方、新蛋、金山云、涂鸦智能、滴滴出行、爱奇艺等公司2021年以来自高位的最大跌幅均已超过90%。

随着股价的大幅下跌,在美上市的中概股市值也大幅缩水。根据Wind粗略统计发现,自2021年高位以来,在美国上市的中概民营公司总市值累计缩水已超过1万亿美元(折合人民币超6.3万亿)。

大幅调整后 机构这样看

中概股此轮调整烈度和累计调整幅度,已堪比21世纪初期美股科网股泡沫破灭之时。

21世纪初,在美上市的中国科网股跌幅也非常惊人,多只个股阶段累计跌幅也超过了90%。当时中概科网股泡沫破灭,有盈利前景不明,商业模式尚未跑通的因素,此外,当时也出台一些监管政策。

2000年9月,国务院发布《中华人民共和国电信条例》。同日,国务院公布施行《互联网信息服务管理办法》。

管理办法发出一个月的时间里,新浪股价下跌超过50%,网易、搜狐股价也大幅下挫,此后股价在低位波动了一年多。但事后发现,这一段时间成为了上述多家公司历史股价的最低谷,股价迎来爆发式上涨。

最近美国证监会(简称SEC)将5家中国公司列入《外国公司问责法》(简称HFCAA)的暂定清单,也影响到中概股整体表现,加剧了相关股票的下跌。

针对美国证监会(SEC)据《外国公司问责法》认定了五家在美上市公司为有退市风险的“相关发行人”,中国证监会对此进行了回应。

中国证监会表示,我们注意到了这个情况。这是美国监管部门执行《外国公司问责法》及相关实施细则的一个正常步骤。我们此前已经多次就《外国公司问责法》的实施表明过态度。我们尊重境外监管机构为提高上市公司财务信息质量加强对相关会计师事务所的监管,但坚决反对一些势力将证券监管政治化的错误做法。我们始终坚持开放合作精神,愿意通过监管合作解决美方监管部门对相关事务所开展检查和调查问题,这也符合国际通行的做法。

中国证监会表示,近一段时间,中国证监会和财政部持续与美国公众公司会计监督委员会(PCAOB)开展沟通对话,并取得积极进展。我们相信,双方通过共同努力一定能够尽快作出符合两国法律规定和监管要求的合作安排,共同保护全球投资者合法权益,促进两国市场健康稳定发展。

华泰证券的研究观点认为,2021 年中国互联网板块监管趋严在短期内对板块估值及业绩产生了压力,但监管并非旨在限制互联网发展,而是为互联网长期可持续发展提供更清晰指引。该机构认为,监管相关影响已较充分反映在中概互联网板块当前的估值与业绩。展望 2022 年及行业长期发展趋势,华泰证券认为,中概互联网板块将着力于新的增长点(企业互联网、出海扩张、下沉市场等),驱动业绩增长重新加速。国务院 2022 年 1 月正式公布中国数字经济方面首部国家级专项规划《“十四五”数字经济发展规划》,明确了政策对于数字经济和互联网相关产业的扶持态度。在合规前提下,互联网行业有望实现长期可持续的盈利增长。

机构去年末加仓中概股

在股价自2021年大幅调整后,一些海内外机构对于中概公司出现一些抄底动作,比如“股神”巴菲特的搭档芒格就在2021连续多个季度加仓阿里巴巴。自去年一季度起,芒格旗下的Daily Journal持续建仓阿里。截至去年9月底,Daily Journal持有约30.2万股阿里美股ADS,较6月底持仓大增约13.6万股,持仓股份大增逾八成。至四季度,持仓量达到了60万股,较9月底翻倍。

高瓴旗下HHLR Advisors此前公布的2021年末美股持仓数据显示,高瓴HHLR的投资团队在四季度继续加码新能源,其中对理想汽车进行了大手笔的加仓,增持392万股至500.73万股,持有市值达1.6亿美元。这使得理想汽车首次进入了HHLR美股持仓的十大重仓股行列。不过,与此同时,高瓴HHLR的投资团队在去年四季度还清仓了阿里巴巴和B站。同时遭高瓴大幅减持的还有拼多多,拼多多的持股量由281万股减至21.3万股,退出十大重仓股之列。

针对上述互联网巨头的调仓,高瓴给出的解释为:自2018年起陆续对哔哩哔哩、拼多多建仓,截至2021年四季度末,上述两家公司股价录得较大涨幅,因此进行了调仓。

桥水操则相反,其在去年四季度加仓阿里、京东和拼多多,加仓幅度分别为29%、33%和38%,小幅减持理想汽车。

此外,景林在去年四季度也逆势加仓多家中国互联网龙头公司。其中,增持拼多多70.46万股至271万股,期末持股市值1.58亿美元;增持京东51.02万股至126.54万股,期末持股市值1.58亿美元;增持BOSS直聘74.4万股,期末持股市值升至0.72亿美元。


Friday, March 18, 2022

DIDI stock: 5 days over 100% gain | March 18 over 60% gain | 90% loss from $18 to $1.8 in 2021

 March 18, 2022

Introduction

I like to start to work on DIDI stock again, and also I like to take time to learn and also invest DIDI stocks as well. 

Here is the article. 

Didi shares plunge more than 20% on plan to delist from NYSE

 and 

China stocks in NYSE: big loss before March 17, 2022

 March 18, 2022

Introduction

I am a 55 year old single Chinese. I like to make some money on Chinese stocks and then I have chance to spend them when I travel in China, short future after pandemic. 

Stocks | Big loss | Before March 17, 2022

Yahoo -> Finance -> Portfolio





Leetcode profile -> Leetcode solutions to study

 https://www.linkedin.com/in/dhairyadhondiyal/

https://leetcode.com/PhoenixDD/

Leetcode algorithms: Google engineer | solutions written by votrubac

March 18, 2022

Introduction

It is tough to find time to practice Leetcode algorithms. I only have less than 200 submissions last 12 months, so I decide to go over the solutions written by the top voted engineer - Google engineer, and read those top voted solutions, so I can quickly review as many algorithms as possible this weekend. 

100 algorithms to review | Top talented Leetcode profile |  https://leetcode.com/votrubac/

Vlad Trubachov Linkedin profile is here. 



Leetcode: Learn from this profile

 https://leetcode.com/Just__a__Visitor/

I like to read carefully this profile's discuss post. His solutions won most votes. 

Here is one of discuss links. 

1525. Number of Good Ways to Split a String


Thursday, March 17, 2022

Leetcode discuss: 15. 3Sum

 March 17, 2022

Here is the link.

C# | Time complexity O(N^2) | Use HashSet<int>

March 17, 2022
Introduction
I just like to study C# code using HashSet to find the third number, and I wrote C# code and reviewed the solution.

Time complexity O(N^2) | Remove duplicate triplet
It is easy to come out the idea to remove duplicate, but the implementation is hard to figure out if in rush.

The following C# code passes online judge.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _15_3_sum___hashset
{
    class Program
    {
        static void Main(string[] args)
        {
            /* Example 1
            Input: nums = [-1,0,1,2,-1,-4]
            Output: [[-1,-1,2],[-1,0,1]]
            */
            var test = ThreeSum(new int[] { -1, 0, 1, 2, -1, -4 });
            Debug.Assert(string.Join(",", test[0]).CompareTo("-1,-1,2") == 0 || string.Join(",", test[0]).CompareTo("-1,0,1") == 0);
        }

        /// <summary>
        /// March 17, 2022
        /// study code
        /// https://leetcode.com/problems/3sum/discuss/7543/15-lines-C-code-o(n2)
        /// </summary>
        /// <param name="nums"></param>
        /// <returns></returns>
        public static IList<IList<int>> ThreeSum(int[] nums)
        {
            // Four steps: 
            // 1. sort
            // 2. pick 2th
            // 3. hash find next
            // 4. skip - remove duplicate
            var result = new List<IList<int>>();

            if (nums == null || nums.Length == 0)
            {
                return result;
            }

            var length = nums.Length;
            Array.Sort(nums);

            var set = new HashSet<int>(nums);

            for (var i = 0; i < length - 2; i++)
            {
                var first = nums[i];

                // step 4: skip to remove duplicate
                if (i > 0 && first == nums[i - 1])
                {
                    continue;
                }

                for (var j = i + 1; j < length - 1; j++)
                {
                    var second = nums[j];

                    // step 4: skip to remove duplicate
                    if (j > i + 1 && second == nums[j - 1])
                    {
                        continue;
                    }

                    var target = 0 - first - second;

                    if (target > nums[j] && set.Contains(target))
                    {
                        result.Add(new[] { first, second, target });
                    }
                    else if (target == second && nums[j + 1] == target)  // hard to figure out 
                    {
                        result.Add(new[] { first, target, target });
                    }
                }
            }

            return result;
        }
    }
}

Leetcode discuss: 15. 3Sum

 March 17, 2022

Here is the link. 

C# | Time complexity O(N^2) | Remove duplicate by sorting, no use of HashSet<string>

March 17, 2022
Introduction
It is such great experience to learn a new approach to remove duplicate without using a HashSet. I quickly learned C# code and wrote my own practice.

Sort the array first | Compare to one side neighbor to skip duplicate
It is simple and easy to remove duplicate just by comparing to the neighbor node with same value.

The following C# code passes online judge.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _15_3_sum___no_hashset
{
    class Program
    {
        static void Main(string[] args)
        {
            /* Example 1
            Input: nums = [-1,0,1,2,-1,-4]
            Output: [[-1,-1,2],[-1,0,1]]
            */
            var test = ThreeSum(new int[] { -1, 0, 1, 2, -1, -4 });
            Debug.Assert(string.Join(",", test[0]).CompareTo("-1,-1,2") == 0 || string.Join(",", test[0]).CompareTo("-1,0,1") == 0);
        }

        /// <summary>
        /// March 17, 2022
        /// study code
        /// https://leetcode.com/problems/3sum/discuss/578188/C-solution
        /// </summary>
        /// <param name="nums"></param>
        /// <returns></returns>
        public static IList<IList<int>> ThreeSum(int[] nums)
        {
            var result = new List<IList<int>>();
            if (nums == null || nums.Length < 3)
            {
                return result;
            }

            Array.Sort(nums);

            for (int i = 0; i < nums.Length - 2; i++)
            {
                var current = nums[i];

                // If nums[i] > 0, we can't find a valid triplet, since nums is sorted 
                // and nums[i] the smallest number.
                // To avoid duplicate triplets, we should skip nums[i] if nums[i] == nums[i-1]
                if (current > 0 || (i > 0 && current == nums[i - 1]))
                {
                    continue;
                }

                var left = i + 1;
                var right = nums.Length - 1;

                while (left < right)
                {
                    var threeSum = current + nums[left] + nums[right];

                    if (threeSum == 0)
                    {
                        result.Add(new List<int>() { nums[i], nums[left], nums[right] });
                        left++;
                        right--;

                        while (left < right && nums[left] == nums[left - 1])
                        {
                            left++;
                        }

                        while (left < right && nums[right] == nums[right + 1])
                        {
                            right--;
                        }
                    }
                    else if (threeSum > 0)
                    {
                        right--;
                    }
                    else
                    {
                        left++;
                    }
                }
            }

            return result;
        }
    }
}

Leetcode discuss: 18. 4Sum

 March 17, 2022

Here is the link.

C# | Sorting, sliding window, skip duplicate | Time: O(N^3)

March 17, 2022
Introduction
I did review last five year my few practice, and I chose to study one discuss post without using HashSet, extra space to remove duplicate entries.

C# code | sliding window | Skip duplicate
I did review the discuss post and chose to study and write my own code.

The following C# code passes online judge.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _4_sum
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
            Input: nums = [1,0,-1,0,-2,2], target = 0
            Output: [[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
            */
            var result = FourSum(new int[] { 1, 0, -1, 0, -2, 2 }, 0);
            var s = string.Join(",", result[0]);
            Debug.Assert(s.CompareTo("-2,-1,1,2") == 0 ||
                s.CompareTo("-2,0,0,2") == 0 ||
                s.CompareTo("-1,0,0,1") == 0);
        }

        /// <summary>
        /// code study on March 17, 2022
        /// https://leetcode.com/problems/4sum/discuss/278435/C-same-as-3SUM
        /// 
        /// </summary>
        /// <param name="nums"></param>
        /// <param name="target"></param>
        /// <returns></returns>
        public static IList<IList<int>> FourSum(int[] nums, int target)
        {
            var length = nums.Length;

            Array.Sort(nums);

            var result = new List<IList<int>>();

            for (int i = 0; i < length; i++)
            {
                var first = nums[i];

                // first number: skip first number to remove duplicate 4 numbers
                if (i > 0 && nums[i - 1] == first)
                {
                    continue;
                }

                for (int j = i + 1; j < length; j++)
                {
                    var second = nums[j];
                    // second number: skip to remove duplicate 4 numbers if it is not the first one in the for loop
                    if (j > i + 1 && nums[j - 1] == second)
                    {
                        continue;
                    }

                    // Last two: using two pointer technique - sliding window O(N) time
                    var left  = j + 1;
                    var right = length - 1;

                    while (left < right)
                    { 
                        var sum = first + second + nums[left] + nums[right];
                        if (sum == target)
                        {
                            result.Add(new List<int>() { first, second, nums[left], nums[right] });

                            // third number: skip to remove duplicate
                            while (left < right && nums[left] == nums[left + 1])
                            {
                                left++;
                            }

                            // fourth number: skip to remove duplicate
                            while (left < right && nums[right] == nums[right - 1])
                            {
                                right--;
                            }

                            left++;
                            right--;
                        }
                        else if (sum < target)
                        {
                            left++;
                        }
                        else
                        {
                            right--;
                        }
                    }
                }
            }

            return result;
        }
    }
}

10 facts about Leetcode algorithm practice

March 17, 2022

Introduction

I spent over months to practice Leetcode algorithms, even though I only have less than 200 submission last few months. I did learn something important as a software programmer, so I like to write 10 facts about Leetcode algorithm practice. 

10 facts about Leetcode algorithm practice

I think that there are so many reasons I did not practice so often in 2021, since I had less than 200 submissions in 2021, compared to Dr. Lai, who has over 1500 submissions. 

  1. Every software programmer has a dream, write code for a billion of people to use, like Gmail, Youtube.com; 
  2. Practice Leetcode algorithms is the way to train ourselves, work hard, be patient, get to details;
  3. Focus on basic algorithms, like Leetcode 15, three sum, and simple things like array - subarray, sequence
  4. There are always excellent code to read shared by others no matter what algorithm to work on
  5. Learn some new programming language, take some time to try Python
  6. Document my learning experience, I can tell that I can perform better compared to the submission I have five years ago.
  7. Work hard is possible. I start to work on research, find a book to follow written by AI research Li Yan
  8. I start to think more algorithms, take evening time to work on a few algorithms
  9. It is not hard for me to find good ideas to try, copy the idea and convert code into C#
  10. I have more experience to deal with weight gain, after 100 algorithm practice, I will take breaks, run another 10K, and play a few hours to let my body to recover