资源加载中... loading...

Donchian突破交易策略

Author: ChaoZhang, Date: 2024-04-29 14:56:35
Tags:

Donchian突破交易策略

概述

Donchian突破交易策略是一个基于Donchian通道指标的交易系统。该策略的主要思路是通过Donchian通道上轨和下轨的突破来捕捉市场趋势,并采用固定风险收益比(RR)进行止盈止损。当价格突破Donchian通道上轨并创出相对于Donchian通道周期的新高时开多,突破下轨并创出新低时开空。同时,止损位置设置在Donchian通道中轨,止盈位置根据设定的风险收益比(RR)计算得出。

策略原理

  1. 计算Donchian通道:根据设定的Donchian通道周期(默认20),计算该周期内的最高价和最低价,分别作为Donchian通道的上轨和下轨,并计算上下轨的中点作为Donchian通道中轨。
  2. 判断是否创出新高/新低:通过循环比较当前Donchian通道上轨和下轨与前几周期的上轨和下轨,判断当前是否创出了相对Donchian通道周期的新高或新低。若创出新高,则Donchian上轨显示为蓝色;若创出新低,则Donchian下轨显示为蓝色。
  3. 突破开仓:当价格收盘突破蓝色Donchian上轨时开多头仓位,突破蓝色Donchian下轨时开空头仓位。即只有在创出新高/新低后的突破才有效。
  4. 止盈止损:开仓时记录开仓价格和当前Donchian通道中轨价格,并计算两者价差。止损位置设置在Donchian通道中轨,止盈位置根据设定的风险收益比(默认5倍)和该价差计算得出。
  5. 平仓:当价格触及止盈或止损价格时平仓。

策略优势

  1. 适合趋势市:Donchian突破策略通过突破上轨/下轨开仓,顺应市场趋势方向进行交易,在趋势行情中表现出色。
  2. 新高/新低过滤:策略通过判断是否创出Donchian通道周期新高/新低,过滤掉部分噪音信号和假突破,提高开仓信号质量。
  3. 固定风险收益比:每笔交易的止盈和止损位置基于固定的风险收益比,风险可控,有利于资金管理。
  4. 参数简单:策略参数设置较为简单,主要为Donchian通道周期和风险收益比,优化和把控较为容易。

策略风险

  1. 幅度损失:策略止损位置为Donchian通道中轨,在趋势不明朗或震荡行情中,可能出现单次交易大幅损失的情况。
  2. 频繁交易:若Donchian通道周期设置较小,可能导致频繁开平仓,增加交易成本。
  3. 趋势转折:在趋势转折期,策略可能出现连续多次止损的情况。
  4. 参数敏感:策略表现对参数设置较为敏感,需要根据不同市场特点和行情周期进行参数优化。

策略优化方向

  1. 动态止损:根据价格走势、波动率等实时调整止损位置,如采用ATR作为止损参考,降低单次交易风险。
  2. 趋势过滤:加入趋势判断指标如移动平均线,只在明确趋势方向时开仓,提高信号质量。
  3. 结合其他指标:如结合RSI、MACD等动量指标,综合评估开仓时机。
  4. 仓位管理:根据市场趋势强度、波动率等动态调整仓位大小,控制整体风险。
  5. 参数自适应:采用机器学习等方法,自适应优化参数设置。

总结

Donchian突破交易策略是一个基于经典Donchian通道指标的趋势跟踪交易系统。通过Donchian通道上下轨的突破及新高/新低的判断来开仓,止盈止损基于固定风险收益比。该策略逻辑简单,适合趋势性市场。但在震荡市中表现一般,且对参数设置敏感。可通过引入动态止损、趋势过滤、仓位管理等方式进一步优化,提高策略稳健性。


/*backtest
start: 2023-04-23 00:00:00
end: 2024-04-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//---------------------------------------------//
// This source code is subject to the terms of 
// the Mozilla Public License 2.0 at 
// https://mozilla.org/MPL/2.0/
// © Dillon_Grech
//---------------------------------------------//

//---------------------------------------------//
// Simple donchian channel break out strategy
// which only enters trades when price closes
// above donchian upper and creates new high 
// (long) or price closes below donchian lower
// and creates new low, relative to the donchian
// length. This is indicated by the donchian
// upper and lower color (blue). Stop loss is
// located at donchian basis and take profit
// is set at Risk Reward (RR) profit target.
//---------------------------------------------//
//@version=5
strategy("Donchian New High/Low Strategy [Dillon Grech]", overlay=true)

//---------------------------------------------//

//---------------------------------------------//
//INDICATOR 1 - Donchian New High Low Price Close
don_length = input.int(20, minval = 1)
don_lower  = ta.lowest(don_length)
don_upper  = ta.highest(don_length)
don_basis  = math.avg(don_upper, don_lower)

//loop
don_lower_upper  = true
don_higher_lower = true
for i = 0 to don_length - 1
    //Check for higher high over don_length
    if don_upper > don_upper[i]
        don_lower_upper := false
    //Check for lower low over don_length
    if don_lower < don_lower[i]
        don_higher_lower := false

//Plot
c_ora = color.orange
c_blu = color.blue
c_gra = color.gray
color_basis = c_ora
color_upper = don_lower_upper  ? c_blu : c_gra
color_lower = don_higher_lower ? c_blu : c_gra
plot(don_basis,     "Don Basis", color_basis, 2)
u = plot(don_upper, "Don Upper", color_upper, 2)
l = plot(don_lower, "Don Lower", color_lower, 2)

//Conditions
Ind_1_L = ta.crossover(close, don_upper[1]) and 
   don_lower_upper[1]
Ind_1_S = ta.crossunder(close,don_lower[1]) and 
   don_higher_lower[1]
//---------------------------------------------//

//---------------------------------------------//
//ENTRY CONDITIONS
entry_long  = strategy.position_size<=0 and
   Ind_1_L
entry_short = strategy.position_size>=0 and
   Ind_1_S

if(entry_long)
    strategy.entry("Long Entry", strategy.long)
if(entry_short)
    strategy.entry("Short Entry", strategy.short)
//---------------------------------------------/

//---------------------------------------------//
//TAKE PROFIT AND STOP LOSS CONDITIONS
profit_RR = input.float(5.0,"RR Profit Target")

//Store Price on new entry signal
entry_price = strategy.opentrades.entry_price(
   strategy.opentrades-1)

//Store Donchain Channel Basis
entry_don_basis = float(0.0)
if entry_long or entry_short
    entry_don_basis := don_basis
else
    entry_don_basis := entry_don_basis[1]

//Get stop loss distance
stop_distance = math.abs(entry_price -
   entry_don_basis)
stop_L   = entry_price - stop_distance
profit_L = entry_price + stop_distance*profit_RR
stop_S   = entry_price + stop_distance
profit_S = entry_price - stop_distance*profit_RR

//Plot TP and SL
plot(entry_long or entry_short ? na :
   strategy.position_size > 0 ? profit_L : na,
   color=color.lime, style=plot.style_linebr,
   linewidth=2)
plot(entry_long or entry_short ? na :
   strategy.position_size > 0 ? stop_L : na,
   color=color.red,  style=plot.style_linebr,
   linewidth=2)
plot(entry_long or entry_short ? na : 
   strategy.position_size < 0 ? profit_S : na,
   color=color.lime, style=plot.style_linebr,
   linewidth=2)
plot(entry_long or entry_short ? na :
   strategy.position_size < 0 ? stop_S : na,
   color=color.red,  style=plot.style_linebr,
   linewidth=2)

//Exit long trades
strategy.exit(id = 'Exit Long', 
   from_entry ='Long Entry', 
   stop = stop_L, limit = profit_L)
strategy.exit(id = 'Exit Short', 
   from_entry ='Short Entry', 
   stop = stop_S, limit = profit_S)
//---------------------------------------------//

更多内容