为稳定盈利 提供动力

这里是我的工作总结和我感性上的碎碎念 3BFund Quant leader CFA 从业6Y Email: wongmanc@88.com

Adjusted Volatility Indicator (AVI)LSTM(源码)


import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 自定义参数
window = 10
price_type = ‘hlcc_avg’

def calculate_hidden_indicator(data, window):
tp = (data[‘high’] + data[‘low’] + data[‘close’]) / 3 if price_type == ‘hlcc_avg’ else data[price_type]
ma = tp.rolling(window=window).mean()
md = tp.rolling(window=window).apply(lambda x: np.mean(np.abs(x – x.mean())), raw=True)
hidden_indicator = (tp – ma) / (0.015 * md)
return hidden_indicator

# df = pd.read_csv(‘path_to_your_data.csv’)

# 添加计算出的hidden_indicator
df[‘hidden_indicator’] = calculate_hidden_indicator(df, window)

# 自动检索高阈值和低阈值
upper_threshold = df[‘hidden_indicator’].quantile(0.95)
lower_threshold = df[‘hidden_indicator’].quantile(0.05)

# 标记买卖信号
df[‘signal’] = 0
df.loc[df[‘hidden_indicator’] > upper_threshold, ‘signal’] = -1 # 卖出信号
df.loc[df[‘hidden_indicator’] < lower_threshold, ‘signal’] = 1 # 买入信号

# 特征工程
df[‘price_change’] = df[‘close’].pct_change()
df[‘volatility’] = df[‘close’].rolling(window=5).std()

# 移除NaN值
df.dropna(inplace=True)

# 准备训练和测试数据
X = df[[‘price_change’, ‘volatility’]]
y = df[‘signal’]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练随机森林模型
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)

# 预测
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f’Accuracy: {accuracy:.2f}’)

# 特征重要性
importance_df = pd.DataFrame({‘feature’: X.columns, ‘importance’: clf.feature_importances_})
print(importance_df.sort_values(by=’importance’, ascending=False))


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注