مثلث حرکت پذیر اوسط (ٹی ایم اے) کراس اوور ٹریڈنگ حکمت عملی ایک عام تکنیکی تجزیہ حکمت عملی ہے۔ یہ رجحانات کو پکڑنے اور کم خطرہ ٹریڈنگ کو نافذ کرنے کے لئے مختلف وقت کی لمبائی کی تین حرکت پذیر اوسط لائنوں کا استعمال کرتی ہے۔ جب قلیل مدتی حرکت پذیر اوسط درمیانی مدتی حرکت پذیر اوسط سے اوپر کی طرف عبور کرتا ہے ، اور درمیانی مدتی حرکت پذیر اوسط طویل مدتی حرکت پذیر اوسط سے اوپر ہوتا ہے تو ، خریدنے کا اشارہ پیدا ہوتا ہے۔ جب قلیل مدتی حرکت پذیر اوسط درمیانی مدتی حرکت پذیر اوسط سے نیچے کی طرف عبور کرتا ہے ، اور درمیانی مدتی حرکت پذیر اوسط طویل مدتی حرکت پذیر اوسط سے نیچے ہوتا ہے تو ، فروخت کا اشارہ پیدا ہوتا ہے۔
ٹی ایم اے کی حکمت عملی بنیادی طور پر رجحان کی سمت کا تعین کرنے کے لئے تین چلتی اوسط لائنوں پر انحصار کرتی ہے۔ قلیل مدتی چلتی اوسط قیمتوں میں ہونے والی تبدیلیوں کا حساس جواب دیتی ہے۔ درمیانی مدتی چلتی اوسط رجحان کا واضح فیصلہ فراہم کرتی ہے۔ طویل مدتی چلتی اوسط مارکیٹ کے شور کو فلٹر کرتی ہے اور طویل مدتی رجحان کی سمت کا تعین کرتی ہے۔
جب قلیل مدتی حرکت پذیر اوسط درمیانی مدتی حرکت پذیر اوسط سے اوپر کی طرف عبور کرتا ہے تو ، اس سے یہ ظاہر ہوتا ہے کہ قیمت میں اضافہ ہونا شروع ہوچکا ہے۔ اس وقت ، اگر درمیانی مدتی حرکت پذیر اوسط طویل مدتی حرکت پذیر اوسط سے اوپر ہے تو ، اس کا مطلب یہ ہے کہ موجودہ مارکیٹ میں ایک اپ ٹرینڈ ہے۔ لہذا ، یہاں خرید کا اشارہ پیدا ہوتا ہے۔
اس کے برعکس ، جب قلیل مدتی حرکت پذیر اوسط درمیانی مدتی حرکت پذیر اوسط سے نیچے کی طرف عبور کرتا ہے تو ، اس سے یہ ظاہر ہوتا ہے کہ قیمت نیچے کی طرف توڑنا شروع ہوگئی ہے۔ اس وقت ، اگر درمیانی مدتی حرکت پذیر اوسط طویل مدتی حرکت پذیر اوسط سے نیچے ہے تو ، اس کا مطلب یہ ہے کہ موجودہ مارکیٹ میں نیچے کا رجحان ہے۔ اس کے نتیجے میں ، فروخت کا اشارہ پیدا ہوتا ہے۔
یہ حکمت عملی اسٹاپ نقصان اور منافع لینے کی لائنیں بھی طے کرتی ہے۔ تجارت میں داخل ہونے کے بعد ، اسٹاپ نقصان اور منافع لینے کی قیمتوں کا حساب فیصد کی ترتیبات کی بنیاد پر کیا جائے گا۔ اگر قیمت کسی بھی لائن کو چھوتی ہے تو ، پوزیشن بند ہوجائے گی۔
غلط سگنل جب تین ایم اے کو مضبوط کر رہے ہیں
حل: غلط سگنل سے بچنے کے لئے ایم اے پیرامیٹرز کو مناسب طریقے سے ایڈجسٹ کریں
زیادہ سے زیادہ جارحانہ سٹاپ نقصان/منافع لینے کا فیصد
حل: ٹھیک ٹھیک فیصد؛ بہت بڑا یا بہت چھوٹا نہیں ہوسکتا ہے
پیرامیٹر کی غلط ترتیبات جس کی وجہ سے بہت زیادہ یا بہت کم تجارت ہوتی ہے
حل: زیادہ سے زیادہ تلاش کرنے کے لئے مختلف پیرامیٹر مجموعے کی جانچ کریں
ٹی ایم اے کی حکمت عملی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے:
بہترین تلاش کرنے کے لئے مختلف قسم اور لمبائی کے مجموعے کی جانچ کریں
بہترین نتائج کے لئے مختلف ایم اے لمبائی یا قسم کے مجموعے کی جانچ کریں
سگنل فلٹرز کے طور پر دیگر تکنیکی اشارے شامل کریں
کثیر عنصر کی تصدیق کے لئے KDJ، MACD وغیرہ جیسے اشارے شامل کریں
مصنوعات کی خصوصیات پر مبنی پیرامیٹرز کا انتخاب کریں
غیر مستحکم مصنوعات کے لئے ایم اے کے ادوار کو کم کرنا؛ مستحکم مصنوعات کے لئے ادوار کو بڑھانا
بہترین پیرامیٹرز تلاش کرنے کے لئے مشین سیکھنے کا استعمال کریں
آٹو پیرامیٹر فوری طور پر زیادہ سے زیادہ تلاش کرنے کے لئے صاف
ٹی ایم اے کراس اوور حکمت عملی مجموعی طور پر رجحان کی پیروی کرنے والی حکمت عملی کا استعمال کرنا آسان ہے۔ یہ رجحانات کو پکڑنے کے لئے تین ایم اے کو ایک ساتھ استعمال کرتا ہے اور خطرات کو کنٹرول کرنے کے لئے اسٹاپ نقصان / منافع حاصل کرنے کا تعین کرتا ہے ، جس سے مستحکم منافع ممکن ہوتا ہے۔ پیرامیٹر کی اصلاح اور اضافی تکنیکی اشارے کو مربوط کرنے کے ذریعے مزید بہتری حاصل کی جاسکتی ہے۔ آخر میں ، یہ حکمت عملی مستحکم منافع کی تلاش میں سرمایہ کاروں کے لئے موزوں ہے۔
/*backtest start: 2024-01-08 00:00:00 end: 2024-01-15 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Kozlod - 3 MA strategy with SL/PT", shorttitle="kozlod_3ma", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 5) // // author: Kozlod // date: 2018-03-25 // //////////// // INPUTS // //////////// ma_type = input(title = "MA Type", defval = "SMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA']) short_ma_len = input(title = "Short MA Length", defval = 5, minval = 1) short_ma_src = input(title = "Short MA Source", defval = close) medium_ma_len = input(title = "Medium MA Length", defval = 20, minval = 2) medium_ma_src = input(title = "Medium MA Source", defval = close) long_ma_len = input(title = "Long MA Length", defval = 100, minval = 3) long_ma_src = input(title = "Long MA Source", defval = close) 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 medium_ma = 0.0 // Simple Moving Average (SMA) if ma_type == 'SMA' short_ma := sma(short_ma_src, short_ma_len) medium_ma := sma(medium_ma_src, medium_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) medium_ma := ema(medium_ma_src, medium_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) medium_ma := wma(medium_ma_src, medium_ma_len) long_ma := wma(long_ma_src, long_ma_len) // 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))) medium_ma := wma(2*wma(medium_ma_src, medium_ma_len / 2) - wma(medium_ma_src, medium_ma_len), round(sqrt(medium_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) medium_ma := vwma(medium_ma_src, medium_ma_len) long_ma := vwma(long_ma_src, long_ma_len) // 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 medium_ma := na(medium_ma[1]) ? sma(medium_ma_src, medium_ma_len) : (medium_ma[1] * (medium_ma_len - 1) + medium_ma_src) / medium_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_medium = ema(medium_ma_src, medium_ma_len) e1_long = ema(long_ma_src, long_ma_len) short_ma := 2 * e1_short - ema(e1_short, short_ma_len) medium_ma := 2 * e1_medium - ema(e1_medium, medium_ma_len) long_ma := 2 * e1_long - ema(e1_long, long_ma_len) ///////////// // SIGNALS // ///////////// long_signal = crossover( short_ma, medium_ma) and medium_ma > long_ma short_signal = crossunder(short_ma, medium_ma) and medium_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] and nz(last_signal[2]) != 1) or (short_signal[1] and nz(last_signal[2]) != -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(medium_ma, color = green, linewidth = 2) plot(long_ma, color = yellow, 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)