分享

量化交易-策略改进(盈利策略)

 追梦文库 2022-05-17 发布于天津
文章图片1

本节主要讲2部分内容:ta-lib金融技术分析库&上一节指标的策略应用

TA-LIB金融分析库

TA-Lib,全称“Technical Analysis Library”, 即技术分析库,是Python金融量化的高级库,涵盖了150多种股票、期货交易软件中常用的技术分析指标,如MACD、RSI、KDJ、动量指标、布林带等等。TA-Lib可分为10个子板块:Overlap Studies(重叠指标),Momentum Indicators(动量指标),Volume Indicators(交易量指标),Cycle Indicators(周期指标),Price Transform(价格变换),Volatility Indicators(波动率指标),Pattern Recognition(模式识别),Statistic Functions(统计函数),Math Transform(数学变换)和Math Operators(数学运算),见下图。TA-Lib在国外应用非常广泛,是Python量化投资分析的主要利器之一(另外两个是Pandas和zipline)

文章图片2

其中 Overlap Studies Functions重叠指标 是我们的常用指标:

文章图片3

移动平均线是技术分析理论中应用最普遍的指标之一,主要用于确认、跟踪和判断趋势,提示买入和卖出信号,在单边市场行情中可以较好的把握市场机会和规避风险。但是,移动平均线一般要与其他的技术指标或基本面相结合来使用,特别是当市场处于盘整行情时,其买入卖出信号会频繁出现,容易失真。

文章图片4

具体案例如下图:

文章图片5

布林带(Bollinger Band),由压力线、支撑线价格平均线组成,一般情况价格线在压力线和支撑线组成的上下区间中游走,区间位置会随着价格的变化而自动调整。布林线的理论使用原则是:当股价穿越最外面的压力线(支撑线)时,表示卖点(买点)出现。当股价延着压力线(支撑线)上升(下降)运行,虽然股价并未穿越,但若回头突破第二条线即是卖点或买点。在实际应用中,布林线有其滞后性,相对于其他技术指标在判断行情反转时参考价值较低,但在判断盘整行情终结节点上成功率较高。具体案例如下图:

文章图片6

此次使用的相关指标应该有个了解了,接着我们应用到我们的策略中。

策略开发

策略准备阶段配置

#策略准备配置minimal_roi = { '60': 0.01, '30': 0.03, '20': 0.04, '0': 0.05}#收益率时长要求stoploss = -0.15 #适当放开止损率timeframe = '5m'order_types = { 'entry': 'limit', 'exit': 'limit', 'stoploss': 'market', 'stoploss_on_exchange': False}

策略引入指标:

 #引入上一节中的指标:bb_xxxx,rsi、tema # RSI、dataframe['rsi'] = ta.RSI(dataframe)# Bollinger bandsbollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)dataframe['bb_upperband'] = bollinger['upper']dataframe['bb_middleband'] = bollinger['mid']dataframe['bb_lowerband'] = bollinger['lower'] # TEMA - Triple Exponential Moving Averagedataframe['tema'] = ta.TEMA(dataframe, timeperiod=9)

策略买入&卖出的逻辑:

# 买入逻辑dataframe.loc[ ( (qtpylib.crossed_above(dataframe['rsi'], 30)) & #当前市恐慌 (dataframe['tema'] <= dataframe['bb_middleband']) & # 由下而上穿过bb_mid (dataframe['tema'] > dataframe['tema'].shift(1)) & # 当前额指标值大于前一个时段 (dataframe['volume'] > 0) # 要求成交量大于0 ), 'enter_long'] = 1
 # 卖出逻辑 dataframe.loc[ (      (qtpylib.crossed_above(dataframe['rsi'], 64)) &      (dataframe['tema'] > dataframe['bb_middleband']) &        (dataframe['tema'] < dataframe['tema'].shift(1)) &        (dataframe['volume'] > 0)   ),  'exit_long'] = 1

接着我们看一下回测效果:

# 回测docker-compose run --rm freqtrade backtesting --config user_data/config.json --strategy MutilIndexStrategy --timerange 20220409-20220509 -i 5m
文章图片7
文章图片8

总结一下核心数据:

1、一共进行5个交易对,回测时间一个月,净亏损65USDT

2、表现最好交易对:TRX/USDT,表现最差交易对:ADA/USDT

整体还是一个亏损的策略,接着我们优化一下:

只采用表现最好的交易对TRX/USDT

(注:通常情况下不存在一个交易策略可以对大部分的交易对或行情生效,通常我们会为一种行情或交易对定制交易对)

# 回测docker-compose run --rm freqtrade backtesting --config user_data/config.json --strategy MutilIndexStrategy --pair TRX/USDT --timerange 20220409-20220509 -i 5m
文章图片9
文章图片10

效果总结:

1、回测时间一个月,整体盈利12USDT,收益率1.2%

2、单日最大盈利6.4USDT,单日最大亏损-3.2USDT

整体看收益和最大回撤都比较小,是一个相对稳定的策略。

接着我们需要思考以下2个问题:

文章图片11

1、如果新增交易指标,如何确定指标的阈值?

2、现有的策略是否还有提升空间,是否可以通过调整阈值来提升收益率?

以上不管哪种情况,我们都需要不断的尝试不同的 指标+阈值 的组合,这个组合优化是非常大的,人力很难穷尽,那么是否有办法自动帮我们找出最优的参数组合?

下一节我们接着介绍利用Hyperopt进行超参数优化,使用贝叶斯搜索和ML回归算法在搜索超空间中快速找到使目标值最小化的参数组合

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多