دوہری ٹریک ریورس MACD مقداری تجارتی حکمت عملی


تخلیق کی تاریخ: 2023-12-21 11:07:51 آخر میں ترمیم کریں: 2023-12-21 11:07:51
کاپی: 3 کلکس کی تعداد: 642
1
پر توجہ دیں
1621
پیروکار

دوہری ٹریک ریورس MACD مقداری تجارتی حکمت عملی

جائزہ

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

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

اس حکمت عملی کا بنیادی اشارے MACD ہے۔ یہ فاسٹ منتقل اوسط EMA (® اور سست منتقل اوسط EMA ((slowMALen) کا حساب لگاتا ہے ، اور پھر ان کی فرق xmacd کا حساب لگاتا ہے۔ اس کے علاوہ ، xmacd کا EMA ((signalLength) xMA_MACD کو ملتا ہے۔ جب xmacd اوپر سے گزرتا ہے تو زیادہ ہوتا ہے ، اور نیچے سے گزرنے پر خالی ہوتا ہے۔ اس حکمت عملی کی کلید الٹ ٹریڈنگ سگنل پر ہے ، یعنی xmacd اور xMA_MACD کا رشتہ روایتی MACD اشارے کے برعکس ہے ، جس سے الٹ MACD ٹانگ کا نام بھی آیا ہے۔

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

طاقت کا تجزیہ

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

خطرے کا تجزیہ

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

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

اصلاح کی سمت

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

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

خلاصہ کریں۔

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

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version = 3
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 09/12/2016
// This is one of the techniques described by William Blau in his book
// "Momentum, Direction and Divergence" (1995). If you like to learn more,
// we advise you to read this book. His book focuses on three key aspects
// of trading: momentum, direction and divergence. Blau, who was an electrical
// engineer before becoming a trader, thoroughly examines the relationship 
// between price and momentum in step-by-step examples. From this grounding,
// he then looks at the deficiencies in other oscillators and introduces some
// innovative techniques, including a fresh twist on Stochastics. On directional 
// issues, he analyzes the intricacies of ADX and offers a unique approach to help 
// define trending and non-trending periods.
// Blau`s indicator is like usual MACD, but it plots opposite of meaningof
// stndard MACD indicator. 
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
//
//
// 2018-09 forked by Khalid Salomão
// - Backtesting
// - Added filters: RSI, MFI, Price trend
// - Trailing Stop Loss
// - Other minor adjustments
//
////////////////////////////////////////////////////////////
strategy(title="Ergotic MACD Backtester [forked from HPotter]", shorttitle="Ergotic MACD Backtester", overlay=true, pyramiding=0, default_qty_type=strategy.cash, default_qty_value=25000, initial_capital=50000, commission_type=strategy.commission.percent, commission_value=0.15, slippage=3)


// === BACKTESTING: INPUT BACKTEST RANGE ===
source = input(close)
strategyType = input(defval="Long Only", options=["Long & Short", "Long Only", "Short Only"])

FromMonth = input(defval = 7, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2030, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        
window()  => true // window of time verification

// === STRATEGY ===

r = input(144, minval=1, title="R (32,55,89,100,144,200)") // default 32
slowMALen = input(6, minval=1) // default 32
signalLength = input(6, minval=1)
reverse = input(false, title="Trade reverse (long/short switch)")

//hline(0, color=blue, linestyle=line)

fastMA = ema(source, r)
slowMA = ema(source, slowMALen)
xmacd = fastMA - slowMA
xMA_MACD = ema(xmacd, signalLength)

pos = 0
pos := iff(xmacd < xMA_MACD, 1,
	   iff(xmacd > xMA_MACD, -1, nz(pos[1], 0))) 
possig = 0
possig := iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))

// === FILTER: price trend ====
trending_price_long = input(true, title="Long only if price has increased" )
trending_price_short = input(false, title="Short only if price has decreased" )
trending_price_length = input( 2, minval=1 )
trending_price_with_ema = input( false )
trending_price_ema = input( 3, minval=1 )
price_trend = trending_price_with_ema ? ema(source, trending_price_ema) : source
priceLongTrend() => (trending_price_long ? rising(price_trend, trending_price_length) : true)
priceShortTrend() => (trending_price_short ? falling(price_trend, trending_price_length) : true)

// === FILTER: RSI ===
rsi_length = input( 14, minval=1 )
rsi_overSold = input( 14, minval=0, title="RSI Sell Cutoff (Sell only if >= #)" )
rsi_overBought = input( 82, minval=0, title="RSI Buy Cutoff (Buy only if <= #)" )

vrsi = rsi(source, rsi_length)
rsiOverbought() => vrsi > rsi_overBought
rsiOversold() => vrsi < rsi_overSold

trending_rsi_long = input(false, title="Long only if RSI has increased" )
trending_rsi_length = input( 2 )
rsiLongTrend() => trending_rsi_long ? rising(vrsi, trending_rsi_length) : true

// === FILTER: MFI ===
mfi_length = input(14, minval=1)
mfi_lower = input(14, minval=0, maxval=50)
mfi_upper = input(82, minval=50, maxval=100)
upper_s = sum(volume * (change(source) <= 0 ? 0 : source), mfi_length)
lower_s = sum(volume * (change(source) >= 0 ? 0 : source), mfi_length)
mf = rsi(upper_s, lower_s)

mfiOverbought() => (mf > mfi_upper)
mfiOversold() => (mf < mfi_lower)

trending_mfi_long = input(false, title="Long only if MFI has increased" )
trending_mfi_length = input( 2 )
mfiLongTrend() => trending_mfi_long ? rising(mf, trending_mfi_length) : true

// === SIGNAL CALCULATION ===
long  = window() and possig == 1 and rsiLongTrend() and mfiLongTrend() and not rsiOverbought() and not mfiOverbought() and priceLongTrend()
short = window() and possig == -1 and not rsiOversold() and not mfiOversold() and priceShortTrend()

// === trailing stop
tslSource=input(hlc3,title="TSL source")
//suseCurrentRes = input(true, title="Use current chart resolution for stop trigger?")
tslResolution = input(title="Use different timeframe for stop trigger? Uncheck box above.", defval="5")
tslTrigger = input(3.0) / 100
tslStop = input(0.6) / 100

currentPrice = request.security(syminfo.tickerid, tslResolution, tslSource, barmerge.gaps_off, barmerge.lookahead_off)

isLongOpen = false
isLongOpen := nz(isLongOpen[1], false)
entryPrice=0.0
entryPrice:= nz(entryPrice[1], 0.0)
trailPrice=0.0
trailPrice:=nz(trailPrice[1], 0.0)

// update TSL high mark
if (isLongOpen )
    if (not trailPrice and currentPrice >= entryPrice * (1 + tslTrigger))
        trailPrice := currentPrice
    else 
        if (trailPrice and currentPrice > trailPrice)
            trailPrice := currentPrice

if (trailPrice and currentPrice <= trailPrice * (1 - tslStop))
    // FIRE TSL SIGNAL
    short:=true // <===
    long := false

// if short clean up
if (short)
    isLongOpen := false
    entryPrice := 0.0
    trailPrice := 0.0

if (long)
    isLongOpen := true
    if (not entryPrice)
        entryPrice := currentPrice

// === BACKTESTING: ENTRIES ===
if long
    if (strategyType == "Short Only")
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long, comment="Long")

if short
    if (strategyType == "Long Only")
        strategy.close("Long")
    else
        strategy.entry("Short", strategy.short, comment="Short")	  
    
//barcolor(possig == -1 ? red: possig == 1 ? green : blue )
//plot(xmacd, color=green, title="Ergotic MACD")
//plot(xMA_MACD, color=red, title="SigLin")

plotshape(trailPrice ? trailPrice : na, style=shape.circle, location=location.absolute, color=blue, size=size.tiny)

plotshape(long, style=shape.triangleup, location=location.belowbar, color=green, size=size.tiny)
plotshape(short, style=shape.triangledown, location=location.abovebar, color=red, size=size.tiny)

// === Strategy Alert ===
alertcondition(long, title='BUY - Ergotic MACD Long Entry', message='Go Long!')
alertcondition(short, title='SELL - Ergotic MACD Long Entry', message='Go Short!')

// === BACKTESTING: EXIT strategy ===
sl_inp = input(7, title='Stop Loss %', type=float)/100
tp_inp = input(1.8, title='Take Profit %', type=float)/100

stop_level = strategy.position_avg_price * (1 - sl_inp)
take_level = strategy.position_avg_price * (1 + tp_inp)

strategy.exit("Stop Loss/Profit", "Long", stop=stop_level, limit=take_level)