यह रणनीति केडीजे संकेतक पर आधारित एक उन्नत ट्रेडिंग प्रणाली है, जो के-लाइन, डी-लाइन और जे-लाइन क्रॉसओवर पैटर्न के गहन विश्लेषण के माध्यम से बाजार के रुझानों को पकड़ती है। यह रणनीति एक कस्टम बीसीडब्ल्यूएसएमए चिकनाई एल्गोरिथ्म को एकीकृत करती है, जो स्टोकैस्टिक संकेतकों की अनुकूलित गणना के माध्यम से सिग्नल विश्वसनीयता में सुधार करती है। प्रणाली मजबूत धन प्रबंधन प्राप्त करने के लिए स्टॉप-लॉस और ट्रेलिंग स्टॉप सुविधाओं सहित सख्त जोखिम नियंत्रण तंत्रों का उपयोग करती है।
इस रणनीति का मूल तर्क कई प्रमुख तत्वों पर आधारित हैः
रणनीति अभिनव तकनीकी संकेतक संयोजन और सख्त जोखिम नियंत्रण के माध्यम से एक पूर्ण व्यापार प्रणाली का निर्माण करती है। मुख्य लाभ कई संकेत पुष्टि तंत्र और व्यापक जोखिम नियंत्रण प्रणालियों में निहित हैं, लेकिन पैरामीटर अनुकूलन और बाजार वातावरण अनुकूलनशीलता पर ध्यान देने की आवश्यकता है। निरंतर अनुकूलन और सुधार के माध्यम से, रणनीति में विभिन्न बाजार वातावरण में स्थिर प्रदर्शन बनाए रखने की क्षमता है।
/*backtest start: 2024-01-06 00:00:00 end: 2025-01-05 00:00:00 period: 4h basePeriod: 4h 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/ // © hexu90 //@version=6 // Date Range // STEP 1. Create inputs that configure the backtest's date range useDateFilter = input.bool(true, title="Filter Date Range of Backtest", group="Backtest Time Period") backtestStartDate = input(timestamp("1 Jan 2020"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") backtestEndDate = input(timestamp("15 Dec 2024"), title="End Date", group="Backtest Time Period", tooltip="This end date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") // STEP 2. See if current bar falls inside the date range inTradeWindow = true //KDJ strategy // indicator("My Customized KDJ", shorttitle="KDJ") strategy("My KDJ Strategy", overlay = false) // Input parameters ilong = input(90, title="Period") k_isig = input(3, title="K Signal") d_isig = input(30, title="D Signal") // Custom BCWSMA calculation outside the function bcwsma(source, length, weight) => var float prev = na // Persistent variable to store the previous value if na(prev) prev := source // Initialize on the first run prev := (weight * source + (length - weight) * prev) / length prev // Calculate KDJ c = close h = ta.highest(high, ilong) l = ta.lowest(low, ilong) RSV = 100 * ((c - l) / (h - l)) pK = bcwsma(RSV, k_isig, 1) pD = bcwsma(pK, d_isig, 1) pJ = 3 * pK - 2 * pD pJ1 = 0 pJ2 = 80 pJ5 = (pJ-pK)-(pK-pD) // Plot the K, D, J lines with colors plot(pK, color=color.rgb(251, 121, 8), title="K Line") // Orange plot(pD, color=color.rgb(30, 0, 255), title="D Line") // Blue plot(pJ, color=color.new(color.rgb(251, 0, 255), 10), title="J Line") // Pink with transparency plot(pJ5, color=#6f03f3e6, title="J Line") // Pink with transparency // Background color and reference lines // bgcolor(pJ > pD ? color.new(color.green, 75) : color.new(color.red, 75)) // hline(80, "Upper Band", color=color.gray) // hline(20, "Lower Band", color=color.gray) // Variables to track the conditions var bool condition1_met = false var int condition2_met = 0 // Condition 1: pJ drops below pJ5 if ta.crossunder(pJ, pJ5) condition1_met := true condition2_met := 0 // Reset condition 2 if pJ drops below pJ5 again if ta.crossover(pJ, pD) condition2_met += 1 to_long = ta.crossover(pJ, pD) var int consecutiveDays = 0 // Update the count of consecutive days if pJ > pD consecutiveDays += 1 else consecutiveDays := 0 // Check if pJ has been above pD for more than 3 days consPJacrossPD = false if consecutiveDays > 3 consPJacrossPD := true // Entry condition: After condition 2, pJ crosses above pD a second time // if condition1_met and condition2_met > 1 // strategy.entry("golden", strategy.long, qty=1000) // condition1_met := false // Reset the conditions for a new cycle // condition2_met = 0 // if ta.crossover(pJ, pD) // and pD < 40 and consPJacrossPD // consecutiveDays == 1 // consecutiveDays == 3 and strategy.entry("golden", strategy.long, qty=1) // to_short = // or ta.crossunder(pJ, 100) // Exit condition if ta.crossover(pD, pJ) strategy.close("golden", qty = 1) // Stop loss and trailing profit trail_stop_pct = input.float(0.5, title="Trailing Stop activation (%)", group="Exit Lonng", inline="LTS", tooltip="Trailing Treshold %") trail_offset_pct = input.float(0.5, title="Trailing Offset (%)", group="Exit Lonng", inline="LTS", tooltip="Trailing Offset %") trail_stop_tick = trail_stop_pct * close/100 trail_offset_tick = trail_offset_pct * close/100 sl_pct = input.float(5, title="Stop Loss", group="SL and TP", inline="LSLTP") // tp_pct = input.float(9, title="Take Profit", group="SL and TP", inline="LSLTP") long_sl_price = strategy.position_avg_price * (1 - sl_pct/100) // long_tp_price = strategy.position_avg_price * (1 + tp_pct/100) strategy.exit('golden Exit', 'golden', stop = long_sl_price) // trail_points = trail_stop_tick, trail_offset=trail_offset_tick