Sử dụng chiến lược đa yếu tố để xây dựng danh mục đầu tư tài sản crypto mạnh mẽ#Phân tích yếu tố danh mục lớn: Tổng hợp yếu tố#

Bài viết này được dịch máy
Xem bản gốc

Tiếp nối chương trước, chúng tôi đã xuất bản ba bài trong sê-ri bài về "Xây dựng danh mục đầu tư tài sản crypto mạnh mẽ bằng mô hình đa yếu tố": "Cơ sở lý thuyết cơ bản" , "Tiền xử lý dữ liệu""Kiểm tra tính hợp lệ của yếu tố" .

Ba bài viết đầu tiên giải thích lý thuyết về chiến lược đa yếu tố và các bước thử nghiệm một yếu tố tương ứng.

1. Lý do kiểm định tương quan nhân tố: đa cộng tuyến

Chúng tôi sàng lọc một loạt các yếu tố hiệu quả thông qua thử nghiệm một yếu tố, nhưng các yếu tố trên không thể nhập trực tiếp vào cơ sở dữ liệu. Bản thân các yếu tố có thể được chia thành các loại lớn theo ý nghĩa kinh tế cụ thể. Có mối tương quan chặt chẽ giữa các yếu tố cùng loại nếu chúng được nhập trực tiếp vào cơ sở dữ liệu mà không cần sàng lọc tương quan và thực hiện hồi quy tuyến tính bội để tính tỷ suất lợi nhuận kỳ vọng. tùy thuộc vào các yếu tố khác nhau sẽ xảy ra hiện tượng đa cộng tuyến. Trong kinh tế lượng, đa cộng tuyến có nghĩa là một số hoặc tất cả các biến giải thích trong mô hình hồi quy có mối quan hệ tuyến tính "hoàn chỉnh" hoặc chính xác (tương quan cao giữa các biến).

Vì vậy, sau khi sàng lọc các yếu tố hiệu quả, trước tiên cần tiến hành kiểm định T về mối tương quan của các yếu tố theo loại chính. Đối với các yếu tố có độ tương quan cao hơn thì loại bỏ các yếu tố có ý nghĩa thấp hơn hoặc thực hiện tổng hợp yếu tố.

Giải thích toán học về đa cộng tuyến như sau:

$$$ Y = β₁ + β₂X₂ᵢ + β₃X₃ᵢ + ... + βₖXₖᵢ + μᵢ , i = 1,2,...,n $$$

Sẽ có hai tình huống:

1.$$C₂X₂ᵢ + C₃X₃ᵢ + … + CₖXₖᵢ = vectơ không đổi $$, $$ Cᵢ$$ không phải tất cả $$0→Xᵢ$$ hoàn toàn thẳng hàng

2.$$C₂X₂ᵢ + C₃X₃ᵢ + … + CₖXₖᵢ + Vᵢ = vectơ hằng số $$, $$Cᵢ$$ không phải là tất cả 0, $$Vᵢ$$ là một thuật ngữ lỗi ngẫu nhiên và có sự cộng tuyến hoàn toàn giữa $$→Xᵢ $$

Hậu quả của đa cộng tuyến:

1. Công cụ ước tính tham số không tồn tại trong điều kiện cộng tuyến hoàn hảo

2. Công cụ ước tính OLS không hợp lệ trong trường hợp cộng tuyến gần đúng

Trước tiên, chúng tôi xác định hệ số tăng phương sai (VIF) là $$VIF=1 / (1 - rᵢⱼ)$$ , có nghĩa là phương sai của công cụ ước tính tham số bị tăng cao do đa cộng tuyến Khi Hệ số tương quan tăng, VIF tăng đáng kể. .

Lấy mô hình tuyến tính nhị phân làm ví dụ: $$Y = β₁ + β₂X₂ᵢ + β₃X₃ᵢ + μᵢ$$

$$$ var(β₂) = (σ²/ΣX²₂)·(1/(1-r²₂₃)) $$$

$$$ Tổng bình phương của hệ Hệ số tương quan r²₂₃=(ΣX₂ᵢX₃ᵢ)²/ ΣX²₂ᵢΣX²₃ᵢ ≤ 1 $$$

$$$ 1/(1-r²₂₃) ≥ 1 $$$

  • Hoàn toàn không cộng tuyến (hoàn toàn không tương quan): $$r²₂₃ = 0 → var(β₂) = σ²/ΣX²₂$$

  • Gần như thẳng hàng: $$0<r²₂₃<1 → var(β₂) = (σ²/ΣX²₂)·(1/(1-r²₂₃)) > σ²/ΣX²₂, càng gần 1, phương sai ↑$$

  • Hoàn toàn thẳng hàng: $$r²₂₃ = 1 → var(β₂) = ∞, phương sai là vô hạn$$

3. Ý nghĩa kinh tế của công cụ ước lượng tham số là không hợp lý

4. Kiểm định mức ý nghĩa (t test) của biến mất ý nghĩa

5. Chức năng dự đoán của mô hình không thành công: tỷ suất lợi nhuận dự đoán được trang bị bởi mô hình tuyến tính đa biến là cực kỳ không chính xác và mô hình không thành công.

2. Bước 1: Kiểm định tương quan các yếu tố cùng loại

Kiểm tra mối tương quan giữa các hệ số mới tính toán và các hệ số đã có trong cơ sở dữ liệu. Nói chung, có hai loại dữ liệu tương quan:

1. Tính toán mối tương quan dựa trên giá trị hệ số của tất cả các token trong giai đoạn backtest

2. Tính toán mối tương quan dựa trên giá trị lợi nhuận vượt quá hệ số của tất cả các token trong giai đoạn backtest

$$$ lợi nhuận vượt quá = lợi nhuận nhóm dài - lợi nhuận chuẩn, lợi nhuận= ln(closeₜ / closeₜ ₋₁) $$$

Mỗi yếu tố chúng tôi tìm kiếm đều có sự đóng góp và khả năng giải thích nhất định đối với tỷ suất lợi nhuận của mã thông báo. Mục đích của việc tiến hành kiểm tra tương quan** là tìm ra các yếu tố có cách giải thích và đóng góp khác nhau cho lợi nhuận của chiến lược. Mục tiêu cuối cùng của chiến lược là lợi nhuận**. Nếu hai yếu tố mô tả lợi nhuận giống nhau, ngay cả khi giá trị hai yếu tố khác nhau đáng kể thì sẽ vô nghĩa. Do đó, chúng tôi không muốn tìm các yếu tố có sự khác biệt lớn về giá trị yếu tố mà muốn tìm các yếu tố có biểu thị lợi nhuận khác nhau, vì vậy cuối cùng chúng tôi đã chọn sử dụng giá trị lợi nhuận vượt quá yếu tố để tính toán mối tương quan.

Chiến lược của chúng tôi là tần suất hàng ngày, vì vậy chúng tôi tính toán ma trận hệ Hệ số tương quan giữa lợi nhuận vượt quá của yếu tố dựa trên ngày của khoảng thời gian kiểm tra lại.

Lập trình giải n nhân tố có hệ số tương quan cao nhất trong thư viện:

 def get_n_max_corr(self, factors, n=1): factors_excess = self.get_excess_returns(factors) save_factor_excess = self.get_excess_return(self.factor_value, self.start_date, self.end_date) if len(factors_excess) < 1: return factor_excess, 1.0, None factors_excess[self.factor_name] = factor_excess['excess_return'] factors_excess = pd.concat(factors_excess, axis=1) factors_excess.columns = factors_excess.columns.levels[0] # get corr matrix factor_corr = factors_excess.corr() factor_corr_df = factor_corr.abs().loc[self.factor_name] max_corr_score = factor_corr_df.sort_values(ascending=False).iloc[1:].head(n) return save_factor_excess, factor_corr_df, max_corr_score

3. Bước 2: Lựa chọn nhân tố và tổng hợp nhân tố

Đối với các tập nhân tố có độ tương quan cao, có hai cách xử lý:

(1) Lựa chọn yếu tố

Dựa trên giá trị ICIR, tỷ suất lợi nhuận, tỷ lệ doanh thu và tỷ lệ Sharpe của chính yếu tố đó, các yếu tố hiệu quả nhất trong một chiều nhất định được chọn để giữ lại và các yếu tố khác sẽ bị xóa.

(2) Tổng hợp yếu tố

Tổng hợp các yếu tố trong bộ yếu tố và lưu giữ càng nhiều thông tin hiệu quả càng tốt trên mặt cắt ngang

$$$ F = w1 * f1 + w2 f2+...+wn fn, F là hệ số tổng hợp cuối cùng, còn f là hệ số cần tổng hợp $$$

Giả sử hiện tại có 3 ma trận nhân tố cần được xử lý:

 synthesis = pd.concat([a,b,c],axis = 1) synthesis a b c BTC.BN 0.184865 -0.013253 -0.001557 ETH.BN 0.185691 0.022708 0.031793 BNB.BN 0.242072 -0.180952 -0.067430 LTC.BN 0.275923 -0.125712 -0.049596 AAVE.BN 0.204443 -0.000819 -0.006550 ... ... ... ... SOC.BN 0.231638 -0.095946 -0.049495 AVAX.BN 0.204714 -0.079707 -0.041806 DAO.BN 0.194990 0.022095 -0.011764 ETC.BN 0.184236 -0.021909 -0.013325 TRX.BN 0.175118 -0.055077 -0.039513

2.1 Trọng số bằng nhau

Tỷ trọng từng yếu tố bằng $$ (w = 1/số yếu tố)$$ và yếu tố toàn diện = tổng các giá trị của từng yếu tố được tính trung bình.

Ví dụ: Các yếu tố động lượng, tỷ suất lợi nhuận một tháng, tỷ suất lợi nhuận hai tháng, tỷ suất lợi nhuận ba tháng, tỷ suất lợi nhuận tỷ suất lợi nhuận. 1/6 tỷ trọng, tổng hợp tải hệ số động lượng mới và sau đó chuẩn hóa lại.

 synthesis1 = synthesis.mean(axis=1) # 按行求均值

2.2 Trọng số IC lịch sử, ICIR lịch sử và trọng số lợi nhuận lịch sử

Các yếu tố được tính trọng số bằng cách sử dụng giá trị IC (giá trị ICIR, giá trị lợi nhuận lịch sử ) trong giai đoạn backtest. Có nhiều thời kỳ trong quá khứ và mỗi thời kỳ có giá trị IC, do đó mức trung bình của chúng được sử dụng làm tỷ trọng của hệ số. Giá trị trung bình (trung bình số học) của IC trong giai đoạn backtest thường được sử dụng làm tỷ trọng.

 # 权重归一化(后文中的因子加权方式也基本都需要进行权重归一化) w_IC = ic.mean() / ic.mean().sum() w_ICIR = icir.mean() / icir.mean().sum() w_Ret = Return.mean() / Return.mean().sum() synthesis2 = (synthesis * w_IC).sum(axis=1) synthesis2 = (synthesis * w_ICIR).sum(axis=1) synthesis2 = (synthesis * w_Ret).sum(axis=1)

2.3 Trọng số nửa đời IC lịch sử, trọng số nửa đời ICIR lịch sử

Cả 2.1 và 2.2 đều tính toán trung bình số học và mỗi IC và ICIR trong giai đoạn backtest có tác động như nhau đến hệ số theo mặc định.

Tuy nhiên, trên thực tế, tác động của từng giai đoạn của giai đoạn backtest đến giai đoạn hiện tại là không hoàn toàn giống nhau và có sự suy giảm về mặt thời gian. Khoảng thời gian càng gần với thời kỳ hiện tại thì tác động càng lớn và tác động càng xa thì tác động càng nhỏ. Dựa trên nguyên tắc này, trước khi tính tỷ trọng IC, trước tiên hãy xác định tỷ trọng càng gần thì giá trị tỷ trọng càng lớn và càng xa thì tỷ trọng càng nhỏ.

Đạo hàm toán học của tỷ trọng:

\* Chu kỳ bán rã H: Mỗi lần đẩy chu kỳ H về phía trước, giá trị trọng số giảm một nửa theo cấp số nhân\* T: Số chu kỳ được xem xét để kiểm tra ngược

 # 半衰权重def Decay(H,T): t = np.arange(T+1)[1:] wt = 2**((tT-1)/H) #半衰权重decay = wt/wt.sum() #归一化return decay # 历史IC半衰加权w_bs = Decay(6,12) # 假设T=12,H=6 ic_bs = ic.mul(w_bs,axis=0) w = ic_bs.mean()/ic.mean().sum() synthesis3 = (synthesis * w).sum(axis=1) # 历史ICIR半衰加权# 历史ICIR半衰加权在历史IC半衰加权的基础上,除以IC值的标准差。 w_bs = bs(6,12) ic_bs = ic.mul(w_bs,axis=0) ir_bs = ic_bs.mean()/ic.std() w = ir_bs.mean()/ir_bs.mean().sum() synthesis3 = (synthesis * w).sum(axis=1)

2.4 Tối đa hóa trọng số ICIR

Bằng cách giải phương trình, tính tỷ trọng số hệ số w tối ưu để tối đa hóa ICIR

Bài toán ước lượng ma trận hiệp phương sai: Ma trận hiệp phương sai được sử dụng để đo lường mối tương quan giữa tài sản khác nhau. Trong thống kê, ma trận hiệp phương sai mẫu thường được sử dụng thay cho ma trận hiệp phương sai tổng thể. Tuy nhiên, khi cỡ mẫu không đủ thì ma trận hiệp phương sai mẫu và ma trận hiệp phương sai tổng thể sẽ rất khác nhau. Vì vậy, có người đã đề xuất một phương pháp ước lượng nén. Nguyên tắc là giảm thiểu sai số bình phương trung bình giữa ma trận hiệp phương sai ước lượng và ma trận hiệp phương sai thực tế.

Đường:

1. Ma trận hiệp phương sai mẫu

 # 最大化ICIR加权(样本协方差) ic_cov = np.array(ic.cov()) inv_ic_cov = np.linalg.inv(ic_cov) ic_vector = np.mat(ic.mean()) w = inv_ic_cov * ic_vector.T w = w / w.sum() synthesis4 = (synthesis * pd.DataFrame(w,index=synthesis.columns)[0]).sum(axis=1)

2. Độ co Ledoit-Wolf: Đưa ra Hệ số co ngót để trộn ma trận hiệp phương sai ban đầu với ma trận nhận dạng để giảm tác động của nhiễu.

 # 最大化ICIR加权(Ledoit-Wolf压缩估计协方差) from sklearn.covariance import LedoitWolf model=LedoitWolf() model.fit(ic) ic_cov_lw = model.covariance_ inv_ic_cov = np.linalg.inv(ic_cov_lw) ic_vector = np.mat(ic.mean()) w = inv_ic_cov*ic_vector.T w = w/w.sum() synthesis4 = (synthesis * pd.DataFrame(w,index=synthesis.columns)[0]).sum(axis=1)

3. Độ co xấp xỉ của Oracle: Một cải tiến so với độ co của Ledoit-Wolf, mục tiêu là ước tính chính xác hơn ma trận hiệp phương sai thực khi kích thước mẫu nhỏ bằng cách điều chỉnh ma trận hiệp phương sai. (Việc triển khai lập trình giống như cách rút gọn Ledoit-Wolf)

2.5 Phân tích thành phần chính PCA

Phân tích thành phần chính (PCA) là một phương pháp thống kê được sử dụng để giảm kích thước và rút các tính năng chính của dữ liệu . Mục tiêu là ánh xạ dữ liệu gốc sang hệ tọa độ mới thông qua phép biến đổi tuyến tính để tối đa hóa phương sai của dữ liệu trong hệ tọa độ mới.

Cụ thể, PCA trước tiên tìm thành phần chính trong dữ liệu, là hướng có phương sai lớn nhất trong dữ liệu. Sau đó, nó tìm thành phần chính thứ hai trực giao (không liên quan) với thành phần chính thứ nhất và có phương sai lớn nhất. Quá trình này được lặp lại cho đến khi tìm thấy tất cả các thành phần chính trong dữ liệu.

 # 主成分分析(PCA) from sklearn.decomposition import PCA model1 = PCA(n_components=1) model1.fit(f) w=model1.components_ w=w/w.sum() weighted_factor=(f*pd.DataFrame(w,columns=f.columns).iloc[0]).sum(axis=1)

Giới thiệu về LUCIDA & FALCON

Lucida ( https://www.lucida.fund/ ) là một Quỹ phòng hộ định lượng hàng đầu trong ngành đã tham gia vào thị trường Tiền điện tử vào tháng 4 năm 2018. Quỹ này chủ yếu giao dịch CTA/arbitrage thống kê/arbitrage biến động tùy chọn và các chiến lược khác, với quy mô quản lý hiện tại trị giá 30 triệu USD.

Falcon ( https://falcon.lucida.fund/ ) là cơ sở hạ tầng đầu tư Web3 thế hệ mới dựa trên mô hình đa yếu tố và giúp người dùng "chọn", "mua", "quản lý" và "bán"crypto. tài sản. Falcon nuôi dưỡng vào tháng 6 năm 2022.

Nhiều nội dung hơn có thể được tìm thấy tại https://linktr.ee/lucida_and_falcon

Các bài viết trước

Mirror
Tuyên bố từ chối trách nhiệm: Nội dung trên chỉ là ý kiến của tác giả, không đại diện cho bất kỳ lập trường nào của Followin, không nhằm mục đích và sẽ không được hiểu hay hiểu là lời khuyên đầu tư từ Followin.
Thích
Thêm vào Yêu thích
Bình luận