Mục lục

[TECHNICAL INSIGHTS] – ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)

Bài này mình sẽ tập trung phân tích các yếu tố cơ bản đến VNINDEX nhưng không giới hạn loại model sử dụng để đánh giá. Bên cạnh models, mình cũng sẽ test hiệu quả của việc labeling để tìm strategies.

Mục tiêu bài viết:

  • Sử dụng các thông tin cơ bản (P/E, P/B, …) để đánh giá ảnh hưởng tới VNINDEX và dự báo.
  • Tìm chiến lược trading phù hợp dựa trên các dữ liệu này.

Kết luận:

Phương pháp quan sát bằng mắt trong phần 1 để trade cơ bản có thể work được nhưng còn nhiều nghi ngờ với alpha!

Trading rules cụ thể:

  • Thời gian hold lệnh 5 – 10 ngày, tốt nhất là 10 ngày.
  • Z-score cho PE và PB đều là 3.0, signal sẽ là kết hợp của 1 trong 2 (cái nào bật công tắc là vào lệnh).
  • Strategy là trend following cho z-scores từ 0.0 – 3.0, mean-reversion cho z-scores dưới -3.0.
  • Các rules còn lại như bài trước.

Ghi chú:

  • Bài viết thuần túy về nhận định và phân tích cá nhân của mình dựa trên kiến thực hạn hẹp mà mình có, nên sẽ hơi chủ quan. Rất mong nhận được sự góp ý từ mọi người!
  • Ngôn ngữ viết bài giống văn nói thông thường, ít học thuật đôi lúc lõm bõm tiếng anh, hi vọng mọi người thông cảm cái này.
  • Dữ liệu sử dụng là được truy cập và tính toán từ thư viện vnstocks (http://vnstocks.com).
  • Tạm bỏ qua các phương pháp TimeseriesCV hoặc Walkforward testing, do đó các kết quả có thể sẽ có sự khác biệt nếu sử các phương pháp này (tuy nhiên theo kinh nghiệm của mình thì sẽ không nhiều đâu).
  • Phạm vi dữ liệu từ 2017 – nay cho VNINDEX.

Các thuật ngữ:

  • Sharpe Ratio: đo lường tỷ lệ lợi nhuận cho 1 đơn vị rủi ro, lợi nhuận là trung bình lợi nhuận (có thể điều chỉnh để về mức lợi nhuận cụ thể hơn, chẳng hạn trừ đi lãi suất phi rủi ro), rủi ro là độ lệch chuẩn của biến động. Theo mình Sharpe ratio thường từ 0.6 trở lên mới có thể coi là tàm tạm.
  • Sortino Ratio: tương tự như Sharpe ratio nhưng rủi ro ở đây chỉ đo lường các biến động giảm, nghĩa là đo lường độ lệch chuẩn của giá trị biến độ giảm. Như vậy tỷ lệ này sẽ tập trung vào lợi nhuận cho 1 đơn vị rủi ro biến động giảm. Theo mình Sortino Ratio phải từ 0.8 trở lên mới được gọi là ổn.
  • Calmar Ratio: cái này là tỷ lệ phục hồi từ 1 cú sụt, có thể coi là 1 chỉ số về sự hồi phục lợi nhuận, nên thường phải từ 100% trở lên mới gọi là an toàn.

I) QUAN SÁT CÁC YẾU TỐ CƠ BẢN

PE và PB là các yếu tố cơ bản được quan tâm khá nhiều trong trading và phân tích. Mình thấy cũng có rất nhiều nghiên cứu về đánh giá PE và PB rồi, nổi tiếng nhất có thể là mô hình Fama-French 5 nhân tố (chi tiết có thể tham khảo ở đây: (Fama & French, 2015). A five-factor asset pricing model) với 1 nhân tố là nghịch đảo của P/B. Tuy nhiên, ở đây mình sẽ tập trung vào tìm các strategies để có thể trade được với các chỉ số này.

Tương tự như bài trước, mình sẽ scan về ảnh hưởng của strategies bằng IC và sử dụng các outliers cũng từ bài trước, trước tiên cho PE và ra kết quả này:

[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)

Trong đó return ở đây là fw_ret_5 ngày (có p-value có ý nghĩa thống kê), cũng đồng nghĩa là mình có thể hold được lệnh tốt nhất trong 5 ngày. Chart trên cũng cho thấy mối quan hệ nghịch biến trong PE và return, PE càng to thì return có xu hướng càng bé (=]]). Ngoài ra có 1 hiện tượng “toe đuôi” khá phổ biến trong thống kê, cái này thì thường là vấn đề sách vở hay nói là phương sai thay đổi khi chuỗi returns không có tình dừng (nhức đầu quá). Vấn đề này thực ra rất đơn giản, đó là do returns của mình ước lượng là fw_ret_5 ngày tới, và nó sẽ bị chuỗi các ngày trước ảnh hưởng đến, đuôi sẽ toe dần ra. Ở đây mình chỉ quan sát mối quan hệ giữa chỉ báo và return để mining strategies, không cần tạo mô hình dự báo return, do đó không cần xử lý “khuyết tật” thống kê, hơn nữa là mình lười. Vậy nên kết quả hold lệnh trong 5 ngày như vậy có vẻ ổn rồi.

[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)

Với PB thì fw_ret_10 ngày sẽ có ý nghĩa thống kê hơn, tức là thời gian hold lên sẽ gấp đôi so với PE. Cả 2 charts đều cho thấy tương quan nghịch biến và 2 chỉ báo đều hội tụ cao ở vùng giá trị bên trái (positive skew) và toe dần về bên phải. Đặc biệt hơn, ở PB có vẻ như tồn tại cả 2 vùng phân phối giá trị khi có 2 đỉnh có điểm có mật độ phân bổ cao (đỉnh 1 tại PB ~ 2.5x và đỉnh 2 tại PB ~ 2.8x). Mình thấy có vẻ như có tồn tại 1 vấn đề về thay đổi trạng thái (regime switch) cho khoảng định giá của thị trường. Lúc này thì thị trường vẫn có thể biến động hoặc neo ở mức bình thường mặc dù PB đã tương đối cao —> Mean reversion strategy có thể không hoạt động tốt ở đây.

Lúc này thì mình đã rút ra 1 số vấn đề quan sát được:

  • Vấn đề 1: Thời gian hold lệnh sẽ từ 5 – 10 ngày nếu sử dụng cả 2 yếu tố này. Vậy bao nhiêu là hợp lý?
  • Vấn đề 2: Đọc chỉ báo như nào?
    • Có vẻ như có tồn tại mối quan hệ nào đó giữa 2 chỉ báo này và lợi nhuận, có thể là nghịch biến tương ứng chỉ báo càng tăng thì khả năng giá giảm càng cao (mean reversion?);
    • Tuy nhiên cũng có thể tồn tại 1 số khoảng thời gian định giá cao nhưng thị trường vẫn tiếp tục hoạt động ổn định và mean reversion có thể không work được trong nhưng vùng này (có thể trend following?).

Ok, đến đây thì mình sẽ có 1 số giải pháp để giải quyết các vấn đề trên:

  1. Sử dụng mắt để quan sát và lọc tín hiệu (=]]) kết hợp với PTKT truyền thống.
  2. Sử dụng 1 model Machine Learning (hay là ML :))) nào đó để đánh giá và lọc tín hiệu.

Mình sẽ làm cả 2 để xem cái nào tốt hơn (=]]). Trong phần 1 mình sẽ thí nghiệm trước với mục 1.

II) THÍ NGHIỆM

Quan sát và thực nghiệm

Flow đánh giá

Ok ở đây mình quan sát được mối quan hệ nghịch biến có vẻ tồn tại, mình sẽ chủ quan nhận định đây là tín hiệu theo trường phái lưỡng tính (cả mean reversion và trend following) và mình sẽ test để tìm threshold trade hợp lý cho các chỉ báo này theo flow của PTKT. Đây là flow mình đang hiểu theo CMTA đang áp dụng cho các nhà phân tích kỹ thuật. Nói thêm về flow này thì sẽ đơn giản:

Quan sát —> Signal testing (tìm strategy với khả năng tiên đoán cao nhất) —> Backtesting (kiểm tra lại kết quả trading simulation theo dữ liệu mới để xem hiệu quả giữa strategies trong thí nghiệm và thực tế).

Cần lưu ý là signal testing sẽ là đi tìm signal có khả năng trade tốt nhất, nó hoàn toàn khác với backtesting, cái chỉ là đánh giá kết quả theo signal theo 1 trường dữ liệu quá khứ.

Do dữ liệu yếu hơn so với lần trước (từ 2017 – nay), tệp train test sẽ được chia từ 01-01-2024 để có đánh giá đầy đủ hơn.

Biến đổi sơ bộ

Bằng quan sát sơ bộ ở trên, cả PB và PE có vẻ PB và PE có cả 2 tính chất trend following và mean reversion, nhưng mình chưa tìm được cách nhận diện tín hiệu theo dạng này. Để nhận diện nhanh, mình sẽ làm tắt bằng 1 cách đó là scaling lại giá trị theo đơn vị biến động hoặc còn gọi là tính z-score của 2 chỉ số này. Z-score này được tính đơn giản như sau:

Trong đó:

  • PE_mean: là Giá trị PE trung bình trượt, nôm na là PE Moving average 60 ngày.
  • PE_Std: là giá trị độ lệch chuẩn động của PE trong 60 ngày, cũng tương tự như PE mean nhưng không tính trung bình mà tính độ lệch chuẩn.

Tương tự mình cũng sẽ có cho PB công thức đó:

Sau khi biến đổi về z-score, thì phân phối sau biến đổi của PE và PB đã có dạng như phân phối này:

[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)

Có thể thấy vùng hội tụ đã tập trung về 1 khu vực nhiều hơn (vẫn nhiều đỉnh phết =]]). Do đó, sẽ giảm hiện tượng bị sai trong mean reversion signal, mình có thể chọn những vùng ít giá trị ngoại lai ở 2 đuôi của phân phối để xác định tín hiệu cho mean reversion được —> Mean reversion signal completed!

Đối với trend following signal, 1 cách lý thuyết, trend following sẽ tin tưởng rằng momentum (quán tính giá) trong quá khứ sẽ còn và sẽ tiếp tục kéo dài đến hiện tại. Một trong những cách cổ điển nhất để xác định trend following signal là giá trên đường MA, tức là giá trừ trung bình > 0. Khoan đã, giá trừ trung bình lớn hơn 0 là có phải là (PE – PE_mean) > 0 hay (PB – PB_mean) > 0. Vì rõ ràng, PB_std và PE_std dương nên nếu có quán tính thì cũng đồng nghĩa với z-score của PE và PB dương (keke quá khỏe, đỡ phải tính thêm). Vậy để xác định có trend following thì mình chỉ cần xem z-score > 0 là xong —> Trend following signal completed!

Trading execution: vì VN chỉ có Long Only cho cơ sở, vậy nên các điểm extremes của giá tăng mình không thể short được, vậy signal của mình sẽ bao gồm điểm:

  • Dip-Buying: mua từ đáy nếu có extreme signal từ trend giảm.
  • Trend-Following: mua từ vùng an toàn trên 0 và dưới vùng extreme của giá tăng.

Signal Testing

Bây giờ mình sẽ test các signal này để xem bộ nào hiệu quả nhất, bây giờ có 1 số vấn đề như này:

  • Vì giá trị ở đây là giá trị động, ở trên mình đang tạm giả định là 60 ngày (tức là 1 quý quan sát). Tuy nhiên, chưa chắc giá trị này có hiệu quả, vậy là phải test xem bao nhiêu là ngon. Mình sẽ test trong khoảng từ: 20 – 100 (01 – 05 tháng)
  • Để filter các điểm extreme cho mean reversion, mình cần biết là threshold bao nhiêu là hợp lý, quan sát từ vùng phân bổ của z_score ở trên, mình có thể thấy giá trị tuyệt đối của nó từ khoảng 0.0 – 4.0, bằng mắt thì mình xác định khoảng giá trị test dự kiến từ: 1.5 – 3.0

Ok, giờ test thử xem kết quả như nào:

Hold lệnh 5 ngày:

[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)
[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)
[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)

(trong đó: Approve có nghĩa là phải có tín hiệu từ cả PE và PB mới trade được, Any có nghĩa là 1 trong 2 chỉ báo có tín hiệu là có thể trade được)

Kết quả chỉ có Sharpe ổn, Sortino, và Calmar thấp.

Bây giờ sẽ thử với hold lệnh 10 ngày:

[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)
[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)
[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)

Kết quả test strategies với dữ liệu từ ngày 01-01-2020 trở về trước cho thấy:

  • Hold lệnh 10 ngày tốt hơn rất nhiều, Sharpe và Calmar cao hơn đáng kể, Sortino cải thiện yếu.
  • Vùng quan sát 20 ngày sẽ có giá trị sharpe, sortino và calmar tốt hơn.
  • Threshold phù hợp sẽ là 3.0 cho cả 2, đặc biệt sẽ cải thiện tốt hơn cho Sortino cho cả 2 khung thời gian hold lệnh.
  • Strategy sử kết hợp cả 2 chỉ báo sẽ có kết quả sortino cao nhất, sharpe nằm trong top 5 cái cao nhất, phương thức 1 trong 2 tín hiệu là vào lệnh.

Dựa vào đó, mình sẽ chọn strategy quan sát chỉ cả 2 chỉ báo trên với threshold tìm được là lần lượt là 3.0 cho z-score của PE và PB.

Backtesting

Kết quả cho backtesting strategy ở trên cụ thể như sau:

[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)

Strategy perform tương đối ổn định, với Sharpe, Sortino và Calmar tốt. Alpha hơi phập phù.

Vẽ lên xem như nào nào:

[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)

Cơ bản là có beat được BnH, tuy nhiên thì vẫn cần quan tâm mức độ biến động của alpha.

[TECHNICAL INSIGHTS] - ẢNH HƯỞNG CỦA CÁC YẾU TỐ CƠ BẢN TỚI VNINDEX (PHẦN 1)

Đánh giá:

Strategy cơ bản này cơ bản có thể work, tuy nhiên các thông số của alpha vẫn còn nhiều nghi ngờ !

Bài đến đây đã rất dài, hi vọng sẽ có ích cho mọi người, phần sau mình sẽ viết tiếp về dùng model ML để đánh giá tác động và tìm các trade cho 2 chỉ báo này.

Trân trọng cảm ơn mọi người đã đọc!

Nguyễn Lê Khánh

Khóa học Phân tích kỹ thuật – CMT Level 1

Khóa học được Green Chart thiết kế dành riêng cho các bạn thí sinh muốn học và ôn thi CMT cấp độ 1 tại Việt Nam. Nội dung chương trình học bao gồm 25 buổi học lý thuyết, luyện đề và thi thử. Học viên cũng được cung cấp miễn phí giáo trình, bộ câu hỏi và đề thi thử phục vụ cho quá trình ôn thi. Học lại miễn phí trọn đời khóa học.

Tham khảo thêm chi tiết về khóa học Tại đây.

Nullam quis risus eget urna mollis ornare vel eu leo. Aenean lacinia bibendum nulla sed