
This strategy is a trend following trading system based on Nadaraya-Watson kernel estimation method and moving average crossover. The strategy uses a Gaussian kernel function to smooth price data and combines moving average crossover signals to capture market trends, achieving intelligent trend following trading. The strategy adopts percentage position management, using 10% of account equity by default for each trade.
The core of the strategy is the Nadaraya-Watson kernel estimation method, which uses a Gaussian kernel function for non-parametric smoothing of price data. The specific implementation includes the following steps: 1. Calculate weights using Gaussian kernel function with bandwidth parameter h set to 8.0 2. Perform weighted smoothing on past 500 price data points 3. Calculate Simple Moving Average (SMA) of smoothed data with 15-period lookback 4. Generate long signal when smoothed curve crosses above moving average 5. Generate short signal when smoothed curve crosses below moving average 6. Use position state variable to track current holdings and avoid duplicate entries
This strategy innovatively combines Nadaraya-Watson kernel estimation with traditional technical analysis to build a robust trend following system. Through Gaussian kernel smoothing and moving average crossover, it effectively captures market trends while controlling risk. The strategy has good scalability and optimization potential, suitable for further development and practical application. Traders are advised to conduct thorough parameter optimization and backtesting before live trading.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © UniCapInvest
//@version=5
strategy("Nadaraya-Watson Strategy with Moving Average Crossover", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, max_bars_back=500)
// Girdiler
h = input.float(8.,'Bandwidth', minval = 0)
src = input(close,'Source')
lookback = input.int(15, "Moving Average Lookback", minval=1)
// Gaussian fonksiyonu
gauss(x, h) => math.exp(-(math.pow(x, 2)/(h * h * 2)))
// Nadaraya-Watson smoothed değerini hesaplama
var float smoothed = na
sum_w = 0.0
sum_xw = 0.0
for i = 0 to 499
w = gauss(i, h)
sum_w += w
sum_xw += src[i] * w
smoothed := sum_w != 0 ? sum_xw / sum_w : na
// Hareketli ortalama hesaplama
ma = ta.sma(smoothed, lookback)
// Alım ve satım koşulları (kesişimlere göre)
longCondition = ta.crossover(smoothed, ma)
shortCondition = ta.crossunder(smoothed, ma)
// Pozisyon durumu
var bool inPosition = false
// Strateji giriş ve çıkış koşulları
if (longCondition and not inPosition)
strategy.entry("Long", strategy.long)
inPosition := true
if (shortCondition and inPosition)
strategy.entry("Short", strategy.short)
inPosition := false
// Plotting
plot(smoothed, color=color.blue, title="Nadaraya-Watson Smoothed")
plot(ma, color=color.red, title="Moving Average")