وسائل لوڈ ہو رہے ہیں... لوڈنگ...

دوہری حرکت پذیر اوسط کی تبدیلی کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-12-25 13:24:14
ٹیگز:

img

جائزہ

ڈبل موونگ ایوریج ریورس اسٹریٹیجی ایک مقداری تجارتی حکمت عملی ہے جو قلیل مدتی اور طویل مدتی رجحانات کی نشاندہی کرنے کے لئے ڈبل موونگ ایوریجز کا استعمال کرتی ہے۔ یہ حکمت عملی 10 دن کی سادہ حرکت پذیر اوسط (ایس ایم اے) اور 200 دن کی ایس ایم اے کو مل کر ایک بنیادی طویل مدتی اپ ٹرینڈ کے اندر قلیل مدتی پل بیک پر سرمایہ کاری کرنے کے لئے استعمال کرتی ہے۔ اس میں رجحان کی پیروی اور رسک مینجمنٹ کے طریقہ کار بھی شامل ہیں۔

حکمت عملی منطق

دوہری حرکت پذیر اوسط کی واپسی کی حکمت عملی مندرجہ ذیل مفروضوں پر مبنی ہے:

  1. 200 دن کی ایس ایم اے مارکیٹ کے غالب طویل مدتی رجحان کی نشاندہی کرتی ہے۔ جب قیمت 200 دن کی لائن سے اوپر ہوتی ہے تو ، یہ اس بات کی نشاندہی کرتی ہے کہ مارکیٹ طویل مدتی عروج پر ہے۔

  2. 10 دن کی ایس ایم اے قیمت میں قلیل مدتی پل بیک کی نشاندہی کرتی ہے۔ جب قیمت 10 دن کی لائن سے نیچے آجاتی ہے تو ، اس سے یہ ظاہر ہوتا ہے کہ عارضی پل بیک ہوا ہے۔

  3. ایک جاری بُل مارکیٹ میں، کسی بھی قلیل مدتی واپسی کو خریدنے کے موقع کے طور پر دیکھا جا سکتا ہے تاکہ تیزی سے واپسی کو مؤثر طریقے سے پکڑا جا سکے۔

مندرجہ بالا مفروضوں کی بنیاد پر، تجارتی سگنل مندرجہ ذیل طور پر تیار کیے جاتے ہیں:

  1. جب اختتامی قیمت 200 دن کے ایس ایم اے سے اوپر اور بیک وقت 10 دن کے ایس ایم اے سے نیچے عبور کرتی ہے تو ، یہ خریدنے کا اشارہ چالو کرتا ہے کیونکہ اس سے پتہ چلتا ہے کہ طویل مدتی رجحان مثبت رہتا ہے لیکن قلیل مدتی پل بیک واقع ہوا ہے۔

  2. اگر طویل پوزیشن میں قیمت 10 دن کے ایس ایم اے سے اوپر کی طرف بڑھ جاتی ہے تو ، قلیل مدتی رجحان الٹ گیا ہے لہذا پوزیشن فوری طور پر بند کردی جائے گی۔ نیز ، اگر مارکیٹ میں کافی حد تک کمی واقع ہوتی ہے جس کی وجہ سے اسٹاپ نقصان کی خلاف ورزی ہوتی ہے تو ، پوزیشن بند ہوجائے گی۔

  3. جب بھی کوئی بڑی کمی واقع ہوتی ہے (ایک پہلے سے طے شدہ حد سے تجاوز) ، یہ ایک مخالف سگنل کے طور پر ڈپ خریدنے کا موقع پیش کرتا ہے۔

اس ڈیزائن کے ساتھ، حکمت عملی کا مقصد سٹاپ نقصانات کا استعمال کرتے ہوئے خطرے کو کنٹرول کرتے ہوئے مسلسل اپ ٹرینڈز کے دوران تیزی سے snapbacks پر مؤثر طریقے سے سرمایہ کاری کرنا ہے.

فوائد

دوہری حرکت پذیر اوسط کی واپسی کی حکمت عملی میں مندرجہ ذیل اہم فوائد ہیں:

  1. حکمت عملی کا منطق سیدھا اور آسانی سے سمجھنے کے قابل ہے.
  2. دوہری حرکت پذیر اوسط فلٹرز مختصر اور طویل مدتی رجحانات کو مؤثر طریقے سے شناخت کرتے ہیں.
  3. یہ قلیل مدتی تبدیلیوں پر سرمایہ کاری کرکے وقت کی کارکردگی کو بہتر بناتا ہے۔
  4. اسٹاپ نقصان کا اندرونی طریقہ کار انفرادی پوزیشنوں کے خطرے کو سختی سے کنٹرول کرتا ہے۔
  5. لچکدار پیرامیٹرائزیشن اس حکمت عملی کو اشاریہ جات اور اسٹاک کے لئے وسیع پیمانے پر قابل اطلاق بناتی ہے۔

خطرات

اگرچہ یہ حکمت عملی عام طور پر موثر ہے ، لیکن اس کی مندرجہ ذیل حدود ہیں:

  1. اگر مارکیٹ رینج سے منسلک ہے تو وِپساؤس اور جھوٹے سگنل ہوسکتے ہیں۔ توسیع شدہ استحکام کے دوران حکمت عملی کو غیر فعال کرنا چاہئے۔
  2. صرف حرکت پذیر اوسط پر انحصار کرنے سے سگنل کی درستگی میں حدود ہوتی ہیں۔ مزید اشارے کارکردگی کو بڑھا سکتے ہیں۔
  3. فکسڈ اسٹاپ نقصان کے طریقہ کار میں لچک کی کمی ہے۔ دیگر اسٹاپ نقصان کی تکنیکوں کا تجربہ کیا جاسکتا ہے۔
  4. زیادہ سے زیادہ پیرامیٹرز کو مختلف منڈیوں کے ل calib کیلیبریٹ کرنے کی ضرورت ہے۔ کم سے کم ترتیبات قابل اعتماد کو کم کرتی ہیں۔

بہتر مواقع

اس حکمت عملی میں مزید بہتری میں شامل ہیں:

  1. زیادہ سے زیادہ مجموعہ تلاش کرنے کے لئے دیگر چلتی اوسط لمبائی کی جانچ پڑتال.
  2. زیادہ قابل اعتماد سگنل پیدا کرنے کے لئے معاون اشارے شامل کرنا جیسے حجم ، اتار چڑھاؤ کی پیمائش
  3. دیگر سٹاپ نقصان کی تکنیکوں کی تلاش جیسے ٹریلنگ سٹاپ نقصان، وقت پر مبنی سٹاپ نقصان.
  4. انٹری رولز اور اسٹاپ نقصان کے پیرامیٹرز میں موافقت کی صلاحیتوں کی تعمیر جو مارکیٹ کی بدلتی ہوئی حرکیات کو ایڈجسٹ کرنے کے قابل بناتی ہے۔
  5. مزید تاریخی اعداد و شمار کا فائدہ اٹھاتے ہوئے پیرامیٹرز کو مزید بہتر بنانے کے لئے مشین لرننگ الگورتھم کو شامل کرنا۔

نتیجہ

خلاصہ یہ ہے کہ ، ڈبل موونگ ایوریج ریورس اسٹریٹیجی ایک انتہائی عملی نقطہ نظر ہے۔ یہ اسٹاپ نقصانات کے ساتھ جوڑے ہوئے موونگ ایوریج تجزیہ کا استعمال کرتے ہوئے پائیدار اپ ٹرینڈز کے دوران منافع بخش پل بیک دھندلا جانے کی اجازت دیتا ہے۔ یہ مارکیٹ کے نظام کا پتہ لگانے اور رسک کنٹرول کی صلاحیتوں کو بھی پیش کرتا ہے۔ مسلسل بہتری کے ساتھ ، یہ حکمت عملی متنوع کارکردگی فراہم کرنے کی مضبوط صلاحیت پیش کرتی ہے۔


/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 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/
// © Gold_D_Roger
//note: spreading 1 statement over multiple lines needs 1 apce + 1 tab | multi line function is 1 tab
//Recommended tickers: SPY (D), QQQ (D) and big indexes, AAPL (4H)

//@version=5
strategy("Davin's 10/200MA Pullback on SPY Strategy v2.0",
     overlay=true,
     initial_capital=10000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=10, // 10% of equity on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.1) //Insert your broker's rate, IB is 0.005USD or tiered

//Best parameters
// SPY D
// Stop loss 0.15
// commission of 0.005 USD using Interactive brokers
// Exit on lower close 
// Buy more when x% down --> 14%
// DO NOT include stop condition using MA crossover

// Get User Input
i_ma1           = input.int(title="MA Length 1", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA 200")
i_ma2           = input.int(title="MA Length 2", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA 10")
i_ma3           = input.int(title="MA Length 3", defval=50, step=1, group="Strategy Parameters", tooltip="MA for crossover signals`")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.15, step=0.01, group="Strategy Parameters", tooltip="Hard stop loss of 10%")
i_startTime     = input(title="Start filter", defval=timestamp("01 Jan 2013 13:30 +0000"), group="Time filter", tooltip="Start date and time to begin")
i_endTime       = input(title="End filter", defval=timestamp("01 Jan 2099 19:30 +0000"), group="Time filter", tooltip="End date and time to stop")
i_lowerClose    = input.bool(title="Exit on lower close", defval=true, group="Strategy Parameters", tooltip="Wait for lower close after above 10SMA before exiting") // optimise exit strat, boolean type creates tickbox type inputs
i_contrarianBuyTheDip = input.bool(title="Buy whenever more than x% drawdown", defval=true, group="Strategy Parameters", tooltip="Buy the dip! Whenever x% or more drawdown on SPY")
i_contrarianTrigger = input.int(title="Trigger % drop to buy the dip", defval=14, step=1, group="Strategy Parameters", tooltip="% drop to trigger contrarian Buy the Dip!") 
//14% to be best for SPY 1D
//20% best for AMZN 1D
i_stopByCrossover_MA2_3 = input.bool(title="Include stop condition using MA crossover", defval=false, group="Strategy Parameters", tooltip="Sell when crossover of MA2/1 happens")

// Get indicator values
ma1 = ta.sma(close,i_ma1) //param 1
ma2 = ta.sma(close,i_ma2) //param 2
ma3 = ta.sma(close,i_ma3) //param 3
ma_9 = ta.ema(close,9) //param 2
ma_20 = ta.ema(close,20) //param 3

// Check filter(s)
f_dateFilter = true //make sure date entries are within acceptable range

// Highest price of the prev 52 days: https://www.tradingcode.net/tradingview/largest-maximum-value/#:~:text=()%20versus%20ta.-,highest(),max()%20and%20ta.
highest52 = ta.highest(high,52)
overall_change = ((highest52 - close[0]) / highest52) * 100

// Check buy/sell conditions
var float buyPrice = 0 //intialise buyPrice, this will change when we enter a trade ; float = decimal number data type 0.0
buyCondition  = (close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter) or (strategy.position_size == 0 and i_contrarianBuyTheDip==true and overall_change > i_contrarianTrigger and f_dateFilter) // higher than 200sma, lower than short term ma (pullback) + avoid pyramiding positions
sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])  //check if we already in trade + close above 10MA; 
// third condition: EITHER i_lowerClose not turned on OR closing price has to be < previous candle's LOW [1]

stopDistance  = strategy.position_size > 0 ? ((buyPrice - close)/close) : na // check if in trade > calc % drop dist from entry, if not na
stopPrice     = strategy.position_size > 0 ? (buyPrice - (buyPrice * i_stopPercent)) : na // calc SL price if in trade, if not, na
stopCondition = (strategy.position_size > 0 and stopDistance > i_stopPercent) or (strategy.position_size > 0 and (i_stopByCrossover_MA2_3==true and ma3 < ma1))


// Enter positions
if buyCondition 
    strategy.entry(id="Long", direction=strategy.long) //long only

    
if buyCondition[1] // if buyCondition is true prev candle
    buyPrice := open // entry price = current bar opening price

// Exit position
if sellCondition or stopCondition 
    strategy.close(id="Long", comment = "Exit" + (stopCondition ? "Stop loss=true" : "")) // if condition? "Value for true" : "value for false"
    buyPrice := na //reset buyPrice

// Plot
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset = -1)
plot(ma1, color=color.blue) //defval=200
plot(ma2, color=color.white) //defval=10
plot(ma3, color=color.yellow) // defval=50






مزید