基于Nadaraya-Watson信封线和ROC指标的趋势跟踪策略


创建日期: 2024-01-19 15:14:23 最后修改: 2024-01-19 15:14:23
复制: 1 点击次数: 1326
1
关注
1105
关注者

基于Nadaraya-Watson信封线和ROC指标的趋势跟踪策略

概述

本策略名称为“双信封趋势追踪策略”。该策略利用Nadaraya-Watson(NW)信封线和ROC指标来识别趋势方向,实现趋势追踪。当NW信封线扩大并且ROC为正时做多;当NW信封线收缩并且ROC为负时做空。该策略同时设置了止损和止盈条件来控制风险。

策略原理

双信封趋势追踪策略主要基于NW信封线和ROC指标来判断入场时机。NW信封线是一种非参数平滑技术,可以用来描绘价格的高低范围。ROC指标可以识别价格变化速度和强度。

具体来说,该策略首先计算NW上限线和下限线。当价格突破NW上限线,并且ROC>0时,表示行情处于上涨趋势,这时做多;当价格跌破NW下限线,并且ROC时,表示行情处于下跌趋势,这时做空。

做多做空后,该策略会设置止损和止盈条件。止损点为入场价下方固定点数,止盈点为入场价上方止损点数的一定倍数。这可以有效控制单笔交易的风险。

总的来说,双信封趋势追踪策略结合NW信封线和ROC指标判断趋势方向,以及止损止盈来控制风险,实现了趋势追踪交易。

优势分析

双信封趋势追踪策略有以下几个优势:

  1. 利用NW信封线判断趋势方向,可以有效识别价格趋势,减少假信号。

  2. 结合ROC指标判定趋势强度,避免在震荡市中错交易。

  3. 设置止损止盈来控制风险,可以在亏损扩大前止损出场。同时也确保了部分利润。

  4. 该策略参数较少,实现简单,容易理解和优化。

  5. 可以在任何品种上应用,包括外汇、数字货币和股票等市场。

风险分析

双信封趋势追踪策略也存在以下风险:

  1. 追逐趋势策略容易在趋势反转时损失严重。需要适当调整参数或人工干预退出。

  2. 止损点过于宽松会增加亏损。可以适当缩减止损点数量。

  3. 在高波动市场中,止损可能被突破,导致无法控制亏损。可以考虑实时止损或动态止损。

  4. 策略并没有考虑交易成本和滑点。这在高频交易中会加重损失。

总体来说通过参数调优、优化止损策略以及适当人工干预可以减少这些风险。

策略优化方向

该策略可以从以下几个方面进行优化:

  1. 优化NW参数,如窗口周期、带宽大小等,寻找最佳参数组合。

  2. 优化ROC参数如窗口大小,降低假信号。

  3. 尝试其他指标如KDJ、MACD等来判断趋势和入场。

  4. 结合机器学习算法动态优化止损止盈策略。

  5. 增加趋势反转信号,在趋势反转时主动退场。

  6. 考虑实盘中的滑点、手续费、止损失败概率等细节,使策略更贴近实盘。

通过参数优化、指标和算法引入,可以进一步提高策略的稳定性和盈利能力。

总结

本策略名称为“双信封趋势追踪策略”。该策略利用NW信封线和ROC指标判断趋势方向入场,同时设置止损止盈,实现了趋势跟踪交易。策略简单有效,优点是可以顺应趋势,控制风险,适用于多种市场;缺点是容易在趋势反转中损失及难以捕捉反转时机。通过参数优化、算法引入以及手工干预,可以进一步增强策略的稳定性。总体来说,双信封趋势追踪策略是一种值得推荐的趋势跟踪交易策略。

策略源码
/*backtest
start: 2023-01-18 00:00:00
end: 2024-01-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined Strategy", overlay=true)

// --- Nadaraya-Watson Envelope [LUX] ---
length_NW = input.float(500, title='NW Window Size', maxval=500, minval=0)
h_NW = input.float(8.0, title='NW Bandwidth')
mult_NW = input.float(3.0, title='NW Multiplier')
src_NW = input(close, title='NW Source')
up_col_NW = input.color(#39ff14, title='NW Upper Color', inline='col')
dn_col_NW = input.color(#ff1100, title='NW Lower Color', inline='col')
disclaimer_NW = input(false, title='NW Hide Disclaimer')

// --- Rate Of Change (ROC) ---
length_ROC = input.int(9, title='ROC Window Size', minval=1)
source_ROC = input(close, title='ROC Source')

roc = 100 * (source_ROC - source_ROC[length_ROC]) / source_ROC[length_ROC]

// --- Calcola Stop Loss e Take Profit in Pips ---
pip_multiplier = input(0.0001, title="PIP Multiplier")  // Moltiplicatore per convertire da pips a valore numerico

stop_loss_pips = 4
take_profit_multiplier = 2.1

stop_loss_value = close - stop_loss_pips * pip_multiplier
take_profit_value = close + stop_loss_pips * take_profit_multiplier * pip_multiplier

// --- Conditions for Entry ---
entry_condition_long = src_NW + mult_NW * mult_NW > 0 and roc > 0 and close > close[1]
entry_condition_short = src_NW - mult_NW * mult_NW < 0 and roc < 0 and close < close[1]

// --- Strategy Logic ---
if (entry_condition_long)
    strategy.entry("Buy", strategy.long)

if (entry_condition_short)
    strategy.entry("Sell", strategy.short)

if (strategy.position_size > 0)
    strategy.exit("Stop Loss/Profit", from_entry="Buy", loss=stop_loss_value, profit=take_profit_value)

if (strategy.position_size < 0)
    strategy.exit("Stop Loss/Profit", from_entry="Sell", loss=stop_loss_value, profit=take_profit_value)

// --- Plotting ---
plot(roc, color=#2962FF, title="ROC")
hline(0, color=#787B86, title="Zero Line")

更多内容