گیارہ چلتی اوسطوں کی کراس اوور حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-01-15 13:57:53
ٹیگز:

img

جائزہ

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

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

اضافی خصوصیات میں اہرام سازی کی ترتیبات، منافع لینے اور سٹاپ نقصان کی سطح شامل ہیں.

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

بنیادی حکمت عملی کی منطق دو حرکت پذیر اوسط کے درمیان کراس اوورز پر انحصار کرتی ہے تاکہ اندراجات اور باہر نکلنے کا تعین کیا جاسکے۔

داخلے کی شرائط یہ ہیں:

طویل اندراج: تیز رفتار ایم اے > سست ایم اے مختصر اندراج: فاسٹ ایم اے < سست ایم اے

باہر نکلنے کا تعین تین میں سے ایک معیار کے مطابق کیا جاتا ہے:

  1. حاصل کردہ منافع کی سطح
  2. سٹاپ نقصان کی سطح تک پہنچنا
  3. مخالف سگنل پیدا (مخالف سمت میں ایم اے کراس اوور)

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

فوائد

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

خطرات

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

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

بہتر مواقع

اس حکمت عملی کو کئی طریقوں سے بہتر بنایا جا سکتا ہے:

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

نتیجہ

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


/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3

strategy(title = "[STRATEGY] MA Cross Eleven", overlay = true)

// MA - type, source, length

//  MA - type, source, length
//  SMA --> Simple
//  EMA --> Exponential
//  WMA --> Weighted
//  VWMA --> Volume Weighted
//  SMMA --> Smoothed
//  DEMA --> Double Exponential
//  TEMA --> Triple Exponential
//  HMA --> Hull
//  TMA --> Triangular
//  SSMA --> SuperSmoother filter
//  ZEMA --> Zero Lag Exponential

type = input(defval="ZEMA", title="MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"])
len1 = input(defval=8, title="Fast MA Length", minval=1)
srcclose1 = input(close, "Fast MA Source")
len2 = input(defval=21, title="Slow MA Length", minval=1)
srcclose2 = input(close, "Slow MA Source")

// Returns MA input selection variant, default to SMA if blank or typo.

variant(type, src, len) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v3 = wma(src, len)                                                  // Weighted
    v4 = vwma(src, len)                                                 // Volume Weighted
    v5 = 0.0
    v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len    // Smoothed
    v6 = 2 * v2 - ema(v2, len)                                          // Double Exponential
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)               // Triple Exponential
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))   // Hull
    v11 = sma(sma(src,len),len)                                         // Triangular
    // SuperSmoother filter
    // © 2013  John F. Ehlers
    a1 = exp(-1.414*3.14159 / len)
    b1 = 2*a1*cos(1.414*3.14159 / len)
    c2 = b1
    c3 = (-a1)*a1
    c1 = 1 - c2 - c3
    v9 = 0.0
    v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
    // Zero Lag Exponential
    e = ema(v2, len)
    v10 = v2+(v2-e)
    // return variant, defaults to SMA if input invalid.
    type=="EMA"?v2 : type=="WMA"?v3 : type=="VWMA"?v4 : type=="SMMA"?v5 : type=="DEMA"?v6 : type=="TEMA"?v7 : type=="HullMA"?v8 : type=="SSMA"?v9 : type=="ZEMA"?v10 : type=="TMA"? v11: v1

ma_1 = variant(type, srcclose1, len1)
ma_2 = variant(type, srcclose2, len2)

plot(ma_1, title="Fast MA", color = green, linewidth=2, transp=0)
plot(ma_2, title="Slow MA", color = red, linewidth=2, transp=0)

longCond = na
shortCond = na
longCond := crossover(ma_1, ma_2)
shortCond := crossunder(ma_1, ma_2)

// Count your long short conditions for more control with Pyramiding

sectionLongs = 0
sectionLongs := nz(sectionLongs[1])
sectionShorts = 0
sectionShorts := nz(sectionShorts[1])

if longCond
    sectionLongs := sectionLongs + 1
    sectionShorts := 0

if shortCond
    sectionLongs := 0
    sectionShorts := sectionShorts + 1
    
// Pyramiding Inputs

pyrl = input(1, "Pyramiding")

// These check to see your signal and cross references it against the pyramiding settings above

longCondition = longCond and sectionLongs <= pyrl 
shortCondition = shortCond and sectionShorts <= pyrl 

// Get the price of the last opened long or short

last_open_longCondition = na
last_open_shortCondition = na
last_open_longCondition := longCondition ? high[1] : nz(last_open_longCondition[1])
last_open_shortCondition := shortCondition ? low[1] : nz(last_open_shortCondition[1])

// Check if your last postion was a long or a short

last_longCondition = na
last_shortCondition = na
last_longCondition := longCondition ? time : nz(last_longCondition[1])
last_shortCondition := shortCondition ? time : nz(last_shortCondition[1])

in_longCondition = last_longCondition > last_shortCondition
in_shortCondition = last_shortCondition > last_longCondition

// Take profit

isTPl = input(false, "Take Profit Long")
isTPs = input(false, "Take Profit Short")
tpl = input(3, "Take Profit Long %", type=float)
tps = input(30, "Take Profit Short %", type=float)
long_tp = isTPl and crossover(high, (1+(tpl/100))*last_open_longCondition) and in_longCondition  == 1
short_tp = isTPs and crossunder(low, (1-(tps/100))*last_open_shortCondition) and in_shortCondition == 1 

// Stop Loss

isSLl = input(false, "Stop Loss Long")
isSLs = input(false, "Stop Loss Short")
sl= 0.0
sl := input(3, "Stop Loss %", type=float)
long_sl = isSLl and crossunder(low, (1-(sl/100))*last_open_longCondition) and longCondition == 0 and in_longCondition == 1
short_sl = isSLs and crossover(high, (1+(sl/100))*last_open_shortCondition) and shortCondition == 0 and in_shortCondition == 1

// Create a single close for all the different closing conditions.

long_close = long_tp or long_sl ? 1 : 0
short_close = short_tp or short_sl ? 1 : 0

// Get the time of the last close

last_long_close = na
last_short_close = na
last_long_close := long_close ? time : nz(last_long_close[1])
last_short_close := short_close ? time : nz(last_short_close[1])

// Strategy entries

strategy.entry("long", strategy.long, when=longCondition == true, stop = open[1])
strategy.entry("short", strategy.short, when=shortCondition == true)
strategy.close("long", when = long_sl or long_tp)
strategy.close("short", when = short_sl or short_tp)

مزید