量化交易-策略改进-4-灵析社区

搜不鸟了

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)

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

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

具体案例如下图:

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

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

策略开发

策略准备阶段配置

#策略准备配置
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 bands
bollinger = 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 Average
dataframe['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
  PythonCopy
# 卖出逻辑
 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

总结一下核心数据:

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

效果总结:

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

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

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

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

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

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

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

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

阅读量:2016

点赞量:0

收藏量:0