
एक बहु-समय गतिशीलता समन्वित व्यापार रणनीति एक मात्रात्मक व्यापार प्रणाली है जो तकनीकी संकेतकों और बहु-समय चक्र विश्लेषण को जोड़ती है। इस रणनीति का मूल एक साथ अल्पकालिक (१५ मिनट) और दीर्घकालिक (४ घंटे) समय चक्रों में बाजार की गति की निगरानी करना है, ईएमए (सूचकांक चलती औसत), एमए (चलती औसत) और आरएसआई (अपेक्षाकृत कमजोर संकेतक) के माध्यम से सामंजस्यपूर्ण पुष्टि के माध्यम से झूठे संकेतों को फ़िल्टर करना है, और केवल तभी व्यापार करना है जब कई समय चक्रों में एक ही दिशा में संयुक्त रूप से संकेत दिया जाता है। रणनीति ईएमए क्रॉसिंग, मूल्य ब्रेकडाउन और आरएसआई गतिशीलता की पुष्टि जैसी कई स्थितियों का उपयोग करती है, व्यापार की पुष्टि करने के लिए, बाजार में प्रवेश के लिए एक उच्च गुणवत्ता वाला संकेत प्रदान करने के लिए। इसके अलावा, रणनीति में एटीआर (औसत वास्तविक तरंग दैर्ध्य) पर आधारित गतिशील स्टॉप लॉस, फिक्स्ड स्टॉप लॉस प्रतिशत और नुकसान ट्रैकिंग जैसी जोखिम प्रबंधन सुविधाओं को एकीकृत करने के लिए एक पूर्ण व्यापार प्रणाली का गठन किया गया है।
इस रणनीति के मुख्य सिद्धांतों में कई तकनीकी संकेतकों के विश्लेषण पर आधारित है, जो मुख्य रूप से निम्नलिखित भागों में विभाजित हैंः
बहु-समय चक्र विश्लेषणरणनीतिः एक साथ 15 मिनट (प्रवेश) और 4 घंटे (प्रवृत्ति की पुष्टि) दो समय अवधि का विश्लेषण करें, यह सुनिश्चित करने के लिए कि व्यापार की दिशा बड़े बाजार के रुझानों के अनुरूप है।
प्रवेश की शर्तें (१५ मिनट का चक्र):
प्रवृत्ति की पुष्टि (चार घंटे की अवधि):
प्रवेश के लिए आवश्यक शर्तें: रणनीति के लिए आवश्यक है कि या तो ईएमए 13 ने ईएमए 62 को पार कर लिया है (एक चौराहा बनाने के लिए) या कीमत ने एमए 200 को पार कर लिया है, जो एक अधिक सटीक प्रवेश बिंदु प्रदान करता है और एक लंबे समय तक चलने वाली प्रवृत्ति में अंधेरे प्रवेश से बचा जाता है।
बाहर निकलने की व्यवस्था: कई प्रकार के विकल्प प्रदान किए गए हैं, जिनमें तकनीकी संकेतक रिवर्स (ईएमए रिलेशनशिप में बदलाव या आरएसआई ओवरबॉय / ओवरसोल तक पहुंच गया), एटीआर डायनामिक स्टॉप, फिक्स्ड प्रतिशत स्टॉप और ट्रैक स्टॉप शामिल हैं।
व्यवस्थित बहु-समय चक्र विश्लेषण: विभिन्न समय अवधि के लिए बाजार की स्थिति का समग्र विश्लेषण करके, रणनीति अल्पकालिक बाजार के शोर को फ़िल्टर करने में सक्षम है, केवल जब रुझान स्पष्ट और सुसंगत हो, तो प्रवेश करने से झूठे संकेतों की संभावना काफी कम हो जाती है।
एकाधिक सत्यापन तंत्र: ईएमए, एमए और आरएसआई जैसे कई संकेतकों की सामंजस्यपूर्ण पुष्टि के माध्यम से, ट्रेडिंग सिग्नल की विश्वसनीयता बढ़ जाती है। विशेष रूप से, ईएमए क्रॉसिंग या मूल्य ब्रेकडाउन को ट्रिगर की शर्त के रूप में पूछना, प्रवेश के समय की सटीकता को बढ़ाता है।
लचीला जोखिम प्रबंधन: रणनीति में एटीआर-आधारित गतिशील स्टॉप, फिक्स्ड प्रतिशत स्टॉप और ट्रैक किए गए स्टॉप सहित कई जोखिम नियंत्रण विकल्प प्रदान किए गए हैं, जिससे व्यापारियों को व्यक्तिगत जोखिम वरीयताओं और बाजार की स्थिति के आधार पर जोखिम मापदंडों को लचीले ढंग से समायोजित करने की अनुमति मिलती है।
लेनदेन की पुष्टि: लेन-देन की मात्रा में वृद्धि की शर्तें जोड़ी गई हैं, जिससे संभावित झूठे ब्रेकआउट को और फ़िल्टर किया जा सकता है, क्योंकि वास्तविक मूल्य आंदोलन आमतौर पर लेनदेन की मात्रा में वृद्धि के साथ होते हैं।
दृश्य इंटरफ़ेस: रणनीति एक सहज ज्ञान युक्त दृश्य पैनल प्रदान करती है, जो विभिन्न संकेतकों की स्थिति और संकेतों को प्रदर्शित करती है, जिससे व्यापारियों को वर्तमान बाजार की स्थिति और रणनीति के बारे में एक नज़र में जानकारी मिलती है।
उच्च अनुकूलन: रणनीति के लगभग सभी पैरामीटर को इनपुट सेटिंग्स के माध्यम से समायोजित किया जा सकता है, जिसमें ईएमए लंबाई, एमए प्रकार, आरएसआई पैरामीटर, जोखिम नियंत्रण गुणांक आदि शामिल हैं, जिससे व्यापारी विभिन्न बाजार स्थितियों के अनुसार रणनीति को अनुकूलित कर सकते हैं।
बाजार में उतार-चढ़ाव का खतरा: क्षैतिज अस्थिरता वाले बाजारों में, ईएमए और एमए अक्सर पार हो सकते हैं, जिससे गलत संकेतों में वृद्धि होती है और लगातार घाटे का कारण बनता है। समाधान अतिरिक्त फ़िल्टरिंग शर्तों को जोड़ना है, जैसे कि अस्थिरता के फैसले या प्रवृत्ति की ताकत की पुष्टि करना, और स्पष्ट रूप से अस्थिरता के रूप में पहचाने जाने पर व्यापार को रोकना।
पैरामीटर अनुकूलित ओवरफिट: अति-अनुकूलित सूचक पैरामीटर के कारण रणनीति ऐतिहासिक डेटा पर अच्छा प्रदर्शन कर सकती है, लेकिन भविष्य के बाजारों में विफल हो सकती है। रणनीति की स्थिरता को सत्यापित करने के लिए वॉक-फॉरवर्ड विश्लेषण का उपयोग करने की सिफारिश की जाती है और कई व्यापारिक किस्मों पर एक निश्चित पैरामीटर का परीक्षण किया जाता है।
एक बड़ा जोखिम: महत्वपूर्ण समाचार या आकस्मिक घटनाओं के बाद, बाजार में एक बड़ी खाई हो सकती है, जिसके कारण पूर्व निर्धारित स्तर पर रोक नहीं लगाई जा सकती है। अधिक रूढ़िवादी स्थिति प्रबंधन का उपयोग करने या अस्थिरता के आधार पर स्थिति समायोजन तंत्र को बढ़ाने पर विचार किया जा सकता है।
मात्रात्मकता पर निर्भरता की सीमाएं: रणनीति पूरी तरह से तकनीकी संकेतकों पर निर्भर करती है, मौलिक तत्वों की अनदेखी करती है। प्रमुख आर्थिक आंकड़ों की घोषणा या केंद्रीय बैंक नीति में बदलाव से पहले, स्थिति को कम करने या व्यापार को निलंबित करने पर विचार किया जा सकता है, ताकि अचानक खबरों के जोखिम से बचा जा सके।
सिग्नल विलंबता: ईएमए और एमए जैसे संकेतक स्वाभाविक रूप से पिछड़े हैं, जिससे यह संकेत हो सकता है कि एक प्रवृत्ति समाप्त होने के करीब है। ईएमए चक्र को समायोजित करके या अन्य अग्रिम संकेतकों (जैसे मूल्य पैटर्न या अस्थिरता में परिवर्तन) के साथ संयोजन करके सुधार किया जा सकता है।
फ़िल्टर में शामिल हों: आत्म-अनुकूली सूचक या बाजार संरचना निर्णय की शुरूआत करें, रणनीति चलाने से पहले वर्तमान बाजार की पहचान करें कि क्या यह ट्रेंडिंग मार्केट है या अस्थिर बाजार है, और तदनुसार ट्रेडिंग मापदंडों को समायोजित करें या व्यापार को रोक दें। उदाहरण के लिए, 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)