交易软件指标数据查询与分析:MACD、EMA、强力指数等
后台-插件-广告管理-内容页头部广告(手机) |
量化交易这方面,数据和策略很重要。这篇文章主要教大家怎么用平台功能搜集数据,还会详细解说窍门。特别是富途和咱们A股软件在周线指标上的区别,还有策略制定的注意事项。希望大家读完能更好地理解量化交易的做法,那就太好了。
一、指标数据的获取与对比
量化交易,重点是抓住关键指标。用交易软件就能看到,比如上交易日的大指数和买入点,就像这次的大指数是-73866.80,买入点是3567.14。但不同软件获取数据的方式不同,比如富途是从周一开始算,咱们国内的A股软件一般是从周五开始。这种差异可能影响交易策略,所以策略要仔细规划,得留点心。
这事儿咱们得保证数据准确,所以就不能不用Ta-Lib。这库里有EMA算法,咱们得多用长点时间的数据,误差能降下来。我们在Jupyter上试验了一下,数据挺不错的。这事儿咱们得好好搞,因为数据准不准直接关系到我们后面的策略。
二、策略框架的搭建
每个APP都有自己的玩法,我们调整策略时间灵活,方便得很。里面直接就有基础模板可用。开始测试策略,得先定好起始利润、交易费用,还得看看要不要动态调整权重这些事儿。这些关键,得好好想清楚。
咱得把查动力系统的流程列入每周的任务清单。这样,应对市场波动就容易多了,做交易决定也快得多了。先把这些基础活儿做好了,接下来执行策略就更稳当了。
三、技术指标的封装与应用
# 为减少计算自定义指标时的误差,这里取最近一年的数据
count = 250
# 回测的基准是沪深300,为了便于计算,减少因涨停、跌停、停牌、退市、复权等方面的影响,这里以沪深300进行测试
stock = '000300.XSHG'
# 日期格式
date_format = '%Y-%m-%d'
def initialize(context):
# 设置回测是否开启避免未来数据模式
set_option("avoid_future_data", True)
# 动力系统状态
g.impulse_status = 0
# 平均EMA下跌穿透值
g.aedc = 0
# 平均EMA下跌穿透买入价
g.adp = 0
# 是否跌破了ADP
g.adp_flag = False
# 上一个交易日的最高价,用于突破买入
g.last_high = 0
# 记录最高价,用于止损
g.max_high = 0
咱们得小心操作impulse_system,查技术资料就只能选特定日子。找最近那几期的日子超关键。这样差不多能达到refmacd(1)的水平。动力系统,重点看MACD和EMA,得把它们整合到公式里,方便实时查。
# 设置每周第一个交易日的开盘前触发 weekly
run_weekly(weekly, 1, '9:00')
咱们筛选昨天的强势指数或KDJ值要来个三明治式评定,主要是为了捕捉买点,等着反弹。这样我们能提升交易成功率,自然赚头也更大!
def weekly(context):
''' 每周第一个交易日计算动力系统的状态 '''
run_date = context.current_dt.strftime(date_format)
impulse_system(run_date)
四、买入条件的设置与优化
量化交易中,找对买点特关键。得看三个条件,最后一个就是股价得回到EMA均线以下,或者直接突破这价才买。这招在股价涨得时候挺管用,就是有点儿严格,可能赶不上好时候,和市场涨得差距挺大。
def get_last_days(run_date, count, unit):
array = get_bars(stock, count=count, unit=unit, fields=['date'], end_dt=run_date)
return [item[0].strftime(date_format) for item in array[-count:]]
买这个玩意儿得看行情怎么样,得随时调整方法。那量化系统测试操作挺简单的,但是得留心时间和积分的限制,操作得细心点,别瞎搞,别浪費了。
五、策略回测与参数优化
def get_macd_ema(stock, date, unit):
_, _, macd = MACD(stock, check_date=date, unit=unit, include_now=True)
ema = EMA(stock, check_date=date, timeperiod=13, unit=unit, include_now=True)
return macd[stock], ema[stock]
做量化交易,得好好分析策略和调整参数,得找出最适合的数值,不能一点一点慢慢试。手动的还得记收益,费时费力还容易出错。
def impulse_system(run_date):
unit = '1w'
date3, date2, date1 = get_last_days(run_date, 3, unit)
macd1, ema1 = get_macd_ema(stock, date1, unit)
macd2, ema2 = get_macd_ema(stock, date2, unit)
if macd1 < macd2 and ema1 < ema2:
g.impulse_status = -1
elif macd1 > macd2 and ema1 > ema2:
macd3, ema3 = get_macd_ema(stock, date3, unit)
if not (macd2 < macd3 and ema2 < ema3):
g.impulse_status = 1
下回咱们得谈谈怎么在本地用BackTrader测试不同时间段的数据,顺便教大家设置策略的顶配参数。这样咱们优化策略的速度就能快起来,交易成功的概率和收入也能上去。
做量化交易,得持续学习和提升。量化交易里遇到过哪些难题?来评论区说说你的经历和看法,顺便点个赞,转发一下,让更多人加入这场有趣的讨论!
def calc_force_index(run_date, unit, period):
''' 强力指数-自定义指标,取前后两天收盘价之差与成交量乘积的EMA '''
data = get_bars(stock, count=count, unit=unit, end_dt=run_date, fields=('close', 'volume'), df=True)
force_index = data['volume'] * data['close'].diff() / 1000000
fis = talib.EMA(force_index, period)
return fis.iloc[-2], fis.iloc[-1]
def calc_adp(run_date, unit, period):
''' 平均EMA下跌穿透-自定义指标,取收盘价与EMA之差的SMA(只考虑收盘价跌破EMA的情况) '''
data = get_bars(stock, count=count, unit=unit, end_dt=run_date, fields=('close'))
ema = talib.EMA(data['close'], period)
diff = ema - data['close']
tmp = np.apply_along_axis(lambda x: np.where(x > 0, x, 0), 0, diff)
aedc = talib.SMA(tmp, period)
ema_tmp = np.diff(ema) + ema[1:]
adp = ema_tmp - aedc[1:]
return round(adp[-2], 2)
本文 融资融券杠杆炒股 原创,转载保留链接!网址:http://www.tswoo.com/zmt/313.html
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
后台-插件-广告管理-内容页尾部广告(手机) |