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

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

مصنف:چاؤ ژانگ، تاریخ: 2024-01-02 10:37:21
ٹیگز:

img

جائزہ

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

حکمت عملی منطق

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

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

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

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

  2. تجارتی سگنل تیار کریں۔ تیز لائن اور سست لائن کے کراس اوور حالات کی بنیاد پر لمبے اور مختصر سگنل تیار کریں۔

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

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

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

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

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

خطرے کا تجزیہ

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

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

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

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

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

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

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

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

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

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

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

نتیجہ

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


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

مزید