یہ حکمت عملی ایلڈر فورس انڈیکس (ای ایف آئی) پر مبنی ایک مقداری تجارتی نظام ہے ، جس میں سگنل کی تخلیق کے لئے معیاری انحراف اور چلتی اوسط کا امتزاج ہوتا ہے ، جبکہ متحرک اسٹاپ نقصان اور منافع لینے کی پوزیشننگ کے لئے اے ٹی آر کا استعمال ہوتا ہے۔ یہ حکمت عملی معیاری انحراف کا استعمال کرتے ہوئے تیز اور سست ای ایف آئی اشارے کا حساب لگاتی ہے ، ان کو معمول پر لاتی ہے ، اور کراس اوور تجزیہ کے ذریعے تجارتی سگنل تیار کرتی ہے ، جس سے ایک مکمل تجارتی نظام بنتا ہے۔ یہ زیادہ منافع حاصل کرتے ہوئے خطرات کو مؤثر طریقے سے کنٹرول کرنے کے لئے متحرک اسٹاپ نقصان اور ٹریلنگ لے منافع کے طریقہ کار کو استعمال کرتی ہے۔
یہ حکمت عملی کئی بنیادی عناصر پر مبنی ہے:
یہ حکمت عملی EFI اشارے ، معیاری انحراف ، اور ATR کو ملا کر ایک مکمل تجارتی نظام تیار کرتی ہے۔ اس کی طاقت سگنل کی اعلی وشوسنییتا اور معقول رسک کنٹرول میں ہے ، حالانکہ مختلف مارکیٹ کے ماحول کے لئے اصلاح کی ضرورت ہے۔ مارکیٹ کی حالت کا جائزہ لینے ، حجم فلٹرنگ ، اور دیگر میکانزم کو شامل کرکے حکمت عملی کے استحکام اور منافع کو مزید بہتر بنایا جاسکتا ہے۔ مجموعی طور پر ، یہ عملی قدر کے ساتھ ایک ٹھوس مقداری تجارتی فریم ورک فراہم کرتا ہے۔
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-27 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Elder's Force Index Strategy with ATR-Based SL and TP", overlay=true) // Input parameters for fast and long EFI efi_fast_length = input.int(13, "Fast EFI Length", minval=1) efi_long_length = input.int(50, "Long EFI Length", minval=1) stdev_length = input.int(50, "Standard Deviation Length", minval=2, maxval=300) numdev = input.float(2, "Number of Deviations", minval=1, maxval=20, step=0.1) atr_length = input.int(14, "ATR Length", minval=1) atr_multiplier_sl = input.float(1.5, "ATR Multiplier for Stop Loss", step=0.1) trailing_tp_multiplier = input.float(0.5, "Multiplier for Trailing Take Profit", step=0.1) // Elder's Force Index Calculation for Fast and Long EFI efi_fast = ta.ema((close - close[1]) * volume, efi_fast_length) efi_long = ta.ema((close - close[1]) * volume, efi_long_length) // Calculate Standard Deviation for Fast EFI efi_fast_average = ta.sma(efi_fast, stdev_length) efi_fast_stdev = ta.stdev(efi_fast, stdev_length) efi_fast_diff = efi_fast - efi_fast_average efi_fast_result = efi_fast_diff / efi_fast_stdev // Calculate Standard Deviation for Long EFI efi_long_average = ta.sma(efi_long, stdev_length) efi_long_stdev = ta.stdev(efi_long, stdev_length) efi_long_diff = efi_long - efi_long_average efi_long_result = efi_long_diff / efi_long_stdev // Define upper and lower standard deviation levels upper_sd = numdev lower_sd = -numdev // Define entry conditions based on crossing upper and lower standard deviations long_condition = efi_fast_result > upper_sd and efi_long_result > upper_sd short_condition = efi_fast_result < lower_sd and efi_long_result < lower_sd // Check if a position is already open is_position_open = strategy.position_size != 0 // Calculate ATR for stop loss and take profit atr = ta.atr(atr_length) // Initialize stop loss and take profit variables var float stop_loss = na var float take_profit = na // Execute trades based on conditions, ensuring only one trade at a time if (long_condition and not is_position_open) strategy.entry("Long", strategy.long) stop_loss := close - atr * atr_multiplier_sl // Set initial stop loss based on ATR take_profit := close + atr * trailing_tp_multiplier // Set initial take profit based on ATR if (short_condition and not is_position_open) strategy.entry("Short", strategy.short) stop_loss := close + atr * atr_multiplier_sl // Set initial stop loss based on ATR take_profit := close - atr * trailing_tp_multiplier // Set initial take profit based on ATR // Update exit conditions if (is_position_open) // Update stop loss for trailing if (strategy.position_size > 0) // For long positions stop_loss := math.max(stop_loss, close - atr * atr_multiplier_sl) // Adjust take profit based on price movement take_profit := math.max(take_profit, close + atr * trailing_tp_multiplier) else if (strategy.position_size < 0) // For short positions stop_loss := math.min(stop_loss, close + atr * atr_multiplier_sl) // Adjust take profit based on price movement take_profit := math.min(take_profit, close - atr * trailing_tp_multiplier) // Set exit conditions strategy.exit("Long Exit", from_entry="Long", stop=stop_loss, limit=take_profit) strategy.exit("Short Exit", from_entry="Short", stop=stop_loss, limit=take_profit)