双均线matlab操作,使用talib实现双均线策略

在同花顺,大智慧等一些炒股平台上,我们通常可以看到一些指标分析线的走势。对于一些做短线交易的人来说,技术面也是需要考虑的重要一环,对技术指标的分析尤为重要。其中双均线策略是一个比较简单,也比较常见的一种投资策略。

9b4037b8ff53900e49f68d2c587a27a9.png

如果短期均线从下方突破长期均线,为买入信号,短期均线从上方跌破长期均线则为卖出信号。

双均线(simple moving average)策略虽然简单易懂,但是最大的问题是均线本身计算方法所带来的信号滞后性。等到出现金叉买入点的时候价格已经上涨很多。碰到震荡市就会赔的很惨。

所以使用EMA替代SMA会更好。EMA指标推导得到MACD指标。

MACD金叉策略:

当talib.MACD(np.array(data.close), 12, 26, 9)[0]从下到上突破talib.MACD(np.array(data.close), 12, 26, 9)[1]时,买入

当talib.MACD(np.array(data.close), 12, 26, 9)[0]从上到下突破talib.MACD(np.array(data.close), 12, 26, 9)[1]时,卖出

金叉策略速度 talib.MACD(np.array(data.close), 12, 26, 9)[2]

金叉策略加速度 np.diff(talib.MACD(np.array(data.close), 12, 26, 9)[2]) ## golden cross strategy

MACD零线策略:

当talib.MACD(np.array(data.close), 12, 26, 9)[0]从下到上突破0线时,买入

当talib.MACD(np.array(data.close), 12, 26, 9)[0]从上到下突破0线时,卖出

零线策略速度 X['MACD_macdhist' + str(i)] = talib.MACD(closePrice, i[0], i[1], i[2])[2]

零线策略加速度 X['MACD_macdhist_shift' + str(i)] = np.diff(X['MACD_macdhist' + str(i)]) ## zero cross strategy

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在优矿平台上运行的均线策略代码: ``` # 导入函数库 import numpy as np import talib # 初始化函数,设定基准等等 def initialize(context): # 设定基准 set_benchmark('000001.XSHG') # 设定调仓周期 g.period = 20 # 获取股票池 g.stocks = get_index_stocks('000001.XSHG') # 设置手续费与滑点 set_slippage(FixedSlippage(0.02)) set_commission(PerTrade(buy_cost=0.0003, sell_cost=0.0013, min_cost=5)) # 设置账户信息 g.initial_cash = context.portfolio.starting_cash g.cash = g.initial_cash g.max_value = g.initial_cash * 0.3 # 设置回测参数 g.days = 0 g.buy = False g.sell = False # 定义交易函数 def trade(context): # 获取当前持仓 positions = context.portfolio.positions # 卖出股票 for stock in positions: if g.sell and context.current_dt.hour > 14: order_target(stock, 0) g.cash += positions[stock].total_amount * positions[stock].last_sale_price g.sell = False # 买入股票 if g.buy and context.current_dt.hour > 14: # 获取股票池 stocks = g.stocks # 获取行情数据 prices = history(20, '1d', 'close')[stocks] # 计算短期均线和长期均线 ma5 = talib.MA(prices, timeperiod=5)[-1] ma20 = talib.MA(prices, timeperiod=20)[-1] # 产生买入信号 if ma5 > ma20: # 计算每只股票的权重 weights = (1 / len(stocks)) * np.ones(len(stocks)) # 计算最大买入量 max_value = g.max_value # 买入股票 for i in range(len(stocks)): stock = stocks[i] price = prices[stock][-1] value = max_value * weights[i] amount = value // price cash = amount * price if g.cash >= cash: order_value(stock, value) g.cash -= cash g.buy = False # 调整仓位 if g.days == g.period: g.sell = True g.buy = True g.days = 0 else: g.days += 1 # 处理数据函数 def handle_data(context, data): trade(context) # 运行回测 run_backtest(strategy_name='dual_moving_average_strategy', start_date='2010-01-01', end_date='2021-01-01', initialize=initialize, handle_data=handle_data, order_price_field='close', capital_base=g.initial_cash, benchmark='000001.XSHG') ``` 在上述代码中,我们首先使用talib库计算了5日均线和20日均线,并根据两者的交叉产生买卖信号。然后,我们定义了交易函数,根据买卖信号进行买卖操作。最后,我们运行了回测,设置了回测起止日期、初始资金、交易费用等参数。在回测过程中,我们每20天进行一次调仓。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值