量化交易-EasyStrategy-2-灵析社区

搜不鸟了

布林带算法规则:

林加通道也称为布林线(Bollinger Band)是由三条线组成,在中间的通常为 20 天平均线,而在上下的两条线则分别为 Up 线和 Down 线,算法是首先计出过去 20 日收巿价的布林线标准差SD(Standard Deviation) ,通常再乘 2 得出 2 倍标准差,Up 线为 20 天平均线加 2 倍标准差,Down 线则为 20 天平均线减 2 倍标准差

                               (上下两条蓝线:Bollinger Band)

交易信号:

  • 股价由下向上穿越下轨线(LOWER)时,可视为买进信号
  • 股价长时间在中轨与上轨(UPER)间运行后,由上向下跌破中轨为卖出信号。

接着我们定义几个简单的参数:

inimal_roi = {
        "40": 0.0,  #运行40分钟且收益率>0%,则退出
        "30": 0.01, #运行30分钟且收益率>1%,则退出
        "20": 0.02, #运行20分钟且收益率>2%,则退出
        "0": 0.04   #刚启动运行且收益率>4%,则退出
    }
   trailing_stop = False # 不启用追踪止损(动态止损的概念)
   stoploss = -0.1 #单次交易损失超过10%,则触发止损
   timeframe = '5m' #交易数据5m曲线
   order_types = {
        'entry': 'limit',  #进场采用限价单
        'exit': 'limit',   #退出采用限价单
        'stoploss': 'market', #止损时采用事假单
        'stoploss_on_exchange': False  #不启用交易所止损(后面再细讲)
    }

接着写我们核心的交易策略代码。我们的蜡烛数据已经准备好了,都是5min曲线数据。构建 Bollinger bands 指标:

bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
dataframe['bb_upperband'] = bollinger['upper'] #bolling up line
dataframe['bb_midband'] = bollinger['mid'] # bolling standard line
dataframe['bb_lowerband'] = bollinger['lower'] #bolling down line

买入策略:

dataframe.loc[
  (
    (dataframe['close'] > dataframe['bb_midband']) 
    #这里逻辑简单点 收盘价大于标准价
  ),
  'buy'] = 1

卖出策略:

dataframe.loc[
 (
      (dataframe['close'] > dataframe['bb_upperband']) 
      # 收盘价高于bolling up line
  ),
  'sell'] = 1

核心策略实现了,我们跑个回测看看效果:

docker-compose run--rm freqtrade download-data --pairs ETH/BTC --exchange binance --days 5 -t 1h

  • 1、累计交易了314次,Tot Profit USDT(累积收益)-92.87USDT,(Tot Profit)收益率-9.29%
  • 2、LTC/USDT(为一个交易对),类似股票代码。不同交易对的Tot Profit USDT求和 就是最终的收益
  • 1、Starting balance初始资金1000USDT
  • 2、Final balance最终剩余资金907.13USDT
  • 3、Absolute profit绝对收益-92.87USDT
  • 4、Best Pair收益最好的交易对 ADA/USDT 2.11%
  • 5、Worst Pair收益最差的交易对 ETC/USDT -39.29%
  • 6、Best day收益最好的一天 11.654 USDT
  • 7、Worst day收益最差的一天 -29.955USDT
  • 8、Days win/draw/lose : 17天盈利/4天震荡/10天亏损
  • 优化:基于回测数据,我们再简单的优化一下策略:
# 新增指标RSI
 dataframe['rsi'] = ta.RSI(dataframe)
# 买入信号
 dataframe.loc[
  (
     (qtpylib.crossed_above(dataframe['rsi'], 40)) &
    (dataframe['close'] > dataframe['bb_midband'])
  ),
  'buy'] = 1 
  #卖出信号
  populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
  dataframe.loc[
      (
          (qtpylib.crossed_above(dataframe['rsi'], 70)) &  
          (dataframe['close'] > dataframe['bb_midband']) 
      ),
      'sell'] = 1

接着回测看一下效果:

策略优化以后,明显可以看到策略亏损缩小至-34USDT。

  • 1、Starting balance初始资金1000USDT
  • 2、Final balance最终剩余资金965.346USDT
  • 3、Absolute profit绝对收益-34.654USDT
  • 4、Best Pair收益最好的交易对 ADA/USDT 2.11%
  • 5、Worst Pair收益最差的交易对 XRP/USDT -39.29%
  • 6、Best day收益最好的一天 3.542 USDT(最高收益&最大亏损都有明显缩小
  • 7、Worst day收益最差的一天 -16.785USDT
  • 8、Days win/draw/lose : 19天盈利/1天震荡/11天亏损
  • 下一次再讲如何设计策略&分析指标与币价的关系

阅读量:2023

点赞量:0

收藏量:0