哈喽,大家好,我是木头左!
引言
本文将介绍日内回转交易策略的原理,并通过Python代码示例展示如何在掘金平台实现该策略。本文将深入探讨一种基于1分钟MACD(Moving Average Convergence Divergence,即移动平均收敛散布指标)的日内回转交易策略,该策略在金叉时买入,在死叉时卖出,并在尾盘回转至初始仓位。
策略原理
日内回转交易是指在一个交易日内完成买入和卖出的过程,目的是利用市场的波动性来获得利润。这种交易方式通常需要投资者密切关注市场动态,并且具备快速做出交易决策的能力。
1分钟MACD指标简介
MACD是一种趋势跟踪动量指标,它通过计算短期和长期的指数移动平均线(EMA)之间的差异来反映市场的趋势。1分钟MACD则是将MACD指标应用在极短的时间框架上,即每分钟的价格变动。
金叉与死叉
在MACD指标中,当短期EMA线上穿长期EMA线时,形成金叉,通常被视为买入信号。相反,当短期EMA线下穿长期EMA线时,形成死叉,通常被视为卖出信号。
选股和择时
以下是一个简单的选股和择时Python代码示例:
开仓策略
- 金叉买入:当1分钟MACD显示金叉时,投资者执行买入操作,进入市场。
- 死叉卖出:当1分钟MACD显示死叉时,投资者执行卖出操作,退出市场。
# 开盘处理函数
def on_bar(context, bars):
bar = bars[0]
symbol = bar.symbol
# 配置底仓
if context.first[symbol] == 0:
# 购买10000股浦发银行股票
order_volume(symbol=symbol, volume=context.total, side=OrderSide_Buy, order_type=OrderType_Market, position_effect=PositionEffect_Open)
print('{}:{}建底仓,以市价单开多仓{}股'.format(context.now, symbol, context.total))
context.first[symbol] = 1
return
# 获取持仓
position = list(filter(lambda x: x['symbol'] == symbol, get_position()))
if position is None:
return
# 可用仓位
available_volume = position[0]['volume'] - position[0]['available_today']
# 非尾盘时间,正常交易(首日不交易,可用仓位为0)
if available_volume > 0:
# 调用收盘价
close = context.data(symbol=symbol, frequency=context.frequency, count=context.periods_time, fields='close')['close'].values
# 计算MACD线
macd = MACD(close)[-1]
# MACD由负转正时,买入
if macd[-2] <= 0 and macd[-1] > 0:
order_volume(symbol=symbol, volume=context.trade_n, side=OrderSide_Buy, order_type=OrderType_Market, position_effect=PositionEffect_Open)
# MACD由正转负时,卖出
elif macd[-2] >= 0 and macd[-1] < 0 and available_volume >= context.trade_n:
order_volume(symbol=symbol, volume=context.trade_n, side=OrderSide_Sell, order_type=OrderType_Market, position_effect=PositionEffect_Close)
# EMA计算函数
def EMA(S: np.ndarray, N: int) -> np.ndarray:
return pd.Series(S).ewm(span=N, adjust=False).mean().values
# MACD计算函数
def MACD(CLOSE: np.ndarray, SHORT: int = 12, LONG: int = 26, M: int = 9) -> tuple:
DIF = EMA(CLOSE, SHORT) - EMA(CLOSE, LONG)
DEA = EMA(DIF, M)
MACD = (DIF - DEA) * 2
return DIF, DEA, MACD
尾盘回转策略
- 回转至初始仓位:在交易日结束前,无论盈亏,投资者都将仓位回转至初始状态,以规避隔夜风险。
# 尾盘回转仓位
if context.now.hour == 14 and context.now.minute >= 57 or context.now.hour == 15:
if position[0]['volume'] != context.total:
order_target_volume(symbol=symbol, volume=context.total, order_type=OrderType_Market, position_side=PositionSide_Long)
回测效果
回测效果图如下:
整体比较平稳,收益率不是太高。
策略的特点
- 快速反应市场变化:1分钟MACD能够迅速捕捉市场的短期动向。但1分钟的时间框架很容易受到市场噪音的影响,导致错误的交易信号。
- 规避隔夜风险:尾盘回转策略避免了持仓过夜可能带来的不确定性。
- 适合短线交易者:对于喜欢日内交易的投资者来说,这种策略提供了清晰的进出点。实施这种策略需要高度自动化的交易系统和稳定的网络环境。
市场有风险,交易需谨慎。
感兴趣的朋友,可以在下方公号内回复:002,即可获取源码,共同交流!
我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!