이 전략은 트렌드를 결정하고 추적하기 위해 가격 브레이크오웃과 평균 반전을 결합합니다. 확인 및 필터링을 위해 여러 지표를 사용합니다. 이 전략은 엄격한 입출장 메커니즘을 통해 작은 이익을 잠금함으로써 단기 및 중장기 거래에 적합합니다.
HMA를 기준으로 사용하여 가격 트렌드 방향을 결정합니다. HMA 이상의 가격은 상승 추세를 나타냅니다. HMA 이하의 가격은 하락 추세를 나타냅니다.
SSL 채널은 채널 방향과 가격 관계를 기반으로 트렌드를 확인함으로써 확인 지표로 사용됩니다.
TDFI는 동력을 측정하는 동력 지표입니다. 동력이 특정 수준에 도달 할 때만 거래가 허용됩니다.
RVI 지표는 출구 지표로 사용됩니다. RVI 라인 모양이 변하면 트렌드 고갈.
ATR은 스톱 로스를 계산하고 이윤을 취합니다.
진입 조건: 가격 기준선을 깨고, SSL 채널 방향은 가격과 일치하고, TDFI는 임계치를 달성합니다.
출구 조건: RVI 라인 모양의 변화, 기준선과 SSL 채널을 통해 가격 붕괴.
여러 가지 지표를 결합하면 가짜 유출을 효과적으로 필터링할 수 있습니다.
엄격한 입구 조건과 정지 손실 출구 제어 단일 손실.
가격 변동 을 최대한 활용 하여 더 많은 수익 을 얻으십시오.
다양한 제품과 시간 프레임에 적응 할 수있는 지표 매개 변수에 대한 큰 최적화 공간.
트렌드 전환을 파악할 수 없는 경우, 고도/저하를 추구하고 지나치게 거래할 위험이 있습니다.
단기 거래, 과잉 거래 위험.
스톱 로스 레벨 설정에 대한 주관적 영향은 너무 느슨하거나 너무 단단할 수 있습니다.
부적절한 매개 변수 설정은 너무 자주 또는 충분하지 않은 거래로 이어질 수 있습니다.
트렌드 판단 지표를 추가하여 트렌드 방향을 결정하는 정확성을 보장합니다.
역전 신호 표시기를 탑재하여 상승/하락을 추격할 확률을 줄이십시오.
더 역동적인 스톱 손실을 위해 ATR를 ATR 트레일링 스톱으로 동적 조정하는 것을 고려하십시오.
매개 변수 최적화 방향을 찾기 위해 다른 MA 시스템을 테스트합니다.
특정 거래 상품에 대한 매개 변수를 최적화합니다.
이 전략은 다중 지표 확인을 통해 거래 신호의 정확성을 달성합니다. 엄격한 스톱 로스 메커니즘은 단일 손실을 제어합니다. 기술적 분석 작업에 익숙한 사람들에게 적합합니다. 매개 변수는 다른 시장 주기에 맞게 조정 할 수 있습니다. 전반적으로 전략은 긍정적 인 기대 이익과 수익을 가지고 있지만 잘못된 트렌드 판단 및 과잉 거래의 위험이 주목해야합니다.
/*backtest start: 2022-11-06 00:00:00 end: 2023-11-12 00:00:00 period: 1d basePeriod: 1h 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 1 candles of baseline + 1 x confirmation + volume //// - Entry only if baseline is < 1 x ATR // - Exit conditions //// - Exit on exit indicator or when baseline or confirmation flip /////////////////////////////////////////////////// //Trades entries /////////////////////////////////////////////////// // - First entry L1 or S1 with standard SL and TP // - Second entry L2 or S2 with standard SL and exit upon the exit conditions /////////////////////////////////////////////////// //Included Indicators and settings /////////////////////////////////////////////////// // - Baseline = HMA 20 // - Confirmtion = SSL 10 // - Volume = TDFI 4 // - Exit = RVI 4 /////////////////////////////////////////////////// //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 | jh", overlay = true ) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **** Set the main stuff **** /////////////////////////////////////////////////// //Price price = close ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // ATR stuff /////////////////////////////////////////////////// atrLength = input(14, "ATR Length") slMultiplier = input(1.5, "SL") tpMultiplier = input(1, "TP") atr = atr(atrLength) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **** Baseline **** /////////////////////////////////////////////////// /////////////////////////////////////////////////// //HMA 20 /////////////////////////////////////////////////// hmaslowlength = input(20, minval=1) src = input(close, title="Source") slowhullma = wma(2*wma(src, hmaslowlength/2)-wma(src, hmaslowlength), round(sqrt(hmaslowlength))) plot(slowhullma, title = "baseline", color = yellow, linewidth=2, transp=0) /////////////////////////////////////////////////// // Base Signals /////////////////////////////////////////////////// /////////////////////////////////////////////////// baseline = slowhullma //Signals based on crossover //baseShort = crossover(baseLine, price) //baseLong = crossover(price, baseLine) //Signals based on signal position b_Short = baseline > price ? 1 : 0 l_Long = baseline < price ? 1 : 0 baseShort = b_Short baseLong = l_Long /////////////////////////////////////////////////// //ATR Check /////////////////////////////////////////////////// distBasefromPrice = abs(baseline - price) atrCheck = distBasefromPrice <= atr ? 1 : 0 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **** Confirmation **** /////////////////////////////////////////////////// /////////////////////////////////////////////////// //SSL Channel /////////////////////////////////////////////////// sslLen=input(title="SSL Period", defval=10) smaHigh=sma(high, sslLen) smaLow=sma(low, sslLen) Hlv = na Hlv := close > smaHigh ? 1 : close < smaLow ? -1 : Hlv[1] sslDown = Hlv < 0 ? smaHigh: smaLow sslUp = Hlv < 0 ? smaLow : smaHigh /////////////////////////////////////////////////// //Confirm Signals /////////////////////////////////////////////////// c_Up = sslUp c_Down = sslDown //Signals based on crossover c_Long = crossover(c_Up, c_Down) c_Short = crossover(c_Down, c_Up) confirmLong = c_Long confirmShort = c_Short ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **** Volume Indicator Start **** /////////////////////////////////////////////////// /////////////////////////////////////////////////// //TDFI /////////////////////////////////////////////////// lookback = input(4, 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 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **** Exit Indicator **** /////////////////////////////////////////////////// /////////////////////////////////////////////////// //RVI 4 /////////////////////////////////////////////////// rgvlen = input(4, title="RVI Length", minval=1) rvi = sum(swma(close-open), rgvlen)/sum(swma(high-low),rgvlen) sig = swma(rvi) /////////////////////////////////////////////////// //Exit Signals /////////////////////////////////////////////////// e_Short = crossover(rvi, sig) e_Long = crossover(sig, rvi) exitOutofShort = e_Short exitOutofLong = e_Long ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // **************************** Logic to handle NNFX rules **************************** ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Checking for base and confirmation indication with 1 candle difference baseandConfirmLong = ((baseLong[0] and confirmLong[0]) or (baseLong[1] and confirmLong[0]) or (baseLong[1] and confirmLong[1]) or (baseLong[0] and confirmLong[1])) ? 1 : 0 baseandConfirmShort = ((baseShort[0] and confirmShort[0]) or (baseShort[1] and confirmShort[0]) or (baseShort[1] and confirmShort[1]) or (baseShort[0] and confirmShort[1])) ? 1 : 0 //Combining with volume with 1 candle difference enterLong = ((baseandConfirmLong[0] and volumeLong[0]) or (baseandConfirmLong[1] and volumeLong[0]) or (baseandConfirmLong[1] and volumeLong[1]) or (baseandConfirmLong[0] and volumeLong[1])) ? 1 : 0 enterShort = ((baseandConfirmShort[0] and volumeShort[0]) or (baseandConfirmShort[1] and volumeShort[0]) or (baseandConfirmShort[1] and volumeShort[1]) or (baseandConfirmShort[0] and volumeShort[1])) ? 1 : 0 //Exit on base or confirmation flip over baseandConfirmFliptoShort = ((baseShort[0] or confirmShort[0]) or (baseShort[1] or confirmShort[0]) or (baseShort[1] or confirmShort[1]) or (baseShort[0] or confirmShort[1])) ? 1 : 0 baseandConfirmFliptoLong = ((baseLong[0] or confirmLong[0]) or (baseLong[1] or confirmLong[0]) or (baseLong[1] or confirmLong[1]) or (baseLong[0] or confirmLong[1])) ? 1 : 0 //Exit on base and confirmation flip or exit indicator exitLong = exitOutofLong or baseandConfirmFliptoShort ? 1 : 0 exitShort = exitOutofShort or baseandConfirmFliptoLong ? 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 strategy.entry("L1", strategy.long, when = enterLong and atrCheck) strategy.exit("L1 SL Exit", "L1", stop = long_sl, limit = long_tp) strategy.close("L1", when = exitLong) //Long entries with no TP strategy.entry("L2", strategy.long, when = enterLong and atrCheck) strategy.exit("L2 SL Exit", "L2", stop = long_sl) strategy.close("L2", when = exitLong) //Short entries with standard 1.5 ATR for SL, 1 ATR for TP short_sl = price + atr * slMultiplier short_tp = price - atr * tpMultiplier strategy.entry("S1", strategy.short, when = enterShort and atrCheck) strategy.exit("S1 SL Exit", "Short1", stop = short_sl, limit = short_tp) strategy.close("S1", when = exitShort) //Short entries with no TP strategy.entry("S2", strategy.short, when = enterShort and atrCheck) strategy.exit("S2 Exit", stop = short_sl) strategy.close("S2", when = exitShort) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //End //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////