اس مضمون میں ایک الگورتھمک تجارتی حکمت عملی کا تعارف کرایا گیا ہے جو گلے لگانے کے نمونوں کے ذریعے منافع بخش مواقع کی نشاندہی کرتا ہے اور داخلہ سگنل کے طور پر حرکت پذیر اوسط کے ساتھ قیمت کراس اوور کا استعمال کرتا ہے۔ تکنیکی تجزیہ کو رجحان کے بعد کے طریقوں کے ساتھ جوڑ کر ، اس حکمت عملی کا مقصد استحکام اور رجحان کی تبدیلی کے مقامات پر منافع حاصل کرنا ہے۔
اس حکمت عملی کا بنیادی منطق دو غیر متعلقہ اشارے کے تبادلہ پر مبنی ہے:
نگلنے والا نمونہ: دو موم بتیوں کا الٹ نمونہ جس میں دوسری موم بتی کا جسم مکمل طور پر پہلی موم بتی کا جسم
چلتی اوسط کے ساتھ قیمت کراس اوور: جب قیمت نیچے سے چلتی اوسط لائن سے اوپر کی طرف بڑھتی ہے تو خرید کا اشارہ پیدا ہوتا ہے۔ فروخت کا اشارہ اس وقت ہوتا ہے جب قیمت اوپر سے چلتی اوسط لائن سے نیچے کی طرف بڑھتی ہے۔
مارکیٹ کے ممکنہ الٹ کے وقت کو گلے لگانے کے نمونوں کے ساتھ جائزہ لینے اور حرکت پذیر اوسط کے ساتھ قیمتوں کے کراس اوور کو تصدیق کے اشارے کے طور پر استعمال کرنے سے ، منافع کے امکان کو بہتر بنایا جاسکتا ہے۔
خاص طور پر ، یہ حکمت عملی ممکنہ استحکام اور الٹ جانے کا تعین کرنے کے لئے تین قسم کے گلے لگانے کے نمونوں کو ٹریک کرتی ہے۔ قیمت اور حرکت پذیر اوسط کراس اوور کے سنہری کراس اور مردہ کراس سگنلز کے ساتھ مل کر ، کھلی پوزیشنوں کی سمت کا حتمی تعین کیا جاتا ہے۔
اس حکمت عملی کا سب سے بڑا فائدہ فیصلہ سازی کی تاثیر کو بہتر بنانے کے لئے غیر متعلقہ اشارے کے تبادلوں کا استعمال کرنا ہے۔ نگلپنگ پیٹرن مارکیٹ میں الٹ جانے کے وقت اور امکان کا فیصلہ کرتے ہیں۔ جبکہ حرکت پذیر اوسط کے ساتھ قیمت کراس اوور الٹ جانے کی سمت اور رفتار کی تصدیق کرتا ہے۔ دونوں ایک دوسرے کی توثیق کرتے ہیں اور غلط اشاروں کی وجہ سے ہونے والے تجارتی نقصانات کو مؤثر طریقے سے کم کرسکتے ہیں۔
ایک اور فائدہ پیرامیٹر کی ترتیبات کی لچک ہے۔ صارفین اپنی حکمت عملی کو بہتر بنانے کے ل parameters پیرامیٹرز جیسے چلتی اوسط مدت اور اسٹاپ نقصان کی حد مقرر کرسکتے ہیں۔
اگرچہ متعدد اشارے کا استعمال فیصلے کو بہتر بناتا ہے ، لیکن اس حکمت عملی میں ابھی بھی غلط اشاروں کے کچھ خطرات ہیں۔ نگلنگ پیٹرن 100٪ قابل اعتماد الٹ سگنل نہیں ہیں ، اور حرکت پذیر اوسط کے ساتھ قیمت کے کراس اوور میں ناکامی کے منظرنامے بھی موجود ہیں۔ یہ سب جلد از جلد کھلنے والی پوزیشنوں سے نقصانات کا باعث بن سکتے ہیں۔
مزید برآں ، زیادہ تر تکنیکی تجزیہ کی حکمت عملیوں کی طرح ، یہ متضاد رجحانات کی منڈیوں جیسے رینج اور استحکام میں بھی ناقص کارکردگی کا مظاہرہ کرتا ہے۔ طویل عرصے تک رخا قیمت کی کارروائی اسٹاپ نقصان کو متحرک کرسکتی ہے یا منافع حاصل کرنے کی جگہ کو محدود کرسکتی ہے۔
خطرات پر قابو پانے کے ل parameters ، پیرامیٹرز جیسے حرکت پذیر اوسط مدت اور اسٹاپ نقصان کی حد کو اسی کے مطابق ایڈجسٹ کیا جاسکتا ہے۔ رجحانات اور ضمنی منڈیوں کی نشاندہی کرنے کے لئے دوسرے اشارے پر بھی غور کیا جاسکتا ہے ، تاکہ حکمت عملی میں شرکت کو متحرک طور پر منظم کیا جاسکے۔
اس حکمت عملی کے لئے مندرجہ ذیل شعبوں کو بہتر بنایا جاسکتا ہے:
زیادہ سے زیادہ چلتی اوسط اقسام کا تجربہ کریں تاکہ زیادہ سے زیادہ پیرامیٹر سیٹ مل سکے ، جیسے وزن دار چلتی اوسط ، ڈبل ہموار چلتی اوسط وغیرہ۔
سائیڈ ویز مارکیٹوں میں پوزیشن کھولنے سے بچنے کے لئے رجحانات کا جائزہ لینے والے اشارے شامل کریں۔ مثال کے طور پر ADX ، بولنگر بینڈ وغیرہ۔
کارکردگی کو بہتر بنانے کے لئے اسٹاپ نقصان کے طریقوں کو بہتر بنائیں۔ ٹریلنگ اسٹاپ نقصان ، چنڈلیئر ایگزٹ پر غور کیا جاسکتا ہے۔
شمعدان کے نمونوں کا فیصلہ کرنے کے لئے مشین لرننگ کے طریقوں میں اضافہ کریں اور نگلنے کی شناخت کی درستگی کو بہتر بنائیں۔
انکولی ایڈجسٹمنٹ کے لئے پیرامیٹر کی اصلاح کے افعال شامل کریں.
یہ حکمت عملی گلے لگانے کے نمونوں کے ساتھ الٹ ٹائمنگ کی نشاندہی کرتی ہے اور اوسط حرکت پذیر کے ساتھ قیمت کراس اوور کا استعمال کرتے ہوئے سمت کی تصدیق کرتی ہے۔ اشارے کے تبادلوں کے ذریعہ فیصلے کی تاثیر کو بہتر بناتے ہوئے ، یہ ایک تکنیکی تجزیہ کا نقطہ نظر ہے۔ فوائد میں تکمیلی اشارے اور لچکدار پیرامیٹرز شامل ہیں۔ نقصانات میں غلط سگنل اور ضمنی مارکیٹوں میں کمزوری کے خطرات شامل ہیں۔ اس حکمت عملی کو مزید بڑھانے کے طریقوں میں اوسط حرکت پذیر پیرامیٹرز کو بہتر بنانا ، سٹاپ نقصان کے طریقوں ، رجحان فلٹرنگ اشارے وغیرہ شامل ہیں۔
/*backtest start: 2023-12-30 00:00:00 end: 2024-01-29 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //@author=Daveatt StrategyName = "BEST Engulfing + MA" ShortStrategyName = "BEST Engulfing + MA" strategy(title=StrategyName, shorttitle=ShortStrategyName, overlay=true) includeEngulfing = true includeMA = true source_ma = input(title="Source Price vs MA", type=input.source, defval=close) typeofMA = input(title="Type of MA", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "KMA", "TMA", "HullMA", "DEMA", "TEMA"]) length_ma = input(32, title = "MA Length", type=input.integer) // ---------- Candle components and states GreenCandle = close > open RedCandle = close < open NoBody = close==open Body = abs(close-open) // bullish conditions isBullishEngulfing1 = max(close[1],open[1]) < max(close,open) and min(close[1],open[1]) > min(close,open) and Body > Body[1] and GreenCandle and RedCandle[1] isBullishEngulfing2 = max(close[1],open[1]) < max(close,open) and min(close[1],open[1]) <= min(close,open) and Body > Body[1] and GreenCandle and RedCandle[1] // bearish conditions isBearishEngulfing1 = max(close[1],open[1]) < max(close,open) and min(close[1],open[1]) > min(close,open) and Body > Body[1] and RedCandle and GreenCandle[1] isBearishEngulfing2 = max(close[1],open[1]) >= max(close,open) and min(close[1],open[1]) > min(close,open) and Body > Body[1] and RedCandle and GreenCandle[1] // consolidation of conditions isBullishEngulfing = isBullishEngulfing1 or isBullishEngulfing2 isBearishEngulfing = isBearishEngulfing1 or isBearishEngulfing2 //isBullishEngulfing = max(close[1],open[1]) < max(close,open) and min(close[1],open[1]) > min(close,open) and Body > Body[1] and GreenCandle and RedCandle[1] //isBearishEngulfing = max(close[1],open[1]) < max(close,open) and min(close[1],open[1]) > min(close,open) and Body > Body[1] and RedCandle and GreenCandle[1] Engulf_curr = 0 - barssince(isBearishEngulfing) + barssince(isBullishEngulfing) Engulf_Buy = Engulf_curr < 0 ? 1 : 0 Engulf_Sell = Engulf_curr > 0 ? 1 : 0 // Price vs MM smma(src, len) => smma = 0.0 smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len smma ma(smoothing, src, length) => if smoothing == "RMA" rma(src, length) else if smoothing == "SMA" sma(src, length) else if smoothing == "EMA" ema(src, length) else if smoothing == "WMA" wma(src, length) else if smoothing == "VWMA" vwma(src, length) else if smoothing == "SMMA" smma(src, length) else if smoothing == "HullMA" wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length))) else if smoothing == "LSMA" src else if smoothing == "KMA" xPrice = src xvnoise = abs(xPrice - xPrice[1]) nfastend = 0.666 nslowend = 0.0645 nsignal = abs(xPrice - xPrice[length]) nnoise = sum(xvnoise, length) nefratio = iff(nnoise != 0, nsignal / nnoise, 0) nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) nAMA = 0.0 nAMA := nz(nAMA[1]) + nsmooth * (xPrice - nz(nAMA[1])) nAMA else if smoothing == "TMA" sma(sma(close, length), length) else if smoothing == "DEMA" 2 * src - ema(src, length) else if smoothing == "TEMA" 3 * (src - ema(src, length)) + ema(ema(src, length), length) else src MA = ma(typeofMA, source_ma, length_ma) plot(MA, color=#006400FF, title="MA breakout", linewidth=3) macrossover = crossover (source_ma, MA) macrossunder = crossunder(source_ma, MA) since_ma_buy = barssince(macrossover) since_ma_sell = barssince(macrossunder) macross_curr = 0 - since_ma_sell + since_ma_buy bullish_MA_cond = macross_curr < 0 ? 1 : 0 bearish_MA_cond = macross_curr > 0 ? 1 : 0 posUp = (Engulf_Buy ? 1 : 0) + (bullish_MA_cond ? 1 : 0) posDn = (Engulf_Sell ? 1 : 0) + (bearish_MA_cond ? 1 : 0) conditionUP = posUp == 2 and posUp[1] < 2 conditionDN = posDn == 2 and posDn[1] < 2 sinceUP = barssince(conditionUP) sinceDN = barssince(conditionDN) // primary-first signal of the trend nUP = crossunder(sinceUP,sinceDN) nDN = crossover(sinceUP,sinceDN) // and the following secondary signals // save of the primary signal sinceNUP = barssince(nUP) sinceNDN = barssince(nDN) buy_trend = sinceNDN > sinceNUP sell_trend = sinceNDN < sinceNUP // engulfing by barcolor(nUP ? color.orange : na, title="Bullish condition") barcolor(nDN ? color.yellow : na, title="Bearish condition") isLong = nUP isShort = nDN long_entry_price = valuewhen(nUP, close, 0) short_entry_price = valuewhen(nDN, close, 0) longClose = close[1] < MA shortClose = close[1] > MA /////////////////////////////////////////////// //* Backtesting Period Selector | Component *// /////////////////////////////////////////////// StartYear = input(2017, "Backtest Start Year",minval=1980) StartMonth = input(1, "Backtest Start Month",minval=1,maxval=12) StartDay = input(1, "Backtest Start Day",minval=1,maxval=31) testPeriodStart = timestamp(StartYear,StartMonth,StartDay,0,0) StopYear = input(2020, "Backtest Stop Year",minval=1980) StopMonth = input(12, "Backtest Stop Month",minval=1,maxval=12) StopDay = input(31, "Backtest Stop Day",minval=1,maxval=31) testPeriodStop = timestamp(StopYear,StopMonth,StopDay,0,0) testPeriod() => true ////////////////////////// //* Profit Component *// ////////////////////////// input_tp_pips = input(600, "Backtest Profit Goal (in USD)",minval=0) input_sl_pips = input(300, "Backtest STOP Goal (in USD)",minval=0) tp = buy_trend? long_entry_price + input_tp_pips : short_entry_price - input_tp_pips sl = buy_trend? long_entry_price - input_sl_pips : short_entry_price + input_sl_pips long_TP_exit = buy_trend and high >= tp short_TP_exit = sell_trend and low <= tp plot(tp, title="TP", style=plot.style_circles, linewidth=3, color=color.blue) plot(sl, title="SL", style=plot.style_circles, linewidth=3, color=color.red) if testPeriod() strategy.entry("Long", 1, when=isLong) strategy.close("Long", when=longClose ) strategy.exit("XL","Long", limit=tp, when=buy_trend, stop=sl) if testPeriod() strategy.entry("Short", 0, when=isShort) strategy.close("Short", when=shortClose ) strategy.exit("XS","Short", when=sell_trend, limit=tp, stop=sl)