
کثیر وقت کی متحرک ہم آہنگی کی تجارت کی حکمت عملی ایک مقداری تجارتی نظام ہے جو تکنیکی اشارے اور کثیر وقت کی تجزیہ کو جوڑتی ہے۔ اس حکمت عملی کا بنیادی مقصد ایک ہی وقت میں قلیل ((15 منٹ) اور طویل ((4 گھنٹے) وقت کے دورانیے میں مارکیٹ کی نقل و حرکت کی نگرانی کرنا ہے ، EMA ((انڈیکس منتقل اوسط) ، MA ((موبائل اوسط) اور RSI ((نسبتاً کمزور اشارے) کے ذریعہ ہم آہنگی سے تصدیق شدہ جعلی سگنل کو فلٹر کرنا ، اور صرف اس وقت تجارت کرنا ہے جب کثیر وقت کی مدت ایک ہی سمت میں ہو۔ حکمت عملی EMA کراسنگ ، قیمت کی توڑ اور RSI کی متحرک تصدیق جیسے متعدد شرائط کو استعمال کرتی ہے ، تجارت کی تصدیق کے لئے ، مارکیٹ میں اعلی معیار کے داخلے کے سگنل فراہم کرتی ہے۔ اس کے علاوہ ، حکمت عملی میں متحرک اسٹاپ نقصانات ، فکسڈ اسٹاپ نقصان کا فیصد ، اور نقصانات کی کھوج جیسے خطرے سے متعلق انتظامی خصوصیات کو مربوط کرنے کے لئے ایک مکمل تجارتی نظام تشکیل دیا گیا ہے۔
اس حکمت عملی کا بنیادی اصول متعدد تکنیکی اشارے پر مبنی ہے جو متعدد ٹائم پیریڈ پر جامع تجزیہ پر مبنی ہے ، جس میں بنیادی طور پر مندرجہ ذیل حصوں میں تقسیم کیا گیا ہے:
ملٹی ٹائم سائیکل تجزیہحکمت عملی: ایک ہی وقت میں 15 منٹ ((داخلہ) اور 4 گھنٹے ((رجحان کی تصدیق) کے دو ٹائم پیریڈ کا تجزیہ کریں ، اس بات کو یقینی بنائیں کہ تجارت کی سمت بڑے مارکیٹ کے رجحانات کے مطابق ہو۔
داخلے کی شرائط ((15 منٹ کا دورانیہ):
رجحان کی توثیق ((چار گھنٹے کے دورانیے):
داخلہ کی ضروریاتاسٹریٹجی کا مطلب ہے کہ یا تو EMA13 نے ابھی EMA62 کو عبور کیا ہے ((ایک کراس تشکیل دیا گیا ہے) ، یا قیمت ابھی MA200 کو عبور کرچکی ہے ، جس سے اندھے اندراج سے بچنے کے لئے ایک زیادہ درست نقطہ نظر فراہم کیا گیا ہے ، جو طویل عرصے سے جاری رجحان میں ہے۔
واپسی کا طریقہ کار: تکنیکی اشارے کے الٹ جانے (ای ایم اے کا رشتہ تبدیل ہوجاتا ہے یا آر ایس آئی زیادہ خرید / زیادہ فروخت ہوجاتا ہے) ، اے ٹی آر متحرک اسٹاپ ، فکسڈ فی صد اسٹاپ اسٹاپ اور ٹریکنگ اسٹاپ سمیت متعدد آپشنز پیش کیے گئے ہیں۔
نظام سازی کثیر وقتی دورانیہ تجزیہ: مختلف ٹائم فریموں میں مارکیٹ کی صورتحال کا جامع تجزیہ کرکے ، حکمت عملی قلیل مدتی مارکیٹ کے شور کو فلٹر کرنے میں کامیاب ہے ، اور صرف اس وقت داخل ہوتی ہے جب رجحانات واضح اور یکساں ہوتے ہیں ، جس سے غلط سگنل کا امکان بہت کم ہوجاتا ہے۔
ایک سے زیادہ توثیق کا طریقہ کار: EMA ، MA اور RSI جیسے متعدد اشارے کی ہم آہنگی سے تصدیق ، ٹریڈنگ سگنل کی وشوسنییتا میں اضافہ کرتی ہے۔ خاص طور پر ، EMA کراسنگ یا قیمت میں اضافے کی ضرورت ہوتی ہے ، جس سے داخلے کے وقت کی درستگی میں اضافہ ہوتا ہے۔
لچکدار خطرے کا انتظاماسٹریٹجی میں متعدد رسک کنٹرول آپشنز ہیں جن میں اے ٹی آر پر مبنی متحرک اسٹاپ ، فکسڈ فی صد اسٹاپ اسٹاپ اور ٹریکنگ اسٹاپ شامل ہیں ، جس سے تاجر کو ذاتی خطرے کی ترجیحات اور مارکیٹ کی صورتحال کے مطابق خطرے کے پیرامیٹرز کو لچکدار انداز میں ایڈجسٹ کرنے کی اجازت ملتی ہے۔
ترسیل کی تصدیققیمتوں میں اضافے کی شرط کو شامل کیا گیا ہے ، جس سے ممکنہ طور پر جعلی بریک آؤٹ کو مزید فلٹر کیا جاسکتا ہے ، کیونکہ قیمتوں میں حقیقی نقل و حرکت عام طور پر تجارت کے حجم میں اضافے کے ساتھ ہوتی ہے۔
بصری انٹرفیسحکمت عملی: حکمت عملی ایک بدیہی بصری پینل فراہم کرتی ہے جس میں مختلف اشارے کی حیثیت اور سگنل دکھائے جاتے ہیں ، جس سے تاجر کو مارکیٹ کی موجودہ صورتحال اور حکمت عملی کے فیصلے کے بارے میں ایک نظر میں سمجھنے میں مدد ملتی ہے۔
اعلی حسب ضرورت: حکمت عملی کے تقریبا تمام پیرامیٹرز کو ان پٹ کی ترتیبات کے ذریعہ ایڈجسٹ کیا جاسکتا ہے ، بشمول ای ایم اے کی لمبائی ، ایم اے کی قسم ، آر ایس آئی پیرامیٹرز ، رسک کنٹرول ضرب وغیرہ ، تاجر کو مختلف مارکیٹ کے حالات کے مطابق حکمت عملی کو بہتر بنانے کی اجازت دیتا ہے۔
مارکیٹ میں ہلچل: افقی طور پر ہلچل مچانے والی مارکیٹوں میں ، ای ایم اے اور ایم اے اکثر کراس ہوسکتے ہیں ، جس سے غلط سگنل میں اضافہ ہوتا ہے اور بار بار تجارت ہوتی ہے ، جس سے مسلسل نقصان ہوتا ہے۔ اس کا حل یہ ہے کہ اضافی فلٹرنگ شرائط شامل کی جائیں ، جیسے اتار چڑھاؤ کا فیصلہ یا رجحان کی طاقت کی تصدیق ، اور جب یہ واضح طور پر ہلچل مچانے والی مارکیٹ کے طور پر پہچانا جاتا ہے تو تجارت کو روکنا۔
پیرامیٹرز کو بہتر بنانے کے لئے overmatched: اشارے کے پیرامیٹرز کو زیادہ سے زیادہ بہتر بنانے سے حکمت عملی کا تاریخی اعداد و شمار پر عمدہ کارکردگی کا مظاہرہ ہوسکتا ہے ، لیکن مستقبل کی منڈیوں میں اس کی ناکامی ہوسکتی ہے۔ حکمت عملی کی استحکام کی توثیق کرنے کے لئے واک فارورڈ تجزیہ کا استعمال کرنے کی سفارش کی جاتی ہے ، اور متعدد تجارتی اقسام پر پیرامیٹرز کے ایک مقررہ سیٹ کی جانچ کی جاتی ہے۔
بڑے پیمانے پر خلا کا خطرہ: اہم خبروں یا اچانک واقعات کے بعد ، مارکیٹ میں بڑے پیمانے پر خلا پیدا ہوسکتا ہے ، جس کی وجہ سے اسٹاپ نقصان پہلے سے طے شدہ سطح پر نہیں کیا جاسکتا ہے۔ زیادہ محتاط پوزیشن مینجمنٹ کا استعمال کرنے یا اتار چڑھاؤ پر مبنی پوزیشن ایڈجسٹمنٹ میکانزم میں اضافے پر غور کیا جاسکتا ہے۔
پیمائش کے اشارے پر انحصار کی حدوداس حکمت عملی میں بنیادی عوامل کو نظرانداز کیا گیا ہے۔ اہم معاشی اعداد و شمار کی اشاعت یا مرکزی بینک کی پالیسی میں تبدیلی سے پہلے ، پوزیشنوں کو کم کرنے یا تجارت کو معطل کرنے پر غور کیا جاسکتا ہے ، تاکہ اچانک خبروں سے پیدا ہونے والے خطرات سے بچا جاسکے۔
سگنل کی تاخیر: ای ایم اے اور ایم اے جیسے اشارے فطری طور پر پسماندہ ہیں ، جس کی وجہ سے رجحان اختتام کے قریب ہونے پر ہی سگنل مل سکتا ہے۔ ای ایم اے کے دور کو ایڈجسٹ کرکے یا دوسرے فارورڈ اشارے (جیسے قیمت کی شکل یا اتار چڑھاؤ کی شرح میں تبدیلی) کے ساتھ مل کر اس میں بہتری لائی جاسکتی ہے۔
مارکیٹ کے ماحول میں شامل ہونے کا فلٹر: اپنے آپ کو ایڈجسٹ کرنے والے اشارے یا مارکیٹ ڈھانچے کا فیصلہ متعارف کروائیں ، حکمت عملی کو چلانے سے پہلے موجودہ مارکیٹ کی شناخت کریں کہ آیا یہ رجحان کی منڈی ہے یا زلزلے کی منڈی ہے ، اور اس کے مطابق تجارت کے پیرامیٹرز کو ایڈجسٹ کریں یا تجارت کو روکیں۔ مثال کے طور پر ، رجحان کی طاقت کی مقدار کے لئے ADX ((اوسط سمت اشارے) کا استعمال کیا جاسکتا ہے ، اور صرف اس وقت تجارت کی جاسکتی ہے جب رجحان واضح ہو۔
متحرک پیرامیٹرز ایڈجسٹمنٹ میکانزم: موجودہ حکمت عملی میں فکسڈ ٹیکنیکل اشارے کے پیرامیٹرز کا استعمال کیا جاتا ہے ، مارکیٹ میں اتار چڑھاؤ کی شرح پر مبنی خود کار طریقے سے ایڈجسٹ کرنے والے پیرامیٹرز پر غور کیا جاسکتا ہے۔ مثال کے طور پر ، کم اتار چڑھاؤ والے ماحول میں مختصر مدت کے ای ایم اے کا استعمال کرتے ہوئے تیزی سے اتار چڑھاؤ کو پکڑیں ، اور اعلی اتار چڑھاؤ والے ماحول میں طویل مدت کے ای ایم اے کا استعمال کرتے ہوئے شور کو کم کریں۔
پوزیشن مینجمنٹ کو بہتر بنائیں: موجودہ حکمت عملی میں فکسڈ فی صد فنڈ مینجمنٹ کا استعمال کیا جاتا ہے ، جو متحرک پوزیشن مینجمنٹ میں بہتر ہوسکتا ہے جو اتار چڑھاؤ ، جیت کی توقع یا کیلی فارمولے پر مبنی ہوتا ہے تاکہ خطرے سے متعلق منافع کو زیادہ سے زیادہ کیا جاسکے۔
مشین سیکھنے کے عناصر شامل کریں: مشین لرننگ الگورتھم متعارف کروائیں ، جیسے فیصلے کے درخت یا بے ترتیب جنگل ، تاکہ ہر اشارے کو بہتر طور پر وزن دیا جاسکے ، یا یہ پیش گوئی کی جاسکے کہ مارکیٹ کے ماحول میں کون سی حکمت عملی بہتر کارکردگی کا مظاہرہ کرسکتی ہے۔
بنیادی فلٹر شامل کریں: اہم اقتصادی اعداد و شمار کے اجراء سے قبل اسٹاپ نقصان کی حد کو خود بخود ایڈجسٹ کریں یا ممکنہ اعلی اتار چڑھاؤ کے واقعات کے جواب میں تجارت کو معطل کریں۔
ملٹی ٹائم سائیکل وزن کو بہتر بنائیں: موجودہ حکمت عملی میں آسانی سے دو ٹائم سیکنڈ کی ہم آہنگی کی تصدیق کی ضرورت ہوتی ہے ، اس سے زیادہ پیچیدہ کثیر ٹائم سیکنڈ وزن والے نظام کو متعارف کرانے پر غور کیا جاسکتا ہے ، جس میں مختلف ٹائم سیکنڈ کو مختلف وزن دیا جاتا ہے ، تاکہ انٹری کے وقت کا فیصلہ کرنے کے لئے ایک جامع اسکور تشکیل دیا جاسکے۔
موسمی تجزیہ میں اضافہ: کچھ تجارتی اقسام میں وقت کے ساتھ موسمی خصوصیات ہوسکتی ہیں ، ان نمونوں کو کھودنے کے لئے تاریخی اعداد و شمار کا تجزیہ کیا جاسکتا ہے ، اور اس کے مطابق حکمت عملی کے پیرامیٹرز یا تجارتی وقت کو ایڈجسٹ کیا جاسکتا ہے۔
ایک کثیر وقت کی متحرک ہم آہنگ تجارتی حکمت عملی ایک ساختہ ، منطقی طور پر واضح ، مقداری تجارتی نظام ہے ، جو کثیر وقت کی مدت کے تجزیہ اور کثیر اشارے کی ہم آہنگی کی تصدیق کے ذریعہ مارکیٹ کے شور کو مؤثر طریقے سے فلٹر کرتا ہے ، اعلی امکانات کے تجارتی مواقع کو پکڑتا ہے۔ حکمت عملی تکنیکی تجزیہ میں کلاسیکی اشارے ای ایم اے ، ایم اے اور آر ایس آئی کو مربوط کرتی ہے ، اور عین مطابق داخلے کی ضروریات اور بہتر رسک مینجمنٹ سسٹم کے ذریعہ تجارت کے معیار کو بہتر بناتی ہے۔
اس حکمت عملی کا سب سے بڑا فائدہ اس کی متعدد تصدیق کے طریقہ کار اور کثیر ٹائم سائیکل ہم آہنگی تجزیہ میں ہے ، جو نہ صرف جعلی سگنل کو کم کرتا ہے بلکہ اس بات کو بھی یقینی بناتا ہے کہ تجارت اہم رجحانات کے مطابق ہے۔ اس کے علاوہ ، خطرے کے انتظام کے مکمل اختیارات تاجر کو خطرے کے گیج کو کنٹرول کرنے میں لچکدار بناتے ہیں۔ تاہم ، اس حکمت عملی میں مارکیٹ کی خراب کارکردگی ، پیرامیٹرز کو زیادہ سے زیادہ بہتر بنانے اور تکنیکی اشارے کے پیچھے پڑنے کا خطرہ بھی ہے۔
مستقبل میں اصلاح کی سمت بنیادی طور پر مارکیٹ کے ماحول کی درجہ بندی ، پیرامیٹرز کی متحرک ایڈجسٹمنٹ ، مشین لرننگ ایپلی کیشنز اور زیادہ وقت کے طول و عرض کے تجزیات کو مربوط کرنے پر مرکوز ہے۔ ان اصلاحات کے ذریعہ ، حکمت عملی کو مختلف مارکیٹ کے ماحول میں مستحکم کارکردگی برقرار رکھنے ، کامیابی کی شرح اور خطرے سے متعلق آمدنی کو مزید بہتر بنانے کی امید ہے۔
یہ حکمت عملی ایک مضبوط فریم ورک فراہم کرتی ہے جو تاجروں کو منظم اور نظم و ضبط کے ساتھ تجارت کرنے کے لئے تلاش کرتی ہے، جو براہ راست لاگو کیا جا سکتا ہے یا انفرادی ٹریڈنگ سسٹم کی بنیاد کے طور پر اپنی مرضی کے مطابق اور بڑھا جا سکتا ہے.
/*backtest
start: 2024-03-25 00:00:00
end: 2025-03-24 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// Advanced Multi-Timeframe EMA/MA/RSI Strategy
// Uses 4h for confluence and 15m for entry
// Version 6
//@version=6
strategy("Forex Fire EMA/MA/RSI Strategy", overlay=true,
default_qty_type=strategy.percent_of_equity, default_qty_value=100,
initial_capital=10000, pyramiding=0, calc_on_every_tick=true)
// Input parameters with sections
// Timeframe inputs
tf_entry = input.string("15", title="Entry Timeframe", options=["1", "5", "15", "30", "60", "120"], group="Timeframes")
tf_confluence = input.string("240", title="Confluence Timeframe", options=["60", "240", "D", "W"], group="Timeframes")
// Indicator settings
ema_short_length = input.int(13, title="EMA Short Length", minval=5, maxval=50, group="EMAs")
ema_long_length = input.int(62, title="EMA Long Length", minval=20, maxval=200, group="EMAs")
ma_length = input.int(200, title="Moving Average Length", minval=50, maxval=500, group="Moving Average")
ma_type = input.string("SMA", title="MA Type", options=["SMA", "EMA", "WMA", "VWMA"], group="Moving Average")
// RSI settings
rsi_slow_length = input.int(28, title="RSI Slow Length", minval=14, maxval=50, group="RSI")
rsi_fast_length = input.int(7, title="RSI Fast Length", minval=3, maxval=14, group="RSI")
rsi_overbought = input.int(70, title="RSI Overbought Level", minval=60, maxval=90, group="RSI")
rsi_oversold = input.int(30, title="RSI Oversold Level", minval=10, maxval=40, group="RSI")
// Strategy parameters
use_atr_exits = input.bool(true, title="Use ATR for Exit Targets", group="Strategy Settings")
atr_multiplier = input.float(2.0, title="ATR Multiplier for Exits", minval=1.0, maxval=5.0, step=0.1, group="Strategy Settings")
atr_length = input.int(14, title="ATR Length", minval=5, maxval=30, group="Strategy Settings")
use_stop_loss = input.bool(true, title="Use Stop Loss", group="Risk Management")
stop_loss_percent = input.float(2.0, title="Stop Loss (%)", minval=0.5, maxval=10.0, step=0.5, group="Risk Management")
use_take_profit = input.bool(true, title="Use Take Profit", group="Risk Management")
take_profit_percent = input.float(4.0, title="Take Profit (%)", minval=1.0, maxval=20.0, step=1.0, group="Risk Management")
use_trailing_stop = input.bool(true, title="Use Trailing Stop", group="Risk Management")
trailing_percent = input.float(1.5, title="Trailing Stop (%)", minval=0.5, maxval=5.0, step=0.1, group="Risk Management")
// Visual settings
show_plot = input.bool(true, title="Show Indicator Plots", group="Visuals")
show_signals = input.bool(true, title="Show Entry/Exit Signals", group="Visuals")
show_table = input.bool(true, title="Show Info Table", group="Visuals")
// Helper function for MA type
f_ma(src, length, type) =>
switch type
"SMA" => ta.sma(src, length)
"EMA" => ta.ema(src, length)
"WMA" => ta.wma(src, length)
"VWMA" => ta.vwma(src, length)
=> ta.sma(src, length)
// ATR for dynamic exits
atr_value = ta.atr(atr_length)
// Indicators for Entry timeframe
ema_short_entry = ta.ema(close, ema_short_length)
ema_long_entry = ta.ema(close, ema_long_length)
ma_entry = f_ma(close, ma_length, ma_type)
rsi_slow_entry = ta.rsi(close, rsi_slow_length)
rsi_fast_entry = ta.rsi(close, rsi_fast_length)
// Indicators for Confluence timeframe
ema_short_conf = request.security(syminfo.tickerid, tf_confluence, ta.ema(close, ema_short_length), barmerge.gaps_off, barmerge.lookahead_off)
ema_long_conf = request.security(syminfo.tickerid, tf_confluence, ta.ema(close, ema_long_length), barmerge.gaps_off, barmerge.lookahead_off)
ma_conf = request.security(syminfo.tickerid, tf_confluence, f_ma(close, ma_length, ma_type), barmerge.gaps_off, barmerge.lookahead_off)
rsi_slow_conf = request.security(syminfo.tickerid, tf_confluence, ta.rsi(close, rsi_slow_length), barmerge.gaps_off, barmerge.lookahead_off)
rsi_fast_conf = request.security(syminfo.tickerid, tf_confluence, ta.rsi(close, rsi_fast_length), barmerge.gaps_off, barmerge.lookahead_off)
// Volume confirmation
volume_increasing = volume > ta.sma(volume, 20)
// Plotting indicators - completely outside of conditional blocks
// We'll use the show_plot variable directly in the color transparency
ema_short_plot_color = show_plot ? color.new(color.green, 0) : color.new(color.green, 100)
ema_long_plot_color = show_plot ? color.new(color.red, 0) : color.new(color.red, 100)
ma_plot_color = show_plot ? color.new(color.blue, 0) : color.new(color.blue, 100)
plot(ema_short_entry, title="EMA Short (Entry)", color=ema_short_plot_color, linewidth=2)
plot(ema_long_entry, title="EMA Long (Entry)", color=ema_long_plot_color, linewidth=2)
plot(ma_entry, title="MA (Entry)", color=ma_plot_color, linewidth=2)
// Define entry conditions for Entry timeframe
long_entry_condition = ema_short_entry > ema_long_entry and close > ma_entry and rsi_fast_entry > rsi_slow_entry and rsi_fast_entry > 50 and volume_increasing
short_entry_condition = ema_short_entry < ema_long_entry and close < ma_entry and rsi_fast_entry < rsi_slow_entry and rsi_fast_entry < 50 and volume_increasing
// Define confluence conditions from Confluence timeframe
long_confluence = ema_short_conf > ema_long_conf and close > ma_conf and rsi_slow_conf > 40 and rsi_fast_conf > rsi_slow_conf
short_confluence = ema_short_conf < ema_long_conf and close < ma_conf and rsi_slow_conf < 60 and rsi_fast_conf < rsi_slow_conf
// Advanced entry conditions
ema_crossover = ta.crossover(ema_short_entry, ema_long_entry)
ema_crossunder = ta.crossunder(ema_short_entry, ema_long_entry)
price_crossover_ma = ta.crossover(close, ma_entry)
price_crossunder_ma = ta.crossunder(close, ma_entry)
// Enhanced strategy conditions combining both timeframes with crossovers
long_condition = (long_entry_condition and long_confluence) and (ema_crossover or price_crossover_ma)
short_condition = (short_entry_condition and short_confluence) and (ema_crossunder or price_crossunder_ma)
// Exit conditions
long_exit_technical = ema_short_entry < ema_long_entry or rsi_fast_entry > rsi_overbought
short_exit_technical = ema_short_entry > ema_long_entry or rsi_fast_entry < rsi_oversold
// Strategy execution
var float entry_price = 0.0
var float stop_loss_level = 0.0
var float take_profit_level = 0.0
var float trailing_stop_level = 0.0
if (long_condition)
entry_price := close
stop_loss_level := use_stop_loss ? close * (1 - stop_loss_percent / 100) : 0.0
take_profit_level := use_take_profit ? close * (1 + take_profit_percent / 100) : 0.0
trailing_stop_level := use_trailing_stop ? close * (1 - trailing_percent / 100) : 0.0
strategy.entry("Long", strategy.long)
if (short_condition)
entry_price := close
stop_loss_level := use_stop_loss ? close * (1 + stop_loss_percent / 100) : 0.0
take_profit_level := use_take_profit ? close * (1 - take_profit_percent / 100) : 0.0
trailing_stop_level := use_trailing_stop ? close * (1 + trailing_percent / 100) : 0.0
strategy.entry("Short", strategy.short)
// Handle stops and exits
if strategy.position_size > 0
// Update trailing stop for longs
if use_trailing_stop and close > entry_price
trail_level = close * (1 - trailing_percent / 100)
trailing_stop_level := math.max(trailing_stop_level, trail_level)
// Exit conditions for longs
if (use_stop_loss and low < stop_loss_level and stop_loss_level > 0) or
(use_take_profit and high > take_profit_level and take_profit_level > 0) or
(use_trailing_stop and low < trailing_stop_level and trailing_stop_level > 0) or
(long_exit_technical)
strategy.close("Long")
if strategy.position_size < 0
// Update trailing stop for shorts
if use_trailing_stop and close < entry_price
trail_level = close * (1 + trailing_percent / 100)
trailing_stop_level := math.min(trailing_stop_level, trail_level)
// Exit conditions for shorts
if (use_stop_loss and high > stop_loss_level and stop_loss_level > 0) or
(use_take_profit and low < take_profit_level and take_profit_level > 0) or
(use_trailing_stop and high > trailing_stop_level and trailing_stop_level > 0) or
(short_exit_technical)
strategy.close("Short")
// ATR-based exits
if use_atr_exits and strategy.position_size != 0
atr_stop_long = strategy.position_size > 0 ? close - (atr_value * atr_multiplier) : 0.0
atr_stop_short = strategy.position_size < 0 ? close + (atr_value * atr_multiplier) : 0.0
if strategy.position_size > 0 and low <= atr_stop_long
strategy.close("Long", comment="ATR Exit")
if strategy.position_size < 0 and high >= atr_stop_short
strategy.close("Short", comment="ATR Exit")
// Visual signals on chart - completely outside conditional blocks
// Define plot conditions with show_signals incorporated
longEntryPlot = long_condition and show_signals
shortEntryPlot = short_condition and show_signals
longExitPlot = strategy.position_size > 0 and (long_exit_technical or
(use_stop_loss and low < stop_loss_level and stop_loss_level > 0) or
(use_take_profit and high > take_profit_level and take_profit_level > 0) or
(use_trailing_stop and low < trailing_stop_level and trailing_stop_level > 0)) and show_signals
shortExitPlot = strategy.position_size < 0 and (short_exit_technical or
(use_stop_loss and high > stop_loss_level and stop_loss_level > 0) or
(use_take_profit and low < take_profit_level and take_profit_level > 0) or
(use_trailing_stop and high > trailing_stop_level and trailing_stop_level > 0)) and show_signals
// Move plotshape outside of any conditional block
plotshape(series=longEntryPlot, title="Long Entry", style=shape.triangleup, location=location.belowbar,
color=color.new(color.green, 0), size=size.small)
plotshape(series=shortEntryPlot, title="Short Entry", style=shape.triangledown, location=location.abovebar,
color=color.new(color.red, 0), size=size.small)
plotshape(series=longExitPlot, title="Long Exit", style=shape.circle, location=location.abovebar,
color=color.new(color.orange, 0), size=size.small)
plotshape(series=shortExitPlot, title="Short Exit", style=shape.circle, location=location.belowbar,
color=color.new(color.orange, 0), size=size.small)
// Info table
if show_table
var table info = table.new(position.top_right, 3, 7, color.new(color.black, 0), color.new(color.white, 0), 2, color.new(color.gray, 0), 2)
table.cell(info, 0, 0, "INDICATOR", bgcolor=color.new(color.blue, 10), text_color=color.white)
table.cell(info, 1, 0, "ENTRY (" + tf_entry + ")", bgcolor=color.new(color.blue, 10), text_color=color.white)
table.cell(info, 2, 0, "CONF (" + tf_confluence + ")", bgcolor=color.new(color.blue, 10), text_color=color.white)
table.cell(info, 0, 1, "EMA Relation", bgcolor=color.new(color.gray, 10), text_color=color.white)
table.cell(info, 1, 1, ema_short_entry > ema_long_entry ? "Bullish" : "Bearish",
bgcolor=ema_short_entry > ema_long_entry ? color.new(color.green, 20) : color.new(color.red, 20),
text_color=color.white)
table.cell(info, 2, 1, ema_short_conf > ema_long_conf ? "Bullish" : "Bearish",
bgcolor=ema_short_conf > ema_long_conf ? color.new(color.green, 20) : color.new(color.red, 20),
text_color=color.white)
table.cell(info, 0, 2, "Price vs MA", bgcolor=color.new(color.gray, 10), text_color=color.white)
table.cell(info, 1, 2, close > ma_entry ? "Above" : "Below",
bgcolor=close > ma_entry ? color.new(color.green, 20) : color.new(color.red, 20),
text_color=color.white)
table.cell(info, 2, 2, close > ma_conf ? "Above" : "Below",
bgcolor=close > ma_conf ? color.new(color.green, 20) : color.new(color.red, 20),
text_color=color.white)
table.cell(info, 0, 3, "RSI Fast vs Slow", bgcolor=color.new(color.gray, 10), text_color=color.white)
table.cell(info, 1, 3, rsi_fast_entry > rsi_slow_entry ? "Bullish" : "Bearish",
bgcolor=rsi_fast_entry > rsi_slow_entry ? color.new(color.green, 20) : color.new(color.red, 20),
text_color=color.white)
table.cell(info, 2, 3, rsi_fast_conf > rsi_slow_conf ? "Bullish" : "Bearish",
bgcolor=rsi_fast_conf > rsi_slow_conf ? color.new(color.green, 20) : color.new(color.red, 20),
text_color=color.white)
table.cell(info, 0, 4, "Volume", bgcolor=color.new(color.gray, 10), text_color=color.white)
table.cell(info, 1, 4, volume_increasing ? "Increasing" : "Decreasing",
bgcolor=volume_increasing ? color.new(color.green, 20) : color.new(color.red, 20),
text_color=color.white)
table.cell(info, 2, 4, "n/a", bgcolor=color.new(color.gray, 40), text_color=color.white)
table.cell(info, 0, 5, "Entry Signal", bgcolor=color.new(color.gray, 10), text_color=color.white)
table.cell(info, 1, 5, long_entry_condition ? "Long" : (short_entry_condition ? "Short" : "None"),
bgcolor=long_entry_condition ? color.new(color.green, 20) : (short_entry_condition ? color.new(color.red, 20) : color.new(color.gray, 40)),
text_color=color.white)
table.cell(info, 2, 5, long_confluence ? "Long" : (short_confluence ? "Short" : "None"),
bgcolor=long_confluence ? color.new(color.green, 20) : (short_confluence ? color.new(color.red, 20) : color.new(color.gray, 40)),
text_color=color.white)
table.cell(info, 0, 6, "Final Signal", bgcolor=color.new(color.blue, 10), text_color=color.white)
table.cell(info, 1, 6, long_condition ? "LONG" : (short_condition ? "SHORT" : "NONE"),
bgcolor=long_condition ? color.new(color.green, 0) : (short_condition ? color.new(color.red, 0) : color.new(color.gray, 20)),
text_color=color.white)
table.cell(info, 2, 6, strategy.position_size > 0 ? "In LONG" : (strategy.position_size < 0 ? "In SHORT" : "No Position"),
bgcolor=strategy.position_size > 0 ? color.new(color.green, 20) : (strategy.position_size < 0 ? color.new(color.red, 20) : color.new(color.gray, 40)),
text_color=color.white)