Python量化交易实战

一、基础环境搭建

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
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 3天前
下一篇 4分钟前

相关推荐

发表回复

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