ڈبل موونگ ایوریج ریورسل اسٹریٹیجی


تخلیق کی تاریخ: 2023-12-25 13:24:14 آخر میں ترمیم کریں: 2023-12-25 13:24:14
کاپی: 1 کلکس کی تعداد: 575
1
پر توجہ دیں
1621
پیروکار

ڈبل موونگ ایوریج ریورسل اسٹریٹیجی

جائزہ

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

حکمت عملی کا اصول

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

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

  2. 10 دن کی سادہ حرکت پذیری اوسط مارکیٹ میں قلیل مدتی واپسی کی نشاندہی کرنے کے قابل ہے۔ جب قیمت 10 دن کی لائن سے نیچے ہوتی ہے تو ، اس کا مطلب ہے کہ قلیل مدتی واپسی ہوگی۔

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

مندرجہ بالا مفروضوں کی بنیاد پر ، حکمت عملی کے لئے ٹریڈنگ سگنل جنریشن کی منطق یہ ہے:

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

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

  3. جب مجموعی طور پر بڑے پیمانے پر کمی واقع ہوتی ہے تو ، خریدنے کے وقت کو پہلے سے طے شدہ کمی کی حد کے ذریعہ خریدنے کے موقع کے طور پر استعمال کیا جاسکتا ہے۔

اس طرح کے ڈیزائن کے ساتھ ، بیل کی مارکیٹ میں طویل مدتی bullish رجحان کے تحت ، مؤثر طریقے سے کم suckback کے لئے ، اور خطرے کو کنٹرول کرنے کے لئے سٹاپ نقصان کی ترتیب.

اسٹریٹجک فوائد

ڈبل منتقل اوسط الٹ حکمت عملی کے مندرجہ ذیل فوائد ہیں:

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

اسٹریٹجک رسک

اگرچہ ڈبل منتقل اوسط الٹ حکمت عملی کے فوائد واضح ہیں ، لیکن اس کے ساتھ کچھ خطرات بھی ہیں:

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

حکمت عملی کی اصلاح کی سمت

ڈبل منتقل اوسط کی واپسی کی حکمت عملی میں کچھ اور اصلاحات بھی ہیں:

  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