Sử dụng chiến lược đa yếu tố để xây dựng danh mục tài sản crypto mạnh mẽ#Kiểm tra tính hợp lệ của 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 hai bài viết trong sê-ri bài về "Xây dựng danh mục đầu tư tài sản tiề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"

Đây là bài viết thứ ba: kiểm tra tính hợp lệ của yếu tố.

Sau khi xác định giá trị yếu tố cụ thể, trước tiên cần tiến hành kiểm tra độ giá trị trên các yếu tố và sàng lọc các yếu tố đáp ứng yêu cầu về ý nghĩa, tính ổn định, tính đơn điệu và tỷ suất lợi nhuận. Việc kiểm tra độ giá trị của yếu tố được thực hiện bằng cách phân tích giá trị yếu tố của kỳ hiện tại; và mối quan hệ tỷ suất lợi nhuận kỳ vọng để xác định tính hiệu quả của các yếu tố. Chủ yếu có 3 phương pháp cổ điển:

  • Phương pháp IC/IR: Giá trị IC/IR là hệ số tương quan giữa giá trị yếu tố và tỷ suất lợi nhuận kỳ vọng . Hệ số càng lớn thì hiệu suất càng tốt.

  • Giá trị T (phương pháp hồi quy): Giá trị T phản ánh tầm quan trọng của tỷ suất lợi nhuận sau khi hồi quy tuyến tính lợi nhuận của kỳ tiếp theo đối với giá trị yếu tố của kỳ hiện tại bằng cách so sánh xem hệ số hồi quy có vượt qua bài kiểm tra t hay không, mức độ đóng góp của hiện tại. giá trị hệ số của kỳ đối với tỷ suất lợi nhuận của kỳ tiếp theo có thể được đánh giá, thường được sử dụng trong các mô hình hồi quy đa biến (tức là đa yếu tố).

  • Phương pháp kiểm tra ngược phân cấp: Phương pháp kiểm tra ngược phân cấp phân tầng các mã thông báo dựa trên các giá trị hệ số, sau đó tính toán tỷ suất lợi nhuận của từng lớp mã thông báo để xác định tính đơn điệu của các yếu tố.

1. Luật IC/IR

(1) Định nghĩa IC/IR

IC : Hệ số thông tin, biểu thị khả năng dự đoán lợi nhuận Token của yếu tố đó. Giá trị IC của một kỳ nhất định là hệ số tương quan giữa giá trị hệ số của kỳ hiện tại và tỷ suất lợi nhuận của kỳ tiếp theo.

$$$ ICₜ = Tương quan(fₜ , Rₜ₊₁) $$$

fₜ: giá trị hệ số trong kỳ t

Rₜ₊₁: Tỷ suất lợi nhuận của token trong kỳ t+1

IC∈(-1,1), hệ số IC càng lớn thì khả năng lựa chọn tiền tệ càng mạnh.

IC càng gần 1 thì mối tương quan dương giữa giá trị yếu tố và tỷ suất lợi nhuận của kỳ tiếp theo càng mạnh. IC=1 có nghĩa là lựa chọn tiền tệ của yếu tố đó chính xác 100%. Mã thông báo đã chọn sẽ được sử dụng trong chu kỳ điều chỉnh vị trí tiếp theo, mức tăng lớn nhất;

IC càng gần -1 thì mối tương quan nghịch giữa giá trị hệ số và tỷ suất lợi nhuận của kỳ tiếp theo càng mạnh. Nếu IC=-1, điều đó có nghĩa là mã thông báo có thứ hạng cao nhất sẽ có mức giảm lớn nhất trong chu kỳ tái cân bằng tiếp theo. , đó là một chỉ số đảo ngược hoàn toàn;

Nếu IC gần đến 0 nghĩa là khả năng dự đoán của yếu tố này cực kỳ yếu, cho thấy yếu tố đó không có khả năng dự đoán đối với token.

IR: Tỷ số thông tin, thể hiện khả năng của yếu tố đó đạt được Alpha ổn định. IR là IC trung bình của tất cả các thời kỳ chia cho độ lệch chuẩn IC của tất cả các thời kỳ.

$$$ IR = trung bình(ICₜ) / std(ICₜ) $$$

Khi giá trị tuyệt đối của IC lớn hơn 0,05 (0,02) thì khả năng lựa chọn cổ phiếu của nhân tố này mạnh. Khi IR lớn hơn 0,5, yếu tố này có khả năng thu được lợi nhuận vượt trội một cách ổn định.

(2) Phương pháp tính IC

  • IC thông thường (tương quan Pearson): Tính hệ số tương quan Pearson, hệ số tương quan cổ điển nhất. Tuy nhiên, có nhiều giả định trong phương pháp tính toán này: dữ liệu liên tục, có phân phối chuẩn, hai biến thỏa mãn mối quan hệ tuyến tính, v.v.

$$$ ICₚₑₐᵣₛₒₙ,ₜ = cov(fₜ , Rₜ₊₁)/√var(fₜ)var(Rₜ₊₁) = ∑ᵗₜ₌₁(fₜ - fₜ)(Rₜ₊₁ - Rₜ₊₁) /√ ∑ᵗₜ ₌₁(fₜ - fₜ)²(Rₜ₊₁ - Rₜ₊₁)² $$$

  • Xếp hạng IC (Hệ số tương quan xếp hạng của Spearman): Tính hệ số tương quan xếp hạng của Spearman, trước tiên sắp xếp hai biến, sau đó tính hệ số tương quan Pearson dựa trên kết quả sắp xếp. Hệ số tương quan xếp hạng của Spearman đánh giá mối quan hệ đơn điệu giữa hai biến và ít bị ảnh hưởng bởi các ngoại lệ dữ liệu vì nó được chuyển đổi thành các giá trị sắp xếp ; trong khi hệ số tương quan của Pearson đánh giá mối quan hệ tuyến tính giữa hai biến, nó không chỉ có những điều kiện tiên quyết nhất định đối với dữ liệu gốc; , nhưng nó cũng bị ảnh hưởng rất nhiều bởi các dữ liệu ngoại lệ. Trong tính toán thực tế, việc tìm hạng IC sẽ phù hợp hơn.

(3) Triển khai mã phương pháp IC/IR

Tạo danh sách các giá trị ngày và giờ duy nhất theo thứ tự ngày và giờ tăng dần - ghi lại ngày tái cân bằng def choosedate(dateList,cycle)

 class TestAlpha(object): def __init__(self,ini_data): self.ini_data = ini_data def chooseDate(self,cycle,start_date,end_date): ''' cycle: day, month, quarter, year df: 原始数据框df,date列的处理''' chooseDate = [] dateList = sorted(self.ini_data[self.ini_data['date'].between(start_date,end_date)]['date'].drop_duplicates().values) dateList = pd.to_datetime(dateList) for i in range(len(dateList)-1): if getattr(dateList[i], cycle) != getattr(dateList[i + 1], cycle): chooseDate.append(dateList[i]) chooseDate.append(dateList[-1]) chooseDate = [date.strftime('%Y-%m-%d') for date in chooseDate] return chooseDate def ICIR(self,chooseDate,factor): # 1.先展示每个调仓日期的IC,即ICt testIC = pd.DataFrame(index=chooseDate,columns=['normalIC','rankIC']) dfFactor = self.ini_data[self.ini_data['date'].isin(chooseDate)][['date','name','price',factor]] for i in range(len(chooseDate)-1): # (1) normalIC X = dfFactor[dfFactor['date'] == chooseDate[i]][['date','name','price',factor]].rename(columns={'price':'close0'}) Y = pd.merge(X,dfFactor[dfFactor['date'] == chooseDate[i+1]][['date','name','price']], on=['name']).rename(columns={'price':'close1'}) Y['returnM'] = (Y['close1'] - Y['close0']) / Y['close0'] Yt = np.array(Y['returnM']) Xt = np.array(Y[factor]) Y_mean = Y['returnM'].mean() X_mean = Y[factor].mean() num = np.sum((Xt-X_mean)*(Yt-Y_mean)) den = np.sqrt(np.sum((Xt-X_mean)**2)*np.sum((Yt-Y_mean)**2)) normalIC = num / den # pearson correlation # (2) rankIC Yr = Y['returnM'].rank() Xr = Y[factor].rank() rankIC = Yr.corr(Xr) testIC.iloc[i] = normalIC, rankIC testIC =testIC[:-1] # 2.基于ICt,求['IC_Mean', 'IC_Std','IR','IC<0占比--因子方向','|IC|>0.05比例'] ''' ICmean: |IC|>0.05, 因子的选币能力较强,因子值与下期收益率相关性高。|IC|<0.05,因子的选币能力较弱,因子值与下期收益率相关性低IR: |IR|>0.5,因子选币能力较强,IC值较稳定。|IR|<0.5,IR值偏小,因子不太有效。若接近0,基本无效IClZero(IC less than Zero): IC<0占比接近一半->因子中性.IC>0超过一大半,为负向因子,即因子值增加,收益率降低ICALzpF(IC abs large than zero poin five): |IC|>0.05比例偏高,说明因子大部分有效''' IR = testIC.mean()/testIC.std() IClZero = testIC[testIC<0].count()/testIC.count() ICALzpF = testIC[abs(testIC)>0.05].count()/testIC.count() combined =pd.concat([testIC.mean(),testIC.std(),IR,IClZero,ICALzpF],axis=1) combined.columns = ['ICmean','ICstd','IR','IClZero','ICALzpF'] # 3.IC 调仓期内IC的累积图print("Test IC Table:") print(testIC) print("Result:") print('normal Skewness:',combined['normalIC'].skew(),'rank Skewness:',combined['rankIC'].skew()) print('normal Skewness:',combined['normalIC'].kurt(),'rank Skewness:',combined['rankIC'].kurt()) return combined,testIC.cumsum().plot()

2. Kiểm định giá trị T (phương pháp hồi quy)

Phương pháp giá trị T cũng kiểm tra mối quan hệ giữa giá trị yếu tố của kỳ hiện tại và tỷ suất lợi nhuận của kỳ tiếp theo, nhưng nó khác với phương pháp ICIR ở chỗ phân tích mối tương quan giữa hai giá trị. Phương pháp giá trị t sử dụng tỷ suất lợi nhuận của kỳ tiếp theo. trả về dưới dạng biến phụ thuộc Y và giá trị hệ số của kỳ hiện tại là biến độc lập X. Đối với hồi quy X, hãy tiến hành kiểm tra t trên hệ số hồi quy của giá trị hệ số để kiểm tra xem nó có khác biệt đáng kể so với 0 hay không, nghĩa là liệu hệ số kỳ này ảnh hưởng đến tỷ suất lợi nhuận của kỳ tiếp theo.

Bản chất của phương pháp này là giải mô hình hồi quy hai biến, có công thức cụ thể như sau:

$$$ Rₜ₊₁ = αₜ + βₜfₜ + μₜ $$$

Rₜ₊₁: Tỷ suất lợi nhuận của token trong kỳ t+1

fₜ: giá trị hệ số trong kỳ t

βₜ: Hệ số hồi quy của giá trị nhân tố trong kỳ t, tức là tỷ suất lợi nhuận của nhân tố

αₜ: Thuật ngữ chặn, phản ánh tác động trung bình của tất cả các biến không có trong mô hình lên Rₜ₊₁

(1) Lý thuyết phương pháp hồi quy

  • Đặt mức ý nghĩa α, thường là 10%, 5% hoặc 1%.

  • Kiểm định giả thuyết: $$H₀ : βₜ =0$$, $$H₁ : βₜ ≠ 0$$

Thống kê $$$ T = (βʌₜ - βₜ) / se(βʌₜ) ~ tα/₂(nk) $$$

k: số tham số trong mô hình hồi quy

  • Nếu |t thống kê| > |tα/₂(nk)| → H₀ bị từ chối, nghĩa là giá trị hệ số fₜ trong giai đoạn này có tác động đáng kể đến tỷ suất lợi nhuận Rₜ₊₁ của giai đoạn tiếp theo.

(2) Thực hiện mã phương pháp hồi quy

 def regT(self,chooseDate,factor,return_24h): testT = pd.DataFrame(index=chooseDate,columns=['coef','T']) for i in range(len(chooseDate)-1): X = self.ini_data[self.ini_data['date'] == chooseDate[i]][factor].values Y = self.ini_data[self.ini_data['date'] == chooseDate[i+1]][return_24h].values b, intc = np.polyfit(X, Y, 1) # 斜率ut = Y - (b * X + intc) # 求t值t = (\hat{b} - b) / se(b) n = len(X) dof = n - 2 # 自由度std_b = np.sqrt(np.sum(ut**2) / dof) t_stat = b / std_b testT.iloc[i] = b, t_stat testT = testT[:-1] testT_mean = testT['T'].abs().mean() testTL196 = len(testT[testT['T'].abs() > 1.96]) / len(testT) print('testT_mean:',testT_mean) print('T值大于1.96的占比:',testTL196) return testT

3. Phương pháp backtesting phân cấp

Sự phân tầng đề cập đến việc phân tầng tất cả các mã thông báo và kiểm tra ngược đề cập đến việc tính toán tỷ suất lợi nhuận của từng lớp kết hợp mã thông báo.

(1) Sự phân tầng

Đầu tiên, lấy giá trị hệ số tương ứng với nhóm mã thông báo và sắp xếp mã thông báo theo giá trị hệ số. Sắp xếp, tức là những phần tử có giá trị hệ số nhỏ hơn sẽ được xếp đầu tiên và các token được chia đều theo sắp xếp. Giá trị hệ số của mã thông báo lớp 0 là nhỏ nhất và giá trị hệ số của mã thông báo lớp 9 là lớn nhất.

Về mặt lý thuyết, "phân chia bằng nhau" đề cập đến phân tách đều số lượng mã thông báo, nghĩa là số lượng mã thông báo trong mỗi lớp là như nhau và đạt được với sự trợ giúp của lượng tử. Trong thực tế, tổng số mã thông báo không nhất thiết phải là bội số của số lớp, nghĩa là số lượng mã thông báo trong mỗi lớp không nhất thiết phải bằng nhau.

(2) Kiểm tra lại

Sau khi chia mã thông báo thành 10 nhóm theo thứ tự giá trị hệ số tăng dần, hãy bắt đầu tính tỷ suất lợi nhuận của từng tổ hợp mã thông báo. Bước này coi mã thông báo của mỗi lớp là một danh mục đầu tư (các mã thông báo có trong danh mục mã thông báo của mỗi lớp sẽ thay đổi trong các giai đoạn kiểm tra lại khác nhau) và tính tỷ suất lợi nhuận chung của danh mục đầu tư trong giai đoạn tiếp theo . ICIR và giá trị t phân tích giá trị hệ số của giai đoạn hiện tại và tỷ suất lợi nhuận tổng thể của giai đoạn tiếp theo , nhưng việc kiểm tra ngược phân tầng yêu cầu tính tỷ suất lợi nhuận danh mục đầu tư phân tầng cho mỗi ngày giao dịch trong giai đoạn kiểm tra ngược . Vì có nhiều giai đoạn backtesting với nhiều giai đoạn nên cần phải phân tầng và backtesting trong mỗi giai đoạn. Cuối cùng, tỷ suất lợi nhuận mã thông báo của mỗi lớp được nhân tích lũy để tính tỷ suất lợi nhuận tích lũy của tổ hợp mã thông báo.

Lý tưởng nhất, đối với một hệ số tốt, nhóm 9 có lợi nhuận đường cong cao nhất và nhóm 0 có lợi nhuận đường cong thấp nhất.

Các đường cong của Nhóm 9 trừ Nhóm 0 (tức là lợi nhuận dài hạn ) cho thấy sự gia tăng đơn điệu.

(3) Triển khai mã của phương pháp backtesting phân cấp

 def layBackTest(self,chooseDate,factor): f = {} returnM = {} for i in range(len(chooseDate)-1): df1 = self.ini_data[self.ini_data['date'] == chooseDate[i]].rename(columns= {'price':'close0'}) Y = pd.merge(df1,self.ini_data[self.ini_data['date'] == chooseDate[i+1]] [['date','name','price']],left_on=['name'],right_on=['name']).rename(columns= {'price':'close1'}) f[i] = Y[factor] returnM[i] = Y['close1'] / Y['close0'] -1 labels = ['0','1','2','3','4','5','6','7','8','9'] res = pd.DataFrame(index=['0','1','2','3','4','5','6','7','8','9','LongShort']) res[chooseDate[0]] = 1 for i in range(len(chooseDate)-1): dfM = pd.DataFrame({'factor':f[i],'returnM':returnM[i]}) dfM['group'] = pd.qcut(dfM['factor'], 10, labels=labels) dfGM = dfM.groupby('group').mean()[['returnM']] dfGM.loc['LongShort'] = dfGM.loc['0']- dfGM.loc['9'] res[chooseDate[i+1]] = res[chooseDate[0]] * (1 + dfGM['returnM']) data = pd.DataFrame({'分层累积收益率':res.iloc[:10,-1],'Group': [0,1,2,3,4,5,6,7,8,9]}) df3 = data.corr() print("Correlation Matrix:") print(df3) return res.T.plot(title='Group backtest net worth curve')

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