理查德海龟交易策略


创建日期: 2024-02-06 11:56:47 最后修改: 2024-02-06 11:56:47
复制: 0 点击次数: 620
avatar of ChaoZhang ChaoZhang
1
关注
1338
关注者

理查德海龟交易策略

概述

理查德海龟交易策略(Richard’s Turtle Trading Strategy)是一个基于理查德·丹尼斯(Richard Dennis)海龟交易技术的买卖策略。该策略利用价格突破实现趋势追踪交易。当价格突破20日新高时做多,当价格突破20日新低时做空。

策略原理

理查德海龟交易策略的核心逻辑是基于价格突破实现趋势追踪。具体来说,策略同时持续监控价格在20日内的最高值(_20_day_highest)和最低值(_20_day_lowest)。当当前收盘价超过20日最高值时,表明价格出现向上突破,此时发出做多信号。当当前收盘价低于20日最低值时,表明价格出现向下突破,此时发出做空信号。

进入仓位后,策略会利用平均真实波幅(ATR)来计算止损位。同时,也会跟踪10日最高价和最低价,进行滑点止损。当做多止损或滑点止损触发时平多仓;当做空止损或滑点止损触发时平空仓。

策略优势

理查德海龟交易策略具有以下优势:

  1. 利用价格突破实现了趋势的自动跟踪。能够自动识别趋势转折,及时调整仓位。
  2. ATR止损机制,可以有效控制单笔止损。
  3. 滑点止损机制,可以锁定部分利润,降低回撤。
  4. 策略逻辑简单清晰,容易理解和实现,适合初学者学习。
  5. 无需预测市场走势和COMPLEX计算,简单规则式交易。

策略风险

理查德海龟交易策略也存在一些风险:

  1. 突破交易容易被套,有时会产生过多交易频率。
  2. ATR和滑点止损过于严格,可能会过早止损。
  3. 仅利用价格信息,没有结合其他因素预测趋势持续性。
  4. 回测数据拟合风险,实盘效果可能不佳。

为了降低这些风险,可以考虑优化入场条件,利用更多指标预测趋势;调整止损算法,降低止损频率。

策略优化方向

理查德海龟交易策略可以从以下几个方向进行优化:

  1. 优化参数,寻找最优参数组合。可以调整计算周期,或者测试不同的ATR倍数。
  2. 利用更多指标或机器学习算法判断趋势。可以结合均线、能量类指标等判断趋势持续性。
  3. 优化止损方式。可以测试灵活滑点止损、跟踪止损等方式。
  4. 结合情绪指标、消息面等更多信息预测市场走势。这可以过滤掉一些假突破。

总结

理查德海龟交易策略是一个非常典型的突破追踪策略。它简单易行,适合初学者学习,也是量化交易的一个典范。该策略可以通过多方面优化,降低交易风险,提高盈利空间。总的来说,理查德海龟策略具有很强的启发意义。

策略源码
/*backtest
start: 2023-02-05 00:00:00
end: 2024-02-05 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/
// © melodyera0822

//@version=4
strategy("Richard Strategy", overlay=true)

// User input
variable_for_stoploss = input(4,title="stop loss var")
lenght = input(20,title="lenght")

// high_low
_20_day_highest = highest(nz(close[1]), lenght)
_20_day_lowest = lowest(nz(close[1]), lenght)

_10_day_low = lowest(nz(close[1]), lenght/2)
_10_day_high = highest(nz(close[1]), lenght/2)

//indicators
atr20 = atr(20)
ema_atr20 = ema(atr20,20)

//vars
var traded = "false"
var buy_sell = "none"
var buyExit = false
var sellExit = false
var stoploss = 0

buyCon = close > _20_day_highest and traded == "false"
plotshape(buyCon,style = shape.triangleup,location = location.belowbar, color = color.green )
if (buyCon)
    strategy.entry("long", strategy.long, when = buyCon)
    traded := "true"
    buy_sell := "buy"
    stoploss := round(close - variable_for_stoploss * ema_atr20)
    
sellCon = close < _20_day_lowest and  traded == "false"
plotshape(sellCon,style = shape.triangledown, color = color.red )
if (sellCon)
    strategy.entry("short", strategy.short)
    traded := "true"
    buy_sell := "sell"
    stoploss := round(close - variable_for_stoploss * ema_atr20)

if traded == "true"
    if buy_sell == "buy" and ((close<stoploss)or(close<_10_day_low))
        strategy.close("long")
        buyExit := true
        traded := "false"
        
    if buy_sell == "sell" and ((close>stoploss)or(close>_10_day_high))
        strategy.close("short")
        sellExit := true
        traded := "false"
        
plotshape(buyExit,style = shape.triangleup,location = location.belowbar, color = color.yellow )
buyExit := false
plotshape(sellExit,style = shape.triangledown, color = color.yellow )
sellExit := false