ڈائنامک تھری موونگ ایوریج ٹرینڈ فالونگ اسٹریٹجی


تخلیق کی تاریخ: 2024-02-23 12:07:11 آخر میں ترمیم کریں: 2024-02-23 12:07:11
کاپی: 1 کلکس کی تعداد: 600
1
پر توجہ دیں
1617
پیروکار

ڈائنامک تھری موونگ ایوریج ٹرینڈ فالونگ اسٹریٹجی

جائزہ

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

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

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

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

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

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

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

خطرہ اور اصلاح

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

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

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

خلاصہ کریں۔

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

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Harrocop

//@version=5
strategy(title = "Triple MA HTF strategy - Dynamic Smoothing", shorttitle = "Triple MA strategy", overlay=true, 
         pyramiding=5, initial_capital = 10000,
         calc_on_order_fills=false,
         slippage = 0,
         commission_type=strategy.commission.percent, commission_value=0.05)

//////////////////////////////////////////////////////
//////////         Risk Management        ////////////
//////////////////////////////////////////////////////
RISKM = "-------------------- Risk Management  --------------------"
InitialBalance = input.float(defval = 10000, title = "Initial Balance", minval = 1, maxval = 1000000, step = 1000, tooltip = "starting capital", group = RISKM)
LeverageEquity = input.bool(defval = true, title = "qty based on equity %", tooltip = "true turns on MarginFactor based on equity, false gives fixed qty for positionsize", group = RISKM)
MarginFactor = input.float(0, minval = - 0.9, maxval = 100, step = 0.1, tooltip = "Margin Factor, meaning that 0.5 will add 50% extra capital to determine ordersize quantity, 0.0 means 100% of equity is used to decide quantity of instrument", inline = "qty", group = RISKM)
QtyNr = input.float(defval = 3.5, title = "Quantity Contracts", minval = 0, maxval = 1000000, step = 0.01,  tooltip = "Margin Factor, meaning that 0.5 will add 50% extra capital to determine ordersize quantity, 0.0 means 100% of equity is used to decide quantity of instrument", inline = "qty", group = RISKM)
EquityCurrent = InitialBalance + strategy.netprofit[1]
QtyEquity = EquityCurrent * (1 + MarginFactor) / close[1]
QtyTrade = LeverageEquity ? QtyEquity : QtyNr

/////////////////////////////////////////////////////
//////////       MA Filter Trend         ////////////
/////////////////////////////////////////////////////
TREND = "-------------------- Moving Average 1 --------------------"
Plot_MA = input.bool(true, title = "Plot MA trend?", inline = "Trend1", group = TREND)
TimeFrame_Trend = input.timeframe(title='Higher Time Frame', defval='15', inline = "Trend1", group = TREND)
length = input.int(21, title="Length MA", minval=1, tooltip = "Number of bars used to measure trend on higher timeframe chart", inline = "Trend2", group = TREND)
MA_Type  = input.string(defval="McGinley" , options=["EMA","DEMA","TEMA","SMA","WMA", "HMA", "McGinley"], title="MA type:", inline = "Trend2", group = TREND)

ma(type, src, length) =>
    float result = 0
    if type == 'TMA' // Triangular Moving Average
        result := ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1)
        result
    if type == 'LSMA' // Least Squares Moving Average
        result := ta.linreg(src, length, 0)
        result
    if type == 'SMA'  // Simple Moving Average
        result := ta.sma(src, length)
        result
    if type == 'EMA'  // Exponential Moving Average
        result := ta.ema(src, length)
        result
    if type == 'DEMA'  // Double Exponential Moving Average
        e = ta.ema(src, length)
        result := 2 * e - ta.ema(e, length)
        result
    if type == 'TEMA'  // Triple Exponentiale
        e = ta.ema(src, length)
        result := 3 * (e - ta.ema(e, length)) + ta.ema(ta.ema(e, length), length)
        result
    if type == 'WMA'  // Weighted Moving Average
        result := ta.wma(src, length)
        result
    if type == 'HMA'  // Hull Moving Average
        result := ta.wma(2 * ta.wma(src, length / 2) - ta.wma(src, length), math.round(math.sqrt(length)))
        result
    if type == 'McGinley' // McGinley Dynamic Moving Average
        mg = 0.0
        mg := na(mg[1]) ? ta.ema(src, length) : mg[1] + (src - mg[1]) / (length * math.pow(src / mg[1], 4))
        result := mg
        result
    result

// Moving Average
MAtrend = ma(MA_Type, close, length)
MA_Value_HTF = request.security(syminfo.tickerid, TimeFrame_Trend, MAtrend)

// Get minutes for current and higher timeframes
// Function to convert a timeframe string to its equivalent in minutes
timeframeToMinutes(tf) =>
    multiplier = 1
    if (str.endswith(tf, "D"))
        multiplier := 1440
    else if (str.endswith(tf, "W"))
        multiplier := 10080
    else if (str.endswith(tf, "M"))
        multiplier := 43200
    else if (str.endswith(tf, "H"))
        multiplier := int(str.tonumber(str.replace(tf, "H", "")))
    else
        multiplier := int(str.tonumber(str.replace(tf, "m", "")))
    multiplier

// Get minutes for current and higher timeframes
currentTFMinutes = timeframeToMinutes(timeframe.period)
higherTFMinutes = timeframeToMinutes(TimeFrame_Trend)

// Calculate the smoothing factor
dynamicSmoothing = math.round(higherTFMinutes / currentTFMinutes)
MA_Value_Smooth = ta.sma(MA_Value_HTF, dynamicSmoothing)

// Trend HTF
UP = MA_Value_Smooth > MA_Value_Smooth[1] // Use "UP" Function to use as filter in combination with other indicators
DOWN = MA_Value_Smooth < MA_Value_Smooth[1] // Use "Down" Function to use as filter in combination with other indicators

/////////////////////////////////////////////////////
//////////       Second MA Filter Trend   ///////////
/////////////////////////////////////////////////////
TREND2 = "-------------------- Moving Average 2 --------------------"
Plot_MA2 = input.bool(true, title = "Plot Second MA trend?", inline = "Trend3", group = TREND2)
TimeFrame_Trend2 = input.timeframe(title='HTF', defval='60', inline = "Trend3", group = TREND2)
length2 = input.int(21, title="Length Second MA", minval=1, tooltip = "Number of bars used to measure trend on higher timeframe chart", inline = "Trend4", group = TREND2)
MA_Type2  = input.string(defval="McGinley" , options=["EMA","DEMA","TEMA","SMA","WMA", "HMA", "McGinley"], title="MA type:", inline = "Trend4", group = TREND2)

// Second Moving Average
MAtrend2 = ma(MA_Type2, close, length2)
MA_Value_HTF2 = request.security(syminfo.tickerid, TimeFrame_Trend2, MAtrend2)

// Get minutes for current and higher timeframes
higherTFMinutes2 = timeframeToMinutes(TimeFrame_Trend2)

// Calculate the smoothing factor for the second moving average
dynamicSmoothing2 = math.round(higherTFMinutes2 / currentTFMinutes)
MA_Value_Smooth2 = ta.sma(MA_Value_HTF2, dynamicSmoothing2)

// Trend HTF for the second moving average
UP2 = MA_Value_Smooth2 > MA_Value_Smooth2[1]
DOWN2 = MA_Value_Smooth2 < MA_Value_Smooth2[1]

/////////////////////////////////////////////////////
//////////       Third MA Filter Trend    ///////////
/////////////////////////////////////////////////////
TREND3 = "-------------------- Moving Average 3 --------------------"
Plot_MA3 = input.bool(true, title = "Plot third MA trend?", inline = "Trend5", group = TREND3)
TimeFrame_Trend3 = input.timeframe(title='HTF', defval='240', inline = "Trend5", group = TREND3)
length3 = input.int(50, title="Length third MA", minval=1, tooltip = "Number of bars used to measure trend on higher timeframe chart", inline = "Trend6", group = TREND3)
MA_Type3  = input.string(defval="McGinley" , options=["EMA","DEMA","TEMA","SMA","WMA", "HMA", "McGinley"], title="MA type:", inline = "Trend6", group = TREND3)

// Second Moving Average
MAtrend3 = ma(MA_Type3, close, length3)
MA_Value_HTF3 = request.security(syminfo.tickerid, TimeFrame_Trend3, MAtrend3)

// Get minutes for current and higher timeframes
higherTFMinutes3 = timeframeToMinutes(TimeFrame_Trend3)

// Calculate the smoothing factor for the second moving average
dynamicSmoothing3 = math.round(higherTFMinutes3 / currentTFMinutes)
MA_Value_Smooth3 = ta.sma(MA_Value_HTF3, dynamicSmoothing3)

// Trend HTF for the second moving average
UP3 = MA_Value_Smooth3 > MA_Value_Smooth3[1]
DOWN3 = MA_Value_Smooth3 < MA_Value_Smooth3[1]

/////////////////////////////////////////////////////
//////////         Entry Settings        ////////////
/////////////////////////////////////////////////////
BuySignal = ta.crossover(MA_Value_HTF, MA_Value_HTF2) and UP3 == true
SellSignal = ta.crossunder(MA_Value_HTF, MA_Value_HTF2) and DOWN3 == true
ExitBuy = ta.crossunder(MA_Value_HTF, MA_Value_HTF2)
ExitSell = ta.crossover(MA_Value_HTF, MA_Value_HTF2)

/////////////////////////////////////////////////
///////////       Strategy       ////////////////
///////////      Entry & Exit    ////////////////
///////////         logic        ////////////////
/////////////////////////////////////////////////
// Long
if BuySignal
    strategy.entry("Long", strategy.long, qty = QtyTrade)

if (strategy.position_size > 0 and ExitBuy == true)
    strategy.close(id = "Long", comment = "Close Long")

// Short
if SellSignal
    strategy.entry("Short", strategy.short, qty = QtyTrade)

if (strategy.position_size < 0 and ExitSell == true)
    strategy.close(id = "Short", comment = "Close Short")

/////////////////////////////////////////////////////
//////////         Visuals Chart         ////////////
/////////////////////////////////////////////////////
// Plot Moving Average HTF
p1 = plot(Plot_MA ? MA_Value_Smooth : na, "HTF Trend", color = UP ? color.rgb(238, 255, 0) : color.rgb(175, 173, 38), linewidth = 1, style = plot.style_line)
p2 = plot(Plot_MA2 ? MA_Value_Smooth2 : na, "HTF Trend", color = UP2 ? color.rgb(0, 132, 255) : color.rgb(0, 17, 255), linewidth = 1, style = plot.style_line)
plot(Plot_MA3 ? MA_Value_Smooth3 : na, "HTF Trend", color = UP3 ? color.rgb(0, 255, 8) : color.rgb(255, 0, 0), linewidth = 2, style = plot.style_line)
fill(p1, p2, color = color.rgb(255, 208, 0, 90), title="Fill")