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


تخلیق کی تاریخ: 2024-01-02 10:37:21 آخر میں ترمیم کریں: 2024-01-02 10:37:21
کاپی: 0 کلکس کی تعداد: 767
1
پر توجہ دیں
1621
پیروکار

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

جائزہ

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

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

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

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

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

  1. ایک متحرک اوسط کا حساب لگائیں۔ صارف کی طرف سے منتخب کردہ متحرک اوسط کی قسم کے مطابق ، ایک تیز لائن اور ایک سست لائن کی متحرک اوسط کا حساب لگائیں۔

  2. ٹریڈنگ سگنل پیدا کرنا۔ تیز اور سست لائنوں کے کراسنگ کے مطابق ، زیادہ اور کم سگنل پیدا کرنا۔

  3. اسٹاپ نقصان کی پوزیشن قائم کریں۔ اسٹاپ نقصان کی لائن اور اسٹاپ نقصان کی لائن کی قیمت کا حساب لگانے کے لئے اصل وقت میں لاگت کی قیمت اور اسٹاپ نقصان کی فیصد کی بنیاد پر۔

  4. داخلہ اور باہر نکلنے زیادہ اور خالی سگنل کے مطابق داخلہ ، سٹاپ نقصان سٹاپ سگنل کے مطابق باہر نکلنا

طاقت کا تجزیہ

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

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

خطرے کا تجزیہ

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

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

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

اصلاح کی سمت

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

  1. متحرک اوسط کی اقسام کو بہتر بنائیں۔ مختلف مارکیٹ کے حالات اور تجارت کی اقسام کے مطابق زیادہ موزوں متحرک اوسط کا انتخاب کریں۔

  2. متحرک اوسط کو بہتر بنانے کے پیرامیٹرز ◄۔ متحرک اوسط کی مدت کو ایڈجسٹ کریں تاکہ یہ مارکیٹ کی خصوصیات کے مطابق ہو۔

  3. دوسرے اشارے فلٹر شامل کریں۔ آپ کو MACD ، RSI اور دیگر اشارے شامل کرنے کی اجازت ہے تاکہ آپ کو غیر رجحان والے بازاروں میں کثرت سے تجارت کرنے سے بچایا جاسکے۔

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

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

  6. اسٹاپ ٹریکنگ الگورتھم استعمال کریں۔ اسٹاپ لائن کو قیمت کے ساتھ آہستہ آہستہ منتقل کرنے کی اجازت دیں ، جس سے اسٹاپ ٹریکنگ کے متحرک ہونے کا امکان کم ہوجائے۔

خلاصہ کریں۔

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

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

//@version=3
strategy("Kozlod - Yet Another Moving Average Cross Strategy", shorttitle="kozlod_yamacs", overlay = true)

// 
// author: Kozlod
// date: 2018-03-06
// 

////////////
// INPUTS //
////////////

ma_type      = input(title = "MA Type",          defval = "SMA", options = ['SMA', 'EMA', 'WMA', 'ALMA', 'VWMA', 'HMA', 'LSMA', 'SMMA', 'DEMA'])
short_ma_len = input(title = "Short MA Length",  defval = 5,     minval = 1)
short_ma_src = input(title = "Short MA Source",   defval = close)
long_ma_len  = input(title = "Long MA Length",   defval = 15,    minval = 2)
long_ma_src  = input(title = "Long MA Source",    defval = close)
alma_offset  = input(title = "ALMA Offset",     type = float,   defval = 0.85,  step = 0.01, minval = 0, maxval = 1)
alma_sigma   = input(title = "ALMA Sigma",      type = float,   defval = 6,     step = 0.01)
lsma_offset  = input(title = "LSMA Offset",      defval = 0,     step = 1)

sl_lev_perc  = input(title = "SL Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)
pt_lev_perc  = input(title = "PT Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)

// Set initial values to 0
short_ma = 0.0
long_ma  = 0.0

// Simple Moving Average (SMA)
if ma_type == 'SMA' 
    short_ma := sma(short_ma_src, short_ma_len)
    long_ma  := sma(long_ma_src,  long_ma_len)

// Exponential Moving Average (EMA)
if ma_type == 'EMA'
    short_ma := ema(short_ma_src, short_ma_len)
    long_ma  := ema(long_ma_src,  long_ma_len)

// Weighted Moving Average (WMA)
if ma_type == 'WMA'
    short_ma := wma(short_ma_src, short_ma_len)
    long_ma  := wma(long_ma_src,  long_ma_len)

// Arnaud Legoux Moving Average (ALMA)
if ma_type == 'ALMA'
    short_ma := alma(short_ma_src, short_ma_len,  alma_offset, alma_sigma)
    long_ma  := alma(long_ma_src,  long_ma_len,   alma_offset, alma_sigma)

// Hull Moving Average (HMA)
if ma_type == 'HMA'
    short_ma := wma(2*wma(short_ma_src, short_ma_len/2)-wma(short_ma_src, short_ma_len), round(sqrt(short_ma_len)))
    long_ma  := wma(2*wma(long_ma_src,  long_ma_len /2)-wma(long_ma_src,  long_ma_len),  round(sqrt(long_ma_len)))

// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
    short_ma := vwma(short_ma_src, short_ma_len)
    long_ma  := vwma(long_ma_src,  long_ma_len)

// Least Square Moving Average (LSMA)
if ma_type == 'LSMA'
    short_ma := linreg(short_ma_src, short_ma_len, lsma_offset)
    long_ma  := linreg(long_ma_src,  long_ma_len,  lsma_offset)

// Smoothed Moving Average (SMMA)    
if ma_type == 'SMMA'
    short_ma := na(short_ma[1]) ? sma(short_ma_src, short_ma_len) : (short_ma[1] * (short_ma_len - 1) + short_ma_src) / short_ma_len
    long_ma  := na(long_ma[1])  ? sma(long_ma_src,  long_ma_len)  : (long_ma[1]  * (long_ma_len  - 1) + long_ma_src)  / long_ma_len

// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
    e1_short = ema(short_ma_src, short_ma_len)
    e1_long  = ema(long_ma_src,  long_ma_len)
    
    short_ma := 2 * e1_short - ema(e1_short, short_ma_len)
    long_ma  := 2 * e1_long  - ema(e1_long,  long_ma_len)

/////////////
// SIGNALS //
/////////////

long_signal  = crossover( short_ma, long_ma)
short_signal = crossunder(short_ma, long_ma)

// Calculate PT/SL levels 
// Initial values 
last_signal    = 0
prev_tr_price  = 0.0
pt_level       = 0.0
sl_level       = 0.0

// Calculate previous trade price
prev_tr_price := long_signal[1] or short_signal[1] ? open : nz(last_signal[1]) != 0 ? prev_tr_price[1] : na

// Calculate SL/PT levels 
pt_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 + pt_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 - pt_lev_perc / 100)  : na
sl_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 - sl_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 + sl_lev_perc / 100)  : na

// Calculate if price hit sl/pt 
long_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  1 and close >= pt_level
long_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  1 and close <= sl_level

short_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close <= pt_level
short_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close >= sl_level

// What is last active trade? 
last_signal := long_signal ? 1 : short_signal ? -1 : long_hit_pt or long_hit_sl or short_hit_pt or short_hit_sl ? 0 : nz(last_signal[1])

//////////////
// PLOTTING //
//////////////

// Plot MAs
plot(short_ma, color = red,   linewidth = 2)
plot(long_ma,  color = green, linewidth = 2)


// Plot Levels 
plotshape(prev_tr_price, style = shape.cross, color = gray, location  = location.absolute, size = size.small)


plotshape(sl_lev_perc > 0 ? sl_level : na, style = shape.cross, color = red,   location  = location.absolute, size = size.small)
plotshape(pt_lev_perc > 0 ? pt_level : na, style = shape.cross, color = green, location  = location.absolute, size = size.small)

//////////////
// STRATEGY //
//////////////

strategy.entry("long",  true,  when = long_signal)
strategy.entry("short", false, when = short_signal)

strategy.close("long",  when = long_hit_pt  or long_hit_sl)
strategy.close("short", when = short_hit_pt or short_hit_sl)