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

ارگوتک ڈبل ریل ریورس ایم اے سی ڈی مقداری تجارتی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-12-21 11:07:51
ٹیگز:

img

جائزہ

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

اصول

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

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

فوائد کا تجزیہ

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

خطرے کا تجزیہ

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

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

اصلاح کی ہدایات

اسٹریٹیجی کو کئی پہلوؤں میں بہتر بنایا جاسکتا ہے:

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

خلاصہ

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


/*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)

مزید