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

مصنف:چاؤ ژانگ، تاریخ: 2023-12-06 11:52:10
ٹیگز:

img

جائزہ

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

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

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

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

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

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

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

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

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

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

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

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

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

خطرے کا تجزیہ

دوہری حرکت پذیر اوسط کراس اوور رجحان کی حکمت عملی میں بھی کچھ خطرات ہیں ، بنیادی طور پر مندرجہ ذیل شعبوں میں:

  1. جب اسٹاک کی قیمت میں شدید اتار چڑھاؤ ظاہر ہوتا ہے تو ، ای ایم اے اور ایس ایم اے کئی بار غلط طریقے سے عبور کرسکتے ہیں ، جس کے نتیجے میں تجارتی سگنل اکثر کھلتے اور بند ہوجاتے ہیں۔ اس سے تجارت کی تعدد اور کمیشن کی لاگت میں اضافہ ہوگا۔

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

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

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

اسی طرح کے حل مندرجہ ذیل ہیں:

  1. غیر مستحکم منڈیوں کے لئے، کراس اوور فریکوئنسی کو کم کرنے کے لئے کم پیرامیٹر EMAs اور SMAs کا استعمال کرتے ہوئے، چلتی اوسط کے پیرامیٹرز کو مناسب طریقے سے ایڈجسٹ کریں.

  2. فلٹرنگ کے حالات کو بڑھانا جیسے ایم اے سی ڈی صفر لائن سے اوپر اور نیچے توڑنا ، جو کسی حد تک جھوٹے توڑ کو کم کرسکتا ہے۔ دیگر اشارے جیسے کے ڈی جے اور بی او ایل ایل کو جوڑنے پر بھی غور کیا جاسکتا ہے۔

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

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

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

دوہری حرکت پذیر اوسط کراس اوور ٹرینڈ کی حکمت عملی کو مزید بہتر بنانے کے لئے ابھی بھی گنجائش ہے ، بنیادی طور پر مندرجہ ذیل پہلوؤں میں:

  1. بہتر پیرامیٹرز تلاش کرنے کے لئے مجموعہ کے لئے مزید اشارے کی جانچ کریں ، جیسے BOLL چینل کو شامل کرنا اور اتار چڑھاؤ کے اثرات پر غور کرنا۔

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

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

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

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

  6. اسٹریٹجی کے سرمایہ کے انتظام کی حکمت عملی کو بہتر بنائیں ، جیسے مقررہ رقم کی تجارت ، مقررہ پوزیشن کا تناسب ، وغیرہ۔ ایک ہی تجارت کے نقصان کے خطرے کو کنٹرول کریں ، مجموعی طور پر سرمایہ کے منحنی خطوط کو زیادہ مستحکم بنائیں۔

نتیجہ

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

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

خلاصہ میں ، ڈبل موونگ ایوریج کراس اوور ٹرینڈ حکمت عملی ایک نسبتا complete مکمل اور سخت تجارتی نظام تشکیل دیتی ہے۔ مستقبل کی تحقیق اور درخواست میں مسلسل اصلاح اور بہتری کے ذریعے ، حکمت عملی میں زیادہ عملی قدر حاصل کرنے کی صلاحیت ہے۔


/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Hi,
// This is my first strategy made by myself(except for the MACD indicator). I'm publishing this to get myself out there and for some newer people to see how a basic strategy works. All credits go to Zen&TheArtofTrading, for teaching me almost everything I know about Pinescript
// The strategy is basically an MACD crossover trend strategy. If the MACD line crosses the signal line upward, above the zero point of the histogram, while the price is above 200 EMA and 100 SMA it's a buy signal
// If the MACD line crosses the signal line downward, while below zero point of the histogram, as well as the price being below 200 EMA and 100 SMA it's a sell signal
// I used the 200 EMA and 100 SMA because I wanted to filter weak signals as much as possible when the market is ranging, if you have any suggestions to go around this better, please let me know, still learning everyday

// If you have any suggestions, tips or tricks please let me know. I'm still new to Pinescript, but having a lot of fun trying stuff out. If you see something in my code that you don't understand, feel free to ask, I'll try to answer as best as I can

// I opened the strategy with predetermined backtesting pyramiding, currency etc. This made the progress of backtesting multiple TP and SL easier. Also the commission value is from Binance Futures, I just left it in there for anyone who wants to just copy this strategy
strategy("MACD Crossover Trend Strategy Template", overlay = true )

// Determining inputs and values, I just copied the built-in MACD strategy and removed everything I didn't need, just needed the barebone indicator and added EMA + SMA inputs
fast_length = input(title = "Fast Length", type = input.integer, defval = 12, group = "MACD Values")
slow_length = input(title = "Slow Length", type = input.integer, defval = 26, group = "MACD Values")
src = input(title = "Source", type = input.source, defval = close, group = "MACD Values")
signal_length = input(title = "Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9, group = "MACD Values")
sma_source = input(title = "Simple MA (Oscillator)", type = input.bool, defval = false, group = "MACD Values")
sma_signal = input(title = "Simple MA (Signal Line)", type = input.bool, defval = false, group = "MACD Values")
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
emaLength = input(title = "EMA", type = input.integer, defval = 200, step = 10, group = "Moving Averages")
smaLength = input(title = "SMA", type = input.integer, defval = 100, step = 10, group = "Moving Averages")

// Input backtest range, you can adjust this here or in the input options
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range")
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range")
fromYear  = input(defval = 2000, title = "From Year",       type = input.integer, minval = 1970, group = "Backtest Date Range")
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range")
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range")
thruYear  = input(defval = 2099, title = "Thru Year",       type = input.integer, minval = 1970, group = "Backtest Date Range")

// Inputs for EMA, SMA and to adjust your take profit and stop losses in the input options while backtesting, it's result of your input is calculated back to percentages
ema = ema(close, emaLength)
sma = sma(close, smaLength)
profitlong = input(title = "Profit Long %", type = input.float, defval = 2, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
losslong = input(title = "Loss Long %", type = input.float, defval = 1, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
profitshort = input(title = "Profit Short %", type = input.float, defval = 2, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
lossshort = input(title = "Loss Short %", type = input.float, defval = 1, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01

// Check EMA and SMA also check the backtest range. inDataRange is a true or false statement, true if the date right now is between the parameters that's filled at the corresponding inputs
// (for example 1-1-2020 till 12-12-2020, if that specific bar is between these dates, statement is true and trade will be executed)
// If the date is not in between the given parameters, statement turns to false and it won't allow new trades and closes all current trades as seen with the strategy.close_all function
inDataRange = (time >= timestamp(syminfo.timezone, fromYear, fromMonth, fromDay, 0, 0)) and (time < timestamp(syminfo.timezone, thruYear, thruMonth, thruDay, 0, 0))
long = close > ema and close > sma and inDataRange
short = close < ema and close < sma and inDataRange

// Entry and exit signals + checking backtest date range, what the signals are supposed to do is noted at the beginning of the code
// I want a way to filter out weak signals that are ranging around the zero point of the histogram. 
// So far couldn't think of a decent way to do this over multiple symbols since the range of the histogram changes with every symbol, sometimes ranging between 0 and 1 or sometimes ranging between 0 and 1000
// I could probably use a cofficiency or something, but that's beyond my grasp at the moment
// Also I wanted a way to let my strategy determine a stop loss based on the pullback and having a 1.5 risk/reward TP on top of that. Couldn't really figure out a way to determine the pullback
if (crossover(macd, signal) and macd > 0)
    strategy.entry("Long", long = strategy.long,
     comment = "Long Buy",
     when = long)

strategy.exit("Exit Long", "Long", profit = close * profitlong / syminfo.mintick, loss = close * losslong / syminfo.mintick)


if (crossunder(macd, signal) and macd < 0)
    strategy.entry("Short", long = strategy.short,
     comment = "Short Buy",
     when = short)

strategy.exit("Exit Short", "Short", profit = close * profitshort / syminfo.mintick, loss = close * lossshort / syminfo.mintick)

// To make sure the backtesting doesn't leave a position open beyond, or before, our applied dates
if (not inDataRange)
    strategy.close_all()

// plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

مزید