
এই কৌশলটি হল একটি মাল্টি-হোল্ডিং ট্রেডিং সিস্টেম যা সিম্পল মুভিং এভারেজ (এসএমএ) ক্রস সিগন্যাল এবং পিক রিট্র্যাকশন কন্ট্রোলের সমন্বয় করে। এটি 14 এবং 28 পিরিয়ডের এসএমএর ক্রস ব্যবহার করে মাল্টি-হোল্ডিং ট্রেডিং সিগন্যাল তৈরি করে এবং রিয়েল-টাইমে কৌশলটির পিক রিট্র্যাকশন পর্যবেক্ষণ করে। যখন রিট্র্যাকশনটি ডিফল্ট থ্রিলের চেয়ে বেশি হয় তখন কৌশলটি স্বয়ংক্রিয়ভাবে ট্রেডিং বন্ধ করে দেয়। এছাড়াও, কৌশলটিতে একটি বিস্তারিত পিক-ভ্যালি চক্র বিশ্লেষণ বৈশিষ্ট্য রয়েছে যা ব্যবসায়ীদের কৌশলটির ঝুঁকি বৈশিষ্ট্যগুলি আরও ভালভাবে বুঝতে সহায়তা করে।
ট্রেডিং সিগন্যাল জেনারেটঃ
শীর্ষস্থানীয় প্রত্যাহার নিয়ন্ত্রণঃ
পিক-ভ্যালি চক্র বিশ্লেষণঃ
ট্রেন্ড ট্র্যাকিং এবং রিস্ক কন্ট্রোলের সমন্বয়েঃ এসএমএ ক্রস কৌশল একটি ক্লাসিক ট্রেন্ড ট্র্যাকিং পদ্ধতি, এবং পিক রিট্র্যাকশন কন্ট্রোল একটি অতিরিক্ত ঝুঁকি ব্যবস্থাপনা স্তর প্রদান করে। এই সংমিশ্রণটি বাজারের প্রবণতা ক্যাপচার করার সময় কার্যকরভাবে নিম্নমুখী ঝুঁকি নিয়ন্ত্রণ করতে পারে।
স্বনির্ভরশীলতা: সর্বোচ্চ প্রত্যাহার এবং সর্বনিম্ন প্রত্যাহারের থ্রেশহোল্ডের পরামিতি সেট করে, কৌশলটি বিভিন্ন বাজার পরিস্থিতি এবং ব্যক্তিগত ঝুঁকি পছন্দ অনুসারে নমনীয়ভাবে সামঞ্জস্য করতে পারে।
স্বচ্ছ ঝুঁকির সূচকঃ পিক-ভ্যালি চক্র বিশ্লেষণের মাধ্যমে ট্রেডারদের কৌশলগত ঝুঁকির বৈশিষ্ট্যগুলি সম্পর্কে একটি স্বজ্ঞাত ধারণা প্রদানের জন্য এবং আরও বুদ্ধিমান ট্রেডিং সিদ্ধান্ত গ্রহণের জন্য বিস্তারিত ঐতিহাসিক প্রত্যাহারের তথ্য প্রদান করা হয়।
স্বয়ংক্রিয় ঝুঁকি নিয়ন্ত্রণঃ যখন প্রত্যাহার পূর্বনির্ধারিত থ্রেশহোল্ড অতিক্রম করে তখন কৌশলটি স্বয়ংক্রিয়ভাবে লেনদেন বন্ধ করে দেয়, এই প্রক্রিয়াটি প্রতিকূল বাজার পরিস্থিতিতে স্থায়ী ক্ষতির বিরুদ্ধে কার্যকরভাবে প্রতিরোধ করতে পারে।
সম্পূর্ণ পারফরম্যান্স বিশ্লেষণঃ প্রচলিত রিটার্নিং সূচক ছাড়াও, কৌশলটি পিক-ভ্যালি-সাইকেল ডেটা সহ বিস্তারিত পিক-ভ্যালি-সাইকেল ডেটা সরবরাহ করে, যার মধ্যে উত্থান, প্রত্যাহার এবং সময় সম্পর্কিত তথ্য রয়েছে, যা কৌশলটির কার্যকারিতা বিশ্লেষণে সহায়তা করে।
ইতিহাসের উপর অত্যধিক নির্ভরশীলতাঃ এসএমএ ক্রস কৌশলগুলি ঐতিহাসিক মূল্যের তথ্যের উপর ভিত্তি করে তৈরি করা হয়, যা দ্রুত পরিবর্তিত বাজারে প্রতিক্রিয়াশীল হতে পারে, যার ফলে ভুল সংকেত তৈরি হয়।
ঘন ঘন লেনদেনঃ অস্থির বাজারগুলিতে, এসএমএগুলি ঘন ঘন ক্রস হতে পারে, যার ফলে অত্যধিক লেনদেন এবং উচ্চ লেনদেনের ব্যয় হতে পারে।
এই ছবিতে দেখা যায়, যদিও সর্বাধিক প্রত্যাহারের নিয়ন্ত্রণ রয়েছে, তবে বাজারের তীব্র অস্থিরতার সময়, একক বড় পতন এখনও বড় ক্ষতির কারণ হতে পারে।
প্যারামিটার সংবেদনশীলতাঃ কৌশলগত কার্যকারিতা এসএমএ চক্র এবং প্রত্যাহারের থ্রেশহোল্ডের পছন্দগুলির উপর অত্যন্ত নির্ভরশীল, এবং ভুল প্যারামিটার সেটগুলি নিম্নতর ফলাফলের কারণ হতে পারে।
এই ছবিটি সৌদি আরবের। যখন সর্বোচ্চ প্রত্যাহারের থ্রেশহোল্ড পৌঁছায়, তখন ট্রেডিং বন্ধ করে দেওয়া হয়। এই কৌশলটি বাজারের বিপরীতমুখী হওয়ার সুযোগটি মিস করতে পারে।
ডায়নামিক প্যারামিটার সমন্বয়ঃ বিভিন্ন বাজারের অবস্থার সাথে সামঞ্জস্য রেখে এসএমএ চক্র এবং প্রত্যাহারের প্রান্তিককরণ বিবেচনা করা যেতে পারে।
মার্কেট ফিল্টার যুক্ত করুনঃ অন্যান্য প্রযুক্তিগত বা মৌলিক সূচক যেমন RSI বা লেনদেনের পরিমাণের সাথে মিলিত হয়ে সম্ভাব্য মিথ্যা সংকেতগুলি ফিল্টার করুন।
এদিকে, অন্যরা বলছেন, “এটা একটা বড় সমস্যা। সম্পূর্ণ ভাণ্ডার অপারেশনের পরিবর্তে, একক সিদ্ধান্তের ঝুঁকি হ্রাস করার জন্য ভাণ্ডার এবং ভাণ্ডার তৈরি করা সম্ভব।
“এখনই, আমরা এই পরিস্থিতিতে আছি। প্রত্যাহার নিয়ন্ত্রণের উপর ভিত্তি করে, মুনাফা লক করার জন্য এবং সামগ্রিক আয় বৃদ্ধি করার জন্য গতিশীল স্টপ ফাংশন যুক্ত করুন।
তহবিল ব্যবস্থাপনার অনুকূলীকরণঃ অ্যাকাউন্টের আকার এবং বাজারের অস্থিরতার উপর ভিত্তি করে ডায়নামিক পজিশন ম্যানেজমেন্ট বাস্তবায়ন করুন, যাতে ঝুঁকি আরও ভালভাবে নিয়ন্ত্রণ করা যায়।
মেশিন লার্নিং অ্যালগরিদম চালু করুনঃ মেশিন লার্নিং প্রযুক্তি ব্যবহার করে প্যারামিটার নির্বাচন এবং সংকেত উত্পাদন প্রক্রিয়া অপ্টিমাইজ করুন, কৌশলগুলির অভিযোজনযোগ্যতা এবং নির্ভুলতা বাড়ান।
এসএমএ ক্রস পলিফিল্ড কৌশলটি পিক রিটার্ন কন্ট্রোল এবং স্বয়ংক্রিয় সমাপ্তির সাথে একত্রিত একটি পরিমাণগত ট্রেডিং সিস্টেম যা প্রবণতা ট্র্যাকিং এবং ঝুঁকি ব্যবস্থাপনা উভয়ই করে। এটি বাজারের প্রবণতাকে সহজ সরল গড়ের ক্রসিংয়ের মাধ্যমে ক্যাপচার করে এবং পিক রিটার্ন কন্ট্রোল ব্যবহার করে নিম্নমুখী ঝুঁকি পরিচালনা করে। কৌশলটির অনন্যতা হ’ল এর বিশদ পিক-ভ্যালি চক্র বিশ্লেষণ বৈশিষ্ট্য যা ব্যবসায়ীদের কৌশলগত ঝুঁকির বৈশিষ্ট্য সম্পর্কে গভীরভাবে বোঝার জন্য একটি সরঞ্জাম সরবরাহ করে।
যদিও কৌশলটির কিছু অন্তর্নিহিত ঝুঁকি রয়েছে, যেমন অতীতের ডেটা এবং প্যারামিটার সংবেদনশীলতার উপর অত্যধিক নির্ভরশীলতা, তবে ডায়নামিক প্যারামিটার সমন্বয়, অতিরিক্ত বাজার ফিল্টার যুক্ত করা এবং আরও স্মার্ট তহবিল পরিচালনার প্রয়োগের মতো যথাযথ অপ্টিমাইজেশন এবং উন্নতির মাধ্যমে এর স্থিতিশীলতা এবং লাভজনকতা উল্লেখযোগ্যভাবে বাড়ানো যেতে পারে।
সামগ্রিকভাবে, এই কৌশলটি ব্যবসায়ীদের জন্য একটি ভাল সূচনা পয়েন্ট সরবরাহ করে, যার উপর ভিত্তি করে ব্যক্তিগত ট্রেডিং লক্ষ্য এবং ঝুঁকি পছন্দগুলি পূরণের জন্য আরও কাস্টমাইজেশন এবং অপ্টিমাইজেশন করা যায়। কৌশলটির মডিউল ডিজাইনটি অন্যান্য ট্রেডিং কৌশল বা ঝুঁকি ব্যবস্থাপনা প্রযুক্তির সাথে সহজেই সংহত করতে সহায়তা করে, যা আরও জটিল এবং বিস্তৃত ট্রেডিং সিস্টেম তৈরির ভিত্তি তৈরি করে।
/*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)