Chiến lược này sử dụng một hệ thống trung bình di chuyển trơn tru hai lần như là tín hiệu giao dịch chính, kết hợp với chỉ số xác nhận khối lượng TDFI để lọc tín hiệu giao dịch, để tận dụng những lợi thế của trung bình di chuyển trơn tru trong khi giảm các giao dịch không chính xác trên các thị trường không có xu hướng.
Chiến lược này sử dụng hai bộ trung bình di chuyển mượt mà với cấu hình tham số khác nhau như tín hiệu giao dịch chính. Đầu tiên một trung bình di chuyển mượt mà nhanh 8 giai đoạn được sử dụng làm xác nhận ban đầu, sau đó một trung bình di chuyển mượt mà 16 giai đoạn chậm hơn một chút đóng vai trò là xác nhận thứ hai. Khi MA nhanh đưa ra tín hiệu mua, nếu MA chậm hơn cũng báo hiệu theo cùng hướng trong vòng 1-2 thanh cuối cùng, một vị trí dài được mở. Khi MA nhanh đưa ra tín hiệu bán, nếu MA chậm hơn cũng báo hiệu theo cùng hướng trong vòng 1-2 thanh cuối cùng, một vị trí ngắn được mở ra. Các bước ra được kích hoạt khi MA xác nhận thứ hai đảo ngược hướng. Ngoài ra, chỉ số khối lượng TDFI được sử dụng để phát hiện khối lượng giao dịch đằng sau các tín hiệu giá năng lượng gây hiểu lầm. Các giao dịch chỉ được thực hiện khi phù hợp với kỳ vọng.
Để giảm rủi ro, các hướng tối ưu hóa sau đây có thể được xem xét:
Nhìn chung, đây là một chiến lược theo xu hướng điển hình. Hệ thống MA gọn gàng kép kết hợp với bộ lọc khối lượng TDFI có thể tận dụng hiệu quả khả năng theo dõi xu hướng trong khi giảm tỷ lệ tín hiệu không chính xác trong các thị trường không theo xu hướng. Thông qua tối ưu hóa tham số, nó có thể được thích nghi với các khung thời gian và sản phẩm khác nhau. Tuy nhiên, nó dựa nhiều hơn vào điều chỉnh tham số hơn là ứng dụng cơ học.
/*backtest start: 2022-10-06 00:00:00 end: 2023-10-12 00:00:00 period: 2d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Designed per No Nonsense Forex VP rules //Made to be as modular as possible, so we can swap the indicators in and out. //Originated from causecelebre //Tried to put in as much VP rules as possible /////////////////////////////////////////////////// //Rules Implemented: /////////////////////////////////////////////////// // - SL 1.5 x ATR // - TP 1 x ATR // // - Entry conditions //// - Entry within first confirmation cross over and 1 candle of second confirmation + volume // - Exit conditions //// - Exit on exit indicator or when baseline or confirmation flip /////////////////////////////////////////////////// //Trades entries /////////////////////////////////////////////////// // - First entry L1 or S1 with standard SL and TP /////////////////////////////////////////////////// //Included Indicators and settings /////////////////////////////////////////////////// // - Confirmtion = SSL 8, 16 // - Volume = TDFI 6 /////////////////////////////////////////////////// //Credits // Strategy causecelebre https://www.tradingview.com/u/causecelebre/ // TDFI causecelebre https://www.tradingview.com/u/causecelebre/ // SSL Channel ErwinBeckers https://www.tradingview.com/u/ErwinBeckers/ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // strategy(title="NNFX Strategy 3 Indicator Template | jh", overlay = true, pyramiding=0, initial_capital=20000, currency=currency.USD, calc_on_order_fills=0,default_qty_type=strategy.fixed, default_qty_value=10000) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **** Set the main stuff **** /////////////////////////////////////////////////// //Price price = close ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ATR stuff /////////////////////////////////////////////////// slMultiplier = input(1.5, "SL") tpMultiplier = input(1, "TP") atrlength = input(title="ATR Length", defval=14, minval=1) atrsmoothing = input(title="Smoothing", defval="SMA", options=["RMA", "SMA", "EMA", "WMA"]) ma_function(source, atrlength) => if atrsmoothing == "RMA" rma(source, atrlength) else if atrsmoothing == "SMA" sma(source, atrlength) else if atrsmoothing == "EMA" ema(source, atrlength) else wma(source, atrlength) //plot(ma_function(tr(true), atrlength), title = "ATR", color=#991515, transp=0) atr = ma_function(tr(true), atrlength) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **** Confirmation 1 Fast **** /////////////////////////////////////////////////// /////////////////////////////////////////////////// //SSL 6 /////////////////////////////////////////////////// ssllen1=input(title="SSL 1 Length Period", defval=8) smaHigh1=sma(high, ssllen1) smaLow1=sma(low, ssllen1) Hlv1 = na Hlv1 := close > smaHigh1 ? 1 : close < smaLow1 ? -1 : Hlv1[1] sslDown1 = Hlv1 < 0 ? smaHigh1: smaLow1 sslUp1 = Hlv1 < 0 ? smaLow1 : smaHigh1 plot(sslDown1, "SSL Down", linewidth=1, color=red) plot(sslUp1, "SSL Up", linewidth=1, color=lime) /////////////////////////////////////////////////// //Confirm Signals /////////////////////////////////////////////////// c_Up = sslUp1 c_Down =sslDown1 //Signals based on crossover c_cross_Long = crossover(c_Up, c_Down) c_cross_Short = crossover(c_Down, c_Up) //Signals based on signal position c_trend_Long = c_Up > c_Down ? 1 : 0 c_trend_Short = c_Down > c_Up ? 1 : 0 confirm_Long = c_cross_Long confirm_Short = c_cross_Short plotshape(c_cross_Long, color = green, style=shape.triangleup, location=location.top) plotshape(c_cross_Short, color = red, style=shape.triangledown, location=location.top) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **** Confirmation 2 Slow **** /////////////////////////////////////////////////// /////////////////////////////////////////////////// //SSL 30 /////////////////////////////////////////////////// /////////////////////////////////////////////////// //SSL /////////////////////////////////////////////////// ssllen2=input(title="SSL 2 Length Period", defval=16) smaHigh2=sma(high, ssllen2) smaLow2=sma(low, ssllen2) Hlv2 = na Hlv2 := close > smaHigh2 ? 1 : close < smaLow2 ? -1 : Hlv2[1] sslDown2 = Hlv2 < 0 ? smaHigh2: smaLow2 sslUp2 = Hlv2 < 0 ? smaLow2 : smaHigh2 plot(sslDown2, "SSL Down", linewidth=1, color=orange) plot(sslUp2, "SSL Up", linewidth=1, color=blue) /////////////////////////////////////////////////// //Confirm Signals /////////////////////////////////////////////////// c2_Up = sslUp2 c2_Down = sslDown2 //Signals based on crossover c2_cross_Long = crossover(c2_Up, c2_Down) c2_cross_Short = crossover(c2_Down, c2_Up) //Signals based on signal position c2_trend_Long = c2_Up > c2_Down ? 1 : 0 c2_trend_Short = c2_Down > c2_Up ? 1 : 0 confirm2_Long = c2_trend_Long confirm2_Short = c2_trend_Short plotshape(c2_cross_Long, color = green, style=shape.triangleup, location=location.bottom) plotshape(c2_cross_Short, color = red, style=shape.triangledown, location=location.bottom) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **** Volume Indicator Start **** /////////////////////////////////////////////////// /////////////////////////////////////////////////// //TDFI /////////////////////////////////////////////////// lookback = input(6, title = "TDFI Lookback") filterHigh = input(0.05, title = "Filter High") filterLow = input(-0.05, title = "Filter Low") mma = ema(price * 1000, lookback) smma = ema(mma, lookback) impetmma = mma - mma[1] impetsmma= smma - smma[1] divma = abs(mma - smma) averimpet = (impetmma + impetsmma) / 2 number = averimpet pow = 3 result = na for i = 1 to pow - 1 if i == 1 result := number result := result * number tdf = divma * result ntdf = tdf / highest(abs(tdf), lookback * 3) /////////////////////////////////////////////////// //Volume Signals /////////////////////////////////////////////////// v_Long = ntdf > filterHigh ? 1 : 0 v_Short = filterLow > ntdf ? 1 : 0 volumeLong = v_Long volumeShort = v_Short ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **************************** Logic to handle NNFX rules **************************** ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Checking for confirmation indication with 1 candle difference for second confirmtion and volume enterLong = confirm_Long and (confirm2_Long[0] or confirm2_Long[1]) and (volumeLong[0] or volumeLong[1]) ? 1 : 0 enterShort = confirm_Short and (confirm2_Short[0] or confirm2_Short[1]) and (volumeShort[0] or volumeShort[1]) ? 1 : 0 exitLong = c_cross_Short or c2_cross_Short ? 1 : 0 exitShort = c_cross_Long or c2_cross_Long ? 1 : 0 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Entries and Exits ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if (year>2009) //Long entries with standard 1.5 ATR for SL, 1 ATR for TP long_sl = price - (atr * slMultiplier) long_tp = price + (atr * tpMultiplier) //Short entries with standard 1.5 ATR for SL, 1 ATR for TP short_sl = price + (atr * slMultiplier) short_tp = price - (atr * tpMultiplier) strategy.close("L1", when = exitLong) strategy.close("S1", when = exitShort) strategy.exit("L Limit Exit", "L1", stop = long_sl, limit = long_tp) strategy.exit("S Limit Exit", "S1", stop = short_sl, limit = short_tp) strategy.order("L1", strategy.long, when = enterLong) strategy.order("S1", strategy.short, when = enterShort) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //End //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////