目前量化程序交易越来越流行,但很多散户不知道从哪下手,因此我会持续分享一些量化入门知识,涵盖了量化软件介绍与推荐、量化策略编程、回测、优化、优质量化指标等全套内容,欢迎和我一起探讨学习。接下来我就来分享一个:用MACD和BoIl做成量化交易策略。
首先是用MACD和Bo做成量化交易策略的原理:
1、开仓条件:
多头开仓:当MACD形成金叉且BoIl上升(资金流入信号)。
空头开仓:当MACD形成死叉且BoIl下降(资金流出信号)。
2、平仓条件:
平多仓:持有多头仓位时,当MACD形成死叉或BoIl下降,表明趋势可能转弱。
平空仓:持有空头仓位时,当MACD形成金叉或BoIl上升,表明趋势可能转强。
其次就是使用Python实现的MACD和BoIl量化交易策略示例:
# 计算MACD
data['ema_12'] = data['close'].ewm(span=12, adjust=False).mean()
data['ema_26'] = data['close'].ewm(span=26, adjust=False).mean()
data['DIF'] = data['ema_12'] - data['ema_26']
data['DEA'] = data['DIF'].ewm(span=9, adjust=False).mean()
data['MACD'] = (data['DIF'] - data['DEA']) * 2  # MACD柱线
# 计算BoI(Balance of Index, 简化的流入流出平衡指数)
data['BoI'] = np.where(data['close'] > data['close'].shift(1), data['volume'], 
                       np.where(data['close'] < data['close'].shift(1), -data['volume'], 0))
data['BoI'] = data['BoI'].rolling(window=5).sum()  # 取5日资金流动平衡
# 初始化资金和仓位管理
initial_cash = 100000  # 初始资金
position_size = 1  # 每次交易手数
data['position'] = 0  # 持仓状态:1=多头,-1=空头,0=空仓
data['cash'] = initial_cash
data['portfolio_value'] = initial_cash
data['trade_signal'] = ''  # 记录交易信号
# 执行交易逻辑
for i in range(1, len(data)):
    close_price = data.at[i, 'close']
    previous_position = data.at[i - 1, 'position']
    macd_signal = data.at[i, 'DIF'] > data.at[i, 'DEA']  # DIF>DEA为金叉
    macd_signal_previous = data.at[i - 1, 'DIF'] > data.at[i - 1, 'DEA']  # 上一个金叉状态
    boi_signal = data.at[i, 'BoI'] > 0  # BoI上升表示资金流入
    boi_signal_previous = data.at[i - 1, 'BoI'] > 0  # 上一个BoI状态
    # 开仓逻辑
    if previous_position == 0:  # 当前无持仓
        if macd_signal and boi_signal and not macd_signal_previous:  
            # 金叉出现且BoI上升,开多仓
            data.at[i, 'position'] = 1
            data.at[i, 'cash'] = data.at[i - 1, 'cash'] - position_size * close_price
            data.at[i, 'trade_signal'] = 'Buy to Open'
        elif not macd_signal and not boi_signal and macd_signal_previous:  
            # 死叉出现且BoI下降,开空仓
            data.at[i, 'position'] = -1
            data.at[i, 'cash'] = data.at[i - 1, 'cash'] + position_size * close_price
            data.at[i, 'trade_signal'] = 'Sell to Open'
    else:
        # 平仓逻辑
        if previous_position == 1 and (not macd_signal or not boi_signal):
            # 持有多仓且死叉出现或BoI下降,平多仓
            data.at[i, 'position'] = 0
            data.at[i, 'cash'] = data.at[i - 1, 'cash'] + position_size * close_price
            data.at[i, 'trade_signal'] = 'Sell to Close'
        elif previous_position == -1 and (macd_signal or boi_signal):
            # 持有空仓且金叉出现或BoI上升,平空仓
            data.at[i, 'position'] = 0
            data.at[i, 'cash'] = data.at[i - 1, 'cash'] - position_size * close_price
            data.at[i, 'trade_signal'] = 'Buy to Close'
量化交易入门有难度,无论如何找个师傅带着入门很重要,这样能快速实现量化交易,一步到位,具体可以及时通过电话或微信联系我,领取内部量化策略和资料,现成的量化工具。
发布于2024-11-7 18:09 北京
 当前我在线
当前我在线
             直接联系我
直接联系我
        
 
                        
 
                
 分享
分享
                         注册
注册 1分钟入驻>
1分钟入驻> 关注/提问
关注/提问
                         
                         咨询TA
咨询TA
             
                    
                     
                         18342365994
18342365994                     
                                                
                                             
                                                                                                     
                         首发回答
首发回答
                                         
                 
             秒答
秒答 关注
关注
             分享
分享
                 追问
追问
                 
             踩
踩             举报
举报
             
             
             
         搜索更多类似问题 >
搜索更多类似问题 >
             980
980 
                         
                         
                         
                             
         
                                      电话咨询
电话咨询
                         +微信
+微信
                             
                                 
                             咨询
咨询 
                                                

 
                                                 
                                                 
                    
                     
                     
                     
                    

 
                     
                     
                     
                     
                     
                     
                    
 
     
   
                        