এই কৌশলটি একটি লং-শর্ট ট্রেডিং সিস্টেম যা সিম্পল মুভিং এভারেজ (এসএমএ) ক্রসওভার সিগন্যালগুলিকে পিক ড্রডাউন কন্ট্রোলের সাথে একত্রিত করে। এটি কৌশলটির শীর্ষ ড্রডাউন পর্যবেক্ষণের সাথে সাথে দীর্ঘ এবং সংক্ষিপ্ত ট্রেডিং সংকেত তৈরি করতে 14 পিরিয়ড এবং 28 পিরিয়ড এসএমএর ক্রসওভার ব্যবহার করে। যখন ড্রডাউন একটি পূর্বনির্ধারিত প্রান্তিক অতিক্রম করে, তখন কৌশলটি স্বয়ংক্রিয়ভাবে ট্রেডিং বন্ধ করে দেয়। এছাড়াও, কৌশলটিতে একটি বিশদ পিক-টু-ট্রো চক্র বিশ্লেষণ বৈশিষ্ট্য রয়েছে যা ব্যবসায়ীদের কৌশলটির ঝুঁকি বৈশিষ্ট্যগুলি আরও ভালভাবে বুঝতে সহায়তা করে।
ট্রেড সিগন্যাল জেনারেশনঃ
পিক ড্রাউন কন্ট্রোলঃ
পিক-টু-থ্রো চক্র বিশ্লেষণঃ
ট্রেন্ড অনুসরণ এবং ঝুঁকি নিয়ন্ত্রণের সমন্বয় সাধন করেঃ এসএমএ ক্রসওভার কৌশলটি একটি ক্লাসিক ট্রেন্ড অনুসরণকারী পদ্ধতি, যখন পিক ড্রাউনডাউন নিয়ন্ত্রণ ঝুঁকি পরিচালনার একটি অতিরিক্ত স্তর সরবরাহ করে। এই সংমিশ্রণটি বাজারের প্রবণতা ক্যাপচার করার সময় কার্যকরভাবে ডাউনসাইড ঝুঁকি নিয়ন্ত্রণ করতে পারে।
উচ্চ অভিযোজনযোগ্যতাঃ সর্বাধিক এবং সর্বনিম্ন প্রয়োগের প্রান্তিককরণের মাধ্যমে, কৌশলটি নমনীয়ভাবে বিভিন্ন বাজারের পরিবেশ এবং ব্যক্তিগত ঝুঁকি পছন্দগুলিতে সামঞ্জস্য করা যেতে পারে।
স্বচ্ছ ঝুঁকি সূচকঃ পিক-টু-ড্রপ চক্র বিশ্লেষণ বিস্তারিত ঐতিহাসিক ড্রাউনডাউন তথ্য প্রদান করে, যা ব্যবসায়ীদের কৌশলটির ঝুঁকি বৈশিষ্ট্যগুলিকে স্বজ্ঞাতভাবে বুঝতে সহায়তা করে, আরও সুনির্দিষ্ট ট্রেডিং সিদ্ধান্তে সহায়তা করে।
স্বয়ংক্রিয় ঝুঁকি নিয়ন্ত্রণঃ যখন ড্রাউনডাউন পূর্ব নির্ধারিত থ্রেশহোল্ড অতিক্রম করে, তখন কৌশলটি স্বয়ংক্রিয়ভাবে ট্রেডিং বন্ধ করে দেয়। এই প্রক্রিয়াটি কার্যকরভাবে অনুপযুক্ত বাজারের অবস্থার মধ্যে অব্যাহত ক্ষতি প্রতিরোধ করতে পারে।
ব্যাপক পারফরম্যান্স বিশ্লেষণঃ ঐতিহ্যগত ব্যাকটেস্টিং মেট্রিক্সের পাশাপাশি, কৌশলটি পিক-টু-ট্রো চক্রের বিস্তারিত তথ্য প্রদান করে, যার মধ্যে রান-আপ শতাংশ, ড্রাউন-ডাউন শতাংশ এবং সময় সম্পর্কিত তথ্য রয়েছে, যা কৌশলটির কার্যকারিতার গভীর বিশ্লেষণকে সহজ করে তোলে।
ঐতিহাসিক তথ্যের উপর অত্যধিক নির্ভরতা: এসএমএ ক্রসওভার কৌশলটি ঐতিহাসিক মূল্যের তথ্যের উপর ভিত্তি করে এবং দ্রুত পরিবর্তিত বাজারে ধীর গতিতে প্রতিক্রিয়া জানাতে পারে, যা মিথ্যা সংকেত দেয়।
ঘন ঘন ট্রেডিং: অস্থির বাজারগুলিতে, এসএমএগুলি প্রায়শই ক্রস হতে পারে, যার ফলে অত্যধিক ট্রেডিং এবং উচ্চ লেনদেনের ব্যয় হয়।
বিপুল পরিমাণে টাকা তোলার সম্ভাবনাঃ সর্বাধিক ড্রাউনডাউন নিয়ন্ত্রণ সত্ত্বেও, বাজারের তীব্র অস্থিরতার সময় একটি একক বড় পতন এখনও উল্লেখযোগ্য ক্ষতির কারণ হতে পারে।
প্যারামিটার সংবেদনশীলতাঃ কৌশল কর্মক্ষমতা SMA সময়কাল এবং ড্রাউনডাউন থ্রেশহোল্ডের পছন্দ উপর অত্যন্ত নির্ভরশীল। অনুপযুক্ত পরামিতি সেটিংগুলি অনুপম ফলাফলের দিকে পরিচালিত করতে পারে।
সুযোগ হারাতে পারা: সর্বাধিক ড্রাউন থ্রেশহোল্ডের পরে যখন ট্রেডিং বন্ধ হয়ে যায়, তখন কৌশলটি বাজারের বিপরীতমুখীতার কারণে সুযোগগুলি মিস করতে পারে।
ডায়নামিক প্যারামিটার সমন্বয় চালু করুনঃ বিভিন্ন বাজারের পরিবেশে অভিযোজিত করার জন্য বাজারের অস্থিরতার ভিত্তিতে গতিশীলভাবে এসএমএ সময়কাল এবং ড্রাউনথ্রেশহোল্ডগুলি সামঞ্জস্য করার বিষয়টি বিবেচনা করুন।
অতিরিক্ত বাজার ফিল্টারঃ সম্ভাব্য মিথ্যা সংকেত ফিল্টার করার জন্য অন্যান্য প্রযুক্তিগত সূচক বা মৌলিক কারণ যেমন RSI বা ভলিউম অন্তর্ভুক্ত করুন।
ধাপে ধাপে প্রবেশ এবং প্রস্থান বাস্তবায়ন করুনঃ একক সিদ্ধান্তের ঝুঁকি কমাতে সব বা কিছুই না করার পরিবর্তে ধাপে ধাপে পজিশন তৈরি এবং বন্ধ করা।
মুনাফা গ্রহণের ব্যবস্থা যোগ করুন: ড্রডাউন কন্ট্রোলের উপরে, মুনাফা লক করতে এবং সামগ্রিক রিটার্ন উন্নত করতে একটি গতিশীল লাভ গ্রহণের ফাংশন যুক্ত করুন।
অর্থ ব্যবস্থাপনা অপ্টিমাইজ করুন: ঝুঁকি নিয়ন্ত্রণের জন্য অ্যাকাউন্টের আকার এবং বাজারের অস্থিরতার উপর ভিত্তি করে গতিশীল পজিশন সাইজিং বাস্তবায়ন করা।
মেশিন লার্নিং অ্যালগরিদম চালু করুনঃ মেশিন লার্নিং কৌশল ব্যবহার করে প্যারামিটার নির্বাচন এবং সংকেত উত্পাদন প্রক্রিয়া অপ্টিমাইজ করতে, কৌশল অভিযোজনযোগ্যতা এবং নির্ভুলতা উন্নত করতে।
এসএমএ ক্রসওভার লং-শর্ট কৌশলটি পিক ড্রডাউন কন্ট্রোল এবং অটো-টার্মিনেশনের সাথে মিলিত একটি পরিমাণগত ট্রেডিং সিস্টেম যা প্রবণতা অনুসরণ এবং ঝুঁকি ব্যবস্থাপনাকে ভারসাম্য করে। এটি পিক ড্রডাউন কন্ট্রোল ব্যবহার করে ডাউনসাইড ঝুঁকি পরিচালনা করার সময় সহজ চলমান গড় ক্রসওভারের মাধ্যমে বাজারের প্রবণতা ক্যাপচার করে। কৌশলটির অনন্য বৈশিষ্ট্যটি এর বিশদ পিক-টু-ট্রপ চক্র বিশ্লেষণে রয়েছে, যা ব্যবসায়ীদের কৌশলটির ঝুঁকি বৈশিষ্ট্যগুলি গভীরভাবে বোঝার জন্য একটি সরঞ্জাম সরবরাহ করে।
যদিও কৌশলটির কিছু অন্তর্নিহিত ঝুঁকি রয়েছে, যেমন historicalতিহাসিক ডেটা এবং পরামিতি সংবেদনশীলতার উপর অত্যধিক নির্ভরশীলতা, এটি যথাযথ অপ্টিমাইজেশন এবং উন্নতির মাধ্যমে এর স্থিতিশীলতা এবং লাভজনকতা উল্লেখযোগ্যভাবে উন্নত করতে পারে। এর মধ্যে রয়েছে গতিশীল পরামিতি সামঞ্জস্যের প্রবর্তন, অতিরিক্ত বাজার ফিল্টার যুক্ত করা এবং স্মার্ট অর্থ পরিচালনা বাস্তবায়ন।
সামগ্রিকভাবে, এই কৌশলটি ব্যবসায়ীদের একটি ভাল সূচনা পয়েন্ট সরবরাহ করে যা পৃথক ট্রেডিং লক্ষ্য এবং ঝুঁকি পছন্দগুলি পূরণের জন্য আরও কাস্টমাইজ এবং অনুকূলিত করা যেতে পারে। কৌশলটির মডিউলার নকশাটি অন্যান্য ট্রেডিং কৌশল বা ঝুঁকি পরিচালনার কৌশলগুলির সাথে সংহত করা সহজ করে তোলে, আরও জটিল এবং বিস্তৃত ট্রেডিং সিস্টেম তৈরির ভিত্তি স্থাপন করে।
/*backtest start: 2023-07-23 00:00:00 end: 2024-07-28 00:00:00 period: 1d basePeriod: 1h 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/ capital = 10000 //@version=5 strategy(title = "Correct Strategy Peak-Drawdown Cycles [Tradingwhale]", shorttitle = "Peak-Draw [Tradingwhale]", initial_capital = capital, overlay=true, margin_long=100, margin_short=100) // The code below is from Tradingwhale LLC /// ============================================================================== // Peak-Trough Cycles with Date and Prev. RunUp // Initialize variables showTable = input.bool(true, title = "Plot Peak to Bottom Drawdown Cycles table?") min_trough = input.float(3.0, title = "Define Minimum Drawdown/Trough to Display (%)", minval = 1, maxval = 100, step = 0.5, tooltip = "Peaks and Trough Cycles have to be roped in by either a lookback period or minmimum troughs to show. If you don't then every bar could be a peak or trough/bottom. I've decided to use minimum declines here because lookback seems more arbitrary.") maxdraw = input.float(40.0, title = "Max Drawdown", minval = 1, maxval = 100, step = 0.5, tooltip = "Define the drawdown level where the srtategy stops executing trades.") var float equityPeak = na var float equityTrough = na var int cycleCount = 0 var bool inDrawdown = false var float initialCapital = capital var float prevTrough = initialCapital var float prevRunUp = na var bool useLighterGray = true var int lastYear = na // Variable to indicate whether the strategy should end var bool end_strategy = false // Table to display data var table resultTable = table.new(position.top_right, 5, 30, bgcolor=#ffffff00, frame_color=#4f4040, frame_width=1) // Function to convert float to percentage string f_to_percent(value) => str.tostring(value, "#.##") + "%" // Function to get month/year string without commas get_month_year_string() => str.tostring(year) + "/" + str.tostring(month) // Update the table headers if (bar_index == 0 and showTable) table.cell(resultTable, 0, 0, "Show Min Trough: " + f_to_percent(min_trough), bgcolor=#a8a8a88f, text_size=size.normal) table.cell(resultTable, 1, 0, "Cycle Count", bgcolor=#a8a8a88f, text_size=size.normal) table.cell(resultTable, 2, 0, "Prev.RunUp(%)", bgcolor=#a8a8a88f, text_size=size.normal) table.cell(resultTable, 3, 0, "Drawdown(%)", bgcolor=#a8a8a88f, text_size=size.normal) table.cell(resultTable, 4, 0, "Year/Month", bgcolor=#a8a8a88f, text_size=size.normal) // Track peaks and troughs in equity if (na(equityPeak) or strategy.equity > equityPeak) if (inDrawdown and strategy.equity > equityPeak and not na(equityTrough)) // Confirm end of drawdown cycle drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100 if drawdownPercentage > min_trough cycleCount += 1 prevRunUp := (equityPeak - prevTrough) / prevTrough * 100 if cycleCount <= 20 and showTable currentYear = year if na(lastYear) or currentYear != lastYear useLighterGray := not useLighterGray lastYear := currentYear rowColor = useLighterGray ? color.new(color.gray, 80) : color.new(color.gray, 50) table.cell(resultTable, 1, cycleCount, str.tostring(cycleCount), bgcolor=rowColor, text_size=size.normal) table.cell(resultTable, 2, cycleCount, f_to_percent(prevRunUp), bgcolor=rowColor, text_size=size.normal) table.cell(resultTable, 3, cycleCount, f_to_percent(drawdownPercentage), bgcolor=rowColor, text_size=size.normal) table.cell(resultTable, 4, cycleCount, get_month_year_string(), bgcolor=rowColor, text_size=size.normal) prevTrough := equityTrough equityPeak := strategy.equity equityTrough := na inDrawdown := false else if (strategy.equity < equityPeak) equityTrough := na(equityTrough) ? strategy.equity : math.min(equityTrough, strategy.equity) inDrawdown := true // Calculate if the strategy should end if not na(equityPeak) and not na(equityTrough) drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100 if drawdownPercentage >= maxdraw end_strategy := true // This code below is from Tradingview, but with additions where commented (see below) longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28)) if (longCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/ strategy.entry("My Long Entry Id", strategy.long) shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28)) if (shortCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/ strategy.entry("My Short Entry Id", strategy.short)