اس حکمت عملی میں ایم اے سی ڈی اشارے کے سنہری کراس اور مردہ کراس سگنلز ، میڈین لائن کے ساتھ اختتامی قیمت کے تعلقات ، اور قیمت کی اتار چڑھاؤ کی خصوصیات کو انٹری اور آؤٹ پوائنٹس کا تعین کرنے کے لئے جوڑ دیا گیا ہے۔ یہ خطرات پر قابو پانے اور مستحکم منافع حاصل کرتے ہوئے زیادہ تجارتی مواقع حاصل کرنے کے لئے دوبارہ انٹری اور اصلاح کے انٹری میکانزم بھی طے کرتا ہے۔
یہ حکمت عملی بنیادی طور پر مندرجہ ذیل اصولوں پر مبنی ہے:
MACD تیز لائن اور سست لائن گولڈن کراس اور مردہ کراس کا استعمال بیل اور ریچھ مارکیٹوں اور مخصوص انٹری پوائنٹس کا تعین کرنے کے لئے کریں۔
رجحانات کے اختتام اور باہر نکلنے کے مقامات کا تعین کرنے کے لئے میڈین لائن کے ساتھ بندش کی قیمت کا تعلق استعمال کریں.
منافع بڑھانے کے لئے موجودہ ایم اے سی ڈی رجحان کے اختتام کے بعد اسی سمت میں مارکیٹ میں دوبارہ داخل ہونے کے لئے دوبارہ داخل ہونے کا طریقہ کار مرتب کریں۔
ایک رجحان کے اندر جزوی قیمت کی اصلاحات کے دوران پوزیشنوں کو شامل کرنے کے لئے اصلاحات کے اندراج کا طریقہ کار مقرر کریں۔
اوپر کی بنیاد پر پوزیشنوں کو متحرک طور پر ایڈجسٹ کریں تاکہ رجحانات کے اندر زیادہ سے زیادہ منافع حاصل کیا جاسکے جبکہ رجحان ختم ہونے پر تیزی سے باہر نکلیں۔
خاص طور پر ، یہ حکمت عملی پہلے چیک کرتی ہے کہ آیا طویل یا مختصر جانے کے لئے ایم اے سی ڈی تیز اور سست لائنوں کے مابین سنہری کراس یا مردہ کراس واقع ہوتا ہے۔ پھر یہ چیک کرتی ہے کہ آیا اختتامی قیمت رجحان کے اختتام اور بند پوزیشنوں کا تعین کرنے کے لئے میڈین لائن کو چھوتی ہے۔
اس کے علاوہ ، اس حکمت عملی میں ابتدائی رجحان ختم ہونے کے بعد اگر ایم اے سی ڈی اسی سمت میں سگنل دکھاتا رہتا ہے تو ابتدائی سمت میں پوزیشنوں کو دوبارہ کھولنے کے لئے دوبارہ اندراج کا طریقہ کار ہے۔ مکمل الٹ جانے سے پہلے چھوٹی چھوٹی واپسیوں کے دوران پوزیشنوں کو اعتدال پسند طریقے سے شامل کرنے کے لئے ایک اصلاحاتی اندراج کا طریقہ کار بھی ہے۔
ان ترتیبات کے ذریعے، حکمت عملی متحرک طور پر پوزیشنوں کو ایڈجسٹ کر سکتی ہے، رجحانات کے اندر خطرات کو کنٹرول کرتے ہوئے داخلہ اور باہر نکلنے کی تعدد کو بڑھا سکتی ہے، اور واپسی کو زیادہ سے زیادہ کر سکتی ہے.
اس کثیر اشارے کی حکمت عملی کے اہم فوائد یہ ہیں:
MACD رجحانات اور انٹری کے لئے الٹ پوائنٹس کی نشاندہی کرتا ہے۔
اختتامی قیمت اور درمیانی لائن کا تعلق درست طریقے سے رجحان کے اختتام کا تعین کرتا ہے۔
واپسی سے سرمایہ کے استعمال کی کارکردگی میں اضافہ ہوتا ہے۔
اصلاحات کا اندراج بروقت رجحانات کو پکڑنے کے لئے پوزیشنوں کو شامل کرتا ہے.
قابو پانے والے خطرے کے ساتھ تجارت کی اعلی تعدد اعلی منافع کے عوامل پیدا کرتی ہے۔
مصنوعات اور مارکیٹوں میں اصلاح کے لئے حسب ضرورت پیرامیٹرز.
سادہ لائیو ٹریڈنگ کے لئے واضح منطق اور جامع کوڈ.
کافی بیک ٹسٹ ڈیٹا قابل اعتماد کو یقینی بناتا ہے۔
اہم خطرات یہ ہیں:
غلط MACD سگنل کا امکان دوسرے اشارے کے ساتھ تصدیق کی ضرورت ہے.
بہت تنگ رک جاتا ہے کہ غیر مستحکم چالوں کی طرف سے روک دیا جا سکتا ہے.
تجارت کی بڑھتی ہوئی تعدد کے لئے سرمایہ کے استعمال پر قابو پانے کی ضرورت ہے۔
درستگی کے اندراجات میں واپسی کے دوران نقصانات کا سبب بن سکتا ہے.
مختلف مصنوعات اور مارکیٹوں کے لئے مطلوبہ اصلاحات.
مسلسل بیک ٹیسٹنگ اور اصلاح کی ضرورت ہوتی ہے۔
لائیو ٹریڈنگ کے لئے سلائپ لاگت پر غور کرنا ضروری ہے۔
رسک مینجمنٹ کے اقدامات میں نقصانات کو محدود کرنے کے لئے اسٹاپ کا استعمال کرنا ، سرمایہ کے استعمال کا اندازہ لگانا ، بیک ٹیسٹنگ کے ذریعے ہر پروڈکٹ کے پیرامیٹرز کو بہتر بنانا ، پیرامیٹرز کو بہتر بنانے کے لئے مارکیٹ کی حرکیات کی نگرانی کرنا ، اور ٹیسٹوں میں سلائڈنگ کا حساب کتاب کرنا شامل ہے۔
بہتر مواقع:
سگنلز کی تصدیق کے لیے دیگر اشارے شامل کریں، مثال کے طور پر KDJ
موافقت پذیر متحرک رکاوٹوں کو لاگو کریں.
دوبارہ اندراج اور تصحیح اندراج منطق کو بہتر بنائیں.
مصنوعات کے مطابق پیرامیٹر کی اصلاح.
اندراجات کے لئے سرمایہ کے استعمال کو بہتر بنائیں.
حجم کے اشارے شامل کریں تاکہ واپسی کے اندراجات سے ہونے والے نقصانات سے بچ سکے۔
باہر نکلنے کے میکانزم شامل کریں جیسے چلنے والی رکاوٹیں.
خودکار ٹریڈنگ روبوٹ بنائیں.
حقیقی دنیا کے عوامل جیسے سلائڈنگ کا حساب لگائیں۔
یہ استحکام ، موافقت ، آٹومیشن اور براہ راست کارکردگی کو مزید بہتر بنا سکتے ہیں۔
یہ حکمت عملی خطرہ کو کنٹرول کرتے ہوئے رجحانات کو زیادہ سے زیادہ کرنے کے لئے ایم اے سی ڈی سگنل ، اختتامی قیمت تجزیہ ، اور متعدد انٹری میکانزم کو مربوط کرتی ہے۔ اس میں سرمایہ کاری کی اعلی کارکردگی اور نفاذ میں آسانی ہے لیکن اس میں خطرہ کنٹرول اور اصلاح کی ضرورت ہے۔ آٹومیشن اسے ایک مضبوط مقداری تجارتی نظام بنا سکتا ہے۔
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Puckapao //@version=4 // strategy(title="MACD", shorttitle="MACD", overlay=true, initial_capital=10000.00, currency="USD", default_qty_type=strategy.cash, default_qty_value=10000.00) // Getting inputs reenter_delay = input(title="Re-enter Delay", type=input.integer, defval=2) sculp_delay = input(title="Sculp Delay", type=input.integer, defval=4) fast_length = input(title="Fast Length", type=input.integer, defval=12) slow_length = input(title="Slow Length", type=input.integer, defval=26) src = input(title="Source", type=input.source, defval=close) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false) sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=true) ema_period = input(title="EMA Period", type=input.integer, defval=21) // Get date startDate = input(title="Start Date", type=input.integer, defval=19, minval=1, maxval=31) startMonth = input(title="Start Month", type=input.integer, defval=09, minval=1, maxval=12) startYear = input(title="Start Year", type=input.integer, defval=2017, minval=1800, maxval=2100) endDate = input(title="End Date", type=input.integer, defval=31, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=3, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2021, minval=1800, maxval=2100) // STEP 2: // Look if the close time of the current bar // falls inside the date range inDateRange = true reenter_cnt = 0 reenter_cnt := nz(reenter_cnt[1]) sculp_cnt = 0 sculp_cnt := nz(sculp_cnt[1]) close_cnt = 0 close_cnt := nz(close_cnt[1]) on_long = false on_long := nz(on_long[1]) on_short = false on_short := nz(on_short[1]) sculp = false reenter = false slowdown = false ema = ema(close, ema_period) // Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 // Calculating fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal // plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 ) // plot(macd, title="MACD", color=col_macd, transp=0) // plot(signal, title="Signal", color=col_signal, transp=0) cross_up = crossover(macd, signal) cross_down = crossunder(macd, signal) if (inDateRange) over_macd = macd > 0 and signal > 0 ? true : false under_macd = macd < 0 and signal < 0 ? true : false over_water = close > ema ? true : false under_water = close < ema ? true : false slowdown := hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] > hist ? false : true) reenter := hist >= 0 ? (hist[1] < hist ? true : false) : (hist[1] > hist ? true : false) sculp := (hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] < hist ? true : false)) if(reenter == true) if(reenter_cnt < reenter_delay) reenter_cnt := reenter_cnt + 1 else if(reenter_cnt > 0) reenter_cnt := reenter_cnt - 1 if(sculp == true) if(sculp_cnt < sculp_delay) sculp_cnt := sculp_cnt + 1 else if(sculp_cnt > 0) sculp_cnt := sculp_cnt - 1 if(slowdown == false) if(close_cnt < 2) close_cnt := close_cnt + 1 else close_cnt := 0 // plotchar(fork_cnt, "fork count", "") // plotchar(spoon_cnt, "spoon count", "") // Entry if (cross_up == true) strategy.entry("long", strategy.long, comment = "long", alert_message = "long") on_long := true on_short := false if (cross_down == true) strategy.entry("short", strategy.short, comment = "short", alert_message = "short") on_short := true on_long := false // Sculp bottom / top if (sculp == true and sculp_cnt >= sculp_delay) if (hist >= 0) strategy.entry("sculp-short", strategy.short, comment = "sculp-short", alert_message = "sculp-short") else strategy.entry("sculp-long", strategy.long, comment = "sculp-long", alert_message = "sculp-long") sculp_cnt := 0 sculp := false // Re-Entry if (reenter == true and reenter_cnt >= reenter_delay) if (hist >= 0) strategy.entry("re-long", strategy.long, comment = "re-long", alert_message = "re-long") else strategy.entry("re-short", strategy.short, comment = "re-short", alert_message = "re-short") reenter_cnt := 0 reenter := false // Close strategy.close("long", when = slowdown, comment = "close long", alert_message = "close long") strategy.close("short", when = slowdown, comment = "close short", alert_message = "close short") strategy.close("re-long", when = slowdown, comment = "close re-long", alert_message = "close re-long") strategy.close("re-short", when = slowdown, comment = "close re-short", alert_message = "close re-short") strategy.close("sculp-long", when = slowdown, comment = "close sculp-long", alert_message = "close sculp-long") strategy.close("sculp-short", when = slowdown, comment = "close sculp-short", alert_message = "close sculp-short") if (slowdown) if (hist >= 0) on_long := false else on_short := false plotchar(slowdown, "close", "") plotchar(reenter, "reenter", "") plotchar(reenter_cnt, "reenter count", "") plotchar(sculp, "sculp", "") plotchar(sculp_cnt, "sculp count", "")