یہ حکمت عملی ایک طویل مختصر ٹریڈنگ سسٹم ہے جو سادہ حرکت پذیر اوسط (ایس ایم اے) کراس اوور سگنلز کو چوٹی کی کھوج کے کنٹرول کے ساتھ جوڑتا ہے۔ یہ حکمت عملی کی چوٹی کی کھوج کی نگرانی کرتے ہوئے بیک وقت طویل اور مختصر ٹریڈنگ سگنلز پیدا کرنے کے لئے 14 مدت اور 28 مدت کے ایس ایم اے کے کراس اوور کا استعمال کرتا ہے۔ جب کھوج پہلے سے طے شدہ حد سے تجاوز کرتی ہے تو ، حکمت عملی خود بخود تجارت کو روک دیتی ہے۔ اس کے علاوہ ، حکمت عملی میں ایک تفصیلی چوٹی سے نیچے تک سائیکل تجزیہ کی خصوصیت شامل ہے تاکہ تاجروں کو حکمت عملی کی رسک کی خصوصیات کو بہتر طور پر سمجھنے میں مدد ملے۔
ٹریڈ سگنل جنریشن:
چوٹی کا کنٹرول:
چوٹی سے پورے سائیکل کا تجزیہ:
رجحان کی پیروی اور خطرے کے کنٹرول کو یکجا کرتا ہے: ایس ایم اے کراس اوور حکمت عملی ایک کلاسیکی رجحان کی پیروی کرنے والا طریقہ ہے ، جبکہ چوٹی کی کھوج کا کنٹرول رسک مینجمنٹ کی ایک اضافی پرت فراہم کرتا ہے۔ یہ امتزاج مارکیٹ کے رجحانات کو پکڑتے ہوئے نیچے کے خطرے کو مؤثر طریقے سے کنٹرول کرسکتا ہے۔
اعلی موافقت: زیادہ سے زیادہ اور کم سے کم استعمال کی حدوں کو پیرامیٹرنگ کرکے، حکمت عملی کو مختلف مارکیٹ کے ماحول اور ذاتی خطرے کی ترجیحات میں لچکدار طریقے سے ایڈجسٹ کیا جا سکتا ہے.
شفاف خطرے کے اشارے: چوٹی سے نیچے تک سائیکل تجزیہ تفصیلی تاریخی کھپت کی معلومات فراہم کرتا ہے ، جس سے تاجروں کو حکمت عملی کی رسک کی خصوصیات کو بدیہی طور پر سمجھنے کی اجازت ملتی ہے ، جس سے زیادہ باخبر تجارتی فیصلوں میں مدد ملتی ہے۔
خودکار رسک کنٹرول: جب ڈراؤنڈ پہلے سے طے شدہ حد سے تجاوز کرتا ہے تو ، حکمت عملی خود بخود تجارت کو روک دیتی ہے۔ یہ طریقہ کار مارکیٹ کے غیر موافق حالات میں مسلسل نقصانات کو مؤثر طریقے سے روک سکتا ہے۔
کارکردگی کا جامع تجزیہ: روایتی بیک ٹسٹنگ میٹرکس کے علاوہ ، حکمت عملی میں چوٹی سے نیچے تک کے سائیکل کے تفصیلی اعداد و شمار فراہم کیے گئے ہیں ، بشمول رن اپ فیصد ، ڈراؤن ڈاؤن فیصد اور وقت کی معلومات ، جو حکمت عملی کی کارکردگی کا گہرائی سے تجزیہ کرنے میں سہولت فراہم کرتی ہے۔
تاریخی اعداد و شمار پر زیادہ انحصار: ایس ایم اے کراس اوور حکمت عملی تاریخی قیمت کے اعداد و شمار پر مبنی ہے اور تیزی سے بدلتی منڈیوں میں آہستہ آہستہ رد عمل کا اظہار کرسکتا ہے ، جس سے غلط سگنل پیدا ہوسکتے ہیں۔
کثرت سے تجارت: اتار چڑھاؤ والے بازاروں میں ، ایس ایم اے اکثر عبور کرسکتے ہیں ، جس کے نتیجے میں زیادہ تجارت اور اعلی لین دین کے اخراجات ہوتے ہیں۔
بڑی رقم نکالنے کا امکان: زیادہ سے زیادہ ڈراؤنڈ کنٹرول کے باوجود، مارکیٹ میں شدید اتار چڑھاؤ کے دوران ایک ہی بڑی گرنے سے اب بھی اہم نقصانات ہوسکتے ہیں۔
پیرامیٹر حساسیت: حکمت عملی کی کارکردگی ایس ایم اے کی مدت اور کھپت کی حد کے انتخاب پر بہت زیادہ منحصر ہے۔ پیرامیٹر کی غلط ترتیبات کے نتیجے میں ناقص نتائج برآمد ہوسکتے ہیں۔
واپسی کے مواقع کھوئے ہوئے: جب زیادہ سے زیادہ ڈراؤنڈ کی حد تک پہنچنے کے بعد تجارت بند ہوجاتی ہے تو ، حکمت عملی مارکیٹ کی تبدیلیوں سے آنے والے مواقع کو کھو سکتی ہے۔
متحرک پیرامیٹر ایڈجسٹمنٹ متعارف کروائیں: مارکیٹ کی اتار چڑھاؤ کی بنیاد پر متحرک طور پر ایس ایم اے کی مدت اور ڈراؤونگ کی حد کو مختلف مارکیٹ کے ماحول کو اپنانے پر غور کریں۔
اضافی مارکیٹ فلٹرز: دیگر تکنیکی اشارے یا بنیادی عوامل جیسے آر ایس آئی یا حجم شامل کریں تاکہ ممکنہ غلط سگنل کو فلٹر کیا جاسکے۔
مرحلہ وار داخلے اور باہر نکلنے کا نفاذ: سب کچھ یا کچھ بھی نہیں کرنے کے بجائے ، پوزیشن کی تعمیر اور بندش کو مرحلہ وار لاگو کریں تاکہ ایک ہی فیصلے کے خطرے کو کم کیا جاسکے۔
منافع لینے کا طریقہ کار شامل کریں: ڈراؤنڈ کنٹرول کے اوپر، منافع میں تالا لگانے اور مجموعی واپسی کو بہتر بنانے کے لئے متحرک منافع لینے کا فنکشن شامل کریں.
پیسے کا انتظام بہتر بنائیں: خطرے کے بہتر کنٹرول کے لیے اکاؤنٹ کے سائز اور مارکیٹ کی اتار چڑھاؤ کی بنیاد پر متحرک پوزیشن سائزنگ کا نفاذ کریں۔
مشین لرننگ الگورتھم متعارف کروائیں: پیرامیٹر کے انتخاب اور سگنل کی پیداوار کے عمل کو بہتر بنانے کے لئے مشین لرننگ کی تکنیک کا استعمال کریں ، حکمت عملی کی موافقت اور درستگی کو بہتر بنائیں۔
ایس ایم اے کراس اوور لانگ شارٹ حکمت عملی ، جس میں چوٹی کی کھپت کنٹرول اور خودکار خاتمے کے ساتھ مل کر ایک مقداری تجارتی نظام ہے جو رجحان کی پیروی اور رسک مینجمنٹ کو متوازن کرتا ہے۔ یہ چوٹی کی کھپت کنٹرول کا استعمال کرتے ہوئے نیچے والے خطرے کا انتظام کرتے ہوئے سادہ حرکت پذیر اوسط کراس اوور کے ذریعے مارکیٹ کے رجحانات کو پکڑتا ہے۔ اس حکمت عملی کی منفرد خصوصیت اس کے تفصیلی چوٹی سے نیچے تک سائیکل تجزیہ میں ہے ، جو تاجروں کو حکمت عملی کی رسک کی خصوصیات کو گہرائی سے سمجھنے کے لئے ایک ٹول مہیا کرتی ہے۔
اگرچہ اس حکمت عملی میں کچھ موروثی خطرات ہیں ، جیسے تاریخی اعداد و شمار اور پیرامیٹر حساسیت پر زیادہ انحصار کرنا ، لیکن مناسب اصلاحات اور بہتری کے ذریعے اس کی استحکام اور منافع میں نمایاں اضافہ ہوسکتا ہے۔ ان میں متحرک پیرامیٹر ایڈجسٹمنٹ متعارف کرانا ، اضافی مارکیٹ فلٹرز شامل کرنا ، اور زیادہ ذہین منی مینجمنٹ کو نافذ کرنا شامل ہیں۔
مجموعی طور پر ، یہ حکمت عملی تاجروں کو ایک اچھا نقطہ اغاز فراہم کرتی ہے جسے انفرادی تجارتی اہداف اور رسک کی ترجیحات کو پورا کرنے کے لئے مزید اپنی مرضی کے مطابق اور بہتر بنایا جاسکتا ہے۔ حکمت عملی کا ماڈیولر ڈیزائن دیگر تجارتی حکمت عملیوں یا رسک مینجمنٹ تکنیکوں کے ساتھ انضمام کو بھی آسان بناتا ہے ، جس سے زیادہ پیچیدہ اور جامع تجارتی نظام کی تعمیر کی بنیاد رکھی جاسکتی ہے۔
/*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)