यह रणनीति मुख्य ट्रेडिंग सिग्नल के रूप में एसटीआई संकेतक का उपयोग करती है। जब एसटीआई संकेतक अपनी संकेत रेखा को पार करता है, और एसटीआई संकेतक निचली सीमा से नीचे या ऊपरी सीमा से ऊपर होता है, तो रणनीति एक खुली स्थिति संकेत उत्पन्न करेगी। उसी समय, रणनीति प्रदर्शन को अनुकूलित करने के लिए ईएमए और एटीआर जैसे संकेतकों का भी उपयोग करती है। रणनीति केवल विशिष्ट ट्रेडिंग सत्रों के भीतर चलती है और ओवरट्रेडिंग को नियंत्रित करने के लिए न्यूनतम ट्रेडिंग आवृत्ति निर्धारित करती है।
यह रणनीति टीएसआई संकेतक पर आधारित है और टीएसआई और इसकी सिग्नल लाइन के क्रॉस के माध्यम से ट्रेडिंग सिग्नल उत्पन्न करती है। साथ ही, यह जोखिमों को नियंत्रित करने के लिए ट्रेडिंग समय और आवृत्ति को सीमित करती है। रणनीति का लाभ यह है कि तर्क सरल और स्पष्ट है, और यह समय पर नुकसान और लाभ को रोकता है। हालांकि, नुकसान प्रवृत्ति निर्णय और स्थिति प्रबंधन की कमी है, टीएसआई मापदंडों के प्रति संवेदनशीलता है, और केवल बाजार को याद करते हुए प्रवृत्ति उलट बाजार को पकड़ सकता है। भविष्य में, रणनीति को प्रवृत्ति और अस्थिरता निर्णय, स्थिति प्रबंधन और पैरामीटर अनुकूलन जैसे पहलुओं से बेहतर बनाया जा सकता है।
/*backtest start: 2024-05-30 00:00:00 end: 2024-06-06 00:00:00 period: 5m basePeriod: 1m 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/ // © nikgavalas //@version=5 strategy("TSI Entries", overlay=true, margin_long=100, margin_short=100) // // INPUTS // // Define the start and end hours for trading string sessionInput = input("1000-1530", "Session") // Day of the week. string daysInput = input.string("23456", tooltip = "1 = Sunday, 7 = Saturday") // Minimum number of bar's between entries requiredBarsBetweenEntries = input.int(12, "Required Bars Between Entries") // Show debug labels bool showDebugLabels = input.bool(false, "Show Debug Labels") // // FUNCTIONS // //@function Define the triple exponential moving average function tema(src, len) => tema = 3 * ta.ema(src, len) - 3 * ta.ema(ta.ema(src, len), len) + ta.ema(ta.ema(ta.ema(src, len), len), len) //@function Atr with EMA atr_ema(length) => trueRange = na(high[1])? high-low : math.max(math.max(high - low, math.abs(high - close[1])), math.abs(low - close[1])) //true range can be also calculated with ta.tr(true) ta.ema(trueRange, length) //@function Check if time is in range timeinrange() => sessionString = sessionInput + ":" + daysInput inSession = not na(time(timeframe.period, sessionString, "America/New_York")) //@function Displays text passed to `txt` when called. debugLabel(txt, color, y, style) => if (showDebugLabels) label.new(bar_index, y, text = txt, color = color, style = style, textcolor = color.black, size = size.small) // // INDICATOR CODE // long = input(title="TSI Long Length", defval=8) short = input(title="TSI Short Length", defval=8) signal = input(title="TSI Signal Length", defval=3) lowerLine = input(title="TSI Lower Line", defval=-50) upperLine = input(title="TSI Upper Line", defval=50) price = close double_smooth(src, long, short) => fist_smooth = ta.ema(src, long) ta.ema(fist_smooth, short) pc = ta.change(price) double_smoothed_pc = double_smooth(pc, long, short) double_smoothed_abs_pc = double_smooth(math.abs(pc), long, short) tsiValue = 100 * (double_smoothed_pc / double_smoothed_abs_pc) signalValue = ta.ema(tsiValue, signal) // // COMMON VARIABLES // var color trendColor = na var int lastEntryBar = na bool tradeAllowed = timeinrange() == true and (na(lastEntryBar) or bar_index - lastEntryBar > requiredBarsBetweenEntries) // // CROSSOVER // bool crossOver = ta.crossover(tsiValue, signalValue) bool crossUnder = ta.crossunder(tsiValue,signalValue) if (tradeAllowed) if (signalValue < lowerLine and crossOver == true) strategy.entry("Up", strategy.long) lastEntryBar := bar_index else if (signalValue > upperLine and crossUnder == true) strategy.entry("Down", strategy.short) lastEntryBar := bar_index // // EXITS // if (strategy.position_size > 0 and crossUnder == true) strategy.close("Up", qty_percent = 100) else if (strategy.position_size < 0 and crossOver == true) strategy.close("Down", qty_percent = 100)