一、基础环境搭建
1. 安装必备工具
pip install tushare yfinance pandas numpy talib matplotlib
pip install backtrader # 专业的回测框架
pip install ccxt # 加密货币交易所接口
pip install sqlalchemy # 数据库管理
二、数据获取与处理
1. 技术指标计算
布林带(Bollinger Bands):
import talib
defcalculate_bollinger_bands(df, window=20, num_std=2):
df['MA']= df['close'].rolling(window).mean()
df['STD']= df['close'].rolling(window).std()
df['Upper_Band']= df['MA']+(df['STD']* num_std)
df['Lower_Band']= df['MA']-(df['STD']* num_std)
return df
三、策略开发
案例1:布林带策略
布林带策略是一种基于波动率的交易策略。当价格触及布林带上轨时,卖出;当价格触及下轨时,买入:
def bollinger_bands_strategy(df):
df = calculate_bollinger_bands(df)
df['Signal']=0
df.loc[df['close']> df['Upper_Band'],'Signal']=-1
df.loc[df['close']< df['Lower_Band'],'Signal']=1
return df
案例2:均值回归策略
均值回归策略假设价格会回归到其均值水平。当价格偏离均值时,我们可以通过计算Z-score来判断买入或卖出时机:
def mean_reversion_strategy(df, window=20, z_threshold=2):
df['MA']= df['close'].rolling(window).mean()
df['STD']= df['close'].rolling(window).std()
df['Z_Score']=(df['close']- df['MA'])/ df['STD']
df['Signal']=0
df.loc[df['Z_Score']> z_threshold,'Signal']=-1
df.loc[df['Z_Score']<-z_threshold,'Signal']=1
return df
案例3:机器学习策略
机器学习在量化交易中的应用越来越广泛。我们可以使用简单的线性回归模型来预测价格走势:
from sklearn.linear_model import LinearRegression
defmachine_learning_strategy(df, train_size=0.8):
df['Target']= df['close'].shift(-1)
df.dropna(inplace=True)
X = df[['open','high','low','close','volume']]
y = df['Target']
train_size =int(len(df)* train_size)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]
model = LinearRegression()
model.fit(X_train, y_train)
df['Prediction']= model.predict(X)
df['Signal']=0
df.loc[df['Prediction']> df['close'],'Signal']=1
df.loc[df['Prediction']< df['close'],'Signal']=-1
return df
四、风险控制
案例1:动态止损管理
动态止损可以根据市场波动调整止损点,避免过早止损:
def dynamic_stop_loss(df, stop_loss_pct=0.05):
df['Stop_Loss'] = df['close'] * (1 - stop_loss_pct)
df['Stop_Loss'] = df['Stop_Loss'].rolling(5).max()
return df
案例2:组合风险管理
在多资产组合中,我们需要平衡不同资产的风险暴露:
def portfolio_risk_management(df_list, weights):
portfolio_return = sum([df['close'].pct_change().mean() * weight for df, weight in zip(df_list, weights)])
portfolio_risk = sum([df['close'].pct_change().std() * weight for df, weight in zip(df_list, weights)])
return portfolio_return, portfolio_risk
五、回测系统
案例1:多策略回测框架
class MultiStrategyBackTest:
def__init__(self, df, strategies, initial_capital=100000):
self.df = df.copy()
self.strategies = strategies
self.capital = initial_capital
self.position =0
defrun(self):
for i inrange(1,len(self.df)):
signals =[strategy(self.df.iloc[:i])for strategy in self.strategies]
final_signal =sum(signals)/len(signals)
if final_signal >0:
self.position = self.capital / self.df['close'].iloc[i]
self.capital =0
elif final_signal <0:
self.capital = self.position * self.df['close'].iloc[i]
self.position = 0
六、实盘交易
多交易所自动交易系统
def multi_exchange_trading_system():
exchanges =['binance','kraken','bitfinex']
symbols =['BTC/USDT','ETH/USDT','LTC/USDT']
whileTrue:
for exchange, symbol inzip(exchanges, symbols):
current_data = get_crypto_data(symbol, exchange)
signal = calculate_signal(current_data)
if signal ==1:
place_buy_order(exchange, symbol)
elif signal ==-1:
place_sell_order(exchange, symbol)
time.sleep(60)
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/1155422
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!