Эта стратегия генерирует торговые сигналы путем вычисления индексов направленного движения (DMI) DI+ и DI- наряду с средним направленным индексом (ADX) и экспоненциальным движущимся средним (EMA). Он запускает длинный сигнал, когда DI+ пересекает DI- и ADX выше 20.
Расчет DI+, DI-, ADX
Расчет экспоненциальной скользящей средней
Создание торговых сигналов
Установка стоп-потери
В целом, эта стратегия сочетает в себе индикаторы импульса и анализа тенденций для торговли при появлении сильных ценовых тенденций, с остановкой потерь для ограничения потерь.
Может оптимизировать, расширяя стоп-потерю, настраивая параметры, добавляя фильтры для увеличения частоты.
Эта стратегия сочетает в себе индикаторы импульса и анализа тенденций для торговли сильными тенденциями, с строгими остановками для контроля риска.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_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/ // © Tamil_FNO_Trader //@version=5 strategy("Overlay Signals by TFOT", overlay=true) // Calculate DMI len = input.int(14, minval=1, title="DI Length") lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50) [diplus, diminus, adx] = ta.dmi(len, lensig) // Get EMA emalen = input.int(26, minval=1, title = "EMA Length") emasrc = input.source(close, title = "EMA Source") my_ema(src, length) => alpha = 2 / (length + 1) sum = 0.0 sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1]) EMA2 = my_ema(emasrc, emalen) // Variables var bool buycondition1 = false var bool sellcondition1 = false var int firstbuybar = na var int firstsellbar = na var int buyexitbar = na var int sellexitbar = na var bool buyexit1 = false var bool sellexit1 = false // Buy & Sell Conditions buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar) sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar) buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar) sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar) if buycondition1 if(na(firstbuybar)) firstbuybar := bar_index buyexitbar := na firstsellbar := na strategy.entry("Buy", strategy.long) if sellcondition1 if(na(firstsellbar)) firstsellbar := bar_index sellexitbar := na firstbuybar := na strategy.entry("Sell", strategy.short) if buyexit1 and not na(firstbuybar) if(na(buyexitbar)) buyexitbar := bar_index firstbuybar := na firstsellbar := na strategy.close("Buy") if sellexit1 and not na(firstsellbar) if(na(sellexitbar)) sellexitbar := bar_index firstsellbar := na firstbuybar := na strategy.close("Sell") // Plot signals on chart hl = input.bool(defval = true, title = "Signal Labels") plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny) plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny) plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny) plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)