یہ حکمت عملی بنیادی طور پر رجحانات کی نشاندہی کرنے کے لئے دوہری ای ایم اے اور ڈی ای ایم اے رفتار کے کراس اوور کا استعمال کرتی ہے ، اور جھوٹے بریک آؤٹ کو فلٹر کرنے کے لئے اے ٹی آر اتار چڑھاؤ انڈیکس کو شامل کرتی ہے ، دوہری رفتار کے اشارے اور اتار چڑھاؤ فلٹرنگ کے ساتھ مقداری تجارتی حکمت عملی کو نافذ کرتی ہے۔
اس حکمت عملی کے اہم اجزاء میں شامل ہیں:
قیمت کے ای ایم اے اور ڈی ای ایم اے کا حساب دوہری رفتار کے اشارے کے طور پر لگائیں۔ طویل مدتی ای ایم اے طویل مدتی رجحانات کی عکاسی کرتا ہے ، جبکہ ڈی ای ایم اے ایک زیادہ حساس قلیل مدتی رفتار اشارے کے طور پر کام کرتا ہے۔ جب ڈی ایم اے ای ایم اے سے تجاوز کرتا ہے تو خرید کا اشارہ پیدا ہوتا ہے۔
اے ٹی آر اتار چڑھاؤ انڈیکس کا حساب لگائیں۔ مارکیٹ کی اتار چڑھاؤ اور لیکویڈیٹی کے حالات کا تعین کرنے کے لئے اے ٹی آر ویلیو کا استعمال کریں۔ غلط بریک آؤٹ سے بچنے کے لئے اتار چڑھاؤ بہت زیادہ ہونے پر رفتار اشارے کے اشاروں کو فلٹر کریں۔
اے ٹی آر کی اتار چڑھاؤ کو پیرامیٹر شدہ حرکت پذیر اوسط لائن کے ذریعہ اعلی یا کم قرار دیا جاتا ہے۔ مومنٹم اشارے کے سگنل صرف اس وقت متحرک ہوتے ہیں جب اے ٹی آر کی اتار چڑھاؤ حرکت پذیر اوسط لائن سے نیچے ہوتی ہے۔
پیرامیٹرز ATR ٹائم فریم، ATR لمبائی، ATR چلتی اوسط قسم اور لمبائی وغیرہ کو کنٹرول کرتے ہیں.
طویل پوزیشنوں کے لئے سٹاپ نقصان، منافع لے اور پیچھے رکنے کے قوانین قائم کریں.
ڈبل ای ایم اے فلٹر بنیادی ای ایم اے کراس حکمت عملیوں کے مقابلے میں جھوٹے سگنل اور اوور ٹریڈنگ کو نمایاں طور پر کم کرسکتا ہے۔ اے ٹی آر اتار چڑھاؤ انڈیکس کو شامل کرنے سے معمولی اتار چڑھاؤ سے گمراہ کن سگنل کو مؤثر طریقے سے فلٹر کیا جاتا ہے اور پھنس جانے سے بچا جاتا ہے۔
سنگل مومنٹم اشارے کے مقابلے میں ، دوہری ڈیزائن فیصلے کی تاثیر کو بہتر بنا سکتا ہے۔ ایک زیادہ ذمہ دار قلیل مدتی مومنٹم اشارے کے طور پر ، مستحکم طویل مدتی ای ایم اے کے ساتھ مل کر ڈی ای ایم اے ایک قابل اعتماد کمبو سگنل تشکیل دیتا ہے۔
اے ٹی آر پیرامیٹرز کو ایڈجسٹ کرکے ، مختلف ٹکرز کے لئے مناسب اتار چڑھاؤ کی حد مقرر کی جاسکتی ہے ، جس سے حکمت عملی کی موافقت کو بہتر بنایا جاسکتا ہے۔
سب سے بڑا خطرہ یہ ہے کہ پیرامیٹر کی غلط ترتیبات کے نتیجے میں بہت کم تجارتی سگنل ہوسکتے ہیں۔ بہت لمبی ڈی ای ایم اے اور ای ایم اے لمبائی ، یا اے ٹی آر اتار چڑھاؤ کی حد بہت زیادہ مقرر کی جاسکتی ہے ، یہ سب اصل حکمت عملی کی کارکردگی کو کم کر سکتی ہے۔ پیرامیٹر کے بہترین امتزاج کو تلاش کرنے کے لئے بار بار بیک ٹیسٹ کرنے کی ضرورت ہے۔
ایک اور ممکنہ خطرہ یہ ہے کہ مارکیٹ کے انتہائی حالات میں ، قیمتوں میں اتار چڑھاؤ نقصانات کا باعث بننے والی اے ٹی آر پیرامیٹر کی پابندیوں کی خلاف ورزی کرسکتا ہے۔ جب ضروری ہو تو حکمت عملی کے نفاذ کو روکنے کے لئے مارکیٹ کی خرابیوں کی دستی نگرانی کی ضرورت ہے۔
بہترین ترتیبات تلاش کرنے کے لئے مختلف رفتار اشارے پیرامیٹر کے مجموعے کی جانچ کریں.
دوہری ای ایم اے سے ایم اے سی ڈی یا دیگر اشارے کے ساتھ رفتار کے اشارے کی جگہ لینے کی کوشش کریں.
مختلف اتار چڑھاؤ انڈیکس کی تشکیل کی جانچ کریں، جیسے مجموعی تاریخی اے ٹی آر، مارکیٹ اتار چڑھاؤ انڈیکس وغیرہ۔
حجم فلٹرنگ کا اضافہ کریں تاکہ غلط قیمتوں میں خرابی سے بچنے کا خطرہ ہو۔
سٹاپ نقصان کو بہتر بنائیں اور منافع حاصل کرنے کے طریقہ کار کو بہتر بنانے کے لئے خطرہ انعام تناسب.
یہ حکمت عملی ایک ٹھوس نظریاتی بنیاد کے ساتھ رفتار تجزیہ اور اتار چڑھاؤ کی تحقیق کو مربوط کرتی ہے۔ پیرامیٹر ٹیوننگ اور منطق کی اصلاح کے ذریعے ، یہ ایک مستحکم اور قابل اعتماد الگورتھمک ٹریڈنگ سسٹم بن سکتا ہے۔ واضح تجارتی سگنلز اور قابل کنٹرول خطرات کے ساتھ ، یہ براہ راست تجارت میں تصدیق اور نفاذ کے قابل ہے۔
/*backtest start: 2023-11-21 00:00:00 end: 2023-12-21 00:00:00 period: 1h 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/ // © Qorbanjf //@version=4 strategy("ORIGIN DEMA/EMA & VOL LONG ONLY", shorttitle="ORIGIN DEMA/EMA & VOL LONG", overlay=true) // DEMA length = input(10, minval=1, title="DEMA LENGTH") src = input(close, title="Source") e1 = ema(src, length) e2 = ema(e1, length) dema1 = 2 * e1 - e2 plot(dema1, "DEMA", color=color.yellow) //EMA len = input(25, minval=1, title="EMA Length") srb = input(close, title="Source") offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) ema1 = ema(srb, len) plot(ema1, title="EMA", color=color.blue, offset=offset) // Inputs atrTimeFrame = input("D", title="ATR Timeframe", type=input.resolution) atrLookback = input(defval=14,title="ATR Lookback Period",type=input.integer) useMA = input(title = "Show Moving Average?", type = input.bool, defval = true) maType = input(defval="EMA", options=["EMA", "SMA"], title = "Moving Average Type") maLength = input(defval = 20, title = "Moving Average Period", minval = 1) //longLossPerc = input(title="Long Stop Loss (%)", // type=input.float, minval=0.0, step=0.1, defval=1) * 0.01 longTrailPerc = input(title="Trail stop loss (%)", type=input.float, minval=0.0, step=0.1, defval=50) * 0.01 longProfitPerc = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=3000) / 100 // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2017, title = "From Year", minval = 2000) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) // ATR Logic // atrValue = atr(atrLookback) // atrp = (atrValue/close)*100 // plot(atrp, color=color.white, linewidth=2, transp = 30) atrValue = security(syminfo.tickerid, atrTimeFrame, atr(atrLookback)) atrp = (atrValue/close)*100 // Moving Average Logic ma(maType, src, length) => maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc) maFilter = security(syminfo.tickerid, atrTimeFrame, ma(maType, atrp, maLength)) // variables for enter position enterLong = crossover(dema1, ema1) and atrp < maFilter // variables for exit position sale = crossunder(dema1, ema1) // stop loss //longStopPrice = strategy.position_avg_price * (1 - longLossPerc) // trail stop // Determine trail stop loss prices longStopTrail = 0.0 longStopTrail := if (strategy.position_size > 0) stopValue = close * (1 - longTrailPerc) max(stopValue, longStopTrail[1]) else 0 //Take profit Percentage longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) //Enter trades when conditions are met strategy.entry(id="long", long=strategy.long, when=enterLong, comment="long") // strategy.close("long", when = sale, comment = "Sell") //place exit orders (only executed after trades are active) strategy.exit(id="sell", limit = longExitPrice, stop = longStopTrail, comment = "SL/TP")