
Chiến lược giao dịch đồng bộ đa chu kỳ là một hệ thống giao dịch định lượng kết hợp các chỉ số kỹ thuật và phân tích đa chu kỳ. Cốt lõi của chiến lược này là đồng thời giám sát các động thái thị trường trong các chu kỳ thời gian ngắn (khoảng 15 phút) và dài (khoảng 4 giờ), xác nhận thông qua EMA (chỉ số di chuyển trung bình), MA (chỉ số di chuyển trung bình) và RSI (chỉ số tương đối yếu) để lọc các tín hiệu giả mạo và giao dịch chỉ khi nhiều chu kỳ cùng hướng.
Các nguyên tắc cốt lõi của chiến lược này dựa trên phân tích tổng hợp của nhiều chỉ số kỹ thuật trong nhiều khoảng thời gian, chủ yếu được chia thành các phần sau:
Phân tích nhiều chu kỳ thời gianChiến lược phân tích hai chu kỳ thời gian 15 phút (đầu vào) và 4 giờ (chỉ định xu hướng) để đảm bảo hướng giao dịch phù hợp với xu hướng thị trường lớn hơn.
Điều kiện nhập học::
Xu hướng được xác nhận ((chu kỳ 4 giờ)):
Yêu cầu chính xácChiến lược yêu cầu hoặc là EMA13 vừa đi qua EMA62 (được tạo thành giao điểm) hoặc giá vừa đi qua MA200, điều này cung cấp một điểm nhập cảnh chính xác hơn để tránh nhập cảnh mù quáng trong xu hướng đã kéo dài.
Cơ chế rút lui: cung cấp nhiều lựa chọn thoát, bao gồm chỉ số kỹ thuật đảo ngược (thay đổi mối quan hệ EMA hoặc RSI đạt mức quá mua / quá bán), ATR dừng động, dừng dừng phần trăm cố định và theo dõi dừng.
Phân tích đa chu kỳ thời gian có hệ thốngBằng cách phân tích tổng hợp tình hình thị trường trong các chu kỳ thời gian khác nhau, chiến lược có thể lọc ra tiếng ồn thị trường ngắn hạn, chỉ tham gia khi xu hướng rõ ràng và nhất quán, làm giảm đáng kể khả năng tín hiệu sai.
Cơ chế xác nhận đa dạng: Sự xác nhận đồng bộ của nhiều chỉ số như EMA, MA và RSI làm tăng độ tin cậy của tín hiệu giao dịch. Đặc biệt, yêu cầu EMA crossing hoặc giá phá vỡ là điều kiện kích hoạt, tăng độ chính xác của thời gian nhập.
Quản lý rủi ro linh hoạtChiến lược cung cấp nhiều tùy chọn kiểm soát rủi ro, bao gồm dừng động dựa trên ATR, dừng dừng phần trăm cố định và dừng theo dõi, cho phép thương nhân điều chỉnh các tham số rủi ro một cách linh hoạt theo sở thích rủi ro cá nhân và tình hình thị trường.
Xác nhận giao hàngĐiều kiện tăng khối lượng giao dịch được thêm vào để lọc thêm các đột phá giả mạo có thể xảy ra, bởi vì chuyển động giá thực sự thường đi kèm với tăng khối lượng giao dịch.
Giao diện hình ảnh: Chiến lược cung cấp một bảng hiển thị trực quan, hiển thị trạng thái và tín hiệu của các chỉ số, cho phép các nhà giao dịch hiểu rõ tình hình thị trường hiện tại và phán đoán chiến lược.
Khả năng tùy chỉnh caoChiến lược: Hầu như tất cả các tham số đều có thể được điều chỉnh thông qua các thiết lập đầu vào, bao gồm độ dài EMA, loại MA, tham số RSI, nhân kiểm soát rủi ro, v.v., cho phép các nhà giao dịch tối ưu hóa chiến lược cho các môi trường thị trường khác nhau.
Rủi ro biến động thị trường: Trong thị trường dao động ngang, EMA và MA có thể giao nhau thường xuyên, dẫn đến tăng tín hiệu sai và giao dịch thường xuyên, dẫn đến tổn thất liên tục. Giải pháp là thêm các điều kiện lọc bổ sung, chẳng hạn như phán đoán biến động hoặc xác nhận cường độ xu hướng, tạm dừng giao dịch khi được xác định rõ ràng là thị trường dao động.
Các tham số tối ưu hóa quá phù hợp: Các tham số chỉ số được tối ưu hóa quá mức có thể khiến chiến lược hoạt động tốt trên dữ liệu lịch sử nhưng không hiệu quả trong thị trường tương lai. Chúng tôi khuyên bạn nên sử dụng thử nghiệm dự đoán trước (Walk-Forward Analysis) để xác minh sự ổn định của chiến lược và thử nghiệm một tập hợp các tham số cố định trên nhiều loại giao dịch.
Rủi ro lỗ hổng lớn: Sau một sự kiện lớn hoặc bất ngờ, thị trường có thể có một lỗ hổng lớn, dẫn đến việc dừng lỗ không thể thực hiện ở mức dự kiến. Bạn có thể xem xét sử dụng quản lý vị trí thận trọng hơn hoặc tăng cơ chế điều chỉnh vị trí dựa trên biến động.
Hạn chế trong việc dựa vào các chỉ số định lượngChiến lược này hoàn toàn dựa vào các chỉ số kỹ thuật và bỏ qua các yếu tố cơ bản. Trước khi công bố dữ liệu kinh tế quan trọng hoặc thay đổi chính sách của ngân hàng trung ương, bạn có thể cân nhắc giảm vị trí hoặc tạm dừng giao dịch để tránh rủi ro từ tin tức bất ngờ.
Tín hiệu chậm phátCác chỉ số như EMA và MA có tính chậm trễ về bản chất, có thể dẫn đến tín hiệu chỉ khi xu hướng đã gần kết thúc. Nó có thể được cải thiện bằng cách điều chỉnh chu kỳ EMA hoặc kết hợp với các chỉ số hướng về phía trước khác (như biến đổi hình dạng giá hoặc biến động).
Tham gia vào môi trường thị trường lọcVí dụ, bạn có thể sử dụng ADX để định lượng cường độ của xu hướng và chỉ giao dịch khi xu hướng rõ ràng.
Cơ chế điều chỉnh tham số động: Chiến lược hiện tại sử dụng các tham số chỉ số kỹ thuật cố định, có thể xem xét các tham số điều chỉnh tự động dựa trên biến động thị trường. Ví dụ: sử dụng EMA ngắn hạn để nắm bắt biến động nhanh chóng trong môi trường biến động thấp và sử dụng EMA dài hạn để giảm tiếng ồn trong môi trường biến động cao.
Tối ưu hóa quản lý vị tríChiến lược hiện tại sử dụng quản lý quỹ tỷ lệ cố định, có thể được cải tiến thành quản lý vị trí động dựa trên biến động, dự đoán tỷ lệ thắng hoặc công thức Kelly để tối đa hóa lợi nhuận điều chỉnh rủi ro.
Thêm các yếu tố học máyGhi chú: Sử dụng các thuật toán học máy như cây quyết định hoặc rừng ngẫu nhiên để tối ưu hóa phân bổ trọng lượng cho các chỉ số hoặc dự đoán chiến lược nào có thể hoạt động tốt hơn trong môi trường thị trường.
Thêm bộ lọc cơ bản: Tự động điều chỉnh phạm vi dừng lỗ hoặc tạm ngưng giao dịch trước khi phát hành dữ liệu kinh tế quan trọng để đối phó với các sự kiện biến động cao tiềm ẩn.
Tối ưu hóa trọng lượng của nhiều chu kỳ thời gianChiến lược hiện tại đơn giản là yêu cầu xác nhận đồng bộ hai chu kỳ thời gian, có thể xem xét việc giới thiệu một hệ thống trọng lượng nhiều chu kỳ thời gian phức tạp hơn, đưa ra trọng lượng khác nhau cho các chu kỳ thời gian khác nhau, tạo thành điểm tổng hợp để đánh giá thời gian nhập cảnh.
Thêm phân tích theo mùaMột số loại giao dịch có thể có đặc điểm theo mùa về thời gian, có thể phân tích dữ liệu lịch sử để khai thác các mô hình này và điều chỉnh các tham số chiến lược hoặc thời gian giao dịch theo đó.
Chiến lược giao dịch đồng bộ động lực nhiều chu kỳ là một hệ thống giao dịch định lượng có cấu trúc, logic rõ ràng, lọc hiệu quả tiếng ồn thị trường thông qua phân tích nhiều chu kỳ và xác nhận đồng bộ đa chỉ số, nắm bắt cơ hội giao dịch có xác suất cao. Chiến lược tích hợp các chỉ số EMA, MA và RSI cổ điển trong phân tích kỹ thuật và nâng cao chất lượng giao dịch thông qua yêu cầu nhập cảnh chính xác và hệ thống quản lý rủi ro tốt hơn.
Ưu điểm lớn nhất của chiến lược này là cơ chế xác nhận nhiều lần và phân tích phối hợp nhiều chu kỳ, không chỉ làm giảm tín hiệu sai, mà còn đảm bảo giao dịch phù hợp với xu hướng chính. Đồng thời, các tùy chọn quản lý rủi ro hoàn chỉnh cho phép các nhà giao dịch có thể kiểm soát các lỗ hổng rủi ro một cách linh hoạt. Tuy nhiên, chiến lược cũng có rủi ro khi thị trường bị chấn động, các tham số được tối ưu hóa quá phù hợp và các chỉ số kỹ thuật bị tụt lại.
Các hướng tối ưu hóa trong tương lai chủ yếu tập trung vào phân loại môi trường thị trường, điều chỉnh động lượng tham số, ứng dụng học máy và tích hợp phân tích theo chiều thời gian nhiều hơn. Thông qua các phương pháp tối ưu hóa này, chiến lược có thể duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau, tiếp tục nâng cao tỷ lệ thắng và lợi nhuận điều chỉnh rủi ro.
Đối với các nhà giao dịch tìm kiếm một phương pháp giao dịch có hệ thống và có kỷ luật, chiến lược này cung cấp một khuôn khổ vững chắc, có thể được áp dụng trực tiếp hoặc được tùy chỉnh và mở rộng như nền tảng cho hệ thống giao dịch cá nhân.
/*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)